index.vue 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187
  1. <script setup lang="ts">
  2. import { ref } from "vue";
  3. import { useRole } from "./hook";
  4. import { PureTableBar } from "@/components/RePureTableBar";
  5. import { useRenderIcon } from "@/components/ReIcon/src/hooks";
  6. import Database from "@iconify-icons/ri/database-2-line";
  7. import More from "@iconify-icons/ep/more-filled";
  8. import Delete from "@iconify-icons/ep/delete";
  9. import EditPen from "@iconify-icons/ep/edit-pen";
  10. import Search from "@iconify-icons/ep/search";
  11. import Refresh from "@iconify-icons/ep/refresh";
  12. import Menu from "@iconify-icons/ep/menu";
  13. import AddFill from "@iconify-icons/ri/add-circle-line";
  14. defineOptions({
  15. name: "Role"
  16. });
  17. const formRef = ref();
  18. const {
  19. form,
  20. loading,
  21. columns,
  22. dataList,
  23. pagination,
  24. buttonClass,
  25. onSearch,
  26. resetForm,
  27. handleUpdate,
  28. handleDelete,
  29. handleSizeChange,
  30. handleCurrentChange,
  31. handleSelectionChange
  32. } = useRole();
  33. </script>
  34. <template>
  35. <div class="main">
  36. <el-form
  37. ref="formRef"
  38. :inline="true"
  39. :model="form"
  40. class="bg-bg_color w-[99/100] pl-8 pt-4"
  41. >
  42. <el-form-item label="角色名称:" prop="name">
  43. <el-input
  44. v-model="form.name"
  45. placeholder="请输入角色名称"
  46. clearable
  47. class="!w-[200px]"
  48. />
  49. </el-form-item>
  50. <el-form-item label="角色标识:" prop="code">
  51. <el-input
  52. v-model="form.code"
  53. placeholder="请输入角色标识"
  54. clearable
  55. class="!w-[180px]"
  56. />
  57. </el-form-item>
  58. <el-form-item label="状态:" prop="status">
  59. <el-select
  60. v-model="form.status"
  61. placeholder="请选择状态"
  62. clearable
  63. class="!w-[180px]"
  64. >
  65. <el-option label="已开启" value="1" />
  66. <el-option label="已关闭" value="0" />
  67. </el-select>
  68. </el-form-item>
  69. <el-form-item>
  70. <el-button
  71. type="primary"
  72. :icon="useRenderIcon(Search)"
  73. :loading="loading"
  74. @click="onSearch"
  75. >
  76. 搜索
  77. </el-button>
  78. <el-button :icon="useRenderIcon(Refresh)" @click="resetForm(formRef)">
  79. 重置
  80. </el-button>
  81. </el-form-item>
  82. </el-form>
  83. <PureTableBar title="角色列表" @refresh="onSearch">
  84. <template #buttons>
  85. <el-button type="primary" :icon="useRenderIcon(AddFill)">
  86. 新增角色
  87. </el-button>
  88. </template>
  89. <template v-slot="{ size, checkList }">
  90. <pure-table
  91. border
  92. align-whole="center"
  93. showOverflowTooltip
  94. table-layout="auto"
  95. :loading="loading"
  96. :size="size"
  97. :data="dataList"
  98. :columns="columns"
  99. :checkList="checkList"
  100. :pagination="pagination"
  101. :paginationSmall="size === 'small' ? true : false"
  102. :header-cell-style="{
  103. background: 'var(--el-table-row-hover-bg-color)',
  104. color: 'var(--el-text-color-primary)'
  105. }"
  106. @selection-change="handleSelectionChange"
  107. @size-change="handleSizeChange"
  108. @current-change="handleCurrentChange"
  109. >
  110. <template #operation="{ row }">
  111. <el-button
  112. class="reset-margin"
  113. link
  114. type="primary"
  115. :size="size"
  116. :icon="useRenderIcon(EditPen)"
  117. @click="handleUpdate(row)"
  118. >
  119. 修改
  120. </el-button>
  121. <el-popconfirm title="是否确认删除?">
  122. <template #reference>
  123. <el-button
  124. class="reset-margin"
  125. link
  126. type="primary"
  127. :size="size"
  128. :icon="useRenderIcon(Delete)"
  129. @click="handleDelete(row)"
  130. >
  131. 删除
  132. </el-button>
  133. </template>
  134. </el-popconfirm>
  135. <el-dropdown>
  136. <el-button
  137. class="ml-3 mt-[2px]"
  138. link
  139. type="primary"
  140. :size="size"
  141. :icon="useRenderIcon(More)"
  142. @click="handleUpdate(row)"
  143. />
  144. <template #dropdown>
  145. <el-dropdown-menu>
  146. <el-dropdown-item>
  147. <el-button
  148. :class="buttonClass"
  149. link
  150. type="primary"
  151. :size="size"
  152. :icon="useRenderIcon(Menu)"
  153. >
  154. 菜单权限
  155. </el-button>
  156. </el-dropdown-item>
  157. <el-dropdown-item>
  158. <el-button
  159. :class="buttonClass"
  160. link
  161. type="primary"
  162. :size="size"
  163. :icon="useRenderIcon(Database)"
  164. >
  165. 数据权限
  166. </el-button>
  167. </el-dropdown-item>
  168. </el-dropdown-menu>
  169. </template>
  170. </el-dropdown>
  171. </template>
  172. </pure-table>
  173. </template>
  174. </PureTableBar>
  175. </div>
  176. </template>
  177. <style scoped lang="scss">
  178. :deep(.el-dropdown-menu__item i) {
  179. margin: 0;
  180. }
  181. </style>