Ver Fonte

Merge branch 'master' of http://122.237.99.185:3000/dcs/realty

dcs há 6 meses atrás
pai
commit
215ad9aeda
100 ficheiros alterados com 1002 adições e 147 exclusões
  1. 2 1
      virgo.wzfrontend/console/src/components/work/crm/customer/customerUpload.vue
  2. 0 1
      virgo.wzfrontend/console/src/components/work/crm/customer/detail.vue
  3. 27 3
      virgo.wzfrontend/console/src/components/work/crm/customer/edit.vue
  4. 1 1
      virgo.wzfrontend/console/src/components/work/space/house/edit.vue
  5. 12 0
      virgo.wzfrontend/console/src/httpApi/space.js
  6. 7 0
      virgo.wzfrontend/console/src/router/modules/space.js
  7. 2 1
      virgo.wzfrontend/console/src/store/getters.js
  8. 10 1
      virgo.wzfrontend/console/src/store/modules/projectBase.js
  9. 71 0
      virgo.wzfrontend/console/src/views/work/space/reservation.vue
  10. 7 0
      virgo.wzfrontend/yui_wx/pages.json
  11. 6 7
      virgo.wzfrontend/yui_wx/pages/chat/chat.vue
  12. 1 2
      virgo.wzfrontend/yui_wx/pages/house/house.vue
  13. 1 1
      virgo.wzfrontend/yui_wx/pages/message/message.vue
  14. 14 14
      virgo.wzfrontend/yui_wx/pages/my/my.vue
  15. 57 0
      virgo.wzfrontend/yui_wx/pages/myReservation/myReservation.vue
  16. 20 8
      virgo.wzfrontend/yui_wx/pages/reservation/reservation.vue
  17. 17 4
      virgo.wzfrontend/yui_wx/uitls/chat.js
  18. 34 0
      virgo.wzfrontend/yui_wx/uni_modules/uv-datetime-picker/changelog.md
  19. 130 0
      virgo.wzfrontend/yui_wx/uni_modules/uv-datetime-picker/components/uv-datetime-picker/props.js
  20. 360 0
      virgo.wzfrontend/yui_wx/uni_modules/uv-datetime-picker/components/uv-datetime-picker/uv-datetime-picker.vue
  21. 89 0
      virgo.wzfrontend/yui_wx/uni_modules/uv-datetime-picker/package.json
  22. 19 0
      virgo.wzfrontend/yui_wx/uni_modules/uv-datetime-picker/readme.md
  23. 1 1
      virgo.wzfrontend/yui_wx/unpackage/dist/dev/.sourcemap/mp-weixin/common/runtime.js.map
  24. 1 1
      virgo.wzfrontend/yui_wx/unpackage/dist/dev/.sourcemap/mp-weixin/common/vendor.js.map
  25. 1 1
      virgo.wzfrontend/yui_wx/unpackage/dist/dev/.sourcemap/mp-weixin/components/common/avatar.js.map
  26. 1 1
      virgo.wzfrontend/yui_wx/unpackage/dist/dev/.sourcemap/mp-weixin/pages/chat/chat.js.map
  27. 1 1
      virgo.wzfrontend/yui_wx/unpackage/dist/dev/.sourcemap/mp-weixin/pages/house/house.js.map
  28. 1 1
      virgo.wzfrontend/yui_wx/unpackage/dist/dev/.sourcemap/mp-weixin/pages/message/message.js.map
  29. 1 1
      virgo.wzfrontend/yui_wx/unpackage/dist/dev/.sourcemap/mp-weixin/pages/my/my.js.map
  30. 1 0
      virgo.wzfrontend/yui_wx/unpackage/dist/dev/.sourcemap/mp-weixin/pages/myReservation/myReservation.js.map
  31. 1 1
      virgo.wzfrontend/yui_wx/unpackage/dist/dev/.sourcemap/mp-weixin/pages/person/person.js.map
  32. 1 1
      virgo.wzfrontend/yui_wx/unpackage/dist/dev/.sourcemap/mp-weixin/pages/reservation/reservation.js.map
  33. 1 0
      virgo.wzfrontend/yui_wx/unpackage/dist/dev/.sourcemap/mp-weixin/uni_modules/uv-datetime-picker/components/uv-datetime-picker/uv-datetime-picker.js.map
  34. 2 1
      virgo.wzfrontend/yui_wx/unpackage/dist/dev/mp-weixin/app.json
  35. 1 1
      virgo.wzfrontend/yui_wx/unpackage/dist/dev/mp-weixin/common/runtime.js
  36. 6 6
      virgo.wzfrontend/yui_wx/unpackage/dist/dev/mp-weixin/common/vendor.js
  37. 2 2
      virgo.wzfrontend/yui_wx/unpackage/dist/dev/mp-weixin/components/Winglau14-lotusCalendar/Winglau14-lotusCalendar.js
  38. 2 2
      virgo.wzfrontend/yui_wx/unpackage/dist/dev/mp-weixin/components/city-select/city-select.js
  39. 2 2
      virgo.wzfrontend/yui_wx/unpackage/dist/dev/mp-weixin/components/common/avatar.js
  40. 2 2
      virgo.wzfrontend/yui_wx/unpackage/dist/dev/mp-weixin/components/common/avatar.json
  41. 2 2
      virgo.wzfrontend/yui_wx/unpackage/dist/dev/mp-weixin/components/common/navbar.js
  42. 2 2
      virgo.wzfrontend/yui_wx/unpackage/dist/dev/mp-weixin/components/common/navbar.json
  43. 2 2
      virgo.wzfrontend/yui_wx/unpackage/dist/dev/mp-weixin/components/common/process.js
  44. 2 2
      virgo.wzfrontend/yui_wx/unpackage/dist/dev/mp-weixin/components/common/projectDropDown.js
  45. 2 2
      virgo.wzfrontend/yui_wx/unpackage/dist/dev/mp-weixin/components/common/upload.js
  46. 2 2
      virgo.wzfrontend/yui_wx/unpackage/dist/dev/mp-weixin/components/contract/clauseDetail.js
  47. 2 2
      virgo.wzfrontend/yui_wx/unpackage/dist/dev/mp-weixin/components/contract/steps.js
  48. 2 2
      virgo.wzfrontend/yui_wx/unpackage/dist/dev/mp-weixin/components/device/aircondition.js
  49. 2 2
      virgo.wzfrontend/yui_wx/unpackage/dist/dev/mp-weixin/components/device/aircondition.json
  50. 2 2
      virgo.wzfrontend/yui_wx/unpackage/dist/dev/mp-weixin/components/device/control.js
  51. 2 2
      virgo.wzfrontend/yui_wx/unpackage/dist/dev/mp-weixin/components/device/environment.js
  52. 2 2
      virgo.wzfrontend/yui_wx/unpackage/dist/dev/mp-weixin/components/device/lighting.js
  53. 2 2
      virgo.wzfrontend/yui_wx/unpackage/dist/dev/mp-weixin/components/device/lighting.json
  54. 2 2
      virgo.wzfrontend/yui_wx/unpackage/dist/dev/mp-weixin/components/device/meter.js
  55. 2 2
      virgo.wzfrontend/yui_wx/unpackage/dist/dev/mp-weixin/components/device/uEchart.js
  56. 2 2
      virgo.wzfrontend/yui_wx/unpackage/dist/dev/mp-weixin/components/device/water.js
  57. 2 2
      virgo.wzfrontend/yui_wx/unpackage/dist/dev/mp-weixin/components/house/houseItem.js
  58. 2 2
      virgo.wzfrontend/yui_wx/unpackage/dist/dev/mp-weixin/components/house/houseItems.js
  59. 2 2
      virgo.wzfrontend/yui_wx/unpackage/dist/dev/mp-weixin/components/login/imageCode.js
  60. 2 2
      virgo.wzfrontend/yui_wx/unpackage/dist/dev/mp-weixin/components/sin-signature/sin-signature.js
  61. 2 2
      virgo.wzfrontend/yui_wx/unpackage/dist/dev/mp-weixin/components/uni-mall-head/uni-mall-head.js
  62. 2 2
      virgo.wzfrontend/yui_wx/unpackage/dist/dev/mp-weixin/components/uni-mall-list/uni-mall-list.js
  63. 1 1
      virgo.wzfrontend/yui_wx/unpackage/dist/dev/mp-weixin/pages/attention/attention.js
  64. 1 1
      virgo.wzfrontend/yui_wx/unpackage/dist/dev/mp-weixin/pages/bill/bill.js
  65. 1 1
      virgo.wzfrontend/yui_wx/unpackage/dist/dev/mp-weixin/pages/billDetail/billDetail.js
  66. 1 1
      virgo.wzfrontend/yui_wx/unpackage/dist/dev/mp-weixin/pages/billInvoice/billInvoice.js
  67. 1 1
      virgo.wzfrontend/yui_wx/unpackage/dist/dev/mp-weixin/pages/billRecord/billRecord.js
  68. 1 1
      virgo.wzfrontend/yui_wx/unpackage/dist/dev/mp-weixin/pages/bim/bim.js
  69. 1 1
      virgo.wzfrontend/yui_wx/unpackage/dist/dev/mp-weixin/pages/chat/chat.js
  70. 1 1
      virgo.wzfrontend/yui_wx/unpackage/dist/dev/mp-weixin/pages/city/city.js
  71. 1 1
      virgo.wzfrontend/yui_wx/unpackage/dist/dev/mp-weixin/pages/client/client.js
  72. 1 1
      virgo.wzfrontend/yui_wx/unpackage/dist/dev/mp-weixin/pages/clientDetail/clientDetail.js
  73. 1 1
      virgo.wzfrontend/yui_wx/unpackage/dist/dev/mp-weixin/pages/collect/collect.js
  74. 1 1
      virgo.wzfrontend/yui_wx/unpackage/dist/dev/mp-weixin/pages/contract/contract.js
  75. 1 1
      virgo.wzfrontend/yui_wx/unpackage/dist/dev/mp-weixin/pages/contractDetail/contractDetail.js
  76. 1 1
      virgo.wzfrontend/yui_wx/unpackage/dist/dev/mp-weixin/pages/data/data.js
  77. 1 1
      virgo.wzfrontend/yui_wx/unpackage/dist/dev/mp-weixin/pages/dataDetail/dataDetail.js
  78. 1 1
      virgo.wzfrontend/yui_wx/unpackage/dist/dev/mp-weixin/pages/dataOrder/dataOrder.js
  79. 1 1
      virgo.wzfrontend/yui_wx/unpackage/dist/dev/mp-weixin/pages/deviceDetail/deviceDetail.js
  80. 1 1
      virgo.wzfrontend/yui_wx/unpackage/dist/dev/mp-weixin/pages/deviceList/deviceList.js
  81. 1 1
      virgo.wzfrontend/yui_wx/unpackage/dist/dev/mp-weixin/pages/download/download.js
  82. 1 1
      virgo.wzfrontend/yui_wx/unpackage/dist/dev/mp-weixin/pages/fans/fans.js
  83. 1 1
      virgo.wzfrontend/yui_wx/unpackage/dist/dev/mp-weixin/pages/highseas/highseas.js
  84. 1 1
      virgo.wzfrontend/yui_wx/unpackage/dist/dev/mp-weixin/pages/house/house.js
  85. 1 1
      virgo.wzfrontend/yui_wx/unpackage/dist/dev/mp-weixin/pages/house/house.wxml
  86. 1 1
      virgo.wzfrontend/yui_wx/unpackage/dist/dev/mp-weixin/pages/index/index.js
  87. 1 1
      virgo.wzfrontend/yui_wx/unpackage/dist/dev/mp-weixin/pages/invoice/invoice.js
  88. 1 1
      virgo.wzfrontend/yui_wx/unpackage/dist/dev/mp-weixin/pages/invoiceDetail/invoiceDetail.js
  89. 1 1
      virgo.wzfrontend/yui_wx/unpackage/dist/dev/mp-weixin/pages/login/login.js
  90. 1 1
      virgo.wzfrontend/yui_wx/unpackage/dist/dev/mp-weixin/pages/message/message.js
  91. 1 1
      virgo.wzfrontend/yui_wx/unpackage/dist/dev/mp-weixin/pages/messageList/messageList.js
  92. 1 1
      virgo.wzfrontend/yui_wx/unpackage/dist/dev/mp-weixin/pages/messageSystem/messageSystem.js
  93. 1 1
      virgo.wzfrontend/yui_wx/unpackage/dist/dev/mp-weixin/pages/monitorList/monitorList.js
  94. 1 1
      virgo.wzfrontend/yui_wx/unpackage/dist/dev/mp-weixin/pages/my/my.js
  95. 1 1
      virgo.wzfrontend/yui_wx/unpackage/dist/dev/mp-weixin/pages/my/my.wxml
  96. 1 1
      virgo.wzfrontend/yui_wx/unpackage/dist/dev/mp-weixin/pages/myHouse/myHouse.js
  97. 2 0
      virgo.wzfrontend/yui_wx/unpackage/dist/dev/mp-weixin/pages/myReservation/myReservation.js
  98. 6 0
      virgo.wzfrontend/yui_wx/unpackage/dist/dev/mp-weixin/pages/myReservation/myReservation.json
  99. 1 0
      virgo.wzfrontend/yui_wx/unpackage/dist/dev/mp-weixin/pages/myReservation/myReservation.wxml
  100. 0 0
      virgo.wzfrontend/yui_wx/unpackage/dist/dev/mp-weixin/pages/myReservation/myReservation.wxss

+ 2 - 1
virgo.wzfrontend/console/src/components/work/crm/customer/customerUpload.vue

@@ -41,9 +41,10 @@
 			},
 			errorUpload() {
 				this.$loading.close();
-				this.$message.error('上传失败');
+				this.$message.error('导入失败');
 			},
 			successFile(data) {
+				if (!data.code == '20000') return this.errorUpload();
 				this.$emit('changeFile', data.data)
 				this.$loading.close();
 			},

+ 0 - 1
virgo.wzfrontend/console/src/components/work/crm/customer/detail.vue

@@ -18,7 +18,6 @@
 				<div class="hui-detail-label">联系电话</div>
 				<div class="hui-detail-value">{{detail.phone}}</div>
 			</div>
-
 			<div class="hui-detail-item">
 				<div class="hui-detail-label">微信号</div>
 				<div class="hui-detail-value">{{detail.weChatAccount}}</div>

+ 27 - 3
virgo.wzfrontend/console/src/components/work/crm/customer/edit.vue

@@ -115,24 +115,48 @@
 						trigger: 'blur'
 					}],
 				},
+				isCache: true
 			}
 		},
 		created() {
-			this.customerForm['organizationId'] = this.$store.getters.user.organization.id;
 			if (this.isUpdate) {
+				this.isCache = false;
 				getCustomerDetailById(this.detailId).then(res => {
 					if (res.state) {
 						this.customerForm = res.data;
 					}
 				})
+			} else {
+				console.log(this.$store.getters.customerData);
+				if (this.$store.getters.customerData && JSON.stringify(this.$store.getters.customerData) != '{}') {
+					if (this.$store.getters.customerData.organizationId != this.$store.getters.user.organization.id) {
+						return this.$store.dispatch('projectBase/changeCustomerData', {});
+					}
+					this.initForm(this.$store.getters.customerData);
+				}
+				this.customerForm['organizationId'] = this.$store.getters.user.organization.id;
 			}
 		},
+		beforeDestroy() {
+			this.cacheData();
+		},
 		methods: {
+			initForm(data) {
+				this.customerForm = data;
+			},
+			cacheData() {
+				if (!this.isCache) return;
+				this.$store.dispatch('projectBase/changeCustomerData', this.setData());
+			},
+			setData() {
+				let postData = JSON.parse(JSON.stringify(this.customerForm));
+				postData['firsTimeRoom'] = this.$refs.selectHouse.selectNodeId;
+				return postData;
+			},
 			submit() {
 				this.$refs.customerForm.validate((valid) => {
 					if (valid) {
-						let postData = JSON.parse(JSON.stringify(this.customerForm));
-						postData['firsTimeRoom'] = this.$refs.selectHouse.selectNodeId;
+						let postData = this.setData();
 						if (this.isUpdate) {
 							updateCustomer(postData).then(this.successFunc);
 						} else {

+ 1 - 1
virgo.wzfrontend/console/src/components/work/space/house/edit.vue

@@ -165,7 +165,7 @@
 					this.ccList = [{
 						id: this.houseForm.chargePersonId,
 						name: this.houseForm.chargePersonName,
-						portrait: ''
+						portrait: this.houseForm.chargePersonPortrait
 					}]
 				}
 			},

+ 12 - 0
virgo.wzfrontend/console/src/httpApi/space.js

@@ -409,4 +409,16 @@ export function insertReservation(data) {
 		method: 'post',
 		data: data
 	})
+}
+/* 
+ * 获取看房预约列表
+ * 
+ * 
+ */
+export function getReservationList(data) {
+	return request({
+		url: '/api/roomOperation/reservation/list',
+		method: 'post',
+		data: data
+	})
 }

+ 7 - 0
virgo.wzfrontend/console/src/router/modules/space.js

@@ -19,5 +19,12 @@ const space = [{
 	meta: {
 		title: '房源列表'
 	}
+}, {
+	path: 'space/reservation',
+	component: () => import('@/views/work/space/reservation'),
+	name: '预约列表',
+	meta: {
+		title: '预约列表'
+	}
 }]
 export default space;

+ 2 - 1
virgo.wzfrontend/console/src/store/getters.js

@@ -8,7 +8,8 @@ const getters = {
 	document: state => state.app.document, //模板context渲染
 	identity: state => state.app.identity, //身份
 	houseData: state => state.projectBase.houseData, //房源缓存
-	projectData: state => state.projectBase.projectData, //房源缓存
+	projectData: state => state.projectBase.projectData, //项目缓存
+	customerData: state => state.projectBase.customerData, //客户缓存
 	city: state => state.app.city, //当前位置
 	event: state => state.app.event, //事件
 }

+ 10 - 1
virgo.wzfrontend/console/src/store/modules/projectBase.js

@@ -5,7 +5,8 @@
 const state = {
 	project: {},
 	houseData: {},
-	projectData: {}
+	projectData: {},
+	customerData: {}
 }
 
 const mutations = {
@@ -17,6 +18,9 @@ const mutations = {
 	},
 	CHANGE_PROJECT_DATA: (state, projectData) => {
 		state.projectData = projectData;
+	},
+	CHANGE_CUSTOMER_DATA: (state, customerData) => {
+		state.customerData = customerData;
 	}
 }
 
@@ -35,6 +39,11 @@ const actions = {
 		commit,
 	}, projectData) {
 		commit('CHANGE_PROJECT_DATA', projectData);
+	},
+	changeCustomerData({
+		commit,
+	}, customerData) {
+		commit('CHANGE_CUSTOMER_DATA', customerData);
 	}
 }
 

+ 71 - 0
virgo.wzfrontend/console/src/views/work/space/reservation.vue

@@ -0,0 +1,71 @@
+<template>
+	<div class="hui-flex hui-content">
+		<div class="hui-content-title">
+			<div class="hui-title-item active">预约列表</div>
+		</div>
+		<div class="hui-flex-box hui-table">
+			<el-table :data="tableData" row-key="id" border height="100%">
+				<el-table-column label="序号" width="50">
+					<template slot-scope="scope">
+						<div style="text-align: center;">{{scope.$index + 1}}</div>
+					</template>
+				</el-table-column>
+				<el-table-column label="预约人" prop="userName"></el-table-column>
+				<el-table-column label="预约时间" prop="date"></el-table-column>
+				<el-table-column label="预约房源" width="150">
+					<template slot-scope="scope">
+						<div class="hui-table-operation">
+							<span class="table-operation" @click="look(scope.row)">详情</span>
+						</div>
+					</template>
+				</el-table-column>
+				<template slot="empty">
+					<empty description="暂无数据"></empty>
+				</template>
+			</el-table>
+		</div>
+		<el-drawer title="房源详情" :visible.sync="drawer" :size="400" :append-to-body="true">
+			<detail v-if="drawer" :detailId="detailId"></detail>
+		</el-drawer>
+	</div>
+</template>
+
+<script>
+	import {
+		getReservationList
+	} from '@/httpApi/space'
+	import detail from '@/components/work/space/house/detail'
+	export default {
+		data() {
+			return {
+				tableData: [],
+				detailId: '',
+				drawer: false
+			}
+		},
+		created() {
+			this.init();
+		},
+		methods: {
+			init() {
+				getReservationList({
+					userId: 20,
+					projectId: this.$store.getters.project.id
+				}).then(res => {
+					if (res.state) {
+						this.tableData = res.data;
+					}
+				})
+			},
+			look(val) {
+				this.detailId = val.projectItemTargetRoomId;
+				this.drawer = true;
+			}
+		},
+		components: {
+			detail
+		},
+	}
+</script>
+
+<style lang="scss"></style>

+ 7 - 0
virgo.wzfrontend/yui_wx/pages.json

@@ -265,6 +265,13 @@
 		"style": {
 			"navigationBarTitleText": ""
 		}
+	},
+	{
+		"path" : "pages/myReservation/myReservation",
+		"style" : 
+		{
+			"navigationBarTitleText" : "我的预约"
+		}
 	}],
 	"tabBar": {
 		"color": "#8c8c8c",

+ 6 - 7
virgo.wzfrontend/yui_wx/pages/chat/chat.vue

@@ -54,14 +54,11 @@
 				nowUserId: ''
 			}
 		},
-		onShow() {
-			//监听新消息
-			YeIMUniSDK.getInstance().addEventListener(YeIMUniSDKDefines.EVENT.MESSAGE_RECEIVED, this.onMessage);
-		},
-		onHide() {
+		onUnload() {
 			YeIMUniSDK.getInstance().removeEventListener(YeIMUniSDKDefines.EVENT.MESSAGE_RECEIVED, this.onMessage);
 		},
-		onLoad(body) {
+		onLoad(body) {
+			YeIMUniSDK.getInstance().addEventListener(YeIMUniSDKDefines.EVENT.MESSAGE_RECEIVED, this.onMessage);
 			uni.setNavigationBarTitle({
 				title: body.userName
 			});
@@ -86,13 +83,13 @@
 			},
 			onMessage(e) {
 				let message = e;
+				if (this.userId != message.conversationId) return;
 				this.insertMessage(message);
 				this.$chat.clearConversationUnread(this.userId);
 			},
 			insertMessage(message) {
 				try {
 					this.chatList.push(message);
-					this.message = '';
 					setTimeout(() => {
 						uni.pageScrollTo({
 							scrollTop: 99999999, // -30 为多显示出大半个消息的高度,示意上面还有信息。
@@ -190,11 +187,13 @@
 			// 发送信息
 			send() {
 				if (!this.message) return this.$toast('内容不能为空');
+				uni.showLoading();
 				this.$chat.sendText(this.userId, this.message, this.sendSuccess);
 			},
 			sendSuccess(res) {
 				this.chatList.push(res.data);
 				this.message = '';
+				uni.hideLoading();
 				setTimeout(() => {
 					uni.pageScrollTo({
 						scrollTop: 99999999, // -30 为多显示出大半个消息的高度,示意上面还有信息。

+ 1 - 2
virgo.wzfrontend/yui_wx/pages/house/house.vue

@@ -125,7 +125,7 @@
 		<view class="hui-button-box">
 			<view class="hui-button-view">
 				<view class="hui-button hui-button-light"
-					@click="$navigateTo('/pages/reservation/reservation?houseId=' + houseId)">
+					@click="$navigateTo('/pages/reservation/reservation?houseId=' + houseId+'&projectId='+detail.projectId)+'&chargePersonId='+detail.chargePersonId">
 					<uni-icons class="hui-button-icon" type="calendar" color="#08979c" size="22"></uni-icons> 预约看房
 				</view>
 				<view class="hui-button"
@@ -140,7 +140,6 @@
 			<video id="myVideo" v-if="videoUrl" :src="videoUrl" controls autoplay>
 			</video>
 		</uni-popup>
-
 	</view>
 </template>
 

+ 1 - 1
virgo.wzfrontend/yui_wx/pages/message/message.vue

@@ -59,7 +59,7 @@
 			}
 		},
 		onLoad() {
-			uni.$on('changeChatList', this.countNumber)
+			uni.$on('changeChatList', this.countNumber);
 		},
 		onShow() {
 			if (!uni.getStorageSync('token')) {

+ 14 - 14
virgo.wzfrontend/yui_wx/pages/my/my.vue

@@ -26,8 +26,8 @@
 				<view class="my-list-box">
 					<view class="my-item" @click="$navigateTo('/pages/collect/collect')">
 						<view class="my-icon bg1">
-							<uni-icons custom-prefix="iconfont" type="icon-wodeshoucangshixin" color="#fff"
-								size="20"></uni-icons>
+							<uni-icons custom-prefix="iconfont" type="icon-wodeshoucangshixin" color="#fff" size="20">
+							</uni-icons>
 						</view>
 						<view class="item-content">
 							我的收藏
@@ -47,6 +47,18 @@
 						<view class="my-forward">
 							<uni-icons type="forward" size="18" color="#c1c0c8"></uni-icons>
 						</view>
+					</view>
+					<view class="my-item" @click="$navigateTo('/pages/myReservation/myReservation')">
+						<view class="my-icon bg5">
+							<uni-icons custom-prefix="iconfont" type="icon-kefuzhongxin" color="#fff" size="24">
+							</uni-icons>
+						</view>
+						<view class="item-content">
+							我的预约
+						</view>
+						<view class="my-forward">
+							<uni-icons type="forward" size="18" color="#c1c0c8"></uni-icons>
+						</view>
 					</view>
 					<view class="my-item" @click="$navigateTo('/pages/organization/organization')">
 						<view class="my-icon bg3">
@@ -72,18 +84,6 @@
 							<uni-icons type="forward" size="18" color="#c1c0c8"></uni-icons>
 						</view>
 					</view>
-					<!-- <view class="my-item">
-						<view class="my-icon bg5">
-							<uni-icons custom-prefix="iconfont" type="icon-kefuzhongxin" color="#fff" size="24">
-							</uni-icons>
-						</view>
-						<view class="item-content">
-							客服中心
-						</view>
-						<view class="my-forward">
-							<uni-icons type="forward" size="18" color="#c1c0c8"></uni-icons>
-						</view>
-					</view> -->
 				</view>
 			</view>
 		</view>

+ 57 - 0
virgo.wzfrontend/yui_wx/pages/myReservation/myReservation.vue

@@ -0,0 +1,57 @@
+<template>
+	<view class="common-list my-reservation">
+		<view class="common-item" v-for="(item,index) in list" :key="item.id">
+			<view class="title">预约看房</view>
+			<view class="date">{{item.date}}</view>
+			<view class="other">
+				<view class="item">
+					<view class="label">预约人</view>
+					<view class="value">{{item.userName}}</view>
+				</view>
+				<view class="item">
+					<view class="label">负责人</view>
+					<view class="value">{{item.userName}}</view>
+				</view>
+			</view>
+			<view class="state">
+				<view></view>
+				<view class="tag">
+					<div class="status-tag success"
+						@click="$navigateTo('/pages/house/house?houseId=' + item.projectItemTargetRoomId)">
+						查看房源
+					</div>
+				</view>
+			</view>
+			<view class="icon">
+				<uni-icons custom-prefix="iconfont" type="icon-jiesuanguanli" color="#08979c" size="30">
+				</uni-icons>
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+	export default {
+		data() {
+			return {
+				list: [{
+					"id": 9,
+					"projectItemTargetRoomId": 68,
+					"userId": 20,
+					"userName": "葛奕汝",
+					"userPortrait": "https://file-node.oss-cn-shanghai.aliyuncs.com/youji/c15c640d8d44446ca6656ea270f32a6a",
+					"date": "2024-11-28"
+				}]
+			}
+		},
+		methods: {
+
+		}
+	}
+</script>
+
+<style lang="scss">
+	.my-reservation {
+		padding: 30rpx;
+	}
+</style>

+ 20 - 8
virgo.wzfrontend/yui_wx/pages/reservation/reservation.vue

@@ -15,9 +15,14 @@
 				</view>
 			</uni-forms-item>
 		</uni-forms>
-		<uv-calendar ref="calendar" @confirm="confirm"></uv-calendar>
+		<uv-datetime-picker ref="dateTimePicker" v-model="nowTime" mode="datetime" @confirm="confirm"
+			:minDate="nowTime">
+		</uv-datetime-picker>
 		<view class="hui-button-box">
-			<view class="hui-button" @click="submit">提交预约</view>
+			<view class="hui-button-view">
+				<view class="hui-button" @click="submit">提交预约</view>
+			</view>
+			<uv-safe-bottom></uv-safe-bottom>
 		</view>
 	</view>
 </template>
@@ -36,30 +41,37 @@
 					phone: '',
 					date: ''
 				},
-				houseId: 15
+				houseId: '',
+				projectId: '',
+				chargePersonId: '',
+				nowTime: Number(new Date())
 			}
 		},
 		onLoad(body) {
-			console.log(body);
 			if (body.houseId) this.houseId = body.houseId;
+			if (body.projectId) this.projectId = body.projectId;
+			if (body.chargePersonId) this.chargePersonId = body.chargePersonId;
 		},
 		onShow() {
-			this.formData.date = this.$dayjs().format('YYYY-MM-DD');
+			this.formData.date = this.$dayjs().format('YYYY-MM-DD HH:mm');
 			this.formData['name'] = this.$store.getters.user.userName;
 			this.formData['phone'] = this.$store.getters.user.phone;
 		},
 		methods: {
 			open() {
-				this.$refs.calendar.open();
+				this.$refs.dateTimePicker.open();
 			},
 			confirm(e) {
-				this.formData.date = e[0];
+				let date = this.$dayjs(e.value).format('YYYY-MM-DD HH:mm');
+				this.formData.date = date;
 			},
 			submit() {
 				insertReservation({
 					userId: this.$store.getters.user.userId,
 					projectItemTargetRoomId: this.houseId,
-					date: this.formData.date
+					date: this.formData.date,
+					projectId: this.projectId,
+					chargePersonId: this.chargePersonId
 				}).then(res => {
 					if (res.code == 200) {
 						this.$toast('预约成功');

+ 17 - 4
virgo.wzfrontend/yui_wx/uitls/chat.js

@@ -8,7 +8,7 @@ import {
 } from '@/request/api/chat.js'
 import md5 from '@/js_sdk/js-md5/build/md5.min.js';
 import config from "@/config";
-let userIds;
+let userIds, isListenerChatList = false;
 const connect = success => {
 	if (!userIds) return;
 	let code = YeIMUniSDK.getInstance().readyState();
@@ -121,15 +121,20 @@ const $chat = {
 									},
 									extra: "",
 									onProgress: (progress) => {
-										console.log(progress);
+										// console.log(progress);
 									}
 								});
 							//发送消息
+							uni.showLoading();
 							YeIMUniSDK.getInstance().sendMessage({
 								message: message,
 								success: success,
 								fail: (err) => {
-									console.log('error------');
+									uni.hideLoading();
+									uni.showToast({
+										title: '发送失败',
+										icon: "none"
+									});
 								}
 							});
 						}
@@ -153,7 +158,13 @@ const $chat = {
 			YeIMUniSDK.getInstance().sendMessage({
 				message: message,
 				success: success,
-				fail: (err) => {}
+				fail: (err) => {
+					uni.hideLoading();
+					uni.showToast({
+						title: '发送失败',
+						icon: "none"
+					});
+				}
 			});
 		});
 	},
@@ -175,7 +186,9 @@ const $chat = {
 		});
 	},
 	listenerList() {
+		if (isListenerChatList) return;
 		connect(() => {
+			isListenerChatList = true;
 			//监听会话列表更新
 			YeIMUniSDK.getInstance().addEventListener(YeIMUniSDKDefines.EVENT.CONVERSATION_LIST_CHANGED, (
 				list) => {

+ 34 - 0
virgo.wzfrontend/yui_wx/uni_modules/uv-datetime-picker/changelog.md

@@ -0,0 +1,34 @@
+## 1.0.15(2024-06-14)
+1. 修复上次更改引出的BUG
+## 1.0.14(2024-05-31)
+1. 修复设置maxDate后存在选择不准确的BUG
+## 1.0.13(2024-03-22)
+1. 修复VUE3中出现的BUG
+## 1.0.12(2023-11-27)
+1. 增加round圆角属性
+## 1.0.11(2023-10-11)
+1. 修复设置minDate出现选择错乱的BUG
+## 1.0.10(2023-09-01)
+1. 增加clearDate参数,是否清除上次选择,默认false
+## 1.0.9(2023-08-31)
+1. 增加mode="year",方便只选择年
+## 1.0.8(2023-07-17)
+1. 优化文档
+2. 优化其他
+## 1.0.7(2023-07-13)
+1. 修复 uv-datetime-picker 设置value属性不生效的BUG 
+## 1.0.6(2023-07-05)
+修复vue3模式下,动态修改v-model绑定的值无效的BUG
+## 1.0.5(2023-07-02)
+uv-datetime-picker  由于弹出层uv-popup的修改,打开和关闭方法更改,详情参考文档:https://www.uvui.cn/components/datetimePicker.html
+## 1.0.4(2023-06-29)
+1. 修复抖音小程序报错的BUG
+## 1.0.3(2023-06-07)
+1.  取消defaultIndex参数,传该值没实际意义,后续更新文档
+## 1.0.2(2023-06-02)
+1. 修复v-model重新赋值不更新的BUG
+## 1.0.1(2023-05-16)
+1. 优化组件依赖,修改后无需全局引入,组件导入即可使用
+2. 优化部分功能
+## 1.0.0(2023-05-10)
+uv-datetime-picker 时间选择器

+ 130 - 0
virgo.wzfrontend/yui_wx/uni_modules/uv-datetime-picker/components/uv-datetime-picker/props.js

@@ -0,0 +1,130 @@
+export default {
+	props: {
+		value: {
+			type: [String, Number],
+			default: ''
+		},
+		modelValue: {
+			type: [String, Number],
+			default: ''
+		},
+		// 是否打开组件
+		show: {
+			type: Boolean,
+			default: false
+		},
+		// 是否展示顶部的操作栏
+		showToolbar: {
+			type: Boolean,
+			default: true
+		},
+		// 顶部标题
+		title: {
+			type: String,
+			default: ''
+		},
+		// 展示格式,mode=date为日期选择,mode=time为时间选择,mode=year-month为年月选择,mode=datetime为日期时间选择
+		mode: {
+			type: String,
+			default: 'datetime'
+		},
+		// 可选的最大时间
+		maxDate: {
+			type: Number,
+			// 最大默认值为后10年
+			default: new Date(new Date().getFullYear() + 10, 0, 1).getTime()
+		},
+		// 可选的最小时间
+		minDate: {
+			type: Number,
+			// 最小默认值为前10年
+			default: new Date(new Date().getFullYear() - 10, 0, 1).getTime()
+		},
+		// 可选的最小小时,仅mode=time有效
+		minHour: {
+			type: Number,
+			default: 0
+		},
+		// 可选的最大小时,仅mode=time有效
+		maxHour: {
+			type: Number,
+			default: 23
+		},
+		// 可选的最小分钟,仅mode=time有效
+		minMinute: {
+			type: Number,
+			default: 0
+		},
+		// 可选的最大分钟,仅mode=time有效
+		maxMinute: {
+			type: Number,
+			default: 59
+		},
+		// 选项过滤函数
+		filter: {
+			type: [Function, null],
+			default: null
+		},
+		// 选项格式化函数
+		formatter: {
+			type: [Function, null],
+			default: null
+		},
+		// 是否显示加载中状态
+		loading: {
+			type: Boolean,
+			default: false
+		},
+		// 各列中,单个选项的高度
+		itemHeight: {
+			type: [String, Number],
+			default: 44
+		},
+		// 取消按钮的文字
+		cancelText: {
+			type: String,
+			default: '取消'
+		},
+		// 确认按钮的文字
+		confirmText: {
+			type: String,
+			default: '确认'
+		},
+		// 取消按钮的颜色
+		cancelColor: {
+			type: String,
+			default: '#909193'
+		},
+		// 确认按钮的颜色
+		confirmColor: {
+			type: String,
+			default: '#3c9cff'
+		},
+		// 每列中可见选项的数量
+		visibleItemCount: {
+			type: [String, Number],
+			default: 5
+		},
+		// 是否允许点击遮罩关闭选择器
+		closeOnClickOverlay: {
+			type: Boolean,
+			default: true
+		},
+		// 是否允许点击确认关闭选择器
+		closeOnClickConfirm: {
+			type: Boolean,
+			default: true
+		},
+		// 是否清空上次选择内容
+		clearDate: {
+			type: Boolean,
+			default: false
+		},
+		// 圆角
+		round: {
+			type: [String, Number],
+			default: 0
+		},
+		...uni.$uv?.props?.datetimePicker
+	}
+}

+ 360 - 0
virgo.wzfrontend/yui_wx/uni_modules/uv-datetime-picker/components/uv-datetime-picker/uv-datetime-picker.vue

@@ -0,0 +1,360 @@
+<template>
+	<uv-picker
+		ref="picker"
+		:closeOnClickOverlay="closeOnClickOverlay"
+		:closeOnClickConfirm="closeOnClickConfirm"
+		:columns="columns"
+		:title="title"
+		:itemHeight="itemHeight"
+		:showToolbar="showToolbar"
+		:visibleItemCount="visibleItemCount"
+		:defaultIndex="innerDefaultIndex"
+		:cancelText="cancelText"
+		:confirmText="confirmText"
+		:cancelColor="cancelColor"
+		:confirmColor="confirmColor"
+		:round="round"
+		@close="close"
+		@cancel="cancel"
+		@confirm="confirm"
+		@change="change"
+	>
+	</uv-picker>
+</template>
+<script>
+	function times(n, iteratee) {
+		let index = -1
+		const result = Array(n < 0 ? 0 : n)
+		while (++index < n) {
+			result[index] = iteratee(index)
+		}
+		return result
+	}
+	import mpMixin from '@/uni_modules/uv-ui-tools/libs/mixin/mpMixin.js'
+	import mixin from '@/uni_modules/uv-ui-tools/libs/mixin/mixin.js'
+	import props from './props.js';
+	import dayjs from '@/uni_modules/uv-ui-tools/libs/util/dayjs.js'
+	/**
+	 * DatetimePicker 时间日期选择器
+	 * @description 此选择器用于时间日期
+	 * @tutorial https://www.uvui.cn/components/datetimePicker.html
+	 * @property {Boolean}			showToolbar			是否显示顶部的操作栏  ( 默认 true )
+	 * @property {String | Number}	value				绑定值
+	 * @property {String}			title				顶部标题
+	 * @property {String}			mode				展示格式 mode=date为日期选择,mode=time为时间选择,mode=year-month为年月选择,mode=datetime为日期时间选择  ( 默认 ‘datetime )
+	 * @property {Number}			maxDate				可选的最大时间  默认值为后10年
+	 * @property {Number}			minDate				可选的最小时间  默认值为前10年
+	 * @property {Number}			minHour				可选的最小小时,仅mode=time有效   ( 默认 0 )
+	 * @property {Number}			maxHour				可选的最大小时,仅mode=time有效	  ( 默认 23 )
+	 * @property {Number}			minMinute			可选的最小分钟,仅mode=time有效	  ( 默认 0 )
+	 * @property {Number}			maxMinute			可选的最大分钟,仅mode=time有效   ( 默认 59 )
+	 * @property {Function}			filter				选项过滤函数
+	 * @property {Function}			formatter			选项格式化函数
+	 * @property {Boolean}			loading				是否显示加载中状态   ( 默认 false )
+	 * @property {String | Number}	itemHeight			各列中,单个选项的高度   ( 默认 44 )
+	 * @property {String}			cancelText			取消按钮的文字  ( 默认 '取消' )
+	 * @property {String}			confirmText			确认按钮的文字  ( 默认 '确认' )
+	 * @property {String}			cancelColor			取消按钮的颜色  ( 默认 '#909193' )
+	 * @property {String}			confirmColor		确认按钮的颜色  ( 默认 '#3c9cff' )
+	 * @property {String | Number}	visibleItemCount	每列中可见选项的数量  ( 默认 5 )
+	 * @property {Boolean}			closeOnClickOverlay	是否允许点击遮罩关闭选择器  ( 默认 true )
+	 * @property {String | Number}	round	圆角  ( 默认 0 )
+	 * @event {Function} close 关闭选择器时触发
+	 * @event {Function} confirm 点击确定按钮,返回当前选择的值
+	 * @event {Function} change 当选择值变化时触发
+	 * @event {Function} cancel 点击取消按钮
+	 * @example  <uv-datetime-picker ref="datetimepicker" :value="value1"  mode="datetime" ></uv-datetime-picker>
+	 */
+	export default {
+		name: 'uv-datetime-picker',
+		emits: ['close', 'cancel', 'confirm', 'input', 'change', 'update:modelValue'],
+		mixins: [mpMixin, mixin, props],
+		data() {
+			return {
+				columns: [],
+				innerDefaultIndex: [],
+				innerFormatter: (type, value) => value
+			}
+		},
+		watch: {
+			propsChange() {
+				this.$uv.sleep(100).then(res=>{
+					this.init()
+				})
+			}
+		},
+		computed: {
+			// 如果以下这些变量发生了变化,意味着需要重新初始化各列的值
+			propsChange() {
+				const propsValue = this.value || this.modelValue;
+				return [this.mode, this.maxDate, this.minDate, this.minHour, this.maxHour, this.minMinute, this.maxMinute, this.filter, propsValue]
+			}
+		},
+		mounted() {
+			this.init()
+		},
+		methods: {
+			init() {
+				this.getValue();
+				this.updateColumnValue(this.innerValue)
+			},
+			getValue() {
+				const propsValue = this.value || this.modelValue;
+				this.innerValue = this.correctValue(propsValue)
+			},
+			// 在微信小程序中,不支持将函数当做props参数,故只能通过ref形式调用
+			setFormatter(e) {
+				this.innerFormatter = e
+			},
+			open() {
+				this.$refs.picker.open();
+				// 解决打开的前一次和当前日期错乱的BUG
+				setTimeout(()=>{
+					this.getValue();
+					this.updateColumnValue(this.innerValue);
+				},10)
+			},
+			close() {
+				this.$emit('close');
+			},
+			// 点击工具栏的取消按钮
+			cancel() {
+				this.$emit('cancel')
+			},
+			// 点击工具栏的确定按钮
+			confirm() {
+				this.$emit('confirm', {
+					value: this.innerValue,
+					mode: this.mode
+				})
+				if(!this.clearDate) {
+					this.$emit('input', this.innerValue)
+					this.$emit('update:modelValue', this.innerValue)
+				}
+			},
+			//用正则截取输出值,当出现多组数字时,抛出错误
+			intercept(e, type) {
+				let judge = e.match(/\d+/g)
+				//判断是否掺杂数字
+				if (judge.length > 1) {
+					this.$uv.error("请勿在过滤或格式化函数时添加数字")
+					return 0
+				} else if (type && judge[0].length == 4) { //判断是否是年份
+					return judge[0]
+				} else if (judge[0].length > 2) {
+					this.$uv.error("请勿在过滤或格式化函数时添加数字")
+					return 0
+				} else {
+					return judge[0]
+				}
+			},
+			// 列发生变化时触发
+			change(e) {
+				const { indexs, values } = e
+				let selectValue = ''
+				if (this.mode === 'time') {
+					// 根据value各列索引,从各列数组中,取出当前时间的选中值
+					selectValue = `${this.intercept(values[0][indexs[0]])}:${this.intercept(values[1][indexs[1]])}`
+				} else if (this.mode === 'year') {
+					const year = parseInt(this.intercept(values[0][indexs[0]], 'year'));
+					selectValue = Number(new Date(year, 0));
+				} else {
+					// 将选择的值转为数值,比如'03'转为数值的3,'2019'转为数值的2019
+					const year = parseInt(this.intercept(values[0][indexs[0]], 'year'))
+					const month = parseInt(this.intercept(values[1][indexs[1]]))
+					let date = parseInt(values[2] ? this.intercept(values[2][indexs[2]]) : 1)
+					let hour = 0,
+						minute = 0
+					// 此月份的最大天数
+					const maxDate = dayjs(`${year}-${month}`).daysInMonth()
+					// year-month模式下,date不会出现在列中,设置为1,为了符合后边需要减1的需求
+					if (this.mode === 'year-month') {
+						date = 1
+					}
+					// 不允许超过maxDate值
+					date = Math.min(maxDate, date)
+					if (this.mode === 'datetime') {
+						hour = parseInt(this.intercept(values[3][indexs[3]]))
+						minute = parseInt(this.intercept(values[4][indexs[4]]))
+					}
+					// 转为时间模式
+					selectValue = Number(new Date(year, month - 1, date, hour, minute))
+				}
+				// 取出准确的合法值,防止超越边界的情况
+				selectValue = this.correctValue(selectValue)
+				this.innerValue = selectValue
+				this.updateColumnValue(selectValue)
+				// 发出change时间,value为当前选中的时间戳
+				this.$emit('change', {
+					value: selectValue,
+					mode: this.mode
+				})
+			},
+			// 更新各列的值,进行补0、格式化等操作
+			updateColumnValue(value) {
+				this.innerValue = value
+				this.updateColumns()
+				this.updateIndexs(value)
+			},
+			// 更新索引
+			updateIndexs(value) {
+				let values = []
+				const formatter = this.formatter || this.innerFormatter;
+				if (this.mode === 'time') {
+					// 将time模式的时间用:分隔成数组
+					const timeArr = value.split(':')
+					// 使用formatter格式化方法进行管道处理
+					values = [formatter('hour', timeArr[0]), formatter('minute', timeArr[1])]
+				} else {
+					const date = new Date(value)
+					values = [
+						formatter('year', `${dayjs(value).year()}`),
+						// 月份补0
+						formatter('month', this.$uv.padZero(dayjs(value).month() + 1))
+					]
+					if (this.mode === 'date') {
+						// date模式,需要添加天列
+						values.push(formatter('day', this.$uv.padZero(dayjs(value).date())))
+					}
+					if (this.mode === 'datetime') {
+						// 数组的push方法,可以写入多个参数
+						values.push(formatter('day', this.$uv.padZero(dayjs(value).date())), formatter('hour', this.$uv.padZero(dayjs(value).hour())), formatter('minute', this.$uv.padZero(dayjs(value).minute())))
+					}
+				}
+				// 根据当前各列的所有值,从各列默认值中找到默认值在各列中的索引
+				const indexs = this.columns.map((column, index) => {
+					// 通过取大值,可以保证不会出现找不到索引的-1情况
+					return Math.max(0, column.findIndex(item => item === values[index]))
+				})
+				this.$nextTick(()=>{
+					this.$uv.sleep(100).then(res=>{
+						this.$refs.picker.setIndexs(indexs,true);
+					})
+				})
+			},
+			// 更新各列的值
+			updateColumns() {
+				const formatter = this.formatter || this.innerFormatter
+				// 获取各列的值,并且map后,对各列的具体值进行补0操作
+				const results = this.getOriginColumns().map((column) => column.values.map((value) => formatter(column.type, value)))
+				this.columns = results
+			},
+			getOriginColumns() {
+				// 生成各列的值
+				const results = this.getRanges().map(({ type, range }) => {
+					let values = times(range[1] - range[0] + 1, (index) => {
+						let value = range[0] + index
+						value = type === 'year' ? `${value}` : this.$uv.padZero(value)
+						return value
+					})
+					// 进行过滤
+					if (this.filter) {
+						values = this.filter(type, values)
+					}
+					return { type, values }
+				})
+				return results
+			},
+			// 通过最大值和最小值生成数组
+			generateArray(start, end) {
+				return Array.from(new Array(end + 1).keys()).slice(start)
+			},
+			// 得出合法的时间
+			correctValue(value) {
+				const isDateMode = this.mode !== 'time'
+				if (isDateMode && !this.$uv.test.date(value)) {
+					// 如果是日期类型,但是又没有设置合法的当前时间的话,使用最小时间为当前时间
+					value = this.minDate
+				} else if (!isDateMode && !value) {
+					// 如果是时间类型,而又没有默认值的话,就用最小时间
+					value = `${this.$uv.padZero(this.minHour)}:${this.$uv.padZero(this.minMinute)}`
+				}
+				// 时间类型
+				if (!isDateMode) {
+					if (String(value).indexOf(':') === -1) return this.$uv.error('时间错误,请传递如12:24的格式')
+					let [hour, minute] = value.split(':')
+					// 对时间补零,同时控制在最小值和最大值之间
+					hour = this.$uv.padZero(this.$uv.range(this.minHour, this.maxHour, Number(hour)))
+					minute = this.$uv.padZero(this.$uv.range(this.minMinute, this.maxMinute, Number(minute)))
+					return `${ hour }:${ minute }`
+				} else {
+					// 如果是日期格式,控制在最小日期和最大日期之间
+					value = dayjs(value).isBefore(dayjs(this.minDate)) ? this.minDate : value
+					value = dayjs(value).isAfter(dayjs(this.maxDate)) ? this.maxDate : value
+					return value
+				}
+			},
+			// 获取每列的最大和最小值
+			getRanges() {
+				if (this.mode === 'time') {
+					return [{
+						type: 'hour',
+						range: [this.minHour, this.maxHour],
+					}, {
+						type: 'minute',
+						range: [this.minMinute, this.maxMinute],
+					}, ];
+				}
+				const { maxYear, maxDate, maxMonth, maxHour, maxMinute, } = this.getBoundary('max', this.innerValue);
+				const { minYear, minDate, minMonth, minHour, minMinute, } = this.getBoundary('min', this.innerValue);
+				const result = [{
+					type: 'year',
+					range: [minYear, maxYear],
+				}, {
+					type: 'month',
+					range: [minMonth, maxMonth],
+				}, {
+					type: 'day',
+					range: [minDate, maxDate],
+				}, {
+					type: 'hour',
+					range: [minHour, maxHour],
+				}, {
+					type: 'minute',
+					range: [minMinute, maxMinute],
+				}, ];
+				if (this.mode === 'date') result.splice(3, 2);
+				if (this.mode === 'year-month') result.splice(2, 3);
+				if (this.mode === 'year') result.splice(1, 4);
+				return result;
+			},
+			// 根据minDate、maxDate、minHour、maxHour等边界值,判断各列的开始和结束边界值
+			getBoundary(type, innerValue) {
+				const value = new Date(innerValue)
+				const boundary = new Date(this[`${type}Date`])
+				const year = dayjs(boundary).year()
+				let month = 1
+				let date = 1
+				let hour = 0
+				let minute = 0
+				if (type === 'max') {
+					month = 12
+					// 月份的天数
+					date = dayjs(value).daysInMonth()
+					hour = 23
+					minute = 59
+				}
+				// 获取边界值,逻辑是:当年达到了边界值(最大或最小年),就检查月允许的最大和最小值,以此类推
+				if (dayjs(value).year() === year) {
+					month = dayjs(boundary).month() + 1
+					if (dayjs(value).month() + 1 === month) {
+						date = dayjs(boundary).date()
+						if (dayjs(value).date() === date) {
+							hour = dayjs(boundary).hour()
+							if (dayjs(value).hour() === hour) {
+								minute = dayjs(boundary).minute()
+							}
+						}
+					}
+				}
+				return {
+					[`${type}Year`]: year,
+					[`${type}Month`]: month,
+					[`${type}Date`]: date,
+					[`${type}Hour`]: hour,
+					[`${type}Minute`]: minute
+				}
+			},
+		},
+	}
+</script>

+ 89 - 0
virgo.wzfrontend/yui_wx/uni_modules/uv-datetime-picker/package.json

@@ -0,0 +1,89 @@
+{
+  "id": "uv-datetime-picker",
+  "displayName": "uv-datetime-picker 时间选择器 全面兼容vue3+2、app、h5、小程序等多端",
+  "version": "1.0.15",
+  "description": "时间选择器组件用于时间日期,主要用于年月日时分的选择,具体选择的精确度由参数控制。",
+  "keywords": [
+    "datetime-picker",
+    "uvui",
+    "uv-ui",
+    "datetime",
+    "时间选择"
+],
+  "repository": "",
+  "engines": {
+    "HBuilderX": "^3.1.0"
+  },
+  "dcloudext": {
+    "type": "component-vue",
+    "sale": {
+      "regular": {
+        "price": "0.00"
+      },
+      "sourcecode": {
+        "price": "0.00"
+      }
+    },
+    "contact": {
+      "qq": ""
+    },
+    "declaration": {
+    	"ads": "无",
+    	"data": "插件不采集任何数据",
+    	"permissions": "无"
+    },
+    "npmurl": ""
+  },
+  "uni_modules": {
+    "dependencies": [
+			"uv-ui-tools",
+			"uv-picker"
+		],
+    "encrypt": [],
+    "platforms": {
+			"cloud": {
+				"tcb": "y",
+                "aliyun": "y",
+                "alipay": "n"
+			},
+			"client": {
+				"Vue": {
+					"vue2": "y",
+					"vue3": "y"
+				},
+				"App": {
+					"app-vue": "y",
+					"app-nvue": "y"
+				},
+				"H5-mobile": {
+					"Safari": "y",
+					"Android Browser": "y",
+					"微信浏览器(Android)": "y",
+					"QQ浏览器(Android)": "y"
+				},
+				"H5-pc": {
+					"Chrome": "y",
+					"IE": "y",
+					"Edge": "y",
+					"Firefox": "y",
+					"Safari": "y"
+				},
+				"小程序": {
+					"微信": "y",
+					"阿里": "y",
+					"百度": "y",
+					"字节跳动": "y",
+					"QQ": "y",
+					"钉钉": "u",
+					"快手": "u",
+					"飞书": "u",
+					"京东": "u"
+				},
+				"快应用": {
+					"华为": "u",
+					"联盟": "u"
+				}
+			}
+		}
+  }
+}

+ 19 - 0
virgo.wzfrontend/yui_wx/uni_modules/uv-datetime-picker/readme.md

@@ -0,0 +1,19 @@
+## DatetimePicker 时间选择器
+
+> **组件名:uv-datetime-picker**
+
+此选择器用于时间日期,主要用于年月日时分的选择,具体选择的精确度由参数控制。
+
+# <a href="https://www.uvui.cn/components/datetimePicker.html" target="_blank">查看文档</a>
+
+## [下载完整示例项目](https://ext.dcloud.net.cn/plugin?name=uv-ui) <small>(请不要 下载插件ZIP)</small>
+
+### [更多插件,请关注uv-ui组件库](https://ext.dcloud.net.cn/plugin?name=uv-ui)
+
+<a href="https://ext.dcloud.net.cn/plugin?name=uv-ui" target="_blank">
+
+![image](https://mp-a667b617-c5f1-4a2d-9a54-683a67cff588.cdn.bspapp.com/uv-ui/banner.png)
+
+</a>
+
+#### 如使用过程中有任何问题反馈,或者您对uv-ui有一些好的建议,欢迎加入uv-ui官方交流群:<a href="https://www.uvui.cn/components/addQQGroup.html" target="_blank">官方QQ群</a>

Diff do ficheiro suprimidas por serem muito extensas
+ 1 - 1
virgo.wzfrontend/yui_wx/unpackage/dist/dev/.sourcemap/mp-weixin/common/runtime.js.map


Diff do ficheiro suprimidas por serem muito extensas
+ 1 - 1
virgo.wzfrontend/yui_wx/unpackage/dist/dev/.sourcemap/mp-weixin/common/vendor.js.map


Diff do ficheiro suprimidas por serem muito extensas
+ 1 - 1
virgo.wzfrontend/yui_wx/unpackage/dist/dev/.sourcemap/mp-weixin/components/common/avatar.js.map


Diff do ficheiro suprimidas por serem muito extensas
+ 1 - 1
virgo.wzfrontend/yui_wx/unpackage/dist/dev/.sourcemap/mp-weixin/pages/chat/chat.js.map


Diff do ficheiro suprimidas por serem muito extensas
+ 1 - 1
virgo.wzfrontend/yui_wx/unpackage/dist/dev/.sourcemap/mp-weixin/pages/house/house.js.map


Diff do ficheiro suprimidas por serem muito extensas
+ 1 - 1
virgo.wzfrontend/yui_wx/unpackage/dist/dev/.sourcemap/mp-weixin/pages/message/message.js.map


Diff do ficheiro suprimidas por serem muito extensas
+ 1 - 1
virgo.wzfrontend/yui_wx/unpackage/dist/dev/.sourcemap/mp-weixin/pages/my/my.js.map


Diff do ficheiro suprimidas por serem muito extensas
+ 1 - 0
virgo.wzfrontend/yui_wx/unpackage/dist/dev/.sourcemap/mp-weixin/pages/myReservation/myReservation.js.map


Diff do ficheiro suprimidas por serem muito extensas
+ 1 - 1
virgo.wzfrontend/yui_wx/unpackage/dist/dev/.sourcemap/mp-weixin/pages/person/person.js.map


Diff do ficheiro suprimidas por serem muito extensas
+ 1 - 1
virgo.wzfrontend/yui_wx/unpackage/dist/dev/.sourcemap/mp-weixin/pages/reservation/reservation.js.map


Diff do ficheiro suprimidas por serem muito extensas
+ 1 - 0
virgo.wzfrontend/yui_wx/unpackage/dist/dev/.sourcemap/mp-weixin/uni_modules/uv-datetime-picker/components/uv-datetime-picker/uv-datetime-picker.js.map


+ 2 - 1
virgo.wzfrontend/yui_wx/unpackage/dist/dev/mp-weixin/app.json

@@ -51,7 +51,8 @@
     "pages/monitorList/monitorList",
     "pages/deviceDetail/deviceDetail",
     "pages/bim/bim",
-    "pages/bimShow/bimShow"
+    "pages/bimShow/bimShow",
+    "pages/myReservation/myReservation"
   ],
   "subPackages": [],
   "window": {

Diff do ficheiro suprimidas por serem muito extensas
+ 1 - 1
virgo.wzfrontend/yui_wx/unpackage/dist/dev/mp-weixin/common/runtime.js


Diff do ficheiro suprimidas por serem muito extensas
+ 6 - 6
virgo.wzfrontend/yui_wx/unpackage/dist/dev/mp-weixin/common/vendor.js


Diff do ficheiro suprimidas por serem muito extensas
+ 2 - 2
virgo.wzfrontend/yui_wx/unpackage/dist/dev/mp-weixin/components/Winglau14-lotusCalendar/Winglau14-lotusCalendar.js


Diff do ficheiro suprimidas por serem muito extensas
+ 2 - 2
virgo.wzfrontend/yui_wx/unpackage/dist/dev/mp-weixin/components/city-select/city-select.js


Diff do ficheiro suprimidas por serem muito extensas
+ 2 - 2
virgo.wzfrontend/yui_wx/unpackage/dist/dev/mp-weixin/components/common/avatar.js


+ 2 - 2
virgo.wzfrontend/yui_wx/unpackage/dist/dev/mp-weixin/components/common/avatar.json

@@ -1,4 +1,4 @@
 {
-  "usingComponents": {},
-  "component": true
+  "component": true,
+  "usingComponents": {}
 }

Diff do ficheiro suprimidas por serem muito extensas
+ 2 - 2
virgo.wzfrontend/yui_wx/unpackage/dist/dev/mp-weixin/components/common/navbar.js


+ 2 - 2
virgo.wzfrontend/yui_wx/unpackage/dist/dev/mp-weixin/components/common/navbar.json

@@ -1,4 +1,4 @@
 {
-  "component": true,
-  "usingComponents": {}
+  "usingComponents": {},
+  "component": true
 }

Diff do ficheiro suprimidas por serem muito extensas
+ 2 - 2
virgo.wzfrontend/yui_wx/unpackage/dist/dev/mp-weixin/components/common/process.js


Diff do ficheiro suprimidas por serem muito extensas
+ 2 - 2
virgo.wzfrontend/yui_wx/unpackage/dist/dev/mp-weixin/components/common/projectDropDown.js


Diff do ficheiro suprimidas por serem muito extensas
+ 2 - 2
virgo.wzfrontend/yui_wx/unpackage/dist/dev/mp-weixin/components/common/upload.js


Diff do ficheiro suprimidas por serem muito extensas
+ 2 - 2
virgo.wzfrontend/yui_wx/unpackage/dist/dev/mp-weixin/components/contract/clauseDetail.js


Diff do ficheiro suprimidas por serem muito extensas
+ 2 - 2
virgo.wzfrontend/yui_wx/unpackage/dist/dev/mp-weixin/components/contract/steps.js


Diff do ficheiro suprimidas por serem muito extensas
+ 2 - 2
virgo.wzfrontend/yui_wx/unpackage/dist/dev/mp-weixin/components/device/aircondition.js


+ 2 - 2
virgo.wzfrontend/yui_wx/unpackage/dist/dev/mp-weixin/components/device/aircondition.json

@@ -1,9 +1,9 @@
 {
+  "component": true,
   "usingComponents": {
     "uni-icons": "/uni_modules/uni-icons/components/uni-icons/uni-icons",
     "l-slider": "/uni_modules/lime-slider/components/l-slider/l-slider",
     "uni-popup": "/uni_modules/uni-popup/components/uni-popup/uni-popup",
     "uv-switch": "/uni_modules/uv-switch/components/uv-switch/uv-switch"
-  },
-  "component": true
+  }
 }

Diff do ficheiro suprimidas por serem muito extensas
+ 2 - 2
virgo.wzfrontend/yui_wx/unpackage/dist/dev/mp-weixin/components/device/control.js


Diff do ficheiro suprimidas por serem muito extensas
+ 2 - 2
virgo.wzfrontend/yui_wx/unpackage/dist/dev/mp-weixin/components/device/environment.js


Diff do ficheiro suprimidas por serem muito extensas
+ 2 - 2
virgo.wzfrontend/yui_wx/unpackage/dist/dev/mp-weixin/components/device/lighting.js


+ 2 - 2
virgo.wzfrontend/yui_wx/unpackage/dist/dev/mp-weixin/components/device/lighting.json

@@ -1,6 +1,6 @@
 {
+  "component": true,
   "usingComponents": {
     "uni-icons": "/uni_modules/uni-icons/components/uni-icons/uni-icons"
-  },
-  "component": true
+  }
 }

Diff do ficheiro suprimidas por serem muito extensas
+ 2 - 2
virgo.wzfrontend/yui_wx/unpackage/dist/dev/mp-weixin/components/device/meter.js


Diff do ficheiro suprimidas por serem muito extensas
+ 2 - 2
virgo.wzfrontend/yui_wx/unpackage/dist/dev/mp-weixin/components/device/uEchart.js


Diff do ficheiro suprimidas por serem muito extensas
+ 2 - 2
virgo.wzfrontend/yui_wx/unpackage/dist/dev/mp-weixin/components/device/water.js


Diff do ficheiro suprimidas por serem muito extensas
+ 2 - 2
virgo.wzfrontend/yui_wx/unpackage/dist/dev/mp-weixin/components/house/houseItem.js


Diff do ficheiro suprimidas por serem muito extensas
+ 2 - 2
virgo.wzfrontend/yui_wx/unpackage/dist/dev/mp-weixin/components/house/houseItems.js


Diff do ficheiro suprimidas por serem muito extensas
+ 2 - 2
virgo.wzfrontend/yui_wx/unpackage/dist/dev/mp-weixin/components/login/imageCode.js


Diff do ficheiro suprimidas por serem muito extensas
+ 2 - 2
virgo.wzfrontend/yui_wx/unpackage/dist/dev/mp-weixin/components/sin-signature/sin-signature.js


Diff do ficheiro suprimidas por serem muito extensas
+ 2 - 2
virgo.wzfrontend/yui_wx/unpackage/dist/dev/mp-weixin/components/uni-mall-head/uni-mall-head.js


Diff do ficheiro suprimidas por serem muito extensas
+ 2 - 2
virgo.wzfrontend/yui_wx/unpackage/dist/dev/mp-weixin/components/uni-mall-list/uni-mall-list.js


Diff do ficheiro suprimidas por serem muito extensas
+ 1 - 1
virgo.wzfrontend/yui_wx/unpackage/dist/dev/mp-weixin/pages/attention/attention.js


Diff do ficheiro suprimidas por serem muito extensas
+ 1 - 1
virgo.wzfrontend/yui_wx/unpackage/dist/dev/mp-weixin/pages/bill/bill.js


Diff do ficheiro suprimidas por serem muito extensas
+ 1 - 1
virgo.wzfrontend/yui_wx/unpackage/dist/dev/mp-weixin/pages/billDetail/billDetail.js


Diff do ficheiro suprimidas por serem muito extensas
+ 1 - 1
virgo.wzfrontend/yui_wx/unpackage/dist/dev/mp-weixin/pages/billInvoice/billInvoice.js


Diff do ficheiro suprimidas por serem muito extensas
+ 1 - 1
virgo.wzfrontend/yui_wx/unpackage/dist/dev/mp-weixin/pages/billRecord/billRecord.js


Diff do ficheiro suprimidas por serem muito extensas
+ 1 - 1
virgo.wzfrontend/yui_wx/unpackage/dist/dev/mp-weixin/pages/bim/bim.js


Diff do ficheiro suprimidas por serem muito extensas
+ 1 - 1
virgo.wzfrontend/yui_wx/unpackage/dist/dev/mp-weixin/pages/chat/chat.js


Diff do ficheiro suprimidas por serem muito extensas
+ 1 - 1
virgo.wzfrontend/yui_wx/unpackage/dist/dev/mp-weixin/pages/city/city.js


Diff do ficheiro suprimidas por serem muito extensas
+ 1 - 1
virgo.wzfrontend/yui_wx/unpackage/dist/dev/mp-weixin/pages/client/client.js


Diff do ficheiro suprimidas por serem muito extensas
+ 1 - 1
virgo.wzfrontend/yui_wx/unpackage/dist/dev/mp-weixin/pages/clientDetail/clientDetail.js


Diff do ficheiro suprimidas por serem muito extensas
+ 1 - 1
virgo.wzfrontend/yui_wx/unpackage/dist/dev/mp-weixin/pages/collect/collect.js


Diff do ficheiro suprimidas por serem muito extensas
+ 1 - 1
virgo.wzfrontend/yui_wx/unpackage/dist/dev/mp-weixin/pages/contract/contract.js


Diff do ficheiro suprimidas por serem muito extensas
+ 1 - 1
virgo.wzfrontend/yui_wx/unpackage/dist/dev/mp-weixin/pages/contractDetail/contractDetail.js


Diff do ficheiro suprimidas por serem muito extensas
+ 1 - 1
virgo.wzfrontend/yui_wx/unpackage/dist/dev/mp-weixin/pages/data/data.js


Diff do ficheiro suprimidas por serem muito extensas
+ 1 - 1
virgo.wzfrontend/yui_wx/unpackage/dist/dev/mp-weixin/pages/dataDetail/dataDetail.js


Diff do ficheiro suprimidas por serem muito extensas
+ 1 - 1
virgo.wzfrontend/yui_wx/unpackage/dist/dev/mp-weixin/pages/dataOrder/dataOrder.js


Diff do ficheiro suprimidas por serem muito extensas
+ 1 - 1
virgo.wzfrontend/yui_wx/unpackage/dist/dev/mp-weixin/pages/deviceDetail/deviceDetail.js


Diff do ficheiro suprimidas por serem muito extensas
+ 1 - 1
virgo.wzfrontend/yui_wx/unpackage/dist/dev/mp-weixin/pages/deviceList/deviceList.js


Diff do ficheiro suprimidas por serem muito extensas
+ 1 - 1
virgo.wzfrontend/yui_wx/unpackage/dist/dev/mp-weixin/pages/download/download.js


Diff do ficheiro suprimidas por serem muito extensas
+ 1 - 1
virgo.wzfrontend/yui_wx/unpackage/dist/dev/mp-weixin/pages/fans/fans.js


Diff do ficheiro suprimidas por serem muito extensas
+ 1 - 1
virgo.wzfrontend/yui_wx/unpackage/dist/dev/mp-weixin/pages/highseas/highseas.js


Diff do ficheiro suprimidas por serem muito extensas
+ 1 - 1
virgo.wzfrontend/yui_wx/unpackage/dist/dev/mp-weixin/pages/house/house.js


Diff do ficheiro suprimidas por serem muito extensas
+ 1 - 1
virgo.wzfrontend/yui_wx/unpackage/dist/dev/mp-weixin/pages/house/house.wxml


Diff do ficheiro suprimidas por serem muito extensas
+ 1 - 1
virgo.wzfrontend/yui_wx/unpackage/dist/dev/mp-weixin/pages/index/index.js


Diff do ficheiro suprimidas por serem muito extensas
+ 1 - 1
virgo.wzfrontend/yui_wx/unpackage/dist/dev/mp-weixin/pages/invoice/invoice.js


Diff do ficheiro suprimidas por serem muito extensas
+ 1 - 1
virgo.wzfrontend/yui_wx/unpackage/dist/dev/mp-weixin/pages/invoiceDetail/invoiceDetail.js


Diff do ficheiro suprimidas por serem muito extensas
+ 1 - 1
virgo.wzfrontend/yui_wx/unpackage/dist/dev/mp-weixin/pages/login/login.js


Diff do ficheiro suprimidas por serem muito extensas
+ 1 - 1
virgo.wzfrontend/yui_wx/unpackage/dist/dev/mp-weixin/pages/message/message.js


Diff do ficheiro suprimidas por serem muito extensas
+ 1 - 1
virgo.wzfrontend/yui_wx/unpackage/dist/dev/mp-weixin/pages/messageList/messageList.js


Diff do ficheiro suprimidas por serem muito extensas
+ 1 - 1
virgo.wzfrontend/yui_wx/unpackage/dist/dev/mp-weixin/pages/messageSystem/messageSystem.js


Diff do ficheiro suprimidas por serem muito extensas
+ 1 - 1
virgo.wzfrontend/yui_wx/unpackage/dist/dev/mp-weixin/pages/monitorList/monitorList.js


Diff do ficheiro suprimidas por serem muito extensas
+ 1 - 1
virgo.wzfrontend/yui_wx/unpackage/dist/dev/mp-weixin/pages/my/my.js


Diff do ficheiro suprimidas por serem muito extensas
+ 1 - 1
virgo.wzfrontend/yui_wx/unpackage/dist/dev/mp-weixin/pages/my/my.wxml


Diff do ficheiro suprimidas por serem muito extensas
+ 1 - 1
virgo.wzfrontend/yui_wx/unpackage/dist/dev/mp-weixin/pages/myHouse/myHouse.js


Diff do ficheiro suprimidas por serem muito extensas
+ 2 - 0
virgo.wzfrontend/yui_wx/unpackage/dist/dev/mp-weixin/pages/myReservation/myReservation.js


+ 6 - 0
virgo.wzfrontend/yui_wx/unpackage/dist/dev/mp-weixin/pages/myReservation/myReservation.json

@@ -0,0 +1,6 @@
+{
+  "navigationBarTitleText": "我的预约",
+  "usingComponents": {
+    "uni-icons": "/uni_modules/uni-icons/components/uni-icons/uni-icons"
+  }
+}

Diff do ficheiro suprimidas por serem muito extensas
+ 1 - 0
virgo.wzfrontend/yui_wx/unpackage/dist/dev/mp-weixin/pages/myReservation/myReservation.wxml


+ 0 - 0
virgo.wzfrontend/yui_wx/unpackage/dist/dev/mp-weixin/pages/myReservation/myReservation.wxss


Alguns ficheiros não foram mostrados porque muitos ficheiros mudaram neste diff