帮扶申报
This commit is contained in:
		
							
								
								
									
										61
									
								
								packages/work/AppHelpDeclaration/AppHelpDeclaration.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										61
									
								
								packages/work/AppHelpDeclaration/AppHelpDeclaration.vue
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,61 @@ | ||||
| <template> | ||||
|   <div class="AppHelpDeclaration"> | ||||
|     <keep-alive :include="['List']"> | ||||
|       <component ref="component" :is="component" @change="onChange" :params="params" :instance="instance" :dict="dict"></component> | ||||
|     </keep-alive> | ||||
|   </div> | ||||
|    | ||||
| </template> | ||||
|  | ||||
| <script> | ||||
|   import Detail from './components/Detail' | ||||
|   import List from './components/List' | ||||
|  | ||||
|   export default { | ||||
|     name: "AppHelpDeclaration", | ||||
|     label: '帮扶申报', | ||||
|  | ||||
|     components: {List, Detail}, | ||||
|  | ||||
|     props: { | ||||
|       instance: Function, | ||||
|       dict: Object, | ||||
|       permissions: Function | ||||
|     }, | ||||
|     data() { | ||||
|       return { | ||||
|         component: 'List', | ||||
|         params: {}, | ||||
|         include: [] | ||||
|       } | ||||
|     }, | ||||
|     created(){ | ||||
|     }, | ||||
|     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" scoped> | ||||
| .AppHelpDeclaration{ | ||||
|   width: 100%; | ||||
|   height: 100%; | ||||
| } | ||||
| </style> | ||||
							
								
								
									
										302
									
								
								packages/work/AppHelpDeclaration/components/Detail.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										302
									
								
								packages/work/AppHelpDeclaration/components/Detail.vue
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,302 @@ | ||||
| <template> | ||||
|   <section class="detail"> | ||||
|     <ai-detail> | ||||
|       <template #title> | ||||
|         <ai-title title="帮扶申请详情" isShowBottomBorder isShowBack @onBackClick="cancel(true)"> | ||||
|           <template #rightBtn> | ||||
|             <!-- <ai-wechat-selecter :instance="instance" v-model="addUser" :isMultiple="form.readType == '0' ? false : true" @change="onChange" v-if="form.status === '2' && form.readType == '0'"> | ||||
|               <el-button | ||||
|                 size="small" | ||||
|                 type="primary" | ||||
|                 icon="iconfont iconResetting"> | ||||
|                 再次流转 | ||||
|               </el-button> | ||||
|             </ai-wechat-selecter> --> | ||||
|             <el-button type="primary" @click="changeStatus('转交事件')" size="small"> 转交事件</el-button> | ||||
|             <el-button type="primary" @click="changeStatus('审核处理')" size="small"> 审核处理</el-button> | ||||
|           </template> | ||||
|         </ai-title> | ||||
|          | ||||
|       </template> | ||||
|       <template #content> | ||||
|         <div style="display:flex;"> | ||||
|           <ai-card title="申请信息" style="flex:2;margin-right:32px;"> | ||||
|             <template slot="content"> | ||||
|               <ai-wrapper class="mar-t16" label-width="100px" :columnsNumber="2"> | ||||
|                 <ai-info-item label="申请人姓名:"><span>{{form.documentCode || '-'}}</span></ai-info-item> | ||||
|                 <ai-info-item label="身份证号:"><span>{{$dict.getLabel("officialDocumentName", form.documentType) || '-'}}</span></ai-info-item> | ||||
|                 <ai-info-item label="联系方式:"><span>{{$dict.getLabel("officialDocumentConfidentialityLevel", form.confidentialityLevel) || '-'}}</span></ai-info-item> | ||||
|                 <ai-info-item label="申报方式:"><span>{{form.documentCode || '-'}}</span></ai-info-item> | ||||
|                 <ai-info-item label="家庭人口数:"><span>{{form.documentCode || '-'}}</span></ai-info-item> | ||||
|                 <ai-info-item label="排查人员:"><span>{{form.documentCode || '-'}}</span></ai-info-item> | ||||
|                 <ai-info-item label="申请帮扶原因:"><span>{{form.documentCode || '-'}}</span></ai-info-item> | ||||
|                 <ai-info-item label="上报时间:"><span>{{form.documentCode || '-'}}</span></ai-info-item> | ||||
|               </ai-wrapper> | ||||
|               <ai-wrapper label-width="100px" :columnsNumber="1"> | ||||
|                 <ai-info-item label="风险说明:"><span>{{$dict.getLabel("officialDocumentReadType", form.readType) || '-'}}</span></ai-info-item> | ||||
|               </ai-wrapper> | ||||
|               <ai-file-list v-if="form.files && form.files.length" | ||||
|                 :fileList="form.files" | ||||
|                 :fileOps="{ name: 'name', size: 'fileSizeStr' }" | ||||
|               ></ai-file-list> | ||||
|             </template> | ||||
|           </ai-card> | ||||
|           <ai-card title="办理进度" style="flex:1;"> | ||||
|             <template #right> | ||||
|               <p style="color:#666;font-size:14px;">当前状态:待处理</p> | ||||
|             </template> | ||||
|             <template #content> | ||||
|               <div class="ai-steps"> | ||||
|                 <div class="ai-steps__item" v-for="(item, index) in form.flowUsers" :key="index"> | ||||
|                   <div class="ai-steps__item--left"> | ||||
|                     <div class="ai-steps__item--index">1</div> | ||||
|                   </div> | ||||
|                   <div class="ai-steps__item--right"> | ||||
|                     <div class="ai-steps__item__avatar"> | ||||
|                       <img :src="item.avatar" v-if="item.avatar"> | ||||
|                       <h2 v-else>{{ formatName(item.flowUserName) }}</h2> | ||||
|                     </div> | ||||
|                     <div class="ai-steps__item--content"> | ||||
|                       <h2>李四发起排查上报,等待处理</h2> | ||||
|                       <p>{{ item.flowTime }}</p> | ||||
|                     </div> | ||||
|                   </div> | ||||
|                 </div> | ||||
|               </div> | ||||
|             </template> | ||||
|           </ai-card> | ||||
|         </div> | ||||
|         <ai-dialog :title="dialogTitie" :visible.sync="showDialog" @onConfirm="queMeeting('writeInfo')" @onCancel="showDialog=false;" @close="$refs.dialogInfo.resetFields()"  width="520px"> | ||||
|           <div class="addother_main" style="width:400px;margin:auto;"> | ||||
|             <el-form :model="dialogInfo" status-icon ref="writeInfo" label-width="100px" class="demo-ruleForm"> | ||||
|               <el-form-item label="请假原因:" prop="reason" autocomplete="off" :rules="{ required: true, message: '请假原因不能为空', trigger: 'blur' }"> | ||||
|                 <el-input v-model.trim="dialogInfo.reason" autocomplete="off" size="mini" placeholder="请输入..." type="textarea" :rows="4" :maxlength="100" show-word-limit></el-input> | ||||
|               </el-form-item> | ||||
|             </el-form> | ||||
|           </div> | ||||
|         </ai-dialog> | ||||
|       </template> | ||||
|     </ai-detail> | ||||
|   </section> | ||||
| </template> | ||||
|  | ||||
| <script> | ||||
| export default { | ||||
|   name: "detail", | ||||
|   props: { | ||||
|     instance: Function, | ||||
|     dict: Object, | ||||
|     permissions: Function, | ||||
|     params: Object | ||||
|   }, | ||||
|   data() { | ||||
|     return { | ||||
|       form: {}, | ||||
|       showDialog: false, | ||||
|       dialogTitle: '', | ||||
|       dialogInfo: {} | ||||
|     }; | ||||
|   }, | ||||
|   computed: { | ||||
|      | ||||
|   }, | ||||
|   created() { | ||||
|     this.dict.load('issuingUnit','officialDocumentEmergencyLevel', 'officialDocumentReadType', 'officialDocumentConfidentialityLevel', 'officialDocumentName', 'documentFlowStatus', 'readingStatus'); | ||||
|   }, | ||||
|   mounted() { | ||||
|     this.form = this.params | ||||
|     this.getDetail() | ||||
|   }, | ||||
|   methods: {  | ||||
|     formatName (name) { | ||||
|       if(name == undefined){ | ||||
|         return | ||||
|       } | ||||
|       return name.substr(name.length - 2, name.length > 2 ? (name.length - 1) : name.length) | ||||
|     }, | ||||
|     onChange() { | ||||
|       if (!this.addUser.length) { | ||||
|         return this.$message.error('请选择流转人员') | ||||
|       } | ||||
|  | ||||
|       if (this.form.readType === '0' && this.form.status === '0') { | ||||
|         // 开始流转 | ||||
|         let data = this.form | ||||
|         const flowUsers = [...this.addUser].map(item => { | ||||
|           return { | ||||
|             flowUserId: item.id, | ||||
|             flowUserName: item.name, | ||||
|             avatar: item.avatar | ||||
|           } | ||||
|         }) | ||||
|         const fileIds = data.files.length ? data.files.map(item => item.id) : [] | ||||
|         delete data.files | ||||
|         this.instance.post(`/app/appofficialdocumentinfo/addOrUpdate`, { | ||||
|           id: this.form.id, | ||||
|           ...data, | ||||
|           status: '1', | ||||
|           flowUsers: flowUsers, | ||||
|           fileIds | ||||
|         }).then(res => { | ||||
|           if (res.code == 0) { | ||||
|             this.$message.success('流转成功') | ||||
|             this.getDetail() | ||||
|           } | ||||
|         }) | ||||
|       } else { | ||||
|         // 再次流转 | ||||
|         this.instance.post(`/app/appofficialdocumentinfo/flowById`, null, { | ||||
|           params: { | ||||
|             flag: '1', | ||||
|             flowUserId: this.addUser[0].id, | ||||
|             flowUserName: this.addUser[0].name, | ||||
|             avatar: this.addUser[0].avatar, | ||||
|             id: this.form.id | ||||
|           } | ||||
|         }).then(res => { | ||||
|           if (res.code == 0) { | ||||
|             this.$message.success('添加成功') | ||||
|             this.getDetail(this.id) | ||||
|           } | ||||
|         }) | ||||
|       } | ||||
|     }, | ||||
|     getDetail() { | ||||
|       this.instance.post(`/app/appofficialdocumentinfo/queryDetailById?id=${this.params.id}&flag=0`, null).then((res) => { | ||||
|         if (res.code == 0) { | ||||
|           this.form = {...res.data} | ||||
|           this.form.files = this.form.files || [] | ||||
|           if (res.data.readType === '1') { | ||||
|             this.tableData = res.data.flowUsers | ||||
|             this.total = res.data.flowUsers.length | ||||
|           } | ||||
|         } | ||||
|       }); | ||||
|     }, | ||||
|     cancel(isRefresh) { | ||||
|       this.$emit('change', { | ||||
|         type: 'list', | ||||
|         isRefresh: !!isRefresh | ||||
|       }) | ||||
|     }, | ||||
|     changeStatus(title) { | ||||
|       this.dialogTitle = title | ||||
|       this.showDialog = true | ||||
|     } | ||||
|   }, | ||||
| }; | ||||
| </script> | ||||
|  | ||||
| <style lang="scss" scoped> | ||||
| .detail { | ||||
|   height: 100%; | ||||
|   overflow: auto; | ||||
|   background: #f3f6f9; | ||||
|   .above{ | ||||
|     overflow: hidden; | ||||
|     width: 100%; | ||||
|     .left{ | ||||
|       width: 50%; | ||||
|       float: left; | ||||
|     } | ||||
|     .right{ | ||||
|       width: 50%; | ||||
|       float: right; | ||||
|     } | ||||
|     .el-select{ | ||||
|       width: 100%; | ||||
|     } | ||||
|     .el-date-editor.el-input{ | ||||
|       width: 100%; | ||||
|     } | ||||
|   } | ||||
|   .iconEdit,.Edit{ | ||||
|     color:#5088FF; | ||||
|     font-size: 12px; | ||||
|     cursor: pointer; | ||||
|     padding-left: 8px; | ||||
|   } | ||||
| } | ||||
|   .ai-steps { | ||||
|     padding-bottom: 40px; | ||||
|     .ai-steps__item { | ||||
|       display: flex; | ||||
|       position: relative; | ||||
|       padding-bottom: 44px; | ||||
|  | ||||
|       &:after { | ||||
|         position: absolute; | ||||
|         left: 12px; | ||||
|         top: 26px; | ||||
|         width: 1px; | ||||
|         height: calc(100% - 30px); | ||||
|         background: #DDDDDD; | ||||
|         content: " "; | ||||
|       } | ||||
|  | ||||
|       &:last-child { | ||||
|         padding-bottom: 0; | ||||
|  | ||||
|         &:after { | ||||
|           display: none; | ||||
|         } | ||||
|       } | ||||
|  | ||||
|       .ai-steps__item--left { | ||||
|         position: relative; | ||||
|         margin-right: 16px; | ||||
|         .ai-steps__item--index{ | ||||
|            width: 24px; | ||||
|           height: 24px; | ||||
|           line-height: 24px; | ||||
|           border-radius: 50%; | ||||
|           border: 1px solid #ddd; | ||||
|           text-align: center; | ||||
|           color: #ddd; | ||||
|           font-size: 12px; | ||||
|         } | ||||
|          | ||||
|       } | ||||
|  | ||||
|       .ai-steps__item--right { | ||||
|         flex-shrink: 0; | ||||
|         color: #666; | ||||
|         font-size: 14px; | ||||
|         display: flex; | ||||
|         .ai-steps__item--content { | ||||
|           span { | ||||
|             color: #333; | ||||
|             font-size: 16px; | ||||
|           } | ||||
|  | ||||
|           h2 { | ||||
|             color: #666666; | ||||
|             font-size: 14px; | ||||
|           } | ||||
|  | ||||
|           p { | ||||
|             margin-top: 8px; | ||||
|             color: #666666; | ||||
|             font-size: 14px; | ||||
|           } | ||||
|         } | ||||
|  | ||||
|         .ai-steps__item__avatar { | ||||
|           width: 40px; | ||||
|           height: 40px; | ||||
|           margin-right: 8px; | ||||
|  | ||||
|           img, h2 { | ||||
|             width: 40px; | ||||
|             height: 40px; | ||||
|             line-height: 40px; | ||||
|             text-align: center; | ||||
|             color: #fff; | ||||
|             font-size: 14px; | ||||
|             background: #2266FF; | ||||
|           } | ||||
|         } | ||||
|       } | ||||
|     } | ||||
|   } | ||||
| </style> | ||||
							
								
								
									
										246
									
								
								packages/work/AppHelpDeclaration/components/List.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										246
									
								
								packages/work/AppHelpDeclaration/components/List.vue
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,246 @@ | ||||
| <template> | ||||
|   <ai-list class="list"> | ||||
|     <template slot="title"> | ||||
|       <ai-title title="帮扶申报" isShowBottomBorder></ai-title> | ||||
|     </template> | ||||
|     <template slot="content"> | ||||
|       <ai-search-bar> | ||||
|         <template slot="left"> | ||||
|           <ai-select | ||||
|               v-model="searchObj.documentType" | ||||
|               placeholder="申请帮扶原因" | ||||
|               clearable | ||||
|               @change="(page.current = 1), getList()" | ||||
|               :selectList="dict.getDict('officialDocumentName')" | ||||
|           ></ai-select> | ||||
|           <ai-select | ||||
|               v-model="searchObj.confidentialityLevel" | ||||
|               placeholder="申报方式" | ||||
|               clearable | ||||
|               @change="(page.current = 1), getList()" | ||||
|               :selectList="dict.getDict('officialDocumentConfidentialityLevel')" | ||||
|           ></ai-select> | ||||
|           <ai-select | ||||
|               v-model="searchObj.confidentialityLevel" | ||||
|               placeholder="状态" | ||||
|               clearable | ||||
|               @change="(page.current = 1), getList()" | ||||
|               :selectList="dict.getDict('officialDocumentConfidentialityLevel')" | ||||
|           ></ai-select> | ||||
|         </template> | ||||
|         <template slot="right"> | ||||
|           <el-input placeholder="申请人姓名/联系方式" | ||||
|                     v-model="searchObj.name" | ||||
|                     size="small" | ||||
|                     v-throttle="() => {page.current = 1, getList()}" | ||||
|                     clearable | ||||
|                     @clear="page.current = 1, searchObj.name = '', getList()" | ||||
|                     prefix-icon="iconfont iconSearch"/> | ||||
|         </template> | ||||
|       </ai-search-bar> | ||||
|       <ai-table | ||||
|           :tableData="tableData" | ||||
|           :col-configs="colConfigs" | ||||
|           :total="page.total" | ||||
|           ref="aitableex" | ||||
|           :current.sync="page.current" | ||||
|           row-key="id" | ||||
|           default-expand-all | ||||
|           :size.sync="page.size" | ||||
|           @getList="getList" | ||||
|       > | ||||
|         <el-table-column slot="options" label="操作" align="center" width="200"> | ||||
|           <template slot-scope="{ row }"> | ||||
|             <el-button type="text" @click="goDetail(row)">详情</el-button> | ||||
|           </template> | ||||
|         </el-table-column> | ||||
|       </ai-table> | ||||
|     </template> | ||||
|   </ai-list> | ||||
| </template> | ||||
|  | ||||
| <script> | ||||
| export default { | ||||
|   name: "list", | ||||
|   props: { | ||||
|     instance: Function, | ||||
|     dict: Object, | ||||
|     permissions: Function, | ||||
|     areaId: String, | ||||
|   }, | ||||
|   data() { | ||||
|     return { | ||||
|       searchObj: { | ||||
|         documentType: '', | ||||
|         confidentialityLevel: '', | ||||
|         readType: '', | ||||
|         createTimeStart: null, | ||||
|         createTimeEnd: null, | ||||
|         name: '', | ||||
|       }, | ||||
|       page: { | ||||
|         size: 10, | ||||
|         current: 1, | ||||
|         total: 0, | ||||
|       }, | ||||
|       tableData: [], | ||||
|       shopList: [], | ||||
|       ids: [], | ||||
|     }; | ||||
|   }, | ||||
|   computed: { | ||||
|     colConfigs() { | ||||
|       return [ | ||||
|         { | ||||
|           prop: "documentCode", | ||||
|           label: "申请帮扶原因", | ||||
|         }, | ||||
|         { | ||||
|           prop: "documentName", | ||||
|           label: "返贫致贫风险说明", | ||||
|         }, | ||||
|         { | ||||
|           prop: "documentType", | ||||
|           label: "所在地区", | ||||
|           width: 120, | ||||
|           align: "center", | ||||
|           formart: (documentType) => | ||||
|               this.$dict.getLabel("officialDocumentName", documentType), | ||||
|         }, | ||||
|         { | ||||
|           prop: "readType", | ||||
|           label: "申请人姓名", | ||||
|           width: 120, | ||||
|           align: "center", | ||||
|           formart: (readType) => | ||||
|               this.$dict.getLabel("officialDocumentReadType", readType), | ||||
|         }, | ||||
|         { | ||||
|           prop: "confidentialityLevel", | ||||
|           label: "联系方式", | ||||
|           width: 120, | ||||
|           align: "center", | ||||
|           formart: (confidentialityLevel) => | ||||
|               this.$dict.getLabel("officialDocumentConfidentialityLevel", confidentialityLevel), | ||||
|         }, | ||||
|         { | ||||
|           prop: "flowUserName", | ||||
|           label: "申报方式", | ||||
|           width: 120, | ||||
|           align: "center", | ||||
|         }, | ||||
|         { | ||||
|           prop: "createTime", | ||||
|           label: "申报时间", | ||||
|           width: 120, | ||||
|           align: "center", | ||||
|         }, | ||||
|         { | ||||
|           prop: "status", | ||||
|           label: "状态", | ||||
|           width: 120, | ||||
|           align: "center", | ||||
|           render: (h, {row}) => { | ||||
|             return h('span', {style: {color: this.dict.getColor('documentStatus', row.status)}}, this.dict.getLabel('documentStatus', row.status)) | ||||
|           }, | ||||
|         }, | ||||
|         {slot: "options", label: "操作"}, | ||||
|       ]; | ||||
|     }, | ||||
|   }, | ||||
|   created() { | ||||
|     this.dict.load('officialDocumentName', 'officialDocumentConfidentialityLevel', 'officialDocumentReadType', 'documentStatus').then(() => { | ||||
|       this.$nextTick(() => this.getList()) | ||||
|     }) | ||||
|   }, | ||||
|   methods: { | ||||
|     changeTime() { | ||||
|       this.page.current = 1 | ||||
|       this.getList() | ||||
|     }, | ||||
|     getList() { | ||||
|       this.instance.post(`/app/appofficialdocumentinfo/list`, null, { | ||||
|         params: { | ||||
|           ...this.searchObj, | ||||
|           ...this.page | ||||
|         }, | ||||
|       }).then((res) => { | ||||
|         if (res.code == 0) { | ||||
|           this.tableData = res.data.records; | ||||
|           this.tableData.map((item) => { | ||||
|             if (item.createTime) { | ||||
|               item.createTime = item.createTime.substring(0, 10) | ||||
|             } else { | ||||
|               item.createTime = '-' | ||||
|             } | ||||
|           }) | ||||
|           this.page.total = res.data.total; | ||||
|         } | ||||
|       }); | ||||
|     }, | ||||
|     reset() { | ||||
|       Object.keys(this.searchObj).forEach((e) => { | ||||
|         this.searchObj[e] = ""; | ||||
|       }); | ||||
|       this.searchObj.createTimeStart = null; | ||||
|       this.searchObj.createTimeEnd = null; | ||||
|       this.getList(); | ||||
|     }, | ||||
|     toAdd(params) { | ||||
|       this.$emit('change', { | ||||
|         type: 'add', | ||||
|         params: params | ||||
|       }) | ||||
|     }, | ||||
|     goDetail(row) { | ||||
|       this.$emit('change', { | ||||
|         type: 'detail', | ||||
|         params: { | ||||
|           ...row | ||||
|         } | ||||
|       }) | ||||
|     }, | ||||
|   }, | ||||
| }; | ||||
| </script> | ||||
|  | ||||
| <style lang="scss" scoped> | ||||
| .list { | ||||
|   height: 100%; | ||||
|   overflow: auto; | ||||
|   background: #f3f6f9; | ||||
|  | ||||
|   ::v-deep .el-range-editor--small.el-input__inner { | ||||
|     width: 258px; | ||||
|   } | ||||
|  | ||||
|   ::v-deep .dateRange { | ||||
|     .dateLabel { | ||||
|       height: 32px; | ||||
|       border: 1px solid #D0D4DC; | ||||
|       line-height: 32px; | ||||
|       padding: 0 8px; | ||||
|       background: #F5F5F5; | ||||
|     } | ||||
|  | ||||
|     .el-input__inner { | ||||
|       border-radius: 0; | ||||
|       transform: translateX(-1px); | ||||
|     } | ||||
|   } | ||||
|  | ||||
|   .iconfont { | ||||
|     cursor: pointer; | ||||
|     margin-right: 8px; | ||||
|   } | ||||
|  | ||||
|   .iconCorrect { | ||||
|     color: #53b43b; | ||||
|   } | ||||
|  | ||||
|   .iconReject { | ||||
|     color: #e75555; | ||||
|     padding: 0 8px; | ||||
|   } | ||||
| } | ||||
| </style> | ||||
		Reference in New Issue
	
	Block a user