You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
121 lines
5.4 KiB
121 lines
5.4 KiB
|
2 weeks ago
|
# -*- coding: utf-8 -*-
|
||
|
|
"""详情子域 - 团队 + 日志 (2 个接口)."""
|
||
|
|
import io, sys
|
||
|
|
sys.path.insert(0, 'D:/code/crm-backend-matt/.scratch')
|
||
|
|
sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8')
|
||
|
|
from bru_lib import (
|
||
|
|
write_bru, bru_form, build_docs, env_json,
|
||
|
|
req_form_example, req_query_example,
|
||
|
|
)
|
||
|
|
|
||
|
|
# ---------- 团队 Tab ----------
|
||
|
|
print('== 详情子域 / 团队 ==')
|
||
|
|
|
||
|
|
TEAM_ROWS = [
|
||
|
|
('id','string','团队成员行ID'),
|
||
|
|
('createTime','string','创建时间(加入团队时间)'),
|
||
|
|
('updateTime','string','更新时间'),
|
||
|
|
('opportunityId','string','所属商机ID'),
|
||
|
|
('userId','string','成员用户ID(引用 crm-auth SysUser)'),
|
||
|
|
('userNameSnapshot','string','成员姓名快照'),
|
||
|
|
('projectRole','string','项目角色字典 code(纯回显标签:商机负责人/方案工程师/招标专员等,不带权限)'),
|
||
|
|
('permission','number','行级权限档:1只读 2可写跟进 3可推进节点 4读写'),
|
||
|
|
]
|
||
|
|
TEAM_ONE = (
|
||
|
|
'{\n'
|
||
|
|
' "id": "1",\n'
|
||
|
|
' "createTime": "2024-01-01 12:00:00",\n'
|
||
|
|
' "updateTime": "2024-01-01 12:00:00",\n'
|
||
|
|
' "opportunityId": "1",\n'
|
||
|
|
' "userId": "1",\n'
|
||
|
|
' "userNameSnapshot": "张三",\n'
|
||
|
|
' "projectRole": "role_owner",\n'
|
||
|
|
' "permission": 4\n'
|
||
|
|
' }'
|
||
|
|
)
|
||
|
|
docs = build_docs(
|
||
|
|
'团队成员列表', 'GET', '/api/opportunity/team/list',
|
||
|
|
'商机详情「团队」Tab:返回该商机的全部团队成员(含负责人)。团队白名单绕开 DataScope 部门天花板,为「我参与的」视图与详情/子表读授权提供依据。移交/移除保留历史(软删 + `deleteKey` 复用键),存活成员判定带 `deleted=0`。',
|
||
|
|
[('oppId','string','是','-','商机ID')],
|
||
|
|
req_query_example('GET','/api/opportunity/team/list',[('oppId','1')]),
|
||
|
|
TEAM_ROWS,
|
||
|
|
env_json(f'[\n{TEAM_ONE}\n ]'),
|
||
|
|
)
|
||
|
|
write_bru('商机管理/详情子域', '团队成员列表.bru',
|
||
|
|
bru_form(11, '团队成员列表', 'get', '/api/opportunity/team/list',
|
||
|
|
[('oppId','1')], docs))
|
||
|
|
|
||
|
|
# ---------- 日志 Tab ----------
|
||
|
|
print('== 详情子域 / 日志 ==')
|
||
|
|
|
||
|
|
OPLOG_ROWS = [
|
||
|
|
('id','string','日志ID'),
|
||
|
|
('createTime','string','创建时间'),
|
||
|
|
('updateTime','string','更新时间'),
|
||
|
|
('oppId','string','所属商机ID'),
|
||
|
|
('opKind','string','记录形态:FIELD_CHANGE 字段变更 / ROW_ADD 新增行 / ROW_DELETE 删除行'),
|
||
|
|
('logType','string','业务类别:FIELD_CHANGE/STATUS_FLOW/STAGE_FLOW/ATTACHMENT/SCHEME_PUSH/ROW_CHANGE/SYSTEM_INTERNAL(决定前端是否展示)'),
|
||
|
|
('entityName','string','变更实体对象(哪张表/业务对象)'),
|
||
|
|
('fieldName','string','变更字段名(opKind=FIELD_CHANGE 时有意义)'),
|
||
|
|
('oldValue','string','旧值(ROW_ADD 时空)'),
|
||
|
|
('newValue','string','新值(ROW_DELETE 时空)'),
|
||
|
|
('bizRef','string','被操作行业务标识(ROW_ADD/ROW_DELETE 时的可读标识,如客户名)'),
|
||
|
|
('snapshotJson','string','整行快照摘要 JSON(ROW_DELETE 保留被删行关键内容)'),
|
||
|
|
('opDesc','string','操作说明'),
|
||
|
|
('opSource','string','操作来源:SYSTEM 系统自动 / MANUAL 人工'),
|
||
|
|
('opTime','string','操作时间'),
|
||
|
|
('opUserId','string','操作人ID(系统自动时可空)'),
|
||
|
|
]
|
||
|
|
OPLOG_ONE = (
|
||
|
|
'{\n'
|
||
|
|
' "id": "1",\n'
|
||
|
|
' "createTime": "2024-01-01 12:00:00",\n'
|
||
|
|
' "updateTime": "2024-01-01 12:00:00",\n'
|
||
|
|
' "oppId": "1",\n'
|
||
|
|
' "opKind": "FIELD_CHANGE",\n'
|
||
|
|
' "logType": "FIELD_CHANGE",\n'
|
||
|
|
' "entityName": "opportunity",\n'
|
||
|
|
' "fieldName": "projectAmount",\n'
|
||
|
|
' "oldValue": "500000",\n'
|
||
|
|
' "newValue": "800000",\n'
|
||
|
|
' "bizRef": null,\n'
|
||
|
|
' "snapshotJson": null,\n'
|
||
|
|
' "opDesc": "修改项目金额",\n'
|
||
|
|
' "opSource": "MANUAL",\n'
|
||
|
|
' "opTime": "2024-01-01 12:00:00",\n'
|
||
|
|
' "opUserId": "1"\n'
|
||
|
|
' }'
|
||
|
|
)
|
||
|
|
OPLOG_PAGE_JSON = (
|
||
|
|
'{\n'
|
||
|
|
f' "content": [\n{OPLOG_ONE}\n ],\n'
|
||
|
|
' "total": 1,\n'
|
||
|
|
' "size": 10,\n'
|
||
|
|
' "current": 1,\n'
|
||
|
|
' "pages": 1,\n'
|
||
|
|
' "empty": false\n'
|
||
|
|
' }'
|
||
|
|
)
|
||
|
|
docs = build_docs(
|
||
|
|
'操作日志分页', 'POST', '/api/opportunity/oplog/page',
|
||
|
|
'商机详情「日志」Tab:字段级审计日志分页拉取,按操作时间倒序。默认全记 + 短黑名单排除(技术字段 create_time/update_time/version 等)。状态/阶段流转也记入本表,与专用快照表(`opportunity_status_history`/`opportunity_stage_history`)并存不重复。只增不删。',
|
||
|
|
[('oppId','string','是','-','商机ID'),
|
||
|
|
('pageNum','number','否','1','页码'),
|
||
|
|
('pageSize','number','否','10','每页条数')],
|
||
|
|
req_form_example('POST','/api/opportunity/oplog/page',
|
||
|
|
[('oppId','1'),('pageNum','1'),('pageSize','10')]),
|
||
|
|
[('content','array<object>','日志记录数组')] + [('content[].'+r[0],r[1],r[2]) for r in OPLOG_ROWS] + [
|
||
|
|
('total','number','总条数'),
|
||
|
|
('size','number','每页条数'),
|
||
|
|
('current','number','当前页码'),
|
||
|
|
('pages','number','总页数'),
|
||
|
|
('empty','boolean','是否为空结果'),
|
||
|
|
],
|
||
|
|
env_json(OPLOG_PAGE_JSON),
|
||
|
|
)
|
||
|
|
write_bru('商机管理/详情子域', '操作日志分页.bru',
|
||
|
|
bru_form(12, '操作日志分页', 'post', '/api/opportunity/oplog/page',
|
||
|
|
[('oppId','1'),('pageNum','1'),('pageSize','10')], docs))
|
||
|
|
|
||
|
|
print('part3c done — 团队 + 日志 2 个接口完成')
|