feat(hjc-web): 标书详情支持公告正文富文本与公告附件下载

中标公告区域两块改动:

- 公告正文改按富文本渲染。一站式推的是富文本编辑器出的 HTML,原来当纯文本渲染
  (whitespace-pre-line),会把 <p>、&nbsp;、style="…" 原样显示在页面上。
  判定(HTML / 纯文本)、净化、纯文本换行抽到 app/utils/richText.ts,
  与 hjc-h5 的 src/utils/richText.js 同一套口径。
- 公告附件:渲染后端下发的 bulletinFiles(后端已解析成 {name,url} 并拼好完整
  下载地址,含 URL 编码),复用 HjcTenderFiles 组件。公告附件是公开资料
  (不判登录 / 资质 / 购买),与标书附件(付费内容、仅已支付订单下发)是两条线,
  所以这里不做权限判断。
- types/tender.ts:补 bulletinFiles 字段。

验证:npm run build 通过
This commit is contained in:
2026-09-18 08:48:40 +08:00
parent 2e847b5e09
commit a322b2eed4
3 changed files with 128 additions and 5 deletions
+11 -1
View File
@@ -21,8 +21,18 @@ export interface Tender {
bulletinTitle?: string
/** 公告正文 */
bulletinContent?: string
/** 公告附件(JSON字符串) */
/** 公告附件(JSON字符串,一站式推送的原始值) */
bulletinFileList?: string
/**
* 公告附件(后端解析好的可下载列表)。
*
* **门槛与 `tenderFiles` 不同**:公告附件是公开资料(公告正文本来就公开下发),
* 匿名也能拿到——不判登录、不判资质、不判购买;`tenderFiles`(标书附件)才是付费内容、
* 只在已支付订单上出现。
*
* **唯一没有的情况是项目已下架**:后端对 `status != 1` 的项目不下发本字段(前端不自己判)。
*/
bulletinFiles?: HjcTenderFile[] | null
/** 标书价格(信息服务费) */
tenderPrice?: number
/** 标书附件(JSON字符串) */