From 3edd133230161dd76a11860a533c7369e86b64c5 Mon Sep 17 00:00:00 2001 From: 18628386721 <18628386721@163.com> Date: Mon, 27 Jul 2026 22:39:49 +0800 Subject: [PATCH] =?UTF-8?q?MVP=E5=BA=95=E5=BA=A7=E2=91=A0:=E6=95=B0?= =?UTF-8?q?=E6=8D=AE=E5=9B=9B=E5=9F=9F=E5=91=BD=E5=90=8D=20=E2=80=94?= =?UTF-8?q?=E2=80=94=20=E9=A1=B9=E7=9B=AE/=E5=AE=A2=E6=88=B7/=E6=83=85?= =?UTF-8?q?=E6=8A=A5/=E4=BE=9B=E5=BA=94=E5=95=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Fable 5 Claude-Session: https://claude.ai/code/session_01KeDBx2PHLavbURXB8LJJ7m --- .../src/shared/gov/__tests__/domains.test.ts | 19 +++++++++-------- apps/web/src/shared/gov/domains.ts | 21 +++++++++---------- 2 files changed, 20 insertions(+), 20 deletions(-) diff --git a/apps/web/src/shared/gov/__tests__/domains.test.ts b/apps/web/src/shared/gov/__tests__/domains.test.ts index 2b8e6d0..e70c212 100644 --- a/apps/web/src/shared/gov/__tests__/domains.test.ts +++ b/apps/web/src/shared/gov/__tests__/domains.test.ts @@ -6,9 +6,10 @@ import { domainShort, sortDomains } from '../domains.ts'; describe('domainShort', () => { it('已知域给 2-3 字人读名', () => { - expect(domainShort('quote_intake')).toBe('受理'); - expect(domainShort('quote_sourcing')).toBe('寻源'); - expect(domainShort('shared')).toBe('共享'); + expect(domainShort('project')).toBe('项目'); + expect(domainShort('customer')).toBe('客户'); + expect(domainShort('intel')).toBe('情报'); + expect(domainShort('supplier')).toBe('供应商'); }); it('未知域回落到键的最后一段,超长截 4 字符', () => { @@ -18,12 +19,12 @@ describe('domainShort', () => { }); }); -describe('sortDomains —— 左轨按流程走向排', () => { - it('已知域按业务序,未知域殿后', () => { - expect(sortDomains(['shared', 'quote_pricing', 'zzz_custom', 'quote_intake'])).toEqual([ - 'quote_intake', - 'quote_pricing', - 'shared', +describe('sortDomains —— 按经营视角排,不按字母', () => { + it('已知域按业务序(项目最前),未知域殿后', () => { + expect(sortDomains(['supplier', 'intel', 'zzz_custom', 'project'])).toEqual([ + 'project', + 'intel', + 'supplier', 'zzz_custom', ]); }); diff --git a/apps/web/src/shared/gov/domains.ts b/apps/web/src/shared/gov/domains.ts index e7beac2..5df17a0 100644 --- a/apps/web/src/shared/gov/domains.ts +++ b/apps/web/src/shared/gov/domains.ts @@ -1,20 +1,19 @@ /** - * 数据域的人读短名 —— 左轨一枚钮只放得下 2-3 个字。 + * 数据域的人读短名 —— 导航一枚钮/一个页签只放得下 2-3 个字。 * - * 域键是活动的复合键(`quote_intake`),给人看要翻译; - * 字典之外的域回落到键的最后一段(截 4 字符)—— 新装的活动没配短名时,轨上先有个能认的名字。 + * 数据按**经营对象**四分(docs/产品设计.md 附录): + * 项目 = 每一单的流转单据;客户 / 情报 / 供应商 = 沉淀资产。 + * 字典之外的域回落到键的最后一段(截 4 字符)—— 新域没配短名时,先有个能认的名字。 */ export const DOMAIN_SHORT: Readonly> = { - quote_intake: '受理', - quote_sourcing: '寻源', - quote_pricing: '定价', - quote_negotiate: '议价', - quote_alternative: '替代', - shared: '共享', + project: '项目', + customer: '客户', + intel: '情报', + supplier: '供应商', }; -/** 业务序:受理 → 寻源 → 定价 → 议价 → 替代 → 共享 —— 左轨按流程走向排,不按字母 */ -const DOMAIN_ORDER = ['quote_intake', 'quote_sourcing', 'quote_pricing', 'quote_negotiate', 'quote_alternative', 'shared']; +/** 业务序:项目(每天看的)→ 客户 → 情报 → 供应商 —— 按经营视角排,不按字母 */ +const DOMAIN_ORDER = ['project', 'customer', 'intel', 'supplier']; export function sortDomains(domains: readonly string[]): string[] { return [...domains].sort((a, b) => {