index.vue 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158
  1. <script setup lang="ts">
  2. import { ref } from "vue";
  3. import { useDept } from "./utils/hook";
  4. import { PureTableBar } from "@/components/RePureTableBar";
  5. import { useRenderIcon } from "@/components/ReIcon/src/hooks";
  6. import Delete from "@iconify-icons/ep/delete";
  7. import EditPen from "@iconify-icons/ep/edit-pen";
  8. import Refresh from "@iconify-icons/ep/refresh";
  9. import AddFill from "@iconify-icons/ri/add-circle-line";
  10. defineOptions({
  11. name: "SystemDept"
  12. });
  13. const formRef = ref();
  14. const tableRef = ref();
  15. const {
  16. form,
  17. loading,
  18. columns,
  19. dataList,
  20. onSearch,
  21. resetForm,
  22. openDialog,
  23. handleDelete,
  24. handleSelectionChange
  25. } = useDept();
  26. </script>
  27. <template>
  28. <div class="main">
  29. <el-form
  30. ref="formRef"
  31. :inline="true"
  32. :model="form"
  33. class="search-form bg-bg_color w-[99/100] pl-8 pt-[12px]"
  34. >
  35. <el-form-item label="部门名称:" prop="name">
  36. <el-input
  37. v-model="form.name"
  38. placeholder="请输入部门名称"
  39. clearable
  40. class="!w-[180px]"
  41. />
  42. </el-form-item>
  43. <el-form-item label="状态:" prop="status">
  44. <el-select
  45. v-model="form.status"
  46. placeholder="请选择状态"
  47. clearable
  48. class="!w-[180px]"
  49. >
  50. <el-option label="启用" :value="1" />
  51. <el-option label="停用" :value="0" />
  52. </el-select>
  53. </el-form-item>
  54. <el-form-item>
  55. <el-button
  56. type="primary"
  57. :icon="useRenderIcon('search')"
  58. :loading="loading"
  59. @click="onSearch"
  60. >
  61. 搜索
  62. </el-button>
  63. <el-button :icon="useRenderIcon(Refresh)" @click="resetForm(formRef)">
  64. 重置
  65. </el-button>
  66. </el-form-item>
  67. </el-form>
  68. <PureTableBar
  69. title="部门管理(仅演示,操作后不生效)"
  70. :columns="columns"
  71. :tableRef="tableRef?.getTableRef()"
  72. @refresh="onSearch"
  73. >
  74. <template #buttons>
  75. <el-button
  76. type="primary"
  77. :icon="useRenderIcon(AddFill)"
  78. @click="openDialog()"
  79. >
  80. 新增部门
  81. </el-button>
  82. </template>
  83. <template v-slot="{ size, dynamicColumns }">
  84. <pure-table
  85. ref="tableRef"
  86. adaptive
  87. :adaptiveConfig="{ offsetBottom: 32 }"
  88. align-whole="center"
  89. row-key="id"
  90. showOverflowTooltip
  91. table-layout="auto"
  92. default-expand-all
  93. :loading="loading"
  94. :size="size"
  95. :data="dataList"
  96. :columns="dynamicColumns"
  97. :header-cell-style="{
  98. background: 'var(--el-fill-color-light)',
  99. color: 'var(--el-text-color-primary)'
  100. }"
  101. @selection-change="handleSelectionChange"
  102. >
  103. <template #operation="{ row }">
  104. <el-button
  105. class="reset-margin"
  106. link
  107. type="primary"
  108. :size="size"
  109. :icon="useRenderIcon(AddFill)"
  110. @click="openDialog('新增', { parentId: row.id } as any)"
  111. >
  112. 新增
  113. </el-button>
  114. <el-button
  115. class="reset-margin"
  116. link
  117. type="primary"
  118. :size="size"
  119. :icon="useRenderIcon(EditPen)"
  120. @click="openDialog('修改', row)"
  121. >
  122. 修改
  123. </el-button>
  124. <el-popconfirm
  125. :title="`是否确认删除部门名称为${row.name}的这条数据`"
  126. @confirm="handleDelete(row)"
  127. >
  128. <template #reference>
  129. <el-button
  130. class="reset-margin"
  131. link
  132. type="primary"
  133. :size="size"
  134. :icon="useRenderIcon(Delete)"
  135. >
  136. 删除
  137. </el-button>
  138. </template>
  139. </el-popconfirm>
  140. </template>
  141. </pure-table>
  142. </template>
  143. </PureTableBar>
  144. </div>
  145. </template>
  146. <style lang="scss" scoped>
  147. .search-form {
  148. :deep(.el-form-item) {
  149. margin-bottom: 12px;
  150. }
  151. }
  152. </style>