This commit is contained in:
zlwu committed 2026-08-25 16:47:43 +08:00
1 parent d2290eb92c
commit a2d4d3b0d5
320 files changed
+125011 -26951

No files matched your search

@@ -0,0 +1,182 @@
# SOP 富文本制作标准(基于 SOP-CC-001-E01-01)
本文档沉淀自 `SOP-CC-001-E01-01`(存储样本接收操作记录)的落地过程,作为后续工艺 SOP 富文本的权威约定。新工艺按本标准执行,避免重复踩坑。
---
## 1. 架构与数据流
| 层级 | 路径 / 表 | 说明 |
|------|-----------|------|
| 模板源码 | `docs/sop-templates/{工艺编码}.html` | 权威 HTML;不进 Docker 镜像亦可,以仓库为准 |
| Logo 等静态资源 | `web-admin/public/sop-templates/` | 前端可访问,路径形如 `/sop-templates/xxx-logo.jpeg` |
| 工艺库 | `biz_process.sop_content` | 运行时 TinyMCE 内容(模板灌库后的快照) |
| 工艺路线步骤 | `biz_process_route_step.sop_content` | 从工艺库拷贝的快照;改工艺库**不会**自动同步 |
| 生产任务步骤 | `biz_production_task_step.sop_content` | 同上,执行期可再编辑 |
| 编辑 / 打印样式与交互 | `web-admin/src/utils/sop-print.ts` | 勾选、下划线、A4、打印嵌入图 |
| 编辑器组件 | `web-admin/src/components/TinyMceEditor/index.vue` | `show-print` 开启 SOP A4 模式 |
**字段 DDL**:`docs/sql/2026-08-25-biz-process-sop-content.sql`(三表 `LONGTEXT sop_content`)。
**快照原则**:路线 / 任务步骤的 `sop_content` 为拷贝。更新模板后须分别:
1. 更新 HTML 模板
2. 重新灌 `biz_process`(seed SQL)
3. 按需执行同步脚本,覆盖关联路线 / 任务步骤
参考:`docs/sql/2026-08-25-seed-sop-cc-001-content.sql`、`docs/sql/2026-08-25-sync-sop-cc-001-content-to-routes-tasks.sql`。
---
## 2. 版式规范(A4 竖版)
- 纸张:**210mm × 297mm**(A4 portrait)
- 外层容器:`class="sop-record sop-a4 sop-{业务短码}"`,建议 `height/min-height: 297mm`,`padding: 16mm 15mm 20mm`
- 字号:页眉主标题 / 编码行 **12pt(小四)**;正文 **10.5pt(五号)**
- 页眉主标题可加粗;**表格内标签不加粗**
- 标点统一英文半角:`:`, `,`, `;` 等
- 边框色:`#334155`;正文字色:`#1e293b`
- 列宽按 Word 原稿比例用 `<colgroup>` 固定;可用 `table-layout:fixed`
- 需要撑满剩余高度的操作区:行加 `sop-fill-row`,左标题 `sop-fill-label`,正文 `sop-fill-cell`
### 页眉三列(推荐结构)
1. Logo(居中)
2. 记录名称(居中、加粗、宋体系)
3. 两行:文件编码 / 版本号
Logo:`src="/sop-templates/{资源名}"`(站点根路径,勿用相对路径)。
---
## 3. 必备 CSS 类(勿随意改名)
样式与交互集中在 `sop-print.ts` 的 `SOP_SHARED_CONTENT_STYLE`。模板 HTML **只负责结构 + 类名**,复杂勾选/对齐逻辑不要另写一套。
| 类名 | 用途 |
|------|------|
| `sop-record sop-a4` | A4 外层 |
| `sop-header-table` | 页眉表 |
| `sop-body-table` | 正文表 |
| `sop-fill-row` / `sop-fill-label` / `sop-fill-cell` | 可撑高填写区;左侧标题上下居中 |
| `sop-option` | 选项整组(勾选框 + 文案),可点击 |
| `sop-check` | 勾选框本体 |
| `sop-check--checked` | 已勾选(编辑态视觉) |
| `data-sop-checked="1"` | 勾选态属性兜底(序列化 / 打印) |
| `sop-underline` | 下划线填写区,**左对齐** |
| `sop-blank-cell` | 空白填写单元格,**左对齐** |
| `sop-option-cell` / `sop-option-cell-wide` | 窄格内选项间距 |
---
## 4. 交互控件写法(标准片段)
### 4.1 勾选框(必须)
空 span 会被 TinyMCE 清掉,且内部 `&nbsp;` 会影响基线。统一写法:
```html
<span class="sop-option">
<span class="sop-check" contenteditable="false" data-mce-contenteditable="false">&nbsp;</span>选项文案
</span>
```
约定:
- 点击 `.sop-check` 或整组 `.sop-option` 切换勾选
- 勾选后同时有 class `sop-check--checked` 与属性 `data-sop-checked="1"`
- **不要**用原生 `<input type="checkbox">`(除非后续统一改造)
- 勾选框与文字:**底边对齐**(样式在 `sop-print.ts`,`top: -3px` 微调;新工艺勿再各写一套偏移)
### 4.2 下划线填写
```html
<span class="sop-underline" style="text-align:left; min-width:96px;">&nbsp;</span>
```
- 必须带 `sop-underline`
- 内联 `text-align:left`(防止默认居中)
- `min-width` 按栏位需要调整
### 4.3 空白单元格
```html
<td class="sop-blank-cell" style="border:1px solid #334155; padding:8px;">&nbsp;</td>
```
---
## 5. 前端接入约定
- 工艺库 / 路线配置 / 任务步骤:使用 `TinyMceEditor`,并加 **`show-print`**(开启 A4 `content_style`、勾选交互、打印按钮)
- 打印前:`editor.getContent()` 取实时 HTML(含勾选态),勿只信可能过期的 v-model
- 打印:`printSopHtml()` 会
- 规范化勾选 class / `data-sop-checked`
- 将图片 **fetch → base64 嵌入**(解决 blob 打印页 logo 丢失)
- 勾选打印样式:**白底黑勾**(不依赖浏览器「背景图形」)
- 编辑区高度:A4 约 1123px + `SOP_EDITOR_EXTRA_HEIGHT_PX`(当前 200)
---
## 6. 灌库与同步流程(每个新工艺)
1. **建模板**
- `docs/sop-templates/{process_code}.html`
- Logo → `web-admin/public/sop-templates/`
2. **生成 seed SQL**(示例命名)
- `docs/sql/YYYY-MM-DD-seed-{短码}-content.sql`
- `UPDATE biz_process SET sop_content = '...' WHERE process_code = '...' AND del_flag = 0`
- 单引号转义为 `''`;含 `%` 的样式用 mysql 客户端或**参数化脚本**执行,勿经 SQLAlchemy `text()` 直接跑(`%` 会被当占位符)
3. **同步快照(可选但生产常用)**
- 路线:`biz_process_route_step`,按 `process_code` 或 `process_id` + `tenant_no` + `del_flag=0`
- 任务:`biz_production_task_step`,按 `process_code` + `tenant_no`
- 注意:`biz_production_task_step` 与 `biz_process` 的 collation 可能不一致,JOIN 时需 `COLLATE utf8mb4_general_ci`(见 CC-001 同步脚本)
4. **验收清单**
- [ ] 工艺库编辑页:勾选可点、状态保存后重开仍在
- [ ] 下划线填写左对齐
- [ ] 勾选框底边与旁侧文字对齐
- [ ] 打印:勾选可见、顶部 logo 可见、无多余浏览器页眉页脚(打印对话框关闭「页眉和页脚」)
- [ ] 关联路线 / 任务步骤已有 `sop_content`(若业务需要)
---
## 7. 新工艺制作 Checklist(复制用)
```text
工艺编码: _______________
Word/原稿: SOP富文本文档/_______________
HTML: docs/sop-templates/{编码}.html
Logo: web-admin/public/sop-templates/_______________
Seed SQL: docs/sql/____-seed-____-content.sql
Sync SQL: docs/sql/____-sync-____-content-to-routes-tasks.sql(按需)
结构:
[ ] sop-record sop-a4 + 页眉三列表 + 正文表
[ ] 半角标点、五号正文 / 小四页眉
[ ] 勾选均用 sop-option + sop-check(contenteditable=false + &nbsp;)
[ ] 下划线均用 sop-underline + text-align:left
[ ] 空白格 sop-blank-cell
[ ] 撑高区 sop-fill-row / label / cell
前端:
[ ] 无需改 TinyMCE(沿用 show-print);仅新 logo 静态资源
数据:
[ ] 灌 biz_process
[ ] 同步 route_step / task_step(如需要)
[ ] 勾选 / 打印 / logo 人工验收通过
```
---
## 8. 参考样例
- 模板:`docs/sop-templates/SOP-CC-001-E01-01.html`
- 原稿:`SOP富文本文档/SOP-CC-001-E01-01 存储样本接收操作记录.docx`
- 样式与打印:`web-admin/src/utils/sop-print.ts`
- 启用打印的页面示例:工艺库、工艺路线配置、生产任务步骤详情
后续每做一个新编码,优先 **复制 CC-001 HTML 骨架 → 按 Word 改内容与列宽 → 灌库同步 → 按第 6/7 节验收**,不要另起交互与类名体系。