Browse Source

阶段性提交

soft5566 2 years ago
parent
commit
b56c6b2a6c

+ 43 - 32
src/api/accountMgr.js

@@ -2,32 +2,31 @@ import request from '@/utils/request';
 
 // 获取账号列表数据
 export function getTableData(forData) {
-	let data = new FormData();
-	data.append('page', forData.page);
-	data.append('rows', forData.rows);
-  
+	let query = '?page=' + forData.page + '&rows=' + forData.rows
+	
+	if (typeof forData.adminName !== 'undefined') {
+		query += '&adminName=' + forData.adminName
+	}
+
 	return request({
-		url: '/adminlist.action',
-		method: 'post',
-		data
+		url: '/adminqueryPage.action' + query,
+		method: 'get'
 	});
 };
 
 // 新增管理员
 export function addAccount(param) {
-	let data = {
-		admin_name: param.username,
-		phone: param.phone,
-		password: param.password,
-		level: param.checkedRole[0] == '超级管理员' ? 2 : 1,
-		user_name: param.fullname,
-		remark: param.comment,
-    admin_power: '1,2,3,4,5,6',
-		// card_number: param.cardNumber
-	};
-  
+	let data = new FormData();
+	data.append('adminName', param.username);
+	data.append('phone', param.phone);
+	data.append('password', param.password);
+	data.append('level', param.checkedRole[0] == '超级管理员' ? 2 : 1);
+	data.append('userName', param.fullname);
+	data.append('remark', param.comment);
+	data.append('adminPower', '1,2,3');
+	
 	return request({
-		url: '/admininsert.action',
+		url: '/admininsertAdmin.action',
 		method: 'post',
 		data
 	});
@@ -35,19 +34,18 @@ export function addAccount(param) {
 
 // 修改管理员
 export function modifyAccount(param) {
-	let data = {
-		id: param.id,
-		admin_name: param.username,
-		phone: param.phone,
-		password: param.password,
-		user_name: param.fullname,
-		level: param.checkedRole[0] == '超级管理员' ? 2 : 1,
-		remark: param.comment,
-    admin_power: '1,2,3,4,5,6',
-		// card_number: param.cardNumber
-	};
+	let data = new FormData();
+	data.append('id', param.id);
+	data.append('adminName', param.username);
+	data.append('phone', param.phone);
+	data.append('password', param.password);
+	data.append('level', param.checkedRole[0] == '超级管理员' ? 2 : 1);
+	data.append('userName', param.fullname);
+	data.append('remark', param.comment);
+	data.append('adminPower', '1,2,3');
+	
 	return request({
-		url: '/adminupdate.action',
+		url: '/adminupdateAdmin.action',
 		method: 'post',
 		data
 	});
@@ -57,8 +55,21 @@ export function modifyAccount(param) {
 export function deleteAccount(param) {
 	let data = new FormData();
 	data.append('id', param);
+	
+	return request({
+		url: '/admindelAdmin.action',
+		method: 'post',
+		data
+	});
+};
+
+// 重置管理员
+export function resetAccountPassword(param) {
+	let data = new FormData();
+	data.append('id', param);
+	
 	return request({
-		url: '/admindel.action',
+		url: '/adminremovePwd.action',
 		method: 'post',
 		data
 	});

+ 99 - 0
src/api/residentialhostelMgr.js

@@ -0,0 +1,99 @@
+import request from '@/utils/request';
+
+// 获取列表数据
+export function getTableData(forData) {
+	let query = '?page=' + forData.page + '&rows=' + forData.rows
+
+	if (typeof forData.adminName !== 'undefined') {
+		query += '&adminName=' + forData.adminName
+	}
+
+	if (typeof forData.hotelTownship !== 'undefined') {
+		query += '&hotelTownship=' + forData.hotelTownship
+	}
+
+	if (typeof forData.level !== 'undefined') {
+		query += '&level=' + forData.level
+	}
+
+	return request({
+		url: '/managerAdminqueryPage.action' + query,
+		method: 'get'
+	});
+};
+
+// 获取乡镇配置列表
+export function getTowns() {
+	let query = '?code=10'
+
+	return request({
+		url: '/hotelqueryList.action' + query,
+		method: 'get'
+	});
+};
+
+// 新增民宿
+export function addHostel(param) {
+	let data = new FormData();
+	data.append('hotelName', param.hotelName);
+	data.append('corpnName', param.corpnName);
+	data.append('corpnPhone', param.corpnPhone);
+	data.append('hotelTownship', param.id);
+	data.append('adminName', param.adminName);
+	data.append('bankCard', param.bankCard);
+	data.append('cardName', param.cardName);
+	data.append('bankName', param.bankName);
+	data.append('fileListJson', param.fileList);
+	data.append('password', 'Jams123456');
+
+	return request({
+		url: '/managerAdmininsertAdmin.action',
+		method: 'post',
+		data
+	});
+};
+
+// 修改民宿
+export function modifyHostel(param) {
+	let data = new FormData();
+	data.append('hotelName', param.hotelName);
+	data.append('corpnName', param.corpnName);
+	data.append('corpnPhone', param.corpnPhone);
+	data.append('hotelTownship', param.id);
+	data.append('adminName', param.adminName);
+	data.append('bankCard', param.bankCard);
+	data.append('cardName', param.cardName);
+	data.append('bankName', param.bankName);
+	data.append('fileListJson', JSON.stringify(param.fileList));
+	data.append('password', 'Jams123456');
+
+	return request({
+		url: '/managerAdminupdateAdmin.action',
+		method: 'post',
+		data
+	});
+};
+
+// 删除民宿
+export function delHostelAccount(param) {
+	let data = new FormData();
+	data.append('id', param);
+
+	return request({
+		url: '/managerAdmindelAdmin.action',
+		method: 'post',
+		data
+	});
+};
+
+// 重置民宿管理账号密码
+export function resetHostelAccountPassword(param) {
+	let data = new FormData();
+	data.append('id', param);
+
+	return request({
+		url: '/managerAdminremovePwd.action',
+		method: 'post',
+		data
+	});
+};

+ 4 - 4
src/api/user.js

@@ -2,11 +2,11 @@ import request from '@/utils/request'
 
 export function login(forData) {
 	let data = new FormData()
-	data.append('admin_name', forData.username.trim())
+	data.append('adminName', forData.username.trim())
 	data.append('password', forData.password.trim())
-
+	
 	return request({
-		url: '/adminlogin.action',
+		url: '/adminloginAdmin.action',
 		method: 'post',
 		data
 	})
@@ -27,4 +27,4 @@ export function login(forData) {
 // 		url: '/airManage/adminloginout.action',
 // 		method: 'post'
 // 	})
-// }
+// }

+ 1 - 3
src/layout/components/Navbar.vue

@@ -83,13 +83,11 @@
 			},
 			// 无用户名自动退出
 			autoLogout() {
-				console.log(44444444);
-				return
 				this.$store.dispatch('user/logout')
 				this.$router.push(`/login?redirect=${this.$route.fullPath}`)
 				this.$message({
 					type: 'success',
-					message: '无用户名,已自动退出!请重新登录!'
+					message: '登录已过期,请重新登录!'
 				});
 			},
 			// 退出登录

+ 0 - 6
src/permission.js

@@ -25,7 +25,6 @@ router.beforeEach(async (to, from, next) => {
 
 	// determine whether the user has logged in
 	const hasToken = getToken()
-	console.log(1111);
 	if (hasToken) {
 		if (to.path === '/login') {
 			// if is logged in, redirect to the home page
@@ -54,14 +53,9 @@ router.beforeEach(async (to, from, next) => {
 	} else {
 		/* has no token*/
 		if (whiteList.indexOf(to.path) !== -1) {
-			console.log(to.path);
-			console.log(2222);
 			// in the free login whitelist, go directly
 			next()
 		} else {
-			console.log(3333);
-			next()
-			return
 			// other pages that do not have permission to access are redirected to the login page.
 			next(`/login?redirect=${to.path}`)
 			NProgress.done()

+ 6 - 6
src/store/modules/user.js

@@ -73,14 +73,14 @@ const actions = {
 					const token = 'admin_token'
 					commit('SET_TOKEN', token)
 					setToken(token)
-					setName(response.data[0].admin_name)
-					setLevel(response.data[0].level)
+					setName(response.data.adminName)
+					setLevel(response.data.level)
 					// 添加:
-					commit('SET_LEVEL', response.data[0].level)
-					commit('SET_NAME', response.data[0].admin_name)
+					commit('SET_LEVEL', response.data.level)
+					commit('SET_NAME', response.data.adminName)
 					commit('SET_PWD', password)
-					commit('SET_PHONE', response.data[0].phone)
-					commit('SET_USER_NAME', response.data[0].user_name)
+					commit('SET_PHONE', response.data.phone)
+					commit('SET_USER_NAME', response.data.userName)
 				} else {
 					commit('SET_TOKEN', '')
 					commit('SET_LEVEL', '')

+ 118 - 125
src/views/accountMgr/index.vue

@@ -12,7 +12,7 @@
 						<div class="controls">
 							<el-form :inline="true" :model="formInline" class="demo-form-inline">
 								<el-form-item label="">
-									<el-input v-model="formInline.user" prefix-icon="el-icon-search" clearable placeholder="请输入用户名"></el-input>
+									<el-input v-model="formInline.username" prefix-icon="el-icon-search" clearable placeholder="请输入用户名"></el-input>
 								</el-form-item>
 								<el-form-item>
 									<el-button type="primary" class="btn-search" @click="btn_search">查询</el-button>
@@ -34,18 +34,19 @@
 							</el-table-column>
 							<el-table-column label="用户名" align="center">
 								<template slot-scope="scope">
-									<span>{{ scope.row.admin_name }}</span>
+									<span>{{ scope.row.adminName }}</span>
 								</template>
 							</el-table-column>
 							<el-table-column label="姓名" align="center">
 								<template slot-scope="scope">
-									<span>{{ scope.row.user_name }}</span>
+									<span>{{ scope.row.userName }}</span>
 								</template>
 							</el-table-column>
 							<el-table-column label="角色" align="center">
 								<template slot-scope="scope">
 									<span v-if="scope.row.level == 1">管理员</span>
-									<span v-else>超级管理员</span>
+									<span v-else-if="scope.row.level == 2">超级管理员</span>
+									<span v-else>未知身份</span>
 								</template>
 							</el-table-column>
 							<el-table-column label="备注" align="center" width="200">
@@ -53,10 +54,20 @@
 									<span>{{ scope.row.remark }}</span>
 								</template>
 							</el-table-column>
+							<el-table-column label="创建时间" align="center" width="180">
+								<template slot-scope="scope">
+									<span>{{ scope.row.createDate }}</span>
+								</template>
+							</el-table-column>
+							<el-table-column label="修改时间" align="center" width="180">
+								<template slot-scope="scope">
+									<span>{{ scope.row.modifyDate }}</span>
+								</template>
+							</el-table-column>
 							<el-table-column label="操作" align="center" width="180">
 								<template slot-scope="scope">
 									<div class="action-btns">
-										<el-link class="bg-btn" @click="edit_amount(scope.$index, scope.row)">密码重置</el-link>
+										<el-link class="bg-btn" @click="reset_amount(scope.$index, scope.row)">密码重置</el-link>
 										<el-link class="bg-btn" @click="edit_amount(scope.$index, scope.row)">修改</el-link>
 										<el-link type="danger" @click="delete_amount(scope.$index, scope.row)">删除</el-link>
 									</div>
@@ -107,8 +118,8 @@
 				</el-form-item>
 			</el-form>
 			<div slot="footer" class="dialog-footer">
-				<el-button @click="dialogAddAcountFormVisible = false">取 消</el-button>
-				<el-button class="add-user-btn" @click="add_account_dialog">确 认</el-button>
+				<el-button class="add-user-cancel-btn" @click="dialogAddAcountFormVisible = false">取 消</el-button>
+				<el-button class="add-user-confirm-btn" @click="add_account_dialog">确 认</el-button>
 			</div>
 		</el-dialog>
 		<!-- 修改账号对话框 -->
@@ -145,8 +156,8 @@
 				</el-form-item>
 			</el-form>
 			<div slot="footer" class="dialog-footer">
-				<el-button @click="dialogModifyAcountFormVisible = false">取 消</el-button>
-				<el-button type="primary" @click="modify_account_dialog">确 认</el-button>
+				<el-button class="add-user-cancel-btn" @click="dialogModifyAcountFormVisible = false">取 消</el-button>
+				<el-button class="add-user-confirm-btn" @click="modify_account_dialog">确 认</el-button>
 			</div>
 		</el-dialog>
 		<!-- 删除确认对话框 -->
@@ -157,8 +168,20 @@
 				<div class="del-account-body-txt">是否确定将该【{{deleteAccountData.delete_account}}】从列表中移除?</div>
 			</div>
 			<div slot="footer" class="dialog-footer">
-				<el-button @click="dialog_delete_account = false"> 否 </el-button>
-				<el-button class="del-btn" @click="delete_account_dialog"> 是 </el-button>
+				<el-button class="add-user-cancel-btn" @click="dialog_delete_account = false"> 否 </el-button>
+				<el-button class="add-user-confirm-btn" @click="delete_account_dialog"> 是 </el-button>
+			</div>
+		</el-dialog>
+		<!-- 重置密码 -->
+		<el-dialog custom-class="el-dialog-delete-account" :visible.sync="dialog_reset_account" :close-on-click-modal="false" :close-on-press-escape="false"
+			:show-close="false">
+			<div slot="" class="del-account-body">
+				<img src="../../icons/serveAC/del_warning.png" alt="">
+				<div class="del-account-body-txt">是否确定将重置账号【{{resetAccountData.reset_account}}】的密码?</div>
+			</div>
+			<div slot="footer" class="dialog-footer">
+				<el-button class="add-user-cancel-btn" @click="dialog_reset_account = false"> 否 </el-button>
+				<el-button class="add-user-confirm-btn" @click="reset_account_dialog"> 是 </el-button>
 			</div>
 		</el-dialog>
 	</div>
@@ -166,13 +189,11 @@
 
 <script>
 	import {
-		mapGetters
-	} from 'vuex';
-	import {
 		getTableData,
 		addAccount,
 		modifyAccount,
-		deleteAccount
+		deleteAccount,
+		resetAccountPassword
 	} from '@/api/accountMgr';
 	// const roleOptions = ['管理员', '超级管理员']
 	const roleOptions = ['超级管理员', '管理员']
@@ -287,10 +308,9 @@
 				currentUserName: this.$store.state.user.name,
 				// 当前用户的权限
 				currentUserLevel: this.$store.state.user.level,
-				dialogAddAcountFormVisible: false, // 添加账号对话框显示与隐藏
 				// 表单数据
 				formInline: {
-					user: ''
+					username: ''
 				},
 				formAddAcount: { // 添加账号对话框 数据
 					phone: '',
@@ -298,7 +318,6 @@
 					fullname: '',
 					password: '',
 					confirmPassword: '',
-					// cardNumber: '',
 					comment: '',
 					checkedRole: ['管理员'],
 					roles: roleOptions
@@ -310,9 +329,6 @@
 					fullname: [{
 						validator: checkFullName
 					}],
-					// cardNumber: [{
-					//   validator: checkCardNumber
-					// }],
 					phone: [{
 						validator: checkPhone
 					}],
@@ -326,14 +342,16 @@
 						validator: checkRole
 					}]
 				},
+				dialogAddAcountFormVisible: false, // 添加账号对话框显示与隐藏
 				dialogModifyAcountFormVisible: false, // 修改账号对话框显示与隐藏
+				dialog_delete_account: false, // 删除对话框显示与隐藏变量
+				dialog_reset_account: false, // 重置对话框显示与隐藏变量
 				formModifyAcount: { // 修改账号对话框 数据
 					id: '',
 					phone: '',
 					username: '',
 					fullname: '',
 					password: '',
-					// cardNumber: '',
 					confirmPassword: '',
 					comment: '',
 					checkedRole: [],
@@ -359,11 +377,14 @@
 						validator: checkRole
 					}]
 				},
-				dialog_delete_account: false,
 				deleteAccountData: {
 					id: '',
 					delete_account: ''
 				},
+				resetAccountData: {
+					id: '',
+					reset_account: ''
+				},
 				formLabelWidth: '120px',
 				// 表格单元格样式
 				cell_style: {
@@ -411,8 +432,8 @@
 					page: this.pagination.currentPage,
 					rows: this.pagination.pageSize
 				}
-				if (this.formInline.user !== '') {
-					data.name_card = this.formInline.user
+				if (this.formInline.username !== '') {
+					data.adminName = this.formInline.username
 				}
 
 				this.cond_data = data;
@@ -421,72 +442,6 @@
 			 * 获取账号列表数据
 			 */
 			get_table_data(param) {
-				this.tableData = [{
-					admin_name: "root",
-					id: 64,
-					level: 1,
-					phone: "12345678901",
-					remark: "备注",
-					user_name: "测试3"
-				},{
-					admin_name: "root",
-					id: 64,
-					level: 1,
-					phone: "12345678901",
-					remark: "备注",
-					user_name: "测试3"
-				},{
-					admin_name: "root",
-					id: 64,
-					level: 1,
-					phone: "12345678901",
-					remark: "备注",
-					user_name: "测试3"
-				},{
-					admin_name: "root",
-					id: 64,
-					level: 1,
-					phone: "12345678901",
-					remark: "备注",
-					user_name: "测试3"
-				},{
-					admin_name: "root",
-					id: 64,
-					level: 1,
-					phone: "12345678901",
-					remark: "备注",
-					user_name: "测试3"
-				},{
-					admin_name: "root",
-					id: 64,
-					level: 1,
-					phone: "12345678901",
-					remark: "备注",
-					user_name: "测试3"
-				},{
-					admin_name: "root",
-					id: 64,
-					level: 1,
-					phone: "12345678901",
-					remark: "备注",
-					user_name: "测试3"
-				},{
-					admin_name: "root",
-					id: 64,
-					level: 1,
-					phone: "12345678901",
-					remark: "备注",
-					user_name: "测试3"
-				},{
-					admin_name: "root",
-					id: 64,
-					level: 1,
-					phone: "12345678901",
-					remark: "备注",
-					user_name: "测试3"
-				}]
-				this.loading = false;
-				return;
 				this.loading = true;
 				this.get_condtion();
 
@@ -498,22 +453,32 @@
 				// console.log(data);
 				getTableData(data).then((res) => {
 					// console.log(res);
-					if (typeof res.code == 'undefined' || res.code == '') {
-						this.$message.error('返回数据格式问题,code未获取到!');
-						return;
-					}
-					if (typeof res.rows !== 'undefined' && res.rows !== '') {
-						this.pagination.total = res.total;
-						this.tableData = [];
-						for (var i = 0; i < res.rows.length; i++) {
-							this.tableData.push(res.rows[i]);
+					if (res.code === 200) {
+						let temp_data = res.data.pageList
+						if (temp_data.length > 0) {
+							this.pagination.total = res.data.total;
+							this.tableData = [];
+							for (var i = 0; i < temp_data.length; i++) {
+								this.tableData.push(temp_data[i]);
+							}
+							// 按创建时间排序
+							this.tableData.sort((a, b) => {
+								if (a.createDate > b.createDate) {
+									return -1; // 返回负数表示 a 在 b 前面
+								} else if (a.createDate < b.createDate) {
+									return 1; // 返回正数表示 a 在 b 后面
+								} else {
+									return 0; // 时间相同,按名称字段升序排序
+								}
+							});
+						} else {
+							this.tableData = [];
+							this.$message.warning('没有符合条件的数据!');
 						}
 					} else {
-						this.tableData = [];
-						this.$message.warning('没有符合条件的数据!');
+						this.$message.error(res.message);
 					}
 				}).catch((err) => {
-					// console.log(err);
 					this.$message.error(err.message);
 				});
 				this.loading = false;
@@ -526,10 +491,44 @@
 			delete_amount(index, row) {
 				// console.log(index, row);
 				this.deleteAccountData.id = row.id;
-				this.deleteAccountData.delete_account = row.admin_name;
+				this.deleteAccountData.delete_account = row.adminName;
 				this.dialog_delete_account = true;
 			},
 			/**
+			 * 重置密码
+			 * @param {Object} index
+			 * @param {Object} row
+			 */
+			reset_amount(index, row) {
+				this.resetAccountData.id = row.id
+				this.resetAccountData.reset_account = row.adminName
+				
+				this.dialog_reset_account = true
+			},
+			/**
+			 * 重置密码操作
+			 */
+			reset_account_dialog() {
+				resetAccountPassword(this.resetAccountData.id).then((res) => {
+					// console.log(res);
+					if (typeof res.code == 'undefined' || res.code == '') {
+						this.$message.error('返回数据格式问题,code未获取到!');
+						return;
+					}
+
+					if (res.code == 200) {
+						this.get_table_data();
+						this.dialog_reset_account = false;
+						this.$message.success('重置成功!');
+					} else {
+						this.$message.error(res.message);
+					}
+				}).catch((err) => {
+					// console.log(err);
+					this.$message.error(err.message);
+				})
+			},
+			/**
 			 * 修改账号
 			 * @param {Object} index
 			 * @param {Object} row
@@ -538,10 +537,9 @@
 				// console.log(index, row);
 				this.dialogModifyAcountFormVisible = true;
 				this.formModifyAcount.id = row.id;
-				this.formModifyAcount.username = row.admin_name;
-				this.formModifyAcount.fullname = row.user_name;
+				this.formModifyAcount.username = row.adminName;
+				this.formModifyAcount.fullname = row.userName;
 				this.formModifyAcount.phone = row.phone;
-				// this.formModifyAcount.cardNumber = row.card_number;
 				if (row.level == 1) {
 					this.formModifyAcount.checkedRole.push('管理员');
 				} else {
@@ -561,7 +559,7 @@
 			add_account_dialog() {
 				this.$refs["addAccountForm"].validate(validate => {
 					if (validate) {
-						console.log(this.formAddAcount);
+						// console.log(this.formAddAcount);
 						addAccount(this.formAddAcount).then((res) => {
 							// console.log(res);
 							if (typeof res.code == 'undefined' || res.code == '') {
@@ -590,9 +588,6 @@
 			 * 修改账号对话框确定按钮事件
 			 */
 			modify_account_dialog() {
-				this.dialogModifyAcountFormVisible = false;
-				this.$message.success('修改成功!');
-				return
 				this.$refs["modifyAccountForm"].validate(validate => {
 					if (validate) {
 						// console.log(this.formModifyAcount);
@@ -624,9 +619,6 @@
 			 * 删除账号对话框确定按钮事件
 			 */
 			delete_account_dialog() {
-				this.dialog_delete_account = false;
-				this.$message.success('删除成功!');
-				return
 				if (this.deleteAccountData.delete_account === this.currentUserName) {
 					this.$message.error('当前用户不能删除!');
 					return;
@@ -661,7 +653,6 @@
 					fullname: '',
 					password: '',
 					confirmPassword: '',
-					// card_number: '',
 					comment: '',
 					checkedRole: ['管理员'],
 					roles: roleOptions
@@ -676,7 +667,6 @@
 					username: '',
 					fullname: '',
 					password: '',
-					// cardNumber: '',
 					confirmPassword: '',
 					comment: '',
 					checkedRole: [],
@@ -956,12 +946,22 @@
 		height: 630px !important;
 	}
 
-	.add-user-btn {
+	.dialog-footer {
+		display: flex;
+		justify-content: flex-end;
+	}
+
+	.add-user-cancel-btn {
+		color: rgba(9, 101, 98, 1) !important;
+		border: 1px solid rgba(9, 101, 98, 1) !important;
+	}
+
+	.add-user-confirm-btn {
 		border: none !important;
 		background: rgba(9, 101, 98, 1) !important;
 		color: #fff !important;
 		border-radius: 5px !important;
-		margin-left: 80px !important;
+		margin-left: 28px !important;
 	}
 
 	.el-dialog-delete-account {
@@ -972,11 +972,4 @@
 	.el-dialog-delete-account .el-dialog__header {
 		display: none !important;
 	}
-	
-	.del-btn {
-		background: rgba(9, 101, 98, 1) !important;
-		color: #fff !important;
-		border: none !important;
-		margin-left: 60px !important;
-	}
 </style>

+ 29 - 28
src/views/login/index.vue

@@ -40,6 +40,7 @@
 		data() {
 			const validateUsername = (rule, value, callback) => {
 				if (!value) {
+					this.$message.error('请输入账号')
 					callback(new Error('请输入账号'))
 				} else {
 					callback()
@@ -47,6 +48,7 @@
 			}
 			const validatePassword = (rule, value, callback) => {
 				if (value.length < 6) {
+					this.$message.error('请输入密码,不小于6位')
 					callback(new Error('请输入密码,不小于6位'))
 				} else {
 					callback()
@@ -54,7 +56,7 @@
 			}
 			return {
 				loginForm: {
-					admin_name: '',
+					username: '',
 					password: ''
 				},
 				loginRules: {
@@ -103,32 +105,31 @@
 			 * 登录
 			 */
 			handleLogin() {
-				this.$router.push('/');
-				// this.$refs.loginForm.validate(valid => {
-				// 	if (valid) {
-				// 		this.loading = true
-				// 		this.$store.dispatch('user/login', this.loginForm)
-				// 			.then((res) => {
-				// 				// console.log(res);
-				// 				if (res.code == 200) {
-				// 					this.$router.push({
-				// 						path: this.redirect || '/'
-				// 					});
-				// 					this.$message.success(res.message);
-				// 				} else {
-				// 					this.$message.error(res.message);
-				// 				}
-				// 				this.loading = false;
-				// 			}).catch((err) => {
-				// 				// console.log(err);
-				// 				this.$message.error(err.message);
-				// 				this.loading = false;
-				// 			});
-				// 	} else {
-				// 		// this.$message.error('请输入账号或密码!');
-				// 		return false;
-				// 	}
-				// })
+				this.$refs.loginForm.validate(valid => {
+					if (valid) {
+						this.loading = true
+						this.$store.dispatch('user/login', this.loginForm)
+							.then((res) => {
+								// console.log(res);
+								if (res.code == 200) {
+									this.$router.push({
+										path: this.redirect || '/'
+									});
+									this.$message.success(res.message);
+								} else {
+									this.$message.error(res.message);
+								}
+								this.loading = false;
+							}).catch((err) => {
+								console.log(err);
+								this.$message.error(err.message);
+								this.loading = false;
+							});
+					} else {
+						// this.$message.error('请输入账号或密码!');
+						return false;
+					}
+				})
 			}
 		}
 	}
@@ -230,7 +231,7 @@
 					font-size: 22px;
 					display: inline-block;
 				}
-				
+
 				.show-pwd {
 					font-size: 20px;
 				}

+ 375 - 219
src/views/residentialhostelMgr/index.vue

@@ -12,13 +12,13 @@
 						<div class="controls">
 							<el-form :inline="true" :model="formInline" class="demo-form-inline">
 								<el-form-item label="所属乡镇">
-									<el-select v-model="formInline.value" clearable placeholder="请选择">
-										<el-option v-for="item in formInline.options" :key="item.value" :label="item.label" :value="item.value">
+									<el-select v-model="formInline.id" clearable placeholder="请选择">
+										<el-option v-for="item in formInline.options" :key="item.id" :label="item.hotelTownship" :value="item.id">
 										</el-option>
 									</el-select>
 								</el-form-item>
 								<el-form-item label="">
-									<el-input v-model="formInline.h_type" prefix-icon="el-icon-search" clearable placeholder="请输入关键字"></el-input>
+									<el-input v-model="formInline.adminName" prefix-icon="el-icon-search" clearable placeholder="请输入关键字"></el-input>
 								</el-form-item>
 								<el-form-item>
 									<el-button type="primary" class="btn-search" @click="btn_search">查询</el-button>
@@ -36,42 +36,42 @@
 									<span>{{ (pagination.currentPage - 1) * pagination.pageSize + scope.$index + 1 }}</span>
 								</template>
 							</el-table-column>
-							<el-table-column label="状态" align="center">
+							<el-table-column label="状态" align="center" width="80">
 								<template slot-scope="scope">
-									<span>{{ scope.row.status }}</span>
+									<span>{{ scope.row.status === 1 ? '正常' : '已冻结' }}</span>
 								</template>
 							</el-table-column>
 							<el-table-column label="民宿名称" align="center">
 								<template slot-scope="scope">
-									<span>{{ scope.row.mname }}</span>
+									<span>{{ scope.row.hotelName }}</span>
 								</template>
 							</el-table-column>
 							<el-table-column label="联系人" align="center">
 								<template slot-scope="scope">
-									<span>{{ scope.row.name }}</span>
+									<span>{{ scope.row.corpnName }}</span>
 								</template>
 							</el-table-column>
 							<el-table-column label="联系电话" align="center">
 								<template slot-scope="scope">
-									<span>{{ scope.row.tel }}</span>
+									<span>{{ scope.row.corpnPhone }}</span>
 								</template>
 							</el-table-column>
 							<el-table-column label="所属乡镇" align="center">
 								<template slot-scope="scope">
-									<span>{{ scope.row.xz }}</span>
+									<span>{{ scope.row.hotelTownship }}</span>
 								</template>
 							</el-table-column>
 							<el-table-column label="民宿账号" align="center">
 								<template slot-scope="scope">
-									<span>{{ scope.row.account }}</span>
+									<span>{{ scope.row.adminName }}</span>
 								</template>
 							</el-table-column>
 							<el-table-column label="操作" align="center" width="210">
 								<template slot-scope="scope">
 									<div class="action-btns">
-										<el-link class="bg-btn">密码重置</el-link>
+										<el-link class="bg-btn" @click="reset_hostel_password_dialog(scope.$index, scope.row)">密码重置</el-link>
 										<el-link class="bg-btn" @click="modify_house_dialog(scope.$index, scope.row)">修改</el-link>
-										<el-link type="primary">冻结</el-link>
+										<el-link type="primary" @click="frozen_house_dialog(scope.$index, scope.row)">冻结</el-link>
 										<el-link type="danger" @click="delete_house_dialog(scope.$index, scope.row)">删除</el-link>
 									</div>
 								</template>
@@ -88,32 +88,33 @@
 			</el-col>
 		</el-row>
 		<!-- 添加民宿 -->
-		<el-dialog title="添加民宿" custom-class="add-house-class" :visible.sync="dialogAddHouseFormVisible" :close-on-click-modal="false"
+		<el-dialog title="添加民宿" custom-class="add-house-class" :visible.sync="dialogAddHostelFormVisible" :close-on-click-modal="false"
 			:close-on-press-escape="false" @close="add_house_dialog_close">
 			<el-row>
 				<el-col :span="12">
 					<div style="font-size: 16px;font-weight: 700; color: rgba(0, 0, 0, 1); margin: -10px 0 20px 20px;">民宿信息</div>
-					<el-form :model="formAddHostel" ref="addAccountForm" :rules="addHouseFormRules">
-						<el-form-item label="民宿名称:" :label-width="formLabelWidth" :required="true" prop="h_type">
-							<el-input v-model="formAddHostel.h_type" autocomplete="off" placeholder="请输入名称">
+					<!-- <el-form :model="formAddHostel" ref="addAccountForm" :rules="addHostelFormRules"> -->
+					<el-form :model="formAddHostel" ref="addAccountForm">
+						<el-form-item label="民宿名称:" :label-width="formLabelWidth" :required="true" prop="hotelName">
+							<el-input v-model="formAddHostel.hotelName" autocomplete="off" placeholder="请输入民宿名称">
 							</el-input>
 						</el-form-item>
-						<el-form-item label="法人姓名:" :label-width="formLabelWidth" :required="true" prop="price">
-							<el-input v-model="formAddHostel.price" autocomplete="off" placeholder="请输入姓名">
+						<el-form-item label="法人姓名:" :label-width="formLabelWidth" :required="true" prop="corpnName">
+							<el-input v-model="formAddHostel.corpnName" autocomplete="off" placeholder="请输入法人姓名">
 							</el-input>
 						</el-form-item>
-						<el-form-item label="法人电话:" :label-width="formLabelWidth" :required="true" prop="number">
-							<el-input v-model="formAddHostel.number" autocomplete="off" placeholder="请输入电话">
+						<el-form-item label="法人电话:" :label-width="formLabelWidth" :required="true" prop="corpnPhone">
+							<el-input v-model="formAddHostel.corpnPhone" autocomplete="off" placeholder="请输入法人电话">
 							</el-input>
 						</el-form-item>
-						<el-form-item label="所属乡镇:" :label-width="formLabelWidth" :required="true" prop="number">
-							<el-select v-model="formAddHostel.value" clearable placeholder="请选择乡镇">
-								<el-option v-for="item in formInline.options" :key="item.value" :label="item.label" :value="item.value">
+						<el-form-item label="所属乡镇:" :label-width="formLabelWidth" :required="true" prop="hotelTownship">
+							<el-select v-model="formAddHostel.hotelTownship" clearable placeholder="请选择乡镇" @change="getHotelId($event)">
+								<el-option v-for="item in formAddHostel.options" :key="item.id" :label="item.hotelTownship" :value="item.id">
 								</el-option>
 							</el-select>
 						</el-form-item>
-						<el-form-item label="民宿账号:" :label-width="formLabelWidth" :required="true" prop="number">
-							<el-input v-model="formAddHostel.number" autocomplete="off" placeholder="请输入账号" maxlength="4">
+						<el-form-item label="民宿账号:" :label-width="formLabelWidth" :required="true" prop="adminName">
+							<el-input v-model="formAddHostel.adminName" autocomplete="off" placeholder="请输入民宿账号" maxlength="4">
 							</el-input>
 						</el-form-item>
 					</el-form>
@@ -123,17 +124,18 @@
 				</el-col>
 				<el-col :span="12">
 					<div style="font-size: 16px;font-weight: 700; color: rgba(0, 0, 0, 1); margin: -10px 0 20px 20px;">提现信息</div>
-					<el-form :model="formAddInfo" ref="addAccountForm" :rules="addHouseFormRules">
-						<el-form-item label="银行卡号:" :label-width="formLabelWidth" :required="true" prop="bankcard">
-							<el-input v-model="formAddInfo.bankcard" autocomplete="off" placeholder="请输入房型">
+					<!-- <el-form :model="formAddHostel" ref="addAccountForm" :rules="addHostelFormRules"> -->
+					<el-form :model="formAddHostel" ref="addAccountForm">
+						<el-form-item label="银行卡号:" :label-width="formLabelWidth" :required="true" prop="bankCard">
+							<el-input v-model="formAddHostel.bankCard" autocomplete="off" placeholder="请输入银行卡号">
 							</el-input>
 						</el-form-item>
-						<el-form-item label="户主姓名:" :label-width="formLabelWidth" :required="true" prop="uname">
-							<el-input v-model="formAddInfo.uname" autocomplete="off" placeholder="请输入房费">
+						<el-form-item label="户主姓名:" :label-width="formLabelWidth" :required="true" prop="cardName">
+							<el-input v-model="formAddHostel.cardName" autocomplete="off" placeholder="请输入户主姓名">
 							</el-input>
 						</el-form-item>
-						<el-form-item label="银行名称:" :label-width="formLabelWidth" :required="true" prop="bankname">
-							<el-input v-model="formAddInfo.bankname" autocomplete="off" placeholder="请输入数量">
+						<el-form-item label="银行名称:" :label-width="formLabelWidth" :required="true" prop="bankName">
+							<el-input v-model="formAddHostel.bankName" autocomplete="off" placeholder="请输入银行名称">
 							</el-input>
 						</el-form-item>
 					</el-form>
@@ -143,7 +145,7 @@
 				<el-col :span="24">
 					<div style="font-size: 16px;font-weight: 700; color: rgba(0, 0, 0, 1); margin: 0px 0 20px 20px;">营业执照</div>
 					<el-upload action="#" accept=".jpg, .jpeg, .png" list-type="picture-card" :auto-upload="false" :on-change="handleChange"
-						:file-list="fileList" :limit="limitCount" :class="{hide:hideUpload}">
+						:file-list="formAddHostel.fileList" :http-request="upload()" :limit="formAddHostel.limitCount" :class="{hide:hideUpload}">
 						<i slot="default" class="el-icon-plus"></i>
 						<div slot="file" slot-scope="{file}">
 							<img class="el-upload-list__item-thumbnail" :src="file.url" alt="">
@@ -154,18 +156,14 @@
 							</span>
 						</div>
 					</el-upload>
-					<!-- 预览弹窗 -->
-					<el-dialog :visible.sync="dialogVisible">
-						<img width="100%" :src="dialogImageUrl" alt="">
-					</el-dialog>
 				</el-col>
 			</el-row>
 			<div
 				style="font-size: 18px;font-weight: 400;letter-spacing: 0px;line-height: 26.06px;color: rgba(212, 48, 48, 1);text-align: left;vertical-align: top;">
 				(注:最多可上传6张图片)</div>
 			<div slot="footer" class="dialog-footer">
-				<el-button @click="dialogAddHouseFormVisible = false">取 消</el-button>
-				<el-button class="add-info" @click="add_house_dialog_handler">确 认</el-button>
+				<el-button class="add-info-cancel-btn" @click="dialogAddHostelFormVisible = false">取 消</el-button>
+				<el-button class="add-info-confirm-btn" @click="add_house_dialog_handler">确 认</el-button>
 			</div>
 		</el-dialog>
 		<!-- 修改民宿对话框 -->
@@ -174,27 +172,28 @@
 			<el-row>
 				<el-col :span="12">
 					<div style="font-size: 16px;font-weight: 700; color: rgba(0, 0, 0, 1); margin: -10px 0 20px 20px;">民宿信息</div>
-					<el-form :model="formAddHostel" ref="addAccountForm" :rules="addHouseFormRules">
-						<el-form-item label="民宿名称:" :label-width="formLabelWidth" :required="true" prop="h_type">
-							<el-input v-model="formAddHostel.h_type" autocomplete="off" placeholder="请输入名称">
+					<!-- <el-form :model="formModifyHostel" ref="modifyAccountForm" :rules="modifyHostelFormRules"> -->
+					<el-form :model="formModifyHostel" ref="modifyAccountForm">
+						<el-form-item label="民宿名称:" :label-width="formLabelWidth" :required="true" prop="hotelName">
+							<el-input v-model="formModifyHostel.hotelName" autocomplete="off" placeholder="请输入民宿名称">
 							</el-input>
 						</el-form-item>
-						<el-form-item label="法人姓名:" :label-width="formLabelWidth" :required="true" prop="price">
-							<el-input v-model="formAddHostel.price" autocomplete="off" placeholder="请输入姓名">
+						<el-form-item label="法人姓名:" :label-width="formLabelWidth" :required="true" prop="corpnName">
+							<el-input v-model="formModifyHostel.corpnName" autocomplete="off" placeholder="请输入法人姓名">
 							</el-input>
 						</el-form-item>
-						<el-form-item label="法人电话:" :label-width="formLabelWidth" :required="true" prop="number">
-							<el-input v-model="formAddHostel.number" autocomplete="off" placeholder="请输入电话">
+						<el-form-item label="法人电话:" :label-width="formLabelWidth" :required="true" prop="corpnPhone">
+							<el-input v-model="formModifyHostel.corpnPhone" autocomplete="off" placeholder="请输入法人电话">
 							</el-input>
 						</el-form-item>
-						<el-form-item label="所属乡镇:" :label-width="formLabelWidth" :required="true" prop="number">
-							<el-select v-model="formAddHostel.value" clearable placeholder="请选择乡镇">
-								<el-option v-for="item in formInline.options" :key="item.value" :label="item.label" :value="item.value">
+						<el-form-item label="所属乡镇:" :label-width="formLabelWidth" :required="true" prop="hotelTownship">
+							<el-select v-model="formModifyHostel.id" clearable placeholder="请选择乡镇">
+								<el-option v-for="item in formModifyHostel.options" :key="item.id" :label="item.hotelTownship" :value="item.id">
 								</el-option>
 							</el-select>
 						</el-form-item>
-						<el-form-item label="民宿账号:" :label-width="formLabelWidth" :required="true" prop="number">
-							<el-input v-model="formAddHostel.number" autocomplete="off" placeholder="请输入账号" maxlength="4">
+						<el-form-item label="民宿账号:" :label-width="formLabelWidth" :required="true" prop="adminName">
+							<el-input v-model="formModifyHostel.adminName" autocomplete="off" placeholder="请输入民宿账号" maxlength="4">
 							</el-input>
 						</el-form-item>
 					</el-form>
@@ -204,17 +203,18 @@
 				</el-col>
 				<el-col :span="12">
 					<div style="font-size: 16px;font-weight: 700; color: rgba(0, 0, 0, 1); margin: -10px 0 20px 20px;">提现信息</div>
-					<el-form :model="formAddInfo" ref="addAccountForm" :rules="addHouseFormRules">
-						<el-form-item label="银行卡号:" :label-width="formLabelWidth" :required="true" prop="bankcard">
-							<el-input v-model="formAddInfo.bankcard" autocomplete="off" placeholder="请输入房型">
+					<!-- <el-form :model="formModifyHostel" ref="modifyAccountForm" :rules="modifyHostelFormRules"> -->
+					<el-form :model="formModifyHostel" ref="modifyAccountForm">
+						<el-form-item label="银行卡号:" :label-width="formLabelWidth" :required="true" prop="bankCard">
+							<el-input v-model="formModifyHostel.bankCard" autocomplete="off" placeholder="请输入银行卡号">
 							</el-input>
 						</el-form-item>
-						<el-form-item label="户主姓名:" :label-width="formLabelWidth" :required="true" prop="uname">
-							<el-input v-model="formAddInfo.uname" autocomplete="off" placeholder="请输入房费">
+						<el-form-item label="户主姓名:" :label-width="formLabelWidth" :required="true" prop="cardName">
+							<el-input v-model="formModifyHostel.cardName" autocomplete="off" placeholder="请输入户主姓名">
 							</el-input>
 						</el-form-item>
-						<el-form-item label="银行名称:" :label-width="formLabelWidth" :required="true" prop="bankname">
-							<el-input v-model="formAddInfo.bankname" autocomplete="off" placeholder="请输入数量">
+						<el-form-item label="银行名称:" :label-width="formLabelWidth" :required="true" prop="bankName">
+							<el-input v-model="formModifyHostel.bankName" autocomplete="off" placeholder="请输入银行名称">
 							</el-input>
 						</el-form-item>
 					</el-form>
@@ -224,7 +224,7 @@
 				<el-col :span="24">
 					<div style="font-size: 16px;font-weight: 700; color: rgba(0, 0, 0, 1); margin: 0px 0 20px 20px;">营业执照</div>
 					<el-upload action="#" accept=".jpg, .jpeg, .png" list-type="picture-card" :auto-upload="false" :on-change="handleChange"
-						:file-list="fileList" :limit="limitCount" :class="{hide:hideUpload}">
+						:file-list="formModifyHostel.fileList" :limit="formModifyHostel.limitCount" :class="{hide:hideUpload}">
 						<i slot="default" class="el-icon-plus"></i>
 						<div slot="file" slot-scope="{file}">
 							<img class="el-upload-list__item-thumbnail" :src="file.url" alt="">
@@ -235,18 +235,14 @@
 							</span>
 						</div>
 					</el-upload>
-					<!-- 预览弹窗 -->
-					<el-dialog :visible.sync="dialogVisible">
-						<img width="100%" :src="dialogImageUrl" alt="">
-					</el-dialog>
 				</el-col>
 			</el-row>
 			<div
 				style="font-size: 18px;font-weight: 400;letter-spacing: 0px;line-height: 26.06px;color: rgba(212, 48, 48, 1);text-align: left;vertical-align: top;">
 				(注:最多可上传6张图片)</div>
 			<div slot="footer" class="dialog-footer">
-				<el-button @click="dialogAddHouseFormVisible = false">取 消</el-button>
-				<el-button class="add-info" @click="add_house_dialog_handler">确 认</el-button>
+				<el-button class="add-info-cancel-btn" @click="dialogModifyHouseFormVisible = false">取 消</el-button>
+				<el-button class="add-info-confirm-btn" @click="modify_house_dialog_handler">确 认</el-button>
 			</div>
 		</el-dialog>
 		<!-- 民宿配置 -->
@@ -394,15 +390,39 @@
 			</el-tabs>
 		</el-dialog>
 		<!-- 删除确认对话框 -->
-		<el-dialog custom-class="el-dialog-delete-house" :visible.sync="dialogDeleteHouseVisible" :close-on-click-modal="false" :close-on-press-escape="false"
+		<el-dialog custom-class="el-dialog-delete-house" :visible.sync="dialogDeleteHostelVisible" :close-on-click-modal="false" :close-on-press-escape="false"
 			:show-close="false">
 			<div slot="" class="del-account-body">
 				<img src="../../icons/serveAC/del_warning.png" alt="">
-				<div class="del-account-body-txt">是否确定将该【{{ deleteHouseData.account }}】从列表中移除?</div>
+				<div class="del-account-body-txt">是否确定将该【{{ deleteHostelData.adminName }}】从列表中移除?</div>
 			</div>
 			<div slot="footer" class="dialog-footer">
-				<el-button @click="dialogDeleteHouseVisible = false"> 否 </el-button>
-				<el-button class="del-btn" @click="delete_house_dialog_handler"> 是 </el-button>
+				<el-button class="add-info-cancel-btn" @click="dialogDeleteHostelVisible = false"> 否 </el-button>
+				<el-button class="add-info-confirm-btn" @click="delete_hostel_dialog_handler"> 是 </el-button>
+			</div>
+		</el-dialog>
+		<!-- 重置确认对话框 -->
+		<el-dialog custom-class="el-dialog-delete-house" :visible.sync="dialogResetHostelVisible" :close-on-click-modal="false" :close-on-press-escape="false"
+			:show-close="false">
+			<div slot="" class="del-account-body">
+				<img src="../../icons/serveAC/del_warning.png" alt="">
+				<div class="del-account-body-txt">是否确定将该【{{ resetHostelData.adminName }}】重置吗?</div>
+			</div>
+			<div slot="footer" class="dialog-footer">
+				<el-button class="add-info-cancel-btn" @click="dialogResetHostelVisible = false"> 否 </el-button>
+				<el-button class="add-info-confirm-btn" @click="reset_hostel_dialog_handler"> 是 </el-button>
+			</div>
+		</el-dialog>
+		<!-- 冻结确认对话框 -->
+		<el-dialog custom-class="el-dialog-delete-house" :visible.sync="dialogFrozemHostelVisible" :close-on-click-modal="false" :close-on-press-escape="false"
+			:show-close="false">
+			<div slot="" class="del-account-body">
+				<img src="../../icons/serveAC/del_warning.png" alt="">
+				<div class="del-account-body-txt">是否确定将该【{{ frozenHostelData.adminName }}】冻结吗?</div>
+			</div>
+			<div slot="footer" class="dialog-footer">
+				<el-button class="add-info-cancel-btn" @click="dialogFrozemHostelVisible = false"> 否 </el-button>
+				<el-button class="add-info-confirm-btn" @click="frozen_hostel_dialog_handler"> 是 </el-button>
 			</div>
 		</el-dialog>
 	</div>
@@ -411,10 +431,12 @@
 <script>
 	import {
 		getTableData,
-		addHouseType,
-		modifyHouseType,
-		delHouseType
-	} from '@/api/house'
+		getTowns,
+		addHostel,
+		modifyHostel,
+		delHostelAccount,
+		resetHostelAccountPassword
+	} from '@/api/residentialhostelMgr'
 
 	export default {
 		data() {
@@ -458,14 +480,18 @@
 				}, 100);
 			};
 			return {
+				currentUserLevel: this.$store.state.user.level, // 当前用户的权限
 				activeName: 'first', // 默认激活那个选项卡
 				dialogResidentialHostelConfigurationVisible: false, // 民宿配置对话框显示和隐藏变量
-				dialogImageUrl: '',
-				dialogVisible: false,
-				disabled: false,
-				fileList: [], // 图片上传列表
+				dialogAddHostelFormVisible: false, // 添加民宿对话框显示和隐藏变量
+				dialogModifyHouseFormVisible: false, // 修改对话框的显示和隐藏变量
+				dialogDeleteHostelVisible: false, // 删除对话框的显示和隐藏变量
+				dialogResetHostelVisible: false, // 重置对话框的显示和隐藏变量
+				dialogFrozemHostelVisible: false, // 冻结对话框的显示和隐藏变量
+				dialogImageUrl: '', // 图片url
+				dialogVisible: false, // 预览弹窗
+				disabled: false, // 删除
 				hideUpload: false, // 是否隐藏上传框
-				limitCount: 6, // 图片上传的数量限制
 				formLabelWidth: '120px',
 				// 表格单元格样式
 				cell_style: {
@@ -480,35 +506,25 @@
 					'font-size': '16px',
 					'font-family': 'Microsoft YaHei-3970(82674968)'
 				},
-				search_datatime: '',
 				// 查询数据
 				formInline: {
-					options: [{
-						value: '选项1',
-						label: '乡镇A'
-					}, {
-						value: '选项2',
-						label: '乡镇B'
-					}, {
-						value: '选项3',
-						label: '乡镇C'
-					}, {
-						value: '选项4',
-						label: '乡镇D'
-					}, {
-						value: '选项5',
-						label: '乡镇E'
-					}],
-					value: '',
-					h_type: ''
+					options: [],
+					id: '',
+					adminName: ''
 				},
-				formAddInfo: {
-					bankcard: '',
-					uname: '',
-					bankname: ''
+				// 删除民宿
+				deleteHostelData: {
+					adminName: '',
+					id: ''
+				},
+				// 重置密码
+				resetHostelData: {
+					adminName: '',
+					id: ''
 				},
-				deleteHouseData: {
-					account: '',
+				// 冻结民宿
+				frozenHostelData: {
+					adminName: '',
 					id: ''
 				},
 				tableData: [],
@@ -553,9 +569,6 @@
 					icon: require('@/icons/images/hostel/window.png')
 				}],
 				cond_data: {},
-
-
-
 				// 分页参数
 				pagination: {
 					currentPage: 1,
@@ -563,41 +576,113 @@
 					total: 0
 				},
 				loading: true,
-				dialogAddHouseFormVisible: false,
 				formAddHostel: {
-					h_type: '',
-					number: '',
-					price: '',
-					value: ''
+					options: [],
+					id: '',
+					hotelTownship: '',
+					hotelName: '',
+					corpnName: '',
+					corpnPhone: '',
+					adminName: '',
+					bankCard: '',
+					cardName: '',
+					bankName: '',
+					fileList: [], // 图片上传列表
+					limitCount: 6 // 图片上传的数量限制
 				},
-				addHouseFormRules: {
-					h_type: [{
+				addHostelFormRules: {
+					id: [{
 						validator: checkHType
 					}],
-					price: [{
+					hotelName: [{
 						validator: checkPrice
 					}],
-					number: [{
+					corpnName: [{
+						validator: checkNumber
+					}],
+					corpnPhone: [{
+						validator: checkNumber
+					}],
+					adminName: [{
+						validator: checkNumber
+					}],
+					bankCard: [{
+						validator: checkNumber
+					}],
+					cardName: [{
+						validator: checkNumber
+					}],
+					bankName: [{
 						validator: checkNumber
 					}]
 				},
-				dialogModifyHouseFormVisible: false,
-				dialogDeleteHouseVisible: false
+				formModifyHostel: {
+					options: [],
+					id: '',
+					hotelTownship: '',
+					hotelName: '',
+					corpnName: '',
+					corpnPhone: '',
+					adminName: '',
+					bankCard: '',
+					cardName: '',
+					bankName: '',
+					fileList: [], // 图片上传列表
+					limitCount: 6 // 图片上传的数量限制
+				},
+				modifyHostelFormRules: {
+					id: [{
+						validator: checkHType
+					}],
+					hotelName: [{
+						validator: checkPrice
+					}],
+					corpnName: [{
+						validator: checkNumber
+					}],
+					corpnPhone: [{
+						validator: checkNumber
+					}],
+					adminName: [{
+						validator: checkNumber
+					}],
+					bankCard: [{
+						validator: checkNumber
+					}],
+					cardName: [{
+						validator: checkNumber
+					}],
+					bankName: [{
+						validator: checkNumber
+					}]
+				}
 			}
 		},
-		mounted() {
+		created() {
+			// 获取乡镇
+			this.get_towns()
 			// 获取消费记录,表格数据
 			this.get_table_data('list')
+		},
+		mounted() {
+			// 修改分页栏文字
 			document.getElementsByClassName("el-pagination__jump")[0].childNodes[0].nodeValue = "跳至";
 		},
 		methods: {
+			// 获取民宿id
+			getHotelId(e) {
+				this.formAddHostel.id = e
+			},
 			handleClick(tab, event) {
 				console.log(tab, event);
 			},
 			// 上传列表
 			handleChange(file, fileList) {
-				this.fileList = fileList;
-				this.hideUpload = this.fileList.length >= this.limitCount;
+				this.formAddHostel.fileList = fileList;
+				this.hideUpload = this.formAddHostel.fileList.length >= this.formAddHostel.limitCount;
+			},
+			upload(file){
+				console.log(file);
 			},
 			// 移除
 			handleRemove(file) {
@@ -606,15 +691,17 @@
 				// 要删除的元素的uid
 				let uidToDelete = file.uid;
 				// 使用filter()方法从数组中删除元素
-				this.fileList = this.fileList.filter(obj => obj.uid !== uidToDelete);
+				this.formAddHostel.fileList = this.formAddHostel.fileList.filter(obj => obj.uid !== uidToDelete);
 
-				this.hideUpload = this.fileList.length >= this.limitCount;
+				setTimeout(() => {
+					this.hideUpload = this.formAddHostel.fileList.length >= this.formAddHostel.limitCount;
+				}, 1000);
 			},
 			/**
 			 * 显示添加对话框
 			 */
 			add_house_dialog() {
-				this.dialogAddHouseFormVisible = true;
+				this.dialogAddHostelFormVisible = true;
 			},
 			/**
 			 * 打开民宿配置对话框
@@ -625,15 +712,37 @@
 			/**
 			 * 修改民宿
 			 */
-			modify_house_dialog() {
+			modify_house_dialog(index, row) {
+				console.log(index, row);
+				// this.formModifyHostel.id = row.id;
+				this.formModifyHostel.hotelTownship = row.hotelTownship;
+				this.formModifyHostel.hotelName = row.hotelName;
+				this.formModifyHostel.corpnName = row.corpnName;
+				this.formModifyHostel.corpnPhone = row.corpnPhone;
+				this.formModifyHostel.adminName = row.adminName;
+				this.formModifyHostel.bankCard = row.bankCard;
+				this.formModifyHostel.cardName = row.cardName;
+				this.formModifyHostel.bankName = row.bankName;
+
 				this.dialogModifyHouseFormVisible = true;
 			},
 			/**
+			 * 重置民宿密码
+			 */
+			reset_hostel_password_dialog(index, row) {
+				// console.log(index, row);
+				// 需要删除的数据关键字,赋值准备删除
+				this.resetHostelData.id = row.id;
+				this.resetHostelData.adminName = row.adminName;
+				// 显示删除对话框
+				this.dialogResetHostelVisible = true;
+			},
+			/**
 			 * 关闭添加对话框
 			 */
 			add_house_dialog_close() {
 				// 关闭添加对话框
-				this.dialogAddHouseFormVisible = false;
+				this.dialogAddHostelFormVisible = false;
 			},
 			/**
 			 * 关闭民宿配置
@@ -648,8 +757,7 @@
 				// 调用添加接口
 				this.$refs["addAccountForm"].validate(validate => {
 					if (validate) {
-						// console.log(this.formAddHostel);
-						addHouseType(this.formAddHostel).then((res) => {
+						addHostel(this.formAddHostel).then((res) => {
 							// console.log(res);
 							if (typeof res.code == 'undefined' || res.code == '') {
 								this.$message.error('返回数据格式问题,code未获取到!');
@@ -658,9 +766,9 @@
 
 							if (res.code === 200) {
 								// 重新读取,刷新表格显示
-								this.get_table_data();
+								this.get_table_data('list');
 
-								this.dialogAddHouseFormVisible = false;
+								this.dialogAddHostelFormVisible = false;
 								this.$message.success(res.message);
 							} else {
 								this.$message.error(res.message);
@@ -676,6 +784,64 @@
 				})
 			},
 			/**
+			 * 修改民宿
+			 */
+			modify_house_dialog_handler() {
+				// 调用修改接口
+				this.$refs["addAccountForm"].validate(validate => {
+					if (validate) {
+						modifyHostel(this.formModifyHostel).then((res) => {
+							// console.log(res);
+							if (typeof res.code == 'undefined' || res.code == '') {
+								this.$message.error('返回数据格式问题,code未获取到!');
+								return;
+							}
+
+							if (res.code === 200) {
+								// 重新读取,刷新表格显示
+								this.get_table_data('list');
+
+								this.dialogModifyHostelFormVisible = false;
+								this.$message.success(res.message);
+							} else {
+								this.$message.error(res.message);
+							}
+						}).catch((err) => {
+							// console.log(err);
+							this.$message.error(err.message);
+						})
+					} else {
+						this.$message.error('验证不通过');
+						return false;
+					}
+				})
+			},
+			/**
+			 * 重置密码
+			 */
+			reset_hostel_dialog_handler() {
+				resetHostelAccountPassword(this.resetHostelData.id).then((res) => {
+					// console.log(res);
+					if (typeof res.code == 'undefined' || res.code == '') {
+						this.$message.error('返回数据格式问题,code未获取到!');
+						return;
+					}
+
+					if (res.code === 200) {
+						// 重新读取,刷新表格显示
+						this.get_table_data('list');
+
+						this.dialogResetHostelVisible = false;
+						this.$message.success(res.message);
+					} else {
+						this.$message.error(res.message);
+					}
+				}).catch((err) => {
+					// console.log(err);
+					this.$message.error(err.message);
+				})
+			},
+			/**
 			 * 关闭修改对话框
 			 */
 			modify_house_dialog_close() {
@@ -683,22 +849,22 @@
 				this.dialogModifyHouseFormVisible = false;
 			},
 			/**
-			 * 删除房型对话框
+			 * 删除民宿对话框
 			 */
 			delete_house_dialog(index, row) {
 				// console.log(index, row);
 				// 需要删除的数据关键字,赋值准备删除
-				this.deleteHouseData.id = row.id;
-				this.deleteHouseData.account = row.account;
+				this.deleteHostelData.id = row.id;
+				this.deleteHostelData.adminName = row.adminName;
 				// 显示删除对话框
-				this.dialogDeleteHouseVisible = true;
+				this.dialogDeleteHostelVisible = true;
 			},
 			/**
-			 * 删除房型操作
+			 * 删除民宿
 			 */
-			delete_house_dialog_handler() {
+			delete_hostel_dialog_handler() {
 				// 调用删除接口
-				delHouseType(this.deleteHouseData).then((res) => {
+				delHostelAccount(this.deleteHostelData.id).then((res) => {
 					// console.log(res);
 					if (typeof res.code == 'undefined' || res.code == '') {
 						this.$message.error('返回数据格式问题,code未获取到!');
@@ -707,9 +873,9 @@
 
 					if (res.code === 200) {
 						// 重新读取,刷新表格显示
-						this.get_table_data();
+						this.get_table_data('list');
 
-						this.dialogDeleteHouseVisible = false;
+						this.dialogDeleteHostelVisible = false;
 						this.$message.success(res.message);
 					} else {
 						this.$message.error(res.message);
@@ -720,75 +886,42 @@
 				})
 			},
 			/**
+			 * 冻结操作
+			 */
+			frozen_hostel_dialog_handler() {
+				
+			},
+			// 获取乡镇列表
+			get_towns() {
+				getTowns().then((res) => {
+					if (res.code === 200) {
+						this.formInline.options = []
+						for (var i = 0; i < res.data.length; i++) {
+							let town = {
+								id: res.data[i].id,
+								hotelTownship: res.data[i].name
+							}
+							this.formInline.options.push(town)
+							this.formAddHostel.options.push(town)
+							this.formModifyHostel.options.push(town)
+						}
+					} else {
+						if (res.data.length === 0) {
+							this.formInline.options = []
+							this.$message.warning('没有符合条件的数据!')
+						} else {
+							this.$message.warning(res.message)
+						}
+					}
+				}).catch((err) => {
+					// console.log(err);
+					this.$message.error(err.message)
+				});
+			},
+			/**
 			 * 获取消费记录,表格数据
 			 */
 			get_table_data(param) {
-				this.tableData = [{
-					status: '正常',
-					mname: '靖安乡宿宝峰镇酒店',
-					name: '黄先生',
-					tel: '13659855689',
-					xz: '宝峰镇',
-					account: 'BFZJD01'
-				}, {
-					status: '正常',
-					mname: '靖安乡宿宝峰镇酒店',
-					name: '黄先生',
-					tel: '13659855689',
-					xz: '宝峰镇',
-					account: 'BFZJD01'
-				}, {
-					status: '正常',
-					mname: '靖安乡宿宝峰镇酒店',
-					name: '黄先生',
-					tel: '13659855689',
-					xz: '宝峰镇',
-					account: 'BFZJD01'
-				}, {
-					status: '正常',
-					mname: '靖安乡宿宝峰镇酒店',
-					name: '黄先生',
-					tel: '13659855689',
-					xz: '宝峰镇',
-					account: 'BFZJD01'
-				}, {
-					status: '正常',
-					mname: '靖安乡宿宝峰镇酒店',
-					name: '黄先生',
-					tel: '13659855689',
-					xz: '宝峰镇',
-					account: 'BFZJD01'
-				}, {
-					status: '正常',
-					mname: '靖安乡宿宝峰镇酒店',
-					name: '黄先生',
-					tel: '13659855689',
-					xz: '宝峰镇',
-					account: 'BFZJD01'
-				}, {
-					status: '正常',
-					mname: '靖安乡宿宝峰镇酒店',
-					name: '黄先生',
-					tel: '13659855689',
-					xz: '宝峰镇',
-					account: 'BFZJD01'
-				}, {
-					status: '正常',
-					mname: '靖安乡宿宝峰镇酒店',
-					name: '黄先生',
-					tel: '13659855689',
-					xz: '宝峰镇',
-					account: 'BFZJD01'
-				}, {
-					status: '正常',
-					mname: '靖安乡宿宝峰镇酒店',
-					name: '黄先生',
-					tel: '13659855689',
-					xz: '宝峰镇',
-					account: 'BFZJD01'
-				}];
-				this.loading = false;
-				return
 				this.loading = true
 				this.get_condtion();
 
@@ -800,11 +933,12 @@
 				// console.log(data);
 				getTableData(data).then((res) => {
 					// console.log(res);
-					if (typeof res.rows !== 'undefined' && res.rows !== '') {
-						this.pagination.total = res.total
+					let tempData = res.data.pageList;
+					if (typeof tempData !== 'undefined' && tempData !== '') {
+						this.pagination.total = res.data.total
 						this.tableData = []
-						for (var i = 0; i < res.rows.length; i++) {
-							this.tableData.push(res.rows[i])
+						for (var i = 0; i < tempData.length; i++) {
+							this.tableData.push(tempData[i])
 						}
 					} else {
 						this.tableData = []
@@ -820,12 +954,23 @@
 			 * 条件
 			 */
 			get_condtion() {
+				if (this.currentUserLevel !== 2) {
+					this.$message.error('请用【超级管理员】账号登录!')
+					return
+				}
+
 				let data = {
 					page: this.pagination.currentPage,
-					rows: this.pagination.pageSize
+					rows: this.pagination.pageSize,
+					level: this.currentUserLevel
 				}
-				if (this.formInline.h_type !== '') {
-					data.h_type = this.formInline.h_type
+
+				if (this.formInline.id !== '') {
+					data.hotelTownship = this.formInline.id // 对应id
+				}
+
+				if (this.formInline.adminName !== '') {
+					data.adminName = this.formInline.adminName
 				}
 
 				this.cond_data = data;
@@ -1120,7 +1265,7 @@
 <style>
 	.add-house-class,
 	.modify-house-class {
-		width: 1000px !important;
+		width: 998px !important;
 		height: 800px !important;
 	}
 
@@ -1138,19 +1283,17 @@
 		display: none !important;
 	}
 
-	.del-btn {
-		background: rgba(9, 101, 98, 1) !important;
-		color: #fff !important;
-		border: none !important;
-		margin-left: 60px !important;
+	.add-info-cancel-btn {
+		color: rgba(9, 101, 98, 1) !important;
+		border: 1px solid rgba(9, 101, 98, 1) !important;
 	}
 
-	.add-info {
+	.add-info-confirm-btn {
 		border: none !important;
 		background: rgba(9, 101, 98, 1) !important;
 		color: #fff !important;
 		border-radius: 5px !important;
-		margin-left: 80px !important;
+		margin-left: 28px !important;
 	}
 
 	.configure-btn-position {
@@ -1164,4 +1307,17 @@
 		color: #fff !important;
 		border-radius: 5px !important;
 	}
+
+	.el-tabs__item.is-top {
+		color: rgba(9, 101, 98, 1) !important;
+	}
+
+	.el-tabs__active-bar {
+		background-color: rgba(9, 101, 98, 1) !important;
+	}
+
+	.dialog-footer {
+		display: flex;
+		justify-content: flex-end;
+	}
 </style>

+ 110 - 110
vue.config.js

@@ -3,7 +3,7 @@ const path = require('path')
 const defaultSettings = require('./src/settings.js')
 
 function resolve(dir) {
-  return path.join(__dirname, dir)
+	return path.join(__dirname, dir)
 }
 
 const name = defaultSettings.title || '靖安乡村民宿管理平台' // page title
@@ -17,115 +17,115 @@ const port = process.env.port || process.env.npm_config_port || 9528 // dev port
 
 // All configuration item explanations can be find in https://cli.vuejs.org/config/
 module.exports = {
-  /**
-   * You will need to set publicPath if you plan to deploy your site under a sub path,
-   * for example GitHub Pages. If you plan to deploy your site to https://foo.github.io/bar/,
-   * then publicPath should be set to "/bar/".
-   * In most cases please use '/' !!!
-   * Detail: https://cli.vuejs.org/config/#publicpath
-   */
-  publicPath: './',
-  outputDir: 'dist',
-  assetsDir: 'static',
-  lintOnSave: process.env.NODE_ENV === 'development',
-  productionSourceMap: false,
-  devServer: {
-    port: port,
-    open: true,
-    overlay: {
-      warnings: false,
-      errors: true
-    },
-    proxy: {
-      [process.env.VUE_APP_BASE_API]: {
-        target: 'https://chtech.ncjti.edu.cn/hotelReservation/zhotel',
-        // target: 'http://127.0.0.1:9999',
-        changeOrigin: true,
-        pathRewrite: {
-          ['^' + process.env.VUE_APP_BASE_API]: ''
-        }
-      }
-    }
-    // before: require('./mock/mock-server.js')
-  },
-  configureWebpack: {
-    // provide the app's title in webpack's name field, so that
-    // it can be accessed in index.html to inject the correct title.
-    name: name,
-    resolve: {
-      alias: {
-        '@': resolve('src')
-      }
-    }
-  },
-  chainWebpack(config) {
-    // it can improve the speed of the first screen, it is recommended to turn on preload
-    config.plugin('preload').tap(() => [{
-      rel: 'preload',
-      // to ignore runtime.js
-      // https://github.com/vuejs/vue-cli/blob/dev/packages/@vue/cli-service/lib/config/app.js#L171
-      fileBlacklist: [/\.map$/, /hot-update\.js$/, /runtime\..*\.js$/],
-      include: 'initial'
-    }])
+	/**
+	 * You will need to set publicPath if you plan to deploy your site under a sub path,
+	 * for example GitHub Pages. If you plan to deploy your site to https://foo.github.io/bar/,
+	 * then publicPath should be set to "/bar/".
+	 * In most cases please use '/' !!!
+	 * Detail: https://cli.vuejs.org/config/#publicpath
+	 */
+	publicPath: './',
+	outputDir: 'dist',
+	assetsDir: 'static',
+	lintOnSave: process.env.NODE_ENV === 'development',
+	productionSourceMap: false,
+	devServer: {
+		port: port,
+		open: true,
+		overlay: {
+			warnings: false,
+			errors: true
+		},
+		proxy: {
+			[process.env.VUE_APP_BASE_API]: {
+				target: 'http://s9kc78.natappfree.cc/mhotel',
+				// target: 'https://chtech.ncjti.edu.cn/hotelReservation/mhotel',
+				changeOrigin: true,
+				pathRewrite: {
+					['^' + process.env.VUE_APP_BASE_API]: ''
+				}
+			}
+		}
+		// before: require('./mock/mock-server.js')
+	},
+	configureWebpack: {
+		// provide the app's title in webpack's name field, so that
+		// it can be accessed in index.html to inject the correct title.
+		name: name,
+		resolve: {
+			alias: {
+				'@': resolve('src')
+			}
+		}
+	},
+	chainWebpack(config) {
+		// it can improve the speed of the first screen, it is recommended to turn on preload
+		config.plugin('preload').tap(() => [{
+			rel: 'preload',
+			// to ignore runtime.js
+			// https://github.com/vuejs/vue-cli/blob/dev/packages/@vue/cli-service/lib/config/app.js#L171
+			fileBlacklist: [/\.map$/, /hot-update\.js$/, /runtime\..*\.js$/],
+			include: 'initial'
+		}])
 
-    // when there are many pages, it will cause too many meaningless requests
-    config.plugins.delete('prefetch')
+		// when there are many pages, it will cause too many meaningless requests
+		config.plugins.delete('prefetch')
 
-    // set svg-sprite-loader
-    config.module
-      .rule('svg')
-      .exclude.add(resolve('src/icons'))
-      .end()
-    config.module
-      .rule('icons')
-      .test(/\.svg$/)
-      .include.add(resolve('src/icons'))
-      .end()
-      .use('svg-sprite-loader')
-      .loader('svg-sprite-loader')
-      .options({
-        symbolId: 'icon-[name]'
-      })
-      .end()
+		// set svg-sprite-loader
+		config.module
+			.rule('svg')
+			.exclude.add(resolve('src/icons'))
+			.end()
+		config.module
+			.rule('icons')
+			.test(/\.svg$/)
+			.include.add(resolve('src/icons'))
+			.end()
+			.use('svg-sprite-loader')
+			.loader('svg-sprite-loader')
+			.options({
+				symbolId: 'icon-[name]'
+			})
+			.end()
 
-    config
-      .when(process.env.NODE_ENV !== 'development',
-        config => {
-          config
-            .plugin('ScriptExtHtmlWebpackPlugin')
-            .after('html')
-            .use('script-ext-html-webpack-plugin', [{
-              // `runtime` must same as runtimeChunk name. default is `runtime`
-              inline: /runtime\..*\.js$/
-            }])
-            .end()
-          config
-            .optimization.splitChunks({
-              chunks: 'all',
-              cacheGroups: {
-                libs: {
-                  name: 'chunk-libs',
-                  test: /[\\/]node_modules[\\/]/,
-                  priority: 10,
-                  chunks: 'initial' // only package third parties that are initially dependent
-                },
-                elementUI: {
-                  name: 'chunk-elementUI', // split elementUI into a single package
-                  priority: 20, // the weight needs to be larger than libs and app or it will be packaged into libs or app
-                  test: /[\\/]node_modules[\\/]_?element-ui(.*)/ // in order to adapt to cnpm
-                },
-                commons: {
-                  name: 'chunk-commons',
-                  test: resolve('src/components'), // can customize your rules
-                  minChunks: 3, //  minimum common number
-                  priority: 5,
-                  reuseExistingChunk: true
-                }
-              }
-            })
-          // https:// webpack.js.org/configuration/optimization/#optimizationruntimechunk
-          config.optimization.runtimeChunk('single')
-        }
-      )
-  }
-}
+		config
+			.when(process.env.NODE_ENV !== 'development',
+				config => {
+					config
+						.plugin('ScriptExtHtmlWebpackPlugin')
+						.after('html')
+						.use('script-ext-html-webpack-plugin', [{
+							// `runtime` must same as runtimeChunk name. default is `runtime`
+							inline: /runtime\..*\.js$/
+						}])
+						.end()
+					config
+						.optimization.splitChunks({
+							chunks: 'all',
+							cacheGroups: {
+								libs: {
+									name: 'chunk-libs',
+									test: /[\\/]node_modules[\\/]/,
+									priority: 10,
+									chunks: 'initial' // only package third parties that are initially dependent
+								},
+								elementUI: {
+									name: 'chunk-elementUI', // split elementUI into a single package
+									priority: 20, // the weight needs to be larger than libs and app or it will be packaged into libs or app
+									test: /[\\/]node_modules[\\/]_?element-ui(.*)/ // in order to adapt to cnpm
+								},
+								commons: {
+									name: 'chunk-commons',
+									test: resolve('src/components'), // can customize your rules
+									minChunks: 3, //  minimum common number
+									priority: 5,
+									reuseExistingChunk: true
+								}
+							}
+						})
+					// https://webpack.js.org/configuration/optimization/#optimizationruntimechunk
+					config.optimization.runtimeChunk('single')
+				}
+			)
+	}
+}