Merge remote-tracking branch 'origin/build' into build
This commit is contained in:
		| @@ -403,7 +403,7 @@ | |||||||
|       transition: border-color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); |       transition: border-color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); | ||||||
|  |  | ||||||
|       &:hover { |       &:hover { | ||||||
|         border-color: #26f; |         border-color: $placeholderColor; | ||||||
|       } |       } | ||||||
|  |  | ||||||
|       i { |       i { | ||||||
|   | |||||||
| @@ -0,0 +1,63 @@ | |||||||
|  | <template> | ||||||
|  |   <div class="doc-circulation"> | ||||||
|  |     <keep-alive :include="['List']"> | ||||||
|  |       <component ref="component" :is="component" @change="onChange" :params="params" :instance="instance" :dict="dict"></component> | ||||||
|  |     </keep-alive> | ||||||
|  |   </div> | ||||||
|  | </template> | ||||||
|  |  | ||||||
|  | <script> | ||||||
|  |   import List from './components/List' | ||||||
|  |   import Detail from './components/Detail' | ||||||
|  |  | ||||||
|  |   export default { | ||||||
|  |     name: 'AppBayonetRegistration', | ||||||
|  |     label: '卡口登记', | ||||||
|  |  | ||||||
|  |     props: { | ||||||
|  |       instance: Function, | ||||||
|  |       dict: Object | ||||||
|  |     }, | ||||||
|  |  | ||||||
|  |     data () { | ||||||
|  |       return { | ||||||
|  |         component: 'List', | ||||||
|  |         params: {}, | ||||||
|  |         include: [] | ||||||
|  |       } | ||||||
|  |     }, | ||||||
|  |  | ||||||
|  |     components: { | ||||||
|  |       Detail, | ||||||
|  |       List | ||||||
|  |     }, | ||||||
|  |  | ||||||
|  |     methods: { | ||||||
|  |       onChange (data) { | ||||||
|  |         if (data.type === 'Detail') { | ||||||
|  |           this.component = 'Detail' | ||||||
|  |           this.params = data.params | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         if (data.type === 'List') { | ||||||
|  |           this.component = 'List' | ||||||
|  |           this.params = data.params | ||||||
|  |  | ||||||
|  |           this.$nextTick(() => { | ||||||
|  |             if (data.isRefresh) { | ||||||
|  |               this.$refs.component.getList() | ||||||
|  |             } | ||||||
|  |           }) | ||||||
|  |         } | ||||||
|  |       } | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  | </script> | ||||||
|  |  | ||||||
|  | <style lang="scss"> | ||||||
|  |   .doc-circulation { | ||||||
|  |     height: 100%; | ||||||
|  |     background: #F3F6F9; | ||||||
|  |     overflow: auto; | ||||||
|  |   } | ||||||
|  | </style> | ||||||
| @@ -0,0 +1,188 @@ | |||||||
|  |  <template> | ||||||
|  |   <ai-detail isHasSidebar v-loading="isLoading"> | ||||||
|  |     <template slot="title"> | ||||||
|  |       <ai-title title="返乡登记详情" isShowBack isShowBottomBorder @onBackClick="cancel(false)"> | ||||||
|  |       </ai-title> | ||||||
|  |     </template> | ||||||
|  |     <template slot="content"> | ||||||
|  |       <AiSidebar :tabTitle="tabList" v-model="currIndex"></AiSidebar> | ||||||
|  |       <div v-show="currIndex === 0"> | ||||||
|  |         <ai-card title="基本信息" v-show="currIndex === 0"> | ||||||
|  |           <template #content> | ||||||
|  |             <ai-wrapper | ||||||
|  |               label-width="120px"> | ||||||
|  |               <ai-info-item label="姓名" :value="info.name"></ai-info-item> | ||||||
|  |               <ai-info-item label="填报时间" :value="info.createTime"></ai-info-item> | ||||||
|  |               <ai-info-item label="身份证号" :value="info.idNumber"></ai-info-item> | ||||||
|  |               <ai-info-item label="手机号码" :value="info.phone"></ai-info-item> | ||||||
|  |               <ai-info-item label="人员类别" :value="dict.getLabel('EP_registerPersonType', info.type)"></ai-info-item> | ||||||
|  |               <ai-info-item label="是否从事高危行业" :value="dict.getLabel('EP_highRiskIndustries', info.highRiskIndustries)"></ai-info-item> | ||||||
|  |               <ai-info-item label="登记卡口" isLine :value="info.gatewayName"></ai-info-item> | ||||||
|  |             </ai-wrapper> | ||||||
|  |           </template> | ||||||
|  |         </ai-card> | ||||||
|  |         <ai-card title="行程信息"> | ||||||
|  |           <template #content> | ||||||
|  |             <ai-wrapper | ||||||
|  |               label-width="120px"> | ||||||
|  |               <ai-info-item label="出发时间" :value="info.startTime"></ai-info-item> | ||||||
|  |               <ai-info-item label="出发地区" > | ||||||
|  |                 <span  :style="{color: info.denger == 1 ? '#FF4466' : '#333'}">{{info.startAreaName}} </span> | ||||||
|  |               </ai-info-item> | ||||||
|  |               <ai-info-item label="出发地址" isLine :value="info.startAddress"></ai-info-item> | ||||||
|  |               <ai-info-item label="出行方式" :value="info.travelTypeNames"></ai-info-item> | ||||||
|  |               <ai-info-item label="车次/航班" isLine :value="info.trainNo"></ai-info-item> | ||||||
|  |               <ai-info-item label="行程描述" isLine :value="info.description"></ai-info-item> | ||||||
|  |               <ai-info-item label="抵平时间" :value="info.arriveTime"></ai-info-item> | ||||||
|  |               <ai-info-item label="到达地区" :value="info.arriveAreaName"></ai-info-item> | ||||||
|  |               <ai-info-item label="返乡地址" isLine :value="info.arriveAddress"></ai-info-item> | ||||||
|  |             </ai-wrapper> | ||||||
|  |           </template> | ||||||
|  |         </ai-card> | ||||||
|  |         <ai-card title="健康状况"> | ||||||
|  |           <template #content> | ||||||
|  |             <ai-wrapper | ||||||
|  |               label-width="120px"> | ||||||
|  |               <ai-info-item label="是否有风险旅居史" :value="dict.getLabel('yesOrNo', info.fromHighRiskArea)"></ai-info-item> | ||||||
|  |               <ai-info-item label="7天内是否接触新冠确诊或疑似患者" :value="dict.getLabel('yesOrNo', info.contactPatients)"></ai-info-item> | ||||||
|  |               <ai-info-item label="当前健康状况" :value="dict.getLabel('yesOrNo', info.abnormalHealth)"></ai-info-item> | ||||||
|  |             </ai-wrapper> | ||||||
|  |           </template> | ||||||
|  |         </ai-card> | ||||||
|  |         <ai-card title="同行情况"> | ||||||
|  |           <template #content> | ||||||
|  |             <ai-table | ||||||
|  |               :isShowPagination="false" | ||||||
|  |               tableSize="small" | ||||||
|  |               border | ||||||
|  |               :tableData="info.companionList" | ||||||
|  |               :col-configs="colConfigs" | ||||||
|  |               @getList="() => {}"> | ||||||
|  |             </ai-table> | ||||||
|  |           </template> | ||||||
|  |         </ai-card> | ||||||
|  |       </div> | ||||||
|  |       <div v-show="currIndex === 1"> | ||||||
|  |         <ai-card title="风险处置"> | ||||||
|  |           <template #right> | ||||||
|  |             <el-button type="primary" v-if="info.status === '0'" @click="release">解除异常</el-button> | ||||||
|  |           </template> | ||||||
|  |           <template #content> | ||||||
|  |             <ai-wrapper | ||||||
|  |               label-width="120px"> | ||||||
|  |               <ai-info-item label="姓名" :value="info.name"></ai-info-item> | ||||||
|  |               <ai-info-item label="填报时间" :value="info.createTime"></ai-info-item> | ||||||
|  |               <ai-info-item label="身份证号" :value="info.idNumber"></ai-info-item> | ||||||
|  |               <ai-info-item label="手机号码" :value="info.phone"></ai-info-item> | ||||||
|  |               <ai-info-item label="人员类别" :value="dict.getLabel('EP_registerPersonType', info.type)"></ai-info-item> | ||||||
|  |             </ai-wrapper> | ||||||
|  |           </template> | ||||||
|  |         </ai-card> | ||||||
|  |         <ai-card title="处理意见"> | ||||||
|  |           <template #content> | ||||||
|  |             <ai-wrapper | ||||||
|  |               style="margin-bottom: 20px;" | ||||||
|  |               v-for="item in info.riskDisposalList" | ||||||
|  |               :key="item.id" | ||||||
|  |               label-width="120px"> | ||||||
|  |               <ai-info-item label="处理意见" :value="dict.getLabel('EP_handleType', item.handleType)"></ai-info-item> | ||||||
|  |               <ai-info-item v-if="item.handleType === '2'" label="集中隔离地" :value="dict.getLabel('EP_quarantineAddress', item.quarantineAddress)"></ai-info-item> | ||||||
|  |               <ai-info-item v-if="item.handleType === '3'" label="居家状态" :value="dict.getLabel('EP_homeStatus', item.homeStatus)"></ai-info-item> | ||||||
|  |               <ai-info-item v-if="item.handleType === '6'" label="移交对象" :value="dict.getLabel('EP_handoverObject', item.handoverObject)"></ai-info-item> | ||||||
|  |               <ai-info-item v-if="item.handleType === '6'" label="移交方式" :value="dict.getLabel('EP_handoverMethod', item.handoverMethod)"></ai-info-item> | ||||||
|  |               <ai-info-item v-if="item.handleType === '6'" label="交接人员姓名" :value="info.handoverPersonName"></ai-info-item> | ||||||
|  |               <ai-info-item v-if="item.handleType === '6'" label="手机号" :value="info.handoverPersonPhone"></ai-info-item> | ||||||
|  |               <ai-info-item v-if="['2', '3'].includes(item.handleType)" label="隔离时间" :value="item.quarantineBeginTime + '至' + item.quarantineEndTime"></ai-info-item> | ||||||
|  |               <ai-info-item v-if="['2', '3'].includes(item.handleType)" label="隔离策略" :value="dict.getLabel('EP_quarantineStrategy', item.quarantineStrategy)"></ai-info-item> | ||||||
|  |               <ai-info-item v-if="['3'].includes(item.handleType)" label="管控方式" :value="dict.getLabel('EP_controlMethod', item.controlMethod)"></ai-info-item> | ||||||
|  |               <ai-info-item label="图片" isLine v-if="['3', '6'].includes(item.handleType)"> | ||||||
|  |                 <ai-uploader | ||||||
|  |                   :instance="instance" | ||||||
|  |                   :value="item.fileList" | ||||||
|  |                   disabled | ||||||
|  |                   :limit="9"> | ||||||
|  |                 </ai-uploader> | ||||||
|  |               </ai-info-item> | ||||||
|  |             </ai-wrapper> | ||||||
|  |           </template> | ||||||
|  |         </ai-card> | ||||||
|  |       </div> | ||||||
|  |     </template> | ||||||
|  |   </ai-detail> | ||||||
|  | </template> | ||||||
|  |  | ||||||
|  | <script> | ||||||
|  |   export default { | ||||||
|  |     name: 'Detail', | ||||||
|  |  | ||||||
|  |     props: { | ||||||
|  |       instance: Function, | ||||||
|  |       dict: Object, | ||||||
|  |       params: Object | ||||||
|  |     }, | ||||||
|  |  | ||||||
|  |     data () { | ||||||
|  |       return { | ||||||
|  |         info: {}, | ||||||
|  |         isShow: false, | ||||||
|  |         currIndex: 0, | ||||||
|  |         isLoading: false, | ||||||
|  |         tableData: [], | ||||||
|  |         colConfigs: [ | ||||||
|  |           {prop: 'createUserName', label: '姓名', align: 'center' }, | ||||||
|  |           {prop: 'phone', label: '手机号', align: 'center'} | ||||||
|  |         ], | ||||||
|  |         tabList: ['基本信息', '风险处置'] | ||||||
|  |       } | ||||||
|  |     }, | ||||||
|  |  | ||||||
|  |     created () { | ||||||
|  |       this.isLoading = true | ||||||
|  |       if (this.params && this.params.id) { | ||||||
|  |         this.id = this.params.id | ||||||
|  |         this.$dict.load(['EP_riskLevel', 'EP_handleType', 'EP_registerPersonType', 'EP_highRiskIndustries', 'EP_travelType', 'yesOrNo', 'EP_handoverObject', | ||||||
|  |         'EP_handleType', 'EP_quarantineAddress', 'EP_homeStatus', 'EP_quarantineStrategy', 'EP_controlMethod', 'EP_handoverMethod']).then(() => { | ||||||
|  |           this.getInfo(this.params.id) | ||||||
|  |         }) | ||||||
|  |       } | ||||||
|  |     }, | ||||||
|  |  | ||||||
|  |     methods: { | ||||||
|  |       getInfo (id) { | ||||||
|  |         this.instance.post(`/app/appepidemicpreventionregisterinfo/queryDetailById?id=${id}`).then(res => { | ||||||
|  |           if (res.code === 0) { | ||||||
|  |             this.info = res.data | ||||||
|  |             this.info.checkPhoto = res.data.checkPhoto ? JSON.parse(res.data.checkPhoto) : [] | ||||||
|  |  | ||||||
|  |             this.info.travelTypeNames = res.data.travelType.split(',').map(v => { | ||||||
|  |               return this.dict.getLabel('EP_travelType', v) | ||||||
|  |             }).join(',') | ||||||
|  |           } | ||||||
|  |  | ||||||
|  |           this.isLoading = false | ||||||
|  |         }).catch(() => { | ||||||
|  |           this.isLoading = false | ||||||
|  |         }) | ||||||
|  |       }, | ||||||
|  |  | ||||||
|  |       cancel () { | ||||||
|  |         this.$emit('change', { | ||||||
|  |           type: 'List', | ||||||
|  |           isRefresh: true | ||||||
|  |         }) | ||||||
|  |       } | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  | </script> | ||||||
|  |  | ||||||
|  | <style scoped lang="scss"> | ||||||
|  |   .color-0{ | ||||||
|  |     color: #42D784; | ||||||
|  |   } | ||||||
|  |   .color-1{ | ||||||
|  |     color: #f46; | ||||||
|  |   } | ||||||
|  |   .color-2{ | ||||||
|  |     color: #1365DD; | ||||||
|  |   } | ||||||
|  | </style> | ||||||
| @@ -0,0 +1,283 @@ | |||||||
|  | <template> | ||||||
|  |   <ai-list class="list"> | ||||||
|  |     <ai-title slot="title" title="卡口登记" isShowBottomBorder></ai-title> | ||||||
|  |     <template slot="content"> | ||||||
|  |       <div class="statistics-top"> | ||||||
|  |         <div class="statistics-top__item"> | ||||||
|  |           <span>登记人数</span> | ||||||
|  |           <h2 style="color: #2266FF;">{{ info['登记人数'] }}</h2> | ||||||
|  |         </div> | ||||||
|  |         <div class="statistics-top__item"> | ||||||
|  |           <span>今日登记</span> | ||||||
|  |           <h2 style="color: #22AA99;">{{ info['今日登记'] }}</h2> | ||||||
|  |         </div> | ||||||
|  |         <div class="statistics-top__item"> | ||||||
|  |           <span>原路返回</span> | ||||||
|  |           <h2 style="color: #F8B425">{{ info['原路返回'] }}</h2> | ||||||
|  |         </div> | ||||||
|  |         <div class="statistics-top__item"> | ||||||
|  |           <span>居家隔离</span> | ||||||
|  |           <h2 style="color: red">{{ info['居家隔离'] }}</h2> | ||||||
|  |         </div> | ||||||
|  |       </div> | ||||||
|  |       <div class="content"> | ||||||
|  |         <ai-search-bar bottomBorder> | ||||||
|  |           <template #left> | ||||||
|  |             <ai-select | ||||||
|  |               v-model="search.gatewayName" | ||||||
|  |               clearable | ||||||
|  |               placeholder="请选择卡口" | ||||||
|  |               :selectList="dictList" | ||||||
|  |               @change="search.current = 1, getList()"> | ||||||
|  |             </ai-select> | ||||||
|  |             <el-date-picker | ||||||
|  |               v-model="search.createTime" | ||||||
|  |               type="date" | ||||||
|  |               size="small" | ||||||
|  |               value-format="yyyy-MM-DD" | ||||||
|  |               placeholder="选择开始日期" | ||||||
|  |               @change="search.current = 1, getList()"> | ||||||
|  |             </el-date-picker> | ||||||
|  |             <el-date-picker | ||||||
|  |               v-model="search.createTime" | ||||||
|  |               type="date" | ||||||
|  |               size="small" | ||||||
|  |               value-format="yyyy-MM-DD" | ||||||
|  |               placeholder="选择结束日期" | ||||||
|  |               @change="search.current = 1, getList()"> | ||||||
|  |             </el-date-picker> | ||||||
|  |             <ai-download :instance="instance" url="/app/appepidemicbackhomerecord/export" :params="param" fileName="返乡登记" :disabled="tableData.length == 0"> | ||||||
|  |               <el-button icon="iconfont iconExported" :disabled="tableData.length == 0">导出</el-button> | ||||||
|  |             </ai-download> | ||||||
|  |           </template> | ||||||
|  |           <template #right> | ||||||
|  |             <el-input | ||||||
|  |               v-model="search.name" | ||||||
|  |               size="small" | ||||||
|  |               placeholder="请输入姓名、手机号" | ||||||
|  |               clearable | ||||||
|  |               v-throttle="() => {search.current = 1, getList()}" | ||||||
|  |               @clear="search.current = 1, search.name = '', getList()" | ||||||
|  |               suffix-icon="iconfont iconSearch"> | ||||||
|  |             </el-input> | ||||||
|  |           </template> | ||||||
|  |         </ai-search-bar> | ||||||
|  |         <ai-table | ||||||
|  |           :tableData="tableData" | ||||||
|  |           :col-configs="colConfigs" | ||||||
|  |           :total="total" | ||||||
|  |           v-loading="loading" | ||||||
|  |           style="margin-top: 16px;" | ||||||
|  |           :current.sync="search.current" | ||||||
|  |           :size.sync="search.size" | ||||||
|  |           @getList="getList"> | ||||||
|  |           <el-table-column slot="options" width="140px" fixed="right" label="操作" align="center"> | ||||||
|  |             <template slot-scope="{ row }"> | ||||||
|  |               <div class="table-options"> | ||||||
|  |                 <el-button type="text" @click="toDetail(row.id)">详情</el-button> | ||||||
|  |                 <el-button type="text" @click="remove(row.id)">删除</el-button> | ||||||
|  |               </div> | ||||||
|  |             </template> | ||||||
|  |           </el-table-column> | ||||||
|  |         </ai-table> | ||||||
|  |       </div> | ||||||
|  |     </template> | ||||||
|  |   </ai-list> | ||||||
|  | </template> | ||||||
|  |  | ||||||
|  | <script> | ||||||
|  |   import { mapState } from 'vuex' | ||||||
|  |   export default { | ||||||
|  |     name: 'List', | ||||||
|  |  | ||||||
|  |     props: { | ||||||
|  |       instance: Function, | ||||||
|  |       dict: Object, | ||||||
|  |       areaId: String | ||||||
|  |     }, | ||||||
|  |  | ||||||
|  |     data () { | ||||||
|  |       return { | ||||||
|  |         search: { | ||||||
|  |           current: 1, | ||||||
|  |           size: 10, | ||||||
|  |           name: '', | ||||||
|  |           gatewayName: '', | ||||||
|  |           status: '', | ||||||
|  |           createTime: '' | ||||||
|  |         }, | ||||||
|  |         dictList: [], | ||||||
|  |         info: {}, | ||||||
|  |         colConfigs: [ | ||||||
|  |           { prop: 'name', label: '姓名' }, | ||||||
|  |           { prop: 'phone', align: 'center', label: '手机号码' }, | ||||||
|  |           { prop: 'arriveAreaName', align: 'center', label: '返乡地区' }, | ||||||
|  |           { | ||||||
|  |             prop: 'arriveTime', | ||||||
|  |             align: 'center', | ||||||
|  |             label: '抵平时间' | ||||||
|  |           }, | ||||||
|  |           { prop: 'companionCount', align: 'center', label: '同行人数' }, | ||||||
|  |           { | ||||||
|  |             prop: 'riskLevel', | ||||||
|  |             align: 'center', | ||||||
|  |             label: '风险等级', | ||||||
|  |             formart: v => this.dict.getLabel('EP_riskLevel', v) | ||||||
|  |           }, | ||||||
|  |           { prop: 'handleType', align: 'center', label: '处理意见', formart: v => this.dict.getLabel('EP_handleType', v) } | ||||||
|  |         ], | ||||||
|  |         ids: [], | ||||||
|  |         tableData: [], | ||||||
|  |         total: 0, | ||||||
|  |         loading: false, | ||||||
|  |         disabledLevel: 0 | ||||||
|  |       } | ||||||
|  |     }, | ||||||
|  |  | ||||||
|  |     computed: { | ||||||
|  |       ...mapState(['user']), | ||||||
|  |  | ||||||
|  |       param () { | ||||||
|  |         return this.search | ||||||
|  |       } | ||||||
|  |     }, | ||||||
|  |  | ||||||
|  |     created () { | ||||||
|  |       this.disabledLevel = this.user.info.areaList.length - 1 | ||||||
|  |       this.loading = true | ||||||
|  |  | ||||||
|  |       this.getTotalInfo() | ||||||
|  |       this.getDictList() | ||||||
|  |       this.dict.load(['EP_riskLevel', 'EP_handleType', 'modeType']).then(() => { | ||||||
|  |         this.getList() | ||||||
|  |       }) | ||||||
|  |     }, | ||||||
|  |  | ||||||
|  |     methods: { | ||||||
|  |       getDictList () { | ||||||
|  |         this.instance.post(`/app/appepidemicpreventiongateway/list?size=10000`).then(res => { | ||||||
|  |           if (res.code == 0) { | ||||||
|  |             this.dictList = res.data.records.map(v => { | ||||||
|  |               return { | ||||||
|  |                 dictName: v.name, | ||||||
|  |                 dictValue: v.id | ||||||
|  |               } | ||||||
|  |             }) | ||||||
|  |           } | ||||||
|  |         }) | ||||||
|  |       }, | ||||||
|  |  | ||||||
|  |       getList () { | ||||||
|  |         this.instance.post(`/app/appepidemicpreventionregisterinfo/list`, null, { | ||||||
|  |           params: { | ||||||
|  |             ...this.search, | ||||||
|  |             arriveAreaId: this.areaId | ||||||
|  |           } | ||||||
|  |         }).then(res => { | ||||||
|  |           if (res.code == 0) { | ||||||
|  |             this.tableData = res.data.records | ||||||
|  |             this.total = res.data.total | ||||||
|  |             this.loading = false | ||||||
|  |           } else { | ||||||
|  |             this.loading = false | ||||||
|  |           } | ||||||
|  |         }).catch(() => { | ||||||
|  |           this.loading = false | ||||||
|  |         }) | ||||||
|  |       }, | ||||||
|  |  | ||||||
|  |       toDetail (id) { | ||||||
|  |         this.$emit('change', { | ||||||
|  |           type: 'Detail', | ||||||
|  |           params: { | ||||||
|  |             id: id || '' | ||||||
|  |           } | ||||||
|  |         }) | ||||||
|  |       }, | ||||||
|  |  | ||||||
|  |       changeArea () { | ||||||
|  |         this.search.current = 1 | ||||||
|  |  | ||||||
|  |         this.$nextTick(() => { | ||||||
|  |           this.getList() | ||||||
|  |           this.getTotalInfo() | ||||||
|  |         }) | ||||||
|  |       }, | ||||||
|  |  | ||||||
|  |       remove(id) { | ||||||
|  |         this.$confirm('确定删除该数据?').then(() => { | ||||||
|  |           this.instance.post(`/app/appepidemicpreventionregisterinfo/delete?id=${id}`).then(res => { | ||||||
|  |             if (res.code == 0) { | ||||||
|  |               this.$message.success('删除成功!') | ||||||
|  |               this.getTotalInfo() | ||||||
|  |               this.getList() | ||||||
|  |             } | ||||||
|  |           }) | ||||||
|  |         }) | ||||||
|  |       }, | ||||||
|  |  | ||||||
|  |  | ||||||
|  |       getTotalInfo () { | ||||||
|  |         this.instance.post(`/app/appepidemicpreventionregisterinfo/listStatistics`, null, { | ||||||
|  |           params: { | ||||||
|  |             areaId: this.search.arriveAreaId | ||||||
|  |           } | ||||||
|  |         }).then(res => { | ||||||
|  |           if (res.code == 0) { | ||||||
|  |             this.info = res.data | ||||||
|  |           } | ||||||
|  |         }) | ||||||
|  |       } | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  | </script> | ||||||
|  |  | ||||||
|  | <style scoped lang="scss"> | ||||||
|  |   .list { | ||||||
|  |     ::v-deep .ai-list__content { | ||||||
|  |       .ai-list__content--right-wrapper { | ||||||
|  |         background: transparent!important; | ||||||
|  |         box-shadow: none!important; | ||||||
|  |         margin: 0!important; | ||||||
|  |         padding: 0 0 0!important; | ||||||
|  |       } | ||||||
|  |     } | ||||||
|  |     .statistics-top { | ||||||
|  |       display: flex; | ||||||
|  |       align-items: center; | ||||||
|  |       margin-bottom: 20px; | ||||||
|  |  | ||||||
|  |       & > div { | ||||||
|  |         flex: 1; | ||||||
|  |         height: 96px; | ||||||
|  |         line-height: 1; | ||||||
|  |         margin-right: 20px; | ||||||
|  |         padding: 16px 24px; | ||||||
|  |         background: #FFFFFF; | ||||||
|  |         box-shadow: 0px 4px 6px -2px rgba(15, 15, 21, 0.15); | ||||||
|  |         border-radius: 4px; | ||||||
|  |  | ||||||
|  |         &:last-child { | ||||||
|  |           margin-right: 0; | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         h3 { | ||||||
|  |           font-size: 24px; | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         span { | ||||||
|  |           display: block; | ||||||
|  |           margin-bottom: 16px; | ||||||
|  |           color: #888888; | ||||||
|  |           font-size: 16px; | ||||||
|  |         } | ||||||
|  |       } | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     .content { | ||||||
|  |       padding: 16px; | ||||||
|  |       background: #FFFFFF; | ||||||
|  |       box-shadow: 0px 4px 6px -2px rgba(15, 15, 21, 0.15); | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  | </style> | ||||||
| @@ -0,0 +1,65 @@ | |||||||
|  | <template> | ||||||
|  |   <div class="doc-circulation ailist-wrapper"> | ||||||
|  |     <keep-alive :include="['List']"> | ||||||
|  |       <component ref="component" :moduleName="moduleName" :moduleId="moduleId" :is="component" @change="onChange" :params="params" :instance="instance" :dict="dict"></component> | ||||||
|  |     </keep-alive> | ||||||
|  |   </div> | ||||||
|  | </template> | ||||||
|  |  | ||||||
|  | <script> | ||||||
|  |   import List from './components/List' | ||||||
|  |   import Detail from './components/Detail' | ||||||
|  |  | ||||||
|  |   export default { | ||||||
|  |     name: 'AppCommunityManagement', | ||||||
|  |     label: '社区管理', | ||||||
|  |  | ||||||
|  |     props: { | ||||||
|  |       instance: Function, | ||||||
|  |       dict: Object | ||||||
|  |     }, | ||||||
|  |  | ||||||
|  |     data () { | ||||||
|  |       return { | ||||||
|  |         component: 'List', | ||||||
|  |         params: {}, | ||||||
|  |         moduleId: '', | ||||||
|  |         include: [], | ||||||
|  |         moduleName: '' | ||||||
|  |       } | ||||||
|  |     }, | ||||||
|  |  | ||||||
|  |     components: { | ||||||
|  |       Detail, | ||||||
|  |       List | ||||||
|  |     }, | ||||||
|  |  | ||||||
|  |     methods: { | ||||||
|  |       onChange (data) { | ||||||
|  |         if (data.type === 'Detail') { | ||||||
|  |           this.component = 'Detail' | ||||||
|  |           this.params = data.params | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         if (data.type === 'List') { | ||||||
|  |           this.component = 'List' | ||||||
|  |           this.params = data.params | ||||||
|  |  | ||||||
|  |           this.$nextTick(() => { | ||||||
|  |             if (data.isRefresh) { | ||||||
|  |               this.$refs.component.getList() | ||||||
|  |             } | ||||||
|  |           }) | ||||||
|  |         } | ||||||
|  |       } | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  | </script> | ||||||
|  |  | ||||||
|  | <style lang="scss"> | ||||||
|  |   .doc-circulation { | ||||||
|  |     height: 100%; | ||||||
|  |     background: #F3F6F9; | ||||||
|  |     overflow: auto; | ||||||
|  |   } | ||||||
|  | </style> | ||||||
| @@ -0,0 +1,137 @@ | |||||||
|  | <template> | ||||||
|  |   <ai-detail isHasSidebar> | ||||||
|  |     <template slot="title"> | ||||||
|  |       <ai-title title="社区管理详情" isShowBack isShowBottomBorder @onBackClick="cancel(false)"> | ||||||
|  |       </ai-title> | ||||||
|  |     </template> | ||||||
|  |     <template slot="content"> | ||||||
|  |       <AiSidebar :tabTitle="tabList" v-model="currIndex"></AiSidebar> | ||||||
|  |       <div v-show="currIndex === 0"> | ||||||
|  |         <ai-card title="基本信息" v-show="currIndex === 0"> | ||||||
|  |           <template #content> | ||||||
|  |             <ai-wrapper | ||||||
|  |               label-width="120px"> | ||||||
|  |               <ai-info-item label="管理对象" :value="info.name"></ai-info-item> | ||||||
|  |               <ai-info-item label="对象类型" :value="dict.getLabel('EP_registerInfoType', info.infoType)"></ai-info-item> | ||||||
|  |               <ai-info-item label="身份证" :value="info.idNumber"></ai-info-item> | ||||||
|  |               <ai-info-item label="手机号" :value="info.phone"></ai-info-item> | ||||||
|  |               <ai-info-item label="所属地区" :value="info.areaName" isLine></ai-info-item> | ||||||
|  |               <ai-info-item label="居家状态" :value="dict.getLabel('EP_homeStatus2', info.homeStatus)"></ai-info-item> | ||||||
|  |               <ai-info-item label="隔离时间" :value="info.quarantineBeginTime ? info.quarantineBeginTime.split(' ')[0] + ' - ' + info.quarantineEndTime.split(' ')[0] : ''"></ai-info-item> | ||||||
|  |               <ai-info-item label="隔离策略 " :value="dict.getLabel('EP_quarantineStrategy', info.quarantineStrategy)"></ai-info-item> | ||||||
|  |               <ai-info-item label="管控人" :value="info.controllerUserName"></ai-info-item> | ||||||
|  |               <ai-info-item label="联系方式" :value="info.controllerUserPhone"></ai-info-item> | ||||||
|  |               <ai-info-item label="管理内容" isLine :value="info.controllerContent"></ai-info-item> | ||||||
|  |               <ai-info-item label="图片" isLine> | ||||||
|  |                 <ai-uploader | ||||||
|  |                   :instance="instance" | ||||||
|  |                   :value="info.fileList" | ||||||
|  |                   disabled | ||||||
|  |                   :limit="9"> | ||||||
|  |                 </ai-uploader> | ||||||
|  |               </ai-info-item> | ||||||
|  |             </ai-wrapper> | ||||||
|  |           </template> | ||||||
|  |         </ai-card> | ||||||
|  |       </div> | ||||||
|  |       <div v-show="currIndex === 1"> | ||||||
|  |         <ai-card title="核酸详情"> | ||||||
|  |           <template #content> | ||||||
|  |             <ai-table | ||||||
|  |               :isShowPagination="false" | ||||||
|  |               tableSize="small" | ||||||
|  |               border | ||||||
|  |               :tableData="info.nucleicAcidSamplingList" | ||||||
|  |               :col-configs="colConfigs" | ||||||
|  |               @getList="() => {}"> | ||||||
|  |             </ai-table> | ||||||
|  |           </template> | ||||||
|  |         </ai-card> | ||||||
|  |       </div> | ||||||
|  |     </template> | ||||||
|  |   </ai-detail> | ||||||
|  | </template> | ||||||
|  |  | ||||||
|  | <script> | ||||||
|  |   export default { | ||||||
|  |     name: 'Detail', | ||||||
|  |  | ||||||
|  |     props: { | ||||||
|  |       instance: Function, | ||||||
|  |       dict: Object, | ||||||
|  |       params: Object | ||||||
|  |     }, | ||||||
|  |  | ||||||
|  |     data () { | ||||||
|  |       return { | ||||||
|  |         total: 0, | ||||||
|  |         info: {}, | ||||||
|  |         search: { | ||||||
|  |           current: 1, | ||||||
|  |           size: 10 | ||||||
|  |         }, | ||||||
|  |         currIndex: 0, | ||||||
|  |         colConfigs: [ | ||||||
|  |           { prop: 'createUserName', label: '采样人', align: 'center' }, | ||||||
|  |           { prop: 'createUserPhone', label: '联系方式', align: 'center'}, | ||||||
|  |           { prop: 'createTime', label: '采样时间', align: 'center' } | ||||||
|  |         ], | ||||||
|  |         tabList: ['基本信息', '核酸详情'] | ||||||
|  |       } | ||||||
|  |     }, | ||||||
|  |  | ||||||
|  |     created () { | ||||||
|  |       if (this.params && this.params.id) { | ||||||
|  |         this.id = this.params.id | ||||||
|  |         this.$dict.load(['EP_CM_status', 'EP_registerInfoType', 'EP_homeStatus2', 'EP_quarantineStrategy']).then(() => { | ||||||
|  |           this.getInfo(this.params.id) | ||||||
|  |         }) | ||||||
|  |  | ||||||
|  |         this.getList() | ||||||
|  |       } | ||||||
|  |     }, | ||||||
|  |  | ||||||
|  |     methods: { | ||||||
|  |       getInfo (id) { | ||||||
|  |         this.instance.post(`/app/appepidemicpreventioncommunitymanagement/queryDetailById?id=${id}`).then(res => { | ||||||
|  |           if (res.code === 0) { | ||||||
|  |             this.info = res.data | ||||||
|  |           } | ||||||
|  |         }) | ||||||
|  |       }, | ||||||
|  |  | ||||||
|  |       getList () { | ||||||
|  |         this.instance.post(`/app/appepidemicunusuallog/list`, null, { | ||||||
|  |           params: { | ||||||
|  |             ...this.search, | ||||||
|  |             recordId: this.params.id | ||||||
|  |           } | ||||||
|  |         }).then(res => { | ||||||
|  |           if (res.code == 0) { | ||||||
|  |             this.tableData = res.data.records | ||||||
|  |             this.total = res.data.total | ||||||
|  |           } | ||||||
|  |         }) | ||||||
|  |       }, | ||||||
|  |  | ||||||
|  |       cancel () { | ||||||
|  |         this.$emit('change', { | ||||||
|  |           type: 'List', | ||||||
|  |           isRefresh: true | ||||||
|  |         }) | ||||||
|  |       } | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  | </script> | ||||||
|  |  | ||||||
|  | <style scoped lang="scss"> | ||||||
|  |   .color-0{ | ||||||
|  |     color: #42D784; | ||||||
|  |   } | ||||||
|  |   .color-1{ | ||||||
|  |     color: #f46; | ||||||
|  |   } | ||||||
|  |   .color-2{ | ||||||
|  |     color: #1365DD; | ||||||
|  |   } | ||||||
|  | </style> | ||||||
| @@ -0,0 +1,195 @@ | |||||||
|  | <template> | ||||||
|  |   <ai-list class="notice"> | ||||||
|  |     <template slot="title"> | ||||||
|  |       <ai-title title="社区管理" isShowBottomBorder></ai-title> | ||||||
|  |     </template> | ||||||
|  |     <template slot="content"> | ||||||
|  |       <ai-search-bar class="search-bar"> | ||||||
|  |         <template #left> | ||||||
|  |           <ai-select | ||||||
|  |             v-model="search.infoType" | ||||||
|  |             clearable | ||||||
|  |             placeholder="请选择对象类型" | ||||||
|  |             :selectList="dict.getDict('EP_registerInfoType')" | ||||||
|  |             @change="search.current = 1, getList()"> | ||||||
|  |           </ai-select> | ||||||
|  |           <ai-select | ||||||
|  |             v-model="search.status" | ||||||
|  |             clearable | ||||||
|  |             placeholder="请选择管理状态" | ||||||
|  |             :selectList="dict.getDict('EP_CM_status')" | ||||||
|  |             @change="search.current = 1, getList()"> | ||||||
|  |           </ai-select> | ||||||
|  |           <ai-user-selecter :instance="instance" @change="onUserChange" :isMultiple="false" v-model="user"> | ||||||
|  |             <div class="userSelcet"> | ||||||
|  |               <span style="color: #606266;" v-if="search.controllerUserId">{{ name }}</span> | ||||||
|  |               <span v-else>管控人</span> | ||||||
|  |               <i class="el-icon-arrow-up"  v-if="!search.controllerUserId"></i> | ||||||
|  |               <i class="el-icon-circle-close" v-if="search.controllerUserId" @click.stop="user = [], search.controllerUserId = '', name = '', search.current = 1, getList()"></i> | ||||||
|  |             </div> | ||||||
|  |           </ai-user-selecter> | ||||||
|  |         </template> | ||||||
|  |         <template #right> | ||||||
|  |           <el-input | ||||||
|  |             v-model="search.name" | ||||||
|  |             class="search-input" | ||||||
|  |             size="small" | ||||||
|  |             v-throttle="() => {search.current = 1, getList()}" | ||||||
|  |             placeholder="标题、排查对象、排查人" | ||||||
|  |             clearable | ||||||
|  |             @clear="search.current = 1, search.name = '', getList()" | ||||||
|  |             suffix-icon="iconfont iconSearch"> | ||||||
|  |           </el-input> | ||||||
|  |         </template> | ||||||
|  |       </ai-search-bar> | ||||||
|  |       <ai-table | ||||||
|  |         :tableData="tableData" | ||||||
|  |         :col-configs="colConfigs" | ||||||
|  |         :total="total" | ||||||
|  |         style="margin-top: 6px;" | ||||||
|  |         v-loading="isLoading" | ||||||
|  |         :current.sync="search.current" | ||||||
|  |         :size.sync="search.size" | ||||||
|  |         @getList="getList"> | ||||||
|  |         <el-table-column slot="options" width="100px" fixed="right" label="操作" align="center"> | ||||||
|  |           <template slot-scope="{ row }"> | ||||||
|  |             <div class="table-options"> | ||||||
|  |               <el-button type="text" @click="toDeital(row.id)">详情</el-button> | ||||||
|  |             </div> | ||||||
|  |           </template> | ||||||
|  |         </el-table-column> | ||||||
|  |       </ai-table> | ||||||
|  |     </template> | ||||||
|  |   </ai-list> | ||||||
|  | </template> | ||||||
|  |  | ||||||
|  | <script> | ||||||
|  |   export default { | ||||||
|  |     name: 'List', | ||||||
|  |  | ||||||
|  |     props: { | ||||||
|  |       instance: Function, | ||||||
|  |       dict: Object | ||||||
|  |     }, | ||||||
|  |  | ||||||
|  |     data() { | ||||||
|  |       return { | ||||||
|  |         search: { | ||||||
|  |           current: 1, | ||||||
|  |           size: 10, | ||||||
|  |           name: '', | ||||||
|  |           infoType: '', | ||||||
|  |           status: '', | ||||||
|  |           controllerUserId: '' | ||||||
|  |         }, | ||||||
|  |         user: [], | ||||||
|  |         name: '', | ||||||
|  |         img: '', | ||||||
|  |         isLoading: false, | ||||||
|  |         total: 10, | ||||||
|  |         colConfigs: [ | ||||||
|  |           { prop: 'name',  label: '管理对象', align: 'left' }, | ||||||
|  |           { prop: 'phone', label: '手机号', align: 'center' }, | ||||||
|  |           { prop: 'idNumber',  label: '身份证号', align: 'center' }, | ||||||
|  |           { prop: 'createTime', label: '排查时间', align: 'center' }, | ||||||
|  |           { prop: 'areaName',  label: '所属地区', align: 'center' }, | ||||||
|  |           { prop: 'status', label: '管理状态', align: 'center', formart: v => this.dict.getLabel('EP_CM_status', v) }, | ||||||
|  |           { prop: 'nucleicAcidSamplingCount',  label: '核酸状态', align: 'center', formart: v => v > 0 ? `核酸采集${v}次` : '待采' }, | ||||||
|  |           { prop: 'infoType', label: '对象来源', align: 'center', formart: v => this.dict.getLabel('EP_registerInfoType', v) }, | ||||||
|  |           { prop: 'controllerUserName',  label: '管控人', align: 'center' } | ||||||
|  |         ], | ||||||
|  |         tableData: [] | ||||||
|  |       } | ||||||
|  |     }, | ||||||
|  |  | ||||||
|  |     created() { | ||||||
|  |       this.$dict.load(['EP_CM_status', 'EP_registerInfoType', 'EP_registerInfoType']).then(() => { | ||||||
|  |         this.getList() | ||||||
|  |       }) | ||||||
|  |     }, | ||||||
|  |  | ||||||
|  |     methods: { | ||||||
|  |       getList() { | ||||||
|  |         this.instance.post(`/app/appepidemicpreventioncommunitymanagement/list`, null, { | ||||||
|  |           params: { | ||||||
|  |             ...this.search | ||||||
|  |           } | ||||||
|  |         }).then(res => { | ||||||
|  |           if (res.code == 0) { | ||||||
|  |             this.tableData = res.data.records | ||||||
|  |             this.total = res.data.total | ||||||
|  |           } | ||||||
|  |         }) | ||||||
|  |       }, | ||||||
|  |  | ||||||
|  |       toDeital (id) { | ||||||
|  |         this.$emit('change', { | ||||||
|  |           type: 'Detail', | ||||||
|  |           params: { | ||||||
|  |             id: id | ||||||
|  |           } | ||||||
|  |         }) | ||||||
|  |       }, | ||||||
|  |  | ||||||
|  |       onUserChange (e) { | ||||||
|  |         if (e.length) { | ||||||
|  |           this.name = e[0].name | ||||||
|  |           this.search.controllerUserId = e[0].openId | ||||||
|  |         } else { | ||||||
|  |           this.search.controllerUserId = '' | ||||||
|  |           this.name = '' | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         this.search.current = 1 | ||||||
|  |         this.getList() | ||||||
|  |       } | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  | </script> | ||||||
|  |  | ||||||
|  | <style lang="scss" scoped> | ||||||
|  |   .notice { | ||||||
|  |     .userSelcet { | ||||||
|  |       display: flex; | ||||||
|  |       align-items: center; | ||||||
|  |       justify-content: space-between; | ||||||
|  |       width: 215px; | ||||||
|  |       height: 32px; | ||||||
|  |       line-height: 32px; | ||||||
|  |       border-radius: 4px; | ||||||
|  |       border: 1px solid #d0d4dc; | ||||||
|  |       overflow: hidden; | ||||||
|  |       cursor: pointer; | ||||||
|  |       transition: border-color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); | ||||||
|  |  | ||||||
|  |       &:hover { | ||||||
|  |         border-color: $placeholderColor; | ||||||
|  |       } | ||||||
|  |  | ||||||
|  |       i { | ||||||
|  |         display: flex; | ||||||
|  |         position: relative; | ||||||
|  |         align-items: center; | ||||||
|  |         justify-content: center; | ||||||
|  |         width: 30px; | ||||||
|  |         height: 100%; | ||||||
|  |         line-height: 32px; | ||||||
|  |         font-size: 14px; | ||||||
|  |         text-align: center; | ||||||
|  |         color: #d0d4dc; | ||||||
|  |         transform: rotateZ(180deg); | ||||||
|  |       } | ||||||
|  |  | ||||||
|  |       .el-icon-circle-close:hover { | ||||||
|  |         opacity: 0.6; | ||||||
|  |       } | ||||||
|  |  | ||||||
|  |       span { | ||||||
|  |         flex: 1; | ||||||
|  |         padding: 0 15px; | ||||||
|  |         font-size: 12px; | ||||||
|  |         color: $placeholderColor; | ||||||
|  |       } | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  | </style> | ||||||
		Reference in New Issue
	
	Block a user