list.vue 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. <script lang="ts" setup>
  2. import type {
  3. OnActionClickParams,
  4. VxeTableGridOptions,
  5. } from '#/adapter/vxe-table';
  6. import type { SystemModel } from '#/api';
  7. import { Page, useVbenModal } from '@vben/common-ui';
  8. import { Plus } from '@vben/icons';
  9. import { Button, message } from 'ant-design-vue';
  10. import { useVbenVxeGrid } from '#/adapter/vxe-table';
  11. import { deleteUserMethod, listUsersMethod } from '#/api';
  12. import { $t } from '#/locales';
  13. import { useUserSearchFormSchema, useUserTableColumns } from './data';
  14. import Form from './modules/form.vue';
  15. const [FormModal, formModalApi] = useVbenModal({
  16. connectedComponent: Form,
  17. destroyOnClose: true,
  18. });
  19. const [Grid, gridApi] = useVbenVxeGrid({
  20. formOptions: {
  21. schema: useUserSearchFormSchema(),
  22. submitOnChange: true,
  23. },
  24. gridOptions: {
  25. columns: useUserTableColumns(onActionClick),
  26. height: 'auto',
  27. keepSource: true,
  28. proxyConfig: {
  29. ajax: {
  30. query({ page }, formValues) {
  31. return listUsersMethod(page.currentPage, page.pageSize, formValues);
  32. },
  33. },
  34. },
  35. rowConfig: {
  36. keyField: 'id',
  37. },
  38. toolbarConfig: {
  39. custom: true,
  40. export: false,
  41. refresh: true,
  42. search: true,
  43. zoom: true,
  44. },
  45. } as VxeTableGridOptions<SystemModel.User>,
  46. });
  47. function onActionClick(e: OnActionClickParams<SystemModel.User>) {
  48. switch (e.code) {
  49. case 'delete': {
  50. onDeleteHandle(e.row);
  51. break;
  52. }
  53. case 'edit': {
  54. onEditHandle(e.row);
  55. break;
  56. }
  57. }
  58. }
  59. function onRefresh() {
  60. gridApi.query();
  61. }
  62. function onEditHandle(row?: SystemModel.User) {
  63. formModalApi.setData(row ?? {}).open();
  64. }
  65. async function onDeleteHandle(row: SystemModel.User) {
  66. const hideLoading = message.loading({
  67. content: $t('ui.actionMessage.deleting', [row.name]),
  68. duration: 0,
  69. key: 'action_process_msg',
  70. });
  71. try {
  72. await deleteUserMethod(row);
  73. message.success({
  74. content: $t('ui.actionMessage.deleteSuccess', [row.name]),
  75. key: 'action_process_msg',
  76. });
  77. onRefresh();
  78. } finally {
  79. hideLoading();
  80. }
  81. }
  82. </script>
  83. <template>
  84. <Page auto-content-height>
  85. <FormModal @success="onRefresh" />
  86. <Grid :table-title="$t('system.user.list')">
  87. <template #toolbar-tools>
  88. <Button type="primary" @click="onEditHandle()">
  89. <Plus class="size-5" />
  90. {{ $t('ui.actionTitle.create', [$t('system.user._')]) }}
  91. </Button>
  92. </template>
  93. </Grid>
  94. </Page>
  95. </template>