ykt-wxapp/utils/form-alias.js
2026-01-29 13:36:43 +08:00

67 lines
1.7 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.

export const GLOBAL_FIELD_ALIASES = {
// 内部信息 / HIS 相关字段可能后续改名:这里做最小兜底,保证“有值就能显示”
hisCardNo: ['hisOutpatientNo', 'hisClinicNo', 'hisCardNumber'],
idCard: ['idNo', 'idNumber'],
sex: ['gender'],
cardType: ['idType'],
};
function isEmpty(v) {
if (v === null || v === undefined) return true;
if (Array.isArray(v)) return v.length === 0;
if (typeof v === 'string') return v.trim() === '';
return false;
}
function buildAliasCandidates(items) {
const itemList = Array.isArray(items) ? items : [];
const map = {};
// 支持模板项自带别名aliasTitles / aliases
itemList.forEach((it) => {
const title = it?.title;
if (!title) return;
const aliases = Array.isArray(it?.aliasTitles)
? it.aliasTitles
: Array.isArray(it?.aliases)
? it.aliases
: [];
if (!aliases.length) return;
map[String(title)] = aliases.map((i) => String(i)).filter(Boolean);
});
return map;
}
function uniq(arr) {
const out = [];
const seen = new Set();
arr.forEach((i) => {
const v = String(i || '');
if (!v || seen.has(v)) return;
seen.add(v);
out.push(v);
});
return out;
}
export function createAliasedForm(form, items) {
const local = buildAliasCandidates(items);
return new Proxy(form || {}, {
get(target, prop) {
if (typeof prop !== 'string') return target[prop];
const direct = target[prop];
if (!isEmpty(direct)) return direct;
const candidates = uniq([...(local[prop] || []), ...(GLOBAL_FIELD_ALIASES[prop] || [])]);
for (const k of candidates) {
const v = target[k];
if (!isEmpty(v)) return v;
}
return direct;
},
});
}