| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206 |
- // HR 本地存储:申请草稿、本地申请记录、审批结果缓存
- // 由 kd-aiot-frontend-hr-H5 的 src/utils/storage.ts 迁移而来(去掉演示模式数据)
- const APPLY_KEY = "aimill_hr_applications";
- const DRAFT_KEY = "aimill_hr_application_drafts";
- const APPROVAL_KEY = "aimill_hr_approval_results";
- const RESIGN_ID_KEY = "aimill_hr_my_resign_ids";
- const USER_CHANGE_ID_KEY = "aimill_hr_user_change_ids";
- const REGULARIZATION_ID_KEY = "aimill_hr_regularization_ids";
- const REGULARIZATION_BILL_KEY = "aimill_hr_regularization_bills";
- const ONBOARD_MATERIAL_KEY = "aimill_hr_onboard_materials";
- /** yyyy-MM-dd HH:mm */
- export function formatNow() {
- const d = new Date();
- const pad = (n) => String(n).padStart(2, "0");
- return `${d.getFullYear()}-${pad(d.getMonth() + 1)}-${pad(d.getDate())} ${pad(
- d.getHours()
- )}:${pad(d.getMinutes())}`;
- }
- /** 只保留 yyyy-MM-dd */
- export function dateOnly(value) {
- if (!value) return "";
- const m = String(value).match(/^(\d{4})[-/](\d{1,2})[-/](\d{1,2})/);
- if (!m) return String(value);
- const pad = (n) => String(n).padStart(2, "0");
- return `${m[1]}-${pad(m[2])}-${pad(m[3])}`;
- }
- // ============ 我的申请(本地记录) ============
- export function getApplications() {
- const saved = uni.getStorageSync(APPLY_KEY);
- return Array.isArray(saved) ? saved : [];
- }
- export function addApplication(item) {
- const list = getApplications();
- const source = item || {};
- // 调用方已传 id(服务端单据主键)则保留
- const id = source.id ? source.id : Date.now();
- const rest = Object.assign({}, source);
- delete rest.id;
- list.unshift(Object.assign({}, rest, { id, status: "审批中", createdAt: formatNow() }));
- uni.setStorageSync(APPLY_KEY, list);
- return list;
- }
- // ============ 申请草稿 ============
- export function saveDraft(type, form) {
- const drafts = uni.getStorageSync(DRAFT_KEY) || {};
- drafts[type] = Object.assign({}, form, { savedAt: formatNow() });
- uni.setStorageSync(DRAFT_KEY, drafts);
- }
- export function getDraft(type) {
- const drafts = uni.getStorageSync(DRAFT_KEY) || {};
- return drafts[type] || null;
- }
- export function removeDraft(type) {
- const drafts = uni.getStorageSync(DRAFT_KEY) || {};
- delete drafts[type];
- uni.setStorageSync(DRAFT_KEY, drafts);
- }
- // ============ 审批结果缓存 ============
- export function getApprovalResults() {
- const saved = uni.getStorageSync(APPROVAL_KEY);
- return saved && typeof saved === "object" ? saved : {};
- }
- export function setApprovalResult(id, status, comment) {
- const results = getApprovalResults();
- results[id] = { status, comment: comment || "", handledAt: formatNow() };
- uni.setStorageSync(APPROVAL_KEY, results);
- return results[id];
- }
- // ============ 我已提交的离职单主键(用于详情页回查) ============
- export function getMyResignIds() {
- const saved = uni.getStorageSync(RESIGN_ID_KEY);
- return Array.isArray(saved) ? saved.map(String).filter(Boolean) : [];
- }
- export function rememberResignId(id) {
- const text = id === null || id === undefined ? "" : String(id).trim();
- if (!text) return getMyResignIds();
- const next = [text, ...getMyResignIds().filter((item) => item !== text)].slice(0, 200);
- uni.setStorageSync(RESIGN_ID_KEY, next);
- return next;
- }
- // ============ 我已提交的人事异动单主键 ============
- export function getUserChangeIds() {
- const saved = uni.getStorageSync(USER_CHANGE_ID_KEY);
- return Array.isArray(saved) ? saved.map(String).filter(Boolean) : [];
- }
- export function rememberUserChangeId(id) {
- const text = id === null || id === undefined ? "" : String(id).trim();
- if (!text) return getUserChangeIds();
- const next = [text, ...getUserChangeIds().filter((item) => item !== text)].slice(0, 200);
- uni.setStorageSync(USER_CHANGE_ID_KEY, next);
- return next;
- }
- // ============ 试用期员工 → 转正单主键映射 ============
- export function loadRegularizationBillMap() {
- const saved = uni.getStorageSync(REGULARIZATION_BILL_KEY);
- return saved && typeof saved === "object" ? saved : {};
- }
- export function saveRegularizationBillId(userId, billId) {
- const key = userId === null || userId === undefined ? "" : String(userId).trim();
- if (!key || billId === null || billId === undefined || billId === "") {
- return loadRegularizationBillMap();
- }
- const map = loadRegularizationBillMap();
- map[key] = String(billId);
- uni.setStorageSync(REGULARIZATION_BILL_KEY, map);
- return map;
- }
- export function removeRegularizationBillId(userId) {
- const key = userId === null || userId === undefined ? "" : String(userId).trim();
- if (!key) return loadRegularizationBillMap();
- const map = loadRegularizationBillMap();
- if (key in map) delete map[key];
- uni.setStorageSync(REGULARIZATION_BILL_KEY, map);
- return map;
- }
- export function getRegularizationIds() {
- const saved = uni.getStorageSync(REGULARIZATION_ID_KEY);
- return Array.isArray(saved) ? saved.map(String).filter(Boolean) : [];
- }
- export function rememberRegularizationId(id) {
- const text = id === null || id === undefined ? "" : String(id).trim();
- if (!text) return getRegularizationIds();
- const next = [text, ...getRegularizationIds().filter((item) => item !== text)].slice(0, 200);
- uni.setStorageSync(REGULARIZATION_ID_KEY, next);
- return next;
- }
- // ============ 入职材料(按员工 id 分组,本地缓存已上传附件) ============
- function loadOnboardMaterialMap() {
- const saved = uni.getStorageSync(ONBOARD_MATERIAL_KEY);
- return saved && typeof saved === "object" ? saved : {};
- }
- function persistOnboardMaterialMap(map) {
- uni.setStorageSync(ONBOARD_MATERIAL_KEY, map);
- }
- export function getOnboardMaterials(employeeId) {
- const map = loadOnboardMaterialMap();
- const bucket = map[String(employeeId)];
- return bucket && typeof bucket === "object" ? bucket : {};
- }
- export function addOnboardMaterial(employeeId, materialKey, file) {
- const key = String(employeeId);
- const map = loadOnboardMaterialMap();
- const bucket = Object.assign({}, map[key] || {});
- const list = Array.isArray(bucket[materialKey]) ? bucket[materialKey].slice() : [];
- const id =
- (file && file.id != null && String(file.id)) ||
- `mat_${Date.now()}_${Math.random().toString(36).slice(2, 8)}`;
- list.push(
- Object.assign({}, file, {
- id,
- name: (file && file.name) || `材料_${list.length + 1}`,
- uploadedAt: formatNow(),
- })
- );
- bucket[materialKey] = list;
- map[key] = bucket;
- persistOnboardMaterialMap(map);
- return bucket;
- }
- export function removeOnboardMaterial(employeeId, materialKey, fileId) {
- const key = String(employeeId);
- const map = loadOnboardMaterialMap();
- const bucket = Object.assign({}, map[key] || {});
- const list = Array.isArray(bucket[materialKey]) ? bucket[materialKey] : [];
- bucket[materialKey] = list.filter((item) => String(item.id) !== String(fileId));
- map[key] = bucket;
- persistOnboardMaterialMap(map);
- return bucket;
- }
- export function renameOnboardMaterial(employeeId, materialKey, fileId, name) {
- const key = String(employeeId);
- const map = loadOnboardMaterialMap();
- const bucket = Object.assign({}, map[key] || {});
- const list = Array.isArray(bucket[materialKey]) ? bucket[materialKey] : [];
- bucket[materialKey] = list.map((item) =>
- String(item.id) === String(fileId) ? Object.assign({}, item, { name }) : item
- );
- map[key] = bucket;
- persistOnboardMaterialMap(map);
- return bucket;
- }
|