/** * 「公告正文」富文本处理(hjc-web)。 * * **必须与 `hjc-h5/src/utils/richText.js` 保持一致**——两端是不同仓库、不同技术栈 * (Nuxt4 + TS / uni-app + JS),代码无法真正共享,只能靠"两处同一套判定"来对齐。 * 改这里的时候,另一边也要改。 * * 为什么需要它:一站式平台推来的公告正文(`content` → `bulletin_content`)是**富文本编辑器 * 出的 HTML**,后端原样落库(见 `HjcBizServiceImpl#upsertFromPush`),而标书详情页此前把它 * 当纯文本渲染(`whitespace-pre-line`)——页面上会直接露出 `

`、` `、`style="..."` * 这些标记。 * * 两条路都要留着: * - 是 HTML → 净化后交给 `RichText` 组件走 `v-html`; * - 不是 HTML(推送历史数据 / 后台手录)→ 按纯文本转义、换行转 `
`,保住改造前 * `whitespace-pre-line` 的观感,不让这次改动把纯文本那条路弄塌。 */ /** * 是否「看起来是 HTML」。 * * 判据只有一条:出现 `<字母…>` 这样的标签。纯文本里几乎不会自然出现它 * (正文写「工期 < 30 天」也不会命中——`<` 后面必须紧跟字母), * 所以不做更聪明的解析:正文格式只有「编辑器 HTML」和「纯文本」两种。 */ const HTML_TAG_RE = /<\/?[a-z][a-z0-9-]*(\s[^<>]*)?\/?>/i /** 整段丢掉的标签(连内容一起):能跑脚本、能引外部资源、能改整页样式的一律不留 */ const DROP_TAGS = ['script', 'style', 'iframe', 'frame', 'frameset', 'object', 'embed', 'link', 'meta', 'base', 'form'] /** 事件属性:`v-html` 不执行 `