Browse Source

初步完成

soft5566 2 years ago
parent
commit
4f1106457d

+ 20 - 72
src/api/data.js

@@ -1,93 +1,41 @@
 import request from '@/utils/request'
 
-// 获取充值记录,表格数据
-export function getTableData(forData) {
-	let data = new FormData()
-	data.append('page', forData.page)
-	data.append('rows', forData.rows)
-	if (typeof forData.order_name_phone != 'undefined') {
-		data.append('order_name_phone', forData.order_name_phone)
-	}
-	if (typeof forData.start_time != 'undefined') {
-		data.append('start_time', forData.start_time)
-	}
-	if (typeof forData.end_time != 'undefined') {
-		data.append('end_time', forData.end_time)
-	}
-	if (typeof forData.status != 'undefined') {
-		data.append('status', forData.status)
-	}
+// 获取订单数据 订单状态占比
+export function getOrderData() {
 	return request({
-		url: '/booklist.action',
-		method: 'post',
-		data
+		url: '/idcgetBookStatusData.action',
+		method: 'get'
 	})
 }
 
-// 核销
-export function collate(forData) {
-	let data = new FormData()
-	data.append('id', forData.id)
-	data.append('status', forData.status)
+// 查询各县民宿数量 民宿统计
+export function getHomestayStatistics() {
 	return request({
-		url: '/bookoperate_live.action',
-		method: 'post',
-		data,
-		headers: {
-			'admin_name': 'admin'
-		}
+		url: '/idcgetHotelData.action',
+		method: 'get'
 	})
 }
 
-// 退款
-export function refund(forData) {
-	let data = new FormData()
-	data.append('id', forData.id)
-	data.append('status', forData.status)
+// 订单量排行
+export function getOrderVolumeRanking(param) {
 	return request({
-		url: '/bookrefund_money.action',
-		method: 'post',
-		data,
-		headers: {
-			'admin_name': 'admin'
-		}
+		url: '/idcgetRankBookNumData.action?type=' + param,
+		method: 'get'
 	})
 }
 
-// 退房
-export function checkout(forData) {
-	let data = new FormData()
-	data.append('id', forData.id)
-	data.append('status', forData.status)
+// 查询销售额排行
+export function getQuerySalesRankings(param) {
 	return request({
-		url: '/bookrefund_room.action',
-		method: 'post',
-		data,
-		headers: {
-			'admin_name': 'admin'
-		}
+		url: '/idcgetRankSalesAmountData.action?type=' + param,
+		method: 'get'
 	})
 }
 
-// 下载
-export function downloadExcel(forData) {
-	let data = new FormData()
-	if (typeof forData.order_name_phone != 'undefined') {
-		data.append('order_name_phone', forData.order_name_phone)
-	}
-	if (typeof forData.start_time != 'undefined') {
-		data.append('start_time', forData.start_time)
-	}
-	if (typeof forData.end_time != 'undefined') {
-		data.append('end_time', forData.end_time)
-	}
-	if (typeof forData.status != 'undefined') {
-		data.append('status', forData.status)
-	}
-	// console.log(forData);
+// 查询经营概况
+export function getManagementProfile() {
 	return request({
-		url: '/bookto_excel.action',
-		method: 'post',
-		data
+		url: '/idcgetSumData.action',
+		method: 'get'
 	})
 }

+ 16 - 13
src/api/fileInfo.js

@@ -1,19 +1,22 @@
 import request from '@/utils/request'
 
 export function getFileList(linkId) {
-  const query = '?linkId=' + linkId
-  return request({
-    url: '/uploadgetByLinkId.action' + query,
-    method: 'get'
-  })
+	const query = '?linkId=' + linkId
+
+	return request({
+		url: '/uploadgetByLinkId.action' + query,
+		method: 'get'
+	})
 }
 
 export function uploadhimage(forData) {
-  const data = new FormData()
-  data.append('myFile', forData.file)
-  return request({
-    url: '/uploadhimage.action',
-    method: 'post',
-    data
-  })
-}
+	const data = new FormData()
+	data.append('myFileFileName', forData.file.name)
+	data.append('myFile', forData.file)
+
+	return request({
+		url: 'https://chtech.ncjti.edu.cn/hotelReservation/fileload/loadhimage.action',
+		method: 'post',
+		data
+	})
+}

+ 11 - 14
src/api/residentialhostelMgr.js

@@ -35,19 +35,17 @@ export function getTowns() {
 // 新增民宿
 export function addHostel(param) {
 	let data = new FormData();
+	data.append('adminName', param.adminName);
+	data.append('password', 'Jams_123456');
 	data.append('hotelName', param.hotelName);
+	data.append('hotelTownship', param.id);
 	data.append('corpnName', param.corpnName);
 	data.append('corpnPhone', param.corpnPhone);
-	data.append('hotelTownship', param.id);
-	data.append('adminName', param.adminName);
+	data.append('level', param.level);
 	data.append('bankCard', param.bankCard);
 	data.append('cardName', param.cardName);
 	data.append('bankName', param.bankName);
-	data.append('password', 'Jams123456');
-	// 文件对象
-	param.fileList.map(file => {
-		data.append("fileListJson", file.raw)
-	})
+	data.append('fileListJson', param.fileUrl);
 
 	return request({
 		url: '/managerAdmininsertAdmin.action',
@@ -59,19 +57,18 @@ export function addHostel(param) {
 // 修改民宿
 export function modifyHostel(param) {
 	let data = new FormData();
+	data.append('id', param.id);
+	data.append('adminName', param.adminName);
+	data.append('password', 'Jams_123456');
 	data.append('hotelName', param.hotelName);
+	data.append('hotelTownship', param.hotelTownship);
 	data.append('corpnName', param.corpnName);
 	data.append('corpnPhone', param.corpnPhone);
-	data.append('hotelTownship', param.id);
-	data.append('adminName', param.adminName);
+	data.append('level', param.level);
 	data.append('bankCard', param.bankCard);
 	data.append('cardName', param.cardName);
 	data.append('bankName', param.bankName);
-	data.append('password', 'Jams123456');
-	// 文件对象
-	param.fileList.map(file => {
-		data.append("fileListJson", file.raw)
-	})
+	data.append('fileListJson', param.fileUrl);
 
 	return request({
 		url: '/managerAdminupdateAdmin.action',

+ 6 - 6
src/api/stdbookMgr.js

@@ -6,8 +6,8 @@ export function getTableData(forData) {
 	data.append('page', forData.page)
 	data.append('rows', forData.rows)
 
-	if (typeof forData.value !== 'undefined') {
-		data.append('hotelTownship', forData.value)
+	if (typeof forData.id !== 'undefined') {
+		data.append('hotelTownship', forData.id)
 	}
 	if (typeof forData.amount1 !== 'undefined') {
 		data.append('minTotalPrice', forData.amount1)
@@ -22,7 +22,7 @@ export function getTableData(forData) {
 	if (typeof forData.keyword !== 'undefined') {
 		data.append('ledgerParam', forData.keyword)
 	}
-
+	
 	return request({
 		url: '/bookquearyLedgerPage.action',
 		method: 'post',
@@ -44,8 +44,8 @@ export function getTowns() {
 // 下载
 export function downloadExcel(forData) {
 	let data = new FormData()
-	if (typeof forData.value !== 'undefined') {
-		data.append('hotelTownship', forData.value)
+	if (typeof forData.id !== 'undefined') {
+		data.append('hotelTownship', forData.id)
 	}
 	if (typeof forData.amount1 !== 'undefined') {
 		data.append('minTotalPrice', forData.amount1)
@@ -60,7 +60,7 @@ export function downloadExcel(forData) {
 	if (typeof forData.keyword !== 'undefined') {
 		data.append('ledgerParam', forData.keyword)
 	}
-
+	
 	return request({
 		url: '/toLedgerAdmimnExcel.action',
 		method: 'post',

+ 30 - 5
src/components/pl-upload/index.vue

@@ -44,7 +44,11 @@
 			type: {
 				type: Number,
 				default: 1
-			} // 返回类型 1:返回fileListJson 2.最大上传量为1时返回url
+			}, // 返回类型 1:返回fileListJson 2.最大上传量为1时返回url
+			times: {
+				type: String,
+				default: ""
+			}
 		},
 		data() {
 			return {
@@ -54,6 +58,23 @@
 				defFilterTypes: '.jpg, .jpeg, .png' // 默认上传类型
 			}
 		},
+		watch: {
+			'linkUrl': { // 深度监听,可监听到对象、数组的变化
+				handler(newV, oldV) {
+					this.init()
+				}
+			},
+			'linkId': { // 深度监听,可监听到对象、数组的变化
+				handler(newV, oldV) {
+					this.init()
+				}
+			},
+			'times': { //深度监听,可监听到对象、数组的变化
+				handler(newV, oldV) {
+					this.init()
+				}
+			}
+		},
 		created() {
 			this.init()
 		},
@@ -83,6 +104,7 @@
 						})
 					}
 				}
+				this.hideUpload = this.fileList.length >= this.limitCount
 				this.refreshUploadFile()
 			},
 			handleClick(tab, event) {
@@ -126,9 +148,13 @@
 				// 发起上传
 				uploadhimage(file).then((res) => {
 					const tempData = res.data
-					self.fileList[self.fileList.length - 1] = tempData
-					self.refreshUploadFile()
-					loading.close()
+					self.uploadFileList.push(tempData)
+					self.fileList = self.uploadFileList
+					setTimeout(() => {
+						// console.log("附件信息",self.fileList)
+						self.refreshUploadFile()
+						loading.close()
+					}, 1000)
 				}).catch((err) => {
 					self.fileList.splice(self.fileList.length - 1, 1)
 					console.log(err)
@@ -150,7 +176,6 @@
 						this.$emit('refreshModel', undefined)
 					}
 				} else {
-					this.uploadFileList = this.fileList
 					this.$emit('refreshModel', JSON.stringify(this.uploadFileList))
 				}
 			}

+ 302 - 147
src/views/data/index.vue

@@ -18,22 +18,28 @@
 								<div class="content">
 									<div class="con-con con-bg-1">
 										<div class="con-title">民宿总数</div>
-										<div class="con-num">658</div>
+										<div class="con-num">{{ total_number_of_accommodation }}</div>
 									</div>
 									<div class="con-con con-bg-2">
 										<div class="con-title">今日访问量</div>
-										<div class="con-num">123,567</div>
-										<div class="con-num">较昨天 ▲ 12%</div>
+										<div class="con-num">{{ todays_traffic }}</div>
+										<div v-if="more_traffic_today_than_yesterday >= 0" class="con-num">较昨天 ▲ {{ more_traffic_today_than_yesterday }}</div>
+										<div v-else class="con-num">较昨天 ▼ {{ more_traffic_today_than_yesterday }}</div>
 									</div>
 									<div class="con-con con-bg-3">
 										<div class="con-title">今日销售额</div>
-										<div class="con-num">123,567</div>
-										<div class="con-num">较昨天 ▲ 12%</div>
+										<div class="con-num">{{ todays_sales }}</div>
+										<div v-if="sales_are_higher_today_than_yesterday >= 0" class="con-num">较昨天 ▲ {{ sales_are_higher_today_than_yesterday }}
+										</div>
+										<div v-else class="con-num">较昨天 ▼ {{ sales_are_higher_today_than_yesterday }}</div>
 									</div>
 									<div class="con-con con-bg-4">
 										<div class="con-title">今日订单量</div>
-										<div class="con-num">2897</div>
-										<div class="con-num">较昨天 ▼ 8%</div>
+										<div class="con-num">{{ order_quantity_today }}</div>
+										<div v-if="todays_order_volume_is_higher_than_yesterday >= 0" class="con-num">较昨天 ▲
+											{{ todays_order_volume_is_higher_than_yesterday }}
+										</div>
+										<div v-else class="con-num">较昨天 ▼ {{ todays_order_volume_is_higher_than_yesterday }}</div>
 									</div>
 								</div>
 							</el-col>
@@ -128,11 +134,11 @@
 								</div>
 								<div class="content">
 									<el-table :data="tableOrderData" style="width: 100%" height="330">
-										<el-table-column fixed prop="date" label="排行" align="center" width="80px">
+										<el-table-column fixed prop="rark" label="排行" align="center" width="80px">
 										</el-table-column>
-										<el-table-column prop="name" label="民宿名称" align="center">
+										<el-table-column prop="hotelName" label="民宿名称" align="center">
 										</el-table-column>
-										<el-table-column prop="province" label="订单量" align="center">
+										<el-table-column prop="bookNum" label="订单量" align="center">
 										</el-table-column>
 									</el-table>
 								</div>
@@ -156,11 +162,11 @@
 								</div>
 								<div class="content">
 									<el-table :data="tableSellData" style="width: 100%" height="330">
-										<el-table-column fixed prop="date" label="排行" align="center" width="80px">
+										<el-table-column fixed prop="rark" label="排行" align="center" width="80px">
 										</el-table-column>
-										<el-table-column prop="name" label="民宿名称" align="center">
+										<el-table-column prop="hotelName" label="民宿名称" align="center">
 										</el-table-column>
-										<el-table-column prop="province" label="销售额" align="center">
+										<el-table-column prop="salesAmount" label="销售额" align="center">
 										</el-table-column>
 									</el-table>
 								</div>
@@ -177,11 +183,11 @@
 	import * as echarts from 'echarts';
 
 	import {
-		getTableData,
-		collate,
-		refund,
-		checkout,
-		downloadExcel
+		getOrderData,
+		getHomestayStatistics,
+		getOrderVolumeRanking,
+		getQuerySalesRankings,
+		getManagementProfile
 	} from '@/api/data';
 
 	import {
@@ -191,81 +197,16 @@
 	export default {
 		data() {
 			return {
-				tableOrderData: [{
-					date: 1,
-					name: '仙居minute',
-					province: '200000.00'
-				}, {
-					date: 2,
-					name: '怡人民宿',
-					province: '203400.00'
-				}, {
-					date: 3,
-					name: '德贤居',
-					province: '23556.00'
-				}, {
-					date: 4,
-					name: '鄂娜菊',
-					province: '2343.00'
-				}, {
-					date: 5,
-					name: '测试场',
-					province: '4524.00'
-				}],
-				tableSellData: [{
-					date: 1,
-					name: '仙居minute',
-					province: '200000.00'
-				}, {
-					date: 2,
-					name: '怡人民宿',
-					province: '203400.00'
-				}, {
-					date: 3,
-					name: '德贤居',
-					province: '23556.00'
-				}, {
-					date: 4,
-					name: '鄂娜菊',
-					province: '2343.00'
-				}, {
-					date: 5,
-					name: '测试场',
-					province: '4524.00'
-				}],
-				chartPieData: [{
-						value: 335,
-						name: '待付款'
-					},
-					{
-						value: 310,
-						name: '已支付'
-					},
-					{
-						value: 234,
-						name: '已入住'
-					},
-					{
-						value: 135,
-						name: '已退单'
-					},
-					{
-						value: 1548,
-						name: '待入住'
-					},
-					{
-						value: 1548,
-						name: '已取消'
-					},
-					{
-						value: 1548,
-						name: '已退款'
-					},
-					{
-						value: 1548,
-						name: '已消费'
-					}
-				],
+				total_number_of_accommodation: 0,
+				todays_traffic: 0,
+				more_traffic_today_than_yesterday: 0,
+				todays_sales: 0,
+				sales_are_higher_today_than_yesterday: '0.00',
+				order_quantity_today: 0,
+				todays_order_volume_is_higher_than_yesterday: 0,
+				tableOrderData: [], // 订单量排行
+				tableSellData: [], // 销售量排行
+				chartOrderPieData: [], // 订单状态占比数据
 				chartUserPieData: [{
 						value: 335,
 						name: '男'
@@ -335,9 +276,18 @@
 
 		},
 		mounted() {
-			this.pie()
+			// 获取订单状态占比数据
+			this.getOrderData()
+			// 查询各县民宿数量 民宿统计
+			this.getHomestayStatistics()
+			// 查询订单量排行
+			this.getOrderVolumeRanking(2)
+			// 查询销售额排行
+			this.getQuerySalesRankings(2)
+			// 查询经营概况
+			this.getManagementProfile()
+
 			this.pieUser()
-			this.bar()
 			this.barUser()
 			this.area()
 			// 自适应窗口大小
@@ -353,14 +303,261 @@
 			toggleUserButton(buttonName) {
 				this.activeUserButton = buttonName;
 			},
+			// 销售排行不同时间切换
+			toggleSellButton(buttonName) {
+				if (buttonName === 'activeSellButton1') {
+					this.getQuerySalesRankings(1)
+				} else if (buttonName === 'activeSellButton2') {
+					this.getQuerySalesRankings(2)
+				} else if (buttonName === 'activeSellButton3') {
+					this.getQuerySalesRankings(3)
+				} else {
+					this.$message.error('未知时间')
+				}
+				this.activeSellButton = buttonName;
+			},
+			getManagementProfile() {
+				getManagementProfile().then((res) => {
+					// console.log(res);
+					if (typeof res.code == 'undefined' || res.code == '') {
+						this.$message.error('返回数据格式问题,code未获取到!');
+						return;
+					}
+
+					if (res.code === 200) {
+						// bookNumyDay;//昨日订单量
+						// salesAmountyDay;//昨日销售量
+						const tempdata = res.data
+
+						this.total_number_of_accommodation = tempdata.hotelSum // 民宿总数
+						// 访问量
+						this.todays_traffic = 0
+						this.more_traffic_today_than_yesterday = 0
+						// 销售额
+						this.todays_sales = tempdata.salesAmountDay // 今日销售量 
+						this.sales_are_higher_today_than_yesterday = tempdata.salesAmountGrowth.toFixed(2) // 销售量增长量
+						// 订单量
+						this.order_quantity_today = tempdata.bookNumDay // 今日订单量
+						this.todays_order_volume_is_higher_than_yesterday = tempdata.bookNumGrowth // 订单量增长量
+					} else {
+						this.$message.error(res.message);
+					}
+				}).catch((err) => {
+					// console.log(err);
+					this.$message.error(err.message);
+				})
+			},
+			/**
+			 * 查询销售额排行
+			 */
+			getQuerySalesRankings(param) {
+				getQuerySalesRankings(param).then((res) => {
+					// console.log(res);
+					if (typeof res.code == 'undefined' || res.code == '') {
+						this.$message.error('返回数据格式问题,code未获取到!');
+						return;
+					}
+
+					if (res.code === 200) {
+						this.tableSellData = []
+						for (var i = 0; i < res.data.length; i++) {
+							this.tableSellData.push({
+								rark: res.data[i].rank,
+								bookNum: res.data[i].bookNum,
+								hotelName: res.data[i].hotelName,
+								salesAmount: res.data[i].salesAmount
+							})
+						}
+					} else {
+						this.$message.error(res.message);
+					}
+				}).catch((err) => {
+					// console.log(err);
+					this.$message.error(err.message);
+				})
+			},
+			// 订单排行不同时间切换
 			toggleOrderButton(buttonName) {
+				if (buttonName === 'activeOrderButton1') {
+					this.getOrderVolumeRanking(1)
+				} else if (buttonName === 'activeOrderButton2') {
+					this.getOrderVolumeRanking(2)
+				} else if (buttonName === 'activeOrderButton3') {
+					this.getOrderVolumeRanking(3)
+				} else {
+					this.$message.error('未知时间')
+				}
 				this.activeOrderButton = buttonName;
 			},
-			toggleSellButton(buttonName) {
-				this.activeSellButton = buttonName;
+			/**
+			 * 查询订单量排行
+			 */
+			getOrderVolumeRanking(param) {
+				getOrderVolumeRanking(param).then((res) => {
+					// console.log(res);
+					if (typeof res.code == 'undefined' || res.code == '') {
+						this.$message.error('返回数据格式问题,code未获取到!');
+						return;
+					}
+
+					if (res.code === 200) {
+						this.tableOrderData = []
+						for (var i = 0; i < res.data.length; i++) {
+							this.tableOrderData.push({
+								rark: res.data[i].rank,
+								bookNum: res.data[i].bookNum,
+								hotelName: res.data[i].hotelName,
+								salesAmount: res.data[i].salesAmount
+							})
+						}
+					} else {
+						this.$message.error(res.message);
+					}
+				}).catch((err) => {
+					// console.log(err);
+					this.$message.error(err.message);
+				})
 			},
-			// 饼图
-			pie() {
+			/**
+			 * 查询各县民宿数量 民宿统计
+			 */
+			getHomestayStatistics() {
+				getHomestayStatistics().then((res) => {
+					// console.log(res);
+					if (typeof res.code == 'undefined' || res.code == '') {
+						this.$message.error('返回数据格式问题,code未获取到!');
+						return;
+					}
+
+					if (res.code === 200) {
+						this.chartBarData = []
+						for (var i = 0; i < res.data.length; i++) {
+							this.chartBarData.push({
+								value: res.data[i].hotelNum,
+								name: res.data[i].hposition
+							})
+						}
+						this.bar()
+					} else {
+						this.$message.error(res.message);
+					}
+				}).catch((err) => {
+					// console.log(err);
+					this.$message.error(err.message);
+				})
+			},
+			// 查询各县民宿数量 民宿统计
+			bar() {
+				this.chartBar = echarts.init(this.$refs.chartBar);
+				this.chartBar.setOption({
+					tooltip: {
+						trigger: 'axis',
+						axisPointer: {
+							type: 'line',
+							label: {
+								backgroundColor: '#6a7985'
+							}
+						}
+					},
+					legend: {
+						type: 'plain',
+						orient: 'horizontal',
+						left: 'center',
+						top: 'bottom'
+					},
+					grid: {
+						left: 0,
+						top: 0,
+						right: 15,
+						bottom: 0,
+						containLabel: true
+					},
+					xAxis: {
+						type: 'value'
+					},
+					yAxis: {
+						type: 'category',
+						axisLabel: {
+							show: true,
+							interval: 0,
+							// rotate: 30
+							formatter: function(params) {
+								var newParamsName = ""; // 最终拼接成的字符串
+								var paramsNameNumber = params.length; // 实际标签的字数
+								var provideNumber = 6; // 每行能显示的字的个数
+								var rowNumber = Math.ceil(paramsNameNumber / provideNumber); // 换行的话,需要显示几行,向上取整
+								/**
+								 * 判断标签的个数是否大于规定的个数, 如果大于,则进行换行处理 如果不大于,即等于或小于,就返回原标签
+								 */
+								// 条件等同于rowNumber>1
+								if (paramsNameNumber > provideNumber) {
+									/** 循环每一行,p表示行 */
+									for (var p = 0; p < rowNumber; p++) {
+										var tempStr = ""; // 表示每一次截取的字符串
+										var start = p * provideNumber; // 开始截取的位置
+										var end = start + provideNumber; // 结束截取的位置
+										// 此处特殊处理最后一行的索引值
+										if (p == rowNumber - 1) {
+											// 最后一次不换行
+											tempStr = params.substring(start, paramsNameNumber);
+										} else {
+											// 每一次拼接字符串并换行
+											// tempStr = params.substring(start, end) + "\n";
+											tempStr = params.substring(start, end) + "…";
+										}
+										newParamsName += tempStr; // 最终拼成的字符串
+										break;
+									}
+
+								} else {
+									// 将旧标签的值赋给新标签
+									newParamsName = params;
+								}
+								//将最终的字符串返回
+								return newParamsName
+							}
+						},
+						data: this.chartBarData.map(item => item.name)
+					},
+					series: [{
+						type: 'bar',
+						data: this.chartBarData,
+						itemStyle: {
+							color: '#8080FF'
+						}
+					}]
+				});
+			},
+			/**
+			 * 获取订单状态占比数据
+			 */
+			getOrderData() {
+				getOrderData().then((res) => {
+					// console.log(res);
+					if (typeof res.code == 'undefined' || res.code == '') {
+						this.$message.error('返回数据格式问题,code未获取到!');
+						return;
+					}
+
+					if (res.code === 200) {
+						this.chartOrderPieData = []
+						for (var i = 0; i < res.data.length; i++) {
+							this.chartOrderPieData.push({
+								value: res.data[i].statusNum,
+								name: res.data[i].orderStatusName
+							})
+						}
+						this.orderPie()
+					} else {
+						this.$message.error(res.message);
+					}
+				}).catch((err) => {
+					// console.log(err);
+					this.$message.error(err.message);
+				})
+			},
+			// 订单状态占比 饼图
+			orderPie() {
 				this.chartPie = echarts.init(this.$refs.chartPie);
 				this.chartPie.setOption({
 					tooltip: {
@@ -368,18 +565,19 @@
 					},
 					legend: {
 						orient: 'horizontal',
-						bottom: 10
+						left: 'center',
+						top: 'bottom'
 					},
 					grid: {
 						left: '3%',
 						right: '4%',
-						bottom: '8%',
+						bottom: '28%',
 						top: '3%'
 					},
 					series: [{
 						type: 'pie',
 						radius: ['30%', '50%'],
-						data: this.chartPieData,
+						data: this.chartOrderPieData,
 						label: {
 							show: true,
 							position: 'outer',
@@ -404,6 +602,7 @@
 					},
 					title: {
 						text: '客户性别占比',
+						left:'center',
 						textAlign: 'left',
 						textStyle: {
 							fontSize: 14
@@ -439,51 +638,6 @@
 				});
 			},
 			// 柱形图
-			bar() {
-				this.chartBar = echarts.init(this.$refs.chartBar);
-				this.chartBar.setOption({
-					tooltip: {
-						trigger: 'axis',
-						axisPointer: {
-							type: 'line',
-							label: {
-								backgroundColor: '#6a7985'
-							}
-						}
-					},
-					legend: {
-						type: 'plain',
-						orient: 'horizontal',
-						bottom: 10
-					},
-					grid: {
-						left: '8%',
-						right: '5%',
-						bottom: '3%',
-						containLabel: true
-					},
-					xAxis: {
-						type: 'value',
-					},
-					yAxis: {
-						type: 'category',
-						axisLabel: {
-							show: true,
-							interval: 0,
-							// rotate: 60
-						},
-						data: this.chartBarData.map(item => item.name)
-					},
-					series: [{
-						type: 'bar',
-						data: this.chartBarData,
-						itemStyle: {
-							color: '#8080FF'
-						}
-					}]
-				});
-			},
-			// 柱形图
 			barUser() {
 				this.chartUserBar = echarts.init(this.$refs.chartUserBar);
 				this.chartUserBar.setOption({
@@ -498,6 +652,7 @@
 					},
 					title: {
 						text: '人群年龄占比',
+						left:'center',
 						textStyle: {
 							fontSize: 14
 						}

+ 1 - 1
src/views/login/index.vue

@@ -121,7 +121,7 @@
 								}
 								this.loading = false;
 							}).catch((err) => {
-								console.log(err);
+								// console.log(err);
 								this.$message.error(err.message);
 								this.loading = false;
 							});

+ 275 - 153
src/views/residentialhostelMgr/index.vue

@@ -34,33 +34,36 @@
 							<el-table-column type="expand" width="58">
 								<template slot-scope="props">
 									<el-form label-position="left" inline class="demo-table-expand">
-										<el-form-item label="状态">
+										<!-- <el-form-item label="状态">
 											<span>{{ props.row.status === 1 ? '正常' : '已冻结' }}</span>
 										</el-form-item>
 										<el-form-item label="民宿名称">
 											<span>{{ props.row.hotelName }}</span>
 										</el-form-item>
-										<el-form-item label="联系人">
+										<el-form-item label="联系人(法人)">
 											<span>{{ props.row.corpnName }}</span>
 										</el-form-item>
 										<el-form-item label="联系电话">
 											<span>{{ props.row.corpnPhone }}</span>
 										</el-form-item>
 										<el-form-item label="所属乡镇">
-											<span>{{ props.row.hotelTownship }}</span>
+											<span>{{ props.row.hotelTownshipName }}</span>
 										</el-form-item>
 										<el-form-item label="民宿账号">
 											<span>{{ props.row.adminName }}</span>
-										</el-form-item>
+										</el-form-item> -->
 										<el-form-item label="银行卡号">
 											<span>{{ props.row.bankCard }}</span>
 										</el-form-item>
 										<el-form-item label="银行名称">
 											<span>{{ props.row.bankName }}</span>
 										</el-form-item>
-										<el-form-item label="户主">
+										<el-form-item label="户主姓名">
 											<span>{{ props.row.cardName }}</span>
 										</el-form-item>
+										<el-form-item label="权限">
+											<span>{{ props.row.level == 1 ? '管理员' : '超级管理员' }}</span>
+										</el-form-item>
 										<el-form-item label="备注">
 											<span>{{ props.row.remark }}</span>
 										</el-form-item>
@@ -88,7 +91,7 @@
 									<span>{{ scope.row.hotelName }}</span>
 								</template>
 							</el-table-column>
-							<el-table-column label="联系人" align="center">
+							<el-table-column label="联系人(法人)" align="center">
 								<template slot-scope="scope">
 									<span>{{ scope.row.corpnName }}</span>
 								</template>
@@ -100,7 +103,7 @@
 							</el-table-column>
 							<el-table-column label="所属乡镇" align="center">
 								<template slot-scope="scope">
-									<span>{{ scope.row.hotelTownship }}</span>
+									<span>{{ scope.row.hotelTownshipName}}</span>
 								</template>
 							</el-table-column>
 							<el-table-column label="民宿账号" align="center">
@@ -135,63 +138,61 @@
 		<!-- 添加民宿 -->
 		<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="addHostelFormRules"> -->
-					<el-form :model="formAddHostel" ref="addAccountForm">
+			<el-form :model="formAddHostel" ref="addHostelForm" :rules="addHostelFormRules">
+				<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-item label="民宿名称:" :label-width="formLabelWidth" :required="true" prop="hotelName">
-							<el-input v-model="formAddHostel.hotelName" autocomplete="off" placeholder="请输入民宿名称">
+							<el-input v-model="formAddHostel.hotelName" autocomplete="off" placeholder="请输入民宿名称" maxlength="20">
 							</el-input>
 						</el-form-item>
 						<el-form-item label="法人姓名:" :label-width="formLabelWidth" :required="true" prop="corpnName">
-							<el-input v-model="formAddHostel.corpnName" autocomplete="off" placeholder="请输入法人姓名">
+							<el-input v-model="formAddHostel.corpnName" autocomplete="off" placeholder="请输入法人姓名" maxlength="8">
 							</el-input>
 						</el-form-item>
 						<el-form-item label="法人电话:" :label-width="formLabelWidth" :required="true" prop="corpnPhone">
-							<el-input v-model="formAddHostel.corpnPhone" autocomplete="off" placeholder="请输入法人电话">
+							<el-input v-model="formAddHostel.corpnPhone" autocomplete="off" placeholder="请输入法人电话" maxlength="13">
 							</el-input>
 						</el-form-item>
-						<el-form-item label="所属乡镇:" :label-width="formLabelWidth" :required="true" prop="hotelTownship">
-							<el-select v-model="formAddHostel.hotelTownship" clearable placeholder="请选择乡镇" @change="getHotelId($event)">
+						<el-form-item label="所属乡镇:" :label-width="formLabelWidth" :required="true" prop="id">
+							<el-select v-model="formAddHostel.id" 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="adminName">
-							<el-input v-model="formAddHostel.adminName" autocomplete="off" placeholder="请输入民宿账号" maxlength="4">
+							<el-input v-model="formAddHostel.adminName" autocomplete="off" placeholder="请输入民宿账号" maxlength="16">
 							</el-input>
 						</el-form-item>
-					</el-form>
-					<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;">
-						注:账号解冻后,密码默认为Jams123456</div>
-				</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="formAddHostel" ref="addAccountForm" :rules="addHostelFormRules"> -->
-					<el-form :model="formAddHostel" ref="addAccountForm">
+						<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;">
+							注:账号解冻后,密码默认为Jams_123456</div>
+					</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-item label="银行卡号:" :label-width="formLabelWidth" :required="true" prop="bankCard">
-							<el-input v-model="formAddHostel.bankCard" autocomplete="off" placeholder="请输入银行卡号">
+							<el-input v-model="formAddHostel.bankCard" autocomplete="off" placeholder="请输入银行卡号" maxlength="19">
 							</el-input>
 						</el-form-item>
 						<el-form-item label="户主姓名:" :label-width="formLabelWidth" :required="true" prop="cardName">
-							<el-input v-model="formAddHostel.cardName" autocomplete="off" placeholder="请输入户主姓名">
+							<el-input v-model="formAddHostel.cardName" autocomplete="off" placeholder="请输入户主姓名" maxlength="8">
 							</el-input>
 						</el-form-item>
 						<el-form-item label="银行名称:" :label-width="formLabelWidth" :required="true" prop="bankName">
-							<el-input v-model="formAddHostel.bankName" autocomplete="off" placeholder="请输入银行名称">
+							<el-input v-model="formAddHostel.bankName" autocomplete="off" placeholder="请输入银行名称" maxlength="10">
 							</el-input>
 						</el-form-item>
-					</el-form>
-				</el-col>
-			</el-row>
-			<el-row>
-				<el-col :span="24">
-					<div style="font-size: 16px;font-weight: 700; color: rgba(0, 0, 0, 1); margin: 0px 0 20px 20px;">营业执照</div>
-					<pl-upload v-model="formAddHostel.fileListJson" :linkId="formAddHostel.id" :limitCount="6" :type="1"></pl-upload>
-				</el-col>
-			</el-row>
+					</el-col>
+				</el-row>
+				<el-row>
+					<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-form-item label="" :required="true" prop="fileUrl">
+							<pl-upload v-model="formAddHostel.fileUrl" :times="times" :linkUrl="formAddHostel.url" :limitCount="6" :type="1"></pl-upload>
+						</el-form-item>
+					</el-col>
+				</el-row>
+			</el-form>
 			<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>
@@ -201,70 +202,68 @@
 			</div>
 		</el-dialog>
 		<!-- 修改民宿对话框 -->
-		<el-dialog title="修改民宿" custom-class="modify-house-class" :visible.sync="dialogModifyHouseFormVisible" :close-on-click-modal="false"
+		<el-dialog title="修改民宿" custom-class="modify-house-class" :visible.sync="dialogModifyHostelFormVisible" :close-on-click-modal="false"
 			:close-on-press-escape="false" @close="modify_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="formModifyHostel" ref="modifyAccountForm" :rules="modifyHostelFormRules"> -->
-					<el-form :model="formModifyHostel" ref="modifyAccountForm">
+			<el-form :model="formModifyHostel" ref="modifyHostelForm" :rules="modifyHostelFormRules">
+				<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-item label="民宿名称:" :label-width="formLabelWidth" :required="true" prop="hotelName">
-							<el-input v-model="formModifyHostel.hotelName" autocomplete="off" placeholder="请输入民宿名称">
+							<el-input v-model="formModifyHostel.hotelName" autocomplete="off" placeholder="请输入民宿名称" maxlength="20">
 							</el-input>
 						</el-form-item>
 						<el-form-item label="法人姓名:" :label-width="formLabelWidth" :required="true" prop="corpnName">
-							<el-input v-model="formModifyHostel.corpnName" autocomplete="off" placeholder="请输入法人姓名">
+							<el-input v-model="formModifyHostel.corpnName" autocomplete="off" placeholder="请输入法人姓名" maxlength="8">
 							</el-input>
 						</el-form-item>
 						<el-form-item label="法人电话:" :label-width="formLabelWidth" :required="true" prop="corpnPhone">
-							<el-input v-model="formModifyHostel.corpnPhone" autocomplete="off" placeholder="请输入法人电话">
+							<el-input v-model="formModifyHostel.corpnPhone" autocomplete="off" placeholder="请输入法人电话" maxlength="13">
 							</el-input>
 						</el-form-item>
-						<el-form-item label="所属乡镇:" :label-width="formLabelWidth" :required="true" prop="hotelTownship">
-							<el-select v-model="formModifyHostel.id" clearable placeholder="请选择乡镇">
+						<el-form-item label="所属乡镇:" :label-width="formLabelWidth" :required="true" prop="id">
+							<el-select v-model="formModifyHostel.hotelTownship" 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="adminName">
-							<el-input v-model="formModifyHostel.adminName" autocomplete="off" placeholder="请输入民宿账号" maxlength="4">
+							<el-input v-model="formModifyHostel.adminName" autocomplete="off" placeholder="请输入民宿账号" maxlength="16">
 							</el-input>
 						</el-form-item>
-					</el-form>
-					<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;">
-						注:账号解冻后,密码默认为Jams123456</div>
-				</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="formModifyHostel" ref="modifyAccountForm" :rules="modifyHostelFormRules"> -->
-					<el-form :model="formModifyHostel" ref="modifyAccountForm">
+						<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;">
+							注:账号解冻后,密码默认为Jams123456</div>
+					</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-item label="银行卡号:" :label-width="formLabelWidth" :required="true" prop="bankCard">
-							<el-input v-model="formModifyHostel.bankCard" autocomplete="off" placeholder="请输入银行卡号">
+							<el-input v-model="formModifyHostel.bankCard" autocomplete="off" placeholder="请输入银行卡号" maxlength="19">
 							</el-input>
 						</el-form-item>
 						<el-form-item label="户主姓名:" :label-width="formLabelWidth" :required="true" prop="cardName">
-							<el-input v-model="formModifyHostel.cardName" autocomplete="off" placeholder="请输入户主姓名">
+							<el-input v-model="formModifyHostel.cardName" autocomplete="off" placeholder="请输入户主姓名" maxlength="8">
 							</el-input>
 						</el-form-item>
-						<el-form-item label="银行名称:" :label-width="formLabelWidth" :required="true" prop="bankName">
+						<el-form-item label="银行名称:" :label-width="formLabelWidth" :required="true" prop="bankName" maxlength="10">
 							<el-input v-model="formModifyHostel.bankName" autocomplete="off" placeholder="请输入银行名称">
 							</el-input>
 						</el-form-item>
-					</el-form>
-				</el-col>
-			</el-row>
-			<el-row>
-				<el-col :span="24">
-					<div style="font-size: 16px;font-weight: 700; color: rgba(0, 0, 0, 1); margin: 0px 0 20px 20px;">营业执照</div>
-					<pl-upload v-model="formAddHostel.fileListJson" :linkId="formAddHostel.id" :limitCount="1" :type="1"></pl-upload>
-				</el-col>
-			</el-row>
+					</el-col>
+				</el-row>
+				<el-row>
+					<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-form-item label="" :required="true" prop="fileUrl">
+							<pl-upload v-model="formModifyHostel.fileUrl" :linkId="formModifyHostel.id" :limitCount="6" :type="1"></pl-upload>
+						</el-form-item>
+					</el-col>
+				</el-row>
+			</el-form>
 			<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 class="add-info-cancel-btn" @click="dialogModifyHouseFormVisible = false">取 消</el-button>
+				<el-button class="add-info-cancel-btn" @click="dialogModifyHostelFormVisible = false">取 消</el-button>
 				<el-button class="add-info-confirm-btn" @click="modify_house_dialog_handler">确 认</el-button>
 			</div>
 		</el-dialog>
@@ -417,7 +416,7 @@
 			:close-on-press-escape="false" @close="add_house_dialog_close">
 			<el-row>
 				<el-col :span="24">
-					<!-- <el-form :model="formAddHostel" ref="addAccountForm" :rules="addHostelFormRules"> -->
+					<!-- <el-form :model="add_dictionary_data" ref="addAccountForm" :rules="addHostelFormRules"> -->
 					<el-form :model="add_dictionary_data" ref="addAccountForm">
 						<el-form-item label="民宿类型:" :label-width="formLabelWidth" :required="true" prop="name">
 							<el-input v-model="add_dictionary_data.name" autocomplete="off" maxlength="16" placeholder="请输入民宿类型">
@@ -436,7 +435,7 @@
 			:close-on-press-escape="false" @close="add_house_dialog_close">
 			<el-row>
 				<el-col :span="24">
-					<!-- <el-form :model="formAddHostel" ref="addAccountForm" :rules="addHostelFormRules"> -->
+					<!-- <el-form :model="modify_dictionary_data" ref="addAccountForm" :rules="addHostelFormRules"> -->
 					<el-form :model="modify_dictionary_data" ref="addAccountForm">
 						<el-form-item label="民宿类型:" :label-width="formLabelWidth" :required="true" prop="name">
 							<el-input v-model="modify_dictionary_data.name" autocomplete="off" maxlength="16" placeholder="请输入民宿类型">
@@ -467,7 +466,7 @@
 			<el-row>
 				<el-col :span="24">
 					<div style="font-size: 16px;font-weight: 700; color: rgba(0, 0, 0, 1); margin: 0px 0 20px 20px;">图标</div>
-					<pl-upload v-model="add_dictionary_data.fileUrl" :linkUrl="add_dictionary_data.url" :limitCount="1" :type="2"></pl-upload>
+					<pl-upload v-model="add_dictionary_data.fileUrl" :times="times" :linkUrl="add_dictionary_data.url" :limitCount="1" :type="2"></pl-upload>
 				</el-col>
 			</el-row>
 			<div slot="footer" class="dialog-footer">
@@ -480,7 +479,7 @@
 			:close-on-press-escape="false" @close="add_house_dialog_close">
 			<el-row>
 				<el-col :span="24">
-					<!-- <el-form :model="formAddHostel" ref="addAccountForm" :rules="addHostelFormRules"> -->
+					<!-- <el-form :model="modify_dictionary_data" ref="addAccountForm" :rules="addHostelFormRules"> -->
 					<el-form :model="modify_dictionary_data" ref="addAccountForm">
 						<el-form-item label="民宿服务:" :label-width="formLabelWidth" :required="true" prop="name">
 							<el-input v-model="modify_dictionary_data.name" autocomplete="off" maxlength="16" placeholder="请输入民宿服务">
@@ -505,7 +504,7 @@
 			:close-on-press-escape="false" @close="add_house_dialog_close">
 			<el-row>
 				<el-col :span="24">
-					<!-- <el-form :model="formAddHostel" ref="addAccountForm" :rules="addHostelFormRules"> -->
+					<!-- <el-form :model="add_dictionary_data" ref="addAccountForm" :rules="addHostelFormRules"> -->
 					<el-form :model="add_dictionary_data" ref="addAccountForm">
 						<el-form-item label="房型名称:" :label-width="formLabelWidth" :required="true" prop="name">
 							<el-input v-model="add_dictionary_data.name" autocomplete="off" maxlength="16" placeholder="请输入房型名称">
@@ -524,7 +523,7 @@
 			:close-on-press-escape="false" @close="add_house_dialog_close">
 			<el-row>
 				<el-col :span="24">
-					<!-- <el-form :model="formAddHostel" ref="addAccountForm" :rules="addHostelFormRules"> -->
+					<!-- <el-form :model="modify_dictionary_data" ref="addAccountForm" :rules="addHostelFormRules"> -->
 					<el-form :model="modify_dictionary_data" ref="addAccountForm">
 						<el-form-item label="房型名称:" :label-width="formLabelWidth" :required="true" prop="name">
 							<el-input v-model="modify_dictionary_data.name" autocomplete="off" maxlength="16" placeholder="请输入房型名称">
@@ -555,7 +554,7 @@
 			<el-row>
 				<el-col :span="24">
 					<div style="font-size: 16px;font-weight: 700; color: rgba(0, 0, 0, 1); margin: 0px 0 20px 20px;">图标</div>
-					<pl-upload v-model="add_dictionary_data.fileUrl" :linkUrl="add_dictionary_data.fileUrl" :limitCount="1" :type="2"></pl-upload>
+					<pl-upload v-model="add_dictionary_data.fileUrl" :times="times" :linkUrl="add_dictionary_data.url" :limitCount="1" :type="2"></pl-upload>
 				</el-col>
 			</el-row>
 			<div slot="footer" class="dialog-footer">
@@ -568,7 +567,7 @@
 			:close-on-press-escape="false" @close="add_house_dialog_close">
 			<el-row>
 				<el-col :span="24">
-					<!-- <el-form :model="formAddHostel" ref="addAccountForm" :rules="addHostelFormRules"> -->
+					<!-- <el-form :model="modify_dictionary_data" ref="addAccountForm" :rules="addHostelFormRules"> -->
 					<el-form :model="modify_dictionary_data" ref="addAccountForm">
 						<el-form-item label="房型服务:" :label-width="formLabelWidth" :required="true" prop="name">
 							<el-input v-model="modify_dictionary_data.name" autocomplete="off" maxlength="16" placeholder="请输入房型服务">
@@ -580,7 +579,7 @@
 			<el-row>
 				<el-col :span="24">
 					<div style="font-size: 16px;font-weight: 700; color: rgba(0, 0, 0, 1); margin: 0px 0 20px 20px;">图标</div>
-					<pl-upload v-model="modify_dictionary_data.fileUrl" :linkUrl="modify_dictionary_data.fileUrl" :limitCount="1" :type="2"></pl-upload>
+					<pl-upload v-model="modify_dictionary_data.fileUrl" :linkUrl="modify_dictionary_data.url" :limitCount="1" :type="2"></pl-upload>
 				</el-col>
 			</el-row>
 			<div slot="footer" class="dialog-footer">
@@ -619,57 +618,125 @@
 		delHomestayDictionary
 	} from '@/api/residentialhostelMgr'
 	import plUpload from "@/components/pl-upload/index"
+	import {
+		Level
+	} from 'chalk';
 
 	export default {
 		components: {
 			plUpload
 		},
 		data() {
-			var checkHType = (rule, value, callback) => {
+			var checkTownId = (rule, value, callback) => {
 				if (!value) {
-					return callback(new Error('请输入房型'));
+					return callback(new Error('请选择乡镇'));
+				}
+				callback();
+			};
+			var checkHotelName = (rule, value, callback) => {
+				if (!value) {
+					return callback(new Error('请输入民宿名称'));
+				}
+				setTimeout(() => {
+					var reg = /^[\s\W\u4e00-\u9fa5]{2,20}$/
+					if (!reg.test(value)) {
+						callback(new Error('不能包含特殊符号和空白字符'));
+					} else {
+						callback();
+					}
+				}, 100);
+			};
+			var checkCorpnName = (rule, value, callback) => {
+				if (!value) {
+					return callback(new Error('请输入法人姓名'));
+				}
+				setTimeout(() => {
+					var reg = /^[\u4e00-\u9fa5]{2,8}$/
+					if (!reg.test(value)) {
+						callback(new Error('只能包含2到8个汉字'));
+					} else {
+						callback();
+					}
+				}, 100);
+			};
+			var checkCorpnPhone = (rule, value, callback) => {
+				if (!value) {
+					return callback(new Error('请输入法人电话'));
 				}
 				setTimeout(() => {
-					var reg = /^[\u4e00-\u9fa5\w]{3,16}$/
+					var reg = /^(?:\d{3}-\d{8}|\d{4}-\d{7}|1[3456789]\d{9})$/
 					if (!reg.test(value)) {
-						callback(new Error('3-16个由汉字、字母或数字组成字符'));
+						callback(new Error('请输入手机号或座机'));
 					} else {
 						callback();
 					}
 				}, 100);
 			};
-			var checkPrice = (rule, value, callback) => {
+			var checkAdminName = (rule, value, callback) => {
 				if (!value) {
-					return callback(new Error('请输入房费'));
+					return callback(new Error('请输入民宿账号'));
 				}
 				setTimeout(() => {
-					var reg = /^[1-9]\d{0,3}$/
+					var reg = /^[a-zA-Z0-9_]{5,16}$/
 					if (!reg.test(value)) {
-						callback(new Error('必须为小于9999的正整数'));
+						callback(new Error('只能包含字母、数字和下划线,长度5到16个之间'));
 					} else {
 						callback();
 					}
 				}, 100);
 			};
-			var checkNumber = (rule, value, callback) => {
+			var checkBankCard = (rule, value, callback) => {
 				if (!value) {
-					return callback(new Error('请输入数量'));
+					return callback(new Error('请输入银行卡号'));
+				}
+				callback();
+				// setTimeout(() => {
+				// 	var reg = /^([1-9]{1})(\d{15}|\d{18})$/
+				// 	if (!reg.test(value)) {
+				// 		callback(new Error('银行卡号长度不对'));
+				// 	} else {
+				// 		callback();
+				// 	}
+				// }, 100);
+			};
+			var checkCardName = (rule, value, callback) => {
+				if (!value) {
+					return callback(new Error('请输入户主姓名'));
 				}
 				setTimeout(() => {
-					var reg = /^[1-9]\d{0,3}$/
+					var reg = /^[\u4e00-\u9fa5]{2,8}$/
 					if (!reg.test(value)) {
-						callback(new Error('必须为小于9999的正整数'));
+						callback(new Error('只能包含2到8个汉字'));
 					} else {
 						callback();
 					}
 				}, 100);
 			};
+			var checkBankName = (rule, value, callback) => {
+				if (!value) {
+					return callback(new Error('请输入银行名称'));
+				}
+				setTimeout(() => {
+					var reg = /^[\u4e00-\u9fa5]{4,10}$/
+					if (!reg.test(value)) {
+						callback(new Error('只能包含4到10个汉字'));
+					} else {
+						callback();
+					}
+				}, 100);
+			};
+			var checkFileUrl = (rule, value, callback) => {
+				if (value == '[]') {
+					return callback(new Error('请上传营业执照'));
+				}
+				callback();
+			};
 			return {
 				currentUserLevel: this.$store.state.user.level, // 当前用户的权限
 				activeName: 'first', // 默认激活那个选项卡
 				dialogResidentialHostelConfigurationVisible: false, // 民宿配置对话框显示和隐藏变量
 				dialogAddHostelFormVisible: false, // 添加民宿对话框显示和隐藏变量
-				dialogModifyHouseFormVisible: false, // 修改对话框的显示和隐藏变量
+				dialogModifyHostelFormVisible: false, // 修改对话框的显示和隐藏变量
 				dialogConfirmVisible: false, // 对话框的显示和隐藏变量
 				dialogAddDictionaryFormVisible: false, // 添加民宿字典对话框显示和隐藏变量
 				dialogAddDictionaryServiceFormVisible: false,
@@ -679,10 +746,6 @@
 				dialogModifyDictionaryServiceFormVisible: false,
 				dialogModifyDictionaryNameFormVisible: false,
 				dialogModifyDictionaryHouseServiceFormVisible: false,
-				dialogImageUrl: '', // 图片url
-				dialogVisible: false, // 预览弹窗
-				disabled: false, // 删除
-				hideUpload: false, // 是否隐藏上传框
 				formLabelWidth: '120px',
 				// 表格单元格样式
 				cell_style: {
@@ -728,6 +791,7 @@
 				loading: true,
 				formAddHostel: {
 					options: [],
+					id: '',
 					hotelTownship: '',
 					hotelName: '',
 					corpnName: '',
@@ -736,40 +800,44 @@
 					bankCard: '',
 					cardName: '',
 					bankName: '',
-					fileList: [], // 图片上传列表
-					fileListJson: [], // 上传的图片列表
-					limitCount: 6 // 图片上传的数量限制
+					fileUrl: '', // 图片上传列表
+					url: '', // 上传的图片列表
+					level: this.$store.state.user.level
 				},
 				addHostelFormRules: {
-					id: [{
-						validator: checkHType
-					}],
 					hotelName: [{
-						validator: checkPrice
+						validator: checkHotelName
 					}],
 					corpnName: [{
-						validator: checkNumber
+						validator: checkCorpnName
 					}],
 					corpnPhone: [{
-						validator: checkNumber
+						validator: checkCorpnPhone
+					}],
+					id: [{
+						validator: checkTownId
 					}],
 					adminName: [{
-						validator: checkNumber
+						validator: checkAdminName
 					}],
 					bankCard: [{
-						validator: checkNumber
+						validator: checkBankCard
 					}],
 					cardName: [{
-						validator: checkNumber
+						validator: checkCardName
 					}],
 					bankName: [{
-						validator: checkNumber
+						validator: checkBankName
+					}],
+					fileUrl: [{
+						validator: checkFileUrl
 					}]
 				},
 				formModifyHostel: {
 					options: [],
 					id: '',
 					hotelTownship: '',
+					hotelTownshipName: '',
 					hotelName: '',
 					corpnName: '',
 					corpnPhone: '',
@@ -777,35 +845,38 @@
 					bankCard: '',
 					cardName: '',
 					bankName: '',
-					fileList: [], // 图片上传列表
-					fileListJson: [], // 上传的图片列表
-					limitCount: 6 // 图片上传的数量限制
+					fileUrl: '', // 图片上传列表
+					url: '', // 上传的图片列表
+					level: this.$store.state.user.level
 				},
 				modifyHostelFormRules: {
-					id: [{
-						validator: checkHType
-					}],
 					hotelName: [{
-						validator: checkPrice
+						validator: checkHotelName
 					}],
 					corpnName: [{
-						validator: checkNumber
+						validator: checkCorpnName
 					}],
 					corpnPhone: [{
-						validator: checkNumber
+						validator: checkCorpnPhone
+					}],
+					id: [{
+						validator: checkTownId
 					}],
 					adminName: [{
-						validator: checkNumber
+						validator: checkAdminName
 					}],
 					bankCard: [{
-						validator: checkNumber
+						validator: checkBankCard
 					}],
 					cardName: [{
-						validator: checkNumber
+						validator: checkCardName
 					}],
 					bankName: [{
-						validator: checkNumber
-					}]
+						validator: checkBankName
+					}],
+					// fileUrl: [{
+					// 	validator: checkFileUrl
+					// }]
 				},
 				// 修改字典数据
 				modify_dictionary_data: {
@@ -825,14 +896,15 @@
 				// 删除字典数据
 				del_dictionary_data: {
 					id: ''
-				}
+				},
+				times: ''
 			}
 		},
 		created() {
 			// 获取乡镇
 			this.get_towns()
 			// 民宿字典列表
-			this.getHostelListByCode()
+			this.getHostelListByCode(1234)
 			// 获取消费记录,表格数据
 			this.get_table_data('list')
 		},
@@ -842,9 +914,9 @@
 		},
 		methods: {
 			/**
-			 * 民宿字典列表
+			 * 民宿类型
 			 */
-			getHostelListByCode() {
+			get_listHomestayDictionary_1() {
 				// 1.民宿类型
 				listHomestayDictionary(1).then((res) => {
 					// console.log(res);
@@ -872,7 +944,11 @@
 					// console.log(err);
 					this.$message.error(err.message);
 				})
-
+			},
+			/**
+			 * 民宿服务
+			 */
+			get_listHomestayDictionary_2() {
 				// 2.民宿服务
 				listHomestayDictionary(2).then((res) => {
 					// console.log(res);
@@ -900,7 +976,11 @@
 					// console.log(err);
 					this.$message.error(err.message);
 				})
-
+			},
+			/**
+			 * 房型名称
+			 */
+			get_listHomestayDictionary_3() {
 				// 3.房型名称
 				listHomestayDictionary(3).then((res) => {
 					// console.log(res);
@@ -927,7 +1007,8 @@
 					// console.log(err);
 					this.$message.error(err.message);
 				})
-
+			},
+			get_listHomestayDictionary_4() {
 				// 4.房型服务
 				listHomestayDictionary(4).then((res) => {
 					// console.log(res);
@@ -956,19 +1037,40 @@
 					this.$message.error(err.message);
 				})
 			},
+			/**
+			 * 民宿字典列表
+			 */
+			getHostelListByCode(param) {
+				if (param === 1234) {
+					this.get_listHomestayDictionary_1()
+					this.get_listHomestayDictionary_2()
+					this.get_listHomestayDictionary_3()
+					this.get_listHomestayDictionary_4()
+				} else if (param === 1) {
+					this.get_listHomestayDictionary_1()
+				} else if (param === 2) {
+					this.get_listHomestayDictionary_2()
+				} else if (param === 3) {
+					this.get_listHomestayDictionary_3()
+				} else if (param === 4) {
+					this.get_listHomestayDictionary_4()
+				}
+			},
 			// 获取民宿id
 			getHotelId(e) {
 				this.formAddHostel.id = e
 			},
 			// tab切换获取code
 			tabHandleClick(tab, event) {
-				console.log(tab.index, tab.name, event);
+				// console.log(tab.index, tab.name, event);
 			},
 			/**
 			 * 显示民宿添加对话框
 			 */
 			add_house_dialog() {
 				this.dialogAddHostelFormVisible = true;
+
+				this.times = new Date().getTime().toString()
 			},
 			/**
 			 * 打开民宿配置对话框
@@ -987,6 +1089,7 @@
 				} else if (i === 4) {
 					this.dialogAddDictionaryServiceFormVisible = true
 				}
+				this.times = new Date().getTime().toString()
 
 				this.add_dictionary_data.code = i;
 			},
@@ -997,11 +1100,9 @@
 				this.modify_dictionary_data.code = row.code
 				this.modify_dictionary_data.name = row.name
 				if (typeof row.fileUrl !== 'undefined') {
-					this.modify_dictionary_data.fileUrl = row.fileUrl
+					this.modify_dictionary_data.url = row.fileUrl
 				}
 
-				console.log(this.modify_dictionary_data);
-
 				if (i === 1) {
 					this.dialogModifyDictionaryFormVisible = true
 				} else if (i === 2) {
@@ -1009,7 +1110,7 @@
 				} else if (i === 3) {
 					this.dialogModifyDictionaryNameFormVisible = true
 				} else if (i === 4) {
-					this.dialogModifyDictionaryServiceFormVisible = true
+					this.dialogModifyDictionaryHouseServiceFormVisible = true
 				}
 			},
 			/**
@@ -1018,7 +1119,6 @@
 			 * @param {Object} row
 			 */
 			modify_house_class_dialog_handler(i) {
-				console.log(this.modify_dictionary_data);
 				modifyHomestayDictionary(this.modify_dictionary_data).then((res) => {
 					// console.log(res);
 					if (typeof res.code == 'undefined' || res.code == '') {
@@ -1028,7 +1128,7 @@
 
 					if (res.code === 200) {
 						// 重新读取,刷新表格显示
-						this.getHostelListByCode()
+						this.getHostelListByCode(i)
 
 						if (i === 1) {
 							this.dialogModifyDictionaryFormVisible = false
@@ -1066,8 +1166,8 @@
 			 */
 			modify_house_dialog(index, row) {
 				// console.log(index, row);
-				// this.formModifyHostel.id = row.id;
-				this.formModifyHostel.hotelTownship = row.hotelTownship;
+				this.formModifyHostel.id = row.id;
+				this.formModifyHostel.hotelTownship = row.hotelTownshipName;
 				this.formModifyHostel.hotelName = row.hotelName;
 				this.formModifyHostel.corpnName = row.corpnName;
 				this.formModifyHostel.corpnPhone = row.corpnPhone;
@@ -1075,8 +1175,9 @@
 				this.formModifyHostel.bankCard = row.bankCard;
 				this.formModifyHostel.cardName = row.cardName;
 				this.formModifyHostel.bankName = row.bankName;
+				this.formModifyHostel.fileUrl = row.bankName;
 
-				this.dialogModifyHouseFormVisible = true;
+				this.dialogModifyHostelFormVisible = true;
 			},
 			/**
 			 * 关闭添加对话框
@@ -1095,7 +1196,6 @@
 			 * 添加民宿类型
 			 */
 			add_house_class_dialog_handler(i) {
-				console.log(this.add_dictionary_data);
 				addHomestayDictionary(this.add_dictionary_data).then((res) => {
 					// console.log(res);
 					if (typeof res.code == 'undefined' || res.code == '') {
@@ -1105,7 +1205,8 @@
 
 					if (res.code === 200) {
 						// 重新读取,刷新表格显示
-						this.getHostelListByCode();
+						this.getHostelListByCode(i);
+
 						if (i === 1) {
 							this.dialogAddDictionaryFormVisible = false;
 						} else if (i === 2) {
@@ -1139,7 +1240,7 @@
 			 */
 			add_house_dialog_handler() {
 				// 调用添加接口
-				this.$refs["addAccountForm"].validate(validate => {
+				this.$refs["addHostelForm"].validate(validate => {
 					if (validate) {
 						addHostel(this.formAddHostel).then((res) => {
 							// console.log(res);
@@ -1152,6 +1253,7 @@
 								// 重新读取,刷新表格显示
 								this.get_table_data('list');
 
+								this.clear_data()
 								this.dialogAddHostelFormVisible = false;
 								this.$message.success(res.message);
 							} else {
@@ -1162,17 +1264,35 @@
 							this.$message.error(err.message);
 						})
 					} else {
-						this.$message.error('验证不通过');
+						this.$message.error('请按规范填写');
 						return false;
 					}
 				})
 			},
+			clear_data() {
+				this.formAddHostel = {
+					// options: [],  // 无需清空,否则下次添加没有选项
+					id: '',
+					hotelTownship: '',
+					hotelName: '',
+					corpnName: '',
+					corpnPhone: '',
+					adminName: '',
+					bankCard: '',
+					cardName: '',
+					bankName: '',
+					fileUrl: '', // 图片上传列表
+					url: '', // 上传的图片列表
+					level: this.currentUserLevel
+				}
+			},
 			/**
 			 * 修改民宿
 			 */
 			modify_house_dialog_handler() {
+				console.log(this.formModifyHostel);
 				// 调用修改接口
-				this.$refs["addAccountForm"].validate(validate => {
+				this.$refs["modifyHostelForm"].validate(validate => {
 					if (validate) {
 						modifyHostel(this.formModifyHostel).then((res) => {
 							// console.log(res);
@@ -1195,7 +1315,7 @@
 							this.$message.error(err.message);
 						})
 					} else {
-						this.$message.error('验证不通过');
+						this.$message.error('请按规范填写');
 						return false;
 					}
 				})
@@ -1230,7 +1350,7 @@
 			 */
 			modify_house_dialog_close() {
 				// 关闭修改对话框
-				this.dialogModifyHouseFormVisible = false;
+				this.dialogModifyHostelFormVisible = false;
 			},
 			/**
 			 * 删除、冻结、解冻、重置密码民宿对话框
@@ -1269,7 +1389,7 @@
 					if (param === 'ms') {
 						this.get_table_data('list');
 					} else {
-						this.getHostelListByCode()
+						this.getHostelListByCode(1234)
 					}
 
 					this.dialogConfirmVisible = false;
@@ -1316,6 +1436,7 @@
 						this.$message.error(err.message);
 					})
 				} else if (this.delete_frozen_thaw_Data.action === 'delDic') {
+					// 民宿字典
 					delHomestayDictionary(this.del_dictionary_data.id).then((res) => {
 						that.share_function(res, 'dic')
 					}).catch((err) => {
@@ -1701,7 +1822,7 @@
 	.add-house-class,
 	.modify-house-class {
 		width: 998px !important;
-		height: 800px !important;
+		height: 860px !important;
 	}
 
 	.configuration-window {
@@ -1761,7 +1882,8 @@
 	}
 
 	.demo-table-expand label {
-		width: 90px;
+		width: 108px;
+		text-align: right !important;
 		color: #99a9bf;
 	}
 

+ 19 - 22
src/views/stdbookMgr/index.vue

@@ -44,7 +44,7 @@
 							<el-table-column type="expand" width="50">
 								<template slot-scope="props">
 									<el-form label-position="left" inline class="demo-table-expand">
-										<el-form-item label="所属乡镇">
+										<!-- <el-form-item label="所属乡镇">
 											<span>{{ props.row.hotelHposition }}</span>
 										</el-form-item>
 										<el-form-item label="民宿名称">
@@ -58,12 +58,18 @@
 										</el-form-item>
 										<el-form-item label="退房时间">
 											<span>{{ props.row.checkOutTime }}</span>
+										</el-form-item> -->
+										<el-form-item label="民宿联系人">
+											<span>{{ props.row.hotelPerson }}</span>
+										</el-form-item>
+										<el-form-item label="民宿联系电话">
+											<span>{{ props.row.hotelPhone }}</span>
 										</el-form-item>
 										<el-form-item label="酒店类型">
 											<span>{{ props.row.hotelType }}</span>
 										</el-form-item>
 										<el-form-item label="酒店位置">
-											<span>{{ props.row.hotelPosition }}</span>
+											<span>{{ props.row.hotelHposition }}</span>
 										</el-form-item>
 										<el-form-item label="酒店名称">
 											<span>{{ props.row.hotelName }}</span>
@@ -71,6 +77,9 @@
 										<el-form-item label="酒店位置经纬度">
 											<span>{{ props.row.hotelHpositionWens }}</span>
 										</el-form-item>
+										<el-form-item label="接单设置">
+											<span>{{ props.row.hotelIsCanorder }}</span>
+										</el-form-item>
 										<el-form-item label="酒店状态(1 营业 2.休息)">
 											<span>{{ props.row.hotelStatus }}</span>
 										</el-form-item>
@@ -80,29 +89,16 @@
 										<el-form-item label="装修时间">
 											<span>{{ props.row.fitupTime }}</span>
 										</el-form-item>
+										<el-form-item label="订单创建时间">
+											<span>{{ props.row.createTime }}</span>
+										</el-form-item>
 										<el-form-item label="入住时间">
 											<span>{{ props.row.liveTime }}</span>
 										</el-form-item>
 										<el-form-item label="离店时间">
-											<span>{{ props.row.leaveTime }}</span>
+											<span>{{ props.row.checkOutTime }}</span>
 										</el-form-item>
 									</el-form>
-									<!-- 装修时间 fitupTime
-									客房数 roomNumber
-									简介备注 remark
-									酒店配置 hconfig
-									接单设置(1自动接单 2手动接单) isOrder
-									是否自动退房(1是 2否) isCheckout
-									订单锁定时间 lockTime
-									是否能取消订单(1是 2否) isCanorder
-									创建人 createId
-									创建时间 createDate
-									修改时间 modifyDate
-									数据状态 status
-									所属乡镇 hotelTownship
-									法人名称 corpnName
-									法人电话 corpnPhone
-									银行卡号 bankCard -->
 								</template>
 							</el-table-column>
 							<el-table-column label="所属乡镇" align="center" width="180">
@@ -242,7 +238,7 @@
 				var that = this
 				// console.log(data);
 				getTableData(data).then((res) => {
-					console.log(res);
+					// console.log(res);
 					if (res.code === 200) {
 						var d = res.data
 						that.pagination.total = d.bookIPage.total
@@ -271,8 +267,8 @@
 					rows: this.pagination.pageSize
 				}
 
-				if (this.formInline.value !== '') {
-					data.value = this.formInline.value
+				if (this.formInline.id !== '') {
+					data.id = this.formInline.id
 				}
 
 				if (this.formInline.amount1 !== '') {
@@ -297,6 +293,7 @@
 			 * 导出为Excel
 			 */
 			exportExcel() {
+				var that = this
 				downloadExcel(this.cond_data).then((res) => {
 					console.log(res);
 					if (res.code === 200) {