From ee3af0293bd36545bee1044ebc03045a361a1fc2 Mon Sep 17 00:00:00 2001 From: YunaiV Date: Sun, 28 Sep 2025 13:02:10 +0800 Subject: [PATCH] =?UTF-8?q?feat=EF=BC=9A=E3=80=90antd=E3=80=91=E3=80=90crm?= =?UTF-8?q?=E3=80=91=E4=BA=A7=E5=93=81=E7=9A=84=E5=88=97=E8=A1=A8=E3=80=81?= =?UTF-8?q?=E8=AF=A6=E6=83=85=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../web-antd/src/router/routes/modules/crm.ts | 2 +- .../src/views/crm/clue/detail/index.vue | 2 +- .../src/views/crm/contact/detail/index.vue | 3 +- .../src/views/crm/customer/detail/index.vue | 7 ++-- .../detail-data.ts => detail/data.ts} | 0 .../{modules/detail.vue => detail/index.vue} | 38 ++++++++++--------- .../modules/info.vue} | 2 +- apps/web-antd/src/views/crm/product/index.ts | 10 +---- apps/web-antd/src/views/crm/product/index.vue | 11 +++--- .../views/crm/product/modules/detail-list.vue | 2 +- .../src/views/crm/product/modules/form.vue | 2 +- .../crm/product/modules/product-table.vue | 2 +- 12 files changed, 38 insertions(+), 43 deletions(-) rename apps/web-antd/src/views/crm/product/{modules/detail-data.ts => detail/data.ts} (100%) rename apps/web-antd/src/views/crm/product/{modules/detail.vue => detail/index.vue} (75%) rename apps/web-antd/src/views/crm/product/{modules/detail-info.vue => detail/modules/info.vue} (90%) diff --git a/apps/web-antd/src/router/routes/modules/crm.ts b/apps/web-antd/src/router/routes/modules/crm.ts index 9d752b89..c26cd552 100644 --- a/apps/web-antd/src/router/routes/modules/crm.ts +++ b/apps/web-antd/src/router/routes/modules/crm.ts @@ -82,7 +82,7 @@ const routes: RouteRecordRaw[] = [ title: '产品详情', activePath: '/crm/product', }, - component: () => import('#/views/crm/product/modules/detail.vue'), + component: () => import('#/views/crm/product/detail/index.vue'), }, ], }, diff --git a/apps/web-antd/src/views/crm/clue/detail/index.vue b/apps/web-antd/src/views/crm/clue/detail/index.vue index cd92f072..1de9d8b5 100644 --- a/apps/web-antd/src/views/crm/clue/detail/index.vue +++ b/apps/web-antd/src/views/crm/clue/detail/index.vue @@ -107,7 +107,7 @@ async function handleTransform(): Promise { /** 加载数据 */ onMounted(() => { - clueId.value = route.params.id as number; + clueId.value = Number(route.params.id); getClueDetail(); }); diff --git a/apps/web-antd/src/views/crm/contact/detail/index.vue b/apps/web-antd/src/views/crm/contact/detail/index.vue index 16835514..cfde0d2a 100644 --- a/apps/web-antd/src/views/crm/contact/detail/index.vue +++ b/apps/web-antd/src/views/crm/contact/detail/index.vue @@ -16,6 +16,7 @@ import { BizTypeEnum } from '#/api/crm/permission'; import { useDescription } from '#/components/description'; import { OperateLog } from '#/components/operate-log'; import { ACTION_ICON, TableAction } from '#/components/table-action'; +import { $t } from '#/locales'; import { BusinessDetailsList } from '#/views/crm/business'; import { FollowUp } from '#/views/crm/followup'; import { PermissionList, TransferForm } from '#/views/crm/permission'; @@ -87,7 +88,7 @@ function handleTransfer() { /** 加载数据 */ onMounted(() => { - contactId.value = route.params.id as number; + contactId.value = Number(route.params.id); getContactDetail(); }); diff --git a/apps/web-antd/src/views/crm/customer/detail/index.vue b/apps/web-antd/src/views/crm/customer/detail/index.vue index edb1eaa9..740c0e43 100644 --- a/apps/web-antd/src/views/crm/customer/detail/index.vue +++ b/apps/web-antd/src/views/crm/customer/detail/index.vue @@ -22,6 +22,7 @@ import { BizTypeEnum } from '#/api/crm/permission'; import { useDescription } from '#/components/description'; import { AsyncOperateLog } from '#/components/operate-log'; import { ACTION_ICON, TableAction } from '#/components/table-action'; +import { $t } from '#/locales'; import { BusinessDetailsList } from '#/views/crm/business'; import { ContactDetailsList } from '#/views/crm/contact/components'; import { ContractDetailsList } from '#/views/crm/contract'; @@ -77,11 +78,11 @@ async function loadCustomerDetail() { try { customer.value = await getCustomer(customerId.value); // 操作日志 - const logList = await getOperateLogPage({ + const res = await getOperateLogPage({ bizType: BizTypeEnum.CRM_CUSTOMER, bizId: customerId.value, }); - logList.value = logList.list; + logList.value = res.list; } finally { loading.value = false; } @@ -198,7 +199,7 @@ async function handleUpdateDealStatus(): Promise { /** 加载数据 */ onMounted(() => { - customerId.value = route.params.id as number; + customerId.value = Number(route.params.id); loadCustomerDetail(); }); diff --git a/apps/web-antd/src/views/crm/product/modules/detail-data.ts b/apps/web-antd/src/views/crm/product/detail/data.ts similarity index 100% rename from apps/web-antd/src/views/crm/product/modules/detail-data.ts rename to apps/web-antd/src/views/crm/product/detail/data.ts diff --git a/apps/web-antd/src/views/crm/product/modules/detail.vue b/apps/web-antd/src/views/crm/product/detail/index.vue similarity index 75% rename from apps/web-antd/src/views/crm/product/modules/detail.vue rename to apps/web-antd/src/views/crm/product/detail/index.vue index 726413fc..b389af0e 100644 --- a/apps/web-antd/src/views/crm/product/modules/detail.vue +++ b/apps/web-antd/src/views/crm/product/detail/index.vue @@ -17,18 +17,16 @@ import { useDescription } from '#/components/description'; import { AsyncOperateLog } from '#/components/operate-log'; import { ProductDetailsInfo } from '#/views/crm/product'; -import { useDetailSchema } from './detail-data'; - -const loading = ref(false); +import { useDetailSchema } from './data'; const route = useRoute(); const router = useRouter(); const tabs = useTabs(); -const productId = ref(0); - -const product = ref({} as CrmProductApi.Product); -const productLogList = ref([]); +const loading = ref(false); // 加载中 +const productId = ref(0); // 产品编号 +const product = ref({} as CrmProductApi.Product); // 产品详情 +const logList = ref([]); // 操作日志 const [Descriptions] = useDescription({ componentProps: { @@ -40,15 +38,19 @@ const [Descriptions] = useDescription({ }); /** 加载详情 */ -async function loadProductDetail() { +async function getProductDetail() { loading.value = true; - const data = await getProduct(productId.value); - const logList = await getOperateLogPage({ - bizType: BizTypeEnum.CRM_PRODUCT, - bizId: productId.value, - }); - productLogList.value = logList.list; - product.value = data; + try { + product.value = await getProduct(productId.value); + // 操作日志 + const res = await getOperateLogPage({ + bizType: BizTypeEnum.CRM_PRODUCT, + bizId: productId.value, + }); + logList.value = res.list; + } finally { + loading.value = false; + } loading.value = false; } @@ -58,10 +60,10 @@ function handleBack() { router.push('/crm/product'); } -// 加载数据 +/** 加载数据 */ onMounted(() => { productId.value = Number(route.params.id); - loadProductDetail(); + getProductDetail(); }); @@ -81,7 +83,7 @@ onMounted(() => { - + diff --git a/apps/web-antd/src/views/crm/product/modules/detail-info.vue b/apps/web-antd/src/views/crm/product/detail/modules/info.vue similarity index 90% rename from apps/web-antd/src/views/crm/product/modules/detail-info.vue rename to apps/web-antd/src/views/crm/product/detail/modules/info.vue index 4f728e01..320f650b 100644 --- a/apps/web-antd/src/views/crm/product/modules/detail-info.vue +++ b/apps/web-antd/src/views/crm/product/detail/modules/info.vue @@ -3,7 +3,7 @@ import type { CrmProductApi } from '#/api/crm/product'; import { useDescription } from '#/components/description'; -import { useDetailBaseSchema } from './detail-data'; +import { useDetailBaseSchema } from '../data'; defineProps<{ product: CrmProductApi.Product; // 产品信息 diff --git a/apps/web-antd/src/views/crm/product/index.ts b/apps/web-antd/src/views/crm/product/index.ts index a9038b46..9efbddbd 100644 --- a/apps/web-antd/src/views/crm/product/index.ts +++ b/apps/web-antd/src/views/crm/product/index.ts @@ -1,15 +1,7 @@ import { defineAsyncComponent } from 'vue'; export const ProductDetailsInfo = defineAsyncComponent( - () => import('./modules/detail-info.vue'), -); - -export const ProductForm = defineAsyncComponent( - () => import('./modules/form.vue'), -); - -export const ProductDetails = defineAsyncComponent( - () => import('./modules/detail.vue'), + () => import('./detail/modules/info.vue'), ); export const ProductDetailsList = defineAsyncComponent( diff --git a/apps/web-antd/src/views/crm/product/index.vue b/apps/web-antd/src/views/crm/product/index.vue index ebe47cea..e234c033 100644 --- a/apps/web-antd/src/views/crm/product/index.vue +++ b/apps/web-antd/src/views/crm/product/index.vue @@ -28,7 +28,7 @@ const [FormModal, formModalApi] = useVbenModal({ }); /** 刷新表格 */ -function onRefresh() { +function handleRefresh() { gridApi.query(); } @@ -61,10 +61,8 @@ async function handleDelete(row: CrmProductApi.Product) { }); try { await deleteProduct(row.id as number); - message.success({ - content: $t('ui.actionMessage.deleteSuccess', [row.name]), - }); - onRefresh(); + message.success($t('ui.actionMessage.deleteSuccess', [row.name])); + handleRefresh(); } finally { hideLoading(); } @@ -91,6 +89,7 @@ const [Grid, gridApi] = useVbenVxeGrid({ }, rowConfig: { keyField: 'id', + isHover: true, }, toolbarConfig: { refresh: true, @@ -102,7 +101,7 @@ const [Grid, gridApi] = useVbenVxeGrid({