index.vue 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136
  1. <script lang="ts" setup>
  2. import type { OnActionClickParams, VxeTableGridOptions } from '#/adapter';
  3. import { Page, useVbenModal } from '@vben/common-ui';
  4. import { Button, message } from 'ant-design-vue';
  5. import { useTableGridOptions, useVbenVxeGrid } from '#/adapter';
  6. import { CmsSiteApi } from '#/api';
  7. import FormDomain from '../domain/index.vue';
  8. import FormMenu from '../menu/index.vue';
  9. import FormEdit from './components/edit.vue';
  10. import { useColumns, useSearchSchema } from './data.config';
  11. const [FormEditModal, formEditApi] = useVbenModal({
  12. connectedComponent: FormEdit,
  13. });
  14. const [FormDomainModal, formDomainApi] = useVbenModal({
  15. connectedComponent: FormDomain,
  16. });
  17. const [FormMenuModal, formMenuApi] = useVbenModal({
  18. connectedComponent: FormMenu,
  19. });
  20. const handelSuccess = () => {
  21. reload();
  22. };
  23. const handleDelete = async (id: number) => {
  24. await CmsSiteApi.deleteDetail(id);
  25. message.success('数据删除成功');
  26. handelSuccess();
  27. };
  28. const handleUpdateStatus = async (record: any) => {
  29. await CmsSiteApi.updateStatus({
  30. id: record.id,
  31. status: record.status === 1 ? 2 : 1,
  32. });
  33. handelSuccess();
  34. };
  35. const handleEdit = (record: any, isUpdate: boolean) => {
  36. formEditApi
  37. .setData({
  38. isUpdate,
  39. baseData: { id: record.id },
  40. })
  41. .open();
  42. };
  43. const handleDomain = (record: any) => {
  44. formDomainApi
  45. .setData({
  46. baseData: { ...record },
  47. })
  48. .open();
  49. };
  50. const handleMenu = (record: any) => {
  51. formMenuApi
  52. .setData({
  53. baseData: { ...record },
  54. })
  55. .open();
  56. };
  57. const handleActionClick = async ({
  58. code,
  59. row,
  60. }: OnActionClickParams<CmsSiteApi.RecordItem>) => {
  61. switch (code) {
  62. case 'delete': {
  63. await handleDelete(row.id);
  64. break;
  65. }
  66. case 'domain': {
  67. await handleDomain(row);
  68. break;
  69. }
  70. case 'edit': {
  71. handleEdit(row, true);
  72. break;
  73. }
  74. case 'menu': {
  75. await handleMenu(row);
  76. break;
  77. }
  78. case 'setStatus': {
  79. await handleUpdateStatus(row);
  80. break;
  81. }
  82. }
  83. };
  84. const [Grid, { reload }] = useVbenVxeGrid(
  85. useTableGridOptions({
  86. formOptions: {
  87. schema: useSearchSchema(),
  88. },
  89. gridOptions: {
  90. columns: useColumns(handleActionClick),
  91. proxyConfig: {
  92. ajax: {
  93. query: async ({ page }, formValues) => {
  94. return await CmsSiteApi.getPage({
  95. pageIndex: page.currentPage,
  96. pageSize: page.pageSize,
  97. ...formValues,
  98. });
  99. },
  100. },
  101. },
  102. } as VxeTableGridOptions,
  103. }),
  104. );
  105. </script>
  106. <template>
  107. <Page auto-content-height>
  108. <FormEditModal @success="handelSuccess" />
  109. <FormMenuModal />
  110. <FormDomainModal />
  111. <Grid>
  112. <template #toolbar-tools>
  113. <Button
  114. class="mr-2"
  115. type="primary"
  116. v-access:code="'site:add'"
  117. @click="() => handleEdit({}, false)"
  118. >
  119. 新增站点
  120. </Button>
  121. </template>
  122. </Grid>
  123. </Page>
  124. </template>