docs: OA 人员选择弹窗对齐方案 C 的设计说明

明确以流程审批人/抄送人弹窗与 Demo 方案 C 为基线,仅改 OaPersonSelect 行内结构与副信息展示。

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
zlwuandCursor committed 2026-08-12 14:19:09 +08:00
1 parent 1b2896c877
commit d310da1523
1 file changed
+75
@@ -0,0 +1,75 @@
# OA 表单【人员】弹窗列表对齐方案 C
## 背景
发起审批表单中,自定义控件【人员】(`OaPersonSelect`)弹出的选择列表,与【审批流程】区域「选择审批人 / 选择抄送人」(`OaFlowPreview` 内弹窗)视觉不一致。权威对照:`docs/oa-start-picker-list-style-demo.html` **方案 C · 分割线行表**,以及已落地的流程弹窗样式。
## 目标
- 【人员】弹窗列表与流程弹窗列表视觉一致:方案 C。
- 行内文案:姓名 + 副信息(手机优先,否则工号)**同一行**。
## 非目标
- 不抽公共弹窗组件。
- 不改部门 / 岗位选择弹窗(除非其 CSS 已共享且无需改模板)。
- 不改 `OaFlowPreview` 流程弹窗行为或样式(以其为参照基线)。
## 设计
### 视觉(方案 C)
- 白底连续行;行间发丝分割线 `#f1f5f9`。
- 无圆角卡片间距;`padding: 12px 16px`。
- 选中:整行浅绿底 `var(--brand-green-soft, #ecfdf5)`;姓名色 `#15803d`。
- 左侧 checkbox / radio;勾选区与文案间距约 10px。
上述行外观已由 `mobile-oa-h5/src/styles/oa-form.css` 中 `.oa-pick__list` 落地;本次以**模板结构**对齐流程弹窗为主。
### 列表项结构
对齐 `OaFlowPreview` 弹窗:
```vue
<van-cell clickable @click="...">
<template #icon>
<van-checkbox|van-radio class="oa-pick__check" :name="..." @click.stop />
</template>
<template #title>
<span class="oa-pick__name">{{ 姓名 }}</span>
<span v-if="副信息" class="oa-pick__sub">{{ 副信息 }}</span>
</template>
</van-cell>
```
- 去掉 `:title` / `:label` 双行展示。
- 多选、单选两套列表均改。
### 数据与副信息
在 `loadUsers` 映射中:
- `label`:昵称 / 工号 / id(现有逻辑)。
- `sub`:有 `phoneNo` 用手机号,否则有 `userNo` 且与姓名不同时用工号,否则空。
- 搜索仍覆盖姓名、工号、id;若有手机号一并纳入过滤。
### 样式补充
在 `oa-form.css`(与现有 `.oa-pick__list` 同区)增加:
- `.oa-pick__name`:14px,主文字色。
- `.oa-pick__sub`:`margin-left: 8px`,12px,muted(对齐 `.oa-flow-picker__phone`)。
- 选中态:优先让 `.oa-pick__name` 变深绿(与流程弹窗一致);可保留对 `.van-cell__title` 的现有规则作为兜底。
## 验收
1. 打开含【人员】字段的发起审批表单,点开选择弹窗。
2. 列表为白底分割线行;选中后行底浅绿、姓名变深绿。
3. 姓名与副信息同一行;有手机显示手机,否则工号。
4. 与同页「选择审批人 / 抄送人」弹窗并排对比,行结构与方案 C 观感一致。
5. 多选 / 单选模式均正常勾选与确定回填。
## 涉及文件
- 修改:`mobile-oa-h5/src/oa/components/OaPersonSelect.vue`
- 修改:`mobile-oa-h5/src/styles/oa-form.css`(仅补充 name/sub 同行样式与选中态)