From 05003d30534d831747a6dbaf28bf40f78293722d Mon Sep 17 00:00:00 2001 From: duxingchen Date: Mon, 10 Aug 2026 17:37:16 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=85=A8=E5=B1=80=E4=BA=BA=E5=90=8D?= =?UTF-8?q?=E6=98=A0=E5=B0=84=E5=B7=A5=E5=85=B7=20=E2=80=94=20=E6=8B=BC?= =?UTF-8?q?=E9=9F=B3=20ID=20=E2=86=92=20=E4=B8=AD=E6=96=87=E5=A7=93?= =?UTF-8?q?=E5=90=8D=E8=BD=AC=E6=8D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - formatUserName(userId): 查全局字典翻译为中文名,降级返回原 ID - formatUserAvatar(userId): 中文名取末字作为头像文字 - setUserNameMap(users): 批量注册用户字典 --- track-uniapp/src/utils/format.js | 55 ++++++++++++++++++++++++++++++++ 1 file changed, 55 insertions(+) create mode 100644 track-uniapp/src/utils/format.js diff --git a/track-uniapp/src/utils/format.js b/track-uniapp/src/utils/format.js new file mode 100644 index 0000000..c585e6d --- /dev/null +++ b/track-uniapp/src/utils/format.js @@ -0,0 +1,55 @@ +/** + * 全局人名映射工具 + * + * 使用方式: + * 1. 在页面 loadUsers() 后调用 setUserNameMap(userList) 填充字典 + * 2. 模板中直接 `{{ formatUserName(task.assignee_id) }}` + * 3. 头像中 `{{ formatUserAvatar(msg.operator_id) }}` 取中文名末字 + */ + +// 全局用户名 → 中文姓名 映射表 +const userNameMap = {}; + +/** + * 批量设置用户名映射 + * @param {Array} users - 用户列表,每项需含 username 和 full_name + */ +export function setUserNameMap(users) { + if (!users || !users.length) return; + for (const u of users) { + const id = u.username || u.id || ''; + const name = u.full_name || u.name || u.real_name || ''; + if (id && name) { + userNameMap[id] = name; + } + } +} + +/** + * 将用户 ID 翻译为中文姓名 + * @param {string} userId - 用户标识(username 或 id) + * @returns {string} 中文姓名,查不到则降级返回原 ID + */ +export function formatUserName(userId) { + if (!userId) return '—'; + // 特殊值原样返回 + if (userId === 'virtual_warehouse') return '🏭 仓库'; + const name = userNameMap[userId]; + return name || userId; +} + +/** + * 获取用户头像文字(中文名取末字,拼音名取首字母) + * @param {string} userId - 用户标识 + * @returns {string} 单字头像文字 + */ +export function formatUserAvatar(userId) { + if (!userId) return '?'; + const name = userNameMap[userId]; + if (name) { + // 中文名取最后一个字 + return name.charAt(name.length - 1); + } + // 降级:取 ID 首字母大写 + return userId.charAt(0).toUpperCase(); +}