From f625dd0de192e1a5f6d1cf61be573730ce48a534 Mon Sep 17 00:00:00 2001 From: Sisyphus Date: Wed, 1 Jul 2026 02:38:30 +0800 Subject: [PATCH] =?UTF-8?q?refactor:=20=E7=A7=BB=E5=8A=A8=20CategoryInfere?= =?UTF-8?q?nceService=20=E5=88=B0=20product-category=20=E6=A8=A1=E5=9D=97?= =?UTF-8?q?=EF=BC=8C=E4=BF=AE=E5=A4=8D=E5=BE=AA=E7=8E=AF=E4=BE=9D=E8=B5=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 移动 category-inference.service.ts 从 lead/ 到 product-category/ - 修复所有 import 路径 - InquiryPage 品类筛选改为动态 API 加载 --- apps/api/src/lead/lead.service.ts | 2 +- .../category-inference.service.ts | 0 .../src/product-category/product-category.module.ts | 2 +- apps/web/src/components/InquiryPage.tsx | 10 ++++++++-- 4 files changed, 10 insertions(+), 4 deletions(-) rename apps/api/src/{lead => product-category}/category-inference.service.ts (100%) diff --git a/apps/api/src/lead/lead.service.ts b/apps/api/src/lead/lead.service.ts index 57d050f..b599326 100644 --- a/apps/api/src/lead/lead.service.ts +++ b/apps/api/src/lead/lead.service.ts @@ -2,7 +2,7 @@ import { Injectable, NotFoundException, Logger, ServiceUnavailableException } fr import { PrismaService } from '../prisma/prisma.service' import { IntegrationService } from '../integration/integration.service' import { ProductCategoryService } from '../product-category/product-category.service' -import { CategoryInferenceService } from './category-inference.service' +import { CategoryInferenceService } from '../product-category/category-inference.service' @Injectable() export class LeadService { diff --git a/apps/api/src/lead/category-inference.service.ts b/apps/api/src/product-category/category-inference.service.ts similarity index 100% rename from apps/api/src/lead/category-inference.service.ts rename to apps/api/src/product-category/category-inference.service.ts diff --git a/apps/api/src/product-category/product-category.module.ts b/apps/api/src/product-category/product-category.module.ts index 7a17d49..c877de9 100644 --- a/apps/api/src/product-category/product-category.module.ts +++ b/apps/api/src/product-category/product-category.module.ts @@ -2,7 +2,7 @@ import { Module } from '@nestjs/common' import { PrismaModule } from '../prisma/prisma.module' import { ProductCategoryService } from './product-category.service' import { ProductCategoryController } from './product-category.controller' -import { CategoryInferenceService } from '../lead/category-inference.service' +import { CategoryInferenceService } from './category-inference.service' @Module({ imports: [PrismaModule], diff --git a/apps/web/src/components/InquiryPage.tsx b/apps/web/src/components/InquiryPage.tsx index 8087176..eca3a70 100644 --- a/apps/web/src/components/InquiryPage.tsx +++ b/apps/web/src/components/InquiryPage.tsx @@ -59,7 +59,6 @@ function mapLead(raw: any): Lead { const STATUS_OPTIONS = ['全部状态', '待复核', '待跟进', '跟进中', '已转询价', '已转协同', '已成交', '无效线索'] const LEVEL_OPTIONS = ['全部级别', 'S级', 'A级', 'B级', 'C级', 'D级'] -const CAT_OPTIONS = ['全部品类', '防火门', '配电箱', '电线电缆', '阀门', '钢材', '涂料', '混凝土', '变压器', '水泵', '风机', '管材', '开关', '灯具', '仪表', '电机'] const SOURCE_OPTIONS = ['全部来源', '中电建', '新矿集团', '中核集团'] const PERSON_OPTIONS = ['全部人员', '郑钊', '赵主任', '运营管理员', '未分配'] @@ -115,6 +114,7 @@ export default function InquiryPage({ onLeadDetail }: { onLeadDetail?: (id: stri const [fStatus, setFStatus] = useState('全部状态') const [fLevel, setFLevel] = useState('全部级别') const [fCat, setFCat] = useState('全部品类') + const [catOptions, setCatOptions] = useState(['全部品类']) const [fSource, setFSource] = useState('全部来源') const [fPerson, setFPerson] = useState('全部人员') @@ -145,6 +145,12 @@ export default function InquiryPage({ onLeadDetail }: { onLeadDetail?: (id: stri setLoading(false) }, []) + useEffect(() => { + fetch(`${API_BASE}/api/categories`).then(r => r.json()).then((data: any[]) => { + setCatOptions(['全部品类', ...data.map((c: any) => c.name)]) + }).catch(() => {}) + }, []) + useEffect(() => { loadLeads(fStar, fStatus, fLevel, fCat, fSource, fPerson, fTime) }, [loadLeads, fStar, fStatus, fLevel, fCat, fSource, fPerson, fTime]) const refreshLeads = async () => { @@ -396,7 +402,7 @@ export default function InquiryPage({ onLeadDetail }: { onLeadDetail?: (id: stri { label: '公告日期', value: fTime, set: setFTime, opts: ['全部日期', '今天', '昨天', '本周', '本月'] }, { label: '星级', value: fStar, set: setFStar, opts: ['全部星级', '5星', '4星', '3星', '2星及以下'] }, { label: '甲方级别', value: fLevel, set: setFLevel, opts: LEVEL_OPTIONS }, - { label: '品类', value: fCat, set: setFCat, opts: CAT_OPTIONS }, + { label: '品类', value: fCat, set: setFCat, opts: catOptions }, { label: '来源平台', value: fSource, set: setFSource, opts: SOURCE_OPTIONS }, { label: '负责人', value: fPerson, set: setFPerson, opts: PERSON_OPTIONS }, ].map(f => (