BUG 27200
This commit is contained in:
		
							
								
								
									
										32
									
								
								bin/serve.js
									
									
									
									
									
								
							
							
						
						
									
										32
									
								
								bin/serve.js
									
									
									
									
									
								
							| @@ -68,10 +68,9 @@ const start = () => { | ||||
|       navigationStyle: "custom" | ||||
|     } | ||||
|   } | ||||
|   findApp('src/apps', file => { | ||||
|     if (/.+\\App[^\\]+\\[^\\]+\.vue/g.test(file)) { | ||||
|   findApp('src/components/pages', file => { | ||||
|     if (/.+\\[^\\]+\\[^\\]+\.vue/g.test(file)) { | ||||
|       let app = { | ||||
|         name: file.replace(/.*\\([^\\]+).vue/g, '$1'), | ||||
|         path: file.replace(/^src\\(.*).vue/g, '$1').replace(/\\/g, '/') | ||||
|       } | ||||
|       let vue = fs.readFileSync(file).toString() | ||||
| @@ -83,7 +82,7 @@ const start = () => { | ||||
|       json.pages.push(app) | ||||
|     } | ||||
|   }).then(() => { | ||||
|     return findApp('src/saas', file => { | ||||
|     return findApp('src/apps', file => { | ||||
|       if (/.+\\App[^\\]+\\[^\\]+\.vue/g.test(file)) { | ||||
|         let app = { | ||||
|           name: file.replace(/.*\\([^\\]+).vue/g, '$1'), | ||||
| @@ -97,12 +96,29 @@ const start = () => { | ||||
|         } | ||||
|         json.pages.push(app) | ||||
|       } | ||||
|     }) | ||||
|   }).then(() => { | ||||
|     fsExtra.outputJson('src/pages.json', json, () => { | ||||
|       chalkTag.done('生成pages.json') | ||||
|     }).then(() => { | ||||
|       return findApp('src/saas', file => { | ||||
|         if (/.+\\App[^\\]+\\[^\\]+\.vue/g.test(file)) { | ||||
|           let app = { | ||||
|             name: file.replace(/.*\\([^\\]+).vue/g, '$1'), | ||||
|             path: file.replace(/^src\\(.*).vue/g, '$1').replace(/\\/g, '/') | ||||
|           } | ||||
|           let vue = fs.readFileSync(file).toString() | ||||
|           if (/appName/.test(vue)) { | ||||
|             let appName = vue.replace(/[\s\S]*(appName:.+),[\s\S]*/gm, '$1'), | ||||
|                 title = appName.replace(/(appName:|["'])/g, '') | ||||
|             app.style = {navigationBarTitleText: title} | ||||
|           } | ||||
|           json.pages.push(app) | ||||
|         } | ||||
|       }) | ||||
|     }).then(() => { | ||||
|       fsExtra.outputJson('src/pages.json', json, () => { | ||||
|         chalkTag.done('生成pages.json') | ||||
|       }) | ||||
|     }) | ||||
|   }) | ||||
|  | ||||
| } | ||||
|  | ||||
| start(); | ||||
|   | ||||
| @@ -24,7 +24,8 @@ export default { | ||||
|   data() { | ||||
|     return { | ||||
|       configList: { | ||||
|         resident: {url: "/apps/AppComponent/selectResident", label: "name"} | ||||
|         resident: {url: "/components/pages/selectResident", label: "name"}, | ||||
|         gird: {url: "/components/pages/selectGird", label: "girdName"} | ||||
|       }, | ||||
|     } | ||||
|   }, | ||||
| @@ -43,6 +44,7 @@ export default { | ||||
|           selected = this.value || this.selected?.map(e => e[nodeKey]) | ||||
|       uni.$once('pagePicker', data => { | ||||
|         this.$emit("update:selected", data) | ||||
|         this.$emit("select", data) | ||||
|         this.$emit("change", data.map(e => e[nodeKey])) | ||||
|       }) | ||||
|       uni.navigateTo({url: `${config.url}?selected=${selected?.toString()}`}) | ||||
|   | ||||
							
								
								
									
										
											BIN
										
									
								
								src/components/pages/img/gird--select-icon.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								src/components/pages/img/gird--select-icon.png
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| After Width: | Height: | Size: 1.2 KiB | 
							
								
								
									
										
											BIN
										
									
								
								src/components/pages/img/user-img.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								src/components/pages/img/user-img.png
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| After Width: | Height: | Size: 1.4 KiB | 
							
								
								
									
										
											BIN
										
									
								
								src/components/pages/img/xz.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								src/components/pages/img/xz.png
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| After Width: | Height: | Size: 1.5 KiB | 
							
								
								
									
										
											BIN
										
									
								
								src/components/pages/img/xzh.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								src/components/pages/img/xzh.png
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| After Width: | Height: | Size: 1.7 KiB | 
							
								
								
									
										338
									
								
								src/components/pages/selectGird.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										338
									
								
								src/components/pages/selectGird.vue
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,338 @@ | ||||
| <template> | ||||
|   <div class="selectGird"> | ||||
|     <AiTopFixed> | ||||
|       <u-search placeholder="搜索" v-model="name" :show-action="false"/> | ||||
|       <div class="hint"> | ||||
|         <span v-for="(item, index) in selectList" :key="index"><span v-if="index" style="margin:0 4px;">/</span><span | ||||
|             style="color:#3F8DF5" @click="girdNameClick(item, index)">{{ item.girdName }}</span></span> | ||||
|       </div> | ||||
|     </AiTopFixed> | ||||
|     <div class="header-middle"> | ||||
|       <div class="showTypes"> | ||||
|         <div v-if="options.length > 0"> | ||||
|           <div class="cards" v-for="(item, index) in options" :key="index" @click="itemClick(item)"> | ||||
|             <div class="imges"> | ||||
|               <img src="./img/xzh.png" alt="" class="imgselect" v-if="item.isChecked" | ||||
|                    @click.stop="girdClick(item, index)"/> | ||||
|               <img src="./img/xz.png" alt="" class="imgselect" v-else | ||||
|                    @click.stop="girdClick(item, index)"/> | ||||
|               <img src="./img/gird--select-icon.png" alt="" class="avatras"/> | ||||
|             </div> | ||||
|             <div class="rightes"> | ||||
|               <div class="applicationNames">{{ item.girdName }}</div> | ||||
|               <u-icon v-if="item.girdLevel != 2" name="arrow-right" color="#ddd"/> | ||||
|             </div> | ||||
|           </div> | ||||
|         </div> | ||||
|         <AiEmpty description="暂无数据" class="emptyWrap" v-else/> | ||||
|       </div> | ||||
|     </div> | ||||
|     <div class="pad-b118"/> | ||||
|     <div class="footer"> | ||||
|       <div class="btn" @click="confirm">确定选择</div> | ||||
|     </div> | ||||
|   </div> | ||||
| </template> | ||||
|  | ||||
| <script> | ||||
| export default { | ||||
|   name: 'selectGird', | ||||
|   appName: "网格选择", | ||||
|   data() { | ||||
|     return { | ||||
|       current: 1, | ||||
|       name: '', | ||||
|       list: [], | ||||
|       selected: [], | ||||
|       SelectGird: {}, | ||||
|       allData: null, | ||||
|       treeList: [], | ||||
|       selectList: [], | ||||
|       userGird: {}, | ||||
|       userList: [], | ||||
|       girdLevel: 0, | ||||
|       parentGirdId: '', | ||||
|     } | ||||
|   }, | ||||
|   computed: { | ||||
|     options() { | ||||
|       return this.treeList.filter(e => e.girdName?.indexOf(this.name) > -1 || !this.name) || [] | ||||
|     } | ||||
|   }, | ||||
|   onLoad() { | ||||
|     this.isGirdUser() | ||||
|   }, | ||||
|   methods: { | ||||
|     isGirdUser() { | ||||
|       this.$http.post('/app/appgirdmemberinfo/checkLogOnUser').then((res) => { | ||||
|         if (res.code == 0) { | ||||
|           if (res.data.checkType) { | ||||
|             this.userGird = res.data | ||||
|             this.getTree() | ||||
|           } else { | ||||
|             this.$u.toast('当前人员不是网格员或网格管理员') | ||||
|           } | ||||
|         } | ||||
|       }) | ||||
|     }, | ||||
|     getTree() { | ||||
|       this.selectList = [] | ||||
|       this.$http.post(`/app/appgirdinfo/queryAppGirdInfoByGirdLevel?girdLevel=${this.girdLevel}&girdMemberId=${this.userGird.girdMemberId}&parentGirdId=${this.parentGirdId}`).then((res) => { | ||||
|         if (res?.data) { | ||||
|           this.allData = res.data | ||||
|           this.treeInit() | ||||
|         } | ||||
|       }) | ||||
|     }, | ||||
|  | ||||
|     treeInit() { | ||||
|       this.treeList = this.allData | ||||
|       this.treeList.map((item) => { | ||||
|         item.isChecked = false | ||||
|       }) | ||||
|       let obj = { | ||||
|         girdName: '可选范围', | ||||
|         id: '', | ||||
|         girdLevel: '' | ||||
|       } | ||||
|       this.selectList.push(obj) | ||||
|     }, | ||||
|  | ||||
|     itemClick(row) { | ||||
|       if (row.girdLevel == 2) return | ||||
|       const obj = { | ||||
|         girdName: row.girdName, | ||||
|         id: row.id, | ||||
|         girdLevel: row.girdLevel | ||||
|       }; | ||||
|       this.selectList.push(obj) | ||||
|       this.searckGird(row) | ||||
|     }, | ||||
|  | ||||
|     searckGird(row) { | ||||
|       if (row.girdLevel == 2) return | ||||
|       const girdLevel = Number(row.girdLevel) + 1; | ||||
|       this.$http.post(`/app/appgirdinfo/queryAppGirdInfoByGirdLevel?girdLevel=${girdLevel}&girdMemberId=${this.userGird.girdMemberId}&parentGirdId=${row.id}`).then((res) => { | ||||
|         if (res?.data) { | ||||
|           this.treeList = res.data | ||||
|         } | ||||
|       }) | ||||
|     }, | ||||
|  | ||||
|     girdNameClick(row, index) { | ||||
|       this.userList = [] | ||||
|       if (!index) { //第一级别 | ||||
|         this.selectList = [] | ||||
|         this.treeInit() | ||||
|       } else { | ||||
|         const list = []; | ||||
|         this.selectList.map((item, i) => { | ||||
|           if (i <= index) { | ||||
|             list.push(item) | ||||
|           } | ||||
|         }) | ||||
|         this.selectList = list | ||||
|         this.searckGird(row) | ||||
|       } | ||||
|     }, | ||||
|  | ||||
|  | ||||
|     girdClick(row, index) { | ||||
|       if (this.treeList[index].isChecked) {//取消 | ||||
|         this.treeList[index].isChecked = false | ||||
|         this.SelectGird = {} | ||||
|       } else { | ||||
|         this.treeList.map((item) => { | ||||
|           item.isChecked = false | ||||
|         }) | ||||
|         this.treeList[index].isChecked = true | ||||
|         this.SelectGird = row | ||||
|       } | ||||
|       this.$forceUpdate() | ||||
|     }, | ||||
|     confirm() { | ||||
|       if (this.SelectGird.id != null) { | ||||
|         uni.navigateBack({ | ||||
|           success: () => { | ||||
|             uni.$emit("pagePicker", [this.SelectGird]) | ||||
|           } | ||||
|         }) | ||||
|       } else { | ||||
|         return this.$u.toast('请选择网格') | ||||
|       } | ||||
|     }, | ||||
|   } | ||||
| } | ||||
| </script> | ||||
|  | ||||
| <style scoped lang="scss"> | ||||
| .selectGird { | ||||
|   height: 100%; | ||||
|   background: #fff; | ||||
|   padding-bottom: 140px; | ||||
|  | ||||
|   .hint { | ||||
|     padding-bottom: 28px; | ||||
|     line-height: 56px; | ||||
|     font-size: 30px; | ||||
|     font-weight: 500; | ||||
|     word-break: break-all; | ||||
|   } | ||||
|  | ||||
|   .header-middle { | ||||
|     .showTypes { | ||||
|       .empty-div { | ||||
|         height: 16px; | ||||
|         background: #f5f5f5; | ||||
|       } | ||||
|  | ||||
|       .cards { | ||||
|         display: flex; | ||||
|         align-items: center; | ||||
|         height: 120px; | ||||
|         line-height: 120px; | ||||
|         // background: pink; | ||||
|         padding: 0 0 0 32px; | ||||
|  | ||||
|         .imges { | ||||
|           display: flex; | ||||
|           align-items: center; | ||||
|           // width: 200px; | ||||
|           .imgselect { | ||||
|             width: 48px; | ||||
|             height: 48px; | ||||
|             vertical-align: middle; | ||||
|           } | ||||
|  | ||||
|           .avatras { | ||||
|             width: 74px; | ||||
|             height: 74px; | ||||
|             border-radius: 8px; | ||||
|             margin-left: 36px; | ||||
|           } | ||||
|         } | ||||
|  | ||||
|         img { | ||||
|           width: 74px; | ||||
|           height: 74px; | ||||
|           border-radius: 8px; | ||||
|         } | ||||
|  | ||||
|         .rightes { | ||||
|           width: calc(100% - 188px); | ||||
|           display: flex; | ||||
|           justify-content: space-between; | ||||
|           align-items: center; | ||||
|           margin-left: 32px; | ||||
|           border-bottom: 1px solid #e4e5e6; | ||||
|  | ||||
|           .applicationNames { | ||||
|             width: calc(100% - 56px); | ||||
|             font-size: 36px; | ||||
|             font-weight: 500; | ||||
|             color: #333333; | ||||
|             overflow: hidden; | ||||
|             text-overflow: ellipsis; | ||||
|             white-space: nowrap; | ||||
|           } | ||||
|         } | ||||
|       } | ||||
|     } | ||||
|  | ||||
|     .showUsers { | ||||
|       .cards { | ||||
|         display: flex; | ||||
|         align-items: center; | ||||
|         height: 120px; | ||||
|         line-height: 120px; | ||||
|         // background: pink; | ||||
|         padding: 0 0 0 32px; | ||||
|  | ||||
|         .imges { | ||||
|           display: flex; | ||||
|           align-items: center; | ||||
|           width: 200px; | ||||
|  | ||||
|           .imgselect { | ||||
|             width: 48px; | ||||
|             height: 48px; | ||||
|           } | ||||
|  | ||||
|           .avatras { | ||||
|             width: 74px; | ||||
|             height: 74px; | ||||
|             border-radius: 8px; | ||||
|             margin-left: 36px; | ||||
|           } | ||||
|         } | ||||
|  | ||||
|         .rights { | ||||
|           width: 100%; | ||||
|           display: flex; | ||||
|           justify-content: space-between; | ||||
|           align-items: center; | ||||
|           margin-left: 32px; | ||||
|           border-bottom: 1px solid #e4e5e6; | ||||
|           padding-right: 40px; | ||||
|  | ||||
|           .applicationNames { | ||||
|             font-size: 36px; | ||||
|             font-weight: 500; | ||||
|             color: #333333; | ||||
|           } | ||||
|  | ||||
|           .idNumbers { | ||||
|             color: #666; | ||||
|           } | ||||
|         } | ||||
|       } | ||||
|     } | ||||
|   } | ||||
|  | ||||
|   .subBtn { | ||||
|     position: fixed; | ||||
|     bottom: 0; | ||||
|     left: 0; | ||||
|     width: 100%; | ||||
|     height: 118px; | ||||
|     background: #f4f8fb; | ||||
|  | ||||
|     div { | ||||
|       width: 192px; | ||||
|       height: 80px; | ||||
|       line-height: 80px; | ||||
|       text-align: center; | ||||
|       background: #1365dd; | ||||
|       border-radius: 4px; | ||||
|       font-size: 32px; | ||||
|       color: #fff; | ||||
|       margin: 20px 34px 0 0; | ||||
|       float: right; | ||||
|     } | ||||
|   } | ||||
|  | ||||
|   .footer { | ||||
|     width: 100%; | ||||
|     height: 118px; | ||||
|     background: #F4F8FB; | ||||
|     position: fixed; | ||||
|     left: 0; | ||||
|     bottom: 0; | ||||
|     text-align: right; | ||||
|  | ||||
|     .btn { | ||||
|       display: inline-block; | ||||
|       width: 192px; | ||||
|       height: 80px; | ||||
|       line-height: 80px; | ||||
|       background: #1365DD; | ||||
|       border-radius: 4px; | ||||
|       text-align: center; | ||||
|       font-size: 32px; | ||||
|       font-family: PingFangSC-Regular, PingFang SC; | ||||
|       color: #FFF; | ||||
|       margin: 20px 34px 0 0; | ||||
|     } | ||||
|   } | ||||
| } | ||||
| </style> | ||||
| @@ -10,7 +10,7 @@ | ||||
|         </div> | ||||
|         <div class="user-info"> | ||||
|           <img :src="item.photo" alt="" v-if="item.photo"> | ||||
|           <img src="../AppBuilding/components/img/user-img.png" alt="" v-else>{{ item.name }} | ||||
|           <img src="./img/user-img.png" alt="" v-else>{{ item.name }} | ||||
|         </div> | ||||
|       </div> | ||||
|     </div> | ||||
| @@ -32,8 +32,8 @@ export default { | ||||
|       current: 1, | ||||
|       name: '', | ||||
|       list: [], | ||||
|       cirIcon: require('../AppBuilding/components/img/cir-icon.png'), | ||||
|       checkIcon: require('../AppBuilding/components/img/check-icon.png'), | ||||
|       cirIcon: require('./img/xz.png'), | ||||
|       checkIcon: require('./img/xzh.png'), | ||||
|       selected: [] | ||||
|     } | ||||
|   }, | ||||
| @@ -1,12 +1,12 @@ | ||||
| <template> | ||||
|   <div class="AppGridManagement"> | ||||
|     <div class="pad-t32" v-if="component != 'Map' && isAdmin"></div> | ||||
|     <div class="select-gird" v-if="component != 'Map' && isAdmin"> | ||||
|       <img src="./components/img/gird-icon.png" alt="" class="gird-icon"> | ||||
|       <div @click="linkTo('./SelectGird')"> | ||||
|         {{ params.girdName }} | ||||
|         <img src="./components/img/down-icon.png" alt="" class="down-icon"> | ||||
|       </div> | ||||
|     <div class="select-gird" v-if="component != 'Map' && isAdmin" flex> | ||||
|       <AiPagePicker type="gird" class="fill" :selected="[params]" @select="handleSelectGird"> | ||||
|         <img src="./components/img/gird-icon.png" alt="" class="gird-icon"> | ||||
|         <div v-text="params.girdName"/> | ||||
|         <u-icon name="arrow-down" color="#999" class="down-icon" size="20"/> | ||||
|       </AiPagePicker> | ||||
|       <span @click="linkTo('./SetGird')" v-if="checkType == 2">网格配置</span> | ||||
|     </div> | ||||
|     <component v-if="refresh && isAdmin" :is="component" @change="onChange" :params="params"></component> | ||||
| @@ -31,7 +31,6 @@ import Map from './Map.vue' | ||||
| export default { | ||||
|   name: 'AppGridManagement', | ||||
|   appName: '网格管理', | ||||
|  | ||||
|   data() { | ||||
|     return { | ||||
|       component: 'Statistics', | ||||
| @@ -63,7 +62,6 @@ export default { | ||||
|       checkType: '' | ||||
|     } | ||||
|   }, | ||||
|  | ||||
|   components: { | ||||
|     Organization, | ||||
|     Statistics, | ||||
| @@ -75,18 +73,20 @@ export default { | ||||
|       this.params = e.params | ||||
|       this.component = e.type | ||||
|     }, | ||||
|     tabClick(index, component) { | ||||
|       this.tabIndex = index | ||||
|       this.component = component | ||||
|     refreshHome() { | ||||
|       this.refresh = false | ||||
|       this.$nextTick(() => { | ||||
|         this.refresh = true | ||||
|       }) | ||||
|     }, tabClick(index, component) { | ||||
|       this.tabIndex = index | ||||
|       this.component = component | ||||
|       this.refreshHome(); | ||||
|     }, | ||||
|     isGirdUser() { | ||||
|       this.isAdmin = false | ||||
|       this.$http.post('/app/appgirdmemberinfo/checkLogOnUser').then((res) => { | ||||
|         if (res.code == 0) { | ||||
|         if (res?.data) { | ||||
|           if (res.data.checkType != '0') { | ||||
|             this.isAdmin = true | ||||
|             this.checkType = res.data.checkType | ||||
| @@ -98,9 +98,12 @@ export default { | ||||
|     linkTo(url) { | ||||
|       uni.navigateTo({url}) | ||||
|     }, | ||||
|     handleSelectGird(v) { | ||||
|       this.params = v?.[0] || {} | ||||
|       this.refreshHome() | ||||
|     } | ||||
|   }, | ||||
|   onLoad() { | ||||
|  | ||||
|     this.isGirdUser() | ||||
|     uni.$on('hideTab', () => { | ||||
|       this.isTab = false | ||||
| @@ -108,10 +111,6 @@ export default { | ||||
|     uni.$on('showTab', () => { | ||||
|       this.isTab = true | ||||
|     }) | ||||
|  | ||||
|     uni.$on('goback', (res) => { | ||||
|       this.params = res | ||||
|     }) | ||||
|   }, | ||||
|   onShow() { | ||||
|     document.title = '网格管理' | ||||
| @@ -149,8 +148,7 @@ export default { | ||||
|  | ||||
|   div { | ||||
|     display: inline-block; | ||||
|     width: calc(100% - 144px); | ||||
|     padding-left: 20px; | ||||
|     padding: 0 20px; | ||||
|     box-sizing: border-box; | ||||
|     font-size: 32px; | ||||
|     font-family: PingFangSC-Medium, PingFang SC; | ||||
|   | ||||
		Reference in New Issue
	
	Block a user