index.vue 6.0 KB

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