index.vue 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197
  1. <template>
  2. <div class="device-manager-box">
  3. <BasicTable @register="registerTable">
  4. <template #tableTitle>
  5. <a-button type="primary" preIcon="ant-design:plus-outlined" @click="handleCreate"> 新增</a-button>
  6. <a-button type="primary" preIcon="ant-design:export-outlined" @click="onExportXls"> 导出</a-button>
  7. <j-upload-button type="primary" preIcon="ant-design:import-outlined" @click="onImportXls">导入</j-upload-button>
  8. <a-dropdown v-if="selectedRowKeys.length > 0">
  9. <template #overlay>
  10. <a-menu>
  11. <a-menu-item key="1" @click="batchHandleDelete">
  12. <Icon icon="ant-design:delete-outlined" />
  13. 删除
  14. </a-menu-item>
  15. </a-menu>
  16. </template>
  17. <a-button
  18. >批量操作
  19. <Icon icon="mdi:chevron-down" />
  20. </a-button>
  21. </a-dropdown>
  22. </template>
  23. <template #action="{ record }">
  24. <TableAction :actions="getTableAction(record)" :dropDownActions="getDropDownAction(record)" />
  25. </template>
  26. </BasicTable>
  27. </div>
  28. <!--角色用户表格-->
  29. <RoleUserTable @register="roleUserDrawer" />
  30. <!--角色编辑抽屉-->
  31. <RoleDrawer @register="registerDrawer" @success="reload" :showFooter="showFooter" />
  32. <!--角色详情-->
  33. <RoleDesc @register="registerDesc"></RoleDesc>
  34. <!--角色菜单授权抽屉-->
  35. <RolePermissionDrawer @register="rolePermissionDrawer" />
  36. <!--角色首页配置-->
  37. <RoleIndexModal @register="registerIndexModal" />
  38. </template>
  39. <script lang="ts" name="system-role" setup>
  40. import { ref } from 'vue';
  41. import { BasicTable, TableAction } from '/@/components/Table';
  42. import { useDrawer } from '/@/components/Drawer';
  43. import { useModal } from '/@/components/Modal';
  44. import RoleDrawer from './components/RoleDrawer.vue';
  45. import RoleDesc from './components/RoleDesc.vue';
  46. import RolePermissionDrawer from './components/RolePermissionDrawer.vue';
  47. import RoleIndexModal from './components/RoleIndexModal.vue';
  48. import RoleUserTable from './components/RoleUserTable.vue';
  49. import { columns, searchFormSchema } from './role.data';
  50. import { list, deleteRole, batchDeleteRole, getExportUrl, getImportUrl } from './role.api';
  51. import { useListPage } from '/@/hooks/system/useListPage';
  52. const showFooter = ref(true);
  53. const [roleUserDrawer, { openDrawer: openRoleUserDrawer }] = useDrawer();
  54. const [registerDrawer, { openDrawer }] = useDrawer();
  55. const [registerModal, { openModal }] = useModal();
  56. const [registerIndexModal, { openModal: openIndexModal }] = useModal();
  57. const [rolePermissionDrawer, { openDrawer: openRolePermissionDrawer }] = useDrawer();
  58. const [registerDesc, { openDrawer: openRoleDesc }] = useDrawer();
  59. // 列表页面公共参数、方法
  60. const { prefixCls, tableContext, onImportXls, onExportXls } = useListPage({
  61. designScope: 'role-template',
  62. tableProps: {
  63. title: '系统角色列表',
  64. api: list,
  65. columns: columns,
  66. formConfig: {
  67. // update-begin--author:liaozhiyang---date:20230803---for:【QQYUN-5873】查询区域lablel默认居左
  68. labelWidth:65,
  69. rowProps: { gutter: 24 },
  70. // update-end--author:liaozhiyang---date:20230803---for:【QQYUN-5873】查询区域lablel默认居左
  71. schemas: searchFormSchema,
  72. },
  73. actionColumn: {
  74. width: 120,
  75. },
  76. rowSelection: null,
  77. //自定义默认排序
  78. defSort: {
  79. column: 'id',
  80. order: 'desc',
  81. },
  82. },
  83. exportConfig: {
  84. name: '角色列表',
  85. url: getExportUrl,
  86. },
  87. importConfig: {
  88. url: getImportUrl,
  89. },
  90. });
  91. const [registerTable, { reload }, { rowSelection, selectedRowKeys }] = tableContext;
  92. /**
  93. * 新增
  94. */
  95. function handleCreate() {
  96. showFooter.value = true;
  97. openDrawer(true, {
  98. isUpdate: false,
  99. });
  100. }
  101. /**
  102. * 编辑
  103. */
  104. function handleEdit(record: Recordable) {
  105. showFooter.value = true;
  106. openDrawer(true, {
  107. record,
  108. isUpdate: true,
  109. });
  110. }
  111. /**
  112. * 详情
  113. */
  114. function handleDetail(record) {
  115. showFooter.value = false;
  116. openRoleDesc(true, {
  117. record,
  118. isUpdate: true,
  119. });
  120. }
  121. /**
  122. * 删除事件
  123. */
  124. async function handleDelete(record) {
  125. await deleteRole({ id: record.id }, reload);
  126. }
  127. /**
  128. * 批量删除事件
  129. */
  130. async function batchHandleDelete() {
  131. await batchDeleteRole({ ids: selectedRowKeys.value }, reload);
  132. }
  133. /**
  134. * 角色授权弹窗
  135. */
  136. function handlePerssion(record) {
  137. openRolePermissionDrawer(true, { roleId: record.id });
  138. }
  139. /**
  140. * 首页配置弹窗
  141. */
  142. function handleIndexConfig(roleCode) {
  143. openIndexModal(true, { roleCode });
  144. }
  145. /**
  146. * 角色用户
  147. */
  148. function handleUser(record) {
  149. //onSelectChange(selectedRowKeys)
  150. openRoleUserDrawer(true, record);
  151. }
  152. /**
  153. * 操作栏
  154. */
  155. function getTableAction(record) {
  156. return [
  157. {
  158. label: '用户',
  159. onClick: handleUser.bind(null, record),
  160. },
  161. {
  162. label: '授权',
  163. onClick: handlePerssion.bind(null, record),
  164. },
  165. ];
  166. }
  167. /**
  168. * 下拉操作栏
  169. */
  170. function getDropDownAction(record) {
  171. return [
  172. {
  173. label: '编辑',
  174. onClick: handleEdit.bind(null, record),
  175. },
  176. {
  177. label: '详情',
  178. onClick: handleDetail.bind(null, record),
  179. },
  180. {
  181. label: '删除',
  182. popConfirm: {
  183. title: '是否确认删除',
  184. confirm: handleDelete.bind(null, record),
  185. },
  186. },
  187. {
  188. label: '首页配置',
  189. onClick: handleIndexConfig.bind(null, record.roleCode),
  190. },
  191. ];
  192. }
  193. </script>