index.vue 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. <template>
  2. <div class="p-4">
  3. <BasicTable @register="registerTable" :indexColumnProps="indexColumnProps">
  4. <template #tableTitle>
  5. <a-button preIcon="ant-design:plus-outlined" type="primary" @click="handleAdd" style="margin-right: 5px">新增</a-button>
  6. </template>
  7. <template #status="{ record, text }">
  8. <a-tag color="pink" v-if="text == 0">禁用</a-tag>
  9. <a-tag color="#87d068" v-if="text == 1">正常</a-tag>
  10. </template>
  11. <template #action="{ record }">
  12. <TableAction :actions="getActions(record)" />
  13. </template>
  14. </BasicTable>
  15. <RouteModal @register="registerDrawer" @success="reload" />
  16. </div>
  17. </template>
  18. <script lang="ts" name="monitor-route" setup>
  19. import { ref } from 'vue';
  20. import { BasicTable, TableAction } from '/@/components/Table';
  21. import { useModal } from '/@/components/Modal';
  22. import { getRouteList, deleteRoute } from './route.api';
  23. import { columns } from './route.data';
  24. import RouteModal from './RouteModal.vue';
  25. import { useMessage } from '/@/hooks/web/useMessage';
  26. import { useDrawer } from '/@/components/Drawer';
  27. import { useListPage } from '/@/hooks/system/useListPage';
  28. const { createMessage } = useMessage();
  29. const [registerDrawer, { openDrawer }] = useDrawer();
  30. const checkedKeys = ref<Array<string | number>>([]);
  31. // 列表页面公共参数、方法
  32. const { prefixCls, tableContext } = useListPage({
  33. designScope: 'router-template',
  34. tableProps: {
  35. title: '路由列表',
  36. api: getRouteList,
  37. useSearchForm: false,
  38. columns: columns,
  39. },
  40. });
  41. const [registerTable, { reload }, { rowSelection, selectedRowKeys }] = tableContext;
  42. /**
  43. * 序号列配置
  44. */
  45. const indexColumnProps = {
  46. dataIndex: 'index',
  47. width: '15px',
  48. };
  49. /**
  50. * 操作列定义
  51. * @param record
  52. */
  53. function getActions(record) {
  54. return [
  55. {
  56. label: '编辑',
  57. onClick: handleEdit.bind(null, record),
  58. },
  59. {
  60. label: '删除',
  61. popConfirm: {
  62. title: '是否确认删除',
  63. confirm: handleDelete.bind(null, record),
  64. },
  65. },
  66. ];
  67. }
  68. /**
  69. * 选择事件
  70. */
  71. function onSelectChange(selectedRowKeys: (string | number)[]) {
  72. checkedKeys.value = selectedRowKeys;
  73. }
  74. /**
  75. * 新增事件
  76. */
  77. function handleAdd() {
  78. openDrawer(true, {
  79. isUpdate: false,
  80. });
  81. }
  82. /**
  83. * 编辑事件
  84. */
  85. function handleEdit(record) {
  86. openDrawer(true, {
  87. record,
  88. isUpdate: true,
  89. });
  90. }
  91. /**
  92. * 删除事件
  93. */
  94. async function handleDelete(record) {
  95. await deleteRoute({ id: record.id }, reload);
  96. }
  97. </script>