| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091 |
- import {
- fetchUserDetail,
- getServerConfig,
- request,
- } from "@/utils/auth";
- import { getCurrentUser, getLoginUser, saveCurrentUser } from "@/utils/storage";
- function isServerMode() {
- return getServerConfig().mode === "server";
- }
- /**
- * 修改档案成功后,重新拉一次当前用户的 profile 接口,
- * 把最新数据落进 storage 并返回。
- * - demo 模式:不发起请求,直接返回当前缓存的 user
- * - 服务器模式:调 /main/users/{userId}/profile(鉴权由 request() 自动处理)
- */
- export async function refetchMyProfile() {
- if (!isServerMode()) return getCurrentUser();
- const login = getLoginUser() || {};
- const userId = login.userId || (getCurrentUser() || {}).id;
- if (!userId && userId !== 0) throw new Error("缺少用户ID,无法刷新档案");
- const vo = await fetchUserDetail(userId);
- if (vo) saveCurrentUser(vo);
- return vo;
- }
- /**
- * 把前端本地 bankCardList 映射成后端保存参数。
- * 后端 `accountName` 必填,但前端没有户名字段 → 退回到当前用户的姓名快照。
- */
- function mapBankCardList(list, fallbackAccountName) {
- if (!Array.isArray(list)) return undefined;
- return list.map((c) => ({
- cardNumber: String(c.cardNumber || "").trim(),
- openingBank: String(c.openingBank || "").trim(),
- accountName: String(c.accountName || fallbackAccountName || "").trim(),
- }));
- }
- /**
- * 新增 / 修改员工档案(用于「我的档案」修改手机号、婚姻、紧急联系人、银行卡)。
- * 后端约定:
- * - 未传 bankCardList:保持既有明细(接口侧兼容旧数据)
- * - 空数组:清空
- * - 非空数组:整单替换
- * - 首条明细自动投影到顶层 cardNumber / openingBank(兼容旧工资卡字段)
- *
- * ⚠️ 重要约束:调用方必须**显式**把 `bankCardList` 放在 payload 里才会一并保存。
- * 修改手机号 / 婚姻 / 紧急联系人时**不要**带 `bankCardList`,避免误传触发整单替换。
- *
- * @param {{
- * bankCardList?: Array<{ cardNumber: string, openingBank: string, accountName?: string }>,
- * phone?: string,
- * maritalStatus?: string,
- * secondLinkName?: string,
- * secondLinkPhone?: string,
- * secondLinkRelation?: string,
- * }} payload
- */
- export async function saveEmployee(payload = {}) {
- const user = getCurrentUser() || {};
- const raw = user.raw || user;
- const accountName =
- user.name || raw.userName || raw.name || raw.secondLinkName || "";
- // 用 delete 把 raw 里的 bankCardList / 顶层兼容 cardNumber / openingBank 删掉,
- // 避免修改其它字段时把旧的银行卡一并带上去(后端会按"非空整单替换"覆盖)
- const body = { ...raw };
- if ("phone" in payload) body.phone = payload.phone;
- if ("maritalStatus" in payload) body.maritalStatus = payload.maritalStatus;
- if ("secondLinkName" in payload) body.secondLinkName = payload.secondLinkName;
- if ("secondLinkPhone" in payload)
- body.secondLinkPhone = payload.secondLinkPhone;
- if ("secondLinkRelation" in payload)
- body.secondLinkRelation = payload.secondLinkRelation;
- if (Array.isArray(payload.bankCardList)) {
- body.bankCardList = mapBankCardList(payload.bankCardList, accountName);
- }
- if(Array.isArray(payload.positionList) && payload.positionList.length > 0) {
- body.positionList = payload.positionList;
- }
- if (!isServerMode()) {
- await new Promise((r) => setTimeout(r, 250));
- return { code: 0, data: body, message: "演示模式:本地保存" };
- }
- const path = `/main/user/saveNew`;
- const res = await request({ url: path, method: "POST", data: body });
- return res;
- }
|