Repository navigation
Releases
v2.2.34
v2.2.34:H5 智能中心补成可用工作台,修复报工记录页被占位槽位挤空
这一版的核心是把 H5 员工端的「智能中心」从「七个入口 + 半成品页面」补成一个真正能干活的工作台:知识库能查也能建、助手能查真实数据、数字员工的委托经过能回看、被拦的入口能说清缺哪条权限。同时修掉一个会真实产出错误结果的缺陷——任务量大时「报工记录」页几乎空白。
重点修复
- 报工记录页在大批量任务下几乎空白。根因不是前端:件次同步逻辑按
assigned_qty预建unit_seq=1..N的 draft 占位槽位,而/h5/report-units默认按 id 倒序返回,一百个空槽位把几条真实记录挤出limit窗口,前端再本地过滤一次 draft,页面上就什么都不剩。修法是服务端加exclude_draft(默认False,管理端看待报槽位的既有行为不变),页面传true并取消本地过滤——本地过滤会让 offset 分页错位。 - 报工记录补齐状态筛选(待初审/待终审/已通过/已驳回)、加载更多、合格/不良小计,以及详情弹层与审核轨迹。驳回原因只存在于审核记录里,列表上看不到,员工被驳回后不知道要改什么,这是这条链路的唯一价值。
知识库
- 资料页补上写入闭环:新建资料(标题/来源/业务域/正文/向量化开关)、详情页按
can_edit给出编辑入口、列表支持「我建的」筛选与is_mine角标。 is_mine/can_edit由服务端计算并回传,前端不持有用户 id,也不靠前端比对。编辑入口只开给本人创建或持知识库管理权的人,避免现场员工改到别人沉淀的资料。- 资料列表支持排序(更新时间/创建时间/标题等白名单)、向量化状态筛选、来源筛选;详情支持「问这篇」单篇问答,回答只依据那一篇。
- 资料写入接口单独放宽超时到 120s:向量化是同步做的,长资料必然超过全局默认超时。
- 新增「最近浏览」与命中片段复制,问答依据可以直接跳到原文对应位置。
智能助手
- 新增「查数据模式」:接上后端
/agent,能调工具读真实数据,例如「今天哪些工单要延期」。默认关闭并记住选择,开启才走工具链路。 - 回答可展开工具调用轨迹:工具名、成功/失败、耗时、错误原因。
- 写操作不直接执行:只返回待确认动作(含 token 与有效期),页面弹确认卡片,确认后调
/act消费一次性令牌;令牌在服务端绑定工具名与参数,客户端没有任何自己拼参数的路径。 - 空态新增「看看助手能做什么」,按可用/无权限、只读/需确认标注能力清单。
- 会话支持历史抽屉、重命名、首句自动命名、发送失败重发、标题搜索、复制与导出 Markdown、导出全部会话。
数字员工
- 执行日志按人隔离:普通员工只看自己的执行记录,持管理权才看全站;新增单条执行明细,含指令、摘要、结构化结果、token 与耗时。
- 新增「委托会话」:一次委托串起多条技能执行,按会话回看比逐条翻日志更容易还原来龙去脉;支持展开每次执行的工具/指令/摘要/状态,也支持按会话整段删除(二次确认)。
- 巡检指令支持直接下发(≤200 字透传执行接口),日志支持按技能与状态(ok/degraded/error/locked)筛选。
预警与洞察
- 预警支持批量处置(≤50 条、去重、缺失项回传)、状态+严重度+维度三重筛选、加载上限提到 500、CSV 导出(带 BOM,Excel 直接可读)、整条复制、一键查相关制度、详情弹层(结构化事实、时间戳、AI 解读、四种状态流转)。
- 洞察历史支持维度筛选、复制、单条与多选批量删除、导出 CSV / Markdown;场景文书支持归档筛选、分页、复制与导出 Markdown。
- AI 用量可见:助手当轮回答显示 tokens 输入/输出,洞察与员工执行记录带用量信息。
入口与引导
- 智能中心新增今日概览(健康分、待处理预警、近 24h 执行)与「最近使用」(本地记录 4 条,被拦入口不进入记录)。
- 未授权从「模糊拒绝」改为可行动提示:被拦卡片直接显示缺失的权限码,点击弹说明(缺哪条权限、去哪个页面勾选),确认后一键复制,方便直接发给管理员。权限码优先用后端下发的那一条,与真实校验同源。
- 新增「现场 AI 在哪」分区:拍照计数、缺陷分类、语音报工、报工校验、交班摘要这五项能力嵌在报工流程里,逐条说明并直达对应页面,并明确标注不需要单独开通,避免员工误认为是被门控的付费能力。
工程与一致性
- 后端新增接口:
GET /docs的mine/sort/vectorized/source,POST /docs与PUT /docs/{id}的写入回执字段,POST /alerts/batch-handle,POST /runs/batch-delete,GET /logs/{log_id},PATCH /conversations/{conv_id},以及助手/agent与/act在 H5 侧的接入。 - 前端新增工具:
clipboard.ts(现代 API 失败回退到execCommand)、download.ts(Blob +revokeObjectURL,避免内存泄漏)、extension-gate.ts(区分「扩展未开通」与「角色未授权」)。 - 三语文案同步到 561 键,静态引用全部命中,无缺失键。
验证
- 契约测试 50 passed(新增覆盖:草稿槽位排除真的落到 SQL 绑定参数、默认行为不变、HTTP 层真的把参数传到 CRUD、
can_edit三态、各批次前后端能力防回退)。 - 后端全量 889 passed,含新增
tests/test_h5_report_history.py4 例。 check:i18nERROR 0 / WARN 0(561 键);vue-tsc --noEmit与npm run build通过。- 干净检出下扩展缺失的用例自动 skip,不会因为缺少商业扩展而报红。
升级影响
- 接口向后兼容:新增参数全部有默认值,
exclude_draft默认False,既有响应字段不删不改;管理端看得到 draft 待报槽位的行为完全不变。 - 无需数据库迁移:复用既有表与
deleted_at软删字段,未新增列。 - 权限未放宽:
ai.use与ext.ai_*的分配维持原状。当前这些权限只分配给admin一个角色,非管理员在智能中心会被拦——现在会明确告知缺哪条权限码,是否给班组长/员工开放属于业务决策,本版未擅自改动权限表。 - 部署提醒:本次包含商业扩展改动,部署包需确保知识库扩展的列表与写入改动已同步到运行目录(
backend/extensions/ai_knowledge/),否则「我建的」筛选与新建/编辑资料会报错。 - 部署后需重启后端服务,并重新发布
frontend-h5/dist静态资源;H5 员工端 nginx 挂载按运维侧节奏处理。
v2.2.33
v2.2.33:H5 新增知识库资料浏览,洞察历史支持多选批量清理
本次更新给员工端补上「查资料」这条最常用的动线:制度和作业指导书不再只能靠问答碰运气,而是能按标题/来源搜索、按业务域筛选、点开看全文并复制。同时把洞察历史从「一条条删」升级为多选批量清理。后端新增一个批量软删接口与一个扩展状态位,无表结构变更。
新增能力
- 知识库资料页(
/ai-docs):只读浏览员工有权查看的制度、工艺与作业指导书。列表支持按标题/来源搜索(q)、按业务域标签筛选(scope)、分页加载更多(20/页),展示来源、业务域、字数、更新时间与是否已向量化;详情弹层显示全文并支持一键复制。 - 可见性沿用后端规则:列表与详情都走
ai_knowledge的_visibility(scope+role_allowed),越权文档不会出现在结果里,也不会因猜 id 而读到。 - 智能中心入口:新增「知识库」卡片,纳入
/h5/ai/extensions预检查(ai_knowledge/ext.ai_knowledge.view),未开通 / 已停用 / 未授权三态与其它 AI 页一致,不会点了才撞 403。 - 洞察历史批量清理:新增
POST /api/extensions/ai_insight/runs/batch-delete,单次 ≤50 条、去重、软删(deleted_at),回传succeeded/missing;H5 历史抽屉加「选择」模式,支持全选、取消全选、已选计数与批量删除,部分记录已不存在时提示「已删除 N 条,M 条已不存在」。
工程与一致性
ai.ts补listKnowledgeDocs/getKnowledgeDoc/batchDeleteInsightRuns与KnowledgeDocItem/KnowledgeDoc类型。- 新增
AiDocsPage.vue(约 240 行)与路由ai-docs;三语各 +27 键(共 439)。 - README 同步资料页与批量清理能力。
验证
- 契约测试新增 4 条:资料页/路由/入口/洞察多选能力防回退、扩展状态覆盖
ai_knowledge、批量软删去重与 missing 回传、空选与超 50 条在入口拦截;共 24 passed。 - 后端全量 860 passed;
check:i18nERROR 0 / WARN 0(439 键,静态引用 386 / 64 文件);vue-tsc与vite build通过,产物含AiDocsPagechunk。 - 运行时确认
POST /api/extensions/ai_insight/runs/batch-delete已挂载,/api/h5/ai/extensions返回 6 个扩展(含ai_knowledge)。
升级影响
- 接口向后兼容:仅新增
POST /runs/batch-delete与扩展状态数组中的一项,不放宽任何权限、不改既有响应字段。 - 无需数据库迁移:复用
ext_ai_insight_runs.deleted_at与ext_ai_knowledge_*既有表。 - 部署后需重启后端服务,并重新发布
frontend-h5/dist静态资源;H5 员工端 nginx 挂载按运维侧节奏处理。
v2.2.32
v2.2.32:H5 智能中心第六批 —— 个人留痕隔离、洞察历史治理与巡检指令
本次更新集中在 H5 员工端智能中心,让「问过什么、分析过什么」能被单独找到并带走,同时修掉员工端能看见全站问答留痕的问题。后端仅一处可选参数新增,无表结构与接口破坏性变更。
新增能力
- 帮助页个人留痕:
GET /api/extensions/ai_knowledge/logs新增mine查询参数(0/1,默认 0),为 1 时按created_by只返回本人提问。H5 帮助页「历史提问」抽屉固定走mine=1,点一条即回填并重新提问;本机仍保留最近 20 条含答案的记录用于回看。 - 洞察历史治理:历史跑批列表新增「复制报告」与「删除记录」(软删除,二次确认后不可恢复),删除后自动刷新列表与速览。
- 数字员工巡检指令:执行巡检前可填写指令(≤200 字),随执行结果一并落审计日志;日志抽屉新增按技能、按结果状态(ok / degraded / error / locked)筛选。
- 场景文书归档增强:归档列表可按场景类型筛选、单份复制全文、分页加载更多,并显示总数。
- 剪贴板能力收敛:新增
frontend-h5/src/utils/clipboard.ts,navigator.clipboard不可用(内网 http)时回退execCommand;工厂助手、深度洞察、场景文书三处复用。
体验与一致性
- 帮助页服务端历史明确标注「只留问题与命中数,答案不落库」,避免误以为答案可回溯。
- 所有新增文案进入中 / 英 / 韩三语包,
npm run check:i18n仍为构建门禁(412 键,ERROR 0 / WARN 0)。
验证
- 契约测试新增 3 条:
mine=1必须带created_by过滤、默认全局视图不得加该条件、第六批前端能力防回退;共 20 passed。 - 后端全量 856 passed;
vue-tsc与vite build通过;干净检出下扩展相关用例自动跳过。
升级影响
- 接口向后兼容:
mine省略时为原行为(全局留痕,供管理端使用),不改变任何既有响应字段。 - 无需数据库迁移:使用的是
ext_ai_knowledge_logs已有的created_by列。 - 部署后需重启后端服务,并重新发布
frontend-h5/dist静态资源;H5 员工端 nginx 挂载按运维侧节奏处理。
v2.2.31
智能中心第五批:预警详情闭环、列表完整性、失败重试与会话自动命名
本次在 v2.2.30 基础上继续完善 H5 员工端智能中心,聚焦「看得全、操作闭环、失败不丢输入」。本批为纯前端与契约测试增强,后端接口零改动,运行期扩展源码无需重启即可生效的部分不受影响。
一、预警详情闭环
新增详情弹层,点击列表卡片即可看到完整信息:严重度 / 维度 / 状态标签、规则码与评分、现象、初步根因、处置建议、关键事实(facts 键值)、首次与最近出现时间,以及缓存的 AI 深度解读。支持强制重新解读(interpret 的 refresh 参数),持有 ext.ai_anomaly.manage 的账号可在弹层内完成确认 / 解决 / 忽略 / 恢复待处理四种状态流转,改完即时刷新列表。
二、列表完整性与导出
后端 /alerts 默认只返回 100 条、上限 500 条,此前前端无感知。现补齐「已显示 N 条 / 单次上限」提示与加载更多(100 → 500 逐级递增),切换筛选条件自动回到 100 条;支持把当前列表导出为带 BOM 的 CSV(Excel 直接打开不乱码)。批量处置条新增「恢复待处理」,与详情弹层的状态流转形成闭环。
三、字段口径修正
后端 _alert_out 输出的严重度字段是 severity,早期前端类型写成 level,导致列表严重度标签一直退化为「信息」。现统一按 severity 渲染并兼容旧 level,契约测试加护栏防止回退。
四、工厂助手:失败重试与自动命名
发送失败时不再把用户消息悄悄丢弃,保留该条并标记失败,可一键重新发送;新建会话时按首句生成干净标题(去换行 / 取首句 / 24 字截断)并自动重命名,避免后端把多行长文本直接塞进会话标题。用户手动重命名仍然优先。
五、工程与验证
中 / 英 / 韩三语各新增 26 键(共 395 键),check:i18n ERROR 0 / WARN 0;vue-tsc 与 H5 build 通过;新增 3 个契约测试(第五批能力防回退、详情接口完整字段、批量恢复清空 handled_at),契约测试 17 passed;后端全量 853 passed。
升级影响:无。本批不改动任何后端接口、数据结构与既有预警状态机,无需数据迁移;发布包中的 H5 静态资源按既有部署流程自行更新即可。若此前未重启过 cenkormes 后端(8500),本次重启时会一并把 v2.2.30 新增的 /h5/ai/extensions 路由与批量处置扩展接口加载进来,关于页显示 v2.2.31。
v2.2.30
智能中心第四批:扩展状态预检查、预警批量处置、帮助历史与会话导出
本次在 v2.2.29 基础上继续完善 H5 员工端智能中心,新增 1 个核心只读接口、1 个扩展接口与 4 个页面能力。
一、扩展状态预检查
新增 GET /api/h5/ai/extensions,按登录用户一次返回 ai_assistant / ai_anomaly / ai_employee / ai_insight / ai_scene_reports 的「已安装 / 已启用 / 已授权」三态。智能中心首页直接标注未开通、已停用、未授权并拦截跳转,不再逐页撞 403;接口不可用时自动退回本地权限判断,不阻塞页面。接口只返回三态与权限点,不暴露授权快照、版本、健康状态等管理端字段。
二、预警批量处置
ai_anomaly 新增 POST /extensions/ai_anomaly/alerts/batch-handle,沿用单条处置的状态机与 handled_at 语义,支持一次最多 50 条、自动去重、逐条存在性校验,回传 succeeded / missing 便于前端提示部分成功;仅 ext.ai_anomaly.manage 可调。数据预警页新增多选、全选、批量确认 / 解决 / 忽略与二次确认。
三、帮助页问答历史
智能帮助补最近 20 条提问记录,可点击回填重看、一键清空。历史只保存在本机浏览器,避免服务端全局问答日志跨账号可见。
四、会话导出与回答复制
工厂助手支持一键复制回答、导出当前会话为 Markdown;模型不可用或降级时展示提示文案,不再出现空白气泡。
五、工程与验证
中 / 英 / 韩三语各新增 39 键(共 369 键),check:i18n ERROR 0 / WARN 0;vue-tsc 与 H5 build 通过;新增 5 个契约测试(扩展状态三态、批量处置非法状态、去重与部分成功、路由挂载、能力封装),契约测试 14 passed;后端全量 850 passed。运行期扩展源码与私有仓库 mes-extensions 同步提交。
升级影响:无。本次为新增只读接口、新增批量处置接口与前端交互增强,不改变既有预警状态机与数据口径,无需数据迁移。发布后需在宝塔面板重启 cenkormes 后端(8500),「关于」页版本号才会刷新;H5 静态资源按既有部署流程自行更新。
v2.2.29
H5 智能中心第三批:会话重命名、知识库帮助与预警三重筛选
v2.2.28 把后端已有能力接到前端,这一版补齐三个仍缺口的交互:会话可命名、帮助页接上真正的知识库检索、预警能按状态与严重程度过滤。均为功能增强,不涉及业务数据口径变更。
新增能力
- 会话重命名:工厂助手顶部可对当前会话改名,历史抽屉里每个会话也有内联重命名编辑器(带空值校验、长度上限 120、成功/失败提示)。配套在
ai_assistant扩展新增PATCH /conversations/{conv_id},按id + user_id校验归属后才更新,空标题直接拒绝,会话不存在返回found=false且不执行 UPDATE。 - 智能帮助:HelpPage 从单一基础帮助升级为检索增强问答。默认调用
ai_knowledge的/ask,展示回答、命中文档标题 / 片段 / 相关度 / 检索方式;开关可切「仅检索」走/search,不调用大模型只看命中片段;顶部显示知识库文档数。扩展未开通、已停用或无权限时自动降级回ai_assistant/help基础帮助并给出提示,演示环境仍可用。 - 数据预警筛选:在原维度筛选之外补状态(全部 / 待处理 / 已确认 / 已解决 / 已忽略)与严重程度两行筛选,与维度组成三重过滤;筛选项由后端
/options提供,文案全部走三语包。
工程与验证
http.ts补apiPatch;ai.ts新增 4 个封装(会话重命名、知识库 search / ask / status),listAiAlerts支持传入status覆盖默认值。- 三语包各新增 35 键(共 330 键),
npm run check:i18nERROR 0 / WARN 0;vue-tsc、npm run build通过。 backend/tests/test_h5_ai_contract.py补 4 个用例:第三批接口封装防回退、重命名归属校验 / 空标题 / 正常更新单测。后端全量 pytest 845 passed;模拟公开仓库干净检出 2 passed / 7 skipped,扩展缺失时自动跳过,不会挂 CI。- README「H5 智能中心」章节已同步第三批能力。管理端 AI 入口确认齐全(工作台卡片、全局助手、扩展路由、AI 模型配置),本版不重复建设聚合页。
代码分布说明
与 v2.2.28 相同:backend/extensions/ 为运行期安装的商业扩展(.gitignore 忽略),源码在私有仓库 mes-extensions。重命名接口已同步到该仓库 ai_assistant/router.py 并提交 6b772cd(仅本地提交,未 push),本机运行期目录与私有仓库源文件完全一致。发版包由 git archive 生成,不含扩展源码,扩展仍走原有分发通道。
升级影响
纯前端交互增强 + 一个新增的扩展接口,不改动数据库结构、不改动既有接口返回字段、不改动计费与权限模型;旧版本前端调用本版后端无兼容问题。后端需重启一次让新增的 PATCH 路由生效(扩展代码在运行期目录);H5 员工端 nginx 挂载仍由部署方自行配置,发布包内已含预构建的 frontend-h5/dist。私有仓库 mes-extensions 的重命名修复若要进入其它环境,需单独推送该提交。
v2.2.28
H5 智能中心第二批:会话续接、历史与归档能力
v2.2.27 把 6 个 AI 页面做出来并三语化,这一版把后端早就存在、前端没接的能力补齐,顺带修掉两个真实缺陷。
新增能力
- 工厂助手:会话历史查看 / 切换 / 删除 / 新建;切换后可继续在同一会话里对话,不再每问一句都开一个新会话。
- 数据预警:健康分、活跃 / 已处理 / 累计事件概览,按维度筛选,单条预警可请求 AI 解读。
- 深度洞察:维度说明由
/axes提供,新增历史分析记录列表与报告回看。 - AI 数字员工:执行日志抽屉、扩展启用状态标签。
- 场景文书:生成前的只读预览(不落库)、历史文书归档列表 / 详情 / 删除。
- 智能中心:按权限点给卡片加「未授权」角标并提示,不硬拦,保留页面内 403 兜底,避免演示账号被全挡住。
两个缺陷修复
- 多轮上下文断裂:
ai_assistant的/chat与/agent声明了conversation_id却没有使用,每次都新建会话。现改为按id + user_id校验归属后续接;会话被删或不属于本人时退化为新建。前端aiChat同步把conversation_id传下去。 - 员工端点「扫描 / 标记已处理」必 403:这两个接口要
ext.ai_anomaly.manage,页面以前无条件渲染按钮。现按/auth/me的权限点决定是否显示,并保留 403 兜底。
代码分布说明(重要)
公开仓库本版只含前端、README 与契约测试。backend/extensions/ 是运行期安装的商业扩展(.gitignore 忽略),源码在私有仓库 mes-extensions:会话续接修复已同步到该仓库 ai_assistant/router.py 并提交 b5d9874(仅本地提交,未 push),本机运行期目录也已更新、与私有仓库源文件一致。发版包按既有流程由 git archive 生成,不含扩展源码,扩展仍走原有分发通道。
文档与测试
- README 增补「H5 智能中心(付费扩展)」章节;三语包新增 47 键(共 295 键)。
- 新增
backend/tests/test_h5_ai_contract.py:校验前端ai.ts引用的/extensions/*路径都在后端注册过、新增能力封装不被回退,并用 mock 验证会话归属校验;扩展源码缺失的干净检出会自动跳过相关用例。 - 管理端 AI 入口已由扩展路由机制提供(工作台卡片 + 全局助手 + 「AI 模型」配置),本版未新建页面。
升级影响:无。
不改数据库结构、不动既有业务数据,不涉及计价、税额、折扣等口径。变化集中在 H5 前端展示与交互;后端仅 ai_assistant 的会话续接逻辑,影响范围限于 AI 助手对话上下文(旧会话仍可正常读取)。扩展未启用或账号未授权时页面仍走既有锁定与引导逻辑。
需要做什么
- 在宝塔面板重启
cenkormes后端:本版改了运行期扩展代码,且system_versions在启动时同步,「关于」页才会显示新版本号。 - H5 员工端部署按自己的节奏;CI 已把预构建 H5
dist打进发布包。 - 若要让会话续接修复进入其它环境,需自行推动
mes-extensions的b5d9874(未 push)。
验证
npm run check:i18n:ERROR 0 / WARN 0(三语各 295 键)。npm run check(vue-tsc -b):通过;npm run build:成功,6 个 AI 页 chunk 正常产出。- 后端全量 pytest:841 passed(新增 5 个)。
scripts/release-check.sh --tag v2.2.28 --impact:由发版脚本自动执行。
v2.2.27
H5 智能中心:多语言、权限引导与场景文书接口化
本版把上一轮新增的 6 个 H5 智能中心页面从「能用」补到「可用」:文案全部三语化、未开通与未授权分开提示、交互状态补齐,场景文书改为后端场景清单驱动。
新增能力(4f9b66b)
- H5 新增智能中心 6 个页面与路由:智能中心入口、工厂助手、数据预警、AI 数字员工、深度洞察、场景文书;客户账号统一拦截
/ai-*。 - 新增扩展门控
extension-gate.ts,付费扩展未开通、未授权时给出明确引导,不再一律报 403。 - H5 飞书绑定状态与授权 URL、企微 / 钉钉绑定接口打通(受付费扩展开关控制)。
- 扩展宿主启动时全量同步权限点,并清理已下线扩展的残留权限点;权限点登记与扩展启用状态解耦。
- 角色管理、缺陷代码页与中英韩文案同步。
完善(ec72e17)
- zh-CN / en-US / ko-KR 新增
ai段 83 个键,6 个 AI 页面硬编码中文全部改用t();列表改为computed,切换语言即时生效。 - 门控文案进语包,新增
showAccessDenied():把「扩展未开通」与「当前角色未授权」分成两种提示,避免误导用户去开通其实已开通的功能。 - 工厂助手补加载态、锁定态、重试入口与发送中禁用输入;数据预警、数字员工、深度洞察、智能中心 4 页统一加载态 / 空态 / 错误提示 / 对话框文案。
- 场景文书改为后端
/scenarios驱动:场景名、描述、字段全部来自接口,按text/number/select动态渲染表单并回填预填值,保留交期风险分析的计划编号必填校验;移除前端写死的 3 个场景。 ai.ts补SceneField/SceneScenario类型,listSceneScenarios()返回fields。
升级影响
对既有数据与业务口径无影响。 本版不改数据库结构、不动任何既有业务数据,不涉及计价、报工、订单等口径;新增内容集中在 H5 前端展示与交互。后端仅调用已有的 /scenarios 场景清单接口。
对既有行为的影响有限。 扩展权限点仍在服务启动时按清单同步,禁用或授权过期的扩展不再因权限点登记而改变启用判断;实际调用仍由 require_extension 逐请求按启用状态拦截。升级后如发现个别扩展权限绑定与预期不符,可在角色管理里重新分配。
需要做什么。 在宝塔面板重启 cenkormes 后端,让 system_versions 在启动时同步,「关于」页才会显示新版本号;随后浏览器强刷。H5 前端产物由 CI 构建并打进发布包,部署节奏可自行安排。
验证
npm run check:i18n:ERROR 0 / WARN 0(三语各 248 键,源码静态引用 209)。npm run check(vue-tsc -b):通过。npm run build:成功,449 modules,6 个 AI 页 chunk 均正常产出。scripts/release-check.sh --tag v2.2.27 --impact:由发版脚本自动执行。
v2.2.26
客户阶梯价(数量区间定价)
v2.2.24 给了客户一个产品一个价,v2.2.25 让同一产品下不同型号可以各自定价。这一版再往前一步:同一个型号,买多买少价格不同——批发场景的真实报价本来就是这样。
怎么配
管理端「生产 → 客户 → 客户详情 → 可下单产品」里,每个产品多了一张「阶梯价」表格,每个型号也多一张:
| 数量起点 | 单价 |
|---|---|
| 10 件 | 12.00 |
| 100 件 | 11.00 |
| 500 件 | 10.00 |
- 产品那一张是该产品所有型号共用的通用阶梯;型号那一张只对该型号生效。
- 留空 = 不配置阶梯,继续按原来的单一单价走。
- 清空整张表 = 取消阶梯,回落到单一单价。
下单时怎么算
按「越具体越优先」四级解析:
型号专属阶梯 > 型号单价 > 产品通用阶梯 > 产品单价
举两个容易踩的例子:
- 某型号单独配了
1 件 15.00 / 50 件 14.00,产品通用阶梯是100 件 11.00。买 60 件时命中 14.00,不会被产品的 11.00 抢走——型号维度更具体。 - 产品通用阶梯最小档是 100 件起。买 10 件会被拒,因为起订量取的是最小档起点,不是命中档起点;反过来买 300 件时也不会被 100 件的门槛拦住。
三道防错
- 价格必须随数量递减。配反了(买得多反而更贵)直接拒绝保存——这种错不会抛异常,只会静默把整单金额算错,等对账才发现。
- 单价只从服务端价目表取。请求体里依旧没有单价字段,客户改不了自己看到的价格。
- 白名单仍是唯一准入。产品不在客户的可下单范围内,配了阶梯也下不了单。
客户侧
客户 H5 下单页会展示「满 X 件 Y 元/件」的下一档提示,购物车按当前数量实时显示命中单价与小计,凑单到下一档会立刻看到单价变化。
升级影响
对既有数据无影响。 只新增一张空表 customer_price_tiers(迁移 0022,幂等建表),不修改任何现有表结构,不动订单、价目、白名单的已有数据。
对既有行为无影响。 没有配置阶梯的客户,下单链路与 v2.2.25 完全一致:仍然走「型号单价 → 产品单价」,金额算法、起订量校验、币种校验都没变。上线后不配阶梯就不会有任何价格变化。
需要做什么。 在宝塔面板重启 cenkormes 后端,让迁移与新代码生效;重启后浏览器强刷管理端与客户 H5。要启用阶梯价,去「客户详情 → 可下单产品」填数量档位即可。
验证
- 后端全量测试 835 passed(新增 13 个阶梯价用例:按量选档、起订量取最小档、型号档优先、价格递增被拒、清空回落、白名单兜底)。
- 真实 HTTP 链路验证(
seed_demo/37_customer_tier_pricing_flow.py):型号 A 60 件走型号阶梯14.00、型号 B 100 件走产品阶梯11.00,订单金额1940.00与库内明细逐行一致;99 / 100 / 500 件分别命中12.00 / 11.00 / 10.00;9 件被起订量拦截;价格递增配置被拒;清空后目录回落到单一价。 - 三语语言包门禁通过(admin 4021 键、H5 165 键,中英韩齐平)。
v2.2.25
升级影响
- 需要执行数据库迁移:本版新增
customer_sku_prices表(Alembic0021_customer_sku_prices)。升级脚本会自动执行,无需手工操作;该迁移只建新表,不修改、不删除任何现有表与数据。 - 存量数据零影响:
customer_products的产品级价目、已有订单、订单明细金额全部不变。型号级价目是「可选覆盖」,不配置时行为与 v2.2.24 完全一致。 - 接口向后兼容:客户 H5 下单接口入参未变,只在 catalog 响应里多了一个
price_source字段(sku/product/none),旧前端忽略即可。 - 浏览器需强刷一次以加载新的管理端 JS。
本次改动
客户型号级价目
产品级价目只能做到「同产品所有型号同价」,但同一款工装的 M/L 码、不同颜色、不同规格经常要各定各的价。本版新增型号级覆盖:
- 定价优先级:型号级(
price > 0)→ 产品级 → 未定价拒绝下单 - 管理端位置:客户管理 → 客户详情 → 「可下单产品」Tab,价目表格下方新增「型号级价目(可选)」表格,逐型号填单价 / 起订量 / 币种
- 留空即继承:型号级的起订量和币种留空时继承产品级,不是取默认值 1 / CNY。这一点很关键 —— 否则只改型号单价会把「起订 10」悄悄重置成 1,把产品级的起订限制抹掉
- 清空即回落:把型号单价清空保存等于删除该型号的覆盖,回落到产品级,不会留下 0 元行
- 表格最后一列显示「生效价 + 来源标签」(型号价 / 产品价 / 未定价),排查价格问题时直接看得见
白名单仍是唯一准入
产品不在客户的可下单范围内时,即使库里已经有型号价,下单仍会被拒。定价解析层单独把关,防止历史脏数据或手工改库绕过。
修复币种白名单不一致
CurrencyCode(Pydantic)、SUPPORTED_CURRENCIES(后端)、前端下拉三处此前不一致,都漏了 HKD / GBP —— 在管理端选中后保存会收到 422 或 400。本版统一为 CNY / USD / EUR / KRW / JPY / HKD / GBP。
验证
- 后端全量
pytest:823 passed(v2.2.24 的 814 + 9 个新增型号定价用例) - 新增用例覆盖:型号价覆盖产品价、起订量继承、币种继承、
price=0清覆盖回落、白名单不被绕过、产品范围重存不清空型号价 - 真实 H5 链路:型号 A 配专属价 15.50、型号 B 回落产品价 12.50,各下 10 件 → 订单金额 280.00,明细 155.00 / 125.00,低于继承后起订量(10 件)的下单被正确拒绝
- 两个前端
check:i18nERROR 0 / WARN 0(中英韩 4000 键齐平)、vue-tsc与vite build通过 - 迁移实测:新表结构正确(
price非空、min_qty/currency可空表示继承),customer_products25 行原数据未动