Files
xk-doctor-wx/subPackages/sub_image_transfer/common/processRuleCascade.js

145 lines
4.3 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.
/**
* 委托调剂三级级联(制剂 / 煎法 / 备注)
* 识图抽屉与传方详情共用,避免 pid / rule_id 分派逻辑复制两份
*/
import { unwrapXkApi } from '@/utils/api-response.js';
import { getProcessRuleList } from '@/api/reception.js';
/**
* 解包 process-rule-list 响应为数组
* 医生/诊所接口都走 jok,统一 unwrapXkApi;兼容偶发裸数组
*/
function unwrapRuleList(res) {
const { ok, payload } = unwrapXkApi(res);
if (ok && Array.isArray(payload)) return payload;
if (Array.isArray(payload)) return payload;
if (res && Array.isArray(res.result)) return res.result;
if (Array.isArray(res)) return res;
return [];
}
/**
* 按 pid / rule_id 拉一级列表并写回 target
* @param {Object} opts
* @param {Function} [opts.api] process-rule-list,默认医生 getProcessRuleList
* @param {number} [opts.pid=0] 父级 id;0 表示顶级制剂
* @param {number} [opts.ruleId=0] 有值时按 rule_id 拉备注列表
* @param {{processRuleList:Array,childProcessRuleList:Array,processRuleNoteList:Array}} opts.target 写回容器(通常是组件 this)
*/
export async function loadProcessRuleListInto(opts) {
const api = (opts && opts.api) || getProcessRuleList;
const pid = Number((opts && opts.pid) || 0);
const ruleId = Number((opts && opts.ruleId) || 0);
const target = (opts && opts.target) || {};
const data = ruleId === 0 ? { pid } : { rule_id: ruleId };
let list = [];
try {
const res = await api(data);
list = unwrapRuleList(res);
} catch (e) {
list = [];
throw e;
} finally {
if (ruleId !== 0) {
target.processRuleNoteList = list;
} else if (pid === 0) {
target.processRuleList = list;
} else {
target.childProcessRuleList = list;
}
}
return list;
}
/**
* 按 chineseConfig 中的 ID 依次拉齐三级列表(OCR / 详情回填后用)
* 为什么先拉顶级:子级接口依赖已选制剂 id,列表空时无法校验回填是否仍有效
* @param {Object} opts
* @param {Function} [opts.api]
* @param {{ruleType:number,processRuleId:*,childProcessRuleId:*}} opts.config
* @param {Object} opts.target
*/
export async function hydrateProcessRuleListsFromConfig(opts) {
const config = (opts && opts.config) || {};
const target = (opts && opts.target) || {};
const api = opts && opts.api;
if (Number(config.ruleType) !== 2) return;
if (!target.processRuleList || !target.processRuleList.length) {
await loadProcessRuleListInto({ api, pid: 0, ruleId: 0, target });
}
const prId = Number(config.processRuleId || 0);
if (prId > 0) {
await loadProcessRuleListInto({ api, pid: prId, ruleId: 0, target });
}
const childId = Number(config.childProcessRuleId || 0);
if (childId > 0) {
await loadProcessRuleListInto({ api, pid: 0, ruleId: childId, target });
}
}
/**
* 默认中药代煎配置:传方默认委托调剂(ruleType=2)
*/
export function defaultChineseConfig(overrides) {
return Object.assign(
{
ruleType: 2,
packageMethodId: null,
processRuleId: null,
childProcessRuleId: null,
processRuleNoteId: null,
dosage: 7,
dayDosage: 2,
},
overrides || {},
);
}
/**
* 传方代煎+用量必填校验(对齐开方 PrescriptionValidator)
* @param {Object} config chineseConfig
* @returns {{valid:boolean,keys:string[],message:string}}
*/
export function validateChineseConfigRequired(config) {
const cfg = config || {};
const keys = [];
const messages = [];
const ruleType = Number(cfg.ruleType || 0);
if (ruleType !== 1 && ruleType !== 2) {
keys.push('ruleType');
messages.push('请选择制剂方式');
}
if (ruleType === 1) {
if (!Number(cfg.packageMethodId)) {
keys.push('packageMethodId');
messages.push('请选择包法');
}
} else if (ruleType === 2) {
if (!Number(cfg.processRuleId)) {
keys.push('processRuleId');
messages.push('请选择制剂要求');
}
if (!Number(cfg.childProcessRuleId)) {
keys.push('childProcessRuleId');
messages.push('请选择煎法说明');
}
if (!Number(cfg.processRuleNoteId)) {
keys.push('processRuleNoteId');
messages.push('请选择附加备注');
}
}
if (!(Number(cfg.dosage) >= 1)) {
keys.push('dosage');
messages.push('请填写剂数');
}
if (!(Number(cfg.dayDosage) >= 1)) {
keys.push('dayDosage');
messages.push('请填写用药频次');
}
return {
valid: keys.length === 0,
keys,
message: messages[0] || '',
};
}