index.vue 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185
  1. <template>
  2. <div>
  3. <BasicTable @register="registerTable">
  4. <template #bodyCell="{ column, record }">
  5. <template v-if="column.key === 'size'"> {{ record.size }} kb </template>
  6. <template v-if="column.key === 'action'">
  7. <TableAction
  8. :actions="[
  9. {
  10. auth: 'storage:record:query',
  11. icon: 'icon-eye|iconfont',
  12. tooltip: '查看',
  13. label: '查看',
  14. onClick: handleView.bind(null, record),
  15. },
  16. {
  17. auth: 'storage:record:edit',
  18. icon: 'icon-edit|iconfont',
  19. tooltip: '编辑',
  20. label: '编辑',
  21. onClick: handleEdit.bind(null, record),
  22. },
  23. {
  24. auth: 'storage:record:remove',
  25. icon: 'icon-delete|iconfont',
  26. tooltip: '删除',
  27. label: '删除',
  28. color: 'error',
  29. popConfirm: {
  30. title: '是否确认删除',
  31. placement: 'left',
  32. confirm: handleDelete.bind(null, record),
  33. },
  34. },
  35. ]"
  36. />
  37. </template>
  38. </template>
  39. <template #toolbar>
  40. <Button
  41. v-auth="['storage:record:add']"
  42. type="primary"
  43. @click="handleCreate"
  44. preIcon="icon-plus|iconfont"
  45. >
  46. 新增
  47. </Button>
  48. <Button
  49. v-auth="['storage:record:remove']"
  50. type="primary"
  51. danger
  52. @click="handleDelete(null)"
  53. preIcon="icon-delete|iconfont"
  54. >
  55. 批量删除
  56. </Button>
  57. </template>
  58. </BasicTable>
  59. <FormDrawer @register="registerDrawer" @success="handleSuccess" />
  60. <ViewDrawer @register="registerDrawerView" @success="handleSuccess" />
  61. </div>
  62. </template>
  63. <script lang="ts" setup>
  64. import { onBeforeMount, ref } from 'vue';
  65. import { Button } from '/@/components/Button';
  66. import { BasicTable, useTable, TableAction } from '/@/components/Table';
  67. import { useMessage } from '/@/hooks/web/useMessage';
  68. import FormDrawer from './formDrawer.vue';
  69. import ViewDrawer from './viewDrawer.vue';
  70. import { columns, searchFormSchema } from './data';
  71. import { storageRecordQueryPage, storageRecordRemove } from '/@/api/infra/storageRecordApi';
  72. import { useDrawer } from '/@/components/Drawer';
  73. onBeforeMount(async () => {});
  74. const { createConfirm, createMessage } = useMessage();
  75. // const [registerModal, { openModal }] = useModal();
  76. const [registerDrawer, { openDrawer }] = useDrawer();
  77. const [registerDrawerView, { openDrawer: openDrawerView }] = useDrawer();
  78. const tableSort = ref([
  79. {
  80. field: 'create_time',
  81. direction: 'DESC',
  82. },
  83. ]) as any;
  84. const [registerTable, { reload, getSelectRowKeys }] = useTable({
  85. title: ' ',
  86. api: storageRecordQueryPage,
  87. rowKey: 'id',
  88. columns,
  89. showIndexColumn: true,
  90. rowSelection: { type: 'checkbox' },
  91. formConfig: {
  92. labelWidth: 120,
  93. schemas: searchFormSchema,
  94. autoSubmitOnEnter: true,
  95. baseColProps: { xs: 24, sm: 12, md: 12, lg: 8 },
  96. resetButtonOptions: {
  97. preIcon: 'icon-delete|iconfont',
  98. },
  99. submitButtonOptions: {
  100. preIcon: 'icon-search|iconfont',
  101. },
  102. },
  103. useSearchForm: true,
  104. bordered: true,
  105. actionColumn: {
  106. width: 200,
  107. title: '操作',
  108. dataIndex: 'action',
  109. },
  110. beforeFetch: handleBeforeFetch,
  111. sortFn: handleSortFn,
  112. });
  113. // 详情按钮事件
  114. function handleView(record: Recordable) {
  115. console.log(record);
  116. openDrawerView(true, {
  117. record,
  118. });
  119. }
  120. // 新增按钮事件
  121. function handleCreate() {
  122. openDrawer(true, {
  123. isUpdate: false,
  124. });
  125. }
  126. // 编辑按钮事件
  127. function handleEdit(record: Recordable) {
  128. openDrawer(true, {
  129. record,
  130. isUpdate: true,
  131. });
  132. }
  133. // 删除按钮事件
  134. async function handleDelete(record: Recordable) {
  135. if (record) {
  136. await storageRecordRemove([record.id]);
  137. createMessage.success('删除成功!');
  138. await reload();
  139. } else {
  140. createConfirm({
  141. content: '你确定要删除?',
  142. iconType: 'warning',
  143. onOk: async () => {
  144. const keys = getSelectRowKeys();
  145. await storageRecordRemove(keys);
  146. createMessage.success('删除成功!');
  147. await reload();
  148. },
  149. });
  150. }
  151. }
  152. // 表格点击字段排序
  153. function handleSortFn(sortInfo) {
  154. if (sortInfo?.order && sortInfo?.columnKey) {
  155. // 默认单列排序
  156. tableSort.value = [
  157. {
  158. field: sortInfo.columnKey,
  159. direction: sortInfo.order.replace(/(\w+)(end)/g, '$1').toUpperCase(),
  160. },
  161. ];
  162. }
  163. }
  164. // 表格请求之前,对参数进行处理, 添加默认 排序
  165. function handleBeforeFetch(params) {
  166. return { ...params, orders: tableSort.value };
  167. }
  168. // 弹窗回调事件
  169. async function handleSuccess({ isUpdate, values }) {
  170. console.log(isUpdate);
  171. console.log(values);
  172. await reload();
  173. }
  174. </script>