From b000e640c08486c687728dadc1f9d8ecdf3d3bd7 Mon Sep 17 00:00:00 2001
From: jiangping <898885815@qq.com>
Date: 星期二, 07 五月 2024 11:03:20 +0800
Subject: [PATCH] meeting

---
 h5/packagesMine/notice/notice.vue                           |  172 +++
 h5/pages.json                                               |  263 +++-
 h5/pages/meeting/mine/mine.vue                              |   12 
 h5/main.js                                                  |    2 
 h5/packagesMine/confirmAppointment/confirmAppointment.vue   |  584 +++++++++++
 h5/packagesMine/reservation/reservation.vue                 |  439 ++++++++
 h5/pages/meeting/manage/manage.vue                          |   42 
 h5/pages/meeting/myAppointment/myAppointment.vue            |   46 
 h5/packagesMine/meetingDetails/meetingDetails.vue           |  676 +++++++++++++
 h5/pages/meeting/index/index.vue                            |   10 
 h5/store/index.js                                           |   81 +
 h5/components/Li-Calendar/Li-Calendar.vue                   |   10 
 h5/utils/meetingHttp.js                                     |   67 
 h5/packagesMine/selectPersonnel/selectPersonnel.vue         |  434 ++++++++
 h5/packagesMine/notificationDetails/notificationDetails.vue |   62 +
 h5/pages/meeting/personal/personal.vue                      |   16 
 16 files changed, 2,720 insertions(+), 196 deletions(-)

diff --git a/h5/components/Li-Calendar/Li-Calendar.vue b/h5/components/Li-Calendar/Li-Calendar.vue
index 48bfd1d..8f006b9 100644
--- a/h5/components/Li-Calendar/Li-Calendar.vue
+++ b/h5/components/Li-Calendar/Li-Calendar.vue
@@ -5,7 +5,7 @@
 				<!-- <image :src="lastDisabled ? disable : nodisable" mode="widthFix" @tap="subMonth"></image> -->
 				<image :src="nodisable" mode="widthFix" @tap="subMonth"></image>
 				<text>{{title_time}}</text>
-				<image src="@/static/icon/ar_right@2x.png" mode="widthFix" @tap="addMonth"></image>
+				<image src="@/static/meeting/icon/ar_right@2x.png" mode="widthFix" @tap="addMonth"></image>
 			</view>
 			<view class="header-right" @tap="backToToday">鍥炲埌浠婂ぉ</view>
 			<!-- <text class='calendar-lastMonth' @tap="subMonth" v-bind:class="{'calendar-btn-disabled' : lastDisabled }">{{lastText}}</text>
@@ -158,8 +158,8 @@
 		},
 		data() {
 			return {
-				nodisable: require('@/static/icon/ar_left@2x.png'),
-				disable: require('@/static/icon/ar_left_disable.png'),
+				nodisable: require('@/static/meeting/icon/ar_left@2x.png'),
+				disable: require('@/static/meeting/icon/ar_left_disable.png'),
 				
 				nextDisabled: false,
 				lastDisabled: true,
@@ -688,7 +688,7 @@
 		},
 		computed: {
 			transformObj:function () { 
-				return 'translate3d(' + this.transform_x + 'px, 0px, 0px) translateZ(0px)';
+				return 'translate3d(' + this.transform_x + 'px, 0px, 0px) translateZ(0px)';
 			},
 			transformTimeObj:function () {
 				return this.transform_time + 'ms';
@@ -699,4 +699,4 @@
 
 <style>
 	@import url("./Li-Calendar.css");
-</style>
+</style>
diff --git a/h5/main.js b/h5/main.js
index 9fdec70..bdae919 100644
--- a/h5/main.js
+++ b/h5/main.js
@@ -31,7 +31,9 @@
 
 // http鎺ュ彛API鎶界
 import httpApi from '@/utils/http.api.js'
+import httpMeetingApi from '@/utils/meetingHttp.js'
 Vue.use(httpApi, app)
+Vue.use(httpMeetingApi, app)
 
 // 璇锋眰鎷︽埅鍣�
 import interceptor from '@/utils/http.interceptor.js'
diff --git a/h5/packagesMine/confirmAppointment/confirmAppointment.vue b/h5/packagesMine/confirmAppointment/confirmAppointment.vue
new file mode 100644
index 0000000..448fbe3
--- /dev/null
+++ b/h5/packagesMine/confirmAppointment/confirmAppointment.vue
@@ -0,0 +1,584 @@
+<template>
+	<view class="confirm">
+		<view class="confirm_a">
+			<view class="confirm_a_item">
+				<view class="label">浼氳鏃堕棿</view>
+				<view class="content">
+					{{time}}
+				</view>
+			</view>
+			<view class="confirm_a_item">
+				<view class="label">浼氳瀹�</view>
+				<view class="content">
+					{{info.name}} <template v-if="info.limitNum">(鍙绾硔{info.limitNum}}浜�)</template>
+				</view>
+			</view>
+			<view class="confirm_a_item">
+				<view class="label">棰勭害浜�</view>
+				<view class="content">
+					{{user.departmentName ? user.departmentName : userInfo.departmentName}} {{user.realname ? user.realname : userInfo.realname}} {{user.mobile ? user.mobile : userInfo.mobile}}
+				</view>
+			</view>
+		</view>
+		<view class="confirm_b">
+			<view class="confirm_b_item">
+				<view class="label">
+					<text>浼氳涓婚</text>
+					<text>*</text>
+				</view>
+				<view class="input">
+					<input type="text" v-model="from.theme" placeholder="璇疯緭鍏ヤ細璁富棰�" placeholder-class="placeholder" />
+				</view>
+			</view>
+			<view class="confirm_b_item">
+				<view class="label">
+					<text>浼氳鍐呭</text>
+				</view>
+				<view class="input">
+					<textarea class="textarea" placeholder="璇锋寜瑕佹眰杈撳叆鍐呭" maxlength="300" v-model="from.content" />
+					<!-- <view class="num">{{ from.content.length }}/300</view> -->
+					<!-- <textarea
+					v-model="from.content"
+					placeholder="璇锋寜瑕佹眰杈撳叆鍐呭"
+					placeholder-style="color: #999999;font-size: 30rpx;font-weight: 400;"
+					:maxlength="300"/> -->
+					
+					<!-- <u--textarea
+					border="none"
+					v-model="from.content"
+					maxlength="300"
+					height="150"
+					placeholder="璇锋寜瑕佹眰杈撳叆鍐呭"
+					count></u--textarea> -->
+				</view>
+			</view>
+		</view>
+		<view class="confirm_b">
+			<view class="confirm_b_item" @click="jump">
+				<view class="label">
+					<text>鍙備細浜哄憳</text>
+					<text>*</text>
+				</view>
+				<view class="select">
+					<text :style="{color: usersName ? '#000' : ''}">{{usersName ? usersName : '璇烽�夋嫨'}}</text>
+					<view class="select_right">></view>
+				</view>
+			</view>
+			<view class="confirm_b_item" v-if="info.projectList && info.projectList.length > 0">
+				<view class="label">
+					<text>閫夋嫨鏈嶅姟椤�</text>
+				</view>
+				<view class="multiple">
+					<view
+						:class="item.active ? 'multiple_item active' : 'multiple_item'" v-for="(item, index) in info.projectList"
+						:key="index"
+						@click="serviceItems(index)">
+						{{item.projectName}}
+					</view>
+				</view>
+			</view>
+			<view class="confirm_b_item">
+				<view class="label">
+					<text>闄勪欢</text>
+				</view>
+				<view class="uplaod">
+					<view class="uplaod_item" v-for="(item, index) in from.files" :key="index">
+						<view class="uplaod_item_url">
+							<text @click="linkAddress(item.url)">{{item.name}}</text>
+							<!-- <u--text :lines="1" mode="link" :text="item.name" :href="item.url" ></u--text> -->
+						</view>
+						<text class="dele" @click="dele(index)">鍒犻櫎</text>
+					</view>
+					<view class="uplaod_box" @click="uploadFile">
+						<image src="@/static/meeting/icon/ic_upload@2x.png" mode="widthFix"></image>
+						<text>鐐瑰嚮涓婁紶</text>
+					</view>
+				</view>
+			</view>
+			<view class="confirm_b_item">
+				<view class="label">
+					<text>澶囨敞</text>
+				</view>
+				<view class="input">
+					<textarea
+					v-model="from.notes"
+					placeholder="璇疯緭鍏�"
+					placeholder-style="color: #999999;font-size: 30rpx;font-weight: 400;"
+					:maxlength="300"/>
+					<!-- <u--textarea
+					border="none"
+					v-model="from.notes"
+					height="150"
+					placeholder="璇疯緭鍏�"></u--textarea> -->
+				</view>
+			</view>
+		</view>
+		<view class="confirm_footer">
+			<view class="confirm_footer_btn" @click="submit">{{id ? '纭缂栬緫' : '纭棰勭害'}}</view>
+		</view>
+	</view>
+</template>
+
+<script>
+	import { mapState } from 'vuex'
+	export default {
+		data() {
+			return {
+				id: '',
+				roomId: '',
+				value2: '',
+				time: '',
+				info: {},
+				usersName: '',
+				timelist: [],
+				userList: [],
+				startTime: '',
+				endTime: '',
+				from: {
+					theme: '',
+					content: '',
+					files: [],
+					notes: ''
+				},
+				user: {}
+			};
+		},
+		computed: {
+			...mapState(['userInfo'])
+		},
+		async onLoad(option) {
+			if (option.descid) {
+				uni.setNavigationBarTitle({
+				    title: "缂栬緫浼氳"
+				});
+				this.roomId = option.roomId
+				this.id = option.descid
+				this.timelist = JSON.parse(option.timeList)
+				await this.getDesc()
+				this.getdesc()
+			} else {
+				this.time = option.time
+				this.roomId = option.id
+				this.startTime = option.startTime
+				this.endTime = option.endTime
+				this.timelist = JSON.parse(option.list)
+				this.getDesc()
+			}
+		},
+		onShow() {
+			uni.$once('user', (data) => {
+				this.userList = data.userList
+				this.usersName = data.usersName
+			})
+		},
+		methods: {
+			linkAddress(link) {
+				uni.setClipboardData({
+					data: link,
+					success: function () {
+						uni.showToast({
+							title: '閾炬帴宸插鍒讹紝璇峰湪娴忚鍣ㄦ墦寮�',
+							icon: 'none',
+							duration: 2000
+						});
+					}
+				});
+			},
+			dele(index) {
+				this.from.files.splice(index, 1)
+			},
+			getdesc() {
+				this.$u.api.meetingDetail({ id: this.id })
+					.then(res => {
+						this.time = res.data.meetingDate + ' ' + res.data.meetingTime
+						this.from.notes = res.data.remark
+						this.from.theme = res.data.meetingName
+						this.from.content = res.data.meetingContent
+						this.user = res.data.bookingUser
+						this.startTime = res.data.meetingDate + ' ' + res.data.meetingTime.substring(0, 5)
+						this.endTime = res.data.meetingDate + ' ' + res.data.meetingTime.substring(8, 13)
+						
+						if (res.data.projectsResponseList.length > 0) {
+							res.data.projectsResponseList.forEach(item => {
+								this.info.projectList.forEach(child => {
+									if (item.id === child.projectId) {
+										child.active = true
+									}
+								})
+							})
+						}
+						
+						if (res.data.multiFileList.length > 0) {
+							this.from.files = res.data.multiFileList.map(item => {
+								return {
+									fileurl: item.fileurl,
+									name: item.name,
+									url: item.fileurl + item.name
+								}
+							})
+						}
+						if (res.data.userResponseList.length > 0) {
+							this.userList = res.data.userResponseList.map(item => {
+								return {
+									userId: item.id
+								}
+							})
+							let name = res.data.userResponseList.map(item => item.realname)
+							this.usersName = name.join('锛�')
+						}
+					})
+			},
+			submit() {
+				if (!this.from.theme) return uni.showToast({
+					title: '浼氳涓婚涓嶈兘涓虹┖',
+					icon: 'none',
+					duration: 2000
+				});
+				if (this.userList.length === 0) return uni.showToast({
+					title: '璇峰厛閫夋嫨鍙備細浜哄憳',
+					icon: 'none',
+					duration: 2000
+				});
+				var that = this
+				uni.requestSubscribeMessage({
+					tmplIds: [
+						'_-HjcxNFJQU3O6P_I_bFzEQsiuUsT_0vbCLUxRL4zRA',
+						'6dc1gVYwRVm7kTnjdZRtzMGa48iBPZ5kX2N_S7TnDac',
+						'lEWpQak_nN9iC3re0Ub2RH7vgBxvB-EX8yp_Q5SdQTA'
+					],
+					success (res) {
+						let projectList = []
+						that.info.projectList.forEach(item => {
+							if (item.active) {
+								projectList.push({ projectId: item.projectId })
+							}
+						})
+						that.$u.api.reservationMeeting({
+							id: that.id,
+							bookingTimeList: that.timelist,
+							content: that.from.content.substring(0, 300),
+							fileList: that.from.files,
+							name: that.from.theme,
+							projectList,
+							remark: that.from.notes,
+							roomId: that.roomId,
+							sysList: that.userList,
+							startTime: (that.startTime + ':00').replace(/骞�/g, '-').replace(/鏈�/g, '-').replace(/鏃�/g, ''),
+							endTime: (that.endTime + ':00').replace(/骞�/g, '-').replace(/鏈�/g, '-').replace(/鏃�/g, '')
+						}).then(res => {
+							if (res.code === 200) {
+								let url = `/packagesMine/meetingDetails/meetingDetails?id=${res.data}`
+								if (that.id) {
+									uni.showToast({
+										title: '缂栬緫鎴愬姛',
+										icon: 'none',
+										duration: 2000,
+										complete() {
+											setTimeout(() => {
+												uni.reLaunch({
+													url: url
+												});
+											}, 2000)
+										}
+									});
+								} else {
+									uni.showToast({
+										title: '棰勭害鎴愬姛',
+										icon: 'none',
+										duration: 2000,
+										complete() {
+											setTimeout(() => {
+												uni.reLaunch({
+													url: url
+												});
+											}, 2000)
+										}
+									});
+								}
+							}
+						})
+					},
+					fail(err) {
+						console.log(err)
+						// uni.showToast({
+						// 	title: '璁㈤槄澶辫触',
+						// 	icon: 'error',
+						// 	duration: 2000
+						// });
+					}
+				})
+			},
+			serviceItems(i) {
+				this.info.projectList[i].active = !this.info.projectList[i].active
+			},
+			getDesc() {
+				this.$u.api.getRoomDetail({ roomId: this.roomId })
+					.then(res => {
+						res.data.projectList.forEach(item => {
+							item.active = false
+						})
+						this.info = res.data
+					})
+			},
+			uploadFile() {
+				var that = this
+				uni.chooseImage({
+					success: (chooseImageRes) => {
+						for (let i = 0; i < chooseImageRes.tempFilePaths.length; i++) {
+							uni.uploadFile({
+								url: `${that.$baseUrl}public/uploadLocal`,
+								filePath: chooseImageRes.tempFilePaths[i],
+								name: 'file',
+								formData: {
+									'folder': 'projects'
+								},
+								success: (uploadFileRes) => {
+									console.log(JSON.parse(uploadFileRes.data));
+									let res = JSON.parse(uploadFileRes.data).data
+									that.from.files.push({
+										fileurl: res.imgaddr,
+										name: res.imgname,
+										url: res.url
+									})
+								}
+							});
+						}
+					}
+				});
+			},
+			jump() {
+				uni.navigateTo({
+					url: `/packagesMine/selectPersonnel/selectPersonnel?startTime=${this.startTime}&endTime=${this.endTime}`
+				});
+			}
+		}
+	}
+</script>
+
+<style lang="scss">
+	.confirm {
+		width: 100%;
+		padding-bottom: calc(108rpx + env(safe-area-inset-bottom));
+		.confirm_a {
+			width: 100%;
+			padding: 30rpx;
+			box-sizing: border-box;
+			background-color: #fff;
+			.confirm_a_item {
+				width: 100%;
+				display: flex;
+				flex-direction: column;
+				padding-bottom: 30rpx;
+				margin-bottom: 30rpx;
+				border-bottom: 1rpx solid #E5E5E5;
+				&:last-child {
+					margin-bottom: 0 !important;
+					border: none !important;
+					padding-bottom: 0 !important;
+				}
+				.label {
+					font-size: 28rpx;
+					font-family: PingFangSC-Regular, PingFang SC;
+					font-weight: 400;
+					color: #666666;
+					margin-bottom: 30rpx;
+				}
+				.content {
+					font-size: 30rpx;
+					font-family: PingFangSC-Regular, PingFang SC;
+					font-weight: 400;
+					color: #222222;
+				}
+			}
+		}
+		.confirm_b {
+			width: 100%;
+			margin-top: 20rpx;
+			padding: 30rpx;
+			background: #fff;
+			box-sizing: border-box;
+			.confirm_b_item {
+				display: flex;
+				flex-direction: column;
+				padding-bottom: 30rpx;
+				margin-bottom: 30rpx;
+				border-bottom: 1rpx solid #E5E5E5;
+				&:last-child {
+					margin-bottom: 0 !important;
+					border: none !important;
+					padding-bottom: 0 !important;
+				}
+				.select {
+					width: 100%;
+					display: flex;
+					align-items: center;
+					justify-content: space-between;
+					.select_right {
+						flex-shrink: 0;
+						margin-left: 20rpx;
+						color: #999999;
+						font-size: 24rpx;
+					}
+					text {
+						flex: 1;
+						font-size: 30rpx;
+						font-family: PingFangSC-Regular, PingFang SC;
+						font-weight: 400;
+						color: #999999;
+						overflow:hidden;
+						white-space: nowrap;
+						text-overflow: ellipsis;
+						-o-text-overflow:ellipsis;
+					}
+				}
+				.uplaod {
+					width: 100%;
+					.uplaod_item {
+						width: 100%;
+						// word-break: break-all;
+						margin-bottom: 20rpx;
+						display: flex;
+						align-items: center;
+						justify-content: space-between;
+						&:last-child {
+							margin-bottom: 0 !important;
+						}
+						.uplaod_item_url {
+							flex: 1;
+							overflow: hidden;
+							white-space: nowrap;
+							text-overflow: ellipsis;
+							text {
+								font-size: 28rpx;
+								font-family: PingFangSC-Regular, PingFang SC;
+								font-weight: 400;
+								color: #0055FF;
+								text-decoration: underline;
+							}
+							// .u-link {
+							// 	width: 200rpx !important;
+							// 	overflow: hidden !important;
+							// 	white-space: nowrap !important;
+							// 	text-overflow: ellipsis !important;
+							// }
+						}
+						.dele {
+							font-size: 26rpx;
+							font-family: PingFangSC-Regular, PingFang SC;
+							font-weight: 400;
+							color: #666666;
+							flex-shrink: 0;
+							margin-left: 20rpx;
+						}
+					}
+					.uplaod_box {
+						width: 212rpx;
+						height: 64rpx;
+						line-height: 64rpx;
+						text-align: center;
+						border-radius: 4rpx;
+						border: 1rpx solid #0055FF;
+						image {
+							width: 28rpx;
+							height: 28rpx;
+							margin-right: 8rpx;
+						}
+						text {
+							font-size: 28rpx;
+							font-family: PingFangSC-Regular, PingFang SC;
+							font-weight: 400;
+							color: #0055FF;
+						}
+					}
+				}
+				.multiple {
+					width: 100%;
+					display: flex;
+					align-items: center;
+					flex-wrap: wrap;
+					.active {
+						background: #0055FF !important;
+						color: #FFFFFF !important;
+					}
+					.multiple_item {
+						padding: 18rpx 32rpx;
+						background: #F7F7F7;
+						border-radius: 4rpx;
+						box-sizing: border-box;
+						font-size: 28rpx;
+						font-family: PingFangSC-Regular, PingFang SC;
+						font-weight: 400;
+						color: #333333;
+						margin-right: 20rpx;
+						margin-bottom: 20rpx;
+					}
+				}
+				.label {
+					display: flex;
+					align-items: center;
+					margin-bottom: 30rpx;
+					text {
+						&:nth-child(1) {
+							font-size: 28rpx;
+							font-family: PingFangSC-Regular, PingFang SC;
+							font-weight: 400;
+							color: #666666;
+							margin-right: 8rpx;
+						}
+						&:nth-child(2) {
+							font-size: 28rpx;
+							font-family: PingFangSC-Regular, PingFang SC;
+							font-weight: 400;
+							color: #F62710;
+						}
+					}
+				}
+				.input /deep/ {
+					width: 100%;
+					display: flex;
+					flex-direction: column;
+					align-items: flex-end;
+					textarea {
+						width: 100%;
+					}
+					.u-textarea {
+						padding: 0 !important;
+					}
+					.placeholder {
+						font-size: 30rpx;
+						font-family: PingFangSC-Regular, PingFang SC;
+						font-weight: 400;
+						color: #999999;
+					}
+					input {
+						width: 100%;
+						font-size: 30rpx;
+						font-family: PingFangSC-Regular, PingFang SC;
+						font-weight: 400;
+						color: #000000;
+					}
+				}
+			}
+		}
+		.confirm_footer {
+			width: 100%;
+			position: fixed;
+			bottom: 0;
+			box-sizing: border-box;
+			padding: 10rpx 30rpx calc(10rpx + env(safe-area-inset-bottom)) 30rpx;
+			z-index: 9;
+			.confirm_footer_btn {
+				width: 690rpx;
+				height: 88rpx;
+				line-height: 88rpx;
+				text-align: center;
+				background: #0055FF;
+				border-radius: 4rpx;
+				font-size: 30rpx;
+				font-family: PingFangSC-Regular, PingFang SC;
+				font-weight: 400;
+				color: #FFFFFF;
+			}
+		}
+	}
+</style>
diff --git a/h5/packagesMine/meetingDetails/meetingDetails.vue b/h5/packagesMine/meetingDetails/meetingDetails.vue
new file mode 100644
index 0000000..8476d9d
--- /dev/null
+++ b/h5/packagesMine/meetingDetails/meetingDetails.vue
@@ -0,0 +1,676 @@
+<template>
+	<page-meta :page-style="'overflow:'+(pageShow?'hidden':'visible')"></page-meta>
+	<view class="details">
+		<view class="details_head">
+			<text>{{info.meetingName || ''}}</text>
+			<text>{{info.roomName || ''}}锝渰{info.meetingDate || ''}} {{info.meetingTime || ''}}</text>
+		</view>
+		<view class="details_content">
+			<view class="details_content_item">
+				<view class="label">鍙備細浜哄憳</view>
+				<view class="content" v-if="info.userResponseList && info.userResponseList.length > 0">
+					<text v-for="(item, index) in info.userResponseList" :key="index">
+						{{ item.realname }}({{item.departmentName}})<template v-if="index !== info.userResponseList.length - 1">锛�</template>
+					</text>
+				</view>
+			</view>
+			<view class="details_content_item" v-if="info.meetingContent">
+				<view class="label">浼氳鍐呭</view>
+				<view class="content">
+					<text>{{info.meetingContent || ''}}</text> 
+				</view>
+			</view>
+			<view class="details_content_item" v-if="info.projectsResponseList && info.projectsResponseList.length > 0">
+				<view class="label">鏈嶅姟椤�</view>
+				<view class="content" v-if="info.projectsResponseList && info.projectsResponseList.length > 0">
+					<text v-for="(item, index) in info.projectsResponseList" :key="index">
+						{{item.name}}<template v-if="index !== info.projectsResponseList.length - 1"> | </template>
+					</text>
+				</view>
+				<view class="content" v-else>
+					<text>鏃犳湇鍔¢」</text>
+				</view>
+			</view>
+			<view class="details_content_item">
+				<view class="label">闄勪欢</view>
+				<view class="list" v-if="info.multiFileList && info.multiFileList.length > 0">
+					<view class="list_item" v-for="(item, index) in info.multiFileList" :key="index">
+						<u--text mode="link" :text="item.name" :href="item.fileFullUrl + item.fileurl"></u--text>
+					</view>
+				</view>
+				<view class="content" v-else>
+					<text>鏃�</text>
+				</view>
+			</view>
+			<view class="details_content_item" v-if="info.remark">
+				<view class="label">澶囨敞</view>
+				<view class="content">
+					<text>{{info.remark || ''}}</text> 
+				</view>
+			</view>
+		</view>
+		<view class="details_content">
+			<view class="details_content_item">
+				<view class="label">棰勭害浜�</view>
+				<view class="content">
+					<text>{{info.bookingUser.departmentName || ''}} {{info.bookingUser.realname || ''}} {{info.bookingUser.mobile || ''}}</text>
+				</view>
+			</view>
+		</view>
+		<!-- 鍐呴儴鐢ㄦ埛鑷繁鍙戝竷 -->
+		<view class="details_footer" v-if="userInfo.id === info.bookingUser.id && userInfo.type === 0 && info.meetingStatus !== 3">
+			<view class="details_footer_left">
+				<view class="item" @click="copy" v-if="info.meetingStatus === 1 || info.meetingStatus === 2">
+					<image src="@/static/meeting/icon/ic_copy@2x.png" mode="widthFix"></image>
+					<text>澶嶅埗</text>
+				</view>
+				<view class="item" @click="edit" v-if="info.meetingStatus === 1">
+					<image src="@/static/meeting/icon/ic_edit@2x.png" mode="widthFix"></image>
+					<text>淇敼</text>
+				</view>
+				<view class="item" @click="closeRoom" v-if="info.meetingStatus === 1">
+					<image src="@/static/meeting/icon/ic_cancel@2x.png" mode="widthFix"></image>
+					<text>鍙栨秷</text>
+				</view>
+			</view>
+			<view class="details_footer_right">
+				<view class="btn1">
+					<button open-type="share"></button>
+					鍒嗕韩
+				</view>
+				<view class="btn2" @click="open" v-if="isShow">寮�闂ㄧ爜</view>
+			</view>
+		</view>
+		<!-- 鍐呴儴鐢ㄦ埛涓嶆槸鑷繁鍙戝竷 -->
+		<view class="details_footer" v-else-if="userInfo.id !== info.bookingUser.id && userInfo.type === 0 && info.meetingStatus !== 3">
+			<view class="details_footer_left">
+				<view class="item" @click="copy" v-if="info.meetingStatus === 1 || info.meetingStatus === 2">
+					<image src="@/static/meeting/icon/ic_copy@2x.png" mode="widthFix"></image>
+					<text>澶嶅埗</text>
+				</view>
+			</view>
+			<view class="details_footer_right">
+				<view class="btn1">
+					<button open-type="share"></button>
+					鍒嗕韩
+				</view>
+				<view class="btn2" @click="open" v-if="isShow">寮�闂ㄧ爜</view>
+			</view>
+		</view>
+		<!-- 璁垮 -->
+		<view class="details_footer" v-else-if="(!userInfo || userInfo.type === 1) && info.meetingStatus !== 3">
+			<button class="details_footer_submit" v-if="!userInfo" open-type="getPhoneNumber" @getphonenumber="getphonenumber">鏌ョ湅浼氳瀹ゅ紑闂ㄧ爜</button>
+			<view class="details_footer_submit" v-else @click="open">鏌ョ湅浼氳瀹ゅ紑闂ㄧ爜</view>
+		</view>
+		<view v-else></view>
+		<!-- 寮�闂ㄧ爜 -->
+		<view class="details_ma">
+			<u-popup :show="show" :overlayStyle="{'touch-action':'none'}" :closeable="true" :safeAreaInsetBottom="false" :round="0" mode="center" @close="close">
+				<view class="box" @touchmove.stop.prevent="preventHandle">
+					<text class="box_a">{{info.roomName || ''}}</text>
+					<text class="box_b" v-if="time > 0">浜岀淮鐮亄{time}}绉掑唴鏈夋晥</text>
+					<text class="box_b" v-else>浜岀淮鐮佸凡杩囨湡锛岃鐐瑰嚮浜岀淮鐮佸埛鏂�</text>
+					<view class="qrcode" @click="Refresh(1)">
+						<image :src="qrurl" mode="widthFix"></image>
+					</view>
+					<text class="box_c">鍑虹ず璇ヤ簩缁寸爜锛屾壂鐮佽繘鍏ヤ細璁</text>
+					<text class="box_d" v-if="info.roomUser">濡傛灉鎵撲笉寮�璇疯仈绯荤鐞嗗憳锛�</text>
+					<text class="box_e" v-if="info.roomUser">{{info.roomUser.realname}} <template v-if="info.roomUser.mobile">{{info.roomUser.mobile}}</template></text>
+				</view>
+			</u-popup>
+		</view>
+
+		<u-modal
+		:show="show1"
+		title="鎻愮ず"
+		content='鏄惁纭鍙栨秷褰撳墠浼氳'
+		@confirm="confirm"
+		@cancel="close1"
+		ref="uModal"
+		:showCancelButton="true"
+		asyncClose="true"></u-modal>
+	</view>
+</template>
+
+<script>
+	import { mapState, mapMutations } from 'vuex'
+	import tkiQrcode from "@/components/tki-qrcode/tki-qrcode.vue"
+	export default {
+		data() {
+			return {
+				roomId: '',
+				pageShow: false,
+				show: false,
+				show1: false,
+				info: {},
+				val: '',
+				time: 0,
+				link: '',
+				qrurl: '',
+				timer: null,
+				timeValue: '',
+				isShow: false,
+				imageUrl: 'https://dmtest.ahapp.net/file/projects/20230511/13f256b832db4a4fadc5e6770f5727bf.png'
+			};
+		},
+		components: { tkiQrcode },
+		onLoad(options) {
+			// 鎵爜杩涘叆
+			if (options.scene) {
+				console.log('鎵爜杩涘叆')
+				let scene = decodeURIComponent(options.scene);
+				console.log(scene)
+				let roomId = scene.substring(0, scene.indexOf('|'))
+				this.roomId = roomId
+			}
+			// 鍒嗕韩杩涘叆
+			if (options.shareId) {
+				console.log('鍒嗕韩杩涘叆')
+				this.roomId = options.shareId
+			}
+			// 姝e父杩涘叆
+			if (options.id) {
+				this.roomId = options.id
+			}
+			this.getdesc()
+			this.getSYSTEM()
+		},
+		computed: {
+			...mapState(['userInfo', 'token'])
+		},
+		onShareAppMessage({from,target}) {
+			if (from == 'button') {
+				return {
+					title: this.info.meetingName,
+					path: `/packagesMine/meetingDetails/meetingDetails?shareId=${this.info.id}`,
+					imageUrl: this.imageUrl
+				}
+			}
+		},
+		methods: {
+			...mapMutations(["setToken", "setUserInfo"]),
+			// 鍒锋柊浜岀淮鐮�
+			Refresh(type) {
+				if (this.time !== 0) return
+				uni.showLoading({
+					title: '鍔犺浇涓�',
+					mask: true
+				});
+				uni.request({
+					url: `${this.$baseUrl}web/meeting/getQrCodeImg?id=${this.info.id}&token=${this.token}`,//url鍦板潃
+					method: 'GET',
+					responseType: 'arraybuffer',
+					header: {
+						'Content-Type': 'application/json'
+					},
+					success: res => {
+						const arrayBuffer = new Uint8Array(res.data)
+						const base64 = "data:image/png;base64," + uni.arrayBufferToBase64(arrayBuffer) //杩欓噷闇�瑕佹坊鍔犲墠缂�
+						this.qrurl = base64
+						if (type === 1) {
+							this.time = Number(this.timeValue) * 60
+							this.getTime()
+						}
+					},
+					complete() {
+						uni.hideLoading();
+					}
+				});
+			},
+			onChange(e) {
+				this.timeData = e
+			},
+			preventHandle() {
+				return
+			},
+			getTime() {
+				this.timer = setInterval(() => {
+					if (this.time === 0) {
+						clearInterval(this.timer)
+						this.timer = null
+						this.time = 0
+						return
+					}
+					this.time = this.time - 1
+				}, 1000)
+			},
+			// 璁垮鐧诲綍鑾峰彇淇℃伅
+			getphonenumber(e) {
+				var that = this
+				if (e.detail.errMsg === 'getPhoneNumber:ok') {
+					uni.login({
+						provider: 'MP-WEIXIN',
+						success: function (loginRes) {
+							that.$u.api.visitorLogin({
+								code: loginRes.code
+							}).then(res => {
+								if (res.data.code === 500) {
+									that.$u.api.visitorWxPhone({
+										encryptedData: e.detail.encryptedData,
+										iv: e.detail.iv,
+										openId: res.data.openId,
+										sessionKey: res.data.sessionKey
+									}).then(resa => {
+										that.setToken(resa.data.token)
+										that.setUserInfo(resa.data.systemUser)
+									})
+								} else {
+									that.setToken(res.data.token)
+									that.setUserInfo(res.data.systemUser)
+								}
+							})
+						}
+					});
+				}
+			},
+			// 璁垮鐧诲綍
+			wxlogin() {
+				var that = this
+				uni.login({
+					provider: 'MP-WEIXIN',
+					success: function (loginRes) {
+						that.$u.api.visitorLogin({
+							code: loginRes.code
+						}).then(res => {
+							that.setToken(res.data.token)
+							that.setUserInfo(res.data.systemUser)
+						})
+					}
+				});
+			},
+			getSYSTEM() {
+				this.$u.api.getSystemDictData({
+					dictCode: 'SYSTEM',
+					label: 'QR_OPENBOOK_VALIDTIME'
+				}).then(res => {
+					// this.time = res.data.code
+					this.time = Number(res.data.code) * 60
+					this.timeValue = Number(res.data.code)
+				})
+				this.$u.api.getSystemDictData({
+					dictCode: 'SYSTEM',
+					label: 'H5_LINK_ADDR'
+				}).then(res => {
+					this.link = res.data.code
+				})
+			},
+			edit() {
+				if (this.info.meetingStatus !== 1) {
+					uni.showToast({
+						title: '浼氳涓嶅彲缂栬緫',
+						icon: "none",
+						duration: 2000
+					});
+					return
+				}
+				uni.navigateTo({
+					url: `/packagesMine/confirmAppointment/confirmAppointment?roomId=${this.info.roomId}&descid=${this.info.id}&timeList=${JSON.stringify(this.info.bookingTimeList)}`
+				});
+			},
+			close1() {
+				this.show1 = false
+			},
+			confirm() {
+				var that = this
+				that.$u.api.reservationCancel({
+					id: that.roomId
+				}).then(res => {
+					that.show1 = false;
+					if (res.code === 200) {
+						that.getdesc()
+						uni.navigateBack({
+							delta: 1
+						});
+					}
+				})
+			},
+			closeRoom() {
+				this.show1 = true;
+			},
+			copy() {
+				let val = `${this.info.bookingUser.realname} 閭�璇锋偍鍔犲叆浼氳
+浼氳涓婚锛�${this.info.meetingName}
+浼氳瀹わ細${this.info.roomName}
+浼氳鏃堕棿锛�${this.info.meetingDate} ${this.info.meetingTime}
+鐐瑰嚮閾炬帴鐩存帴鍔犲叆浼氳锛�
+${this.link}?id=${this.info.id}`
+				uni.setClipboardData({
+					data: val,
+					success: function () {
+						uni.showToast({
+							title: '浼氳淇℃伅澶嶅埗鎴愬姛锛屽幓鍒嗕韩缁欏悓浜嬪惂~',
+							icon:'none',
+							duration: 2000
+						});
+					}
+				});
+			},
+			close() {
+				this.pageShow = false
+				this.show = false
+				this.time = 0
+				clearInterval(this.timer)
+				this.timer = null
+				uni.setScreenBrightness({
+					value: 0.5,
+					success: function () {
+						console.log('success');
+					}
+				});
+			},
+			open() {
+				var that = this
+				this.time = 0
+				
+				this.Refresh(2)
+				
+				this.time = this.timeValue * 60
+				this.getTime()
+				
+				that.pageShow = true
+
+				that.show = true
+				uni.setScreenBrightness({
+					value: 1,
+					success: function () {
+						console.log('success');
+					}
+				});
+			},
+			getQrCodes() {
+				
+			},
+			getdesc() {
+				this.$u.api.meetingDetail({ id: this.roomId })
+					.then(res => {
+						this.info = res.data
+						if (res.data.meetingStatus === 3) return
+						res.data.userResponseList.forEach(item => {
+							if (item.id === this.userInfo.id) {
+								this.isShow = true
+							}
+						})
+						if (!this.isShow && this.userInfo && this.userInfo.id) {
+							uni.showToast({
+								title: '鎮ㄥ凡缁忎笉鍦ㄥ綋鍓嶄細璁�',
+								icon: 'none',
+								duration: 2000
+							});
+						}
+					})
+			},
+			qrR(e) {
+				console.log(e)
+			}
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+.time {
+    @include flex;
+    align-items: center;
+
+    &__custom {
+         margin-top: 4px;
+         width: 22px;
+         height: 22px;
+         background-color: $u-primary;
+         border-radius: 4px;
+         /* #ifndef APP-NVUE */
+         display: flex;
+         /* #endif */
+         justify-content: center;
+         align-items: center;
+    
+        &__item {
+             color: #fff;
+             font-size: 12px;
+             text-align: center;
+         }
+    }
+    
+    &__doc {
+         color: $u-primary;
+         padding: 0px 4px;
+     }
+    
+    &__item {
+         color: #606266;
+         font-size: 15px;
+         margin-right: 4px;
+     }
+}
+</style>
+
+<style lang="scss" scoped>
+	.details {
+		width: 100%;
+		padding-bottom: calc(140rpx + env(safe-area-inset-bottom));
+		.details_head {
+			width: 100%;
+			padding: 30rpx;
+			box-sizing: border-box;
+			display: flex;
+			flex-direction: column;
+			background-color: #ffffff;
+			text {
+				&:first-child {
+					font-size: 36rpx;
+					font-family: PingFangSC-Semibold, PingFang SC;
+					font-weight: 600;
+					color: #222222;
+				}
+				&:last-child {
+					font-size: 28rpx;
+					font-family: PingFangSC-Regular, PingFang SC;
+					font-weight: 400;
+					color: #666666;
+					margin-top: 30rpx;
+				}
+			}
+		}
+		.details_content {
+			width: 100%;
+			padding: 30rpx;
+			box-sizing: border-box;
+			background-color: #ffffff;
+			margin-top: 20rpx;
+			display: flex;
+			flex-direction: column;
+			.details_content_item {
+				display: flex;
+				flex-direction: column;
+				padding-bottom: 30rpx;
+				margin-top: 30rpx;
+				border-bottom: 1rpx solid #E5E5E5;
+				&:first-child {
+					margin-top: 0 !important;
+				}
+				&:last-child {
+					border: none !important;
+					padding-bottom: 0 !important;
+				}
+				.label {
+					font-size: 28rpx;
+					font-family: PingFangSC-Regular, PingFang SC;
+					font-weight: 400;
+					color: #666666;
+					margin-bottom: 22rpx;
+				}
+				.list {
+					display: flex;
+					flex-direction: column;
+					.list_item {
+						width: 100%;
+						word-break: break-all;
+						margin-bottom: 24rpx;
+						&:last-child {
+							margin-bottom: 0 !important;
+						}
+					}
+				}
+				.content {
+					display: flex;
+					align-items: center;
+					flex-wrap: wrap;
+					text {
+						font-size: 30rpx;
+						font-family: PingFangSC-Regular, PingFang SC;
+						font-weight: 400;
+						color: #222222;
+					}
+				}
+			}
+		}
+		.details_footer {
+			width: 100%;
+			padding: 20rpx 30rpx calc(20rpx + env(safe-area-inset-bottom)) 30rpx;
+			box-sizing: border-box;
+			background-color: #ffffff;
+			position: fixed;
+			bottom: 0;
+			left: 0;
+			display: flex;
+			align-items: center;
+			justify-content: space-between;
+			.details_footer_submit {
+				width: 100%;
+				height: 88rpx;
+				line-height: 88rpx;
+				text-align: center;
+				background: #0055FF;
+				border-radius: 4rpx;
+				font-size: 30rpx;
+				font-family: PingFangSC-Regular, PingFang SC;
+				font-weight: 400;
+				color: #FFFFFF;
+			}
+			.details_footer_left {
+				display: flex;
+				align-items: center;
+				.item {
+					display: flex;
+					flex-direction: column;
+					margin-right: 40rpx;
+					image {
+						width: 44rpx;
+						height: 44rpx;
+					}
+					text {
+						font-size: 20rpx;
+						font-family: PingFangSC-Regular, PingFang SC;
+						font-weight: 400;
+						color: #666666;
+						margin-top: 8rpx;
+					}
+				}
+			}
+			.details_footer_right {
+				flex: 1;
+				display: flex;
+				align-items: center;
+				.btn1 {
+					flex: 1;
+					height: 72rpx;
+					line-height: 72rpx;
+					text-align: center;
+					border-radius: 4rpx;
+					border: 2rpx solid #0055FF;
+					font-size: 30rpx;
+					font-family: PingFangSC-Regular, PingFang SC;
+					font-weight: 400;
+					color: #0055FF;
+					margin-right: 20rpx;
+					overflow: hidden;
+					position: relative;
+					button {
+						width: 100vw;
+						height: 300rpx;
+						position: absolute;
+						top: -20rpx;
+						left: -20rpx;
+						background: rgba(0, 0, 0, 0);
+						border: none;
+						z-index: 2;
+					}
+				}
+				.btn2 {
+					flex: 1;
+					height: 72rpx;
+					line-height: 72rpx;
+					text-align: center;
+					background: #0055FF;
+					box-shadow: 0rpx -1rpx 0rpx 0rpx #EEEEEE;
+					border-radius: 4rpx;
+					font-size: 30rpx;
+					font-family: PingFangSC-Regular, PingFang SC;
+					font-weight: 400;
+					color: #FFFFFF;
+				}
+			}
+		}
+		.details_ma /deep/ {
+			.u-popup__content {
+				width: 100%;
+				.box {
+					width: 100%;
+					padding: 80rpx 0;
+					box-sizing: border-box;
+					background-color: #ffffff;
+					display: flex;
+					align-items: center;
+					justify-content: center;
+					flex-direction: column;
+					.box_a {
+						padding: 0 30rpx;
+						box-sizing: border-box;
+						font-size: 36rpx;
+						font-family: PingFangSC-Semibold, PingFang SC;
+						font-weight: 600;
+						color: #222222;
+					}
+					.box_b {
+						font-size: 28rpx;
+						font-family: PingFangSC-Regular, PingFang SC;
+						font-weight: 400;
+						color: #0055FF;
+						margin-top: 40rpx;
+					}
+					.qrcode {
+						width: 440rpx;
+						height: 440rpx;
+						margin-top: 40rpx;
+						overflow: hidden;
+						image {
+							width: 100%;
+							height: 100%;
+						}
+					}
+					.box_c {
+						font-size: 28rpx;
+						font-family: PingFangSC-Regular, PingFang SC;
+						font-weight: 400;
+						color: #333333;
+						margin-top: 40rpx;
+					}
+					.box_d {
+						font-size: 26rpx;
+						font-family: PingFangSC-Regular, PingFang SC;
+						font-weight: 400;
+						color: #666666;
+						margin-top: 32rpx;
+					}
+					.box_e {
+						font-size: 26rpx;
+						font-family: PingFangSC-Regular, PingFang SC;
+						font-weight: 400;
+						color: #666666;
+					}
+				}
+			}
+		}
+		
+		
+	}
+</style>
diff --git a/h5/packagesMine/notice/notice.vue b/h5/packagesMine/notice/notice.vue
new file mode 100644
index 0000000..e7afae5
--- /dev/null
+++ b/h5/packagesMine/notice/notice.vue
@@ -0,0 +1,172 @@
+<template>
+	<view class="notice">
+		<view class="notice_item" v-for="(item, index) in list" :key="index" @click="jump(item)">
+			<view class="left">
+				<view class="left_dian" v-if="item.status === 0"></view>
+				<image src="@/static/meeting/icon/xiaoxi_ic_gonggao@2x.png" v-if="item.type === 1" mode="widthFix"></image>
+				<image src="@/static/meeting/icon/xiaoxi_ic_gonggao@2x(1).png" v-else mode="widthFix"></image>
+			</view>
+			<view class="right">
+				<view class="right_a">{{item.title}}</view>
+				<view class="right_b" v-if="item.type === 1">
+					<view class="right_b_label">浼氳涓婚锛�</view>
+					<view class="right_b_val">{{item.meetingDetailResponse.meetingName}}</view>
+				</view>
+				<view class="right_b" v-if="item.type === 1">
+					<view class="right_b_label">浼氳鏃堕棿锛�</view>
+					<view class="right_b_val">{{item.meetingDetailResponse.meetingDate}} {{item.meetingDetailResponse.meetingTime}}</view>
+				</view>
+				<view class="right_b" v-if="item.type === 1">
+					<view class="right_b_label">浼氳瀹わ細</view>
+					<view class="right_b_val">{{item.meetingDetailResponse.roomName}}</view>
+				</view>
+				<view class="right_b" v-if="item.type === 1">
+					<view class="right_b_label">棰勭害浜猴細</view>
+					<view class="right_b_val">{{item.meetingDetailResponse.bookingUserName}}</view>
+				</view>
+				<view class="right_c" v-if="item.type !== 1">{{item.createDate}}</view>
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+	export default {
+		data() {
+			return {
+				page: 0,
+				next: false,
+				list: []
+			};
+		},
+		onLoad() {
+			this.getList()
+		},
+		onReachBottom(){
+			this.getList()
+		},
+		methods: {
+			getList() {
+				if (!this.next) {
+					this.page = this.page + 1
+					this.$u.api.findNoticePage({
+						capacity: 20,
+						model: {
+							
+						},
+						page: this.page
+					}).then(res => {
+						if (res.data.records.length > 0) {
+							this.list = [...this.list, ...res.data.records]
+						}
+						if (res.data.records.length < 20) {
+							this.next = false
+						}
+					})
+				}
+			},
+			jump(item) {
+				var that = this
+				if (item.type === 0) {
+					uni.navigateTo({
+						url: `/packagesMine/notificationDetails/notificationDetails?content=${item.id}`
+					});
+				} else {
+					that.$u.api.getMemberDTO({ id: item.id })
+						.then(res => {
+							that.list.forEach(element => {
+								if (element.id === item.id) {
+									element.status = 1
+								}
+							})
+							uni.navigateTo({
+								url: `/packagesMine/meetingDetails/meetingDetails?id=${item.meetingDetailResponse.id}`
+							});
+						})
+				}
+			}
+		}
+	}
+</script>
+
+<style lang="scss">
+	.notice {
+		width: 100%;
+		padding: 26rpx 30rpx;
+		box-sizing: border-box;
+		.notice_item {
+			width: 100%;
+			display: flex;
+			align-items: flex-start;
+			justify-content: space-between;
+			background-color: #fff;
+			padding: 30rpx;
+			box-sizing: border-box;
+			margin-bottom: 20rpx;
+			&:last-child {
+				margin-bottom: 0 !important;
+			}
+			.left {
+				flex-shrink: 0;
+				width: 72rpx;
+				height: 72rpx;
+				position: relative;
+				margin-right: 24rpx;
+				.left_dian {
+					position: absolute;
+					right: 0;
+					top: 0;
+					width: 18rpx;
+					height: 18rpx;
+					background: #F62710;
+					border: 2rpx solid #FFFFFF;
+					border-radius: 50%;
+				}
+				image {
+					width: 100%;
+					height: 100%;
+				}
+			}
+			.right {
+				flex: 1;
+				display: flex;
+				flex-direction: column;
+				.right_a {
+					font-size: 32rpx;
+					font-family: PingFangSC-Medium, PingFang SC;
+					font-weight: 500;
+					color: #222222;
+					margin-bottom: 24rpx;
+				}
+				.right_c {
+					font-size: 26rpx;
+					font-family: PingFangSC-Regular, PingFang SC;
+					font-weight: 400;
+					color: #999999;
+				}
+				.right_b {
+					display: flex;
+					align-items: flex-start;
+					margin-bottom: 24rpx;
+					&:last-child {
+						margin-bottom: 0 !important;
+					}
+					.right_b_label {
+						flex-shrink: 0;
+						font-size: 26rpx;
+						font-family: PingFangSC-Regular, PingFang SC;
+						font-weight: 400;
+						color: #666666;
+					}
+					.right_b_val {
+						flex: 1;
+						font-size: 26rpx;
+						font-family: PingFangSC-Regular, PingFang SC;
+						font-weight: 400;
+						color: #333333;
+					}
+				}
+			}
+		}
+	}
+</style>
diff --git a/h5/packagesMine/notificationDetails/notificationDetails.vue b/h5/packagesMine/notificationDetails/notificationDetails.vue
new file mode 100644
index 0000000..f6d06a4
--- /dev/null
+++ b/h5/packagesMine/notificationDetails/notificationDetails.vue
@@ -0,0 +1,62 @@
+<template>
+	<view class="details">
+		<view class="details_head">
+			<text>{{info.title}}</text>
+			<text>{{info.createDate}}</text>
+		</view>
+		<u-parse :content="content"></u-parse>
+	</view>
+</template>
+
+<script>
+	export default {
+		data() {
+			return {
+				info: {},
+				content:  ''
+			};
+		},
+		onLoad(option) {
+			this.$u.api.getNoticeDetail({ id: option.content })
+				.then(res => {
+					this.content = res.data.content
+					this.info = res.data
+				})
+		}
+	}
+</script>
+
+<style>
+	page {
+		background-color: #ffffff;
+	}
+</style>
+
+<style lang="scss">
+	.details {
+		width: 100%;
+		padding: 30rpx;
+		box-sizing: border-box;
+		.details_head {
+			width: 100%;
+			display: flex;
+			flex-direction: column;
+			margin-bottom: 38rpx;
+			text {
+				&:first-child {
+					font-size: 40rpx;
+					font-family: PingFangSC-Medium, PingFang SC;
+					font-weight: 500;
+					color: #222222;
+				}
+				&:last-child {
+					font-size: 26rpx;
+					font-family: PingFangSC-Regular, PingFang SC;
+					font-weight: 400;
+					color: #999999;
+					margin-top: 30rpx;
+				}
+			}
+		}
+	}
+</style>
diff --git a/h5/packagesMine/reservation/reservation.vue b/h5/packagesMine/reservation/reservation.vue
new file mode 100644
index 0000000..b66c573
--- /dev/null
+++ b/h5/packagesMine/reservation/reservation.vue
@@ -0,0 +1,439 @@
+<template>
+	<view class="reservation">
+		<view class="date">
+			<view class="date_head">
+				<image src="@/static/meeting/icon/ar_left@2x.png" mode="widthFix" @click="getPreviousDays" v-if="!disable"></image>
+				<image src="@/static/meeting/icon/ar_left_disable.png" mode="widthFix" v-else></image>
+				<text @click="openDate">{{date}}</text>
+				<image src="@/static/meeting/icon/ar_right@2x.png" mode="widthFix" @click="getNextDays"></image>
+			</view>
+			<scroll-view scroll-x="true" class="date_cate">
+				<view class="date_cate_item" v-for="(item, index) in roomList" :key="index" @click="clickRoom(index)">
+					<text :class="i === index ? 'active' : ''">{{item.name}}</text>
+					<view class="date_cate_item_h" v-show="i === index"></view>
+				</view>
+			</scroll-view>
+			<view class="date_list">
+				<view
+					:style="{ background: item.active ? '#0055FF !important;' : '' }"
+					:class="item.isUse ? 'date_list_item disable' : 'date_list_item'"
+					v-for="(item, index) in timeList"
+					:key="index"
+					@click="clickTime(item, index)">
+					<text :style="{ color: item.active ? '#fff !important;' : '' }">{{item.startTime}}-{{item.endTime}}</text>
+				</view>
+				<view class="date_list_item1"></view>
+			</view>
+		</view>
+		<view class="footer">
+			<view class="footer_text">
+				<view class="label">宸查�夋嫨锛�</view>
+				<view class="content" v-if="selected.length > 0">{{roomList[i].name}}锝渰{selectedDate}}</view>
+			</view>
+			<view class="footer_submit">
+				<view class="footer_submit_left">
+					<view class="footer_submit_left_item">
+						<view class="item_hz"></view>
+						<text>宸查�夋嫨</text>
+					</view>
+					<view class="footer_submit_left_item">
+						<view class="item_hz ke"></view>
+						<text>鍙绾�</text>
+					</view>
+					<view class="footer_submit_left_item">
+						<view class="item_hz bu"></view>
+						<text>涓嶅彲棰勭害</text>
+					</view>
+				</view>
+				<view class="footer_submit_right" @click="submit">
+					纭棰勭害
+				</view>
+			</view>
+		</view>
+		<u-calendar :defaultDate="defaultDateMultiple" :show="dateShow" @confirm="selectDate" @close="closeDate"></u-calendar>
+	</view>
+</template>
+
+<script>
+	import { getDay, getPreviousDay, getNowDate } from '@/utils/utils.js'
+	export default {
+		data() {
+			return {
+				i: 0,
+				date: '',
+				stringDate: '',
+				number: 0,
+				selected: [],
+				roomList: [],
+				timeList: [],
+				
+				status: 0,
+				startnum: '',
+				endnum: '',
+				
+				dateShow: false,
+				time: '',
+				
+				disable: true,
+				defaultDateMultiple: []
+			};
+		},
+		onLoad() {
+			this.date = getDay().today
+			this.stringDate = getDay().date
+			this.defaultDateMultiple = [getDay().date]
+			this.getList()
+		},
+		computed: {
+			selectedDate() {
+				if (this.selected.length > 0) {
+					let start = this.selected[0].date.substring(0, 5)
+					let end = this.selected[this.selected.length - 1].date.substring(6, 11)
+					return `${start}-${end}`
+				}
+				return ''
+			}
+		},
+		methods: {
+			closeDate() {
+				this.dateShow = false
+			},
+			selectDate(e) {
+				this.number = 0
+				this.disable = false
+				this.time = getPreviousDay(this.number, e[0]).date
+				this.date = getPreviousDay(this.number, e[0]).today
+				this.stringDate = getPreviousDay(this.number, e[0]).date
+				this.defaultDateMultiple = [getPreviousDay(this.number, e[0]).date]
+				this.getOpeningHours()
+				this.dateShow = false
+			},
+			openDate() {
+				this.dateShow = true
+			},
+			submit() {
+				if (this.selected.length === 0) {
+					uni.showToast({
+						title: '璇峰厛閫夋嫨棰勭害鏃堕棿',
+						icon: 'none',
+						duration: 2000
+					});
+					return
+				}
+				let time = `${this.date.substring(0, 11)} ${this.selectedDate}`
+				let timeList = JSON.stringify(this.selected)
+				let startTime = `${this.stringDate} ${this.selectedDate.substring(0, 5)}`
+				let endTime = `${this.stringDate} ${this.selectedDate.substring(6, 11)}`
+				uni.navigateTo({
+					url: `/packagesMine/confirmAppointment/confirmAppointment?endTime=${endTime}&startTime=${startTime}&id=${this.roomList[this.i].id}&time=${time}&list=${timeList}`
+				});
+			},
+			// 閫夋嫨寮�鏀炬椂闂�
+			clickTime(obj, index) {
+				if (obj.status === 1) return
+				
+				if (this.status === 0) {
+					this.timeList.forEach(item => {
+						item.active = false
+					})
+					this.selected = []
+					this.timeList[index].active = !this.timeList[index].active
+					this.startnum = index
+					this.status = 1
+				} else if (this.status === 1) {
+					this.endnum = index
+					
+					let startnum = ''
+					let endnum = ''
+					
+					if (this.startnum > this.endnum) {
+						startnum = this.startnum
+						endnum = this.endnum
+					} else {
+						startnum = this.endnum
+						endnum = this.startnum
+					}
+					for (let i = 0; i < this.timeList.length; i++) {
+						if (i <= startnum && i >= endnum) {
+							if (this.timeList[i].isUse) {
+								uni.showToast({
+									title: '鎵�閫夋棩鏈熷寘鍚笉鍙�夋棩鏈�',
+									icon: 'none',
+									duration: 2000
+								});
+								this.status = 0
+								return
+							}
+						}
+					}
+ 					this.timeList.forEach((element, i) => {
+						if (i <= startnum && i >= endnum) {
+							element.active = true
+							this.selected.push({date: `${element.startTime}-${element.endTime}`, timeId: element.id, id: element.bookingTimeId})
+						} else {
+							element.active = false
+						}
+					})
+					this.status = 0
+				}
+			},
+			// 浼氳瀹ゅ紑鏀炬椂闂�
+			getOpeningHours() {
+				this.$u.api.getRoomUseTime({ 
+					roomId: this.roomList[this.i].id,
+					yudingDate: this.stringDate
+				}).then(res => {
+					res.data.forEach(item => {
+						item.active = false
+					})
+					this.timeList = res.data
+				})
+			},
+			// 鍒囨崲浼氳瀹�
+			clickRoom(i) {
+				this.i = i
+				this.status = 0
+				this.selected = []
+				this.timeList = []
+				this.getOpeningHours()
+			},
+			getList() {
+				this.$u.api.roomsList()
+					.then(res => {
+						if (res.data.length > 0) {
+							this.roomList = res.data
+							this.getOpeningHours()
+						}
+					})
+			},
+			// 涓婁竴澶╂棩鏈�
+			getPreviousDays() {
+				if (this.disable) true
+				if (getPreviousDay(1, this.stringDate).date === getDay().date) {
+					this.disable = true
+				} else {
+					this.disable = false
+				}
+				this.number = this.number + 1
+				this.date = getPreviousDay(this.number, this.time ? this.time : '').today
+				this.stringDate = getPreviousDay(this.number, this.time ? this.time : '').date
+				this.defaultDateMultiple = [getPreviousDay(this.number, this.time ? this.time : '').date]
+				this.getOpeningHours()
+			},
+			// 涓嬩竴璺虫棩鏈�
+			getNextDays() {
+				this.disable = false
+				this.number = this.number - 1
+				this.date = getPreviousDay(this.number, this.time ? this.time : '').today
+				this.stringDate = getPreviousDay(this.number, this.time ? this.time : '').date
+				this.defaultDateMultiple = [getPreviousDay(this.number, this.time ? this.time : '').date]
+				this.getOpeningHours()
+			}
+		}
+	}
+</script>
+
+<style>
+	page {
+		background-color: #ffffff !important;
+	}
+</style>
+
+<style lang="scss" scoped>
+	.reservation {
+		width: 100%;
+		padding-bottom: calc(env(safe-area-inset-bottom) + 160rpx);
+		.date {
+			width: 100%;
+			padding: 30rpx 0;
+			box-sizing: border-box;
+			.date_head {
+				width: 100%;
+				padding: 0 30rpx;
+				box-sizing: border-box;
+				display: flex;
+				align-items: center;
+				justify-content: center;
+				image {
+					width: 30rpx;
+					height: 30rpx;
+				}
+				text {
+					font-size: 32rpx;
+					font-family: PingFangSC-Semibold, PingFang SC;
+					font-weight: 600;
+					color: #222222;
+					margin: 0 40rpx
+				}
+			}
+			.date_cate {
+				white-space: nowrap;
+				width: 100%;
+				padding: 0 30rpx;
+				box-sizing: border-box;
+				// padding-bottom: 32rpx;
+				height: 70rpx;
+				box-sizing: border-box;
+				margin-top: 62rpx;
+				border-bottom: 1rpx solid #E5E5E5;
+				.date_cate_item {
+					display: inline-block;
+					margin-right: 54rpx;
+					position: relative;
+					&:last-child {
+						margin-right: 0 !important;
+					}
+					.date_cate_item_h {
+						position: absolute;
+						bottom: -30rpx;
+						left: 50%;
+						transform: translate(-50%, 0);
+						width: 60rpx;
+						height: 10rpx;
+						background-color: #0055FF;
+					}
+					.active {
+						font-size: 30rpx;
+						font-family: PingFangSC-Semibold, PingFang SC;
+						font-weight: 600;
+						color: #0055FF;
+					}
+					text {
+						font-size: 28rpx;
+						font-family: PingFangSC-Regular, PingFang SC;
+						font-weight: 400;
+						color: #333333;
+					}
+				}
+			}
+			.date_list {
+				width: 100%;
+				padding: 28rpx 30rpx;
+				box-sizing: border-box;
+				display: flex;
+				align-items: center;
+				justify-content: space-between;
+				flex-wrap: wrap;
+				.date_list_item1 {
+					width: 220rpx;
+					height: 0;
+				}
+				.active {
+					background: #0055FF !important;
+					text {
+						color: #FFFFFF !important;
+					}
+				}
+				.disable {
+					background: #CCCCCC !important;
+					text {
+						color: #999999 !important;
+					}
+				}
+				.date_list_item {
+					width: 220rpx;
+					height: 80rpx;
+					background: #F7F7F7;
+					border-radius: 4rpx;
+					display: flex;
+					align-items: center;
+					justify-content: center;
+					margin-bottom: 24rpx;
+					text {
+						font-size: 30rpx;
+						font-family: PingFangSC-Regular, PingFang SC;
+						font-weight: 400;
+						color: #222222;
+					}
+				}
+			}
+		}
+		.footer {
+			width: 100%;
+			padding: 0 30rpx;
+			box-sizing: border-box;
+			// height: 100rpx;
+			background: #FFFFFF;
+			// box-shadow: 0rpx -1rpx 0rpx 0rpx #EEEEEE;
+			position: fixed;
+			bottom: 0;
+			padding-bottom: env(safe-area-inset-bottom);
+			flex-direction: column;
+			.footer_text {
+				width: 100%;
+				height: 30rpx;
+				display: flex;
+				align-items: center;
+				margin-bottom: 30rpx;
+				.label {
+					flex-shrink: 0;
+					font-size: 28rpx;
+					font-family: PingFangSC-Regular, PingFang SC;
+					font-weight: 400;
+					color: #222222;
+					margin-right: 20rpx;
+				}
+				.content {
+					font-size: 28rpx;
+					font-family: PingFangSC-Regular, PingFang SC;
+					font-weight: 400;
+					color: #0055FF;
+				}
+			}
+			.footer_submit {
+				width: 100%;
+				height: 100rpx;
+				box-shadow: 0rpx -1rpx 0rpx 0rpx #EEEEEE;
+				display: flex;
+				align-items: center;
+				justify-content: space-between;
+				.footer_submit_left {
+					flex: 1;
+					display: flex;
+					align-items: center;
+					.footer_submit_left_item {
+						display: flex;
+						align-items: center;
+						margin-right: 20rpx;
+						&:last-child {
+							margin-right: 0 !important;
+						}
+						.item_hz {
+							width: 32rpx;
+							height: 32rpx;
+							background: #0055FF;
+							border-radius: 4rpx;
+							margin-right: 10rpx;
+						}
+						.ke {
+							background: #F7F7F7 !important;
+						}
+						.bu {
+							background: #CCCCCC !important; 
+						}
+						text {
+							font-size: 26rpx;
+							font-family: PingFangSC-Regular, PingFang SC;
+							font-weight: 400;
+							color: #333333;
+						}
+					}
+				}
+				.footer_submit_right {
+					flex-shrink: 0;
+					width: 184rpx;
+					height: 72rpx;
+					line-height: 72rpx;
+					text-align: center;
+					background: #0055FF;
+					box-shadow: 0rpx -1rpx 0rpx 0rpx #EEEEEE;
+					border-radius: 4rpx;
+					font-size: 30rpx;
+					font-family: PingFangSC-Regular, PingFang SC;
+					font-weight: 400;
+					color: #FFFFFF;
+				}
+			}
+		}
+	}
+</style>
diff --git a/h5/packagesMine/selectPersonnel/selectPersonnel.vue b/h5/packagesMine/selectPersonnel/selectPersonnel.vue
new file mode 100644
index 0000000..0b049ff
--- /dev/null
+++ b/h5/packagesMine/selectPersonnel/selectPersonnel.vue
@@ -0,0 +1,434 @@
+<template>
+	<view class="select">
+		<view class="select_input">
+			<view class="select_input_box">
+				<u--input
+					placeholder="鎼滅储閮ㄩ棬/浜哄憳"
+					prefixIcon="search"
+					v-model="keyword"
+					@confirm="confirm"
+					prefixIconStyle="font-size: 26rpx;color: #B2B2B2"
+				></u--input>
+			</view>
+		</view>
+		<view class="select_list" v-if="list && list.length > 0">
+			<view class="select_list_item" v-for="(item, index) in list" :key="index" @click="clickItem(index)">
+				<view class="left">
+					<view class="left_img">
+						<image :src="item.prefixUrl + item.avatar" mode="widthFix" v-if="item.avatar"></image>
+						<view class="left_img_t">{{ item.realname.substring(0, 1) }}</view>
+					</view>
+					<view class="left_info">
+						<view class="left_info_top">
+							<text>{{item.realname}}</text>
+							<text v-if="item.status === 1">鏈変細璁�</text>
+						</view>
+						<view class="left_info_bm">{{item.departmentName}}</view>
+					</view>
+				</view>
+				<image class="xuan" v-if="!item.active" src="@/static/meeting/icon/ic_choose@2x.png" mode="widthFix"></image>
+				<image class="xuan" v-else src="@/static/meeting/icon/ic_choose_sel@2x.png" mode="widthFix"></image>
+			</view>
+		</view>
+		<view class="select_list" v-else>
+			<view class="select_list_wu">
+				<image src="@/static/meeting/common/364.png" mode="widthFix"></image>
+			</view>
+		</view>
+		<view class="select_zw"></view>
+		<view class="select_footer">
+			<view class="footer_top">
+				<view class="footer_top_label">宸查�夋嫨锛�</view>
+				<view class="footer_top_content">
+					{{users}}
+				</view>
+				<image @click="show = true" src="@/static/meeting/icon/renyuan_ic_open@2x.png" mode="widthFix"></image>
+			</view>
+			<view class="footer_btn" @click="go">纭({{selected.length}}/{{list.length}})</view>
+		</view>
+		<u-popup :show="show" :round="20" mode="bottom" @close="show = false">
+			<view class="select_box">
+				<view class="select_box_head">
+					<text>宸查�夋嫨锛歿{selected.length}}浜�</text>
+					<text @click="show = false">纭</text>
+				</view>
+				<scroll-view scroll-y="true" class="select_box_list">
+					<view class="select_box_list_item" v-for="(item, index) in selected" :key="index">
+						<view class="left">
+							<view class="left_img">
+								<image :src="item.prefixUrl + item.avatar" mode="widthFix" v-if="item.avatar"></image>
+								<view class="left_img_t" v-else>{{ item.realname.substring(0, 1) }}</view>
+							</view>
+							<view class="left_info">
+								<text>{{item.realname}}</text>
+								<text>{{item.departmentName}}</text>
+							</view>
+						</view>
+						<view class="dele" @click="dele(index)">绉婚櫎</view>
+					</view>
+				</scroll-view>
+			</view>
+		</u-popup>
+	</view>
+</template>
+
+<script>
+	export default {
+		data() {
+			return {
+				show: false,
+				next: false,
+				page: 0,
+				list: [],
+				keyword: '',
+				selectedName: [],
+				selectedIds: [],
+				selected: [],
+				
+				startTime: '',
+				endTime: ''
+			};
+		},
+		onLoad(option) {
+			this.startTime = option.startTime
+			this.endTime = option.endTime
+			this.getList()
+		},
+		computed: {
+			users() {
+				return this.selectedName.join('锛�')
+			}
+		},
+		methods: {
+			go() {
+				uni.$emit('user', { userList: this.selectedIds, usersName: this.users })
+				uni.navigateBack({
+					delta: 1
+				});
+			},
+			dele(i) {
+				this.list.forEach(item => {
+					if (item.id === this.selectedIds[i].userId) {
+						item.active = false
+					}
+				})
+				this.selectedName.splice(i, 1)
+				this.selectedIds.splice(i, 1)
+				this.selected.splice(i, 1)
+			},
+			confirm() {
+				this.list = []
+				this.next = false
+				this.page = 0
+				this.getList()
+			},
+			clickItem(i) {
+				this.selectedName = []
+				this.selectedIds = []
+				this.selected = []
+				this.list[i].active = !this.list[i].active
+				this.list.forEach(item => {
+					if (item.active) {
+						this.selectedName.unshift(item.realname)
+						this.selectedIds.unshift({ userId: item.id })
+						this.selected.unshift(item)
+					}
+				})
+			},
+			getList() {
+				if (!this.next) {
+					this.$u.api.userPage({
+						capacity: 20,
+						page: this.page,
+						model: {
+							keyword: this.keyword,
+							startTime: this.startTime,
+							endTime: this.endTime
+						}
+					}).then(res => {
+						if (res.data.records.length > 0) {
+							res.data.records.forEach(item => {
+								item.active = false
+							})
+							this.list = [...this.list, ...res.data.records]
+							this.page = this.page + 1
+						}
+						if (res.data.records.length < 20) {
+							this.next = true
+						}
+					})
+				}
+			}
+		},
+		onReachBottom(){
+			this.getList()
+		}
+	}
+</script>
+
+<style>
+	page {
+		background-color: #fff !important;
+	}
+</style>
+
+<style lang="scss" scoped>
+	.select {
+		width: 100%;
+		.select_input {
+			width: 100%;
+			position: sticky;
+			top: 0;
+			padding: 20rpx 30rpx;
+			box-sizing: border-box;
+			background: #ffffff;
+			.select_input_box /deep/ {
+				width: 100%;
+				background: #F7F7F7;
+				.u-border {
+					border: none !important;
+				}
+			}
+		}
+		.select_list {
+			width: 100%;
+			padding: 0 30rpx;
+			margin-top: 16rpx;
+			box-sizing: border-box;
+			.select_list_wu {
+				width: 100%;
+				margin-top: 50rpx;
+				display: flex;
+				align-items: center;
+				justify-content: center;
+				image {
+					width: 340rpx;
+					height: 364rpx;
+				}
+			}
+			.select_list_item {
+				width: 100%;
+				height: 138rpx;
+				display: flex;
+				align-items: center;
+				justify-content: space-between;
+				border-bottom: 1rpx solid #E5E5E5;
+				.left {
+					display: flex;
+					align-items: flex-start;
+					.left_img {
+						width: 64rpx;
+						height: 64rpx;
+						margin-right: 20rpx;
+						border-radius: 50%;
+						overflow: hidden;
+						.left_img_t {
+							width: 100%;
+							height: 100%;
+							display: flex;
+							align-items: center;
+							justify-content: center;
+							background-color: #0055FF;
+							font-size: 30rpx;
+							font-family: PingFangSC-Regular, PingFang SC;
+							font-weight: 400;
+							color: #FFFFFF;
+						}
+						image {
+							width: 100%;
+							height: 100%;
+						}
+					}
+					.left_info {
+						display: flex;
+						flex-direction: column;
+						.left_info_top {
+							display: flex;
+							align-items: center;
+							text {
+								&:nth-child(1) {
+									font-size: 30rpx;
+									font-family: PingFangSC-Regular, PingFang SC;
+									font-weight: 400;
+									color: #222222;
+									margin-right: 10rpx;
+								}
+								&:nth-child(2) {
+									padding: 8rpx;
+									border-radius: 4rpx;
+									border: 1rpx solid #F62710;
+									font-size: 22rpx;
+									font-family: PingFangSC-Regular, PingFang SC;
+									font-weight: 400;
+									color: #F62710;
+								}
+							}
+						}
+						.left_info_bm {
+							font-size: 24rpx;
+							font-family: PingFangSC-Regular, PingFang SC;
+							font-weight: 400;
+							color: #666666;
+							margin-top: 16rpx;
+						}
+					}
+				}
+				.xuan {
+					width: 40rpx;
+					height: 40rpx;
+				}
+			}
+		}
+		.select_zw {
+			width: 100%;
+			height: calc(198rpx + env(safe-area-inset-bottom));
+		}
+		.select_footer {
+			width: 100%;
+			position: fixed;
+			bottom: 0;
+			box-sizing: border-box;
+			padding: 22rpx 30rpx calc(22rpx + env(safe-area-inset-bottom)) 30rpx;
+			background: #FFFFFF;
+			box-shadow: 0rpx 0rpx 6rpx 0rpx #B2B2B2;
+			.footer_top {
+				width: 100%;
+				height: 44rpx;
+				display: flex;
+				align-items: center;
+				.footer_top_label {
+					flex-shrink: 0;
+					font-size: 28rpx;
+					font-family: PingFangSC-Regular, PingFang SC;
+					font-weight: 400;
+					color: #222222;
+				}
+				.footer_top_content {
+					flex: 1;
+					font-size: 28rpx;
+					font-family: PingFangSC-Regular, PingFang SC;
+					font-weight: 400;
+					color: #0055FF;
+					overflow:hidden;
+					white-space: nowrap;
+					text-overflow: ellipsis;
+					-o-text-overflow:ellipsis;
+				}
+				image {
+					width: 44rpx;
+					height: 44rpx;
+				}
+			}
+			.footer_btn {
+				width: 100%;
+				height: 88rpx;
+				line-height: 88rpx;
+				text-align: center;
+				background: #0055FF;
+				border-radius: 4rpx;
+				font-size: 30rpx;
+				font-family: PingFangSC-Regular, PingFang SC;
+				font-weight: 400;
+				color: #FFFFFF;
+				margin-top: 22rpx;
+			}
+		}
+		.select_box {
+			width: 100%;
+			padding: 40rpx 30rpx;
+			box-sizing: border-box;
+			.select_box_head {
+				display: flex;
+				align-items: center;
+				justify-content: space-between;
+				margin-bottom: 40rpx;
+				text {
+					&:first-child {
+						font-size: 28rpx;
+						font-family: PingFangSC-Semibold, PingFang SC;
+						font-weight: 600;
+						color: #222222;
+					}
+					&:last-child {
+						font-size: 28rpx;
+						font-family: PingFangSC-Regular, PingFang SC;
+						font-weight: 400;
+						color: #0055FF;
+					}
+				}
+			}
+			.select_box_list {
+				width: 100%;
+				max-height: 700rpx;
+				display: flex;
+				flex-direction: column;
+				.select_box_list_item {
+					width: 100%;
+					height: 134rpx;
+					display: flex;
+					align-items: center;
+					justify-content: space-between;
+					border-bottom: 1rpx solid #E5E5E5;
+					.left {
+						display: flex;
+						align-items: center;
+						.left_img {
+							width: 64rpx;
+							height: 64rpx;
+							margin-right: 20rpx;
+							border-radius: 50%;
+							overflow: hidden;
+							.left_img_t {
+								width: 100%;
+								height: 100%;
+								display: flex;
+								align-items: center;
+								justify-content: center;
+								background-color: #0055FF;
+								font-size: 30rpx;
+								font-family: PingFangSC-Regular, PingFang SC;
+								font-weight: 400;
+								color: #FFFFFF;
+							}
+							image {
+								width: 100%;
+								height: 100%;
+							}
+						}
+						.left_info {
+							display: flex;
+							flex-direction: column;
+							text {
+								&:first-child {
+									font-size: 30rpx;
+									font-family: PingFangSC-Regular, PingFang SC;
+									font-weight: 400;
+									color: #222222;
+								}
+								&:last-child {
+									font-size: 24rpx;
+									font-family: PingFangSC-Regular, PingFang SC;
+									font-weight: 400;
+									color: #666666;
+									margin-top: 20rpx;
+								}
+							}
+						}
+					}
+					.dele {
+						width: 80rpx;
+						height: 48rpx;
+						line-height: 48rpx;
+						text-align: center;
+						border-radius: 4rpx;
+						border: 1rpx solid #999999;
+						font-size: 24rpx;
+						font-family: PingFangSC-Regular, PingFang SC;
+						font-weight: 400;
+						color: #333333;
+					}
+				}
+			}
+		}
+	}
+</style>
diff --git a/h5/pages.json b/h5/pages.json
index 1020956..957f8e3 100644
--- a/h5/pages.json
+++ b/h5/pages.json
@@ -4,166 +4,259 @@
 	},
 	"pages": [
 		{
-			"path" : "pages/notice/notice",
-			"style" : 
-			{
-				"navigationBarTitleText" : "鍏ュ満椤荤煡",
-				"enablePullDownRefresh" : false,
+			"path": "pages/notice/notice",
+			"style": {
+				"navigationBarTitleText": "鍏ュ満椤荤煡",
+				"enablePullDownRefresh": false,
 				"navigationStyle": "custom"
 			}
 		},
 		{
-			"path" : "pages/index/index",
-			"style" : 
-			{
-				"navigationBarTitleText" : "鍗庢櫉鏂拌兘婧�",
-				"enablePullDownRefresh" : false
+			"path": "pages/index/index",
+			"style": {
+				"navigationBarTitleText": "鍗庢櫉鏂拌兘婧�",
+				"enablePullDownRefresh": false
 			}
 		},
 		{
-			"path" : "pages/login/login",
-			"style" : 
-			{
-				"navigationBarTitleText" : "鐧诲綍",
-				"enablePullDownRefresh" : false,
+			"path": "pages/login/login",
+			"style": {
+				"navigationBarTitleText": "鐧诲綍",
+				"enablePullDownRefresh": false,
 				"navigationStyle": "custom"
 			}
 		},
 		{
-			"path" : "pages/answer/answer",
-			"style" : 
-			{
-				"navigationBarTitleText" : "绛旈",
-				"enablePullDownRefresh" : false,
+			"path": "pages/answer/answer",
+			"style": {
+				"navigationBarTitleText": "绛旈",
+				"enablePullDownRefresh": false,
 				"navigationStyle": "custom"
 			}
 		},
 		{
-			"path" : "pages/userinfo/userinfo",
-			"style" : 
-			{
-				"navigationBarTitleText" : "涓汉淇℃伅",
-				"enablePullDownRefresh" : false,
+			"path": "pages/userinfo/userinfo",
+			"style": {
+				"navigationBarTitleText": "涓汉淇℃伅",
+				"enablePullDownRefresh": false,
 				"navigationStyle": "custom"
 			}
 		},
 		{
-			"path" : "pages/visitorApplication/visitorApplication",
-			"style" : 
-			{
-				"navigationBarTitleText" : "璁垮鐢宠",
-				"enablePullDownRefresh" : false,
+			"path": "pages/visitorApplication/visitorApplication",
+			"style": {
+				"navigationBarTitleText": "璁垮鐢宠",
+				"enablePullDownRefresh": false,
 				"navigationStyle": "custom"
 			}
 		},
 		{
-			"path" : "pages/visitorApproval/visitorApproval",
-			"style" : 
-			{
-				"navigationBarTitleText" : "璁垮瀹℃壒",
-				"enablePullDownRefresh" : false
+			"path": "pages/visitorApproval/visitorApproval",
+			"style": {
+				"navigationBarTitleText": "璁垮瀹℃壒",
+				"enablePullDownRefresh": false
 			}
 		},
 		{
-			"path" : "pages/laborApplication/laborApplication",
-			"style" : 
-			{
-				"navigationBarTitleText" : "鍔冲姟鐢宠",
-				"enablePullDownRefresh" : false
+			"path": "pages/laborApplication/laborApplication",
+			"style": {
+				"navigationBarTitleText": "鍔冲姟鐢宠",
+				"enablePullDownRefresh": false
 			}
 		},
 		{
-			"path" : "pages/applicationRecord/applicationRecord",
-			"style" : 
-			{
-				"navigationBarTitleText" : "鐢宠璁板綍",
-				"enablePullDownRefresh" : false
+			"path": "pages/applicationRecord/applicationRecord",
+			"style": {
+				"navigationBarTitleText": "鐢宠璁板綍",
+				"enablePullDownRefresh": false
 			}
 		},
 		{
-			"path" : "pages/personnel/personnel",
-			"style" : 
-			{
-				"navigationBarTitleText" : "浜哄憳绠$悊",
-				"enablePullDownRefresh" : false
+			"path": "pages/personnel/personnel",
+			"style": {
+				"navigationBarTitleText": "浜哄憳绠$悊",
+				"enablePullDownRefresh": false
 			}
 		},
 		{
-			"path" : "pages/newPersonnel/newPersonnel",
-			"style" : 
-			{
-				"navigationBarTitleText" : "鏂板浜哄憳",
-				"enablePullDownRefresh" : false
+			"path": "pages/newPersonnel/newPersonnel",
+			"style": {
+				"navigationBarTitleText": "鏂板浜哄憳",
+				"enablePullDownRefresh": false
 			}
 		},
 		{
-			"path" : "pages/changePassword/changePassword",
-			"style" : 
-			{
-				"navigationBarTitleText" : "淇敼瀵嗙爜",
-				"enablePullDownRefresh" : false
+			"path": "pages/changePassword/changePassword",
+			"style": {
+				"navigationBarTitleText": "淇敼瀵嗙爜",
+				"enablePullDownRefresh": false
 			}
 		},
 		{
-			"path" : "pages/appointmentDetails/appointmentDetails",
-			"style" : 
-			{
-				"navigationBarTitleText" : "棰勭害璇︽儏",
-				"enablePullDownRefresh" : false
+			"path": "pages/appointmentDetails/appointmentDetails",
+			"style": {
+				"navigationBarTitleText": "棰勭害璇︽儏",
+				"enablePullDownRefresh": false
 			}
 		},
 		{
-			"path" : "pages/cropping/cropping",
-			"style" : 
-			{
-				"navigationBarTitleText" : "鍥剧墖瑁佸壀",
-				"enablePullDownRefresh" : false,
+			"path": "pages/cropping/cropping",
+			"style": {
+				"navigationBarTitleText": "鍥剧墖瑁佸壀",
+				"enablePullDownRefresh": false,
 				"navigationStyle": "custom"
+			}
+		},
+		// 浼氳瀹� 
+		{
+			"path": "pages/meeting/index/index",
+			"style": {
+				"navigationStyle": "custom",
+				"mp-alipay": {
+					"transparentTitle": "always",
+					"titlePenetrate": "YES"
+				},
+				"app-plus": {
+					"bounce": "none"
+				}
+			}
+		},
+		{
+			"path": "pages/meeting/mine/mine",
+			"style": {
+				"navigationStyle": "custom",
+				"navigationBarTextStyle": "white",
+				"navigationBarTitleText": "鎴戠殑",
+				"enablePullDownRefresh": false
+			}
+		},
+		{
+			"path": "pages/meeting/login/login",
+			"style": {
+				"navigationStyle": "custom",
+				"navigationBarTitleText": "鐧诲綍",
+				"enablePullDownRefresh": false
+			}
+		},
+		{
+			"path": "pages/meeting/personal/personal",
+			"style": {
+				"navigationBarTitleText": "涓汉璧勬枡",
+				"enablePullDownRefresh": false
+			}
+		},
+		{
+			"path": "pages/meeting/myAppointment/myAppointment",
+			"style": {
+				"navigationBarTitleText": "鎴戦绾︾殑浼氳瀹�",
+				"enablePullDownRefresh": false
+			}
+		},
+		{
+			"path": "pages/meeting/manage/manage",
+			"style": {
+				"navigationBarTitleText": "鎴戠鐞嗙殑浼氳瀹�",
+				"enablePullDownRefresh": false
+			}
+		},
+		{
+			"path": "pages/meeting/changePassword/changePassword",
+			"style": {
+				"navigationBarTitleText": "淇敼瀵嗙爜",
+				"enablePullDownRefresh": false
 			}
 		}
 	],
-	"subPackages": [ 
+	"subPackages": [
 		{
 			"root": "n_pages",
 			"pages": [
 				{
 					"path": "login/login",
 					"style": {
-						"navigationBarTitleText" : "鐧诲綍",
-						"enablePullDownRefresh" : false,
+						"navigationBarTitleText": "鐧诲綍",
+						"enablePullDownRefresh": false,
 						"navigationStyle": "custom"
 					}
 				},
 				{
 					"path": "index/index",
 					"style": {
-						"navigationBarTitleText" : "鍗庢櫉鏂拌兘婧�",
-						"enablePullDownRefresh" : false,
+						"navigationBarTitleText": "鍗庢櫉鏂拌兘婧�",
+						"enablePullDownRefresh": false,
 						"navigationStyle": "custom"
 					}
 				},
 				{
-					"path" : "applicationRecord/applicationRecord",
+					"path": "applicationRecord/applicationRecord",
 					"style": {
-						"navigationBarTitleText" : "鐢宠璁板綍",
-						"enablePullDownRefresh" : false,
+						"navigationBarTitleText": "鐢宠璁板綍",
+						"enablePullDownRefresh": false,
 						"navigationStyle": "custom"
 					}
 				},
 				{
-					"path" : "visitorApproval/visitorApproval",
+					"path": "visitorApproval/visitorApproval",
 					"style": {
-						"navigationBarTitleText" : "璁垮瀹℃壒",
-						"enablePullDownRefresh" : false,
+						"navigationBarTitleText": "璁垮瀹℃壒",
+						"enablePullDownRefresh": false,
 						"navigationStyle": "custom"
 					}
 				},
 				{
-					"path" : "visitorApplication/visitorApplication",
+					"path": "visitorApplication/visitorApplication",
 					"style": {
-						"navigationBarTitleText" : "璁垮鐢宠",
-						"enablePullDownRefresh" : false,
+						"navigationBarTitleText": "璁垮鐢宠",
+						"enablePullDownRefresh": false,
 						"navigationStyle": "custom"
+					}
+				}
+			]
+		},
+		{
+			"root": "packagesMine",
+			"name": "mine",
+			"pages": [
+				{
+					"path": "notice/notice",
+					"style": {
+						"navigationBarTitleText": "閫氱煡",
+						"enablePullDownRefresh": false
+					}
+				},
+				{
+					"path": "notificationDetails/notificationDetails",
+					"style": {
+						"navigationBarTitleText": "閫氱煡璇︽儏",
+						"enablePullDownRefresh": false
+					}
+				},
+				{
+					"path": "meetingDetails/meetingDetails",
+					"style": {
+						"navigationBarTitleText": "浼氳璇︽儏",
+						"enablePullDownRefresh": false
+					}
+				},
+				{
+					"path": "reservation/reservation",
+					"style": {
+						"navigationBarTitleText": "棰勭害",
+						"enablePullDownRefresh": false
+					}
+				},
+				{
+					"path": "confirmAppointment/confirmAppointment",
+					"style": {
+						"navigationBarTitleText": "纭棰勭害",
+						"enablePullDownRefresh": false
+					}
+				},
+				{
+					"path": "selectPersonnel/selectPersonnel",
+					"style": {
+						"navigationBarTitleText": "閫夋嫨浜哄憳",
+						"enablePullDownRefresh": false
 					}
 				}
 			]
@@ -176,4 +269,4 @@
 		"backgroundColor": "#ffffff"
 	},
 	"uniIdRouter": {}
-}
+}
\ No newline at end of file
diff --git a/h5/pages/meeting/index/index.vue b/h5/pages/meeting/index/index.vue
index 707942f..e25acbc 100644
--- a/h5/pages/meeting/index/index.vue
+++ b/h5/pages/meeting/index/index.vue
@@ -1,12 +1,12 @@
 <template>
 	<view class="container">
-		<!-- 鑷畾涔夊ご閮� -->
+		<!-- 鑷畾涔夊ご閮� -->
 		<navigation Title="鏅鸿兘浼氳瀹�"></navigation>
 		<you-scroll ref="scroll" @onPullDown="onPullDown" @More="More">
 			<!-- 閫氱煡鍏憡 -->
 			<view class="container_a" @click="jump">
 				<view class="container_a_left">
-					<image src="@/static/icon/home_ic_notice@2x.png" mode="widthFix"></image>
+					<image src="@/static/meeting/icon/home_ic_notice@2x.png" mode="widthFix"></image>
 				</view>
 				<view class="container_a_right">
 					<text>{{news.title}}</text>
@@ -43,7 +43,7 @@
 					</view>
 					<view class="container_c_head_right" @click="show = true">
 						<text>{{roomName.length > 10 ? roomName.substring(0, 8) + '...' : roomName}}</text>
-						<image src="@/static/icon/ar_open@2x.png" mode="widthFix"></image>
+						<image src="@/static/meeting/icon/ar_open@2x.png" mode="widthFix"></image>
 					</view>
 				</view>
 				<view class="container_c_list" v-if="list && list.length > 0">
@@ -82,7 +82,7 @@
 				</view>
 				<view class="container_c_list" v-else>
 					<view class="container_c_list_wu">
-						<image src="@/static/common/364.png" mode="widthFix"></image>
+						<image src="@/static/meeting/common/364.png" mode="widthFix"></image>
 					</view>
 				</view>
 			</view>
@@ -484,4 +484,4 @@
 			}
 		}
 	}
-</style>
+</style>
diff --git a/h5/pages/meeting/manage/manage.vue b/h5/pages/meeting/manage/manage.vue
index 8394353..58c3228 100644
--- a/h5/pages/meeting/manage/manage.vue
+++ b/h5/pages/meeting/manage/manage.vue
@@ -1,6 +1,6 @@
 <template>
-	<page-meta :page-style="'overflow:'+(pageShow?'hidden':'visible')"></page-meta>
-	<view class="manage">
+	<page-meta :page-style="'overflow:'+(pageShow?'hidden':'visible')"></page-meta>
+	<view class="manage">
 		<view class="manage_head">
 			<view class="manage_head_input">
 				<u--input
@@ -22,7 +22,7 @@
 						<view class="top_left_content">
 							<text>{{item.name}}</text>
 							<view class="top_left_content_time">
-								<image src="@/static/icon/ic_time@2x.png" mode="widthFix"></image>
+								<image src="@/static/meeting/icon/ic_time@2x.png" mode="widthFix"></image>
 								<text>{{item.startTime}}-{{item.endTime}}</text>
 							</view>
 						</view>
@@ -38,7 +38,7 @@
 		
 		<view class="manage_list" v-else>
 			<view class="manage_list_wu">
-				<image src="@/static/common/364.png" mode="widthFix"></image>
+				<image src="@/static/meeting/common/364.png" mode="widthFix"></image>
 			</view>
 		</view>
 		
@@ -56,15 +56,15 @@
 				</view>
 			</u-popup>
 		</view>
-		
-	</view>
-</template>
-
+		
+	</view>
+</template>
+
 <script>
-	import { mapState } from 'vuex'
-	export default {
-		data() {
-			return {
+	import { mapState } from 'vuex'
+	export default {
+		data() {
+			return {
 				value: '',
 				next: false,
 				list: [],
@@ -78,8 +78,8 @@
 				qrurl: '',
 				id: '',
 				pageShow: false,
-				icon: require('@/static/common/123.png')
-			};
+				icon: require('@/static/meeting/common/123.png')
+			};
 		},
 		onLoad() {
 			this.getList()
@@ -204,11 +204,11 @@
 					})
 				}
 			}
-		}
-	}
-</script>
-
-<style lang="scss">
+		}
+	}
+</script>
+
+<style lang="scss">
 	.manage {
 		width: 100%;
 		.details_ma /deep/ {
@@ -403,5 +403,5 @@
 				}
 			}
 		}
-	}
-</style>
+	}
+</style>
diff --git a/h5/pages/meeting/mine/mine.vue b/h5/pages/meeting/mine/mine.vue
index f2dfe82..835a4ec 100644
--- a/h5/pages/meeting/mine/mine.vue
+++ b/h5/pages/meeting/mine/mine.vue
@@ -43,12 +43,12 @@
 		data() {
 			return {
 				backgroundImage: 'https://dmtest.ahapp.net/file/projects/20230511/7d1f149816e24e68bb2df9011be53990.png',
-				avatar: require('@/static/common/default_user@2x.png'),
+				avatar: require('@/static/meeting/common/default_user@2x.png'),
 				list: [
-					{ name: '涓汉璧勬枡', path: '/pages/personal/personal', icon: require('@/static/icon/wd_ic_ziliao@2x.png') },
-					{ name: '鎴戦绾︾殑浼氳瀹�', path: '/pages/myAppointment/myAppointment', icon: require('@/static/icon/wd_ic_yuyue@2x.png') },
-					{ name: '鎴戠鐞嗙殑浼氳瀹�', path: '/pages/manage/manage', icon: require('@/static/icon/wd_ic_guanli@2x.png') },
-					{ name: '淇敼瀵嗙爜', path: '/pages/changePassword/changePassword', icon: require('@/static/icon/wd_ic_mima@2x.png') }
+					{ name: '涓汉璧勬枡', path: '/pages/personal/personal', icon: require('@/static/meeting/icon/wd_ic_ziliao@2x.png') },
+					{ name: '鎴戦绾︾殑浼氳瀹�', path: '/pages/myAppointment/myAppointment', icon: require('@/static/meeting/icon/wd_ic_yuyue@2x.png') },
+					{ name: '鎴戠鐞嗙殑浼氳瀹�', path: '/pages/manage/manage', icon: require('@/static/meeting/icon/wd_ic_guanli@2x.png') },
+					{ name: '淇敼瀵嗙爜', path: '/pages/changePassword/changePassword', icon: require('@/static/meeting/icon/wd_ic_mima@2x.png') }
 				]
 			}
 		},
@@ -204,4 +204,4 @@
 			}
 		}
 	}
-</style>
+</style>
diff --git a/h5/pages/meeting/myAppointment/myAppointment.vue b/h5/pages/meeting/myAppointment/myAppointment.vue
index 1b31401..3543f76 100644
--- a/h5/pages/meeting/myAppointment/myAppointment.vue
+++ b/h5/pages/meeting/myAppointment/myAppointment.vue
@@ -1,6 +1,6 @@
 <template>
-	<page-meta :page-style="'overflow:'+(pageShow?'hidden':'visible')"></page-meta>
-	<view class="yuyue">
+	<page-meta :page-style="'overflow:'+(pageShow?'hidden':'visible')"></page-meta>
+	<view class="yuyue">
 		<view class="yuyue_head">
 			<view class="yuyue_head_input">
 				<u--input
@@ -45,16 +45,16 @@
 				<view class="item_d" v-if="i === 0">
 					<view class="item_d_left">
 						<view class="item_d_left_item" @click.stop="copy(item)" v-if="item.meetingStatus !== 3">
-							<image src="@/static/icon/ic_copy@2x.png" mode="widthFix"></image>
+							<image src="@/static/meeting/icon/ic_copy@2x.png" mode="widthFix"></image>
 							<text>澶嶅埗</text>
 						</view>
 						<view class="item_d_left_item" @click="fenxiang(item)" v-if="item.meetingStatus !== 3">
 							<button open-type="share"></button>
-							<image src="@/static/icon/ic_fenxiang@2x.png" mode="widthFix"></image>
+							<image src="@/static/meeting/icon/ic_fenxiang@2x.png" mode="widthFix"></image>
 							<text>鍒嗕韩</text>
 						</view>
 						<view class="item_d_left_item" v-if="item.meetingStatus === 1" @click.stop="closeRoom(item.meetingStatus, item.id)">
-							<image src="@/static/icon/ic_cancel@2x.png" mode="widthFix"></image>
+							<image src="@/static/meeting/icon/ic_cancel@2x.png" mode="widthFix"></image>
 							<text>鍙栨秷</text>
 						</view>
 					</view>
@@ -67,7 +67,7 @@
 		
 		<view class="yuyue_content" v-else>
 			<view class="yuyue_content_wu">
-				<image src="@/static/common/364.png" mode="widthFix"></image>
+				<image src="@/static/meeting/common/364.png" mode="widthFix"></image>
 			</view>
 		</view>
 		
@@ -98,18 +98,18 @@
 		@cancel="close1"
 		ref="uModal"
 		:showCancelButton="true"
-		asyncClose="true"></u-modal>
-	</view>
-</template>
-
+		asyncClose="true"></u-modal>
+	</view>
+</template>
+
 <script>
 	import { mapState } from 'vuex'
-	import tkiQrcode from "@/components/tki-qrcode/tki-qrcode.vue"
-	export default {
-		data() {
+	import tkiQrcode from "@/components/tki-qrcode/tki-qrcode.vue"
+	export default {
+		data() {
 			return {
 				i: 0,
-				show: false,
+				show: false,
 				cate: [
 					{ name: '鏈紑濮�', id: 1 },
 					{ name: '宸茬粨鏉�', id: 2 }
@@ -133,8 +133,8 @@
 					title: '',
 					path: '',
 					imageUrl: 'https://dmtest.ahapp.net/file/projects/20230511/13f256b832db4a4fadc5e6770f5727bf.png'
-				}
-			};
+				}
+			};
 		},
 		computed: {
 			...mapState(['token'])
@@ -333,11 +333,11 @@
 					})
 				}
 			}
-		}
-	}
-</script>
-
-<style lang="scss">
+		}
+	}
+</script>
+
+<style lang="scss">
 	.yuyue {
 		width: 100%;
 		.details_ma /deep/ {
@@ -614,5 +614,5 @@
 				}
 			}
 		}
-	}
-</style>
+	}
+</style>
diff --git a/h5/pages/meeting/personal/personal.vue b/h5/pages/meeting/personal/personal.vue
index ff077b8..8be8573 100644
--- a/h5/pages/meeting/personal/personal.vue
+++ b/h5/pages/meeting/personal/personal.vue
@@ -72,9 +72,9 @@
 			@confirm="confirmDate"
 			@cancel="isShow = false"
 		></u-datetime-picker>
-	</view>
-</template>
-
+	</view>
+</template>
+
 <script>
 	import { mapState, mapMutations } from 'vuex'
 	
@@ -87,7 +87,7 @@
 				show1: false,
 				minDate: Number(new Date('1980-01-01')),
 				maxDate: Number(new Date()),
-				defaultAvatar: require('@/static/common/default_user@2x.png'),
+				defaultAvatar: require('@/static/meeting/common/default_user@2x.png'),
 				columns: [
 					['鐢�', '濂�']
 				],
@@ -187,15 +187,15 @@
 					})
 			}
 		}
-	}
-</script>
+	}
+</script>
 
 <style>
 	page {
 		background-color: #fff !important;
 	}
 </style>
-
+
 <style lang="scss" scoped>
 	.personal {
 		width: 100%;
@@ -480,5 +480,5 @@
 				color: #FFFFFF;
 			}
 		}
-	}
+	}
 </style>
\ No newline at end of file
diff --git a/h5/store/index.js b/h5/store/index.js
index a1dfad7..a363be0 100644
--- a/h5/store/index.js
+++ b/h5/store/index.js
@@ -3,29 +3,92 @@
 
 Vue.use(Vuex)
 
-const openId = uni.getStorageSync('openId');
-const member = uni.getStorageSync('member');
+const openId = uni.getStorageSync('openId')
+const member = uni.getStorageSync('member')
+
+// meeting
+const navHeight = uni.getStorageSync('navHeight')
+const statusbarHeight = uni.getStorageSync('statusbarHeight')
+const height = uni.getStorageSync('height')
+const token = uni.getStorageSync('token')
+const time = uni.getStorageSync('time')
+const userInfo = uni.getStorageSync('userInfo')
+const sessionKey = uni.getStorageSync('sessionKey')
 
 const store = new Vuex.Store({
-	
+
 	state: {
 		openId: openId || '',
-		member: member || null
+		member: member || null,
+		statusbarHeight: statusbarHeight || '0',
+		navHeight: navHeight || '0',
+		token: token || null,
+		time: time || null,
+		userInfo: userInfo || {},
+		height: height || '0',
+		sessionKey: sessionKey || ''
 	},
-	
+
 	mutations: {
 		// 璁剧疆openId
 		setOpenId(state, val) {
 			state.openId = val
-			uni.setStorageSync('openId', val);
+			uni.setStorageSync('openId', val)
 		},
 		// 璁剧疆鐢ㄦ埛淇℃伅
 		setMember(state, val) {
 			state.member = val
-			uni.setStorageSync('member', val);
+			uni.setStorageSync('member', val)
+		},
+		// 璁剧疆瀵艰埅鏍忛珮搴�
+		setHeight(state, val) {
+			state.navHeight = val.navHeight
+			state.statusbarHeight = val.statusbarHeight
+			state.height = val.height
+			uni.setStorageSync('navHeight', val.navHeight)
+			uni.setStorageSync('statusbarHeight', val.statusbarHeight)
+			uni.setStorageSync('height', val.height)
+		},
+		// 璁剧疆缂撳瓨token
+		setToken(state, token) {
+			state.token = token
+			uni.setStorageSync('token', token)
+		},
+		// 璁剧疆杩囨湡鏃堕棿鎴�
+		setTimeStamp(state, time) {
+			state.time = time
+			uni.setStorageSync('time', time)
+		},
+		// 璁剧疆鐢ㄦ埛淇℃伅
+		setUserInfo(state, obj) {
+			state.userInfo = obj
+			uni.setStorageSync('userInfo', obj)
+		},
+		// 璁剧疆SessionKey
+		setSessionKey(state, val) {
+			state.sessionKey = val
+			uni.setStorageSync('sessionKey', val)
+		},
+		// 娓呯┖鎵�鏈夌紦瀛�
+		empty(state) {
+			state.token = ''
+			state.userInfo = ''
+			uni.removeStorageSync('userInfo')
+			uni.removeStorageSync('token')
+		}
+	},
+	actions: {
+		// 鑾峰彇鐘舵�侀珮搴�
+		getHeight(context) {
+			let res = uni.getMenuButtonBoundingClientRect()
+			let status = uni.getSystemInfoSync()
+			var height = res.height
+			let statusbarHeight = status.statusBarHeight
+			let navHeight = res.height + (res.top - statusbarHeight) * 2
+			context.commit('setHeight', { statusbarHeight, navHeight, height })
 		}
 	}
-	
+
 })
 
-export default store;
\ No newline at end of file
+export default store
\ No newline at end of file
diff --git a/h5/utils/meetingHttp.js b/h5/utils/meetingHttp.js
index 78881ad..becd957 100644
--- a/h5/utils/meetingHttp.js
+++ b/h5/utils/meetingHttp.js
@@ -1,44 +1,43 @@
 import { baseUrl } from './http.api'
 
 const install = (Vue, vm) => {
-	
+
 	uni.$u.http.setConfig((config) => {
-	    config.baseURL = baseURL;
-			config.timeout = 60000;
-	    return config;
+		config.baseURL = baseUrl
+		config.timeout = 60000
+		return config
 	})
-	
-	Vue.prototype.$baseUrl = baseUrl;
-	Vue.prototype.$uploadUrl = uploadUrl;
-	
+
+	Vue.prototype.$baseUrl = baseUrl
+
 	let ordinaryLogin = (params = {}) => uni.$u.http.get('web/account/ordinaryLogin', { params })
 	let wxEmpower = (params = {}) => uni.$u.http.get('web/account/wxEmpower', { params })
-	let editUserInfo = (data = {}) => vm.$u.http.post('web/account/editUserInfo', data);
-	let getUserInfo = (params = {}) => vm.$u.http.get('web/account/getUserInfo', { params });
-	let roomsList = (params = {}) => vm.$u.http.get('web/rooms/roomsList', { params });
-	let getRoomUseTime = (data = {}) => vm.$u.http.post('web/rooms/getRoomUseTime', data);
-	let userPage = (data = {}) => vm.$u.http.post('web/meeting/userPage', data);
-	let getRoomDetail = (params = {}) => vm.$u.http.get('web/rooms/getRoomDetail', { params });
-	let reservationMeeting = (data = {}) => vm.$u.http.post('web/meeting/reservationMeeting', data);
-	let meetingDetail = (params = {}) => vm.$u.http.get('web/meeting/meetingDetail', { params });
-	let getQrCode = (params = {}) => vm.$u.http.get('web/meeting/getQrCode', { params });
-	let reservationCancel = (params = {}) => vm.$u.http.get('web/meeting/reservationCancel', { params });
-	let resetPwd = (data = {}) => vm.$u.http.post('web/account/resetPwd', data);
-	let myMeetingPage = (data = {}) => vm.$u.http.post('web/meeting/myMeetingPage', data);
-	let myRoomsPage = (data = {}) => vm.$u.http.post('web/rooms/myRoomsPage', data);
-	let findNoticePage = (data = {}) => vm.$u.http.post('web/notice/findNoticePage', data);
-	let getMemberDTO = (params = {}) => vm.$u.http.get('web/notice/getMemberDTO', { params });
-	let findNewNotice = (params = {}) => vm.$u.http.get('web/notice/findNewNotice', { params });
-	let monthMeeting = (params = {}) => vm.$u.http.get('web/meeting/monthMeeting', { params });
-	let roomsGetQrCode = (params = {}) => vm.$u.http.get('web/rooms/getQrCode', { params });
-	let getSystemDictData = (params = {}) => vm.$u.http.get('web/util/getSystemDictData', { params });
-	let getQrCodeImg = (params = {}) => vm.$u.http.get('web/meeting/getQrCodeImg', { params });
-	let visitorLogin = (params = {}) => vm.$u.http.get('web/account/visitorLogin', { params });
-	let visitorWxPhone = (data = {}) => vm.$u.http.post('web/account/visitorWxPhone', data);
-	let getNoticeDetail = (params = {}) => vm.$u.http.get('web/notice/getNoticeDetail', { params });
+	let editUserInfo = (data = {}) => vm.$u.http.post('web/account/editUserInfo', data)
+	let getUserInfo = (params = {}) => vm.$u.http.get('web/account/getUserInfo', { params })
+	let roomsList = (params = {}) => vm.$u.http.get('web/rooms/roomsList', { params })
+	let getRoomUseTime = (data = {}) => vm.$u.http.post('web/rooms/getRoomUseTime', data)
+	let userPage = (data = {}) => vm.$u.http.post('web/meeting/userPage', data)
+	let getRoomDetail = (params = {}) => vm.$u.http.get('web/rooms/getRoomDetail', { params })
+	let reservationMeeting = (data = {}) => vm.$u.http.post('web/meeting/reservationMeeting', data)
+	let meetingDetail = (params = {}) => vm.$u.http.get('web/meeting/meetingDetail', { params })
+	let getQrCode = (params = {}) => vm.$u.http.get('web/meeting/getQrCode', { params })
+	let reservationCancel = (params = {}) => vm.$u.http.get('web/meeting/reservationCancel', { params })
+	let resetPwd = (data = {}) => vm.$u.http.post('web/account/resetPwd', data)
+	let myMeetingPage = (data = {}) => vm.$u.http.post('web/meeting/myMeetingPage', data)
+	let myRoomsPage = (data = {}) => vm.$u.http.post('web/rooms/myRoomsPage', data)
+	let findNoticePage = (data = {}) => vm.$u.http.post('web/notice/findNoticePage', data)
+	let getMemberDTO = (params = {}) => vm.$u.http.get('web/notice/getMemberDTO', { params })
+	let findNewNotice = (params = {}) => vm.$u.http.get('web/notice/findNewNotice', { params })
+	let monthMeeting = (params = {}) => vm.$u.http.get('web/meeting/monthMeeting', { params })
+	let roomsGetQrCode = (params = {}) => vm.$u.http.get('web/rooms/getQrCode', { params })
+	let getSystemDictData = (params = {}) => vm.$u.http.get('web/util/getSystemDictData', { params })
+	let getQrCodeImg = (params = {}) => vm.$u.http.get('web/meeting/getQrCodeImg', { params })
+	let visitorLogin = (params = {}) => vm.$u.http.get('web/account/visitorLogin', { params })
+	let visitorWxPhone = (data = {}) => vm.$u.http.post('web/account/visitorWxPhone', data)
+	let getNoticeDetail = (params = {}) => vm.$u.http.get('web/notice/getNoticeDetail', { params })
 
-	
-	
+
+
 	vm.$u.api = {
 		ordinaryLogin,
 		wxEmpower,
@@ -65,7 +64,7 @@
 		visitorLogin,
 		visitorWxPhone,
 		getNoticeDetail
-	};
+	}
 }
 
 export default { install }
\ No newline at end of file

--
Gitblit v1.9.3