From 0cdfb7e956c226702f3930b4cfd9af4549af4d0b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B9=B4=E7=B3=95=E5=B4=BD=E5=B4=BD?= Date: Thu, 20 Aug 2026 19:18:39 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E8=8B=A5=E5=B9=B2=E5=8A=9F?= =?UTF-8?q?=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/web-antd/package.json | 1 + apps/web-antd/src/adapter/form.ts | 3 + .../src/components/crud/grid-options.ts | 11 +- apps/web-antd/src/components/crud/index.ts | 15 +- .../src/components/crud/simple-name-page.vue | 6 +- .../form/components/upload-image.vue | 118 +- apps/web-antd/src/util/excel.ts | 369 +++ apps/web-antd/src/util/tool.ts | 5 + .../src/views/color/card/config/table.ts | 7 +- apps/web-antd/src/views/color/card/index.vue | 4 +- .../src/views/color/company/index.vue | 2 +- .../views/customer/after-sale/api/index.ts | 18 + .../customer/after-sale/components/modal.vue | 52 + .../customer/after-sale/config/constants.ts | 12 + .../views/customer/after-sale/config/form.ts | 39 + .../customer/after-sale/config/search.ts | 29 + .../views/customer/after-sale/config/table.ts | 29 + .../src/views/customer/after-sale/index.vue | 112 + .../src/views/customer/dealer/index.vue | 13 +- .../views/customer/enterprise/config/table.ts | 2 +- .../src/views/customer/enterprise/index.vue | 4 +- .../src/views/customer/feedback/api/index.ts | 10 + .../customer/feedback/components/modal.vue | 51 + .../customer/feedback/config/constants.ts | 10 + .../views/customer/feedback/config/form.ts | 27 + .../views/customer/feedback/config/search.ts | 29 + .../views/customer/feedback/config/table.ts | 28 + .../src/views/customer/feedback/index.vue | 104 + .../src/views/customer/list/api/index.ts | 9 +- .../list/components/detail-drawer.vue | 67 +- .../src/views/customer/list/index.vue | 4 +- .../src/views/customer/order/index.vue | 46 +- .../src/views/customer/wx-user/index.vue | 23 +- .../src/views/dashboard/analytics/index.vue | 117 +- .../src/views/dashboard/workspace/index.vue | 310 +-- .../src/views/factory/image/config/table.ts | 2 +- .../src/views/factory/image/index.vue | 4 +- .../src/views/factory/info/api/index.ts | 9 + .../src/views/factory/info/config/table.ts | 2 +- .../web-antd/src/views/factory/info/index.vue | 86 +- .../src/views/goods/carousel/config/table.ts | 2 +- .../src/views/goods/carousel/index.vue | 4 +- .../catalogue/components/spec-drawer.vue | 27 +- .../src/views/goods/catalogue/config/form.ts | 8 + .../src/views/goods/catalogue/index.vue | 119 +- .../src/views/goods/category/config/table.ts | 2 +- .../src/views/goods/category/index.vue | 23 +- .../src/views/goods/image/config/table.ts | 2 +- apps/web-antd/src/views/goods/image/index.vue | 4 +- .../src/views/goods/package/api/index.ts | 51 + .../package/components/catalog-picker.vue | 296 +++ .../goods/package/components/items-drawer.vue | 228 ++ .../views/goods/package/components/modal.vue | 28 + .../views/goods/package/config/constants.ts | 11 + .../src/views/goods/package/config/form.ts | 86 + .../src/views/goods/package/config/search.ts | 39 + .../src/views/goods/package/config/table.ts | 25 + .../src/views/goods/package/index.vue | 145 ++ .../src/views/goods/price-sheet/index.vue | 2 +- apps/web-antd/src/views/goods/quote/index.vue | 66 +- apps/web-antd/src/views/material/api/index.ts | 39 +- .../views/material/components/sync-drawer.vue | 136 +- apps/web-antd/src/views/material/index.vue | 29 +- .../src/views/system/admin/config/table.ts | 4 +- .../web-antd/src/views/system/admin/index.vue | 2 +- .../config/components/OssConfigManage.vue | 211 +- .../components/PackageFeatureManage.vue | 189 ++ .../src/views/system/config/index.vue | 70 +- .../views/system/department/config/table.ts | 18 +- .../src/views/system/department/index.vue | 2 +- .../src/views/system/menu/config/table.ts | 4 +- apps/web-antd/src/views/system/menu/index.vue | 2 +- .../src/views/system/role/config/table.ts | 11 +- apps/web-antd/src/views/system/role/index.vue | 2 +- apps/web-antd/src/views/wx/app/config/form.ts | 27 + .../web-antd/src/views/wx/app/config/table.ts | 6 + apps/web-antd/src/views/wx/app/index.vue | 27 +- .../src/views/wx/template/api/index.ts | 50 +- .../wx/template/components/card-preview.vue | 403 ++-- .../wx/template/components/import-modal.vue | 8 +- apps/web-antd/src/views/wx/template/index.vue | 72 +- .../src/views/wx/template/preview-assets.ts | 53 + .../views/wx/template/studio/canvas-card.vue | 587 +++++ .../src/views/wx/template/studio/helpers.ts | 229 ++ .../src/views/wx/template/studio/index.vue | 1216 ++++++++++ .../wx/template/studio/phone-preview.vue | 2011 +++++++++++++++++ .../src/views/wx/template/studio/types.ts | 304 +++ apps/web-antd/vite.config.ts | 11 +- pnpm-lock.yaml | 325 +++ 89 files changed, 8133 insertions(+), 872 deletions(-) create mode 100644 apps/web-antd/src/util/excel.ts create mode 100644 apps/web-antd/src/views/customer/after-sale/api/index.ts create mode 100644 apps/web-antd/src/views/customer/after-sale/components/modal.vue create mode 100644 apps/web-antd/src/views/customer/after-sale/config/constants.ts create mode 100644 apps/web-antd/src/views/customer/after-sale/config/form.ts create mode 100644 apps/web-antd/src/views/customer/after-sale/config/search.ts create mode 100644 apps/web-antd/src/views/customer/after-sale/config/table.ts create mode 100644 apps/web-antd/src/views/customer/after-sale/index.vue create mode 100644 apps/web-antd/src/views/customer/feedback/api/index.ts create mode 100644 apps/web-antd/src/views/customer/feedback/components/modal.vue create mode 100644 apps/web-antd/src/views/customer/feedback/config/constants.ts create mode 100644 apps/web-antd/src/views/customer/feedback/config/form.ts create mode 100644 apps/web-antd/src/views/customer/feedback/config/search.ts create mode 100644 apps/web-antd/src/views/customer/feedback/config/table.ts create mode 100644 apps/web-antd/src/views/customer/feedback/index.vue create mode 100644 apps/web-antd/src/views/goods/package/api/index.ts create mode 100644 apps/web-antd/src/views/goods/package/components/catalog-picker.vue create mode 100644 apps/web-antd/src/views/goods/package/components/items-drawer.vue create mode 100644 apps/web-antd/src/views/goods/package/components/modal.vue create mode 100644 apps/web-antd/src/views/goods/package/config/constants.ts create mode 100644 apps/web-antd/src/views/goods/package/config/form.ts create mode 100644 apps/web-antd/src/views/goods/package/config/search.ts create mode 100644 apps/web-antd/src/views/goods/package/config/table.ts create mode 100644 apps/web-antd/src/views/goods/package/index.vue create mode 100644 apps/web-antd/src/views/system/config/components/PackageFeatureManage.vue create mode 100644 apps/web-antd/src/views/wx/template/preview-assets.ts create mode 100644 apps/web-antd/src/views/wx/template/studio/canvas-card.vue create mode 100644 apps/web-antd/src/views/wx/template/studio/helpers.ts create mode 100644 apps/web-antd/src/views/wx/template/studio/index.vue create mode 100644 apps/web-antd/src/views/wx/template/studio/phone-preview.vue create mode 100644 apps/web-antd/src/views/wx/template/studio/types.ts diff --git a/apps/web-antd/package.json b/apps/web-antd/package.json index a3f54003..6a31099c 100644 --- a/apps/web-antd/package.json +++ b/apps/web-antd/package.json @@ -47,6 +47,7 @@ "@vueuse/core": "catalog:", "ant-design-vue": "catalog:", "dayjs": "catalog:", + "exceljs": "^4.4.0", "jszip": "^3.10.1", "markdown-it": "^15.0.0", "pinia": "catalog:", diff --git a/apps/web-antd/src/adapter/form.ts b/apps/web-antd/src/adapter/form.ts index 67aae156..fa11ce82 100644 --- a/apps/web-antd/src/adapter/form.ts +++ b/apps/web-antd/src/adapter/form.ts @@ -21,6 +21,9 @@ async function initSetupVbenForm() { Radio: 'checked', Switch: 'checked', Upload: 'fileList', + // 自研上传组件用 v-model(modelValue),不跟 antd 的 value 走 + UploadImage: 'modelValue', + UploadDoc: 'modelValue', }, }, rules: { diff --git a/apps/web-antd/src/components/crud/grid-options.ts b/apps/web-antd/src/components/crud/grid-options.ts index b0ac9cf7..c9e49015 100644 --- a/apps/web-antd/src/components/crud/grid-options.ts +++ b/apps/web-antd/src/components/crud/grid-options.ts @@ -19,7 +19,9 @@ interface CreateGridOptions { * 列表页表格配置的公共部分。 * 各模块的 table.ts 只写自己的列与请求,其余(勾选、工具栏、高度、代理)统一在这里。 */ -export function createGridOptions(options: CreateGridOptions): VxeGridProps { +export function createGridOptions( + options: CreateGridOptions, +): VxeGridProps { const { columns, extra = {}, @@ -56,12 +58,15 @@ export function createGridOptions(options: CreateGridOptions): VxeGridProps showOverflow: false, toolbarConfig: { custom: { icon: 'vxe-icon-menu' }, + // 必须显式打开:适配器在找不到 #toolbar-actions 时会先写成 enabled=false,深合并后会把整栏关掉 + enabled: true, export: false, print: false, refresh: true, - // @ts-ignore 适配器类型未声明 search + // @ts-expect-error 适配器类型未声明 search search: true, - slots: { buttons: 'toolbar-buttons' }, + // Vben 5.7 只认 toolbar-actions,页面插槽必须同名 + slots: { buttons: 'toolbar-actions' }, zoom: true, }, }; diff --git a/apps/web-antd/src/components/crud/index.ts b/apps/web-antd/src/components/crud/index.ts index 983e3314..906f7b17 100644 --- a/apps/web-antd/src/components/crud/index.ts +++ b/apps/web-antd/src/components/crud/index.ts @@ -11,10 +11,19 @@ export function toImageList(value?: null | string): string[] { return value ? [value] : []; } -/** 取图片数组第一项,空数组转空串 */ -export function firstImage(value?: null | string | string[]): string { +/** 取图片数组第一项,空数组转空串;对象则取 url */ +export function firstImage( + value?: null | Record | string | string[], +): string { if (Array.isArray(value)) { - return value[0] ?? ''; + const first = value[0]; + if (first && typeof first === 'object') { + return String(first.url || first.uid || ''); + } + return (first as string) ?? ''; + } + if (value && typeof value === 'object') { + return String(value.url || ''); } return value ?? ''; } diff --git a/apps/web-antd/src/components/crud/simple-name-page.vue b/apps/web-antd/src/components/crud/simple-name-page.vue index 4ee4112b..c83e13e8 100644 --- a/apps/web-antd/src/components/crud/simple-name-page.vue +++ b/apps/web-antd/src/components/crud/simple-name-page.vue @@ -17,10 +17,10 @@ import { useCrudTable } from './use-crud-table'; */ const props = defineProps<{ crudApi: CrudApi; - /** 名称列标题,如「分类名称」 */ - nameLabel: string; /** 页面与弹窗标题,如「工厂分类」 */ moduleTitle: string; + /** 名称列标题,如「分类名称」 */ + nameLabel: string; }>(); const gridOptions = createGridOptions({ @@ -56,7 +56,7 @@ const { FormModal, Grid, hasSelection, removeRows, showModal, toggleStatus } = :name-label="nameLabel" /> -