From f96d4ed77603ca1f908dcdc4a51bd2ce2178d10c Mon Sep 17 00:00:00 2001 From: Ben Lin <maobin001@msn.com> Date: 星期三, 19 六月 2024 10:10:58 +0800 Subject: [PATCH] 登录logo,其他 --- src/components/Table/src/BasicTable.vue | 553 +++++++++++++++++++++++++----------------------------- 1 files changed, 259 insertions(+), 294 deletions(-) diff --git a/src/components/Table/src/BasicTable.vue b/src/components/Table/src/BasicTable.vue index 7588adf..0e23298 100644 --- a/src/components/Table/src/BasicTable.vue +++ b/src/components/Table/src/BasicTable.vue @@ -20,40 +20,37 @@ v-bind="getBindValues" :rowClassName="getRowClassName" v-show="getEmptyDataIsShowTable" - @resizeColumn="handleResizeColumn" @change="handleTableChange" + @resize-column="setColumnWidth" + @expand="handleTableExpand" > <template #[item]="data" v-for="item in Object.keys($slots)" :key="item"> <slot :name="item" v-bind="data || {}"></slot> </template> <template #headerCell="{ column }"> - <HeaderCell :column="column" /> + <slot name="headerCell" v-bind="{ column }"> + <HeaderCell :column="column" /> + </slot> </template> - <!-- 澧炲姞瀵筧ntdv3.x鍏煎 --> <template #bodyCell="data"> <slot name="bodyCell" v-bind="data || {}"></slot> </template> - <!-- <template #[`header-${column.dataIndex}`] v-for="(column, index) in columns" :key="index">--> - <!-- <HeaderCell :column="column" />--> - <!-- </template>--> </Table> </div> </template> -<script lang="ts"> +<script lang="ts" setup> import type { BasicTableProps, TableActionType, SizeType, ColumnChangeParam, } from './types/table'; - - import { defineComponent, ref, computed, unref, toRaw, inject, watchEffect } from 'vue'; + import { ref, computed, unref, toRaw, inject, watch, useAttrs, useSlots } from 'vue'; import { Table } from 'ant-design-vue'; - import { BasicForm, useForm } from '/@/components/Form/index'; - import { PageWrapperFixedHeightKey } from '/@/enums/pageEnum'; + import { BasicForm, useForm } from '@/components/Form'; + import { PageWrapperFixedHeightKey } from '@/enums/pageEnum'; import HeaderCell from './components/HeaderCell.vue'; - import { InnerHandlers } from './types/table'; - + import { InnerHandlers, InnerMethods } from './types/table'; import { usePagination } from './hooks/usePagination'; import { useColumns } from './hooks/useColumns'; import { useDataSource } from './hooks/useDataSource'; @@ -68,296 +65,264 @@ import { createTableContext } from './hooks/useTableContext'; import { useTableFooter } from './hooks/useTableFooter'; import { useTableForm } from './hooks/useTableForm'; - import { useDesign } from '/@/hooks/web/useDesign'; - - import { omit } from 'lodash-es'; + import { useDesign } from '@/hooks/web/useDesign'; + import { omit, debounce } from 'lodash-es'; + import { useElementSize } from '@vueuse/core'; import { basicProps } from './props'; - import { isFunction } from '/@/utils/is'; - import { warn } from '/@/utils/log'; + import { isFunction } from '@/utils/is'; - export default defineComponent({ - name: 'BasicTable', - components: { - Table, - BasicForm, - HeaderCell, - }, - props: basicProps, - emits: [ - 'fetch-success', - 'fetch-error', - 'selection-change', - 'register', - 'row-click', - 'row-dbClick', - 'row-contextmenu', - 'row-mouseenter', - 'row-mouseleave', - 'edit-end', - 'edit-cancel', - 'edit-row-end', - 'edit-change', - 'expanded-rows-change', - 'change', - 'columns-change', - ], - setup(props, { attrs, emit, slots, expose }) { - const tableElRef = ref(null); - const tableData = ref([]); + defineOptions({ name: 'BasicTable' }); - const wrapRef = ref(null); - const formRef = ref(null); - const innerPropsRef = ref<Partial<BasicTableProps>>(); + const props = defineProps(basicProps); - const { prefixCls } = useDesign('basic-table'); - const [registerForm, formActions] = useForm(); + const emit = defineEmits([ + 'fetch-success', + 'fetch-error', + 'selection-change', + 'register', + 'row-click', + 'row-dbClick', + 'row-contextmenu', + 'row-mouseenter', + 'row-mouseleave', + 'edit-end', + 'edit-cancel', + 'edit-row-end', + 'edit-change', + 'expanded-rows-change', + 'change', + 'columns-change', + ]); - const getProps = computed(() => { - return { ...props, ...unref(innerPropsRef) } as BasicTableProps; - }); + const attrs = useAttrs(); + const slots = useSlots(); - const isFixedHeightPage = inject(PageWrapperFixedHeightKey, false); - watchEffect(() => { - unref(isFixedHeightPage) && - props.canResize && - warn( - "'canResize' of BasicTable may not work in PageWrapper with 'fixedHeight' (especially in hot updates)", - ); - }); + const tableElRef = ref(null); + const tableData = ref([]); - const { getLoading, setLoading } = useLoading(getProps); - const { - getPaginationInfo, - getPagination, - setPagination, - setShowPagination, - getShowPagination, - } = usePagination(getProps); + const wrapRef = ref(null); + const formRef = ref(null); + const innerPropsRef = ref<Partial<BasicTableProps>>(); - const { - getRowSelection, - getRowSelectionRef, - getSelectRows, - setSelectedRows, - clearSelectedRowKeys, - getSelectRowKeys, - deleteSelectRowByKey, - setSelectedRowKeys, - } = useRowSelection(getProps, tableData, emit); + const { height } = useElementSize(wrapRef); - const { - handleTableChange: onTableChange, - getDataSourceRef, - getDataSource, - getRawDataSource, - setTableData, - updateTableDataRecord, - deleteTableDataRecord, - insertTableDataRecord, - findTableDataRecord, - fetch, - getRowKey, - reload, - getAutoCreateKey, - updateTableData, - } = useDataSource( - getProps, - { - tableData, - getPaginationInfo, - setLoading, - setPagination, - getFieldsValue: formActions.getFieldsValue, - clearSelectedRowKeys, - }, - emit, - ); + const { prefixCls } = useDesign('basic-table'); + const [registerForm, formActions] = useForm(); - function handleTableChange(...args) { - onTableChange.call(undefined, ...args); - emit('change', ...args); - // 瑙e喅閫氳繃useTable娉ㄥ唽onChange鏃朵笉璧蜂綔鐢ㄧ殑闂 - const { onChange } = unref(getProps); - onChange && isFunction(onChange) && onChange.call(undefined, ...args); - } - - const { - getViewColumns, - getColumns, - setCacheColumnsByField, - setCacheColumns, - setColumns, - getColumnsRef, - getCacheColumns, - } = useColumns(getProps, getPaginationInfo); - - const { getScrollRef, redoHeight } = useTableScroll( - getProps, - tableElRef, - getColumnsRef, - getRowSelectionRef, - getDataSourceRef, - wrapRef, - formRef, - ); - - const { scrollTo } = useTableScrollTo(tableElRef, getDataSourceRef); - - const { customRow } = useCustomRow(getProps, { - setSelectedRowKeys, - getSelectRowKeys, - clearSelectedRowKeys, - getAutoCreateKey, - emit, - }); - - const { getRowClassName } = useTableStyle(getProps, prefixCls); - - const { getExpandOption, expandAll, expandRows, collapseAll } = useTableExpand( - getProps, - tableData, - emit, - ); - - const handlers: InnerHandlers = { - onColumnsChange: (data: ColumnChangeParam[]) => { - emit('columns-change', data); - // support useTable - unref(getProps).onColumnsChange?.(data); - }, - }; - - const { getHeaderProps } = useTableHeader(getProps, slots, handlers); - - const { getFooterProps } = useTableFooter( - getProps, - getScrollRef, - tableElRef, - getDataSourceRef, - ); - - const { getFormProps, replaceFormSlotKey, getFormSlotKeys, handleSearchInfoChange } = - useTableForm(getProps, slots, fetch, getLoading); - - const getBindValues = computed(() => { - const dataSource = unref(getDataSourceRef); - let propsData: any = { - ...attrs, - customRow, - ...unref(getProps), - ...unref(getHeaderProps), - scroll: unref(getScrollRef), - loading: unref(getLoading), - tableLayout: 'fixed', - rowSelection: unref(getRowSelectionRef), - rowKey: unref(getRowKey), - columns: toRaw(unref(getViewColumns)), - pagination: toRaw(unref(getPaginationInfo)), - dataSource, - footer: unref(getFooterProps), - ...unref(getExpandOption), - }; - // if (slots.expandedRowRender) { - // propsData = omit(propsData, 'scroll'); - // } - - propsData = omit(propsData, ['class', 'onChange']); - return propsData; - }); - - const getWrapperClass = computed(() => { - const values = unref(getBindValues); - return [ - prefixCls, - attrs.class, - { - [`${prefixCls}-form-container`]: values.useSearchForm, - [`${prefixCls}--inset`]: values.inset, - }, - ]; - }); - - const getEmptyDataIsShowTable = computed(() => { - const { emptyDataIsShowTable, useSearchForm } = unref(getProps); - if (emptyDataIsShowTable || !useSearchForm) { - return true; - } - return !!unref(getDataSourceRef).length; - }); - - function setProps(props: Partial<BasicTableProps>) { - innerPropsRef.value = { ...unref(innerPropsRef), ...props }; - } - - const tableAction: TableActionType = { - reload, - getSelectRows, - setSelectedRows, - clearSelectedRowKeys, - getSelectRowKeys, - deleteSelectRowByKey, - setPagination, - setTableData, - updateTableDataRecord, - deleteTableDataRecord, - insertTableDataRecord, - findTableDataRecord, - redoHeight, - setSelectedRowKeys, - setColumns, - setLoading, - getDataSource, - getRawDataSource, - setProps, - getRowSelection, - getPaginationRef: getPagination, - getColumns, - getCacheColumns, - emit, - updateTableData, - setShowPagination, - getShowPagination, - setCacheColumnsByField, - expandAll, - expandRows, - collapseAll, - scrollTo, - getSize: () => { - return unref(getBindValues).size as SizeType; - }, - setCacheColumns, - }; - createTableContext({ ...tableAction, wrapRef, getBindValues }); - - expose(tableAction); - - emit('register', tableAction, formActions); - - function handleResizeColumn(w, col) { - col.width = w; - } - return { - formRef, - tableElRef, - getBindValues, - getLoading, - registerForm, - handleSearchInfoChange, - getEmptyDataIsShowTable, - handleTableChange, - getRowClassName, - wrapRef, - tableAction, - redoHeight, - getFormProps: getFormProps as any, - replaceFormSlotKey, - getFormSlotKeys, - getWrapperClass, - columns: getViewColumns, - handleResizeColumn, - }; - }, + const getProps = computed(() => { + return { ...props, ...unref(innerPropsRef) } as BasicTableProps; }); + + const isFixedHeightPage = inject(PageWrapperFixedHeightKey, false); + + const { getLoading, setLoading } = useLoading(getProps); + const { getPaginationInfo, getPagination, setPagination, setShowPagination, getShowPagination } = + usePagination(getProps); + + const { + getRowSelection, + getRowSelectionRef, + getSelectRows, + setSelectedRows, + clearSelectedRowKeys, + getSelectRowKeys, + deleteSelectRowByKey, + setSelectedRowKeys, + } = useRowSelection(getProps, tableData, emit); + + const { + handleTableChange: onTableChange, + getDataSourceRef, + getDataSource, + getRawDataSource, + getSearchInfo, + setTableData, + updateTableDataRecord, + deleteTableDataRecord, + insertTableDataRecord, + findTableDataRecord, + fetch, + getRowKey, + reload, + getAutoCreateKey, + updateTableData, + } = useDataSource( + getProps, + { + tableData, + getPaginationInfo, + setLoading, + setPagination, + getFieldsValue: formActions.getFieldsValue, + clearSelectedRowKeys, + }, + emit, + ); + + function handleTableChange(pagination: any, filters: any, sorter: any, extra: any) { + onTableChange(pagination, filters, sorter); + emit('change', pagination, filters, sorter); + // 瑙e喅閫氳繃useTable娉ㄥ唽onChange鏃朵笉璧蜂綔鐢ㄧ殑闂 + const { onChange } = unref(getProps); + onChange && isFunction(onChange) && onChange(pagination, filters, sorter, extra); + } + + const { + getViewColumns, + getColumns, + setCacheColumnsByField, + setCacheColumns, + setColumnWidth, + setColumns, + getColumnsRef, + getCacheColumns, + } = useColumns(getProps, getPaginationInfo); + + const { getScrollRef, redoHeight } = useTableScroll( + getProps, + tableElRef, + getColumnsRef, + getRowSelectionRef, + getDataSourceRef, + wrapRef, + formRef, + ); + const debounceRedoHeight = debounce(redoHeight, 50); + + const { scrollTo } = useTableScrollTo(tableElRef, getDataSourceRef); + + const { customRow } = useCustomRow(getProps, { + setSelectedRowKeys, + getSelectRowKeys, + clearSelectedRowKeys, + getAutoCreateKey, + emit, + }); + + const { getRowClassName } = useTableStyle(getProps, prefixCls); + + const { getExpandOption, expandAll, expandRows, collapseRows, collapseAll, handleTableExpand } = + useTableExpand(getProps, tableData, emit); + + const handlers: InnerHandlers = { + onColumnsChange: (data: ColumnChangeParam[]) => { + emit('columns-change', data); + // support useTable + unref(getProps).onColumnsChange?.(data); + }, + }; + + const methods: InnerMethods = { + clearSelectedRowKeys, + getSelectRowKeys, + }; + + const { getHeaderProps } = useTableHeader(getProps, slots, handlers, methods); + + const { getFooterProps } = useTableFooter(getProps, getScrollRef, tableElRef, getDataSourceRef); + + const { getFormProps, replaceFormSlotKey, getFormSlotKeys, handleSearchInfoChange } = + useTableForm(getProps, slots, fetch, getLoading); + + const getBindValues = computed(() => { + const dataSource = unref(getDataSourceRef); + let propsData: any = { + ...attrs, + customRow, + ...unref(getProps), + ...unref(getHeaderProps), + scroll: unref(getScrollRef), + loading: unref(getLoading), + tableLayout: 'fixed', + rowSelection: unref(getRowSelectionRef), + rowKey: unref(getRowKey), + columns: toRaw(unref(getViewColumns)), + pagination: toRaw(unref(getPaginationInfo)), + dataSource, + footer: unref(getFooterProps), + ...unref(getExpandOption), + }; + // if (slots.expandedRowRender) { + // propsData = omit(propsData, 'scroll'); + // } + + propsData = omit(propsData, ['class', 'onChange']); + return propsData; + }); + + const getWrapperClass = computed(() => { + const values = unref(getBindValues); + return [ + prefixCls, + attrs.class, + { + [`${prefixCls}-form-container`]: values.useSearchForm, + [`${prefixCls}--inset`]: values.inset, + }, + ]; + }); + + const getEmptyDataIsShowTable = computed(() => { + const { emptyDataIsShowTable, useSearchForm } = unref(getProps); + if (emptyDataIsShowTable || !useSearchForm) { + return true; + } + return !!unref(getDataSourceRef).length; + }); + + watch(height, () => { + unref(isFixedHeightPage) && props.canResize && debounceRedoHeight(); + }); + + function setProps(props: Partial<BasicTableProps>) { + innerPropsRef.value = { ...unref(innerPropsRef), ...props }; + } + + const tableAction: TableActionType = { + reload, + getSelectRows, + setSelectedRows, + clearSelectedRowKeys, + getSelectRowKeys, + deleteSelectRowByKey, + setPagination, + setTableData, + updateTableDataRecord, + deleteTableDataRecord, + insertTableDataRecord, + findTableDataRecord, + redoHeight, + setSelectedRowKeys, + setColumns, + setLoading, + getDataSource, + getRawDataSource, + getSearchInfo, + setProps, + getRowSelection, + getPaginationRef: getPagination, + getColumns, + getCacheColumns, + emit, + updateTableData, + setShowPagination, + getShowPagination, + setCacheColumnsByField, + expandAll, + collapseAll, + expandRows, + collapseRows, + scrollTo, + getSize: () => { + return unref(getBindValues).size as SizeType; + }, + setCacheColumns, + }; + createTableContext({ ...tableAction, wrapRef, getBindValues }); + + emit('register', tableAction, formActions); + + defineExpose({ tableElRef, ...tableAction }); </script> <style lang="less"> @border-color: #cecece4d; @@ -377,7 +342,7 @@ &-row__striped { td { - background-color: @app-content-background; + background-color: @app-content-background !important; } } @@ -431,7 +396,7 @@ //} } - .ant-pagination { + .ant-table-wrapper .ant-pagination { margin: 10px 0 0; } -- Gitblit v1.9.3