import { TableColumnProps, Table, Row, Col, Space, Tooltip, Dropdown, Menu, Button, DropdownButton, PaginationProps } from 'ant-design-vue' import { DownOutlined } from '@ant-design/icons-vue' import { PropType, computed, defineComponent, reactive, ref, defineEmits, FunctionalComponent } from 'vue' /** * @description Table Pro 超级table 将各种业务与操作融合起来 */ interface GenericListProps { dataSource: T; } interface Props { columns: TableColumnProps[], pagination: PaginationProps | false request: { get: (record: any) => {data, sum}, params: any } } const TablePro: FunctionalComponent = (props) => { const { request } = props console.log('defineComponent:', props) const columns = [{ title: '', key: 'ky' }] const emits = defineEmits(['add']) const loading = ref(false) const columnsPro = ref<(TableColumnProps & {hidden: boolean}) []>(columns.map(column => ({ ...column, hidden: false }))) const columnsFilter = computed(() => columnsPro.value.filter(column => !column.hidden)) const rowCustomized = computed(() => columns.map(item => ({ title: item.title, key: item.key }))) const pagination = reactive(Object.assign({}, { current: 1, pageSize: 10, total: 0, onChange: (page: number, pageSize: number) => onChangePage(page, pageSize) }, typeof props.pagination === 'boolean' ? {} : { ...props.pagination })) const dataSource = ref() const opraMeun = ( 新增 exportExcel()}> 导出 pure()}> 纯净 ) const exportExcel = () => {} const pure = () => {} const reload = () => dispatchRequest() const onChangePage = (page: number, pageSize: number) => { pagination.current = page pagination.pageSize = pageSize dispatchRequest() } const dispatchRequest = async () => { loading.value = true const { data, sum } = await request.get({ ...request.params, page: pagination.current, pageSize: pagination.pageSize }) loading.value = false pagination.total = sum dataSource.value = data } /** * 展示或者隐藏对应的column */ const swicthColumn = (index: number) => { columnsPro.value[index].hidden = !columnsPro.value[index].hidden } return ( <> {/* */} {/* @click.prevent */} {/* */} { rowCustomized.value.map((item, index) => ( swicthColumn(index)} > {item.title} )) } } > {/* @click.prevent */} {/* */} } onClick={reload} > {/* dataSource={dataSource} */}
) } export default TablePro