157 lines
		
	
	
		
			4.9 KiB
		
	
	
	
		
			Vue
		
	
	
	
	
	
			
		
		
	
	
			157 lines
		
	
	
		
			4.9 KiB
		
	
	
	
		
			Vue
		
	
	
	
	
	
| <template>
 | ||
|   <section class="AppDictionary">
 | ||
|     <ai-list v-if="!showDetail">
 | ||
|       <ai-title slot="title" title="数据字典" isShowBottomBorder/>
 | ||
|       <template #content>
 | ||
|         <ai-search-bar>
 | ||
|           <template #left>
 | ||
|             <el-button type="primary" size="small" icon="iconfont iconAdd" @click="addDict"
 | ||
|                        v-if="$permissions('admin_sysdictionary_add')">添加
 | ||
|             </el-button>
 | ||
|           </template>
 | ||
|           <template #right>
 | ||
|             <el-input size="small" v-model="search.condition" placeholder="数据项" clearable
 | ||
|                       @change="page.current=1,getDicts()" prefix-icon="iconfont iconSearch"/>
 | ||
|             <el-button type="primary" size="small" icon="iconfont iconSearch"
 | ||
|                        @click="page.current=1,getDicts()">查询
 | ||
|             </el-button>
 | ||
|             <el-button size="small" icon="el-icon-refresh-right" @click="resetSearch">重置</el-button>
 | ||
|           </template>
 | ||
|         </ai-search-bar>
 | ||
|         <el-table size="mini" :data="dictList" header-cell-class-name="table-header" tooltip-effect="light"
 | ||
|                   row-class-name="table-row" cell-class-name="table-cell" @expand-change="getDictInfo">
 | ||
|           <el-table-column type="expand">
 | ||
|             <el-row slot-scope="{row}" type="flex" align="middle" style="flex-wrap: wrap">
 | ||
|               <el-tag v-for="(op,i) in row.detail||[]" :key="i" style="margin: 4px">{{ op.dictValue }}|{{ op.dictName }}
 | ||
|                 {{ op.dictColor ? '| ' + op.dictColor : '' }}
 | ||
|               </el-tag>
 | ||
|             </el-row>
 | ||
|           </el-table-column>
 | ||
|           <el-table-column align="center" label="数据项" prop="code"/>
 | ||
|           <el-table-column align="center" label="数据项名称" prop="name"/>
 | ||
|           <el-table-column align="center" label="操作">
 | ||
|             <div slot-scope="{row}">
 | ||
|               <el-button type="text" @click="openDetail(row.id)" v-text="'编辑'"
 | ||
|                          v-if="$permissions('admin_sysdictionary_edit')"/>
 | ||
|               <el-button type="text" @click="handleDelete(row.id)" v-text="'删除'"
 | ||
|                          v-if="$permissions('admin_sysdictionary_del')"/>
 | ||
|             </div>
 | ||
|           </el-table-column>
 | ||
|           <div slot="empty" class="no-data"></div>
 | ||
|         </el-table>
 | ||
|         <div class="pagination">
 | ||
|           <el-pagination background :current-page.sync="page.current" :total="page.total"
 | ||
|                          layout="total,prev, pager, next,sizes, jumper"
 | ||
|                          @size-change="handleSizeChange"
 | ||
|                          :page-size="page.size"
 | ||
|                          :page-sizes="[10, 20, 50, 100,200]"
 | ||
|                          @current-change="getDicts"/>
 | ||
|         </div>
 | ||
|       </template>
 | ||
|     </ai-list>
 | ||
|     <dict-detail v-else :instance="instance" :permissions="permissions"/>
 | ||
|   </section>
 | ||
| </template>
 | ||
| 
 | ||
| <script>
 | ||
| import DictDetail from "./dictDetail";
 | ||
| 
 | ||
| export default {
 | ||
|   name: "AppDictionary",
 | ||
|   components: {DictDetail},
 | ||
|   label: "数据字典",
 | ||
|   props: {
 | ||
|     instance: Function,
 | ||
|     permissions: Function
 | ||
|   },
 | ||
|   computed: {
 | ||
|     showDetail() {
 | ||
|       return this.$route.hash == "#add"
 | ||
|     }
 | ||
|   },
 | ||
|   data() {
 | ||
|     return {
 | ||
|       page: {
 | ||
|         current: 1,
 | ||
|         total: 0,
 | ||
|         size: 10
 | ||
|       },
 | ||
|       search: {
 | ||
|         condition: ""
 | ||
|       },
 | ||
|       dictList: [],
 | ||
|       id: ''
 | ||
|     }
 | ||
|   },
 | ||
|   methods: {
 | ||
|     resetSearch() {
 | ||
|       this.page.current = 1;
 | ||
|       this.search.condition = '';
 | ||
|       this.getDicts();
 | ||
|     },
 | ||
|     getDicts() {
 | ||
|       this.instance.post("/admin/dictionary/queryDictList", null, {
 | ||
|         params: {
 | ||
|           ...this.page,
 | ||
|           name: this.search.condition
 | ||
|         }
 | ||
|       }).then(res => {
 | ||
|         this.dictList = res.data.records.map(e => {
 | ||
|           return {...e, detail: []}
 | ||
|         })
 | ||
|         this.page.total = res.data.total
 | ||
|       })
 | ||
|     },
 | ||
|     addDict() {
 | ||
|       this.$router.push({hash: "#add"})
 | ||
|     },
 | ||
|     handleDelete(id) {
 | ||
|       this.$confirm("确定要删除该数据项吗?", {
 | ||
|         type: "error"
 | ||
|       }).then(() => {
 | ||
|         this.instance.post("/admin/dictionary/deleteDict", null, {
 | ||
|           params: {id}
 | ||
|         }).then(res => {
 | ||
|           if (res?.code == 0) {
 | ||
|             this.getDicts();
 | ||
|             this.$message.success("删除成功!")
 | ||
|           }
 | ||
|         })
 | ||
|       }).catch(() => 0)
 | ||
|     },
 | ||
|     openDetail(id) {
 | ||
|       this.$router.push({query: {id}, hash: "#add"})
 | ||
|     },
 | ||
|     handleSizeChange(val) {
 | ||
|       this.page.size = val;
 | ||
|       this.getDicts();
 | ||
|     },
 | ||
|     getDictInfo(row) {
 | ||
|       if (row.detail.length) {
 | ||
|         row.detail = []
 | ||
|       } else {
 | ||
|         this.getDict(row.id).then(res => {
 | ||
|           if (res && res.data) {
 | ||
|             row.detail = res.data.dictionaryDetails || []
 | ||
|           }
 | ||
|         })
 | ||
|       }
 | ||
|     },
 | ||
|     getDict(dictionaryId) {
 | ||
|       return this.instance.post("/admin/dictionary/queryDictDetail", null, {
 | ||
|         params: {dictionaryId}
 | ||
|       })
 | ||
|     },
 | ||
|   },
 | ||
|   created() {
 | ||
|     this.getDicts()
 | ||
|   },
 | ||
| }
 | ||
| </script>
 | ||
| 
 | ||
| <style lang="scss" scoped>
 | ||
| .AppDictionary {
 | ||
|   height: 100%;
 | ||
| }
 | ||
| </style>
 |