Files
threeonecheck_web/utils/draftCache.js

103 lines
2.6 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/** 草稿 Storage 命名空间(统一 key 前缀) */
export const DRAFT_NS = {
ASSIGN: 'draft_assign',
ACCEPT: 'draft_accept',
RECTIFY: 'draft_rectify',
INSPECTION_RESULT: 'draft_inspection_result',
INSPECTION_SHEET: 'draft_inspection_sheet'
};
/**
* 构建草稿 Storage key与迁移前页面逻辑一致保留空片段
* 例draft_rectify_100_ 、draft_accept_
* @param {string} namespace 命名空间,如 DRAFT_NS.ASSIGN
* @param {...string|number} parts 业务 id 片段
*/
export function buildDraftKey(namespace, ...parts) {
return [namespace, ...parts.map((p) => String(p ?? ''))].join('_');
}
/** 迁移期 compact key曾错误地 filter 掉空片段) */
export function buildDraftKeyCompact(namespace, ...parts) {
return [namespace, ...parts.map((p) => String(p ?? '')).filter(Boolean)].join('_');
}
/**
* 读取草稿,支持回退到其它 key迁移兼容
* @param {string} primaryKey
* @param {string[]} [fallbackKeys]
*/
export function loadDraftWithFallback(primaryKey, fallbackKeys = []) {
const primary = loadDraft(primaryKey);
if (primary) {
return { data: primary, key: primaryKey, fromFallback: false };
}
for (const fallbackKey of fallbackKeys) {
if (!fallbackKey || fallbackKey === primaryKey) continue;
const fallback = loadDraft(fallbackKey);
if (fallback) {
return { data: fallback, key: primaryKey, fromFallback: true, fallbackKey };
}
}
return { data: null, key: primaryKey, fromFallback: false };
}
/**
* 读取草稿
* @param {string} key
* @returns {Object|null}
*/
export function loadDraft(key) {
if (!key) return null;
const raw = uni.getStorageSync(key);
if (!raw) return null;
try {
return typeof raw === 'string' ? JSON.parse(raw) : raw;
} catch (error) {
console.error('[draftCache] 解析草稿失败:', key, error);
return null;
}
}
/**
* 写入草稿
* @param {string} key
* @param {Object} data
*/
export function saveDraftToStorage(key, data) {
if (!key) return;
uni.setStorageSync(
key,
JSON.stringify({
...data,
updatedAt: Date.now()
})
);
}
/**
* 删除草稿
* @param {string} key
*/
export function removeDraft(key) {
if (!key) return;
uni.removeStorageSync(key);
}
/** 默认payload 中任一字段有值即视为有内容(忽略 updatedAt */
export function defaultHasContent(payload) {
if (!payload || typeof payload !== 'object') return false;
return Object.entries(payload).some(([key, value]) => {
if (key === 'updatedAt') return false;
if (Array.isArray(value)) return value.length > 0;
if (value && typeof value === 'object') return Object.keys(value).length > 0;
return value !== '' && value != null;
});
}