diff --git a/apps/web-antd/package.json b/apps/web-antd/package.json index f48c00d96f8e3a3d8112080e5680feadcf2203e7..fdb068a518cf734af068cb130ede78939faa70d1 100644 --- a/apps/web-antd/package.json +++ b/apps/web-antd/package.json @@ -53,8 +53,7 @@ "pinia": "catalog:", "vue": "catalog:", "vue-dompurify-html": "catalog:", - "vue-router": "catalog:", - "vxe-table": "catalog:" + "vue-router": "catalog:" }, "devDependencies": { "@types/crypto-js": "catalog:" diff --git a/apps/web-antd/src/adapter/style.css b/apps/web-antd/src/adapter/style.css new file mode 100644 index 0000000000000000000000000000000000000000..6837b406634a50ad5221973380fcddeaca1b1326 --- /dev/null +++ b/apps/web-antd/src/adapter/style.css @@ -0,0 +1,79 @@ +/* 来自 @vben/plugins/vxe-table style.css */ +:root { + --vxe-ui-font-color: hsl(var(--foreground)); + --vxe-ui-font-primary-color: hsl(var(--primary)); + + /* --vxe-ui-font-lighten-color: #babdc0; + --vxe-ui-font-darken-color: #86898e; */ + --vxe-ui-font-disabled-color: hsl(var(--foreground) / 50%); + + /* base */ + --vxe-ui-base-popup-border-color: hsl(var(--border)); + --vxe-ui-input-disabled-color: hsl(var(--border) / 60%); + + /* --vxe-ui-base-popup-box-shadow: 0px 12px 30px 8px rgb(0 0 0 / 50%); */ + + /* layout */ + --vxe-ui-layout-background-color: hsl(var(--background)); + --vxe-ui-table-resizable-line-color: hsl(var(--heavy)); + + /* --vxe-ui-table-fixed-left-scrolling-box-shadow: 8px 0px 10px -5px hsl(var(--accent)); + --vxe-ui-table-fixed-right-scrolling-box-shadow: -8px 0px 10px -5px hsl(var(--accent)); */ + + /* input */ + --vxe-ui-input-border-color: hsl(var(--border)); + + /* --vxe-ui-input-placeholder-color: #8d9095; */ + + /* --vxe-ui-input-disabled-background-color: #262727; */ + + /* loading */ + --vxe-ui-loading-background-color: hsl(var(--overlay-content)); + + /* table */ + --vxe-ui-table-header-background-color: hsl(var(--accent)); + --vxe-ui-table-border-color: hsl(var(--border)); + --vxe-ui-table-row-hover-background-color: hsl(var(--accent-hover)); + --vxe-ui-table-row-striped-background-color: hsl(var(--accent) / 60%); + --vxe-ui-table-row-hover-striped-background-color: hsl(var(--accent)); + --vxe-ui-table-row-radio-checked-background-color: hsl(var(--accent)); + --vxe-ui-table-row-hover-radio-checked-background-color: hsl( + var(--accent-hover) + ); + --vxe-ui-table-row-checkbox-checked-background-color: hsl(var(--accent)); + --vxe-ui-table-row-hover-checkbox-checked-background-color: hsl( + var(--accent-hover) + ); + --vxe-ui-table-row-current-background-color: hsl(var(--accent)); + --vxe-ui-table-row-hover-current-background-color: hsl(var(--accent-hover)); + --vxe-ui-font-primary-tinge-color: hsl(var(--primary)); + --vxe-ui-font-primary-lighten-color: hsl(var(--primary) / 60%); + --vxe-ui-font-primary-darken-color: hsl(var(--primary)); + + /* height: auto !important; */ + + /* --vxe-ui-table-fixed-scrolling-box-shadow-color: rgb(0 0 0 / 80%); */ +} + +.vxe-tools--operate { + margin-right: 0.25rem; + margin-left: 0.75rem; +} + +.vxe-table-custom--checkbox-option:hover { + background: none !important; +} + +.vxe-toolbar { + padding: 0; +} + +.vxe-buttons--wrapper:not(:empty), +.vxe-tools--operate:not(:empty), +.vxe-tools--wrapper:not(:empty) { + padding: 0.6em 0; +} + +.vxe-tools--operate:not(:has(button)) { + margin-left: 0; +} diff --git a/apps/web-antd/src/adapter/vxe-table.ts b/apps/web-antd/src/adapter/vxe-table.ts index 44f867d22883dd86b96bd79f48aea87838943093..1903e1c0948a43da237b951ee136393531809ca5 100644 --- a/apps/web-antd/src/adapter/vxe-table.ts +++ b/apps/web-antd/src/adapter/vxe-table.ts @@ -4,7 +4,11 @@ import { h } from 'vue'; import { IconifyIcon } from '@vben/icons'; import { $te } from '@vben/locales'; -import { setupVbenVxeTable, useVbenVxeGrid } from '@vben/plugins/vxe-table'; +import { + AsyncComponents, + setupVbenVxeTable, + useVbenVxeGrid, +} from '@vben/plugins/vxe-table'; import { isFunction, isString } from '@vben/utils'; import { Button, Image, Popconfirm, Switch } from 'ant-design-vue'; @@ -14,6 +18,8 @@ import { $t } from '#/locales'; import { useVbenForm } from './form'; +import '#/adapter/style.css'; + setupVbenVxeTable({ configVxeTable: (vxeUI) => { vxeUI.setConfig({ @@ -111,6 +117,7 @@ setupVbenVxeTable({ loading: row[loadingKey] ?? false, 'onUpdate:checked': onChange, }; + async function onChange(newVal: any) { row[loadingKey] = true; try { @@ -122,6 +129,7 @@ setupVbenVxeTable({ row[loadingKey] = false; } } + return h(Switch, finallyProps); }, }); @@ -280,6 +288,10 @@ setupVbenVxeTable({ }); export { useVbenVxeGrid }; + +const [VxeTable, VxeColumn, VxeToolbar] = AsyncComponents; +export { VxeColumn, VxeTable, VxeToolbar }; + // add by 芋艿:from https://github.com/vbenjs/vue-vben-admin/blob/main/playground/src/adapter/vxe-table.ts#L264-L270 export type OnActionClickParams> = { code: string; diff --git a/apps/web-antd/src/bootstrap.ts b/apps/web-antd/src/bootstrap.ts index 43fd9628807f2537c19cab14ce30ccb27e16d76c..68d19ee1a9adc05a53e5558e3e6d6b35be8900d0 100644 --- a/apps/web-antd/src/bootstrap.ts +++ b/apps/web-antd/src/bootstrap.ts @@ -17,8 +17,6 @@ import { initComponentAdapter } from './adapter/component'; import App from './app.vue'; import { router } from './router'; -import 'vxe-table/styles/cssvar.scss'; // TODO @puhui999:这个必须导入哇?我看 use-vxe-grid.vue 已经导入了 - async function bootstrap(namespace: string) { // 初始化组件适配器 await initComponentAdapter(); diff --git a/apps/web-antd/src/components/table-toolbar/table-toolbar.vue b/apps/web-antd/src/components/table-toolbar/table-toolbar.vue index d385bed256a590875ee5207c18f2624a839d6db5..ae6e1c8b45ff7a5dc0e6afae681ac6ccc17dc076 100644 --- a/apps/web-antd/src/components/table-toolbar/table-toolbar.vue +++ b/apps/web-antd/src/components/table-toolbar/table-toolbar.vue @@ -1,14 +1,15 @@ @@ -192,7 +181,6 @@ onMounted(async () => { -