FormTable.vue 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. <template>
  2. <BasicTable
  3. @register="registerTable"
  4. :rowSelection="{ type: 'checkbox', selectedRowKeys: checkedKeys, onChange: onSelectChange }"
  5. >
  6. <template #form-custom> custom-slot </template>
  7. <template #headerTop>
  8. <a-alert type="info" show-icon>
  9. <template #message>
  10. <template v-if="checkedKeys.length > 0">
  11. <span>已选中{{ checkedKeys.length }}条记录(可跨页)</span>
  12. <a-button type="link" @click="checkedKeys = []" size="small">清空</a-button>
  13. </template>
  14. <template v-else>
  15. <span>未选中任何项目</span>
  16. </template>
  17. </template>
  18. </a-alert>
  19. </template>
  20. <template #toolbar>
  21. <a-button type="primary" @click="getFormValues">获取表单数据</a-button>
  22. </template>
  23. </BasicTable>
  24. </template>
  25. <script lang="ts">
  26. import { defineComponent, ref } from 'vue';
  27. import { BasicTable, useTable } from '/@/components/Table';
  28. import { getBasicColumns, getFormConfig } from './tableData';
  29. import { Alert } from 'ant-design-vue';
  30. import { demoListApi } from '/@/api/demo/table';
  31. export default defineComponent({
  32. components: { BasicTable, AAlert: Alert },
  33. setup() {
  34. const checkedKeys = ref<Array<string | number>>([]);
  35. const [registerTable, { getForm }] = useTable({
  36. title: '开启搜索区域',
  37. api: demoListApi,
  38. columns: getBasicColumns(),
  39. useSearchForm: true,
  40. formConfig: getFormConfig(),
  41. showTableSetting: true,
  42. showIndexColumn: false,
  43. rowKey: 'id',
  44. });
  45. function getFormValues() {
  46. console.log(getForm().getFieldsValue());
  47. }
  48. function onSelectChange(selectedRowKeys: (string | number)[]) {
  49. console.log(selectedRowKeys);
  50. checkedKeys.value = selectedRowKeys;
  51. }
  52. return {
  53. registerTable,
  54. getFormValues,
  55. checkedKeys,
  56. onSelectChange,
  57. };
  58. },
  59. });
  60. </script>