73 lines
4.7 KiB
Markdown
73 lines
4.7 KiB
Markdown
|
|
---
|
|||
|
|
name: 字段备注空格扩展
|
|||
|
|
overview: 在 hotime 的列注释解析中,除保留「首段为系统内 label」外,将「第一个空格之后、选项/花括号规则之前」的内容单独写入新字段(如 remark),供前端展示;并澄清:管理端若列来自已有配置或 JSON,可能未经过 DB 新列分支,故不会表现为「整段 label 被丢掉」。
|
|||
|
|
todos:
|
|||
|
|
- id: parse-makecode
|
|||
|
|
content: 在 makecode.go 中实现 SplitN + 空格拆分 + remark 字段,并统一 options/ps 解析顺序
|
|||
|
|
status: pending
|
|||
|
|
- id: ui-remark
|
|||
|
|
content: 在 myst-web Edit/Info 中展示 column.remark(可选样式)
|
|||
|
|
status: pending
|
|||
|
|
- id: docs-format
|
|||
|
|
content: 补充列注释格式说明文档
|
|||
|
|
status: pending
|
|||
|
|
isProject: false
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
# 表字段备注:空格后扩展备注(修正认知)
|
|||
|
|
|
|||
|
|
## 为何你能在管理端看到「完整」label
|
|||
|
|
|
|||
|
|
`[hotimev1.5/code/makecode.go](d:/work/hotimev1.5/code/makecode.go)` 中,**空格截断与 `:` 处理仅发生在 `if coloum == nil` 分支**(约 189–325 行),即:**仅当该列尚未在 `TableColumns` 中存在、完全由本次从库表结构推断新建列时**才会执行。
|
|||
|
|
|
|||
|
|
若列定义已来自 `[config/adminDB.json](d:/work/myst-go/config/adminDB.json)` 等已有配置,会走 `coloum != nil`,**不会执行**上述截断逻辑,管理端下发的 `column.label` 仍可能是你在 JSON 里写的整段字符串,因此**不会出现「整段在 UI 里被丢掉」的现象**。
|
|||
|
|
|
|||
|
|
你遇到的「断言/解析」问题更可能出在:**需要同时支持「系统内短 label」与「空格后的说明」两种语义**,而不是单纯丢失数据。
|
|||
|
|
|
|||
|
|
## 目标行为(约定)
|
|||
|
|
|
|||
|
|
对**数据库列注释**(以及与之对齐的生成逻辑)采用统一解析顺序,避免与现有 `:` 选项、`{...}` 的 `ps` 冲突:
|
|||
|
|
|
|||
|
|
1. 用 `**SplitN(raw, ":", 2)`** 拆出「主文案」与「选项串」(替代当前对整串 `strings.Split(..., ":")`,避免备注里出现冒号时误伤)。
|
|||
|
|
2. 在「主文案」中按 **第一个空格** 拆成:
|
|||
|
|
- **第一段**:`label`(系统内字段名/短标题,与现有一致)
|
|||
|
|
- **第二段及以后**(或仅第二段,按产品定):trim 后写入新字段,建议键名 `**remark`**(若你更倾向 `note` / `labelRemark` 可再定)
|
|||
|
|
3. `**{...}` → `ps`**:仍在**完整主文案或完整 raw** 上提取(与现有行为一致),避免破坏依赖 `ps` 的表单。
|
|||
|
|
4. **选项解析**:使用 `SplitN` 的第二段,保持 `1-男,2-女` 这类格式不变。
|
|||
|
|
|
|||
|
|
示例:`姓名 对外展示说明 :1-男,2-女` → `label=姓名`,`remark=对外展示说明`,options 从 `:1-男,2-女` 解析。
|
|||
|
|
|
|||
|
|
## 实现位置
|
|||
|
|
|
|||
|
|
|
|||
|
|
| 层级 | 文件 | 内容 |
|
|||
|
|
| --------- | ------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------- |
|
|||
|
|
| 后端 | `[hotimev1.5/code/makecode.go](d:/work/hotimev1.5/code/makecode.go)` | 重构 218–233 与 300–308 行附近逻辑:先 `:` 再空格,并设置 `coloum["remark"]`;无空格时行为与现有一致 |
|
|||
|
|
| 前端(可选但推荐) | `[myst-web/src/components/Edit.vue](d:/work/myst-web/src/components/Edit.vue)`、`[Info.vue](d:/work/myst-web/src/components/Info.vue)` | 在表单项标签旁或下方展示 `column.remark`(小字/灰色提示),无则不占位 |
|
|||
|
|
| 文档 | `[myst-go/docs/](d:/work/myst-go/docs/)` 或 QUICKSTART | 简短说明列注释格式:`label 备注 :选项` |
|
|||
|
|
|
|||
|
|
|
|||
|
|
依赖关系:`[myst-go/go.mod](d:/work/myst-go/go.mod)` 中 `replace code.hoteas.com/golang/hotime => ../hotimev1.5`,改 hotime 源码即可被 myst-go 使用。
|
|||
|
|
|
|||
|
|
## 兼容与回归
|
|||
|
|
|
|||
|
|
- **无空格**、仅 `label:选项`、仅 `{ps}`:行为与现网一致。
|
|||
|
|
- **adminDB.json 手工写的长 label**:若需同样拆分,可在后续加「对已有列合并 DB 注释时补写 remark」或提供一次性脚本;首版以 **Db2JSON 新列路径** 与 **重新生成/同步列** 为主。
|
|||
|
|
|
|||
|
|
## 流程示意
|
|||
|
|
|
|||
|
|
```mermaid
|
|||
|
|
flowchart LR
|
|||
|
|
raw[DB列注释raw]
|
|||
|
|
raw --> splitColon["SplitN 第一处冒号"]
|
|||
|
|
splitColon --> mainPart[主文案]
|
|||
|
|
splitColon --> optPart[选项串]
|
|||
|
|
main --> splitSpace["第一处空格"]
|
|||
|
|
splitSpace --> label[label]
|
|||
|
|
splitSpace --> remark[remark]
|
|||
|
|
raw --> psBrace["提取 ps 花括号"]
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
|
|||
|
|
|