From a9d97b150701e634bdb751eab277696abd136cca Mon Sep 17 00:00:00 2001
From: gaoluyang <2820782392@qq.com>
Date: 星期二, 16 六月 2026 14:39:47 +0800
Subject: [PATCH] 君歌app 1.依照web端功能修改

---
 src/pages/oa/_utils/userPickerUtils.js |   53 +++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 53 insertions(+), 0 deletions(-)

diff --git a/src/pages/oa/_utils/userPickerUtils.js b/src/pages/oa/_utils/userPickerUtils.js
new file mode 100644
index 0000000..d812ef1
--- /dev/null
+++ b/src/pages/oa/_utils/userPickerUtils.js
@@ -0,0 +1,53 @@
+/** 鐢ㄦ埛鍒楄〃瑙e寘 */
+export function unwrapUserList(res) {
+  if (Array.isArray(res)) return res;
+  if (Array.isArray(res?.data)) return res.data;
+  if (Array.isArray(res?.rows)) return res.rows;
+  return [];
+}
+
+export function isActiveUser(u) {
+  if (u?.delFlag === "2" || u?.delFlag === 2) return false;
+  if (u?.status == null) return true;
+  return String(u.status) === "0";
+}
+
+export function userSelectLabel(u) {
+  const nick = u?.nickName || "";
+  const name = u?.userName || "";
+  if (nick && name && nick !== name) return `${nick}锛�${name}锛塦;
+  return nick || name || `鐢ㄦ埛${u?.userId ?? u?.id ?? ""}`;
+}
+
+export function userSubLabel(u) {
+  const parts = [];
+  const code = u?.userName || u?.userCode || "";
+  if (code) parts.push(`宸ュ彿 ${code}`);
+  const dept = u?.dept?.deptName ?? u?.deptName ?? "";
+  if (dept) parts.push(dept);
+  return parts.join(" 路 ") || "";
+}
+
+const AVATAR_COLORS = ["#409EFF", "#67C23A", "#E6A23C", "#9B59B6", "#1ABC9C", "#F56C6C"];
+
+export function userAvatarColor(name) {
+  if (!name) return "#c0c4cc";
+  let h = 0;
+  for (let i = 0; i < name.length; i++) h = name.charCodeAt(i) + ((h << 5) - h);
+  return AVATAR_COLORS[Math.abs(h) % AVATAR_COLORS.length];
+}
+
+/** 鎸夊鍚�/宸ュ彿/ID 鎼滅储锛岀┖鍏抽敭瀛楁椂浼樺厛灞曠ず鍓� limit 鏉� */
+export function filterActiveUsers(list, keyword, limit = 80) {
+  const active = (list || []).filter(isActiveUser);
+  const q = (keyword || "").trim().toLowerCase();
+  if (!q) return active.slice(0, limit);
+  return active
+    .filter(u => {
+      const nick = (u.nickName || "").toLowerCase();
+      const name = (u.userName || "").toLowerCase();
+      const id = String(u.userId ?? u.id ?? "");
+      return nick.includes(q) || name.includes(q) || id.includes(q);
+    })
+    .slice(0, limit);
+}

--
Gitblit v1.9.3