From 0ac75878dd4fd980c874146913c1eda11f0e2e69 Mon Sep 17 00:00:00 2001
From: GULIMMO <2820890765@qq.com>
Date: Fri, 03 Nov 2023 14:18:31 +0800
Subject: [PATCH] 首页、租户上报、新增租户等

---
 subPackage/house/roomDetails/index.vue     |   33 +++++-
 pages/home/index.vue                       |   15 +-
 subPackage/bs/components/form/rentForm.vue |   20 +++
 subPackage/bs/views/rentDetail.vue         |  147 ++++++++++++++++++++++++-----
 subPackage/bs/components/list/rentList.vue |   28 ++++
 subPackage/house/roomControl/index.vue     |   22 ++--
 6 files changed, 205 insertions(+), 60 deletions(-)

diff --git a/pages/home/index.vue b/pages/home/index.vue
index 4dbf1dc..df5e14d 100644
--- a/pages/home/index.vue
+++ b/pages/home/index.vue
@@ -301,7 +301,9 @@
 					title: '-',
 					useSlot: true
 				}],
-				menuList: []
+				menuList: [],
+				curHouseCode: ''
+				
 			}
 		},
 
@@ -326,7 +328,6 @@
 				}
 			}
 		},
-
 		methods: {
 
 			//初始化
@@ -376,7 +377,7 @@
 					} else {
 						this.curSelectSite = dataList[0];
 					}
-
+					this.curHouseCode = this.curSelectSite.id
 				}
 			},
 
@@ -420,7 +421,8 @@
 				console.log('confirm', e)
 				this.curSelectSite = e.value[e.value.length - 1]
 				this.selectBoxShow = false
-				this.getHouseDataList(e.value[1].id)
+				this.getHouseDataList(e.value[1]?.id)
+				this.curHouseCode = e.value[0].id
 				console.log("curSite=>", this.curSelectSite);
 			},
 			getMenu(menuName, menuList, resultArr) {
@@ -523,7 +525,7 @@
 
 
 			navTo() {
-				this.$u.func.globalNavigator("/subPackage/bs/views/zhsb", "navTo")
+				this.$u.func.globalNavigator(`/subPackage/bs/views/zhsb?houseCode=${this.curHouseCode}`, "navTo")
 			},
 
 			navigatorPage() {
@@ -567,8 +569,7 @@
 					obj[arr[0]] = arr[1];
 				}
 				return obj
-			}
-
+			},
 		}
 	}
 </script>
diff --git a/subPackage/bs/components/form/rentForm.vue b/subPackage/bs/components/form/rentForm.vue
index 987b39b..c7eb16c 100644
--- a/subPackage/bs/components/form/rentForm.vue
+++ b/subPackage/bs/components/form/rentForm.vue
@@ -1,5 +1,5 @@
 <template>
-	<u-form :model="form" class="form-box" :rules="rules">
+	<u-form :model="form" class="form-box" :rules="rules" ref="refForm">
 		<u-form-item class="form-item" label="姓名" required prop="name" labelWidth="80">
 			<u-input v-model="form.name" border="none" placeholder="姓名" />
 		</u-form-item>
@@ -37,9 +37,21 @@
 						trigger: ['change', 'blur'],
 					}],
 					idCard: [{
-						required: true,
-						message: '请输入身份证号',
-						// 可以单个或者同时写两个触发验证方式 
+						required: true,
+						message: '请输入身份证号',
+						// 可以单个或者同时写两个触发验证方式 
+						trigger: ['change', 'blur'],
+					}, {
+						// 自定义验证函数,见上说明
+						validator: (rule, value, callback) => {
+							const reg = /^\d{6}((((((19|20)\d{2})(0[13-9]|1[012])(0[1-9]|[12]\d|30))|(((19|20)\d{2})(0[13578]|1[02])31)|((19|20)\d{2})02(0[1-9]|1\d|2[0-8])|((((19|20)([13579][26]|[2468][048]|0[48]))|(2000))0229))\d{3})|((((\d{2})(0[13-9]|1[012])(0[1-9]|[12]\d|30))|((\d{2})(0[13578]|1[02])31)|((\d{2})02(0[1-9]|1\d|2[0-8]))|(([13579][26]|[2468][048]|0[048])0229))\d{2}))(\d|X|x)$/
+							if (reg.test(value)) {
+								return true
+							}
+							return false
+						},
+						message: '请输入正确的身份证号',
+						// 触发器可以同时用blur和change
 						trigger: ['change', 'blur'],
 					}]
 				}
diff --git a/subPackage/bs/components/list/rentList.vue b/subPackage/bs/components/list/rentList.vue
index 775b31a..3fd1ebd 100644
--- a/subPackage/bs/components/list/rentList.vue
+++ b/subPackage/bs/components/list/rentList.vue
@@ -11,8 +11,8 @@
 
 			<view class="line">
 				<view class="l">{{item.rentalTime}} - {{item.dueTime}}</view>
-				<view class="r status">
-					{{item.status}}
+				<view class="r status">
+					{{ findObjValue(item.status, status) }}
 				</view>
 			</view>
 
@@ -57,10 +57,30 @@
 				isPickerShow: false,
 				istPickerShow: false,
 				currentRentalId: '',
-				isModelShow: false
+				isModelShow: false,
+				status: [
+					{
+						name: '未到期',
+						value: 0
+					},
+					{
+						name: '已到期',
+						value: 1
+					},
+					{
+						name: '已终止',
+						value: 2
+					},
+				]
 			}
 		},
-		methods: {
+		methods: {
+			findObjValue(value, obj) {
+				const res = obj.find(item => {
+					return item.value == value
+				})
+				return res.name
+			},
 			deleteRental(item) {
 				this.currentRentalId = item.housingRentalId
 				this.isModelShow = true
diff --git a/subPackage/bs/views/rentDetail.vue b/subPackage/bs/views/rentDetail.vue
index 5d2a033..424245f 100644
--- a/subPackage/bs/views/rentDetail.vue
+++ b/subPackage/bs/views/rentDetail.vue
@@ -3,31 +3,31 @@
 		<u-form labelWidth="70" :model="form" :rules="rules" ref="form">
 			<view class="basic-info">
 				<u-form-item @click="showSelectBus(dataList.relation, '租客关系', 'relationName', 'relation')"
-					class="form-item" labelWidth="100" label="租客关系" required prop="type">
+					class="form-item" labelWidth="100" label="租客关系" required prop="relation">
 					<u--input border="none" v-model="relationName" disabled disabledColor="#ffffff" placeholder="请选择">
 					</u--input>
 					<u-icon slot="right" name="arrow-right"></u-icon>
 				</u-form-item>
 				<u-form-item @click="showSelectBus(dataList.houseType, '房屋状态', 'houseTypeName', 'houseType')"
-					class="form-item" labelWidth="100" label="房屋状态:" required prop="type">
+					class="form-item" labelWidth="100" label="房屋状态:" required prop="houseType">
 					<u--input border="none" v-model="houseTypeName" disabled disabledColor="#ffffff" placeholder="请选择">
 					</u--input>
 					<u-icon slot="right" name="arrow-right"></u-icon>
 				</u-form-item>
 				<u-form-item @click="showSelectBus(dataList.rentalUse, '租房用途', 'rentalUseName', 'rentalUse')"
-					class="form-item" labelWidth="100" label="租房用途:" required prop="type">
+					class="form-item" labelWidth="100" label="租房用途:" required prop="rentalUse">
 					<u--input border="none" v-model="rentalUseName" disabled disabledColor="#ffffff" placeholder="请选择">
 					</u--input>
 					<u-icon slot="right" name="arrow-right"></u-icon>
 				</u-form-item>
 				<u-form-item @click="rentTimeShow = true" class="form-item" labelWidth="100" label="租房时间:" required
-					prop="type">
+					prop="rentTime">
 					<u--input border="none" v-model="form.rentTime" disabled disabledColor="#ffffff" placeholder="请选择">
 					</u--input>
 					<u-icon slot="right" name="arrow-right"></u-icon>
 				</u-form-item>
 				<u-form-item @click="dueTimeShow = true" class="form-item" labelWidth="100" label="到期时间:" required
-					prop="type">
+					prop="dueTime">
 					<u--input border="none" v-model="form.dueTime" disabled disabledColor="#ffffff" placeholder="请选择">
 					</u--input>
 					<u-icon slot="right" name="arrow-right"></u-icon>
@@ -48,8 +48,8 @@
 							<view class="line"></view>
 							<view class="title">{{ '租客信息-#' + item }}</view>
 						</view>
-						<view class="r" v-if="index === 1">
-							<u-icon name="trash-fill" color="#ff0000" size="20" @click="decRentForm"></u-icon>
+						<view class="r" v-if="item > 1">
+							<u-icon name="trash-fill" color="#ff0000" size="20" @click="decRentForm(index)"></u-icon>
 						</view>
 					</view>
 					<rentForm ref="rentform" />
@@ -65,9 +65,9 @@
 			:popupTitle="selectBusTitle" :dataLists="selectBusList" @cancel="typeShow = false" @submit="typeSelect">
 		</select-bus>
 		<!--出租时间选择-->
-		<u-datetime-picker :show="rentTimeShow" mode="date" @confirm="rentTimeConfirm"
+		<u-datetime-picker :closeOnClickOverlay="true" @close="rentTimeShow = false" :show="rentTimeShow" mode="date" @confirm="rentTimeConfirm"
 			@cancel="rentTimeShow = false"></u-datetime-picker>
-		<u-datetime-picker :show="dueTimeShow" mode="date" @confirm="dueTimeConfirm"
+		<u-datetime-picker :closeOnClickOverlay="true" @close="dueTimeShow = false" :show="dueTimeShow" mode="date" @confirm="dueTimeConfirm"
 			@cancel="dueTimeShow = false"></u-datetime-picker>
 
 		<view class="bottom-tools">
@@ -103,13 +103,35 @@
 		},
 		data() {
 			return {
+				currentRole: '',
 				form: {
 					relation: "",
 					rentTime: "",
 					dueTime: "",
 				},
 				imagesList: [],
-				rules: {},
+				rules: {
+					relation: [{
+						required: true,
+						message: '请选择租客关系'
+					}],
+					houseType: [{
+						required: true,
+						message: '请选择房屋状态'
+					}],
+					rentalUse: [{
+						required: true,
+						message: '请选择房屋用途'
+					}],
+					rentTime: [{
+						required: true,
+						message: '请选择租房时间'
+					}],
+					dueTime: [{
+						required: true,
+						message: '请选择到期时间'
+					}]
+				},
 				rentTimeShow: false,
 				dueTimeShow: false,
 				rentFormNum: 1,
@@ -175,6 +197,9 @@
 			}
 
 		},
+		mounted() {
+			this.currentRole = uni.getStorageSync("activeRole")
+		},
 		methods: {
 			showSelectBus(data, title, model, key) {
 				this.selectBusList = data
@@ -199,22 +224,53 @@
 				this.form.dueTime = time
 				this.dueTimeShow = false
 			},
-			beforeUpload(e) {
-				console.log(e)
-				return false
+			async afterReadImg(e) {
+				// const formData = new FormData()
+				// const { file } = e
+				// formData.append('file', file[0])
+				// const res = await uploadFile(formData)
 			},
 			addRentForm() {
 				this.rentFormNum++
 			},
-			decRentForm() {
-				this.rentFormNum > 1 && this.rentFormNum--
+			decRentForm(i) {
+				try{
+					let formData = []
+					this.$refs.rentform.forEach(vc => {
+						formData.push(vc.form)
+					})
+					formData.splice(i, 1)
+					formData.forEach((sform, i) => {
+						this.$refs.rentform[i].form = sform
+					})
+					this.rentFormNum > 1 && this.rentFormNum--
+					uni.showToast({
+						title: "删除成功",
+						icon: "success",
+						duration: 1500
+					})
+				}catch(e){
+					uni.showToast({
+						title: "删除失败",
+						icon: "success",
+						duration: 1500
+					})
+				}
 			},
 			saveOrUpdate() {
-				if (this.rentId === '') {
-					this.save()
-					return
-				}
-				this.update()
+				this.$refs.form.validate().then(res => {
+					let rentFormValidGroup = []
+					this.$refs.rentform.forEach(item => {
+						rentFormValidGroup.push(item.$refs.refForm.validate());
+					})
+					Promise.all(rentFormValidGroup).then(result => {
+						if (this.rentId === '') {
+							this.save()
+							return
+						}
+						this.update()
+					})
+				})
 			},
 			async save() {
 				let houseTenantVOList = []
@@ -225,6 +281,7 @@
 				const statusIndex = this.dataList.houseType.findIndex(item => item.name === this.houseTypeName)
 				const rentalIndex = this.dataList.rentalUse.findIndex(item => item.name === this.rentalUseName)
 				let params = {
+					audit_status: this.currentRole.roleAlias === 'inhabitant' ? 0 : 1,
 					houseCode: this.houseCode,
 					tenantRelationship: this.dataList.relation[relationIndex].value,
 					rentalTime: this.form.rentTime,
@@ -233,8 +290,28 @@
 					rentalUse: this.dataList.rentalUse[rentalIndex].value,
 					houseTenantVOList
 				}
-
-				const res = await addHouseRental(params)
+				const {
+					code,
+					data
+				} = await addHouseRental(params)
+				if (code !== 200) {
+					uni.showToast({
+						title: "添加租户信息失败",
+						icon: "error",
+						duration: 1500
+					})
+					return
+				}
+				uni.showToast({
+					title: "添加租户信息成功",
+					icon: "success",
+					duration: 1500,
+					success: () => {
+						setTimeout(() => {
+							uni.navigateBack()
+						}, 1500)
+					}
+				})
 			},
 			async update() {
 				let houseTenantVOList = []
@@ -255,6 +332,24 @@
 					houseTenantVOList
 				}
 				const res = await updateRetalInfo(data)
+				if (res.code !== 200) {
+					uni.showToast({
+						title: "修改租户信息失败",
+						icon: "error",
+						duration: 1500
+					})
+					return
+				}
+				uni.showToast({
+					title: "修改租户信息成功",
+					icon: "success",
+					duration: 1500,
+					success: () => {
+						setTimeout(() => {
+							uni.navigateBack()
+						}, 1500)
+					}
+				})
 			},
 			findObjValue(value, obj) {
 				const res = obj.find(item => {
@@ -286,10 +381,10 @@
 				this.relationName = this.findObjValue(tenantRelationship, this.dataList.relation)
 				this.houseTypeName = this.findObjValue(houseStatus, this.dataList.houseType)
 				this.rentFormNum = houseTenantVOList.length
-				this.$nextTick(() => {
-					houseTenantVOList.forEach((item, index) => {
-						this.$refs.rentform[index].form = item
-					})
+				this.$nextTick(() => {
+					houseTenantVOList.forEach((item, index) => {
+						this.$refs.rentform[index].form = item
+					})
 				})
 			}
 		}
diff --git a/subPackage/house/roomControl/index.vue b/subPackage/house/roomControl/index.vue
index 0ab9ad1..d255440 100644
--- a/subPackage/house/roomControl/index.vue
+++ b/subPackage/house/roomControl/index.vue
@@ -147,6 +147,7 @@
 		},
 		onShow() {
 			this.getLabelList()
+			this.getHouseDetailInfo()
 		},
 		methods: {
 			showLabelPopup(item) {
@@ -163,17 +164,16 @@
 			},
 			async getHouseDetailInfo() {
 				const res = await getHouseDetail()
-				const { phone, address, property_price, service_due, image_urls } = res.data
-				this.form = {
-					phone,
-					address,
-					property_price,
-					service_due,
-					image_urls: [
-						image_urls
-					]
-				}
-				
+				// const { phone, address, property_price, service_due, image_urls } = res.data
+				// this.form = {
+				// 	phone,
+				// 	address,
+				// 	property_price,
+				// 	service_due,
+				// 	image_urls: [
+				// 		image_urls
+				// 	]
+				// }
 			},
 			async getLabelList() {
 				const res = await getHouseLabelList()
diff --git a/subPackage/house/roomDetails/index.vue b/subPackage/house/roomDetails/index.vue
index 313f698..9b76e5f 100644
--- a/subPackage/house/roomDetails/index.vue
+++ b/subPackage/house/roomDetails/index.vue
@@ -11,7 +11,7 @@
 							{{ houseInfo.unitName }}单元 {{ houseInfo.houseName }}室(共{{ houseInfo.allNum }}人)
 						</view>
 						<view class="flex a-i-c">
-							<u-button @click="pushPage" size='small' shape="circle" type="primary" :plain="true"
+							<u-button @click="rommManage" size='small' shape="circle" type="primary" :plain="true"
 								text="房屋管理"></u-button>
 						</view>
 					</view>
@@ -93,11 +93,11 @@
 
 			<view class="edit-btn">
 				<view>
-					<u-button type="primary" text="添加成员"></u-button>
+					<u-button type="primary" text="添加成员" @click="addMember"></u-button>
 				</view>
 
 				<view>
-					<u-button type="primary" :plain="true" text="添加租赁信息"></u-button>
+					<u-button type="primary" :plain="true" text="添加租赁信息" @click="addRental"></u-button>
 				</view>
 			</view>
 		</view>
@@ -114,6 +114,7 @@
 		data() {
 			return {
 				currentId: '',
+				houseCode: '',
 				houseInfo: {
 					// 房间号
 					houseName: '',
@@ -141,15 +142,24 @@
 		methods: {
 			async getHouseRentInfoList() {
 				const res = await getHouseRentInfo(this.currentId)
+				if (res.code !== 200) {
+					uni.showToast({
+						title: "数据加载失败",
+						icon: "error",
+						duration: 1500
+					})
+					return
+				}
 				const {
+					addressCode,
 					aoiName,
 					buildingName,
 					houseName,
 					unitName,
 					houseRentalList,
 					householdList
-				} = res.data
-				console.log(res.data)
+				} = res.data
+				this.houseCode = addressCode
 				this.rentOutList = houseRentalList
 				this.ownerInfoList = householdList
 				this.houseInfo.houseName = houseName
@@ -165,12 +175,19 @@
 					// 多人个租客将第一个作为显示
 					item.tenant = item.houseTenantVOList.length > 0 ? item.houseTenantVOList[0].name : ''
 				})
-				this.houseInfo.allNum = householdList.length
-				console.log(res.data)
+				this.houseInfo.allNum = householdList.length
+
 			},
-			pushPage() {
+			rommManage() {
 				const url = `/subPackage/house/roomControl/index?code=${this.currentId}`
 				this.$u.func.globalNavigator(url, "navTo")
+			},
+			addRental() {
+				const url = `/subPackage/bs/views/rentDetail?houseCode=${this.houseCode}`
+				this.$u.func.globalNavigator(url, "navTo")
+			},
+			addMember() {
+				this.$u.func.globalNavigator('/subPackage/house/member/index')
 			}
 		}
 	}

--
Gitblit v1.9.3