scaffold-engine 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +117 -0
- package/engine.project.example.json +23 -0
- package/package.json +49 -0
- package/scripts/postinstall.cjs +42 -0
- package/specs/catalogs/action-templates.yaml +189 -0
- package/specs/catalogs/child-templates.yaml +54 -0
- package/specs/catalogs/field-fragments.yaml +203 -0
- package/specs/catalogs/object-catalog.yaml +35 -0
- package/specs/catalogs/object-name-suggestions.yaml +30 -0
- package/specs/catalogs/object-templates.yaml +45 -0
- package/specs/catalogs/pattern-catalog.yaml +48 -0
- package/specs/catalogs/status-templates.yaml +16 -0
- package/specs/projects/crm-pilot/customer.yaml +122 -0
- package/specs/projects/crm-pilot/lead.from-nl.yaml +76 -0
- package/specs/projects/crm-pilot/lead.yaml +82 -0
- package/specs/projects/generated-from-nl/crm-customer.yaml +158 -0
- package/specs/projects/generated-from-nl/crm-lead.yaml +76 -0
- package/specs/projects/generated-from-nl/crm-opportunity.yaml +78 -0
- package/specs/projects/generated-from-nl/crm-quote.yaml +78 -0
- package/specs/projects/generated-from-nl/custom-documentLines.yaml +125 -0
- package/specs/projects/generated-from-nl/custom-treeEntity.yaml +78 -0
- package/specs/projects/generated-from-nl/erp-material-pattern-test.yaml +79 -0
- package/specs/projects/generated-from-nl/erp-material.yaml +78 -0
- package/specs/projects/generated-from-nl/hr-orgUnit.yaml +100 -0
- package/specs/projects/pattern-examples/document-lines-demo.yaml +125 -0
- package/specs/projects/pattern-examples/tree-entity-demo.yaml +79 -0
- package/specs/rules/business-model.schema.json +262 -0
- package/specs/rules/extension-boundaries.json +26 -0
- package/specs/rules/requirement-draft.schema.json +75 -0
- package/specs/rules/spec-governance.json +29 -0
- package/specs/templates/crm/customer.template.yaml +121 -0
- package/specs/templates/crm/lead.template.yaml +82 -0
- package/tools/analyze-requirement.cjs +950 -0
- package/tools/cli.cjs +59 -0
- package/tools/create-draft.cjs +18 -0
- package/tools/engine.cjs +47 -0
- package/tools/generate-draft.cjs +33 -0
- package/tools/generate-module.cjs +1218 -0
- package/tools/init-project.cjs +194 -0
- package/tools/lib/draft-toolkit.cjs +357 -0
- package/tools/lib/model-toolkit.cjs +482 -0
- package/tools/lib/pattern-renderers.cjs +166 -0
- package/tools/lib/renderers/detail-page-renderer.cjs +327 -0
- package/tools/lib/renderers/form-page-renderer.cjs +553 -0
- package/tools/lib/renderers/list-page-renderer.cjs +371 -0
- package/tools/lib/runtime-config.cjs +154 -0
- package/tools/patch-draft.cjs +57 -0
- package/tools/prompts/business-model-prompt.md +58 -0
- package/tools/run-requirement.cjs +672 -0
- package/tools/validate-draft.cjs +32 -0
- package/tools/validate-model.cjs +140 -0
- package/tools/verify-patterns.cjs +67 -0
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
suggestions:
|
|
2
|
+
- keywords: [组织树, 组织架构, 部门树, 组织单元]
|
|
3
|
+
patternRef: treeEntity
|
|
4
|
+
domain: hr
|
|
5
|
+
object: orgUnit
|
|
6
|
+
label: 组织单元
|
|
7
|
+
|
|
8
|
+
- keywords: [供应商, 供应商档案, 供应商管理]
|
|
9
|
+
patternRef: masterDetail
|
|
10
|
+
domain: erp
|
|
11
|
+
object: supplier
|
|
12
|
+
label: 供应商
|
|
13
|
+
|
|
14
|
+
- keywords: [销售订单]
|
|
15
|
+
patternRef: documentLines
|
|
16
|
+
domain: ecom
|
|
17
|
+
object: salesOrder
|
|
18
|
+
label: 销售订单
|
|
19
|
+
|
|
20
|
+
- keywords: [采购订单]
|
|
21
|
+
patternRef: documentLines
|
|
22
|
+
domain: erp
|
|
23
|
+
object: purchaseOrder
|
|
24
|
+
label: 采购订单
|
|
25
|
+
|
|
26
|
+
- keywords: [订单, 申请单, 单据]
|
|
27
|
+
patternRef: documentLines
|
|
28
|
+
domain: custom
|
|
29
|
+
object: orderDocument
|
|
30
|
+
label: 单据
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
templates:
|
|
2
|
+
crmRootCrud:
|
|
3
|
+
patternRef: statusEntity
|
|
4
|
+
detailSections: [basicInfo]
|
|
5
|
+
actionTemplateRef: crudBasic
|
|
6
|
+
fieldRefs: [ownerName]
|
|
7
|
+
|
|
8
|
+
statusFlowObject:
|
|
9
|
+
patternRef: statusEntity
|
|
10
|
+
detailSections: [basicInfo]
|
|
11
|
+
actionTemplateRef: crudWithStatusFlow
|
|
12
|
+
fieldRefs: [ownerName]
|
|
13
|
+
|
|
14
|
+
crmCustomerObject:
|
|
15
|
+
patternRef: masterDetail
|
|
16
|
+
detailSections: [basicInfo]
|
|
17
|
+
actionTemplateRef: crudWithToggle
|
|
18
|
+
fieldRefs: [ownerName]
|
|
19
|
+
childTemplateRefs: [customerContacts]
|
|
20
|
+
fields:
|
|
21
|
+
- name: source
|
|
22
|
+
label: 客户来源
|
|
23
|
+
fragmentRef: sourceCustomer
|
|
24
|
+
|
|
25
|
+
erpMasterData:
|
|
26
|
+
patternRef: singleEntity
|
|
27
|
+
detailSections: [basicInfo]
|
|
28
|
+
actionTemplateRef: crudBasic
|
|
29
|
+
|
|
30
|
+
documentLinesBasic:
|
|
31
|
+
patternRef: documentLines
|
|
32
|
+
detailSections: [basicInfo]
|
|
33
|
+
actionTemplateRef: crudBasic
|
|
34
|
+
childTemplateRefs: [documentLineItems]
|
|
35
|
+
|
|
36
|
+
documentLinesApproval:
|
|
37
|
+
patternRef: documentLines
|
|
38
|
+
detailSections: [basicInfo]
|
|
39
|
+
actionTemplateRef: crudWithSubmitApprove
|
|
40
|
+
childTemplateRefs: [documentLineItems]
|
|
41
|
+
|
|
42
|
+
treeEntityBasic:
|
|
43
|
+
patternRef: treeEntity
|
|
44
|
+
detailSections: [basicInfo]
|
|
45
|
+
actionTemplateRef: crudBasic
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
patterns:
|
|
2
|
+
singleEntity:
|
|
3
|
+
label: 单实体对象
|
|
4
|
+
description: 适用于单表对象,常见于台账、档案、基础资料等场景。
|
|
5
|
+
detectKeywords: [台账, 档案, 主数据, 基础资料, 单实体]
|
|
6
|
+
seedFieldRefs: [materialCode, materialName, statusErpBase]
|
|
7
|
+
defaultUi:
|
|
8
|
+
detailSections: [basicInfo]
|
|
9
|
+
defaultActionTemplateRef: crudBasic
|
|
10
|
+
|
|
11
|
+
masterDetail:
|
|
12
|
+
label: 主子表对象
|
|
13
|
+
description: 适用于主表带一张明细或联系人子表的对象。
|
|
14
|
+
detectKeywords: [主子表, 子表, 联系人, 附件, 地址, 明细]
|
|
15
|
+
seedFieldRefs: [customerCode, customerName, statusCrmBase]
|
|
16
|
+
seedChildTemplateRefs: [customerContacts]
|
|
17
|
+
defaultUi:
|
|
18
|
+
detailSections: [basicInfo]
|
|
19
|
+
defaultActionTemplateRef: crudWithToggle
|
|
20
|
+
defaultChildTemplateRefs: [customerContacts]
|
|
21
|
+
|
|
22
|
+
statusEntity:
|
|
23
|
+
label: 状态对象
|
|
24
|
+
description: 适用于带阶段、来源、状态流转的过程型对象。
|
|
25
|
+
detectKeywords: [状态流转, 阶段, 流程状态, 跟进, 转化]
|
|
26
|
+
seedFieldRefs: [leadCode, leadName, sourceLead, statusCrmFollow]
|
|
27
|
+
defaultUi:
|
|
28
|
+
detailSections: [basicInfo]
|
|
29
|
+
defaultActionTemplateRef: crudBasic
|
|
30
|
+
|
|
31
|
+
documentLines:
|
|
32
|
+
label: 单据明细对象
|
|
33
|
+
description: 适用于单据头加行项目明细的对象。
|
|
34
|
+
detectKeywords: [单据, 明细行, 行项目, 头表, 表头, 单据头, 明细表]
|
|
35
|
+
seedFieldRefs: [documentNo, documentTitle, bizDate, statusErpBase]
|
|
36
|
+
seedChildTemplateRefs: [documentLineItems]
|
|
37
|
+
defaultUi:
|
|
38
|
+
detailSections: [basicInfo]
|
|
39
|
+
defaultActionTemplateRef: crudBasic
|
|
40
|
+
|
|
41
|
+
treeEntity:
|
|
42
|
+
label: 树形对象
|
|
43
|
+
description: 适用于带父子层级关系的树形对象。
|
|
44
|
+
detectKeywords: [树, 树形, 层级, 父子, 上级, 下级, 分类树, 组织树]
|
|
45
|
+
seedFieldRefs: [categoryCode, categoryName, parentId, parentName, sortOrder, statusErpBase]
|
|
46
|
+
defaultUi:
|
|
47
|
+
detailSections: [basicInfo]
|
|
48
|
+
defaultActionTemplateRef: crudBasic
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
templates:
|
|
2
|
+
crmFollow:
|
|
3
|
+
options: [draft, following, converted, closed]
|
|
4
|
+
default: draft
|
|
5
|
+
|
|
6
|
+
crmBase:
|
|
7
|
+
options: [draft, active, inactive]
|
|
8
|
+
default: draft
|
|
9
|
+
|
|
10
|
+
crmClosed:
|
|
11
|
+
options: [draft, active, closed]
|
|
12
|
+
default: draft
|
|
13
|
+
|
|
14
|
+
erpBase:
|
|
15
|
+
options: [draft, active, inactive, blocked]
|
|
16
|
+
default: draft
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
meta:
|
|
2
|
+
domain: crm
|
|
3
|
+
object: customer
|
|
4
|
+
label: 客户
|
|
5
|
+
version: 0.1.0
|
|
6
|
+
description: >
|
|
7
|
+
CRM 试点对象。首期只验证客户主数据 + 联系人子表,
|
|
8
|
+
用于支撑 AI 输出结构化业务模型、校验、生成骨架与人工补充实现。
|
|
9
|
+
|
|
10
|
+
data:
|
|
11
|
+
table: crm_customer
|
|
12
|
+
fields:
|
|
13
|
+
- name: customerCode
|
|
14
|
+
label: 客户编码
|
|
15
|
+
type: string
|
|
16
|
+
required: true
|
|
17
|
+
unique: true
|
|
18
|
+
- name: customerName
|
|
19
|
+
label: 客户名称
|
|
20
|
+
type: string
|
|
21
|
+
required: true
|
|
22
|
+
- name: level
|
|
23
|
+
label: 客户等级
|
|
24
|
+
type: enum
|
|
25
|
+
options: [A, B, C]
|
|
26
|
+
default: B
|
|
27
|
+
- name: status
|
|
28
|
+
label: 状态
|
|
29
|
+
type: enum
|
|
30
|
+
options: [draft, active, inactive]
|
|
31
|
+
default: draft
|
|
32
|
+
- name: ownerName
|
|
33
|
+
label: 客户负责人
|
|
34
|
+
type: string
|
|
35
|
+
- name: source
|
|
36
|
+
label: 客户来源
|
|
37
|
+
type: enum
|
|
38
|
+
options: [manual, import, campaign]
|
|
39
|
+
default: manual
|
|
40
|
+
children:
|
|
41
|
+
- name: contacts
|
|
42
|
+
label: 联系人
|
|
43
|
+
table: crm_customer_contact
|
|
44
|
+
foreignKey: customerId
|
|
45
|
+
fields:
|
|
46
|
+
- name: contactName
|
|
47
|
+
label: 联系人姓名
|
|
48
|
+
type: string
|
|
49
|
+
required: true
|
|
50
|
+
- name: mobile
|
|
51
|
+
label: 手机号
|
|
52
|
+
type: string
|
|
53
|
+
- name: email
|
|
54
|
+
label: 邮箱
|
|
55
|
+
type: string
|
|
56
|
+
- name: isPrimary
|
|
57
|
+
label: 是否主联系人
|
|
58
|
+
type: boolean
|
|
59
|
+
default: false
|
|
60
|
+
|
|
61
|
+
app:
|
|
62
|
+
actions: [create, update, detail, list, activate, deactivate]
|
|
63
|
+
defaultStatus: draft
|
|
64
|
+
responseContract:
|
|
65
|
+
envelope: standard
|
|
66
|
+
listSchema: pagedList
|
|
67
|
+
detailSchema: object
|
|
68
|
+
mutationSchema: object
|
|
69
|
+
permissionProfile:
|
|
70
|
+
mode: inherit
|
|
71
|
+
resourceScope: object
|
|
72
|
+
actionPolicies:
|
|
73
|
+
- action: create
|
|
74
|
+
permission: create
|
|
75
|
+
- action: update
|
|
76
|
+
permission: update
|
|
77
|
+
- action: list
|
|
78
|
+
permission: list
|
|
79
|
+
- action: detail
|
|
80
|
+
permission: detail
|
|
81
|
+
- action: activate
|
|
82
|
+
permission: activate
|
|
83
|
+
- action: deactivate
|
|
84
|
+
permission: deactivate
|
|
85
|
+
statusFlow:
|
|
86
|
+
enabled: true
|
|
87
|
+
states: [draft, active, inactive]
|
|
88
|
+
transitions:
|
|
89
|
+
- action: activate
|
|
90
|
+
from: [draft, inactive]
|
|
91
|
+
to: active
|
|
92
|
+
- action: deactivate
|
|
93
|
+
from: [active]
|
|
94
|
+
to: inactive
|
|
95
|
+
validationRules:
|
|
96
|
+
- name: statusTransition
|
|
97
|
+
scope: workflow
|
|
98
|
+
rule: statusTransition
|
|
99
|
+
fields: [status]
|
|
100
|
+
message: 状态流转必须符合既定规则
|
|
101
|
+
errorCodes:
|
|
102
|
+
- code: VALIDATION_FAILED
|
|
103
|
+
message: 输入校验失败
|
|
104
|
+
- code: RECORD_NOT_FOUND
|
|
105
|
+
message: 客户不存在
|
|
106
|
+
- code: DUPLICATE_KEY
|
|
107
|
+
message: 客户编码已存在
|
|
108
|
+
- code: INVALID_STATUS_TRANSITION
|
|
109
|
+
message: 当前状态不允许执行该动作
|
|
110
|
+
|
|
111
|
+
ui:
|
|
112
|
+
list:
|
|
113
|
+
columns: [customerCode, customerName, level, status, ownerName, createdAt]
|
|
114
|
+
filters: [customerCode, customerName, status]
|
|
115
|
+
form:
|
|
116
|
+
groups:
|
|
117
|
+
- title: 基本信息
|
|
118
|
+
fields: [customerCode, customerName, level, status, ownerName, source]
|
|
119
|
+
- title: 联系人
|
|
120
|
+
childTable: contacts
|
|
121
|
+
detail:
|
|
122
|
+
sections: [basicInfo, contacts]
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
meta:
|
|
2
|
+
domain: crm
|
|
3
|
+
object: lead
|
|
4
|
+
label: 线索
|
|
5
|
+
version: 0.1.0
|
|
6
|
+
description: 由 requirement:analyze 从自然语言需求推导出的候选业务模型。
|
|
7
|
+
data:
|
|
8
|
+
table: crm_lead
|
|
9
|
+
fields:
|
|
10
|
+
- name: leadCode
|
|
11
|
+
label: 线索编号
|
|
12
|
+
type: string
|
|
13
|
+
required: true
|
|
14
|
+
unique: true
|
|
15
|
+
- name: leadName
|
|
16
|
+
label: 线索名称
|
|
17
|
+
type: string
|
|
18
|
+
required: true
|
|
19
|
+
- name: source
|
|
20
|
+
label: 线索来源
|
|
21
|
+
type: enum
|
|
22
|
+
options:
|
|
23
|
+
- website
|
|
24
|
+
- referral
|
|
25
|
+
- campaign
|
|
26
|
+
- manual
|
|
27
|
+
default: manual
|
|
28
|
+
- name: ownerName
|
|
29
|
+
label: 负责人
|
|
30
|
+
type: string
|
|
31
|
+
- name: phone
|
|
32
|
+
label: 联系电话
|
|
33
|
+
type: string
|
|
34
|
+
- name: status
|
|
35
|
+
label: 状态
|
|
36
|
+
type: enum
|
|
37
|
+
options:
|
|
38
|
+
- draft
|
|
39
|
+
- following
|
|
40
|
+
- converted
|
|
41
|
+
- closed
|
|
42
|
+
default: draft
|
|
43
|
+
app:
|
|
44
|
+
actions:
|
|
45
|
+
- create
|
|
46
|
+
- update
|
|
47
|
+
- list
|
|
48
|
+
- detail
|
|
49
|
+
defaultStatus: draft
|
|
50
|
+
ui:
|
|
51
|
+
list:
|
|
52
|
+
columns:
|
|
53
|
+
- leadCode
|
|
54
|
+
- leadName
|
|
55
|
+
- source
|
|
56
|
+
- ownerName
|
|
57
|
+
- status
|
|
58
|
+
- createdAt
|
|
59
|
+
filters:
|
|
60
|
+
- leadCode
|
|
61
|
+
- leadName
|
|
62
|
+
- source
|
|
63
|
+
- status
|
|
64
|
+
form:
|
|
65
|
+
groups:
|
|
66
|
+
- title: 基本信息
|
|
67
|
+
fields:
|
|
68
|
+
- leadCode
|
|
69
|
+
- leadName
|
|
70
|
+
- source
|
|
71
|
+
- ownerName
|
|
72
|
+
- phone
|
|
73
|
+
- status
|
|
74
|
+
detail:
|
|
75
|
+
sections:
|
|
76
|
+
- basicInfo
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
meta:
|
|
2
|
+
domain: crm
|
|
3
|
+
object: lead
|
|
4
|
+
label: 线索
|
|
5
|
+
version: 0.1.0
|
|
6
|
+
description: >
|
|
7
|
+
CRM 线索试点对象。用于验证纯主表对象在当前业务模型规范下的
|
|
8
|
+
自然语言抽取、规则校验与 API/Admin 骨架生成闭环。
|
|
9
|
+
|
|
10
|
+
data:
|
|
11
|
+
table: crm_lead
|
|
12
|
+
fields:
|
|
13
|
+
- name: leadCode
|
|
14
|
+
label: 线索编号
|
|
15
|
+
type: string
|
|
16
|
+
required: true
|
|
17
|
+
unique: true
|
|
18
|
+
- name: leadName
|
|
19
|
+
label: 线索名称
|
|
20
|
+
type: string
|
|
21
|
+
required: true
|
|
22
|
+
- name: source
|
|
23
|
+
label: 线索来源
|
|
24
|
+
type: enum
|
|
25
|
+
options: [website, referral, campaign, manual]
|
|
26
|
+
default: manual
|
|
27
|
+
- name: ownerName
|
|
28
|
+
label: 负责人
|
|
29
|
+
type: string
|
|
30
|
+
- name: phone
|
|
31
|
+
label: 联系电话
|
|
32
|
+
type: string
|
|
33
|
+
- name: status
|
|
34
|
+
label: 状态
|
|
35
|
+
type: enum
|
|
36
|
+
options: [draft, following, converted, closed]
|
|
37
|
+
default: draft
|
|
38
|
+
|
|
39
|
+
app:
|
|
40
|
+
actions: [create, update, detail, list]
|
|
41
|
+
defaultStatus: draft
|
|
42
|
+
responseContract:
|
|
43
|
+
envelope: standard
|
|
44
|
+
listSchema: pagedList
|
|
45
|
+
detailSchema: object
|
|
46
|
+
mutationSchema: object
|
|
47
|
+
permissionProfile:
|
|
48
|
+
mode: inherit
|
|
49
|
+
resourceScope: object
|
|
50
|
+
actionPolicies:
|
|
51
|
+
- action: create
|
|
52
|
+
permission: create
|
|
53
|
+
- action: update
|
|
54
|
+
permission: update
|
|
55
|
+
- action: list
|
|
56
|
+
permission: list
|
|
57
|
+
- action: detail
|
|
58
|
+
permission: detail
|
|
59
|
+
validationRules:
|
|
60
|
+
- name: uniqueLeadCode
|
|
61
|
+
scope: service
|
|
62
|
+
rule: unique
|
|
63
|
+
fields: [leadCode]
|
|
64
|
+
message: 线索编号必须唯一
|
|
65
|
+
errorCodes:
|
|
66
|
+
- code: VALIDATION_FAILED
|
|
67
|
+
message: 输入校验失败
|
|
68
|
+
- code: RECORD_NOT_FOUND
|
|
69
|
+
message: 线索不存在
|
|
70
|
+
- code: DUPLICATE_KEY
|
|
71
|
+
message: 线索编号已存在
|
|
72
|
+
|
|
73
|
+
ui:
|
|
74
|
+
list:
|
|
75
|
+
columns: [leadCode, leadName, source, ownerName, status, createdAt]
|
|
76
|
+
filters: [leadCode, leadName, source, status]
|
|
77
|
+
form:
|
|
78
|
+
groups:
|
|
79
|
+
- title: 基本信息
|
|
80
|
+
fields: [leadCode, leadName, source, ownerName, phone, status]
|
|
81
|
+
detail:
|
|
82
|
+
sections: [basicInfo]
|
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
meta:
|
|
2
|
+
domain: crm
|
|
3
|
+
object: customer
|
|
4
|
+
label: 客户
|
|
5
|
+
pattern: masterDetail
|
|
6
|
+
version: 0.1.0
|
|
7
|
+
description: 由 requirement:analyze 从自然语言需求推导出的候选业务模型。
|
|
8
|
+
data:
|
|
9
|
+
table: crm_customer
|
|
10
|
+
fields:
|
|
11
|
+
- name: ownerName
|
|
12
|
+
label: 负责人
|
|
13
|
+
type: string
|
|
14
|
+
- name: customerCode
|
|
15
|
+
label: 客户编码
|
|
16
|
+
type: string
|
|
17
|
+
required: true
|
|
18
|
+
unique: true
|
|
19
|
+
- name: customerName
|
|
20
|
+
label: 客户名称
|
|
21
|
+
type: string
|
|
22
|
+
required: true
|
|
23
|
+
- name: level
|
|
24
|
+
label: 客户等级
|
|
25
|
+
type: enum
|
|
26
|
+
options:
|
|
27
|
+
- A
|
|
28
|
+
- B
|
|
29
|
+
- C
|
|
30
|
+
default: B
|
|
31
|
+
- name: status
|
|
32
|
+
label: 状态
|
|
33
|
+
type: enum
|
|
34
|
+
options:
|
|
35
|
+
- draft
|
|
36
|
+
- active
|
|
37
|
+
- inactive
|
|
38
|
+
default: draft
|
|
39
|
+
- name: source
|
|
40
|
+
label: 客户来源
|
|
41
|
+
type: enum
|
|
42
|
+
options:
|
|
43
|
+
- manual
|
|
44
|
+
- import
|
|
45
|
+
- campaign
|
|
46
|
+
default: manual
|
|
47
|
+
children:
|
|
48
|
+
- name: contacts
|
|
49
|
+
label: 联系人
|
|
50
|
+
table: crm_customer_contact
|
|
51
|
+
foreignKey: customerId
|
|
52
|
+
fields:
|
|
53
|
+
- name: contactName
|
|
54
|
+
label: 联系人姓名
|
|
55
|
+
type: string
|
|
56
|
+
required: true
|
|
57
|
+
- name: mobile
|
|
58
|
+
label: 手机号
|
|
59
|
+
type: string
|
|
60
|
+
- name: email
|
|
61
|
+
label: 邮箱
|
|
62
|
+
type: string
|
|
63
|
+
- name: isPrimary
|
|
64
|
+
label: 是否主联系人
|
|
65
|
+
type: boolean
|
|
66
|
+
default: false
|
|
67
|
+
app:
|
|
68
|
+
actions:
|
|
69
|
+
- create
|
|
70
|
+
- update
|
|
71
|
+
- list
|
|
72
|
+
- detail
|
|
73
|
+
- activate
|
|
74
|
+
- deactivate
|
|
75
|
+
defaultStatus: draft
|
|
76
|
+
statusFlow:
|
|
77
|
+
enabled: true
|
|
78
|
+
states:
|
|
79
|
+
- draft
|
|
80
|
+
- active
|
|
81
|
+
- inactive
|
|
82
|
+
transitions:
|
|
83
|
+
- action: activate
|
|
84
|
+
from:
|
|
85
|
+
- draft
|
|
86
|
+
- inactive
|
|
87
|
+
to: active
|
|
88
|
+
- action: deactivate
|
|
89
|
+
from:
|
|
90
|
+
- active
|
|
91
|
+
to: inactive
|
|
92
|
+
responseContract:
|
|
93
|
+
envelope: standard
|
|
94
|
+
listSchema: pagedList
|
|
95
|
+
detailSchema: object
|
|
96
|
+
mutationSchema: object
|
|
97
|
+
permissionProfile:
|
|
98
|
+
mode: inherit
|
|
99
|
+
resourceScope: object
|
|
100
|
+
actionPolicies:
|
|
101
|
+
- action: create
|
|
102
|
+
permission: create
|
|
103
|
+
- action: update
|
|
104
|
+
permission: update
|
|
105
|
+
- action: list
|
|
106
|
+
permission: list
|
|
107
|
+
- action: detail
|
|
108
|
+
permission: detail
|
|
109
|
+
- action: activate
|
|
110
|
+
permission: activate
|
|
111
|
+
- action: deactivate
|
|
112
|
+
permission: deactivate
|
|
113
|
+
validationRules:
|
|
114
|
+
- name: statusTransition
|
|
115
|
+
scope: workflow
|
|
116
|
+
rule: statusTransition
|
|
117
|
+
fields:
|
|
118
|
+
- status
|
|
119
|
+
message: 状态流转必须符合既定规则
|
|
120
|
+
errorCodes:
|
|
121
|
+
- code: VALIDATION_FAILED
|
|
122
|
+
message: 输入校验失败
|
|
123
|
+
- code: RECORD_NOT_FOUND
|
|
124
|
+
message: 记录不存在
|
|
125
|
+
- code: DUPLICATE_KEY
|
|
126
|
+
message: 唯一键冲突
|
|
127
|
+
- code: INVALID_STATUS_TRANSITION
|
|
128
|
+
message: 当前状态不允许执行该动作
|
|
129
|
+
ui:
|
|
130
|
+
list:
|
|
131
|
+
columns:
|
|
132
|
+
- ownerName
|
|
133
|
+
- customerCode
|
|
134
|
+
- customerName
|
|
135
|
+
- status
|
|
136
|
+
- source
|
|
137
|
+
- createdAt
|
|
138
|
+
filters:
|
|
139
|
+
- customerCode
|
|
140
|
+
- customerName
|
|
141
|
+
- status
|
|
142
|
+
- source
|
|
143
|
+
form:
|
|
144
|
+
groups:
|
|
145
|
+
- title: 基本信息
|
|
146
|
+
fields:
|
|
147
|
+
- ownerName
|
|
148
|
+
- customerCode
|
|
149
|
+
- customerName
|
|
150
|
+
- level
|
|
151
|
+
- status
|
|
152
|
+
- source
|
|
153
|
+
- title: 联系人
|
|
154
|
+
childTable: contacts
|
|
155
|
+
detail:
|
|
156
|
+
sections:
|
|
157
|
+
- basicInfo
|
|
158
|
+
- contacts
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
meta:
|
|
2
|
+
domain: crm
|
|
3
|
+
object: lead
|
|
4
|
+
label: 线索
|
|
5
|
+
version: 0.1.0
|
|
6
|
+
description: 由 requirement:analyze 从自然语言需求推导出的候选业务模型。
|
|
7
|
+
data:
|
|
8
|
+
table: crm_lead
|
|
9
|
+
fields:
|
|
10
|
+
- name: leadCode
|
|
11
|
+
label: 线索编号
|
|
12
|
+
type: string
|
|
13
|
+
required: true
|
|
14
|
+
unique: true
|
|
15
|
+
- name: leadName
|
|
16
|
+
label: 线索名称
|
|
17
|
+
type: string
|
|
18
|
+
required: true
|
|
19
|
+
- name: source
|
|
20
|
+
label: 线索来源
|
|
21
|
+
type: enum
|
|
22
|
+
options:
|
|
23
|
+
- website
|
|
24
|
+
- referral
|
|
25
|
+
- campaign
|
|
26
|
+
- manual
|
|
27
|
+
default: manual
|
|
28
|
+
- name: ownerName
|
|
29
|
+
label: 负责人
|
|
30
|
+
type: string
|
|
31
|
+
- name: phone
|
|
32
|
+
label: 联系电话
|
|
33
|
+
type: string
|
|
34
|
+
- name: status
|
|
35
|
+
label: 状态
|
|
36
|
+
type: enum
|
|
37
|
+
options:
|
|
38
|
+
- draft
|
|
39
|
+
- following
|
|
40
|
+
- converted
|
|
41
|
+
- closed
|
|
42
|
+
default: draft
|
|
43
|
+
app:
|
|
44
|
+
actions:
|
|
45
|
+
- create
|
|
46
|
+
- update
|
|
47
|
+
- list
|
|
48
|
+
- detail
|
|
49
|
+
defaultStatus: draft
|
|
50
|
+
ui:
|
|
51
|
+
list:
|
|
52
|
+
columns:
|
|
53
|
+
- leadCode
|
|
54
|
+
- leadName
|
|
55
|
+
- source
|
|
56
|
+
- ownerName
|
|
57
|
+
- status
|
|
58
|
+
- createdAt
|
|
59
|
+
filters:
|
|
60
|
+
- leadCode
|
|
61
|
+
- leadName
|
|
62
|
+
- source
|
|
63
|
+
- status
|
|
64
|
+
form:
|
|
65
|
+
groups:
|
|
66
|
+
- title: 基本信息
|
|
67
|
+
fields:
|
|
68
|
+
- leadCode
|
|
69
|
+
- leadName
|
|
70
|
+
- source
|
|
71
|
+
- ownerName
|
|
72
|
+
- phone
|
|
73
|
+
- status
|
|
74
|
+
detail:
|
|
75
|
+
sections:
|
|
76
|
+
- basicInfo
|