index.vue 7.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246
  1. <template>
  2. <div>
  3. <BasicTable @register="registerTable">
  4. <template #bodyCell="{ column, record }">
  5. <template v-if="column.key === 'master'">
  6. <Tag :color="record.master ? 'error' : 'success'">
  7. {{ commonDict(record.master, 0) }}
  8. </Tag>
  9. </template>
  10. <template v-if="column.key === 'type'">
  11. <span v-if="record.type == 'ali'">阿里云</span>
  12. <span v-else-if="record.type == 'db'">数据库</span>
  13. <span v-else-if="record.type == 'local'">本地存储</span>
  14. <span v-else-if="record.type == 'minio'">minio存储</span>
  15. </template>
  16. <template v-if="column.key === 'action'">
  17. <TableAction
  18. :actions="[
  19. {
  20. tooltip: '文件上传',
  21. label: '文件上传',
  22. onClick: handleUpdateModel.bind(null, record),
  23. },
  24. {
  25. auth: 'storage:config:query',
  26. icon: 'icon-eye|iconfont',
  27. tooltip: '查看',
  28. label: '查看',
  29. onClick: handleView.bind(null, record),
  30. },
  31. {
  32. auth: 'storage:config:edit',
  33. icon: 'icon-edit|iconfont',
  34. tooltip: '编辑',
  35. label: '编辑',
  36. onClick: handleEdit.bind(null, record),
  37. },
  38. ]"
  39. :dropDownActions="[
  40. {
  41. auth: 'storage:config:edit',
  42. tooltip: '主配置',
  43. label: '主配置',
  44. ifShow: !record.master,
  45. popConfirm: {
  46. title: '是否确认设置为主配置',
  47. placement: 'left',
  48. confirm: handleMaster.bind(null, record),
  49. },
  50. },
  51. {
  52. auth: 'storage:config:remove',
  53. icon: 'icon-delete|iconfont',
  54. tooltip: '删除',
  55. label: '删除',
  56. color: 'error',
  57. popConfirm: {
  58. title: '是否确定要删除此配置?',
  59. placement: 'left',
  60. confirm: handleDelete.bind(null, record),
  61. },
  62. },
  63. ]"
  64. />
  65. </template>
  66. </template>
  67. <template #toolbar>
  68. <Button
  69. v-auth="['storage:config:add']"
  70. type="primary"
  71. @click="handleCreate"
  72. preIcon="icon-plus|iconfont"
  73. >
  74. 新增
  75. </Button>
  76. <Button
  77. v-auth="['storage:config:remove']"
  78. type="primary"
  79. danger
  80. @click="handleDelete(null)"
  81. preIcon="icon-delete|iconfont"
  82. >
  83. 批量删除
  84. </Button>
  85. </template>
  86. </BasicTable>
  87. <FormDrawer @register="registerDrawer" @success="handleSuccess" />
  88. <ViewDrawer @register="registerDrawerView" @success="handleSuccess" />
  89. <UploadModal @register="registerUpload" />
  90. </div>
  91. </template>
  92. <script lang="ts" setup>
  93. import { Tag } from 'ant-design-vue';
  94. import { onBeforeMount, ref } from 'vue';
  95. import { Button } from '/@/components/Button';
  96. import { BasicTable, useTable, TableAction } from '/@/components/Table';
  97. import UploadModal from './uploadModel.vue';
  98. import { useMessage } from '/@/hooks/web/useMessage';
  99. import FormDrawer from './formDrawer.vue';
  100. import ViewDrawer from './viewDrawer.vue';
  101. import { columns, searchFormSchema } from './data';
  102. import {
  103. infraStorageconfigQueryPage,
  104. infraStorageconfigRemove,
  105. infraStorageconfigMaster,
  106. } from '/@/api/infra/infraStorageConfigApi';
  107. import { useDrawer } from '/@/components/Drawer';
  108. import { commonDict } from '/@/utils';
  109. import { useModal } from '/@/components/Modal';
  110. onBeforeMount(async () => {});
  111. const { createConfirm, createMessage } = useMessage();
  112. // const [registerModal, { openModal }] = useModal();
  113. const [registerDrawer, { openDrawer }] = useDrawer();
  114. const [registerDrawerView, { openDrawer: openDrawerView }] = useDrawer();
  115. const [registerUpload, { openModal: openUpload }] = useModal();
  116. const tableSort = ref([
  117. {
  118. field: 'master',
  119. direction: 'DESC',
  120. },
  121. {
  122. field: 'create_time',
  123. direction: 'DESC',
  124. },
  125. ]) as any;
  126. const [registerTable, { reload, getSelectRowKeys, clearSelectedRowKeys }] = useTable({
  127. title: '文件存储配置 ',
  128. api: infraStorageconfigQueryPage,
  129. rowKey: 'id',
  130. columns,
  131. showIndexColumn: true,
  132. rowSelection: { type: 'checkbox' },
  133. formConfig: {
  134. labelWidth: 120,
  135. schemas: searchFormSchema,
  136. autoSubmitOnEnter: true,
  137. baseColProps: { xs: 24, sm: 12, md: 12, lg: 8 },
  138. resetButtonOptions: {
  139. preIcon: 'icon-delete|iconfont',
  140. },
  141. submitButtonOptions: {
  142. preIcon: 'icon-search|iconfont',
  143. },
  144. },
  145. useSearchForm: true,
  146. bordered: true,
  147. actionColumn: {
  148. width: 260,
  149. title: '操作',
  150. dataIndex: 'action',
  151. },
  152. beforeFetch: handleBeforeFetch,
  153. sortFn: handleSortFn,
  154. });
  155. // 详情按钮事件
  156. function handleView(record: Recordable) {
  157. console.log(record);
  158. openDrawerView(true, {
  159. record,
  160. });
  161. }
  162. // 新增按钮事件
  163. function handleCreate() {
  164. openDrawer(true, {
  165. isUpdate: false,
  166. });
  167. }
  168. // 编辑按钮事件
  169. function handleEdit(record: Recordable) {
  170. openDrawer(true, {
  171. record,
  172. isUpdate: true,
  173. });
  174. }
  175. // 删除按钮事件
  176. async function handleDelete(record: Recordable) {
  177. if (record) {
  178. await infraStorageconfigRemove([record.id]);
  179. createMessage.success('删除成功!');
  180. await reload();
  181. } else {
  182. const keys = getSelectRowKeys();
  183. if (keys.length > 0) {
  184. createConfirm({
  185. content: '你确定要删除?',
  186. iconType: 'warning',
  187. onOk: async () => {
  188. const keys = getSelectRowKeys();
  189. await infraStorageconfigRemove(keys);
  190. createMessage.success('删除成功!');
  191. await reload();
  192. clearSelectedRowKeys();
  193. },
  194. });
  195. } else {
  196. createMessage.warning('请选择要删除的数据');
  197. }
  198. }
  199. }
  200. // 设置主配置
  201. async function handleMaster(record: Recordable) {
  202. if (record) {
  203. await infraStorageconfigMaster(record.id);
  204. createMessage.success('设置为主配置成功!');
  205. await reload();
  206. }
  207. }
  208. // 打开上传测试弹窗
  209. function handleUpdateModel(record: Recordable) {
  210. openUpload(true, { record });
  211. }
  212. // 表格点击字段排序
  213. function handleSortFn(sortInfo) {
  214. if (sortInfo?.order && sortInfo?.columnKey) {
  215. // 默认单列排序
  216. tableSort.value = [
  217. {
  218. field: sortInfo.columnKey,
  219. direction: sortInfo.order.replace(/(\w+)(end)/g, '$1').toUpperCase(),
  220. },
  221. ];
  222. }
  223. }
  224. // 表格请求之前,对参数进行处理, 添加默认 排序
  225. function handleBeforeFetch(params) {
  226. return { ...params, orders: tableSort.value };
  227. }
  228. // 弹窗回调事件
  229. async function handleSuccess({ isUpdate, values }) {
  230. console.log(isUpdate);
  231. console.log(values);
  232. await reload();
  233. }
  234. </script>