4 changed files with 565 additions and 152 deletions
			
			
		| @ -0,0 +1,551 @@ | |||
| <template> | |||
|   <div v-if="pageLoading" class="resi-container"> | |||
|     <el-card class="resi-card-table"> | |||
|       <div class="resi-row-btn"> | |||
|         <el-select | |||
|         v-model="value" | |||
|           placeholder="请选择" | |||
|           size="small" | |||
|           clearable | |||
|         > | |||
|           <el-option | |||
|             v-for="item in options" | |||
|             :key="item.value" | |||
|             :label="item.label" | |||
|             :value="item.value" | |||
|           > | |||
|           </el-option> | |||
|         </el-select> | |||
|         <el-select | |||
|         v-model="value" | |||
|           placeholder="请选择" | |||
|           size="small" | |||
|           clearable | |||
|         > | |||
|           <el-option | |||
|             v-for="item in options" | |||
|             :key="item.value" | |||
|             :label="item.label" | |||
|             :value="item.value" | |||
|           > | |||
|           </el-option> | |||
|         </el-select> | |||
|         <el-button type="primary" size="mini" @click="handleSearch">查询</el-button> | |||
|       </div> | |||
|       <el-table | |||
|         :data="tableData" | |||
|         row-key="id" | |||
|         v-loading="tableLoading" | |||
|         border | |||
|         style="width: 100%" | |||
|         class="resi-table" | |||
|       > | |||
|         <el-table-column label="序号" type="index" align="center" width="50"> | |||
|         </el-table-column> | |||
|         <el-table-column | |||
|           v-for="item in tableHeader" | |||
|           :key="item.columnName" | |||
|           :prop="item.columnName" | |||
|           :label="item.label" | |||
|           align="center" | |||
|           width="180" | |||
|         > | |||
|           <template slot-scope="scope"> | |||
|             <el-image | |||
|             v-if="filterImage(item.columnName)" | |||
|             style="width: 70px; height: 70px" | |||
|             :src="handleFilterSpan(scope.row, item) " | |||
|             fit="fill"></el-image> | |||
|             <span v-else>{{ handleFilterSpan(scope.row, item) }}</span> | |||
|           </template> | |||
|         </el-table-column> | |||
|         <el-table-column fixed="right" label="操作" align="center" width="120"> | |||
|           <template slot-scope="scope"> | |||
|             <el-button | |||
|               @click="handleLook(scope.row)" | |||
|               type="text" | |||
|               size="small" | |||
|               class="btn-color-look" | |||
|               >{{(scope.row.status === 'show'&&'隐藏') || '显示'}}</el-button | |||
|             > | |||
|             <el-button | |||
|                 @click="handleEdit(scope.row)" | |||
|                 type="text" | |||
|                 size="small" | |||
|                 class="btn-color-edit" | |||
|                 >编辑</el-button | |||
|               > | |||
|           </template> | |||
|         </el-table-column> | |||
|       </el-table> | |||
|       <div> | |||
|         <el-pagination | |||
|           @size-change="handleSizeChange" | |||
|           @current-change="handleCurrentChange" | |||
|           :current-page.sync="currentPage" | |||
|           :page-sizes="[20, 50, 100, 200]" | |||
|           :page-size="pageSize" | |||
|           layout="sizes, prev, pager, next" | |||
|           :total="total" | |||
|         > | |||
|         </el-pagination> | |||
|       </div> | |||
|     </el-card> | |||
| 
 | |||
|     <el-dialog | |||
|       title="居民类别配置" | |||
|       :visible.sync="dialogVisible" | |||
|       width="40%" | |||
|       append-to-body | |||
|       :close-on-click-modal="false" | |||
|       :before-close="handlerCancle" | |||
|     > | |||
|       <el-form label-width="100px" :model="form" :rules="rules" ref="ruleForm"> | |||
|         <el-form-item label="类别名称"> | |||
|           <el-input v-model="form.label" size="small" style="width: 180px;" disabled></el-input> | |||
|         </el-form-item> | |||
|         <el-form-item label="管理平台图标" prop="managementIcon"> | |||
|           <el-upload class="avatar-uploader" | |||
|             :action="uploadUlr" | |||
|             :data="{customerId:customerId}" | |||
|             :show-file-list="false" | |||
|             :on-success="(response, file, fileList) => handleImgSuccess('managementIcon', response, file, fileList)" | |||
|             :before-upload="beforeImgUpload"> | |||
|             <img v-if="form.managementIcon" | |||
|               :src="form.managementIcon" | |||
|               style="width:70px;height:70px" | |||
|               class="function-icon"> | |||
|             <i v-else class="el-icon-plus avatar-uploader-icon"></i> | |||
|           </el-upload> | |||
|         </el-form-item> | |||
|         <el-form-item label="数据平台图标" prop="dataIcon"> | |||
|           <el-upload class="avatar-uploader" | |||
|             :action="uploadUlr" | |||
|             :data="{customerId:customerId}" | |||
|             :show-file-list="false" | |||
|             :on-success="(response, file, fileList) => handleImgSuccess('dataIcon', response, file, fileList)" | |||
|             :before-upload="beforeImgUpload"> | |||
|             <img v-if="form.dataIcon" | |||
|               :src="form.dataIcon" | |||
|               style="width:70px;height:70px" | |||
|               class="function-icon"> | |||
|             <i v-else class="el-icon-plus avatar-uploader-icon"></i> | |||
|           </el-upload> | |||
|         </el-form-item> | |||
|         <el-form-item label="房屋显示图标" prop="houseShowIcon"> | |||
|           <el-upload class="avatar-uploader" | |||
|             :action="uploadUlr" | |||
|             :data="{customerId:customerId}" | |||
|             :show-file-list="false" | |||
|             :on-success="(response, file, fileList) => handleImgSuccess('houseShowIcon', response, file, fileList)" | |||
|             :before-upload="beforeImgUpload"> | |||
|             <img v-if="form.houseShowIcon" | |||
|               :src="form.houseShowIcon" | |||
|               style="width:70px;height:70px" | |||
|               class="function-icon"> | |||
|             <i v-else class="el-icon-plus avatar-uploader-icon"></i> | |||
|           </el-upload> | |||
|         </el-form-item> | |||
|         <el-form-item label="是否预警"> | |||
|           <el-switch v-model="form.warn"></el-switch> | |||
|         </el-form-item> | |||
|         <el-form-item label="黄色预警"> | |||
|           <el-input-number v-model="form.level1" :min="0" size="small" label="描述文字"></el-input-number> 人/楼宇 | |||
|         </el-form-item> | |||
|         <el-form-item label="红色预警"> | |||
|           <el-input-number v-model="form.level2" :min="0" size="small" label="描述文字"></el-input-number> 人/楼宇 | |||
|         </el-form-item> | |||
|       </el-form> | |||
|       <div class="resi-btns"> | |||
|         <el-button size="small" @click="handlerCancle">取消</el-button> | |||
|         <el-button | |||
|           type="primary" | |||
|           size="small" | |||
|           :loading="btnLoading" | |||
|           @click="handleSUbmit" | |||
|           >提交</el-button | |||
|         > | |||
|       </div> | |||
|     </el-dialog> | |||
| 
 | |||
|   </div> | |||
| </template> | |||
| 
 | |||
| <script> | |||
| import axios from 'axios' | |||
| import Sortable from 'sortablejs' | |||
| export default { | |||
|   data() { | |||
|     return { | |||
|       tableLoading: false, | |||
|       btnLoading: false, | |||
|       disabled: false, | |||
|       pageLoading: false, | |||
|       dialogVisible: false, | |||
|       uploadUlr: window.SITE_CONFIG['apiURL'] + '/oss/file/uploadqrcodeV2', | |||
|       currentPage: 1, | |||
|       pageSize: 20, | |||
|       total: null, | |||
|       conditions: [], | |||
|       tableData: [], | |||
|       value: '', | |||
|       options: [ | |||
|         { | |||
|           label: '是', | |||
|           value: 1 | |||
|         },{ | |||
|           label: '否', | |||
|           value: 2 | |||
|         } | |||
|       ], | |||
|       tableHeader: [ | |||
|         { | |||
|           label: '类别名称', | |||
|           columnName: 'label' | |||
|         }, { | |||
|           label: '管理平台图标', | |||
|           columnName: 'managementIcon' | |||
|         }, { | |||
|           label: '数据平台图标', | |||
|           columnName: 'dataIcon' | |||
|         }, { | |||
|           label: '房屋显示图标', | |||
|           columnName: 'houseShowIcon' | |||
|         }, { | |||
|           label: '状态', | |||
|           columnName: 'status', | |||
|           options: [{ | |||
|             value: 'show', | |||
|             label: '显示' | |||
|           }, { | |||
|             value: 'hidden', | |||
|             label: '隐藏' | |||
|           }] | |||
|         }, { | |||
|           label: '是否预警', | |||
|           columnName: 'warn', | |||
|           options: [{ | |||
|             value: '1', | |||
|             label: '是' | |||
|           }, { | |||
|             value: '0', | |||
|             label: '否' | |||
|           }] | |||
|         }, { | |||
|           label: '黄色预警', | |||
|           columnName: 'level1' | |||
|         }, { | |||
|           label: '红色预警', | |||
|           columnName: 'level2' | |||
|         } | |||
|       ], | |||
|       customerId: '', | |||
|       form: { | |||
|         label: '', | |||
|         dataIcon: '', | |||
|         managementIcon: '', | |||
|         houseShowIcon: '', | |||
|         warn: '', | |||
|         level1: '', | |||
|         level2: '' | |||
|       }, | |||
|       rules: { | |||
|         managementIcon: [{ required: true, message: '管理平台图标不能为空', trigger: 'blur' }], | |||
|         dataIcon: [{ required: true, message: '数据平台图标不能为空', trigger: 'blur' }], | |||
|         houseShowIcon: [{ required: true, message: '房屋显示图标不能为空', trigger: 'blur' }] | |||
|       } | |||
|     } | |||
|   }, | |||
|   async created() { | |||
|     this.customerId = localStorage.getItem('customerId') | |||
|     this.getTableData() | |||
|     this.pageLoading = true | |||
|   }, | |||
|   mounted() { | |||
|     this.rowDrop() | |||
|   }, | |||
|   methods: { | |||
|     rowDrop() { | |||
|       const tbody = document.querySelector('.el-table__body-wrapper tbody') | |||
|       const _this = this | |||
|       Sortable.create(tbody, { | |||
|         onEnd({ newIndex, oldIndex }) { | |||
|           const currRow = _this.tableData.splice(oldIndex, 1)[0] | |||
|           _this.tableData.splice(newIndex, 0, currRow) | |||
|           console.log('rowdrap', newIndex, oldIndex) | |||
|           if (newIndex || newIndex === 0) _this.sortData() | |||
|           //  | |||
|         } | |||
|       }) | |||
|     }, | |||
|     computedWidth(label) { | |||
|       const wd = 20 * label.length | |||
|       return wd > 80 ? wd : 80 | |||
|     }, | |||
|     filterImage(item) { | |||
|       const arr = ['managementIcon', 'dataIcon', 'houseShowIcon'] | |||
|       return arr.includes(item) | |||
|     }, | |||
|     handleSizeChange(val) { | |||
|       console.log(`每页 ${val} 条`) | |||
|       this.pageSize = val | |||
|       this.getTableData() | |||
|     }, | |||
|     handleCurrentChange(val) { | |||
|       console.log(`当前页: ${val}`) | |||
|       this.currentPage = val | |||
|       this.getTableData() | |||
|     }, | |||
|     handleFilterSpan(row, item) { | |||
|       let _val = '' | |||
|       if (item.options && item.options.length > 0) { | |||
|         item.options.forEach((n) => { | |||
|           if (n.value === row[item.columnName]) _val = n.label | |||
|         }) | |||
|       } | |||
|       return _val || row[item.columnName] | |||
|     }, | |||
|     handleSearch(val) { | |||
|       console.log('searchhh--', val) | |||
|       this.currentPage = 1 | |||
|       this.conditions = val | |||
|       this.getTableData() | |||
|     }, | |||
|      | |||
|     handlerCancle() { | |||
|       this.dialogVisible = false | |||
|     }, | |||
|     beforeImgUpload (file) { | |||
|       const isPNG = (file.type === 'image/png') || (file.type === 'image/jpeg') | |||
|       const isLt1M = file.size / 1024 / 1024 < 1 | |||
| 
 | |||
|       if (!isPNG) { | |||
|         this.$message.error('上传图片只能是 PNG 格式!') | |||
|       } | |||
|       if (!isLt1M) { | |||
|         this.$message.error('上传图片大小不能超过 1MB!') | |||
|       } | |||
|       return isPNG && isLt1M | |||
|     }, | |||
|     handleImgSuccess (type, res, file) { | |||
|       if (res.code === 0 && res.msg === 'success') { | |||
| 
 | |||
|         console.log('type', type) | |||
|         console.log('res.data.url', res.data.url) | |||
|         this.form[type] = res.data.url | |||
| 
 | |||
|       } else { | |||
|         this.$message.error(res.msg) | |||
|       } | |||
|     }, | |||
|     async handleLook(row) { | |||
|       const _show = { | |||
|         show: 'hidden', | |||
|         hidden: 'show' | |||
|       } | |||
|       const params = { | |||
|         id: row.id, | |||
|         status: _show[row.status] | |||
|       } | |||
|       this.$http | |||
|         .post('/oper/customize/resicategorystatsconfig/updatestatus', params) | |||
|         .then(({ data: res }) => { | |||
|           if (res.code !== 0) { | |||
|             return this.$message.error(res.msg) | |||
|           } else { | |||
|             this.getTableData() | |||
|           } | |||
|         }) | |||
|         .catch(() => { | |||
|           return this.$message.error('网络错误') | |||
|         }) | |||
|     }, | |||
|     async handleEdit(row) { | |||
|        | |||
|       this.form = { ...row } | |||
|       this.dialogVisible = true | |||
|     }, | |||
|     async handleSUbmit() { | |||
|       this.$refs.ruleForm.validate(async (valid) => { | |||
|         if (valid) { | |||
|           this.btnLoading = true | |||
|           const _form = { | |||
|             ...this.form, | |||
|             warn: (this.form.warn && 1) || 0 | |||
|           } | |||
|           await this.$http | |||
|             .post('/oper/customize/resicategorystatsconfig/update', _form) | |||
|             .then(({ data: res }) => { | |||
|               if (res.code !== 0) { | |||
|                 return this.$message.error(res.msg) | |||
|               } else { | |||
|                 this.dialogVisible = false | |||
|                 this.getTableData() | |||
|               }  | |||
|             }) | |||
|             .catch(() => { | |||
|               return this.$message.error('网络错误') | |||
|             }) | |||
|             this.btnLoading = false | |||
|         } else { | |||
|           console.log('error submit!!'); | |||
|           return false; | |||
|         } | |||
|       }); | |||
|        | |||
|     }, | |||
|     handleDel(row) { | |||
|       let params = { | |||
|         formCode: 'resi_base_info', | |||
|         icResiUserId: row.icResiUserId | |||
|       } | |||
|       console.log('row1', row) | |||
|       this.$http | |||
|         .post('/epmetuser/icresiuser/delete', params) | |||
|         .then(({ data: res }) => { | |||
|           console.log('row2', row) | |||
|           if (res.code !== 0) { | |||
|             return this.$message.error(res.msg) | |||
|           } else { | |||
|             console.log('row3', row) | |||
|             this.$message.success('删除成功') | |||
|             this.getTableData() | |||
|           } | |||
|         }) | |||
|         .catch((err) => { | |||
|           console.log('row4', err) | |||
|           return this.$message.error('网络错误') | |||
|         }) | |||
|     }, | |||
|     sortData() { | |||
|       const _data = this.tableData.map((item, index)=> { | |||
|         return { | |||
|           id: item.id, | |||
|           sort: index | |||
|         } | |||
|       }) | |||
|       this.$http | |||
|         .post('/oper/customize/resicategorystatsconfig/updatesort', _data) | |||
|         .then(({ data: res }) => { | |||
|           if (res.code !== 0) { | |||
|             return this.$message.error(res.msg) | |||
|           } else { | |||
|             // this.getTableData() | |||
|           } | |||
|         }) | |||
|         .catch((err) => { | |||
|           console.log('row4', err) | |||
|           return this.$message.error('网络错误') | |||
|         }) | |||
|     }, | |||
|     getTableHeader() { | |||
|       this.$http | |||
|         .post('/oper/customize/icform/tableheaders', { | |||
|           formCode: 'resi_base_info' | |||
|         }) | |||
|         .then(({ data: res }) => { | |||
|           if (res.code !== 0) { | |||
|             return this.$message.error(res.msg) | |||
|           } else { | |||
|             this.tableHeader = res.data | |||
|           } | |||
|         }) | |||
|         .catch(() => { | |||
|           return this.$message.error('网络错误') | |||
|         }) | |||
|     }, | |||
|     async getTableData() { | |||
|       this.tableLoading = true | |||
|       let params = { | |||
|         // formCode: 'resi_base_info', | |||
|         pageNo: this.currentPage, | |||
|         pageSize: this.pageSize | |||
|       } | |||
|       await this.$http | |||
|         .post('/oper/customize/resicategorystatsconfig/list', params) | |||
|         .then(({ data: res }) => { | |||
|           if (res.code !== 0) { | |||
|             return this.$message.error(res.msg) | |||
|           } else { | |||
|             this.tableData = res.data | |||
|             this.total = res.data.total | |||
|           } | |||
|         }) | |||
|         .catch(() => { | |||
|           return this.$message.error('网络错误') | |||
|         }) | |||
|       this.tableLoading = false | |||
|     } | |||
|      | |||
|   } | |||
| } | |||
| </script> | |||
| 
 | |||
| <style lang="scss" scoped> | |||
| .resi-container .resi-card-table { | |||
|   ::v-deep .el-table th { | |||
|     color: #fff; | |||
|     background-color: rgba(33, 149, 254, 1); | |||
|     border-right: 1px solid rgba(33, 149, 254, 1);; | |||
|   } | |||
| } | |||
| .resi-table { | |||
|   ::v-deep .el-button--text { | |||
|     text-decoration: underline; | |||
|   } | |||
|   ::v-deep .btn-color-del { | |||
|     margin-left: 10px; | |||
|     color: rgba(213, 16, 16, 1); | |||
|   } | |||
|   ::v-deep .btn-color-edit { | |||
|     color: rgba(0, 167, 169, 1); | |||
|   } | |||
| } | |||
| </style> | |||
| 
 | |||
| <style lang="scss" scoped> | |||
| .resi-row-btn { | |||
|   display: flex; | |||
|   margin-bottom: 13px; | |||
|   ::v-deep .el-button { | |||
|     // margin-left: 10px; | |||
|     border: 0; | |||
|   } | |||
|   ::v-deep .el-select { | |||
|     margin-right: 10px; | |||
|   } | |||
| } | |||
| .avatar-uploader { | |||
|   ::v-deep | |||
|   .el-upload { | |||
|     cursor: pointer; | |||
|     position: relative; | |||
|     overflow: hidden; | |||
|   } | |||
|   .el-upload:hover { | |||
|     border-color: #409EFF; | |||
|   } | |||
|   .avatar { | |||
|     width: 70px; | |||
|     height: 70px; | |||
|     display: block; | |||
|   } | |||
|   .avatar-uploader-icon { | |||
|     border: 1px dashed #d9d9d9; | |||
|     border-radius: 6px; | |||
|     font-size: 28px; | |||
|     color: #8c939d; | |||
|     width: 70px; | |||
|     height: 70px; | |||
|     line-height: 70px; | |||
|     text-align: center; | |||
|   } | |||
| } | |||
|    | |||
|    | |||
| 
 | |||
| .resi-btns { | |||
|   margin-top: 20px; | |||
|   text-align: center; | |||
| } | |||
| </style> | |||
					Loading…
					
					
				
		Reference in new issue