🥁 谏鼓 KKLP-QA-04 · A/1 工作台 投诉台账 质量看板 系统配置 {{ me.name }} {{ r }} 退出
{{ err }}
{{ flash }}
⚠️ {{ w }}

系统配置

此页面仅系统管理员(ADMIN)可用
你当前的角色:{{ (me && me.roles || []).join('、') || '无' }}
人员与角色配置属于权限系统的元操作,若开放给其他角色, 任何人都能给自己加权限,职责分离就失效了。
如需调整人员配置,请联系系统管理员。
返回工作台

⚠️ 需要关注 这三类问题不会报错、不会弹窗 —— 只会静默卡单,所以必须主动看

加载中… 统计时点 {{ al.as_of }}
告警接口调用失败:{{ alErr }}
{{ al[k].label }}
{{ al[k].count }}{{ alUnit(k) }}
{{ al[k].hint }}
{{ alOpen === k ? '▲ 收起明细' : '▼ 点开看明细' }}
✅ 暂无需要关注的项 —— 没有无人接的待办、没有发不出去的通知、没有超期件
通知id单号类型收件人重试错误
{{ it.id }} {{ nz(it.biz_no, '#' + it.complaint_id) }} {{ it.notify_type }} {{ nz(it.receiver, '(空)') }} {{ it.retry_count }} {{ nz(it.err_msg) }}
单号节点当前办理人角色时限
{{ nz(it.biz_no, '#' + it.complaint_id) }} {{ nz(it.node_name, it.node_code) }} {{ nz(it.assignee, '(未派出)') }} {{ nz(it.assignee_role) }} {{ nz(it.overdue_text, '无 SLA') }}
共 {{ al[alOpen].count }} 件,仅列最近 {{ al.limit_per_item }} 件。 超过这个量就不是逐条处理能解决的问题了,先查派单规则。

待开通申请 扫码被拒的人会留在这里 —— 角色必须你逐个勾选,系统不做任何猜测

待处理 {{ apPending }} 人 加载中…
申请列表加载失败:{{ apErr }}
当前没有待开通申请
{{ nz(a.name, a.userid) }} {{ a.userid }} {{ nz(a.dept, '—') }} {{ nz(a.mobile_masked, '—') }} {{ apStatusText(a.status) }}
申请于 {{ a.last_apply_at }}
上面的姓名/部门/职位来自企业微信通讯录,只是**判断此人是谁**的参考, 不代表他该有什么权限 —— 角色请按实际岗位职责勾选。

任务转派 待办按「指派给谁」严格归属 —— 处理人离职或调岗时,必须在这里把他名下未办任务转给同角色同事

加载中…
{{ rsErr }}
{{ rsData.source.name }} 名下没有未办任务
{{ rsData.note }}
{{ rsData.source.name }}({{ rsData.source.roles.join('/') || '无角色' }} · {{ rsData.source.channels.join('、') || '不限渠道' }}) 名下 {{ rsData.total }} 个未办任务。{{ rsData.note }}
单号环节客户渠道时限
{{ t.complaint_no }} {{ t.node_name || t.node_code }} {{ t.assignee_role }} {{ t.customer || '—' }} {{ t.channel_type || '—' }} {{ t.due_at || '无时限' }}{{ t.overdue ? ' · 已逾期' : '' }}
约束:目标必须持有该环节所需角色;销售还需渠道匹配 —— 否则他打不开单,转了照样卡死。 转派只换处理人,不推进流程节点、不发通知。整批要么全成功要么全不动。
S5 整改跟踪的归属不在「指派给谁」上,而在每条措施的负责人(capa_action.owner)上, 所以左边那半页查不到、也转不了。负责人离职后措施无人可接,单据会永久卡在整改跟踪、关不掉 —— 用这里转。
加载中…
{{ caErr }}
{{ caFrom ? '该负责人名下没有未完成的整改措施' : '当前没有未完成的整改措施' }}
{{ caData.note }}
共 {{ caData.total }} 条未完成措施。{{ caData.note }}
单号措施内容现负责人 计划完成进度
{{ a.complaint_no }}
第 {{ a.seq_no }} 条
{{ a.action_desc }} {{ a.owner_name || a.owner }} 已停用 {{ a.plan_finish_date || '未定' }}{{ a.overdue ? ' · 已超期' : '' }} {{ a.progress_pct }}% {{ a.status }}
约束:新负责人必须在职且已配角色;已完成的措施不允许更换负责人(质量记录完整性,需纠正请新增措施)。 只换人,不改措施内容/计划日期/已有进度,不推进流程节点、不发通知。整批要么全成功要么全不动。

配置体检 上线前必须跑一次 —— 权限配置的错误不会报错,只会静默失效

{{ hc.summary }} 体检中…
体检接口调用失败:{{ hcErr }}
✅ 未发现配置问题,人员与角色配置完整
  • {{ p.level === 'ERROR' ? '阻断上线' : '建议修正' }} {{ p.item }}
    影响:{{ p.impact }}
处理办法:下表中带 测试假数据 标记的 {{ fakeCount }} 个账号,请逐个「编辑」改成康凯来真实人员的 企微 userid、姓名与手机号;确认不再需要的直接「停用」。

人员与角色配置 身份由企业微信证明(userid),角色由这里配置 —— 企微只告诉我们「他是谁」,不告诉我们「他能办什么」

新增人员 编辑人员:{{ f.userid }} 按 userid 覆盖保存
userid 必须与企业微信中的完全一致(大小写敏感),否则该员工用企微登录后匹配不到人。
康凯来现状:质量部负责人与质量工程师是同一个人兼任, 这种情况把 QA 和 QA_MGR 两项都勾上即可 —— 系统按「谁有这个角色」判断能否办理,一人挂多角色是正常配置。
一个都不勾 = 不限渠道,可见全部渠道的投诉单。 通常只有销售需要按渠道分工;质量部/生产/技术/总经办要统筹全公司,应当留空。
{{ formErr }}
userid 与姓名必填,且至少勾选一个角色
批量编辑已选 {{ buSel.length }} 人 只改你显式指定的字段 取消全部勾选
选中:{{ buSelNames }}
与单人「编辑」不同:这里只改你选了「修改为」的那几项, 保持「不修改」的字段一律原样不动(不会被清空)。
⚠️ 覆盖为空 = 清空渠道范围,语义是不限渠道(能看全部), 不是「没有权限」。若只是不想动渠道,请选「不修改渠道」。
⚠️ 勾选里包含当前登录的自己,停用后无人能进后台 —— 请先取消勾选自己。
还没指定任何要改的字段 将修改:{{ buTouched.join('、') }}
{{ buErr }}
共选 {{ buResult.total }} 人;已修改 {{ (buResult.updated || []).length }} 人, 无变化 {{ (buResult.skipped || []).length }} 人。
人员实际变更
{{ it.name || it.userid }}
{{ it.userid }}
{{ ch }}
无变化(各字段已是目标值): {{ buResult.skipped.map(s => s.name || s.userid).join('、') }}
{{ w }}
加载中…
企微 userid 姓名 / 部门 岗位 / 手机 角色 负责渠道 状态 操作
{{ nz(u.userid) }} 当前登录 演示账号 测试假数据 {{ nz(u.name) }}
{{ nz(u.dept, '未填部门') }}
{{ nz(u.position) }}
{{ nz(u.mobile, '未填手机') }}
{{ roleName(rc) }} 未配角色
不限渠道 {{ chName(c) }} 启用 已停用
共 {{ total }} 人{{ q.include_disabled ? '(含已停用)' : '(仅启用;勾选「含已停用人员」可看全部)' }}。
本系统只停用、不删除人员:投诉单、审计日志、整改措施里都记着 userid, 删人会让历史记录指向一个不存在的人。医疗器械质量记录须保存 5 年以上且必须可追溯, 「谁办的」这个信息不能因为人离职就消失。停用后该账号立即无法登录,但历史记录完整保留。

📚 字典管理 失效部件是质管做总分类的统计维度 —— 语义重复项会把统计打碎, 所以这里能改名、能排序、能停用、能归并,但不能删

加载中… 共 {{ dc.total }} 条 / {{ dc.groups.length }} 类
{{ dcErr }}
{{ dcFlash }}
{{ dcGroup.readonly_hint }}
原因:{{ dcGroup.hint }}。
改这类字典不会报错 —— 界面显示保存成功,实际流程条件从此 永远不命中,库里没有任何错误记录。这比报 500 危险得多,所以本页直接锁死。
此类字典代码零引用,仅允许改显示名与排序,不做新增/停用/归并。 (老吴 2026-08-12:通用部分可展示,最多改显示名)
✅ 可维护类:{{ dcGroup.hint }}。 编码(item_code)新增时填一次,之后永久不可改 —— 单据里存的是编码,改编码等于静默篡改所有历史单据的语义。 要纠正命名请改「显示名」,历史单据一个字都不受影响。
编码显示名排序状态 引用来源操作
{{ it.item_code }} {{ it.item_name }} 兜底 {{ it.sort_no }} {{ it.status === 1 ? '启用' : '已停用' }} {{ it.ref_count }} 张单 0 — ⚠️ {{ it.custom_hint }} 系统预置 🔒 只读
编码格式:大写字母开头,仅含大写字母/数字/下划线,长度 2~64 (例 CARBON_SHEET_EDGE)。
为什么强制这个形状:现有字典与代码里的硬编码比对全是这个形状, 允许小写或中文会让日后 grep 代码引用变得不可靠 —— 而「能 grep 出所有引用」是判断某类字典能不能改的唯一手段。

🔀 归并「{{ dcMergeSrc.item_name }}」

把源项并入目标项:历史单据里的值会被改成目标项, 源项随后停用(不删除)。
原值会逐单记入审计日志(DICT_MERGE)—— 外审会问「这张 2026 年的单当年判的是什么部件」,记不到单号级别 就是不可追溯的记录篡改。
并入 →
「{{ dcRefs.item.item_name }}」被 {{ dcRefs.count }} 张单引用。 {{ dcRefs.note }} 收起
单号表字段
{{ r.complaint_no || ('#' + r.complaint_id) }} {{ r.table }} {{ r.column }}
本面板只停用、不删除字典项:历史单据里存的是编码, 删掉字典项会让那些单的值变成孤儿 —— 界面显示空白,外审问「当年判的什么」 谁也答不上来。停用能同时满足两边:新单下拉选不到,历史单照常显示。
补录入口已收窄(2026-08-12):S4/S6 当场补录新失效部件 现在仅限质量部(QA / QA_MGR)。其他角色会看到提示: 先选「其它部件」并在补充说明里写实际部件名,质量部复核时正式录入字典。