From a8fb7ae2dbb61a94141ed5e73d3bb2632b7b84df Mon Sep 17 00:00:00 2001
From: rk <94314517@qq.com>
Date: 星期日, 28 九月 2025 15:25:48 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/wuhuyancao' into wuhuyancao

---
 h5/pages.json                                                                           |   14 
 h5/utils/config.js                                                                      |    4 
 server/system_service/src/main/java/com/doumee/dao/system/vo/SystemMenuNodeVO.java      |    2 
 h5/pages/login/login.vue                                                                |   42 +-
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/Category.java |    1 
 admin/src/store/index.js                                                                |    3 
 h5/static/loading.gif                                                                   |    0 
 h5/pages/index/index.vue                                                                |    1 
 server/system_service/src/main/java/com/doumee/biz/system/impl/SystemMenuBizImpl.java   |   20 +
 h5/pages/appointment/appointment.vue                                                    |  678 +++++++++++++++++++++++++++++++++++++++++++++
 h5/pages/loading/loading.vue                                                            |   83 +++++
 h5/static/ic_fail.png                                                                   |    0 
 admin/src/main.js                                                                       |   28 +
 h5/pages/answer/answer.vue                                                              |    2 
 14 files changed, 849 insertions(+), 29 deletions(-)

diff --git a/admin/src/main.js b/admin/src/main.js
index 83b2a5e..a98f12b 100644
--- a/admin/src/main.js
+++ b/admin/src/main.js
@@ -45,10 +45,16 @@
         return
       }
       await this.initRoutes()
+    },
+    async topMenuCurrent () {
+      if (this.topMenuCurrent == null) {
+        return
+      }
+      await this.chagneRoutes()
     }
   },
   methods: {
-    ...mapMutations(['switchCollapseMenu', 'setHomePage', 'setTopMenuCurrent', 'setTopMenuCurrent']),
+    ...mapMutations(['switchCollapseMenu', 'setHomePage', 'setTopMenuCurrent', 'setTopMenuCurrent','cleartagsview']),
     // 鍒濆鍖栨湰鍦伴厤缃�
     initLocalConfig () {
       // 鑿滃崟鐘舵�侀厤缃�
@@ -79,9 +85,13 @@
           })
           storeTopMenus.push.apply(storeTopMenus, topList)
           var topCurrent = null
+          var tlist =[]
           topList.forEach(item => {
-            if (item.linkType === 0 && topCurrent == null) {
-              topCurrent = item
+            if (item.linkType === 0 ) {
+              if (topCurrent == null) {
+                topCurrent = item
+              }
+              tlist.push(...item.children)
             }
           })
           this.setTopMenuCurrent(topCurrent)
@@ -96,7 +106,7 @@
           console.log('menus', this.menuData.list)
           storeMenus.push.apply(storeMenus, this.menuData.list)
           // 娣诲姞璺敱
-          this.__addRouters(storeMenus)
+          this.__addRouters(tlist)
           // 404
           router.addRoute({
             path: '*',
@@ -120,6 +130,16 @@
           this.loading = false
         })
     },
+    async chagneRoutes () {
+      // 閲嶇疆鑿滃崟
+      this.cleartagsview('/index')
+      console.log('menus', this.menuData.list)
+      // 娣诲姞璺敱
+      // this.__addRouters(this.menuData.list)
+      if(this.topMenuCurrent.homeUrl){
+        await this.$router.push({path: this.topMenuCurrent.homeUrl, query: {}})
+      }
+    },
     // 鏂板缓璺敱
     __addRouters (routes, parents = []) {
       if (routes == null || routes.length === 0) {
diff --git a/admin/src/store/index.js b/admin/src/store/index.js
index f76eee9..eae17b4 100644
--- a/admin/src/store/index.js
+++ b/admin/src/store/index.js
@@ -1,5 +1,6 @@
 import Vue from 'vue'
 import Vuex from 'vuex'
+import router from '../router'
 Vue.use(Vuex)
 
 const state = {
@@ -73,7 +74,7 @@
   },
   // 閲嶇疆鑿滃崟
   resetMenus: (state) => {
-    state.topMenuId=null;
+    state.topMenuId=null
     state.menuData.list = []
   },
   //  tags
diff --git a/h5/pages.json b/h5/pages.json
index 7d64341..4a75021 100644
--- a/h5/pages.json
+++ b/h5/pages.json
@@ -503,6 +503,20 @@
         	{
         		"navigationBarTitleText" : "閫夋嫨琚浜�"
         	}
+        },
+        {
+        	"path" : "pages/appointment/appointment",
+        	"style" : 
+        	{
+        		"navigationBarTitleText" : "棰勭害"
+        	}
+        },
+        {
+        	"path" : "pages/loading/loading",
+        	"style" : 
+        	{
+        		"navigationBarTitleText" : "鎺堟潈"
+        	}
         }
     ],
 	"subPackages": [
diff --git a/h5/pages/answer/answer.vue b/h5/pages/answer/answer.vue
index e9f232e..54723fe 100644
--- a/h5/pages/answer/answer.vue
+++ b/h5/pages/answer/answer.vue
@@ -412,7 +412,7 @@
       }).then(res => {
         this.score = 0
         uni.navigateTo({
-          url: `/pages/userinfo/userinfo?answerId=${res.data}`
+          url: `/pages/appointment/appointment?answerId=${res.data}`
         })
       })
 
diff --git a/h5/pages/appointment/appointment.vue b/h5/pages/appointment/appointment.vue
new file mode 100644
index 0000000..8ba94ad
--- /dev/null
+++ b/h5/pages/appointment/appointment.vue
@@ -0,0 +1,678 @@
+<template>
+	<view class="container">
+		<view class="visitor-form">
+			<view class="cell">
+				<view class="title"><b>*</b>濮撳悕</view>
+				<view class="content">
+					<input class="input" @focus="showKeyboard = true" @blur="showKeyboard = false"
+						placeholder-style="color: #999999;" maxlength="30" v-model="visitorData.name" placeholder="璇疯緭鍏ユ偍鐨勭湡瀹炲鍚�" />
+				</view>
+			</view>
+			<view class="cell">
+				<view class="title"><b>*</b>鎵嬫満鍙�</view>
+				<view class="content">
+					<input type="number" @focus="showKeyboard = true" @blur="showKeyboard = false" class="input" maxlength="11"
+						placeholder-style="color: #999999;" v-model="visitorData.phone" placeholder="璇疯緭鍏ユ偍鐨勬墜鏈哄彿" />
+				</view>
+			</view>
+			<view class="cell">
+				<view class="title"><b>*</b>璇佷欢绫诲瀷</view>
+				<view class="content" @click="show = true">
+					<text
+						:style="{color: visitorData.idcardTypeName ? '#000000' : ''}">{{visitorData.idcardTypeName ? visitorData.idcardTypeName : '璇烽�夋嫨'}}</text>
+					<u-icon name="arrow-right" color="#CCCCCC" size="16" class="ml6"></u-icon>
+				</view>
+			</view>
+			<view class="cell">
+				<view class="title">璇佷欢鍙风爜</view>
+				<view class="content">
+					<input class="input" maxlength="18" @focus="showKeyboard = true" @blur="showKeyboard = false"
+						placeholder-style="color: #999999;" v-model="visitorData.idcardNo" placeholder="璇疯緭鍏ユ偍鐨勮瘉浠跺彿鐮�" />
+				</view>
+			</view>
+			<view class="empty"></view>
+			<view class="cell">
+				<view class="title"><b>*</b>鍏徃鍚嶇О</view>
+				<view class="content">
+					<input class="input" maxlength="50" @focus="showKeyboard = true" @blur="showKeyboard = false"
+						placeholder-style="color: #999999;" v-model="visitorData.companyName" placeholder="璇疯緭鍏ユ偍鐨勫叕鍙稿悕绉�" />
+				</view>
+			</view>	
+			<view class="cell">
+				<view class="title1">
+					<text class="title1_a"><b>*</b>浜鸿劯鐓х墖</text>
+					<text class="title1_b">1銆佽鎻愪緵浜斿畼娓呮櫚锛屼汉鑴稿眳涓殑姝i潰浜鸿劯鍏嶅啝鐓х墖锛�</text>
+					<text class="title1_b">2銆佺収鐗囨棤閫嗗厜銆佹棤PS銆佹棤杩囧害缇庨澶勭悊</text>
+				</view>
+				<view class="content">
+					<view class="content_uplaod" @click="upload('faceImg')" v-if="!visitorData.faceImgUrl">
+						<u-icon name="plus" color="rgb(153, 153, 153)" size="20"></u-icon>
+					</view>
+					<view class="content_uplaod" @click="upload('faceImg')" v-else>
+						<image :src="visitorData.faceImgUrl" mode="widthFix"></image>
+					</view>
+				</view>
+			</view>
+			<view style="height: 20rpx; background-color: #F7F7F7;"></view>
+			<view class="cell">
+				<view class="title"><b>*</b>琚浜�</view>
+				<view class="content" @click="selName">
+					<text
+						:style="{ color: form1.receptMemberName ? '#000000' : '' }">{{form1.receptMemberName ? form1.receptMemberName : "璇烽�夋嫨"}}</text>
+					<u-icon name="arrow-right" color="#CCCCCC" size="16" class="ml6"></u-icon>
+				</view>
+			</view>
+			<view class="cell">
+				<view class="title"><b>*</b>鍏ュ洯鏃堕棿</view>
+				<view class="content" @click="show4 = true">
+					<text
+						:style="{color: form1.starttime ? '#000000' : ''}">{{form1.starttime ? form1.starttime : '璇烽�夋嫨'}}</text>
+					<u-icon name="arrow-right" color="#CCCCCC" size="16" class="ml6"></u-icon>
+				</view>
+			</view>
+			<view class="cell">
+				<view class="title"><b>*</b>绂诲洯鏃堕棿</view>
+				<view class="content" @click="openLC">
+					<text
+						:style="{color: form1.endtime ? '#000000' : ''}">{{form1.endtime ? form1.endtime : '璇烽�夋嫨'}}</text>
+					<u-icon name="arrow-right" color="#CCCCCC" size="16" class="ml6"></u-icon>
+				</view>
+			</view>
+			<view class="cell">
+				<view class="title"><b>*</b>鎷滆浜嬬敱</view>
+				<view class="content" @click="showReason = true">
+					<text
+						:style="{color: form1.reason ? '#000000' : ''}">{{form1.reason ? form1.reason : '璇烽�夋嫨'}}</text>
+					<u-icon name="arrow-right" color="#CCCCCC" size="16" class="ml6"></u-icon>
+				</view>
+			</view>
+			<view class="cell" v-if="form1.type == 1">
+				<view class="title">鏂藉伐鍐呭</view>
+				<view class="content">
+					<input class="input" @focus="showKeyboard = true" @blur="showKeyboard = false"
+						placeholder-style="color: #999999;" maxlength="30" v-model="form1.constructionReason" placeholder="璇疯緭鍏ユ柦宸ュ唴瀹�" />
+				</view>
+			</view>
+			<view class="cell">
+				<view class="title">闅忚杞﹁締</view>
+				<view class="content" @click="openInput(1)">
+					<text :style="{color: form1.carNos ? '#000000' : ''}">{{form1.carNos ? form1.carNos : '璇疯緭鍏ヨ溅鐗屽彿鐮�'}}</text>
+				</view>
+			</view>
+			<!-- <view class="cell">
+				<view class="title">鍋ュ悍璇�<b v-if="visit === '1'">*</b></view>
+				<view class="content">
+					<view class="content_uplaod" @click="upload('imgurl')" v-if="!visitorData.imgurlUrl">
+						<u-icon name="plus" color="rgb(153, 153, 153)" size="28"></u-icon>
+					</view>
+					<view class="content_uplaod" @click="upload('imgurl')" v-else>
+						<image :src="visitorData.imgurlUrl" mode="widthFix"></image>
+					</view>
+				</view>
+			</view> -->
+		</view>
+		<view style="width: 100%; height: 110rpx;" v-if="!showKeyboard"></view>
+		<view v-if="!showKeyboard" class="footer-box">
+			<view class="submit-button" @click="submit">涓嬩竴姝�</view>
+		</view>
+		<!-- <tly-picture-cut ref="tlyPictureCut" :pictureSrc="photoSrc" @createImg="uploadImg"></tly-picture-cut> -->
+		<u-picker :show="show" :columns="columns" keyName="name" @cancel="show = false" @confirm="confirm"></u-picker>
+		<qf-image-cropper ref="cropper" :width="280" :height="280" :radius="0" fileType="jpg"
+			@crop="uploadImg"></qf-image-cropper>
+		<keyboardInput ref="keyboard" @export="setPlate" @close="closeInput" />
+		<!-- 鍏ュ洯鏃堕棿 -->
+		<u-datetime-picker :show="show4" :minDate="new Date().getTime()" :formatter="formatter" mode="datetime"
+			@cancel="show4 = false" @confirm="setstarttime"></u-datetime-picker>
+		<!-- 绂诲洯鏃堕棿  -->
+		<u-datetime-picker v-if="form1.starttime" :show="show5" :formatter="formatter"
+			:minDate="formatTimeStamp(form1.starttime)" :maxDate="formatTimeStamp(form1.starttime.slice(0,10) + ' 23:59')"
+			mode="datetime" @cancel="show5 = false" @confirm="setendtime"></u-datetime-picker>
+		<u-picker keyName="title" :show="showReason" :columns="VisitReason" @confirm="selectedReason"
+			@cancel="showReason = false"></u-picker>
+	</view>
+</template>
+
+<script>
+	import tlyPictureCut from "@/components/tly-picture-cut/tlyPictureCut.vue";
+	import keyboardInput from "@/components/keyboard-input/keyboard-input.vue"
+	import QfImageCropper from '@/uni_modules/qf-image-cropper/components/qf-image-cropper/qf-image-cropper.vue';
+	import {
+		mapState
+	} from 'vuex'
+	import {
+		uploadAvatar
+	} from "@/utils/config"
+	import {
+		getSystemDictData,
+		visitorSub,
+		getVisitedVisitReason,
+		createFk
+	} from '@/api'
+	export default {
+		data() {
+			return {
+				photoSrc: "",
+				inputType: '',
+				show: false,
+				showKeyboard: false,
+				visit: '',
+				type: '',
+				show4: false,
+				show5: false,
+				showReason: false,
+				personnel: [],
+				VisitReason: [],
+				columns: [
+					[{
+						name: '韬唤璇�',
+						id: 0
+					}, {
+						name: '娓境璇佷欢',
+						id: 1
+					}, {
+						name: '鎶ょ収',
+						id: 2
+					}]
+				],
+				fileList: [],
+				visitorData: {
+					userAnswerId: '',
+					name: '',
+					phone: '',
+					idcardType: 0,
+					idcardTypeName: '韬唤璇�',
+					idcardNo: '',
+					faceImg: '',
+					faceImgUrl: '',
+					imgurl: '',
+					imgurlUrl: '',
+					companyName: ''
+				},
+				form1: {
+					phone1: '',
+					receptMemberId: '',
+					receptMemberName: '',
+					starttime: '',
+					endtime: '',
+					doors: '',
+					doorSelectName: '',
+					reason: '',
+					carNos: '',
+					type: 0
+				},
+				withUserList: {
+					name: '',
+					phone: '',
+					idcardType: '',
+					idcardTypeName: '',
+					companyName: '',
+					idcardNo: '',
+					faceImg: '',
+					faceImgUrl: '',
+					imgurl: '',
+					imgurlUrl: ''
+				},
+			}
+		},
+		components: {
+			tlyPictureCut,
+			QfImageCropper,
+			keyboardInput
+		},
+
+		onLoad(option) {
+			this.getUser()
+			const visitorData = uni.getStorageSync('member')
+			if (visitorData.faceImg) {
+				visitorData.faceImgUrl = visitorData.prefixUrl + visitorData.faceImg
+			}
+			if (visitorData && visitorData.name) {
+				this.visitorData = visitorData
+			}
+			this.visitorData.companyName = visitorData.visitCompanyName
+			this.visitorData.idcardNo = visitorData.idcardDecode
+			if (this.visitorData.idcardType === 0) {
+				this.visitorData.idcardTypeName = '韬唤璇�'
+			} else if (this.visitorData.idcardType === 1) {
+				this.visitorData.idcardTypeName = '娓境璇佷欢'
+			} else if (this.visitorData.idcardType === 2) {
+				this.visitorData.idcardTypeName = '鎶ょ収'
+			}
+			if (this.visitorData.imgurl) {
+					this.visitorData.imgurlUrl = this.visitorData.prefixUrl + this.visitorData.imgurl
+				}
+			// if (this.member ) {
+			// 	this.visitorData.name = this.member.name
+			// 	this.visitorData.phone = this.member.phone
+			// 	this.visitorData.idcardNo = this.member.idcardDecode
+			// 	this.visitorData.companyName = this.member.visitCompanyName
+			// 	this.visitorData.faceImg = this.member.faceImg
+			// 	if (this.member.faceImg) {
+			// 		this.visitorData.faceImgUrl = this.member.prefixUrl + this.member.faceImg
+			// 	}
+			// 	this.visitorData.imgurl = this.member.imgurl
+			// 	if (this.member.imgurl) {
+			// 		this.visitorData.imgurlUrl = this.member.prefixUrl + this.member.imgurl
+			// 	}
+			// 	this.visitorData.idcardType = this.member.idcardType
+			// 	if (this.member.idcardType === 0) {
+			// 		this.visitorData.idcardTypeName = '韬唤璇�'
+			// 	} else if (this.member.idcardType === 1) {
+			// 		this.visitorData.idcardTypeName = '娓境璇佷欢'
+			// 	} else if (this.member.idcardType === 2) {
+			// 		this.visitorData.idcardTypeName = '鎶ょ収'
+			// 	}
+			// }
+			this.visitorData.userAnswerId = option.answerId || ''
+			// this.getVisit()
+			// uni.$on('update', (data) => {
+			// 	this.uploadImg(data.tempFilePath)
+			// })
+		},
+		mounted() {
+			this.$eventBus.$on('svisitorAppSel', (option) => {
+				// this.$set(this.param, 'checkUserId', option.id)
+				// this.$set(this.param, 'applyCheckUserId', option.id)
+				// this.$set(this.param, 'checkorName', option.name)
+		
+				this.form1.receptMemberName = option.name
+				this.form1.receptMemberId = option.id
+				this.form1.receptMemberDepartment = option.companyName
+			})
+		},
+		methods: {
+			selectedReason(e) {
+				this.form1.reason = e.value[0].title
+				this.form1.type = e.value[0].constructionType
+				this.showReason = false
+			},
+			// 鏌ヨ鐢ㄦ埛
+			getUser() {
+				getVisitedVisitReason({}).then(res => {
+					this.VisitReason = [res.data || []]
+				})
+			},
+			setendtime(e) {
+				this.form1.endtime = uni.$u.timeFormat(e.value, 'yyyy-mm-dd hh:MM')
+				this.show5 = false
+			},
+			formatTimeStamp(date) {
+				return Date.parse(new Date(`${date}`)) || Date.parse(new Date(`${date.replace(/-/g, '/')}`))
+			},
+			openLC() {
+				if (!this.form1.starttime) return uni.showToast({
+					title: '璇峰厛閫夋嫨鍏ュ洯鏃堕棿',
+					icon: 'none'
+				})
+				this.show5 = true
+			},
+			setstarttime(e) {
+				this.form1.starttime = uni.$u.timeFormat(e.value, 'yyyy-mm-dd hh:MM')
+				this.maxTime = this.form1.starttime
+				this.show4 = false
+			},
+			formatter(type, value) {
+				if (type === 'year') {
+					return `${value}骞碻
+				}
+				if (type === 'month') {
+					return `${value}鏈坄
+				}
+				if (type === 'day') {
+					return `${value}鏃
+				}
+				if (type === 'hour') {
+					return `${value}鏃禶
+				}
+				if (type === 'minute') {
+					return `${value}鍒哷
+				}
+				return value
+			},
+			closeInput() {
+				this.$refs.keyboard.close()
+			},
+			setPlate(e) {
+				if (this.inputType === 1) {
+					this.form1.carNos = e
+				} else if (this.inputType === 2) {
+					this.withUserList.carNos = e
+				}
+				this.$forceUpdate()
+				this.closeInput()
+			},
+			openInput(type) {
+				this.inputType = type
+				this.$refs.keyboard.open()
+			},
+			selName() {
+				uni.navigateTo({
+					url: '/pages/visitorApplication/memberSel'
+				})
+			},
+			submit() {
+				const {
+					visitorData
+				} = this
+				if (!this.visitorData.name) return uni.showToast({
+					title: '濮撳悕涓嶈兘涓虹┖',
+					icon: 'none'
+				})
+				if (!this.visitorData.phone) return uni.showToast({
+					title: '鎵嬫満鍙蜂笉鑳戒负绌�',
+					icon: 'none'
+				})
+				const regExp = /^1[3456789]\d{9}$/;
+				if (!regExp.test(this.visitorData.phone)) return uni.showToast({
+					title: '鎵嬫満鍙锋牸寮忛敊璇�',
+					icon: 'none'
+				})
+				if (!String(this.visitorData.idcardType)) return uni.showToast({
+					title: '璇佷欢绫诲瀷涓嶈兘涓虹┖',
+					icon: 'none'
+				})
+				// if (!this.visitorData.idcardNo) return uni.showToast({
+				// 	title: '璇佷欢鍙风爜涓嶈兘涓虹┖',
+				// 	icon: 'none'
+				// })
+				if (this.visitorData.idcardType === 0 && this.visitorData.idcardNo) {
+					const regex = /^[1-9]\d{5}(19|20)\d{2}(0[1-9]|1[0-2])(0[1-9]|[1-2]\d|3[0-1])\d{3}[\dxX]$/;
+					if (!regex.test(this.visitorData.idcardNo)) return uni.showToast({
+						title: '璇佷欢鍙风爜鏍煎紡閿欒',
+						icon: 'none'
+					})
+				}
+				if (!this.visitorData.companyName) return uni.showToast({
+					title: '鍏徃涓嶈兘涓虹┖',
+					icon: 'none'
+				})
+				if (!this.visitorData.faceImg) return uni.showToast({
+					title: '浜鸿劯鐓х墖涓嶈兘涓虹┖',
+					icon: 'none'
+				})
+				// if (this.visit === '1') {
+				// 	if (!this.visitorData.imgurl) return uni.showToast({
+				// 		title: '鍋ュ悍璇佷笉鑳戒负绌�',
+				// 		icon: 'none'
+				// 	})
+				// }
+				if (!this.form1.receptMemberId) return uni.showToast({
+					title: '璇峰~鍐欐湁鏁堢殑璁块棶浜�',
+					icon: 'none'
+				})
+				if (!this.form1.starttime) return uni.showToast({
+					title: '鍏ュ洯鏃堕棿涓嶈兘涓虹┖',
+					icon: 'none'
+				})
+				if (!this.form1.endtime) return uni.showToast({
+					title: '绂诲洯鏃堕棿涓嶈兘涓虹┖',
+					icon: 'none'
+				})
+				if (!this.form1.doorSelectName && this.accessControl == 1) return uni.showToast({
+					title: '璁块棶闂ㄧ涓嶈兘涓虹┖',
+					icon: 'none'
+				})
+				if (!this.form1.reason) return uni.showToast({
+					title: '鎷滆浜嬬敱涓嶈兘涓虹┖',
+					icon: 'none'
+				})
+				let data = JSON.parse(JSON.stringify(this.form1))
+				data.starttime = data.starttime + ':00'
+				data.endtime = data.endtime + ':00'
+				createFk({
+					...this.visitorData,
+					...data,
+					withUserList: this.personnel
+				}).then(res => {
+					if (res.code === 200) {
+						uni.navigateTo({
+							url: `/pages/appointmentDetails/appointmentDetails?id=${res.data}`
+						})
+					}
+				})
+				// uni.setStorageSync('visitorData', this.visitorData)
+				// uni.navigateTo({
+				// 	url: `/pages/visitorApplication/visitorApplication?data=${JSON.stringify(this.visitorData)}`
+				// });
+			},
+			getVisit() {
+				// 鏄惁闇�瑕� 鍋ュ悍璇�
+				getSystemDictData({
+					dictCode: 'SYSTEM',
+					label: 'HEALTH_CARD'
+				}).then(res => {
+					if (res.code === 200) {
+						this.visit = res.data.code
+					}
+				})
+			},
+			uploadImg(file) {
+				var that = this
+				that.$refs.cropper.close()
+				uni.showLoading({
+					title: '涓婁紶涓�',
+					mask: true
+				});
+				uni.uploadFile({
+					url: uploadAvatar,
+					filePath: file.tempFilePath,
+					name: 'file',
+					formData: {
+						folderCode: 'MEMBER_IMG',
+						isFace: 0
+					},
+					success: (uploadFileRes) => {
+						let res = JSON.parse(uploadFileRes.data)
+						if(res.code !== 200){
+							return this.showToast(res.message)
+						}
+						this.visitorData.faceImg = res.data.halfPath
+						this.visitorData.faceImgUrl = res.data.prefixPath + res.data.folder + res.data.halfPath
+					},
+					fail: (err) => {
+						// this.showToast(err)
+					},
+					complete() {
+						uni.hideLoading();
+					}
+				});
+			},
+			deleUser(i) {
+				this.personnel.splice(i, 1)
+			},
+			upload(type) {
+				var that = this
+				that.type = type
+				if (type === 'faceImg') {
+					that.$refs.cropper.chooseImage()
+					return
+				}
+				uni.chooseImage({
+					count: 1,
+					success: (chooseImageRes) => {
+						// if (type === 'faceImg') {
+						// 	that.photoSrc = chooseImageRes.tempFilePaths[0];
+						// 	that.$refs.tlyPictureCut.showPop();
+						// }
+						if (type === 'imgurl') {
+							uni.showLoading({
+								title: '涓婁紶涓�',
+								mask: true
+							});
+							uni.uploadFile({
+								url: uploadAvatar,
+								filePath: chooseImageRes.tempFilePaths[0],
+								name: 'file',
+								formData: {
+									folderCode: 'MEMBER_IMG'
+								},
+								timeout: 60000,
+								success: (uploadFileRes) => {
+									let res = JSON.parse(uploadFileRes.data)
+									that.visitorData.imgurl = res.data.halfPath
+									that.visitorData.imgurlUrl = res.data.prefixPath + res.data.folder + res.data.halfPath
+								},
+								complete() {
+									uni.hideLoading();
+								}
+							});
+						}
+					},
+					fail(err) {
+						alert('api鎶ラ敊')
+					}
+				});
+			},
+			confirm(e) {
+				this.visitorData.idcardType = e.value[0].id
+				this.visitorData.idcardTypeName = e.value[0].name
+				this.show = false
+			}
+		}
+	}
+</script>
+
+<style lang="scss">
+	page {
+		background-color: #F7F7F7 !important;
+	}
+
+	.u-upload__button {
+		margin: 0 !important;
+	}
+
+	.content_uplaod {
+		width: 120rpx;
+		height: 120rpx;
+		background: #F7F7F7;
+		border-radius: 8rpx;
+		border: 2rpx solid #E5E5E5;
+		display: flex;
+		align-items: center;
+		justify-content: center;
+		overflow: hidden;
+	}
+
+	.content_uplaod image {
+		width: 100%;
+		height: 100%;
+	}
+
+	.empty {
+		width: 750rpx;
+		height: 20rpx;
+		margin: 0 -30rpx;
+		background-color: #f7f7f7;
+		;
+	}
+
+	.title {
+		font-size: 30rpx;
+		font-weight: 400;
+		color: #222222;
+		display: flex;
+		align-items: center;
+	}
+
+	.title b {
+		color: #E42D2D;
+		margin-right: 4rpx;
+	}
+
+	.title1 {
+		display: flex;
+		flex-direction: column;
+
+		.title1_a {
+			font-size: 30rpx !important;
+			font-weight: 400;
+			color: #222222;
+			display: flex;
+			align-items: center;
+			margin-bottom: 20rpx;
+
+			b {
+				color: #E42D2D;
+				margin-right: 4rpx;
+
+			}
+		}
+
+		.title1_b {
+			font-size: 24rpx !important;
+			font-weight: 400;
+			color: #999999;
+		}
+	}
+
+	.add-other {
+		border: 1rpx solid #4d99a8;
+		color: #4d99a8;
+		font-size: 11rpx;
+		padding: 0 12rpx;
+		height: 32rpx;
+		line-height: 32rpx;
+		width: 120rpx;
+		text-align: center;
+		border-radius: 24rpx;
+		margin: 20rpx auto;
+	}
+
+	.footer-box {
+		width: 100%;
+		position: fixed;
+		bottom: 30rpx;
+		height: 80rpx;
+		display: flex;
+		justify-content: center;
+		align-items: center;
+	}
+
+	.submit-button {
+		width: calc(100% - 60rpx);
+		height: 88rpx;
+		line-height: 88rpx;
+		background: #4d99a8;
+		border-radius: 4rpx;
+		color: #fff;
+		border-radius: 44rpx;
+		font-size: 32rpx;
+		display: flex;
+		align-items: center;
+		justify-content: center;
+	}
+</style>
+
+<style lang="scss" scoped>
+	.popup-content {
+		padding: 20rpx;
+		height: 100%;
+		overflow: hidden;
+		display: flex;
+		flex-flow: column;
+
+		.input {
+			border: 1rpx solid #ccc;
+			border-radius: 4rpx;
+			padding: 4rpx 12rpx;
+			font-size: 28rpx;
+			font-weight: 400;
+			color: #333333;
+		}
+
+		.respondent-item {
+			padding: 10rpx;
+			border-bottom: 1rpx solid #eee;
+			cursor: pointer;
+
+			&:hover {
+				background-color: #eee;
+			}
+		}
+
+		.van-list {
+			flex: 1;
+			overflow: auto;
+		}
+	}
+</style>
\ No newline at end of file
diff --git a/h5/pages/index/index.vue b/h5/pages/index/index.vue
index 6e9fb01..7300f5f 100644
--- a/h5/pages/index/index.vue
+++ b/h5/pages/index/index.vue
@@ -58,6 +58,7 @@
 			jump(type) {
 				switch (type) {
 					case 1:
+						console.log('1')
 						uni.navigateTo({
 							url: '/pages/notice/notice'
 						})
diff --git a/h5/pages/loading/loading.vue b/h5/pages/loading/loading.vue
new file mode 100644
index 0000000..335064a
--- /dev/null
+++ b/h5/pages/loading/loading.vue
@@ -0,0 +1,83 @@
+<template>
+	<view class="box">
+		<!-- 鍔犺浇涓� -->
+		<view class="loading" v-if="loading === 'loading'">
+			<image src="/static/loading.gif" mode="widthFix"></image>
+			<text>韬唤鏍¢獙涓紝璇风◢鍚巭</text>
+		</view>
+		<!-- 澶辫触 -->
+		<view class="error" v-if="loading === 'error'">
+			<image src="/static/ic_fail.png" mode="widthFix"></image>
+			<text class="title">鎺堟潈澶辫触</text>
+			<text class="desc">鎮ㄧ殑璐﹀彿鏆傛湭缁戝畾绯荤粺锛岃鑱旂郴绠$悊鍛�</text>
+			<button>閲嶆柊楠岃瘉</button>
+		</view>
+	</view>
+</template>
+
+<script>
+	export default {
+		data() {
+			return {
+				loading: 'error'
+			};
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+	.box {
+		width: 100%;
+		.error {
+			width: 100%;
+			display: flex;
+			align-items: center;
+			flex-direction: column;
+			image {
+				width: 180rpx;
+				height: 180rpx;
+				margin-top: 160rpx;
+			}
+			.title {
+				font-weight: 500;
+				font-size: 36rpx;
+				color: #333333;
+				margin-top: 32rpx;
+			}
+			.desc {
+				font-weight: 400;
+				font-size: 26rpx;
+				color: #999999;
+				margin-top: 20rpx;
+			}
+			button {
+				width: 224rpx;
+				height: 76rpx;
+				font-weight: 400;
+				font-size: 28rpx;
+				color: #279BAA;
+				border-radius: 38rpx;
+				border: 1rpx solid #279BAA;
+				margin-top: 68rpx;
+				background-color: #ffffff;
+			}
+		}
+		.loading {
+			width: 100%;
+			display: flex;
+			align-items: center;
+			flex-direction: column;
+			image {
+				width: 200rpx;
+				height: 200rpx;
+				margin-top: 202rpx;
+			}
+			text {
+				font-weight: 500;
+				font-size: 36rpx;
+				color: #333333;
+				margin-top: 40rpx;
+			}
+		}
+	}
+</style>
diff --git a/h5/pages/login/login.vue b/h5/pages/login/login.vue
index d198595..4a2ca65 100644
--- a/h5/pages/login/login.vue
+++ b/h5/pages/login/login.vue
@@ -56,27 +56,27 @@
 			// https://atwl.ahzyssl.com/zhyq_h5/#/pages/login/login?type=2&yw=5&ywid=b3db2072-a453-470d-8c0d-ba3b8b256530
 		},
 		onShow() {
-			var that = this
-			let url = 'https://atwl.ahzyssl.com/zhyq_h5/#/'
-			let code = ''
-			if (window.location.href.indexOf('code=') !== -1 || this.code) {
-				// if(window.location.href.indexOf('wdata') !== -1){
-				// 	uni.redirectTo({
-				// 		url: '/pages/wdata/home?code=' + 
-				// 	})
-				// }
-				const ywinfo = uni.getStorageSync('ywinfo') || {}
-				if (ywinfo.ywid && (ywinfo.type || ywinfo.type == 0)) {
-					this.userAuth(ywinfo.type)
-				}
-			} else {
-				// let url = window.location.href
-				const appID = 'wx173e6caf5abc718a'
-				let uri = encodeURIComponent(url)
-				let authURL =
-					`https://open.weixin.qq.com/connect/oauth2/authorize?appid=${appID}&redirect_uri=${uri}&response_type=code&scope=snsapi_base#wechat_redirect`
-				window.location.href = authURL
-			}
+			// var that = this
+			// let url = 'https://atwl.ahzyssl.com/zhyq_h5/#/'
+			// let code = ''
+			// if (window.location.href.indexOf('code=') !== -1 || this.code) {
+			// 	// if(window.location.href.indexOf('wdata') !== -1){
+			// 	// 	uni.redirectTo({
+			// 	// 		url: '/pages/wdata/home?code=' + 
+			// 	// 	})
+			// 	// }
+			// 	const ywinfo = uni.getStorageSync('ywinfo') || {}
+			// 	if (ywinfo.ywid && (ywinfo.type || ywinfo.type == 0)) {
+			// 		this.userAuth(ywinfo.type)
+			// 	}
+			// } else {
+			// 	// let url = window.location.href
+			// 	const appID = 'wx173e6caf5abc718a'
+			// 	let uri = encodeURIComponent(url)
+			// 	let authURL =
+			// 		`https://open.weixin.qq.com/connect/oauth2/authorize?appid=${appID}&redirect_uri=${uri}&response_type=code&scope=snsapi_base#wechat_redirect`
+			// 	window.location.href = authURL
+			// }
 
 		},
 		methods: {
diff --git a/h5/static/ic_fail.png b/h5/static/ic_fail.png
new file mode 100644
index 0000000..c54111b
--- /dev/null
+++ b/h5/static/ic_fail.png
Binary files differ
diff --git a/h5/static/loading.gif b/h5/static/loading.gif
new file mode 100644
index 0000000..6ea9db1
--- /dev/null
+++ b/h5/static/loading.gif
Binary files differ
diff --git a/h5/utils/config.js b/h5/utils/config.js
index 05ff784..70b5a4d 100644
--- a/h5/utils/config.js
+++ b/h5/utils/config.js
@@ -1,8 +1,8 @@
 
 // export const baseUrl = 'zhyq_interface/'
-// export const baseUrl = 'http://192.168.0.173/gateway_interface/'
+export const baseUrl = 'http://192.168.1.54:10010/'
 // export const baseUrl = 'http://10.50.250.253:8088/gateway_interface/'
-export const baseUrl = 'https://atwl.ahzyssl.com/zhyq_interface/' 
+// export const baseUrl = 'https://atwl.ahzyssl.com/zhyq_interface/' 
 
 export const app_url = 'https://atwl.ahzyssl.com/zhyq_h5/#/'
 
diff --git a/server/system_service/src/main/java/com/doumee/biz/system/impl/SystemMenuBizImpl.java b/server/system_service/src/main/java/com/doumee/biz/system/impl/SystemMenuBizImpl.java
index edf8379..9cb6752 100644
--- a/server/system_service/src/main/java/com/doumee/biz/system/impl/SystemMenuBizImpl.java
+++ b/server/system_service/src/main/java/com/doumee/biz/system/impl/SystemMenuBizImpl.java
@@ -139,6 +139,7 @@
                 nodeVO.setType(menu.getType());
                 nodeVO.setLinkType(menu.getLinkType());
                 nodeVO.setIcon(menu.getIcon());
+//                nodeVO.setHomeUrl("/index");//榛樿宸ヤ綔鍙�
                 nodeVO.setChildren(new ArrayList<>());
                 rootNodes.add(nodeVO);
             }
@@ -146,10 +147,29 @@
         menus.removeIf(menu -> menu.getParentId() == null);
         for (SystemMenuNodeVO child : rootNodes) {
             this.fillChildren(child, menus);
+            SystemMenuNodeVO homeMenus = getHomeUrlByChild(child);
+            if(homeMenus!=null && homeMenus.getUrl() != null){
+                    child.setHomeUrl(homeMenus.getUrl());
+            }
         }
         return rootNodes;
     }
 
+    private SystemMenuNodeVO getHomeUrlByChild( SystemMenuNodeVO  child) {
+        if(child.getChildren()==null || child.getChildren().size() ==0){
+            return null;
+        }
+        for(SystemMenuNodeVO tt : child.getChildren()){
+            if(tt.getChildren()==null || tt.getChildren().size() ==0){
+                return tt;
+            }else{
+                SystemMenuNodeVO ttt = getHomeUrlByChild(tt);
+                return ttt;
+            }
+        }
+        return null;
+    }
+
     @Override
     public void deleteById(Integer id) {
         List<Integer> ids = systemMenuService.findChildren(id);
diff --git a/server/system_service/src/main/java/com/doumee/dao/system/vo/SystemMenuNodeVO.java b/server/system_service/src/main/java/com/doumee/dao/system/vo/SystemMenuNodeVO.java
index 9532faf..6eeb48a 100644
--- a/server/system_service/src/main/java/com/doumee/dao/system/vo/SystemMenuNodeVO.java
+++ b/server/system_service/src/main/java/com/doumee/dao/system/vo/SystemMenuNodeVO.java
@@ -33,6 +33,8 @@
 
     @ApiModelProperty(value = "鑿滃崟鍦板潃")
     private String url;
+    @ApiModelProperty(value = "绗竴涓粯璁ら〉鍦板潃")
+    private String homeUrl;
 
     @ApiModelProperty(value = "瀛愯彍鍗�")
     private List<SystemMenuNodeVO> children;
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/Category.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/Category.java
index f007330..1710745 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/Category.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/Category.java
@@ -93,6 +93,7 @@
     @ExcelColumn(name="缁勫悎鍚嶇О",index = 3,width = 20)
     private String groupName;
     @ApiModelProperty(value = "瀹屾暣鍥剧墖鍦板潃 ")
+    @TableField(exist = false)
     private String imgurlFull;
 
     @ApiModelProperty(value = "瀛愰泦鍒嗙被")

--
Gitblit v1.9.3