index.vue 3.8 KB

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