FormTable.vue 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. <template>
  2. <BasicTable @register="registerTable">
  3. <template #form-custom> custom-slot </template>
  4. <template #headerTop>
  5. <Alert type="info" show-icon>
  6. <template #message>
  7. <template v-if="state.selectedRowKeys.length > 0">
  8. <span>已选中{{ state.selectedRowKeys.length }}条记录(可跨页)</span>
  9. <a-button type="link" @click="state.selectedRowKeys.splice(0)" size="small"
  10. >清空</a-button
  11. >
  12. </template>
  13. <template v-else>
  14. <span>未选中任何项目</span>
  15. </template>
  16. </template>
  17. </Alert>
  18. </template>
  19. <template #toolbar>
  20. <a-button type="primary" @click="getFormValues">获取表单数据</a-button>
  21. </template>
  22. </BasicTable>
  23. </template>
  24. <script lang="ts" setup>
  25. import { reactive } from 'vue';
  26. import { BasicTable, useTable } from '@/components/Table';
  27. import { getBasicColumns, getFormConfig } from './tableData';
  28. import { Alert } from 'ant-design-vue';
  29. import type { Key } from 'ant-design-vue/lib/table/interface';
  30. import { demoListApi } from '@/api/demo/table';
  31. const state = reactive<{
  32. selectedRowKeys: Key[];
  33. }>({
  34. selectedRowKeys: [],
  35. });
  36. const [registerTable, { getForm }] = useTable({
  37. title: '开启搜索区域',
  38. api: demoListApi,
  39. columns: getBasicColumns(),
  40. useSearchForm: true,
  41. formConfig: getFormConfig(),
  42. showTableSetting: true,
  43. tableSetting: { fullScreen: true },
  44. showIndexColumn: false,
  45. rowKey: 'id',
  46. rowSelection: {
  47. type: 'checkbox',
  48. selectedRowKeys: state.selectedRowKeys,
  49. onSelect: onSelect,
  50. onSelectAll: onSelectAll,
  51. },
  52. });
  53. function getFormValues() {
  54. console.log(getForm().getFieldsValue());
  55. }
  56. function onSelect(record, selected) {
  57. if (selected) {
  58. state.selectedRowKeys.push(record.id);
  59. } else {
  60. state.selectedRowKeys
  61. .splice(0)
  62. .push(...state.selectedRowKeys.filter((id) => id !== record.id));
  63. }
  64. }
  65. function onSelectAll(selected, selectedRows, changeRows) {
  66. const changeIds = changeRows.map((item) => item.id);
  67. if (selected) {
  68. state.selectedRowKeys.push(...changeIds);
  69. } else {
  70. state.selectedRowKeys.splice(0);
  71. }
  72. }
  73. </script>