diff --git a/src/components/CardBox/index.vue b/src/components/CardBox/index.vue index 4da3e72c..a919d67e 100644 --- a/src/components/CardBox/index.vue +++ b/src/components/CardBox/index.vue @@ -54,8 +54,8 @@ delete: item.key === 'delete', }" > - - + + @@ -284,13 +284,14 @@ const handleClick = () => { display: flex; flex-grow: 1; - & > span, - button { - width: 100% !important; - border-radius: 0 !important; + & > :deep(span, button) { + width: 100%; + border-radius: 0; } - button { + :deep(button) { + width: 100%; + border-radius: 0; background: #f6f6f6; border: 1px solid #e6e6e6; color: #2f54eb; @@ -322,7 +323,7 @@ const handleClick = () => { flex-basis: 60px; flex-grow: 0; - button { + :deep(button) { background: @error-color-deprecated-bg; border: 1px solid @error-color-outline; @@ -348,7 +349,7 @@ const handleClick = () => { } } - button[disabled] { + :deep(button[disabled]) { background: @disabled-bg; border-color: @disabled-color; diff --git a/src/components/Table/index.tsx b/src/components/Table/index.tsx index 915657c7..5dd67a8c 100644 --- a/src/components/Table/index.tsx +++ b/src/components/Table/index.tsx @@ -11,16 +11,21 @@ enum ModelEnum { CARD = 'CARD', } +enum TypeEnum { + TREE = 'TREE', + PAGE = 'PAGE', +} + type RequestData = { code: string; result: { - data: Record[] | undefined; + data?: Record[] | undefined; pageIndex: number; pageSize: number; total: number; }; status: number; -} & Record; +} | Record; export interface ActionsType { key: string; @@ -39,16 +44,10 @@ export interface JColumnProps extends ColumnProps{ } export interface JTableProps extends TableProps{ - request?: (params: Record & { - pageSize: number; - pageIndex: number; - }) => Promise>; + request?: (params?: Record) => Promise>; cardBodyClass?: string; columns: JColumnProps[]; - params?: Record & { - pageSize: number; - pageIndex: number; - }; + params?: Record; model?: keyof typeof ModelEnum | undefined; // 显示table还是card // actions?: ActionsType[]; noPagination?: boolean; @@ -64,6 +63,8 @@ export interface JTableProps extends TableProps{ */ gridColumns?: number[]; alertRender?: boolean; + type?: keyof typeof TypeEnum; + defaultParams?: Record; } const JTable = defineComponent({ @@ -96,10 +97,6 @@ const JTable = defineComponent({ type: [String, undefined], default: undefined }, - // actions: { - // type: Array as PropType, - // default: () => [] - // }, noPagination: { type: Boolean, default: false @@ -127,6 +124,19 @@ const JTable = defineComponent({ alertRender: { type: Boolean, default: true + }, + type: { + type: String, + default: 'PAGE' + }, + defaultParams: { + type: Object, + default: () => { + return { + pageIndex: 0, + pageSize: 12 + } + } } } as any, setup(props: JTableProps ,{ slots, emit }){ @@ -162,25 +172,30 @@ const JTable = defineComponent({ const handleSearch = async (_params?: Record) => { loading.value = true if(props.request) { - const resp = await props.request({ - pageSize: 12, - pageIndex: 1, + const resp = await props.request({ + ...props.defaultParams, ..._params }) if(resp.status === 200){ - // 判断如果是最后一页且最后一页为空,就跳转到前一页 - if(resp.result?.data?.length === 0 && resp.result.total && resp.result.pageSize && resp.result.pageIndex) { - handleSearch({ - ..._params, - pageSize: pageSize.value, - pageIndex: pageIndex.value - 1, - }) + if(props.type === 'PAGE'){ + // 判断如果是最后一页且最后一页为空,就跳转到前一页 + if(resp.result.total && resp.result.pageSize && resp.result.pageIndex && resp.result?.data?.length === 0) { + handleSearch({ + ..._params, + pageSize: pageSize.value, + pageIndex: pageIndex.value > 0 ? pageIndex.value - 1 : 0, + }) + } else { + _dataSource.value = resp.result?.data || [] + pageIndex.value = resp.result?.pageIndex || 0 + pageSize.value = resp.result?.pageSize || 6 + total.value = resp.result?.total || 0 + } } else { - _dataSource.value = resp.result?.data || [] - pageIndex.value = resp.result?.pageIndex || 0 - pageSize.value = resp.result?.pageSize || 6 - total.value = resp.result?.total || 0 + _dataSource.value = resp?.result || [] } + } else { + _dataSource.value = [] } } else { _dataSource.value = props?.dataSource || [] @@ -282,7 +297,7 @@ const JTable = defineComponent({ {/* 分页 */} { - _dataSource.value.length && !props.noPagination && + (!!_dataSource.value.length) && !props.noPagination &&
({ current={pageIndex.value} pageSize={pageSize.value} pageSizeOptions={['12', '24', '48', '60', '100']} - showTotal={(total, range) => { - return `第 ${range[0]} - ${range[1]} 条/总共 ${total} 条` + showTotal={(num) => { + const minSize = pageIndex.value * pageSize.value + 1; + const MaxSize = (pageIndex.value + 1) * pageSize.value; + return `第 ${minSize} - ${MaxSize > num ? num : MaxSize} 条/总共 ${num} 条`; }} onChange={(page, size) => { handleSearch({ ...props.params, pageSize: size, - pageIndex: pageSize.value === size ? page : 1, + pageIndex: pageSize.value === size ? page : 0 }) }} /> diff --git a/src/store/menu.ts b/src/store/menu.ts new file mode 100644 index 00000000..b03e4202 --- /dev/null +++ b/src/store/menu.ts @@ -0,0 +1,24 @@ +import { defineStore } from "pinia"; + +export const useMenuStore = defineStore({ + id: 'menu', + state: () => ({ + menus: {} as {[key: string]: string}, + }), + getters: { + hasPermission(state) { + return (menuCode: string | string[]) => { + if (!menuCode) { + return true + } + if (!!Object.keys(state.menus).length) { + if (typeof menuCode === 'string') { + return !!this.menus[menuCode] + } + return menuCode.some(code => !!this.menus[code]) + } + return false + } + } + } +}) \ No newline at end of file diff --git a/src/views/demo/table/index.vue b/src/views/demo/table/index.vue index 5d305010..a7b923d9 100644 --- a/src/views/demo/table/index.vue +++ b/src/views/demo/table/index.vue @@ -37,7 +37,7 @@ - +