index.vue 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242
  1. <template>
  2. <div class="device-manager-box">
  3. <!--引用表格-->
  4. <BasicTable @register="registerTable">
  5. <!--插槽:table标题-->
  6. <template #tableTitle>
  7. <a-button type="primary" preIcon="ant-design:plus-outlined" @click="handleCreate"> 新增</a-button>
  8. <!-- <a-button type="primary" preIcon="ant-design:export-outlined" @click="onExportXls"> 导出</a-button>
  9. <j-upload-button type="primary" preIcon="ant-design:import-outlined" @click="onImportXls">导入</j-upload-button> -->
  10. <!-- <a-button type="primary" @click="handleSyncUser" preIcon="ant-design:sync-outlined"> 同步流程</a-button> -->
  11. <!-- <a-button type="primary" @click="openModal(true, {})" preIcon="ant-design:hdd-outlined"> 回收站</a-button> -->
  12. <JThirdAppButton biz-type="user" :selected-row-keys="selectedRowKeys" syncToApp syncToLocal @sync-finally="onSyncFinally" />
  13. <a-dropdown v-if="selectedRowKeys.length > 0">
  14. <template #overlay>
  15. <a-menu>
  16. <a-menu-item key="1" @click="batchHandleDelete">
  17. <Icon icon="ant-design:delete-outlined" />
  18. 删除
  19. </a-menu-item>
  20. </a-menu>
  21. </template>
  22. <a-button
  23. >批量操作
  24. <Icon icon="mdi:chevron-down" />
  25. </a-button>
  26. </a-dropdown>
  27. </template>
  28. <!--操作栏-->
  29. <template #action="{ record }">
  30. <TableAction :actions="getTableAction(record)" :dropDownActions="getDropDownAction(record)" />
  31. </template>
  32. </BasicTable>
  33. <!--用户抽屉-->
  34. <UserDrawer @register="registerDrawer" @success="handleSuccess" />
  35. <!--修改密码-->
  36. <PasswordModal @register="registerPasswordModal" @success="reload" />
  37. <!--用户代理-->
  38. <UserAgentModal @register="registerAgentModal" @success="reload" />
  39. <!--授权弹窗-->
  40. <UserPermModal @register="registerPermModal" @success="reload" />
  41. </div>
  42. </template>
  43. <script lang="ts" name="system-user" setup>
  44. //ts语法
  45. import { ref, computed, unref } from 'vue';
  46. import { BasicTable, TableAction, ActionItem } from '/@/components/Table';
  47. import UserDrawer from './UserDrawer.vue';
  48. // import UserRecycleBinModal from './UserRecycleBinModal.vue';
  49. import PasswordModal from './PasswordModal.vue';
  50. import UserAgentModal from './UserAgentModal.vue';
  51. import JThirdAppButton from '/@/components/jeecg/thirdApp/JThirdAppButton.vue';
  52. import { useDrawer } from '/@/components/Drawer';
  53. import { useListPage } from '/@/hooks/system/useListPage';
  54. import { useModal } from '/@/components/Modal';
  55. import { useMessage } from '/@/hooks/web/useMessage';
  56. import { columns, searchFormSchema } from './user.data';
  57. import { list, deleteUser, batchDeleteUser, frozenBatch, syncUser } from './user.api';
  58. import UserPermModal from './UserPermModal.vue';
  59. // import { usePermission } from '/@/hooks/web/usePermission'
  60. // const { hasPermission } = usePermission();
  61. const { createMessage, createConfirm } = useMessage();
  62. //注册drawer
  63. const [registerDrawer, { openDrawer }] = useDrawer();
  64. //回收站model
  65. // const [registerModal, { openModal }] = useModal();
  66. //密码model
  67. const [registerPasswordModal, { openModal: openPasswordModal }] = useModal();
  68. //代理人model
  69. const [registerAgentModal, { openModal: openAgentModal }] = useModal();
  70. // 授权model
  71. const [registerPermModal, { openModal: openPermissionModal }] = useModal();
  72. // 列表页面公共参数、方法
  73. const { prefixCls, tableContext } = useListPage({
  74. designScope: 'user-list',
  75. tableProps: {
  76. title: '用户列表',
  77. api: list,
  78. columns: columns,
  79. size: 'small',
  80. formConfig: {
  81. // labelWidth: 200,
  82. schemas: searchFormSchema,
  83. },
  84. actionColumn: {
  85. width: 120,
  86. },
  87. beforeFetch(params) {
  88. return Object.assign(
  89. {
  90. column: 'createTime',
  91. order: 'desc',
  92. thirdType: '_thirdPartyUser',
  93. },
  94. params
  95. );
  96. },
  97. },
  98. // exportConfig: {
  99. // name: '用户列表',
  100. // url: getExportUrl,
  101. // },
  102. // importConfig: {
  103. // url: getImportUrl,
  104. // },
  105. });
  106. //注册table数据
  107. const [registerTable, { reload }, { selectedRows, selectedRowKeys }] = tableContext;
  108. /**
  109. * 新增事件
  110. */
  111. function handleCreate() {
  112. openDrawer(true, {
  113. isUpdate: false,
  114. showFooter: true,
  115. });
  116. }
  117. /**
  118. * 编辑事件
  119. */
  120. async function handleEdit(record: Recordable) {
  121. openDrawer(true, {
  122. record,
  123. isUpdate: true,
  124. showFooter: true,
  125. });
  126. }
  127. /**
  128. * 详情
  129. */
  130. async function handleDetail(record: Recordable) {
  131. openDrawer(true, {
  132. record,
  133. isUpdate: true,
  134. showFooter: false,
  135. });
  136. }
  137. /**
  138. * 删除事件
  139. */
  140. async function handleDelete(record) {
  141. if ('admin' == record.username) {
  142. createMessage.warning('管理员账号不允许此操作!');
  143. return;
  144. }
  145. await deleteUser({ id: record.id }, reload);
  146. }
  147. /**
  148. * 批量删除事件
  149. */
  150. async function batchHandleDelete() {
  151. let hasAdmin = unref(selectedRows).filter((item) => item.username == 'admin');
  152. if (unref(hasAdmin).length > 0) {
  153. createMessage.warning('管理员账号不允许此操作!');
  154. return;
  155. }
  156. await batchDeleteUser({ ids: selectedRowKeys.value }, () => {
  157. selectedRowKeys.value = [];
  158. reload();
  159. });
  160. }
  161. /**
  162. * 成功回调
  163. */
  164. function handleSuccess() {
  165. reload();
  166. }
  167. /**
  168. * 打开修改密码弹窗
  169. */
  170. function handleChangePassword(username) {
  171. openPasswordModal(true, { username });
  172. }
  173. /**
  174. * 打开代理人弹窗
  175. */
  176. function handleAgentSettings(userName) {
  177. openAgentModal(true, { userName });
  178. }
  179. /**
  180. * 打开授权弹窗
  181. */
  182. function handlePermissionModel(userID) {
  183. openPermissionModal(true, { userID });
  184. }
  185. /**
  186. *同步钉钉和微信回调
  187. */
  188. function onSyncFinally({ isToLocal }) {
  189. // 同步到本地时刷新下数据
  190. if (isToLocal) {
  191. reload();
  192. }
  193. }
  194. /**
  195. * 操作栏
  196. */
  197. function getTableAction(record): ActionItem[] {
  198. return [
  199. {
  200. label: '编辑',
  201. onClick: handleEdit.bind(null, record),
  202. // ifShow: () => hasPermission('system:user:edit'),
  203. },
  204. {
  205. label: '授权',
  206. onClick: handlePermissionModel.bind(null, record.username),
  207. // ifShow: () => hasPermission('system:user:edit'),
  208. },
  209. ];
  210. }
  211. /**
  212. * 下拉操作栏
  213. */
  214. function getDropDownAction(record): ActionItem[] {
  215. return [
  216. {
  217. label: '详情',
  218. onClick: handleDetail.bind(null, record),
  219. },
  220. {
  221. label: '密码',
  222. onClick: handleChangePassword.bind(null, record.username),
  223. },
  224. {
  225. label: '删除',
  226. popConfirm: {
  227. title: '是否确认删除',
  228. confirm: handleDelete.bind(null, record),
  229. },
  230. },
  231. ];
  232. }
  233. </script>
  234. <style scoped></style>