海尔山茶花502值得买吗 零嵌冰箱对比
字段审查结论为避免后端过度设计这一次只保留前端保存和下次恢复所必需的数据。保留字段字段保留原因reviewId定位审核记录沿用现有ReviewArticle.idmarkupVersion/expectedMarkupVersion解决多人同时编辑时的覆盖问题baseContentHash判断当前标记是否仍基于同一份原文markupJson云端唯一需要持久化的标记快照annotations备注和修改列表下次进入页面需要还原blockPath/from/to/quote用于把标记定位回原文updatedBy/updatedAt仅用于展示最近保存信息和冲突提示第一版去掉的字段字段去掉原因reviewVersion/expectedReviewVersion审核状态变化可通过后端校验monitorStatus 0解决标记并发由markupVersion解决createdBy/createdAt/updatedBy/updatedAtannotation 内本期全量覆盖保存不做单条批注审计每条标记的独立历史不准确也不必要prefix/suffix/blockTextHash原文冻结且只允许同块选区blockPath/from/to/quote足够这些字段可作为后续增强finalContentHtml/finalContentMarkdown草稿保存终稿可由前端实时计算草稿阶段只需要保存markupJsoncontentFormat当前内容格式由既有content字段约定若后端后续支持 HTML/Markdown 混合再扩展editable前端已有权限和状态判断后端保存时仍必须做权限/状态校验不是恢复标记所必需数据结构ReviewMarkupJsoninterface ReviewMarkupJson { schema: review-markup/v1; baseContentHash: string; annotations: ReviewMarkupAnnotation[]; }字段说明字段类型必填说明schemastring是标记数据协议版本固定review-markup/v1baseContentHashstring是原文内容 hash用于判断原文是否变化annotationsarray是当前有效的备注和修改列表markupVersion不放在markupJson内部由接口顶层字段维护避免前后端版本不一致。ReviewMarkupAnnotationinterface ReviewMarkupAnnotation { id: string; type: comment | replace; anchor: ReviewTextAnchor; comment?: string; replacement?: string; }字段说明字段类型必填说明idstring是前端生成的全局唯一标记 id例如ann_...typecomment/replace是comment备注replace替换建议anchorobject是标记在原文中的位置commentstring条件必填typecomment时必填replacementstring条件必填typereplace时必填ReviewTextAnchorinterface ReviewTextAnchor { blockPath: string; from: number; to: number; quote: string; }字段说明字段类型必填说明blockPathstring是文本块位置例如h1[0]、p[2]、li[4]fromnumber是在该文本块纯文本中的起始 offset包含tonumber是在该文本块纯文本中的结束 offset不包含quotestring是被选中的原文片段示例{ schema: review-markup/v1, baseContentHash: sha256:6adf9c..., annotations: [ { id: ann_001, type: comment, anchor: { blockPath: p[2], from: 10, to: 18, quote: 智能化高 }, comment: 这里表述偏绝对建议补充数据来源 }, { id: ann_002, type: replace, anchor: { blockPath: p[4], from: 5, to: 11, quote: 行业领先 }, replacement: 表现较强 } ] }接口设计统一响应结构沿用现有后端风格interface GeoApiResponseT { success: boolean; code: number; message: string; data: T; }如果后端支持 HTTP 409冲突场景建议直接返回 HTTP 409。如果后端统一返回 HTTP 200则必须使用明确业务 code例如40901、40902。接口 1查询文章标记数据GET /geo/api/review/getReviewMarkupByReviewId?reviewId11入参参数位置类型必填说明reviewIdquerynumber是审核记录 id即当前ReviewArticle.id出参interface GetReviewMarkupResponse { reviewId: number; baseContentHash: string; markupVersion: number; markupJson: ReviewMarkupJson | null; updatedBy?: string; updatedAt?: string; }字段说明reviewId审核记录 id等于当前列表行ReviewArticle.id。baseContentHash后端根据当前原文生成前端保存和提交时必须原样传回。markupVersion标记数据版本标记保存成功时递增。markupJson为空时前端按无标记初始化。updatedBy/updatedAt最近一次成功保存标记的人和时间仅用于展示或冲突提示。说明文章标题、正文、状态继续复用现有ReviewArticle数据如果后端希望详情页完全不依赖列表数据可另行把title/content/monitorStatus合并进该接口但第一版不是必须。前端权限仍按现有content_review_check和monitorStatus判断后端保存时必须再次校验状态和权限。示例{ success: true, code: 200, message: success, data: { reviewId: 11, baseContentHash: sha256:6adf9c..., markupVersion: 2, markupJson: { schema: review-markup/v1, baseContentHash: sha256:6adf9c..., annotations: [] }, updatedBy: zhangsan, updatedAt: 2026-07-03 15:20:00 } }接口 2保存标记草稿PUT /geo/api/review/saveReviewMarkup调用时机用户在备注弹窗点击保存。用户在修改弹窗点击保存。用户删除或编辑已有备注/修改后点击确认。保存语义前端每次提交当前文章的完整markupJson不是只提交本次新增或修改的单条 annotation。后端只在expectedMarkupVersion、baseContentHash都校验通过且当前审核状态仍允许编辑时覆盖保存。覆盖对象是该文章当前草稿的整份markup_json。校验失败时必须返回冲突不能覆盖云端已有草稿。入参interface SaveReviewMarkupParams { reviewId: number; expectedMarkupVersion: number; baseContentHash: string; markupJson: ReviewMarkupJson; }字段说明字段类型必填说明reviewIdnumber是审核记录 idexpectedMarkupVersionnumber是前端当前基于的标记版本baseContentHashstring是前端当前基于的原文 hashmarkupJsonobject是完整标记 JSON出参interface SaveReviewMarkupResponse { reviewId: number; markupVersion: number; updatedBy: string; updatedAt: string; }后端校验reviewId存在。当前审核状态仍允许编辑例如monitorStatus 0。expectedMarkupVersion等于后端当前markupVersion。baseContentHash等于后端当前原文 hash。markupJson.baseContentHash等于后端当前原文 hash。每个anchor.quote能在对应blockPath/from/to上匹配到原文。第一版建议不允许有效标记区间互相重叠尤其是replace与replace不能重叠。成功保存后后端用本次请求的完整markupJson整体覆盖保存该文章的markup_json。markupVersion 1。返回最新版本。接口 3提交审核结果沿用现有接口扩展标记快照和并发校验字段PUT /geo/api/review/updateArticleReview入参interface UpdateArticleReviewWithMarkupParams { id: number; monitorStatus: 2 | 3; rejectReason?: string; expectedMarkupVersion: number; baseContentHash: string; markupJson?: ReviewMarkupJson; }字段说明字段类型必填说明idnumber是审核记录 idmonitorStatus2/3是2未通过3待投放rejectReasonstring条件必填未通过时必填expectedMarkupVersionnumber是前端当前基于的标记版本baseContentHashstring是前端当前基于的原文 hashmarkupJsonobject否当前标记快照。建议提交时携带便于后端事务内保存最终标记后端事务要求锁定审核记录和标记记录。校验当前monitorStatus仍允许提交。校验expectedMarkupVersion等于当前markupVersion。校验baseContentHash等于当前原文 hash。如果请求携带markupJson校验所有 anchor 合法后保存为最终标记快照并递增markupVersion。更新审核状态为monitorStatus。写入审核历史。提交接口必须把保存最终标记 更新审核状态 写审核历史作为原子操作处理。

相关新闻

SAP ME21N行项目增强:穿透屏幕、BAPI与数据库三层屏障

SAP ME21N行项目增强:穿透屏幕、BAPI与数据库三层屏障

1. 这不是“加个字段”那么简单:ME21N行项目增强的本质矛盾在SAP采购模块里,提到ME21N行项目增强,很多人第一反应是“找个CMOD出口,加个Z字段,再写个屏幕修改”。我做过不下二十个类似需求——从化工企业的批次有效期控…

2026/8/25 11:46:35 阅读更多 →
RK3568交叉编译环境ABI对齐实战指南

RK3568交叉编译环境ABI对齐实战指南

1. 为什么RK3568交叉编译环境不是“装个工具链就完事”——一个踩过七次坑的老手说点实在话RK3568交叉编译环境,这六个字在瑞芯微生态里,几乎等同于“开发门槛的实体化”。我第一次给客户部署这套环境时,在Ubuntu 18.04上折腾了整整三天——不…

2026/8/25 11:46:35 阅读更多 →
从JMeter到k6:现代化性能测试与优雅报告实践指南

从JMeter到k6:现代化性能测试与优雅报告实践指南

1. 项目概述:从“能用”到“优雅”的性能测试实践 在软件交付的链条上,性能测试常常处于一个尴尬的位置:人人都知道它重要,但真正投入资源、系统化执行并产出有价值报告的团队却不多。很多时候,我们依赖于一些“上古神…

2026/8/25 11:45:34 阅读更多 →

最新新闻

【2015-02-23】Linux常用命令备份:ar

【2015-02-23】Linux常用命令备份:ar

[历史归档] 本文原发布于 cstriker1407.info 个人博客,内容为历史存档,仅供参考。 发布时间: 2015-02-23 | 标题:Linux常用命令备份:ar | 分类: 编程 / linux | 标…

2026/8/25 13:45:41 阅读更多 →
【2015-02-01】linux下查看文件夹大小du命令简单笔记

【2015-02-01】linux下查看文件夹大小du命令简单笔记

[历史归档] 本文原发布于 cstriker1407.info 个人博客,内容为历史存档,仅供参考。 发布时间: 2015-02-01 | 标题:linux下查看文件夹大小du命令简单笔记 | 分类: 操作系统 / linux &#xf…

2026/8/25 13:45:41 阅读更多 →
35秒冲垮一个网站,超9成攻击不到10分钟!2026黑客都在用这种“隐形毒招”

35秒冲垮一个网站,超9成攻击不到10分钟!2026黑客都在用这种“隐形毒招”

最新内容 微 信 搜索 公 众 号 网 络 研 究 观网络世界的“早高峰堵车” 你有没有遇到过这种情况?本来想赶着看一场体育赛事直播,或者正准备去抢一张演唱会门票,甚至只是想上政府网站办个业务,页面却突然跳出一行冷冰冰的字&#…

2026/8/25 13:45:41 阅读更多 →
【2015-03-02】《RealView编译工具汇编器指南》摘录:内置变量和常数

【2015-03-02】《RealView编译工具汇编器指南》摘录:内置变量和常数

[历史归档] 本文原发布于 cstriker1407.info 个人博客,内容为历史存档,仅供参考。 发布时间: 2015-03-02 | 标题:《RealView编译工具汇编器指南》摘录:内置变量和常数 | 分类: 操…

2026/8/25 13:45:41 阅读更多 →
【2015-03-08】《RealView编译工具编译器用户指南》摘录:嵌入式汇编器

【2015-03-08】《RealView编译工具编译器用户指南》摘录:嵌入式汇编器

[历史归档] 本文原发布于 cstriker1407.info 个人博客,内容为历史存档,仅供参考。 发布时间: 2015-03-08 | 标题:《RealView编译工具编译器用户指南》摘录:嵌入式汇编器 | 分类:…

2026/8/25 13:45:41 阅读更多 →
【2015-02-08】【转】如何实现一个malloc

【2015-02-08】【转】如何实现一个malloc

[历史归档] 本文原发布于 cstriker1407.info 个人博客,内容为历史存档,仅供参考。 发布时间: 2015-02-08 | 标题:【转】如何实现一个malloc | 分类: 操作系统 / linux | 标签&…

2026/8/25 13:44:41 阅读更多 →

日新闻

洛谷 P7912:[CSP-J 2021 T4] 小熊的果篮 ← 双向链表

洛谷 P7912:[CSP-J 2021 T4] 小熊的果篮 ← 双向链表

【题目来源】 https://www.luogu.com.cn/problem/P7912 【题目描述】 小熊的水果店里摆放着一排 n 个水果。每个水果只可能是苹果或桔子,从左到右依次用正整数 1,2,…,n 编号。连续排在一起的同一种水果称为一个“块”。小熊要把这一排水果挑到若干个果篮里&#x…

2026/8/25 0:00:34 阅读更多 →
Transformers.js 网页端图像抠图实战:零后端 3 行代码返回透明 PNG

Transformers.js 网页端图像抠图实战:零后端 3 行代码返回透明 PNG

Transformers.js 网页端图像抠图实战:零后端 3 行代码返回透明 PNG 【免费下载链接】transformers.js State-of-the-art Machine Learning for the web. Run 🤗 Transformers directly in your browser, with no need for a server! 项目地址: https:/…

2026/8/25 0:00:34 阅读更多 →
数学建模竞赛论文写作指南:从模型构建到学术表达的核心技能

数学建模竞赛论文写作指南:从模型构建到学术表达的核心技能

1. 项目概述:从“会做”到“会写”的竞赛核心跃迁“全国大学生数学建模竞赛”,这个名字对理工科学生来说,分量极重。每年,无数团队在三天三夜的时间里,为一个开放性问题绞尽脑汁,从建立模型、求解算法到编程…

2026/8/25 0:00:34 阅读更多 →

周新闻

[光学原理与应用-521]:对光的错误理解与纠偏

[光学原理与应用-521]:对光的错误理解与纠偏

首先光是一种能量的载体和形态,宏观上观察到的光是由无数个微观的光量子组成的,每个光子在产生的瞬间,其在真空的空间中以确定不变的速度沿着一个初始的方向一直向前,在微观层面,每个光量子的运动轨迹是以波函数所展现…

2026/8/25 3:38:12 阅读更多 →
SIP通话转接原理与REFER方法实战解析

SIP通话转接原理与REFER方法实战解析

1. 通话转接不是“挂断再拨号”,而是SIP会话的动态重定向你有没有遇到过这样的场景:客服坐席A正在和客户通电话,突然需要把这通对话无缝转给专家坐席B,客户完全感知不到中间的断连——既没听到忙音,也没被要求重新拨号…

2026/8/25 3:38:18 阅读更多 →
Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

1. 为什么选择Kolla-ansible来部署单节点OpenStack?如果你正在寻找一种能把OpenStack从“概念”快速变成“可用的实验环境”的方法,那么Kolla-ansible几乎是当前最主流、最省心的选择。我见过太多人卡在手动编译依赖、配置服务、处理版本冲突的泥潭里&am…

2026/8/25 3:38:23 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/24 20:22:44 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/25 10:31:12 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/24 11:20:22 阅读更多 →