| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778 |
- /**
- * 当前登录用户所属机构 / 部门(2026-11-03 按用户口述校准):
- * - 「所属机构」唯一来源:登录缓存 userInfo.orgVO,形如 { id, name, code, type };
- * - 「所属部门」来源:loginChangeGroupVOList(groupType=30 的部门列表),
- * 其中 isMainGroup == 1 的那条为主所属部门。
- *
- * 历史口径错误:早期把 loginChangeGroupVOList 当成「所属机构」候选,
- * 于是「研发部」被当成所属机构显示在调岗申请 / 入职登记 / 档案编辑三处。
- */
- import { pickLegalEntities } from "@/utils/hr/organization-tree";
- /** 登录缓存的业务字段层(兼容 { raw: {...} } 包装的历史写法) */
- function cacheSource() {
- const info = uni.getStorageSync("userInfo") || {};
- return info.raw && typeof info.raw === "object" ? info.raw : info;
- }
- /**
- * 所属机构:登录缓存 orgVO → { id, name }。
- * 接口未返回 orgVO 时返回 null,由调用方如实提示,不拿部门或组织树顶替。
- */
- export function getCurrentOrg() {
- const org = cacheSource().orgVO;
- if (!org || org.id == null || org.id === "") return null;
- return { id: String(org.id), name: org.name || "" };
- }
- /** 所属机构 id(无 orgVO 时 null) */
- export function getCurrentOrgId() {
- const org = getCurrentOrg();
- return org ? org.id : null;
- }
- /**
- * 登录缓存里的部门列表 loginChangeGroupVOList → [{ id, name, isMainGroup }]。
- * 注意:这是「部门」列表(groupType=30),不是机构列表;isMainGroup==1 是主所属部门。
- */
- export function getLoginGroupOptions() {
- const list = cacheSource().loginChangeGroupVOList;
- return (Array.isArray(list) ? list : [])
- .filter((item) => item && item.groupId != null && item.groupId !== "")
- .map((item) => ({
- id: String(item.groupId),
- name: item.groupName || "",
- isMainGroup: Number(item.isMainGroup) === 1,
- }));
- }
- /** 主所属部门(isMainGroup == 1);缓存里没有该标识时返回 null,不猜第一条 */
- export function getMainDept() {
- return getLoginGroupOptions().find((item) => item.isMainGroup) || null;
- }
- /**
- * 「所属机构」下拉选项:唯一主源是登录缓存 orgVO(普通账号只属于自己的公司)。
- * orgVO 缺名称时按 id 从组织树补名(只补名称,不扩大候选范围);
- * currentId 不在候选里时(看他人档案 / 历史单据)补一条,保证原值能显示、能保存。
- * @param {Array} orgList 组织树全量列表(仅用于补名称,可传空)
- * @param {string|number} currentId 当前编辑中的机构 id
- * @param {string} currentName 当前编辑中的机构名称
- * @returns {Array<{id:string, name:string}>}
- */
- export function getOrgOptionsWithFallback(orgList = [], currentId = "", currentName = "") {
- const tree = Array.isArray(orgList) ? orgList : [];
- const nameFromTree = (id) => {
- const hit = pickLegalEntities(tree).find((item) => String(item.id) === String(id));
- return hit ? hit.name || "" : "";
- };
- const org = getCurrentOrg();
- let list = org ? [{ id: org.id, name: org.name || nameFromTree(org.id) }] : [];
- const id = currentId == null || currentId === "" ? "" : String(currentId);
- if (id && !list.some((item) => String(item.id) === id)) {
- list = [{ id, name: nameFromTree(id) || currentName || "" }].concat(list);
- }
- return list;
- }
|