index.vue 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125
  1. <template>
  2. <div class="main-box">
  3. <TreeFilter
  4. title="字典类型"
  5. ref="treeFilterRef"
  6. :request-api="DictApi.tree"
  7. label="name"
  8. :expand-all="false"
  9. :default-value="initParam.dictId"
  10. @change="changeTree" />
  11. <div class="table-box">
  12. <ProTable
  13. ref="proTableRef"
  14. title="字典数据"
  15. row-key="dictId"
  16. :indent="20"
  17. :columns="columns"
  18. :init-param="initParam"
  19. :search-columns="searchColumns"
  20. :request-api="getTableList"
  21. @reset="reset">
  22. <!-- 表格 header 按钮 -->
  23. <template #tableHeader="scope">
  24. <el-button type="primary" icon="CirclePlus" @click="openDrawer('新增')"> 新增 </el-button>
  25. <el-button type="danger" icon="Delete" plain :disabled="!scope.isSelected" @click="batchDelete(scope.selectedListIds)">
  26. 批量删除
  27. </el-button>
  28. </template>
  29. <template #operation="{ row }">
  30. <el-button type="primary" link icon="EditPen" @click="openDrawer('编辑', row)"> 编辑 </el-button>
  31. <el-button v-if="row.isLock !== '1'" type="primary" link icon="Delete" @click="deleteRow(row)"> 删除 </el-button>
  32. </template>
  33. </ProTable>
  34. </div>
  35. <DictDrawer ref="drawerRef" @submit="refreshTree" size="40%" />
  36. </div>
  37. </template>
  38. <script lang="tsx" setup name="DIctManage">
  39. import DictApi from '@/api/module/system/dict'
  40. import DictDrawer from './components/DictDrawer.vue'
  41. import TreeFilter from '@/components/TreeFilter/index.vue'
  42. import { ColumnProps, ProTableInstance, SearchProps } from '@/components/ProTable/interface'
  43. import { useDictOptions, useHandleData } from '@/hooks'
  44. import { DictBO, DictQuery, DictVO } from '@/api/interface/system/dict'
  45. const initParam = reactive({ dictId: '', parentId: '' })
  46. const selectTreeId = ref<string>('')
  47. const proTableRef = ref<ProTableInstance>()
  48. const treeFilterRef = ref<InstanceType<typeof TreeFilter>>()
  49. // 树形筛选切换
  50. const changeTree = (val: string) => {
  51. if (val) {
  52. selectTreeId.value = val
  53. initParam.parentId = val
  54. proTableRef.value?.clearSelection()
  55. }
  56. }
  57. // 刷新树表
  58. const refreshTree = () => {
  59. treeFilterRef.value?.refresh()
  60. }
  61. // 表格配置项
  62. const columns: ColumnProps<DictVO>[] = [
  63. { type: 'selection', width: 60, selectable: row => row.isLock !== '1' },
  64. { prop: 'dictLabel', label: '字典标签' },
  65. { prop: 'dictValue', label: '字典值' },
  66. {
  67. prop: 'status',
  68. label: '状态',
  69. tag: true,
  70. enum: useDictOptions('COMMON_STATUS'),
  71. width: 80,
  72. fieldNames: { label: 'dictLabel', value: 'dictValue', tagType: 'callbackShowStyle' }
  73. },
  74. { prop: 'orderNum', label: '排序' },
  75. { prop: 'remark', label: '备注' },
  76. { prop: 'createByName', label: '创建人' },
  77. { prop: 'createTime', label: '创建时间' },
  78. { prop: 'operation', label: '操作', width: 250, fixed: 'right' }
  79. ]
  80. // 表格配置项
  81. const searchColumns: SearchProps[] = [{ prop: 'dictLabel', label: '字典标签', el: 'input' }]
  82. // 获取table列表
  83. const getTableList = (params: DictQuery) => DictApi.page(params)
  84. // 重置
  85. const reset = () => {
  86. initParam.parentId = ''
  87. proTableRef.value?.clearSelection()
  88. treeFilterRef.value?.treeRef?.setCurrentKey()
  89. }
  90. // 单行删除
  91. const deleteRow = async (row: DictVO) => {
  92. await useHandleData(DictApi.delete, [row.dictId], `删除【${row.dictLabel}】字典`)
  93. proTableRef.value?.getTableList()
  94. refreshTree()
  95. }
  96. // 批量删除信息
  97. const batchDelete = async (ids: (string | number)[]) => {
  98. await useHandleData(DictApi.delete, ids, '删除所选用户信息')
  99. proTableRef.value?.clearSelection()
  100. proTableRef.value?.getTableList()
  101. refreshTree()
  102. }
  103. // 打开 drawer(新增、查看、编辑)
  104. const drawerRef = ref<InstanceType<typeof DictDrawer> | null>(null)
  105. const openDrawer = (title: string, row: Partial<DictBO> = {}) => {
  106. const params = {
  107. title,
  108. row: title === '新增' ? { parentId: selectTreeId.value } : { ...row },
  109. isView: title === '查看',
  110. api: title === '新增' ? DictApi.add : title === '编辑' ? DictApi.edit : undefined,
  111. getTableList: proTableRef.value?.getTableList
  112. }
  113. drawerRef.value?.acceptParams(params)
  114. }
  115. </script>