neo-cmp-cli 1.13.15 → 1.13.16

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.
Files changed (45) hide show
  1. package/docs//351/200/232/347/224/250/344/273/243/347/220/206/346/216/245/345/217/243/forward.zip +0 -0
  2. package/docs//351/200/232/347/224/250/344/273/243/347/220/206/346/216/245/345/217/243//350/207/252/345/256/232/344/271/211API:/351/200/232/347/224/250/344/273/243/347/220/206/346/216/245/345/217/243/344/275/277/347/224/250/350/257/264/346/230/216.md +13 -0
  3. package/package.json +1 -1
  4. package/template/antd-custom-cmp-template/package.json +1 -1
  5. package/template/asset-manage-template/package.json +1 -1
  6. package/template/echarts-custom-cmp-template/package.json +1 -1
  7. package/template/empty-custom-cmp-template/package.json +1 -1
  8. package/template/map-custom-cmp-template/package.json +1 -1
  9. package/template/neo-bi-cmps/package.json +1 -1
  10. package/template/neo-custom-cmp-template/package.json +1 -1
  11. package/template/neo-h5-cmps/package.json +1 -1
  12. package/template/neo-order-cmps/package.json +1 -1
  13. package/template/neo-web-entity-grid/package.json +1 -1
  14. package/template/neo-web-form/package.json +1 -1
  15. package/template/react-custom-cmp-template/package.json +1 -1
  16. package/template/react-ts-custom-cmp-template/package.json +1 -1
  17. package/template/vue2-custom-cmp-template/package.json +1 -1
  18. package/template/neo-bi-cmps/docs/gartner-pipeline-apis.md +0 -251
  19. package/template/neo-bi-cmps/docs/gartner-pipeline-prd.md +0 -389
  20. package/template/neo-bi-cmps/docs/neo-backend-dev/SKILL.md +0 -188
  21. package/template/neo-bi-cmps/docs/neo-backend-dev/references/01-Trigger/345/274/200/345/217/221.md +0 -183
  22. package/template/neo-bi-cmps/docs/neo-backend-dev/references/02-/350/207/252/345/256/232/344/271/211API/345/274/200/345/217/221.md +0 -196
  23. package/template/neo-bi-cmps/docs/neo-backend-dev/references/03-SDK/345/267/245/345/205/267/347/261/273/346/216/245/345/217/243.md +0 -346
  24. package/template/neo-bi-cmps/docs/neo-backend-dev/references/04-/350/256/241/345/210/222/344/275/234/344/270/232/345/274/200/345/217/221.md +0 -188
  25. package/template/neo-bi-cmps/docs/neo-backend-dev/references/05-/351/241/265/351/235/242/345/274/200/345/217/221.md +0 -293
  26. package/template/neo-bi-cmps/docs/neo-backend-dev/references/06-/346/265/201/347/250/213/346/211/251/345/261/225/345/274/200/345/217/221.md +0 -175
  27. package/template/neo-bi-cmps/docs/neo-backend-dev/references/PaaS/345/271/263/345/217/260/345/274/200/345/217/221/346/211/213/345/206/214/350/247/243/350/257/273.md +0 -313
  28. package/template/neo-bi-cmps/docs/neo-backend-dev/references/auth-config.md +0 -77
  29. package/template/neo-bi-cmps/docs/neo-backend-dev/scripts/deploy_server_script.py +0 -118
  30. package/template/neo-bi-cmps/docs/neo-backend-dev/scripts/download_server_script.py +0 -74
  31. package/template/neo-bi-cmps/docs/neo-backend-dev/scripts/gen_entity_desc.py +0 -69
  32. package/template/neo-bi-cmps/docs/neo-backend-dev/scripts/gen_entitylist.py +0 -87
  33. package/template/neo-bi-cmps/docs/neo-backend-dev/scripts/query_crm.py +0 -65
  34. package/template/neo-bi-cmps/docs/neo-backend-dev/scripts/uninstall_server_script.py +0 -48
  35. package/template/neo-bi-cmps/docs/neo-backend-dev/scripts/update_model_jar.py +0 -49
  36. package/template/neo-bi-cmps/docs/neo-frontend-dev/SKILL.md +0 -138
  37. package/template/neo-bi-cmps/docs/neo-frontend-dev/references/auth-config.md +0 -77
  38. package/template/neo-bi-cmps/docs/neo-frontend-dev/references/component-dev.md +0 -205
  39. package/template/neo-bi-cmps/docs/neo-frontend-dev/references/entityTable-example.md +0 -167
  40. package/template/neo-bi-cmps/docs/neo-frontend-dev/references/templates.md +0 -38
  41. package/template/neo-bi-cmps/docs/neo-frontend-dev/scripts/gen_entity_desc.py +0 -69
  42. package/template/neo-bi-cmps/docs/neo-frontend-dev/scripts/gen_entitylist.py +0 -87
  43. package/template/neo-bi-cmps/docs/neo-frontend-dev/scripts/query_crm.py +0 -65
  44. package/template/neo-bi-cmps/docs/prototype-pipeline-forecasting.html +0 -2453
  45. package/template/neo-bi-cmps/docs//350/264/246/345/217/267/347/233/270/345/205/263/344/277/241/346/201/257.md +0 -10
@@ -1,389 +0,0 @@
1
- > **更新时间**:2026-03-31
2
- > **模块**:商机Pipeline管理
3
- > **状态**:初步设计
4
- > **原型参考**:`docs/htmls/forecasting-prototype.html` — Pipeline Tab
5
-
6
- ---
7
-
8
- # 商机Pipeline管理 — 产品需求文档
9
-
10
- ---
11
-
12
- # 引言:业务场景与价值
13
-
14
- 在B2B销售管理中,销售团队面临两个核心挑战:
15
-
16
- 1. **Pipeline管理缺乏全局视角**:商机散落在列表和详情页中,无法一屏回答"漏斗形态是否健康?哪些阶段在堆积?哪些商机在恶化?"
17
- 2. **Forecast预测依赖主观判断**:销售承诺(Commit)往往基于个人感觉而非数据,管理层难以评估预测的可信度,也缺乏工具来识别预测与实际之间的Gap并采取行动
18
-
19
- **Seller Workspace** 正是为解决这两个问题而设计的统一工作台,通过Pipeline和Forecast两个Tab覆盖"看清现状 → 预判未来 → 驱动行动"的完整闭环:
20
-
21
- | Tab | 解决的问题 | 核心能力 |
22
- |-----|-----------|---------|
23
- | **Pipeline** | 漏斗健康度不可见、商机风险难感知 | 漏斗可视化、阶段停滞预警、AI商机评分与赢率预测 |
24
- | **Forecast** | 预测不准确、Gap无抓手 | 人机预测对比(Commit vs AI Forecast)、预测调整与审计、AI Gap Closer智能推荐 |
25
-
26
- 不同角色在Seller Workspace中获得差异化价值:
27
-
28
- | 角色 | Pipeline场景 | Forecast场景 |
29
- |------|-------------|-------------|
30
- | 销售主管 / 团队Leader | 周会Review漏斗全貌,定位停滞阶段和风险商机 | 审视团队预测与AI预测的偏差,追责或辅导 |
31
- | 一线销售 | 自检个人Pipeline分布和推进速度 | 提交Commit预测,参考AI建议调整预测策略 |
32
- | 销售运营 | 分析阶段停留时间,发现流程瓶颈 | 追踪预测准确度趋势,优化预测方法论 |
33
-
34
- 整体设计理念是**"从全局到细节的渐进式下钻"**——Pipeline Tab先通过漏斗图和阶段汇总建立全局认知,再下钻到单笔商机借助AI辅助判断;Forecast Tab先通过KPI和BI看板把握目标达成态势,再通过预测矩阵和商机列表执行预测调整和Gap关闭动作。
35
-
36
- ---
37
-
38
- # 〇、页面入口与整体结构
39
-
40
- ## 0.1 页面入口
41
-
42
- 用户从**商机列表页(Opportunity List)**右上角点击 **「Seller Workspace」** 按钮进入本页面。该按钮通过列表页的**自定义列表普通按钮**能力实现。
43
-
44
- | 项目 | 说明 |
45
- |------|------|
46
- | 入口位置 | 商机列表页右上角 |
47
- | 按钮文案 | Seller Workspace |
48
- | 跳转方式 | 打开新的浏览器标签页 |
49
- | 权限控制 | 自定义按钮配置:全部人员可见 |
50
-
51
- ## 0.2 页面Tab结构
52
-
53
- Seller Workspace页面采用**Tab切换**架构,包含两个核心Tab:
54
-
55
- | Tab | 名称 | 定位 | 默认状态 |
56
- |-----|------|------|---------|
57
- | Tab 1 | **Pipeline** | 审视商机漏斗健康度和单个商机状态 | 默认选中 |
58
- | Tab 2 | **Forecast** | 对比AI预测与销售承诺,执行预测调整 | 非默认 |
59
-
60
- **页面头部信息**:
61
- - 页面标题:`Seller Workspace`
62
- - 副标题:根据当前Tab动态切换
63
- - Pipeline Tab:`Pipeline: Review your opportunity funnel and deal health`
64
- - Forecast Tab:`Forecast: Monitor quota attainment, review team forecasts, and uncover risks`
65
-
66
- **Tab切换交互**:
67
- - 点击Tab按钮切换,当前Tab高亮(底部紫色下划线)
68
- - 切换Tab时,副标题同步更新
69
- - 两个Tab的筛选条件相互独立,互不影响
70
-
71
- ## 0.3 Pipeline Tab 组件概览
72
-
73
- > 以下为 **Pipeline Tab** 的详细功能设计。Forecast Tab详见 `prd-forecasting.md`。
74
-
75
- Pipeline Tab由上至下包含以下三大组件:
76
-
77
- | 序号 | 组件 | 定位 | 说明 |
78
- |------|------|------|------|
79
- | 1 | **全局筛选栏(Filter Bar)** | 数据筛选 | 为下方所有组件提供统一的筛选条件(结单日期、Opportunity Owner、业务类型、变动基准时间) |
80
- | 2 | **Pipeline看板区** | 全局洞察 | 左右并列两张卡片:Pipeline Funnel(漏斗图)展示各阶段金额分布,Avg. Time in Stage(阶段停留时间)展示推进效率与基准对比 |
81
- | 3 | **商机列表(Opportunity List)** | 明细下钻 | 顶部为阶段快捷筛选区(Stage Tabs),下方为商机明细表格,集成AI评分和赢率预测,支持变动追踪 |
82
-
83
- **三个组件的数据流向**:筛选栏驱动看板区和商机列表刷新,看板区的阶段点击联动商机列表的阶段快捷筛选区,形成"筛选 → 全局 → 明细"的渐进式下钻体验。
84
-
85
- ```mermaid
86
- graph TD
87
- A[全局筛选栏] -->|筛选条件变更| B[Pipeline Funnel]
88
- A -->|筛选条件变更| C[Avg. Time in Stage]
89
- A -->|筛选条件变更| D[Stage Tabs]
90
- A -->|筛选条件变更| E[Opportunity List]
91
- D -->|点击阶段卡片| E
92
- B -->|点击漏斗层| D
93
- B -->|点击漏斗层| E
94
- C -->|点击阶段条形| D
95
- C -->|点击阶段条形| E
96
- E -->|点击商机名称| F[商机详情页]
97
- ```
98
-
99
- **联动规则**:
100
- 1. 全局筛选栏变更 → 所有板块数据刷新
101
- 2. 阶段切换区点击 → 商机列表按该阶段筛选
102
- 3. 漏斗图层点击 → 阶段切换区高亮对应阶段 + 商机列表按该阶段筛选
103
- 4. 阶段停留时间条形点击 → 阶段切换区高亮对应阶段 + 商机列表按该阶段筛选
104
- 5. 商机名称点击 → 跳转至商机详情页
105
-
106
- ---
107
-
108
- # 一、全局筛选栏(Filter Bar)
109
-
110
- ## 1.1 功能说明
111
-
112
- 全局筛选栏位于Pipeline Tab顶部,为下方所有板块(漏斗图、阶段停留时间、阶段切换区、商机列表)提供统一的数据筛选条件。筛选条件变更后,所有板块数据联动刷新。Close Date、Opportunity Owner、Business Type三项影响基础数据范围;Changes Since仅影响变动类数据的展示,不影响基础数据。
113
-
114
- ## 1.2 筛选项说明
115
-
116
- | 筛选项 | 类型 | 选项 | 默认值 | 展示与交互 | 业务逻辑 |
117
- |--------|------|------|--------|-----------|---------|
118
- | Close Date | 下拉选择 | This Week / This Month / This Quarter / Custom | This Quarter | 选择Custom时弹出双日历面板,选择开始/结束日期后点击OK确认;未完成选择时自动恢复上一选项;确认后下拉旁展示日期范围文案 | 按商机结单日期过滤基础数据 |
119
- | Opportunity Owner | 选人选部门组件(多选) | Current User / [人员列表] / [部门列表] | Current User | 点击展开下拉面板,含搜索框、Departments列表(🏢+复选框)、People列表(👤+复选框),选择部门时自动勾选部门下所有成员;选择后展示:单人显示姓名,多人显示"首个姓名 +N" | 根据选择的人员ID列表,按商机所有人过滤基础数据 |
120
- | Business Type | 下拉选择 | New Business / Renewal / Expansion | New Business | 标准下拉 | 按商机业务类型过滤基础数据 |
121
- | Changes Since | 下拉选择 | Start of the Period / Custom | Start of the Period | 标签旁带问号图标,Hover提示:"Sets the baseline date for tracking changes in close date, amount, stage, etc.";选择Custom时弹出单月历面板,选定日期后点击OK确认;未完成选择时恢复为Start of the Period | 仅影响变动类数据(阶段切换区变动摘要、商机列表变动箭头),不影响基础数据范围。Start of the Period取当前Close Date周期起始日 |
122
-
123
-
124
- # 二、Pipeline看板区
125
-
126
- 看板区由左右两个并列卡片组成:左侧为**Pipeline Funnel(商机漏斗图)**,右侧为**Avg. Time in Stage(阶段平均停留时间)**。
127
-
128
- ## 2.1 Pipeline Funnel(商机漏斗图)
129
-
130
- ### 2.1.1 功能说明
131
-
132
- 以漏斗图形式可视化展示当前Pipeline中各阶段的商机金额分布,帮助销售管理者快速判断漏斗形态是否健康(如是否头重脚轻、某阶段是否堆积过多)。
133
-
134
- ### 2.1.2 页面展示
135
-
136
- 页面自上而下包含以下区域:
137
-
138
- 1. **顶部销售金额**:居中展示"Sales Amount"标签及Pipeline总金额数值
139
- 2. **漏斗图(居中)**:漏斗从上到下按商机阶段排列,**每层高度按该阶段金额占比缩放,宽度按该阶段商机数量占比缩放**,形成漏斗形态。每层内居中展示阶段名称。阶段颜色根据视图随机分配
140
- 3. **左侧转化率**:漏斗每层左侧展示该阶段的整体转化率,第一阶段不展示(即为100%基准)
141
- 4. **右侧金额/数量**:漏斗每层右侧展示该阶段的商机金额和商机数量,格式:`{金额}/{数量}`
142
- 5. **底部图例**:以颜色圆点+阶段名称的形式横向排列,标识各层颜色与阶段的对应关系
143
-
144
- ### 2.1.3 交互说明
145
-
146
- 1. 漏斗图每层图形可点击,点击后联动下方阶段快捷筛选区高亮对应阶段,并刷新商机列表
147
- 2. 点击右上角✨按钮,弹出AI Insight分析弹窗,展示漏斗形态的智能解读文本,弹窗可关闭
148
-
149
- ### 2.1.4 业务逻辑
150
-
151
- 1. **数据范围**
152
- - 基础数据范围受当前登录用户的数据权限控制,仅展示用户有权查看的商机
153
- - 在用户数据权限基础上,进一步受全局筛选栏条件过滤(Close Date、Opportunity Owner、Business Type)
154
- - 漏斗层级与系统中配置相关业务类型的商机阶段(Stage)一一对应,阶段名称和数量由后台配置自动获取
155
- - 漏斗展示进行中及赢单(Closed Won)阶段,**不包含输单(Closed Lost)阶段**——漏斗的形状本身用于展示"留存"下来的商机,输单商机已退出漏斗,不应参与漏斗形态的计算和展示
156
-
157
- 2. **整体转化率**
158
- - 计算公式:`整体转化率 = 该阶段商机数量 / 第一阶段商机数量 × 100%`
159
- - 含义:到达当前阶段的商机数量占初始总商机数量的百分比,用于衡量从漏斗顶部到各阶段的留存效率
160
-
161
- 3. **漏斗图尺寸计算**
162
- - **高度计算**:每层高度按该阶段金额占所有阶段总金额的比例缩放
163
- - 计算公式:`阶段高度 = (该阶段金额 / 所有阶段总金额) × 漏斗总高度`
164
- - **宽度计算**:每层宽度按该阶段商机数量占所有阶段总商机数量的比例缩放
165
- - 计算公式:`阶段宽度 = (该阶段商机数量 / 所有阶段总商机数量) × 漏斗最大宽度`
166
- - **设计意图**:通过高度展示金额维度(金额越大,阶段越"高"),通过宽度展示数量维度(商机越多,阶段越"宽"),实现金额与数量的双维度可视化
167
-
168
- ---
169
-
170
- ## 2.2 Avg. Time in Stage(阶段平均停留时间)
171
-
172
- ### 2.2.1 功能说明
173
-
174
- 以水平条形图展示各阶段商机的平均停留天数,并叠加Target(基准值)和Limit(保底值)标记,帮助管理者识别哪些阶段存在商机停滞风险。
175
-
176
- ### 2.2.2 页面展示
177
-
178
- 1. **图例**:图表上方展示三项图例
179
- - 绿色条形 = Actual(实际平均停留时间)
180
- - 紫色三角标记 = Target(基准值,期望的停留时间上限)
181
- - 红色三角标记 = Limit(保底值,可接受的停留时间上限)
182
-
183
- 2. **每行展示**:每个阶段占一行,包含以下元素
184
-
185
- | 展示项 | 说明 |
186
- |--------|------|
187
- | 阶段名称 | 左侧标签 |
188
- | 平均停留时间 | 右侧数值标签,格式为"X天Y时"(如"12天6时") |
189
- | 条形长度 | 按实际天数与最大刻度的比例绘制 |
190
- | Target标记 | 紫色三角形标记在条形上方,标注基准停留天数 |
191
- | Limit标记 | 红色三角形标记在条形上方,标注保底停留天数,位于Target右侧 |
192
-
193
- 3. **颜色规则**:条形和数值颜色根据实际值与Target/Limit的关系动态变化
194
-
195
- | 条件 | 条形颜色 | 数值颜色 | 说明 |
196
- |------|---------|---------|------|
197
- | 实际 ≤ Target | 绿色 | 默认黑色 | 正常范围,在基准值以内 |
198
- | Target < 实际 ≤ Limit | 黄色 | 黄色 | 超过基准但未超保底,需关注 |
199
- | 实际 > Limit | 红色 | 红色 | 超过保底值,严重超标,需干预 |
200
-
201
- ### 2.2.3 交互说明
202
-
203
- 1. 点击某阶段条形,联动下方阶段快捷筛选区高亮对应阶段,并刷新商机列表
204
- 2. 点击右上角✨按钮,弹出AI分析弹窗,展示停留时间的智能解读文本,弹窗可关闭
205
-
206
- ### 2.2.4 业务逻辑
207
-
208
- 1. **数据范围**
209
- - 基础数据范围受当前登录用户的数据权限控制,仅展示用户有权查看的商机
210
- - 在用户数据权限基础上,进一步受全局筛选栏条件过滤(Close Date、Opportunity Owner、Business Type)
211
- - 仅统计进行中的商机阶段,**不包含赢单(Closed Won)和输单(Closed Lost)阶段**
212
-
213
- 2. **平均停留时间计算**
214
- - 统计该阶段下所有商机在当前阶段的停留时长,取平均值
215
- - 停留时长 = 当前时间 − 进入该阶段的时间
216
-
217
- 3. **Target与Limit**
218
- - Target(基准值):期望的停留时间上限,由系统配置或历史数据计算得出
219
- - Limit(保底值):可接受的停留时间上限,由系统配置
220
-
221
- ---
222
-
223
- # 三、商机列表(Opportunity List)
224
-
225
- 本组件由**阶段快捷筛选区(Stage Tabs)**和**商机明细表格**上下组合而成,是Pipeline Tab的核心数据组件。阶段快捷筛选区作为表格的内置筛选器,点击即可按阶段过滤商机列表。列表中集成了AI能力(AI Score、AI Win Rate),并通过变动箭头和Hover卡片展示商机的近期变化。
226
-
227
- ## 3.1 阶段快捷筛选区(Stage Tabs)
228
-
229
- ### 3.1.1 功能说明
230
-
231
- 位于商机列表顶部,以横向卡片组形式展示各商机阶段的汇总数据,作为列表的快捷阶段筛选器。
232
-
233
- ### 3.1.2 页面展示
234
-
235
- 所有阶段卡片等宽横向排列,占满容器宽度。每个卡片展示:
236
-
237
- | 序号 | 展示项 | 说明 |
238
- |------|--------|------|
239
- | 1 | 阶段名称 | 卡片顶部小字标签,如"Prospecting" |
240
- | 2 | 阶段金额 | 该阶段所有商机金额小计,大号加粗数字 |
241
- | 3 | 商机数量 | 金额右侧括号内展示,如"(15)" |
242
- | 4 | 变动摘要 | 卡片底部,金额变动和数量变动分两项独立展示,各自带红绿箭头 |
243
-
244
- 变动摘要格式示例:
245
- - `↑ $280K` `↑ 3` — 金额增加(绿色),数量增加(绿色)
246
- - `↓ $120K` `↑ 1` — 金额减少(红色),数量增加(绿色)
247
-
248
- 选中状态:阶段名称变为紫色加粗,卡片顶部出现紫色指示条。
249
-
250
- ### 3.1.3 交互说明
251
-
252
- 1. 默认选中第一个阶段,对应卡片顶部显示紫色高亮条
253
- 2. 点击任一阶段卡片:该卡片高亮,下方商机表格筛选至该阶段,列表标题和汇总信息同步更新
254
- 3. 漏斗图或阶段停留时间的阶段点击也会联动此处的选中状态
255
-
256
- ### 3.1.4 业务逻辑
257
-
258
- 1. **数据范围**
259
- - 基础数据范围受用户数据权限和全局筛选栏条件控制
260
- - 阶段卡片包含已选择的业务类型商机的所有阶段(含Closed Won和Closed Lost),按照阶段序号从小到大,从左到右依次展示
261
-
262
- 2. **变动摘要计算**
263
- - 基于商机快照机制,根据Changes Since基准日期与当前数据比对
264
- - 金额变动 = 当前阶段金额小计 − 基准快照金额小计
265
- - 数量变动 = 当前阶段商机数 − 基准快照商机数
266
- - 箭头颜色:↑绿色(正向)/ ↓红色(负向)
267
-
268
- ## 3.2 商机明细表格
269
-
270
- ### 3.2.1 功能说明
271
-
272
- 展示符合当前筛选条件的所有商机明细,支持排序、筛选和内联编辑。
273
-
274
- ### 3.2.2 页面展示
275
-
276
- 1. **列表头部**
277
-
278
- | 展示项 | 说明 |
279
- |--------|------|
280
- | 列表标题 | 动态标题,格式:"Opportunity List — {筛选条件}" |
281
- | 汇总信息 | 右侧展示:`Total: ${总金额} · {商机数} opportunities` |
282
- | 筛选排序状态栏 | 标题下方展示:`Sorted by {字段} · Filtered by {条件1}, {条件2}, ...`,无排序或筛选时不展示 |
283
-
284
- 2. **表格列定义**
285
-
286
- | 列名 | 对齐 | 排序 | 筛选 | 说明 |
287
- |------|------|------|------|------|
288
- | Opportunity Name | 左对齐 | 支持 | 支持(文本模糊搜索) | 蓝色文字可点击跳转商机详情页,支持内联编辑(✏️) |
289
- | Amount | 右对齐 | 支持(默认降序) | 支持(金额范围) | 带变动箭头,支持内联编辑(✏️) |
290
- | Close Date | 居中 | 支持 | 支持(日期范围) | 带变动箭头,支持内联编辑(✏️) |
291
- | Stage | 居中 | 支持(按阶段顺序) | 支持(多选枚举) | 带变动箭头 |
292
- | ✨ AI Score | 居中 | 支持 | 支持(多选枚举:High/Medium/Low) | 彩色圆角标签 |
293
- | ✨ AI Win Rate | 居中 | 支持 | 支持(百分比范围) | 百分比数字 |
294
- | Last Activity | 居中 | 支持 | 支持(日期范围) | 最近活动时间 |
295
-
296
- 3. **变动箭头**:Amount、Close Date、Stage三列数据后展示变动箭头
297
-
298
- | 字段 | ↑ 绿色 | ↓ 红色 | 无箭头 |
299
- |------|--------|--------|--------|
300
- | Amount | 金额增加 | 金额减少 | 无变动 |
301
- | Close Date | 结单日提前 | 结单日推迟 | 无变动 |
302
- | Stage | 阶段前进 | 阶段回退 | 无变动 |
303
-
304
- 4. **AI Score**:以彩色圆角标签展示评分等级(High绿色 / Medium橙色 / Low红色)
305
-
306
- 5. **AI Win Rate**:百分比数字展示
307
-
308
- ### 3.2.3 交互说明
309
-
310
- 1. **排序**:点击列头排序图标(⇅),首次点击降序,再次升序,第三次取消。当前排序列显示方向图标
311
- 2. **筛选**:点击列头筛选图标(▽),弹出对应类型的筛选面板(文本搜索/多选枚举/范围选择)
312
- 3. **内联编辑**:Opportunity Name、Amount、Close Date三列数据后显示✏️图标,点击进入编辑模式
313
- 4. **商机名称点击**:蓝色文字可点击,跳转至商机详情页
314
- 5. **变动箭头Hover**:鼠标悬停弹出变动详情卡片,包含:
315
-
316
- | 卡片字段 | 说明 |
317
- |----------|------|
318
- | 变动标题 | 增长使用"increased",下降使用"decreased" |
319
- | 变动前后值 | 格式:`{旧值} → {新值}`,新值高亮 |
320
- | 变动日期 | 格式:`Changed on {日期}` |
321
-
322
- 6. **AI Score Hover**:展示商机健康度评估卡片,为标准功能,此处不再赘述
323
- 7. **AI Win Rate Hover**:展示赢率计算分解卡片,包含:
324
-
325
- | 卡片区域 | 说明 |
326
- |----------|------|
327
- | Baseline Probability | 基线概率,基于历史同类商机统计赢率 |
328
- | Positive Factors | 正向因素列表,每项标注贡献值(如"+6%"),绿色文字 |
329
- | Negative Factors | 负向因素列表,每项标注影响值(如"-4%"),红色文字 |
330
- | AI Win Rate | 最终赢率 = Baseline + Σ正向 + Σ负向 |
331
-
332
- ### 3.2.4 业务逻辑
333
-
334
- 1. **数据范围**
335
- - 基础数据范围受用户数据权限和全局筛选栏条件控制
336
- - 进一步受阶段快捷筛选区的选中阶段过滤,未选中阶段时返回所有阶段商机
337
-
338
- 2. **变动数据**
339
- - 基于商机快照机制,根据Changes Since基准日期与当前数据逐字段比对
340
- - 变动标题统一规则:增长为"{字段} increased",下降为"{字段} decreased"
341
-
342
- 3. **AI Win Rate计算**
343
- - AI Win Rate = Baseline Probability + Σ Positive Factors − Σ Negative Factors
344
- - 因素类型(非固定值):正向如金额持续上升、历史赢单记录、互动频率高;负向如推进速度慢、无高管参与、活动记录稀疏
345
-
346
- ---
347
-
348
- # 四、商机快照机制
349
-
350
- 以下为设计思路,直接采取Datacloud的历史快照功能实现即可
351
-
352
- ## 4.1 背景
353
-
354
- Pipeline中的变动数据(如阶段切换区的金额/数量变动、商机列表的变动箭头)依赖于历史数据的对比。为支持"Changes Since"筛选项按任意基准时间点进行变动比对,需要对商机数据进行每日快照留存。
355
-
356
- ## 4.2 快照规则
357
-
358
- | 项目 | 说明 |
359
- |------|------|
360
- | 触发时间 | 每天0:00(服务器时间)自动执行 |
361
- | 快照范围 | 所有商机记录(不区分阶段和状态),仅对快照字段有变更的商机生成新快照;商机创建时记录一条初始快照 |
362
- | 存储策略 | 每次快照以快照日期为标识。查询某日期的商机状态时,取该商机在该日期之前(含)的最近一条快照 |
363
-
364
- ## 4.3 快照字段
365
-
366
- | 字段 | 类型 | 说明 |
367
- |------|------|------|
368
- | snapshotDate | Date | 快照日期(即当天0:00的日期) |
369
- | opportunityId | String | 商机ID |
370
- | opportunityName | String | 商机名称 |
371
- | accountName | String | 客户名称 |
372
- | amount | Number | 销售金额 |
373
- | stageName | String | 商机阶段 |
374
- | closeDate | Date | 结单日期 |
375
- | ownerUserId | String | 所有人(商机负责人用户ID) |
376
- | ownerDeptId | String | 所属部门(商机负责人所在部门ID) |
377
- | createdTime | DateTime | 商机创建时间 |
378
-
379
- ## 4.4 使用场景
380
-
381
- 变动对比时,系统根据"Changes Since"选定的基准时间,查询该日期的快照数据,与当前实时数据进行逐字段比对,计算出金额变动、阶段变动、数量变动等差异,驱动页面上所有变动类展示(箭头、变动摘要、变动详情卡片)。
382
-
383
- ## 4.5 当日变动处理
384
-
385
- 由于快照仅在每天凌晨生成,当日发生的变更尚无对应快照。此时变动对比逻辑如下:
386
-
387
- 1. 取该商机最新一条快照记录,与当前商机实时数据逐字段比对
388
- 2. 若一致(无差异):说明当日未发生变更,变动时间取最新快照日期,数值取快照值
389
- 3. 若不一致(存在差异):说明当日已发生变更,变动时间取当天日期,变动前值取最新快照值,变动后值取当前实时值
@@ -1,188 +0,0 @@
1
- ---
2
- name: neo-backend-dev
3
- description: Neo 后端 PaaS 开发技能,辅助在 NeoCRM 平台上进行 Java 后端开发。当用户需要:(1) 创建项目并配置后端开发环境,(2) 开发 Trigger 触发器,(3) 开发自定义 REST API,(4) 开发计划作业(定时任务),(5) 开发流程扩展(审批流/工作流),(6) 使用 SDK 工具类(数据操作、HTTP请求、缓存、异步),(7) 打包上传/下载/卸载后端代码包,(8) 获取和查询实体模型,(9) 更新 model.jar 时,使用此技能。
4
- ---
5
-
6
- # Neo 后端 PaaS 开发
7
-
8
- 辅助完成 NeoCRM PaaS 平台 Java 后端开发全流程。
9
-
10
- ## 前置条件
11
-
12
- - 已全局安装 neo-cmp-cli:`npm i -g neo-cmp-cli`(用于项目创建和登录认证)
13
- - Node.js 环境
14
- - JDK 1.8(后端代码编译)
15
-
16
- ## 重要约定
17
-
18
- - `neo login -e production` 默认登录生产环境。执行登录前必须询问用户要登录到哪个环境。环境参数:`production`、`gray`、`sandbox`、`cd`、`tencentuat`、`custom`
19
- - `neo login` 执行后自动打开浏览器授权,轮询 `.neo-cli/token.json` 确认登录成功
20
- - 执行平台操作时直接执行,未登录失败后再询问环境并登录重试
21
- - Java 包路径必须三级且以 `other` 开头(如 `other.xsy.account`),不能生成 4 级或以上
22
- - 仅支持第三方包:fastJson + commons-lang
23
-
24
- ## 核心工作流
25
-
26
- ### 1. 创建项目
27
-
28
- 如果用户未指定项目名称,先询问。未指定路径则告知默认位置并询问是否修改。
29
-
30
- ```bash
31
- neo create project -n <项目名称>
32
- ```
33
-
34
- 项目创建后将 `neo.config.js` 中 `neoConfig` 改为正式环境:
35
- ```javascript
36
- neoConfig: {
37
- neoBaseURL: 'https://crm.xiaoshouyi.com',
38
- loginURL: 'https://login.xiaoshouyi.com/auc/oauth2/auth',
39
- tokenURL: 'https://login.xiaoshouyi.com/auc/oauth2/token',
40
- },
41
- ```
42
-
43
- ### 2. 登录租户
44
-
45
- 项目创建后,先询问用户要登录到哪个环境(默认 production),执行登录:
46
- ```bash
47
- neo login -e <env>
48
- ```
49
- 轮询 `.neo-cli/token.json` 确认登录成功。
50
-
51
- ### 3. 安装前端依赖(仅开发前端组件时需要)
52
-
53
- 后端代码开发和部署不需要执行 `npm install`,仅在需要开发前端组件时才执行:
54
- ```bash
55
- cd <项目目录>
56
- npm install
57
- ```
58
-
59
- ### 4. 后端代码开发
60
-
61
- 后端代码统一放在 `src/server-scripts/` 下,按代码包组织:
62
-
63
- ```
64
- <项目>/src/server-scripts/
65
- <代码包简称>/
66
- other/
67
- <company>/
68
- <module>/ # 三级包名,如 other/xsy/account
69
- XxxTrigger.java
70
- XxxApi.java
71
- scriptTrigger.xml # Trigger 配置
72
- apiUrl.xml # 自定义 API 路由配置
73
- ```
74
-
75
- ### 后端开发参考文档
76
-
77
- 根据需求选择对应参考:
78
-
79
- - Trigger 触发器 → [references/01-Trigger开发.md](references/01-Trigger开发.md)
80
- - 自定义 REST API → [references/02-自定义API开发.md](references/02-自定义API开发.md)
81
- - SDK 工具类 → [references/03-SDK工具类接口.md](references/03-SDK工具类接口.md)
82
- - 计划作业 → [references/04-计划作业开发.md](references/04-计划作业开发.md)
83
- - 页面开发 → [references/05-页面开发.md](references/05-页面开发.md)
84
- - 流程扩展 → [references/06-流程扩展开发.md](references/06-流程扩展开发.md)
85
- - 平台能力概览 → [references/PaaS平台开发手册解读.md](references/PaaS平台开发手册解读.md)
86
-
87
- ### 关键限制
88
-
89
- | 限制项 | 值 |
90
- |--------|-----|
91
- | 同步脚本最大运行时长 | 15 秒 |
92
- | 异步脚本最大运行时长 | 90 秒 |
93
- | 脚本最大内存 | 512 MB |
94
- | 单次 DML 最大数据量 | 10,000 条 |
95
- | commonHttpClient 最大调用次数 | 50 次/脚本 |
96
- | 缓存最大大小 | 200 KB |
97
-
98
- ## 部署后端代码包
99
-
100
- ```bash
101
- python3 scripts/deploy_server_script.py <项目目录> <代码包简称> <Java包名>
102
- ```
103
-
104
- 示例:`python3 scripts/deploy_server_script.py NEOTrail 客户管理 other.xsy.account`
105
-
106
- 脚本自动:打包 ZIP → 检查/创建代码包 → 上传 → 安装 → 清理临时文件。
107
-
108
- ## 下载服务端代码包
109
-
110
- 如果用户未指定代码包名称(Java 包名),必须先询问。
111
-
112
- ```bash
113
- python3 scripts/download_server_script.py <项目目录> <Java包名> [代码包简称]
114
- ```
115
-
116
- 本地已存在同名目录时会覆盖更新。
117
-
118
- ## 创建计划作业
119
-
120
- 代码包部署后,需要在 NeoCRM 系统后台手动创建计划作业任务(此接口需要浏览器 session 认证,无法通过 OAuth API 自动化):
121
-
122
- 1. 登录 NeoCRM 平台
123
- 2. 进入系统后台 → 开发 → 计划作业
124
- 3. 新建计划作业,填写以下信息:
125
- - 任务名称
126
- - 选择代码包和对应的 ScheduleJob 类
127
- - 执行类型:自定义循环周期(executeType=3)
128
- - 执行间隔:小时数(0-24)+ 分钟数(仅支持 5 的倍数:0,5,10,15...55)
129
- - 生效时间范围
130
- 4. 启用计划作业
131
-
132
- 提示用户完成上述手动操作后继续。
133
-
134
- ## 更新 model.jar
135
-
136
- ```bash
137
- python3 scripts/update_model_jar.py <项目目录>
138
- ```
139
-
140
- ## 卸载代码包
141
-
142
- ```bash
143
- python3 scripts/uninstall_server_script.py <项目目录> <Java包名> [--force]
144
- ```
145
-
146
- ## 获取实体模型
147
-
148
- ### 生成实体字典
149
- ```bash
150
- python3 scripts/gen_entitylist.py <项目目录>
151
- ```
152
-
153
- ### 查询实体字段
154
- 1. 在 `src/entity-model/entitylist.md` 中查找匹配实体
155
- 2. 检查 `src/entity-model/<apiKey>.md` 是否存在
156
- 3. 不存在则运行:`python3 scripts/gen_entity_desc.py <项目目录> <apiKey>`
157
-
158
- ## 平台 API 参考
159
-
160
- 所有 API 携带 `Authorization: Bearer <access_token>`(上传文件接口),其他接口直接传 `access_token`。
161
-
162
- - 获取 model.jar:`GET /rest/metadata/v2.0/scripts/packages/model/jar/url`
163
- - 更新 model.jar:`POST /rest/metadata/v2.0/scripts/packages/model/jar`
164
- - 获取实体列表:`GET /rest/metadata/v2.0/xobjects/filter?custom=<true|false>&active=true`
165
- - 获取实体字段:`GET /rest/metadata/v2.0/xobjects/<apiKey>/items`
166
- - 获取业务类型列表:`GET /rest/data/v2.0/xobjects/<xObjectApiKey>/busiType`
167
- - 下载代码包:`GET /rest/metadata/v2.0/scripts/packages?packageName=<包名>`
168
- - 创建代码包:`POST /rest/metadata/v2.0/scripts/packages`
169
- - 上传代码包:`POST /rest/metadata/v2.0/scripts/packages/files?packageName=<包名>`
170
- - 安装代码包:`POST /rest/metadata/v2.0/scripts/packages/installations`
171
- - 卸载代码包:`DELETE /rest/metadata/v2.0/scripts/packages/installations/<包名>?force=<bool>`
172
- - 创建计划作业:`POST /rest/metadata/v2.0/dx/logic/jobDetail`
173
- - 更新计划作业:`PATCH /rest/metadata/v2.0/dx/logic/jobDetail/<jobId>`
174
-
175
- ## 注意事项
176
-
177
- - Java 类名不能以 "test" 结尾
178
- - Java 文件必须 UTF-8 无 BOM 编码
179
- - Trigger 的 DataResult 数量必须与 TriggerRequest 数据量一致
180
- - Package 名称必须三级且以 other 开始
181
- - API 调用默认不触发 Trigger
182
- - `getAttribute()` 返回 Object 类型,不能直接强转 String,必须用 `obj != null ? obj.toString() : ""`
183
- - CRM 查询 SQL 不支持 `WHERE 1=1`,应使用 `WHERE id > 0` 作为基础条件
184
- - `RkhdHttpClient.execute()` 需要 `ResponseBodyHandler` 第二参数,且沙箱禁止 `System.getProperty()`
185
- - 内部平台 API(如获取商机阶段)建议由前端直接调用,后端 SDK 调用内部 API 存在限制
186
- - 自定义 API 的实际调用路径是 `/rest/data/v2.0/scripts/api/{baseUrl}/{path}`,不是 `/rest/custom/v2.0/`
187
- - 开发涉及业务对象的功能前,必须先通过 `gen_entity_desc.py` 获取实体的真实字段模型,避免字段名错误
188
- - 授权配置详见 [references/auth-config.md](references/auth-config.md)