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.
 
 
 
 
 
 

8.5 KiB

14 自定义视图 + 内置视图族(推翻/扩展票 10 视图组织)

Type: grilling Status: resolved Blocked by: 10

缘起

产品以最新重构版 demo nginx/html/保伦CRM系统demo-重构版-S1_0803.htmloppModule 为准(用户明确「他是想做成这样」),推翻/扩展票 10 的四视图组织:销售机会下可自定义视图,并把内置视图从「一个我负责的」扩为四个内置视图族。

demo 出处:oppModule(HTML line 1228 viewTitles / line 1229 viewItems / line 1260–1305 视图菜单与自定义检索表单 / saveCustomSearch·saveEditedSearch·saveAsNewSearch·runCustomSearch·editSearch·startRename·confirmRename·deleteSearch·pinView·persistCustomSearches·restoreCustomSearches)。

与票 10 的差异(本票为 Amendment,票 10 其余口径不变)

维度 票 10 已定稿 demo 0803 新意图(本票拍板)
视图组织 三个独立工作区(个人/管理/公海)各是独立页面 + 最近访问 单一「销售机会」工作区下的视图下拉(常用检索 / 自定义检索两 Tab);商机管理 / 商机公海仍是并列 workspace(不变)
内置个人视图 只有一个「我负责的(个人页)」 四个内置视图:最近访问 / 我负责的 / 我参与的(新增)/ 我关注的
「我参与的」 未定义 内置视图,见下【定义 1】
自定义视图 核心新增:保存检索为常用视图、编辑 / 重命名 / 删除、图钉设默认,见【定义 2】

票 10 的四视图数据范围矩阵、列表字段、计算列口径、三皮肤、公海 pool_reason 等一律不变。本票只改**「销售机会」这一工作区内的视图组织形态**(内置视图族 + 用户自定义视图),并把「最近访问」「我关注的」从票 10 的独立视图并入销售机会工作区的视图下拉。

决策(已定稿)

定义 1 —— 内置视图族(销售机会工作区,四个)

四个内置视图,均在「销售机会」workspace 的「常用检索」Tab 内,顺序 = 最近访问 / 我负责的 / 我参与的 / 我关注的:

视图 code 名称 数据范围(WHERE 口径)
recent 最近访问 当前用户打开过详情的商机,访问时间倒序、按商机 id 去重留最新,上限可配置(本期默认 50,票 10 P2-2 不变)
mine 我负责的销售机会 owner_user_id = 当前用户(票 10「销售机会(个人)」口径不变)
participated 我参与的销售机会 我是该商机团队成员但不是负责人EXISTS(团队成员表 WHERE opportunity_id=? AND user_id=当前用户) AND owner_user_id <> 当前用户。团队成员表 = 票 02/04 建商机时落的团队成员(领取人=负责人 + 后续「添加团队成员」加入的成员)。产品确认(本票确认点 1):参与 = 团队成员且非负责人,与「我负责的」互斥不重叠。
followed 我关注的销售机会 当前用户关注表命中(票 10「我的关注」口径不变)
  • 内置视图 = 系统固定四个,不可编辑 / 重命名 / 删除;只可被「图钉」设为默认视图(见定义 3)。
  • 「商机管理」「商机公海」仍是独立 workspace(不进销售机会视图下拉),口径同票 10(管理按 @DataScope、公海 opp_status=1 且 owner 空)。demo 里 workspace 三档(sales/manage/publicPool)印证。

定义 2 —— 自定义视图(= 保存的检索)

用户在「自定义检索」Tab 里配置检索条件并「保存为常用检索」,生成一个自定义视图,加入「常用检索」Tab 列表(排在四个内置视图之后)。一个自定义视图 =:

  • 检索名称(用户填,同一用户同一 scope 内唯一,demo validateCustomRule 查重)
  • 检索条件:一组「字段 + 操作符 + 值」(demo 本期 1 组条件;「+ 添加更多条件」「启用高级公式」demo 标注为后续迭代 —— 本期后端契约按「条件列表」建模,前端本期只提交 1 组,留扩展位)
    • 字段(本票确认点 3)= 列表所有可筛选列(不是 demo 简化的 4 个);字段池归业务方(商机模块)定义,对齐 crm-preference「字段池」约定
    • 操作符:等于 / 不等于 / 包含 / 不包含 / 为空 / 不为空(demo customMatches
  • 排序条件:排序字段 + 方向(asc/desc)(demo filteredRows预计成交金额 / 计划成交时间 是简化,后端排序字段同属字段池)

生命周期动作(demo 已实现,全部按用户私有):

  • 保存为常用检索 saveCustomSearch(新建)/ 另存为新检索 saveAsNewSearch
  • 编辑检索 editSearch保存修改 saveEditedSearch(覆盖原视图)
  • 重命名 startRename/confirmRename
  • 删除 deleteSearch(删当前视图时回落到 mine;删默认视图时默认回 mine

定义 3 —— 默认视图(图钉)

  • 每个视图(内置四个 + 自定义任一)行尾有「图钉」,点击 = 设为该用户在此 scope 的默认视图 pinView(demo defaultView,持久化)。
  • 进入销售机会页时打开默认视图;默认视图未设 → mine
  • 默认视图 = 用户级、单值(一个 scope 只有一个默认)。

决策 4 —— 落 crm-preference 平台能力,不绑死商机(本票确认点 2)

产品确认:目前只在销售机会启用,但要有灵活性,后续其他菜单也会有。故自定义视图做成 crm-preference 的平台级能力(与既有「列偏好」并列的第二种偏好),scope_key 分组、用户级私有,与 ADR-0024「每菜单独立」完全对称:

  • 新增偏好实体(建议 user_saved_view):(user_id, scope_key, view_id, name, filter_json, sort_field, sort_direction, is_default, seq_no, create_time, update_time)
    • filter_json = 条件列表([{field, operator, value}, ...])序列化;crm-preference 不校验字段合法性(字段池归业务方,对齐既有「字段池」约定)。
    • scope_key 复用列偏好同一套 scope 命名;销售机会本期 scope = opportunity.sales(单一,因自定义视图只属销售机会个人工作区,见确认点 2)。管理 / 公海本期不开自定义视图。
    • is_default 承载定义 3 的默认视图(同 (user_id, scope_key) 至多一条 is_default=1)。
  • 契约crm-preference 现有 get/save 两法(列偏好)之外,为自定义视图加一组 list / save / delete / setDefault(用户级、按 scope)。具体方法签名留实现阶段定,本票只钉「落 crm-preference、按 scope、用户私有」的归属决策。
  • 确认点 2 明确:本期只 opportunity.sales 一个 scope 启用;实体 / 契约按「任意 scope 通用」设计,不含商机专有字段,后续菜单加 scope 即可复用。

传出决策 / 回填其他票

  • 回填票 10:销售机会工作区的视图组织从「单一我负责的」改为「内置四视图(最近访问 / 我负责的 / 我参与的(新)/ 我关注的)+ 自定义视图」;「最近访问」「我的关注」并入销售机会视图下拉(数据范围口径不变)。票 10 的列 / 计算列 / 三皮肤 / 公海不变。
  • 回填 crm-opportunity/CONTEXT.md:【四视图】术语改写为【视图(内置 + 自定义)】;新增【我参与的】术语(团队成员且非负责人)。
  • 回填 crm-preference/CONTEXT.md:新增【自定义视图】能力段(平台级、按 scope、用户私有、图钉默认视图);scope 清单增补 opportunity.sales
  • 新增待办(Not yet specified / 后续实现票):自定义视图 crm-preference 契约方法签名 + user_saved_view 表 DDL(实现阶段);商机列表可筛选列字段池清单(确认点 3,字段池归商机模块,实现阶段列全)。
  • 明确 spin-out(本票不做):多组条件(AND/OR 复合)、高级公式 —— demo 标注后续迭代;本期契约按「条件列表」预留,前端只 1 组。

Comments

  • 确认点回执(用户 2026-08-20):①「我参与的」= 团队成员且非负责人 —— 认可;②自定义视图作用域 —— 目前只销售机会,但要灵活性、后续其他菜单也会有 → 落 crm-preference 平台能力按 scope;③检索字段 —— 用列表所有可筛选列;④先更新 spec(本票),不动代码。