203 lines
		
	
	
		
			6.3 KiB
		
	
	
	
		
			Vue
		
	
	
	
	
	
			
		
		
	
	
			203 lines
		
	
	
		
			6.3 KiB
		
	
	
	
		
			Vue
		
	
	
	
	
	
| <template>
 | |
|   <section class="dictDetail">
 | |
|     <ai-detail>
 | |
|       <ai-title slot="title" title="字典信息" isShowBottomBorder isShowBack @onBackClick="$router.push({})"/>
 | |
|       <template #content>
 | |
|         <ai-card title="基本信息">
 | |
|           <template #content>
 | |
|             <el-form ref="dictDetailForm" :model="form" :rules="rules" size="small" label-width="110px">
 | |
|               <el-form-item required label="数据项:" prop="code">
 | |
|                 <el-input v-model="form.code" style="width: 259px;" clearable
 | |
|                           placeholder="请输入..."/>
 | |
|               </el-form-item>
 | |
|               <el-form-item required label="数据项名称:" prop="name">
 | |
|                 <el-input v-model="form.name" style="width: 259px;" clearable
 | |
|                           placeholder="请输入..."/>
 | |
|               </el-form-item>
 | |
|             </el-form>
 | |
|           </template>
 | |
|         </ai-card>
 | |
|         <ai-card title="数据值" v-if="$route.query.id">
 | |
|           <template #right>
 | |
|             <el-button type="text" icon="iconfont iconAdd"
 | |
|                        @click="form.dictionaryDetails.push({name:'',value:'',editable:true})"> 添加
 | |
|             </el-button>
 | |
|           </template>
 | |
|           <template #content>
 | |
|             <el-table border :data="form.dictionaryDetails" header-cell-class-name="table-header"
 | |
|                       cell-class-name="table-cell">
 | |
|               <el-table-column align="center" label="值">
 | |
|                 <div slot-scope="{row}">
 | |
|                   <el-input size="small" v-if="row.editable" v-model="row.value" clearable/>
 | |
|                   <span v-else>{{ row.dictValue }}</span>
 | |
|                 </div>
 | |
|               </el-table-column>
 | |
|               <el-table-column align="center" label="描述">
 | |
|                 <div slot-scope="{row}">
 | |
|                   <el-input size="small" v-if="row.editable" v-model="row.name" clearable/>
 | |
|                   <span v-else>{{ row.dictName }}</span>
 | |
|                 </div>
 | |
|               </el-table-column>
 | |
|               <el-table-column align="center" label="颜色">
 | |
|                 <div slot-scope="{row}">
 | |
|                   <el-color-picker v-if="row.editable" v-model="row.dictColor" size="medium"></el-color-picker>
 | |
|                   <span v-else>{{ row.dictColor || '未设置' }}</span>
 | |
|                 </div>
 | |
|               </el-table-column>
 | |
|               <el-table-column align="center" label="操作" width="109px">
 | |
|                 <div slot-scope="{row,$index}">
 | |
|                   <section v-if="row.editable">
 | |
|                     <el-button style="color: #2EA222" type="text" icon="iconfont iconCorrect"
 | |
|                                @click="addDict(row)"/>
 | |
|                     <el-button style="color: #f46" type="text" icon="iconfont iconClean"
 | |
|                                @click="cancelEdit(row,$index)"/>
 | |
|                   </section>
 | |
|                   <section v-else>
 | |
|                     <el-button class="dict-detail-operation" type="text" icon="iconfont iconEdit"
 | |
|                                @click="editDetail(row)"/>
 | |
|                     <el-button class="dict-detail-operation" type="text" icon="iconfont iconDelete"
 | |
|                                @click="delDictValue(row.id)"/>
 | |
|                   </section>
 | |
| 
 | |
|                 </div>
 | |
|               </el-table-column>
 | |
|             </el-table>
 | |
|           </template>
 | |
|         </ai-card>
 | |
|       </template>
 | |
|       <template #footer>
 | |
|         <el-button @click="$router.push({})">返回</el-button>
 | |
|         <el-button type="primary" @click="modifyDict">保存</el-button>
 | |
|       </template>
 | |
|     </ai-detail>
 | |
|   </section>
 | |
| </template>
 | |
| 
 | |
| <script>
 | |
| export default {
 | |
|   name: "dictDetail",
 | |
|   props: {
 | |
|     instance: Function,
 | |
|     permissions: Function
 | |
|   },
 | |
|   computed: {
 | |
|     rules() {
 | |
|       return {
 | |
|         code: [
 | |
|           {required: true, message: "请填写数据项"}
 | |
|         ],
 | |
|         name: [
 | |
|           {required: true, message: "请填写数据项名称"}
 | |
|         ],
 | |
|         // dictionaryDetails: [
 | |
|         //   {
 | |
|         //     validator: (r, v, cb) => {
 | |
|         //       if (v.every(item => item.dictName && item.dictValue)) {
 | |
|         //         cb()
 | |
|         //       }
 | |
|         //     }
 | |
|         //   }
 | |
|         // ]
 | |
|       }
 | |
|     }
 | |
|   },
 | |
|   data() {
 | |
|     return {
 | |
|       form: {
 | |
|         code: "",
 | |
|         name: "",
 | |
|         dictionaryDetails: []
 | |
|       },
 | |
|     }
 | |
|   },
 | |
|   created() {
 | |
|     if (this.$route.query.id) this.getDict()
 | |
|   },
 | |
|   methods: {
 | |
|     getDict() {
 | |
|       this.instance.post("/admin/dictionary/queryDictDetail", null, {
 | |
|         params: {dictionaryId: this.$route.query.id}
 | |
|       }).then(res => {
 | |
|         if (res?.data) {
 | |
|           res.data.dictionaryDetails = res.data.dictionaryDetails.map(d => {
 | |
|             return {
 | |
|               ...d,
 | |
|               editable: false,
 | |
|               name: "",
 | |
|               value: ""
 | |
|             }
 | |
|           })
 | |
|           this.form = res.data
 | |
|         }
 | |
|       })
 | |
|     },
 | |
|     delDictValue(id) {
 | |
|       this.$confirm("是否要删除该字典值", {
 | |
|         type: 'error'
 | |
|       }).then(() => {
 | |
|         this.instance.post("/admin/dictionary/deletevalue", null, {
 | |
|           params: {id}
 | |
|         }).then(res => {
 | |
|           if (res?.code == 0) {
 | |
|             this.$message.success("删除成功!")
 | |
|             this.getDict()
 | |
|           }
 | |
|         })
 | |
|       }).catch(() => 0)
 | |
|     },
 | |
|     editDetail(row) {
 | |
|       row.editable = true
 | |
|       row.name = row.dictName
 | |
|       row.value = row.dictValue
 | |
|     },
 | |
|     addDict(row) {
 | |
|       row.dictValue = row.value
 | |
|       row.dictName = row.name
 | |
|       row.dictionaryId = this.form.id
 | |
|       this.instance.post("/admin/dictionary/updateDetail", row).then(res => {
 | |
|         row.editable = false
 | |
|         row = res.data.data
 | |
|         this.$message.success("提交成功!")
 | |
|       })
 | |
|     },
 | |
|     cancelEdit(row, index) {
 | |
|       if (row.id) {
 | |
|         row.editable = false
 | |
|       } else {
 | |
|         this.form.dictionaryDetails.splice(index, 1)
 | |
|       }
 | |
|     },
 | |
|     modifyDict() {
 | |
|       this.$refs.dictDetailForm.validate(v => {
 | |
|         if (v) {
 | |
|           this.instance.post("/admin/dictionary/updateDict", this.form).then(res => {
 | |
|             if (res?.code == 0) {
 | |
|               this.$message.success("提交成功!")
 | |
|               this.$router.push({})
 | |
|             }
 | |
|           })
 | |
|         }
 | |
|       })
 | |
|     }
 | |
|   }
 | |
| }
 | |
| </script>
 | |
| 
 | |
| <style lang="scss" scoped>
 | |
| .dictDetail {
 | |
|   height: 100%;
 | |
| 
 | |
|   ::v-deep .el-table__row {
 | |
| 
 | |
|     .el-input__inner {
 | |
|       padding: 0 30px;
 | |
|       border: none;
 | |
|       text-align: center;
 | |
|       background: #ddd;
 | |
|       font-size: 14px;
 | |
|     }
 | |
|   }
 | |
| 
 | |
| }
 | |
| </style>
 |