|
|
@@ -1099,20 +1099,245 @@ export default {
|
|
|
},
|
|
|
|
|
|
/* ============ 保存 ============ */
|
|
|
+ // 仅组装保存数据(参考 docs/文档.md),不走接口保存
|
|
|
saveAll() {
|
|
|
- // 药品:已确认对象
|
|
|
- Object.keys(this.medObjMap).forEach((k) => {
|
|
|
- this.addInfo(this.medObjMap[k]);
|
|
|
+ const patientData = Cache.get('patientData');
|
|
|
+ const userData = Cache.get('userData');
|
|
|
+ const { admID } = patientData;
|
|
|
+ const { userID, locID, hospID, groupID } = userData;
|
|
|
+
|
|
|
+ // ============ 1. 西药(03100050) ============
|
|
|
+ const westOrders = [];
|
|
|
+ Object.keys(this.medObjMap).forEach((k, index) => {
|
|
|
+ const item = this.medObjMap[k] || {};
|
|
|
+ westOrders.push({
|
|
|
+ ordSeqNo: item.xh || '', // 序号
|
|
|
+ ordLinkSeqNo: '', // 关联序号
|
|
|
+ ordDate: '', // 开医嘱日期
|
|
|
+ ordTime: '', // 开医嘱时间
|
|
|
+ ordStartDate: '', // 医嘱开始日期
|
|
|
+ ordStartTime: '', // 医嘱开始时间
|
|
|
+ ordEndDate: '', // 医嘱结束日期
|
|
|
+ ordEndTime: '', // 医嘱结束时间
|
|
|
+ ordPriorityID: item.ordPriorityID || '', // 医嘱优先级10
|
|
|
+ ordAdmReasonID: this.listId('selectData1', 'picakIndex1', 'id'), // 结算类型
|
|
|
+ medID: item.medID || '', // 医嘱项id
|
|
|
+ ordFirstDayNum: '', // 首日次数
|
|
|
+ ordUsageID: this.listId('selectData3', 'picakIndex3', 'id'), // 药品用法
|
|
|
+ ordFreqID: this.listId('selectData2', 'picakIndex2', 'id'), // 频次
|
|
|
+ ordDose: item.dose || '', // 剂量
|
|
|
+ ordDoseUnitID: this.listId('selectData4', 'picakIndex4', 'doseUnitID'), // 剂量单位
|
|
|
+ ordQty: item.qty || item.stepper2 || '', // 数量
|
|
|
+ ordQtyUomID: this.listId('selectData5', 'picakIndex5', 'unitID'), // 数量单位
|
|
|
+ ordDurQty: item.stepper || '', // 疗程数量
|
|
|
+ ordDurationID: this.listId('courseUnitList', 'picakIndex9', 'id') || item.ordDurationID || '', // 疗程单位
|
|
|
+ ordInfuseSpeed: '', // 滴速
|
|
|
+ ordSpeedUnitID: '', // 滴速单位
|
|
|
+ ordStage: '', // 医嘱阶段
|
|
|
+ ordRecLocID: this.listId('selectData8', 'picakIndex8', 'recLocID'), // 接收科室
|
|
|
+ ordOPer: '', // 手术id
|
|
|
+ ordEMFlag: '', // 加急标志
|
|
|
+ ordPriorityExtID: '', // 二级医嘱优先级
|
|
|
+ ordNote: item.remark || '', // 备注
|
|
|
+ orderResourceCode: '', // 医嘱来源代码
|
|
|
+ ordSeqNo: index,
|
|
|
+ ordTypeCode: 'M', // 医嘱类型 M=西药
|
|
|
+ extvalue: [ // 诊断信息(03100050 通过 extvalue 传递)
|
|
|
+ {
|
|
|
+ code: 'Diag',
|
|
|
+ refDescripts: (this.diagData && this.diagData.diagCode) || '',
|
|
|
+ value: (this.diagData && this.diagData.id) || ''
|
|
|
+ }
|
|
|
+ ]
|
|
|
+ });
|
|
|
+ });
|
|
|
+ // ============ 2. 检验检查治疗:先 03050020 获取默认数据,再按 03050001 组装 ============
|
|
|
+ const selectedKeys = Object.keys(this.selectedMap);
|
|
|
+ if (selectedKeys.length === 0) {
|
|
|
+ // 仅西药:直接提交
|
|
|
+ this.submitMixedOrders(westOrders, [], [], [], admID, locID, userID, hospID, groupID);
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ const queryOrders = selectedKeys.map((k) => {
|
|
|
+ const it = this.selectedMap[k] || {};
|
|
|
+ return { medID: it.medID || '', ordSetID: '' };
|
|
|
+ });
|
|
|
+ $http.post('urlDeault', this, {
|
|
|
+ code: '03050020',
|
|
|
+ data: {
|
|
|
+ params: [{
|
|
|
+ admID: admID || '',
|
|
|
+ orders: queryOrders
|
|
|
+ }]
|
|
|
+ },
|
|
|
+ success: (res) => {
|
|
|
+ if (res.errorCode === '0') {
|
|
|
+ const dataList = res.data || [];
|
|
|
+ // medID -> defaultData 映射,便于按选中顺序构造 orders
|
|
|
+ const defaultMap = {};
|
|
|
+ dataList.forEach((d) => {
|
|
|
+ if (d && d.defaultData && d.defaultData.medID) {
|
|
|
+ defaultMap[d.defaultData.medID] = d.defaultData;
|
|
|
+ }
|
|
|
+ });
|
|
|
+ const { checkOrders, lisOrders, treatOrders } = this.buildCheckTreatOrders(
|
|
|
+ selectedKeys,
|
|
|
+ defaultMap,
|
|
|
+ locID
|
|
|
+ );
|
|
|
+ this.submitMixedOrders(
|
|
|
+ westOrders,
|
|
|
+ checkOrders,
|
|
|
+ lisOrders,
|
|
|
+ treatOrders,
|
|
|
+ admID,
|
|
|
+ locID,
|
|
|
+ userID,
|
|
|
+ hospID,
|
|
|
+ groupID
|
|
|
+ );
|
|
|
+ } else {
|
|
|
+ uni.showToast({ title: res.errorMessage || '获取医嘱默认数据失败', icon: 'none' });
|
|
|
+ }
|
|
|
+ },
|
|
|
+ fail: () => {
|
|
|
+ uni.showToast({ title: '获取医嘱默认数据失败', icon: 'none' });
|
|
|
+ }
|
|
|
+ });
|
|
|
+ },
|
|
|
+ // 按 03050001 组装检验检查治疗订单,并按 ordTypeCode 拆分为 check/lis/treat
|
|
|
+ // mainCode: E=检查 L=检验 O=治疗 -> ordTypeCode: C / L / T
|
|
|
+ buildCheckTreatOrders(keys, defaultMap, locID) {
|
|
|
+ const typeMap = { E: 'C', L: 'L', O: 'T' };
|
|
|
+ const checkOrders = [];
|
|
|
+ const lisOrders = [];
|
|
|
+ const treatOrders = [];
|
|
|
+ keys.forEach((k, index) => {
|
|
|
+ const item = this.selectedMap[k] || {};
|
|
|
+ const mainCode = item.mainCode || item.orderTypeCode || '';
|
|
|
+ const ordTypeCode = typeMap[mainCode] || 'T';
|
|
|
+ const isTreat = mainCode === 'O';
|
|
|
+ const isExamination = mainCode === 'E';
|
|
|
+ // 03050020 返回的该医嘱默认数据
|
|
|
+ const def = defaultMap[item.medID] || {};
|
|
|
+ const order = {
|
|
|
+ ordMedItemDesc: item.medDesc || item.descripts || '',
|
|
|
+ medID: item.medID || '',
|
|
|
+ ordPrice: def.ordPrice || 0,
|
|
|
+ ordQty: isTreat ? (this.treatQtyMap[k] || item.qty || 1) : (def.ordQty || 1),
|
|
|
+ ordDose: def.ordDose || 1,
|
|
|
+ ordDate: '',
|
|
|
+ ordTime: '',
|
|
|
+ ordStartDate: '',
|
|
|
+ ordStartTime: '',
|
|
|
+ ordSpecID: def.ordSpecID || '',
|
|
|
+ ordEMFlag: def.ordEMFlag || '',
|
|
|
+ ordPriorityID: def.ordPriorityID || '10',
|
|
|
+ ordAdmReasonID: def.ordAdmReasonID || '1',
|
|
|
+ tabIndex: index + 1,
|
|
|
+ ordRecLocID: def.ordRecLocID || locID || '',
|
|
|
+ ordQtyUomID: def.ordQtyUomID || '',
|
|
|
+ ordSeqNo: index,
|
|
|
+ appOrderID: item.appOrderID || '',
|
|
|
+ ordTypeCode: ordTypeCode,
|
|
|
+ extvalue: [
|
|
|
+ {
|
|
|
+ code: 'Diag',
|
|
|
+ value: (this.diagData && this.diagData.id) || '',
|
|
|
+ refDescripts: (this.diagData && this.diagData.diagCode) || ''
|
|
|
+ },
|
|
|
+ { code: 'RegDate', value: '', refDescripts: '预约执行日期' }
|
|
|
+ ]
|
|
|
+ };
|
|
|
+ if (isExamination) {
|
|
|
+ // 仅检查(ordTypeCode='C')需要 bodyPart 三层结构:
|
|
|
+ // orders.ordbodyPart=[null] -> bodyPart[].bodyPart[].bodyPart=[]
|
|
|
+ order.ordbodyPart = [null];
|
|
|
+ }
|
|
|
+ if (mainCode === 'E') checkOrders.push(order);
|
|
|
+ else if (mainCode === 'L') lisOrders.push(order);
|
|
|
+ else treatOrders.push(order);
|
|
|
+ });
|
|
|
+ return { checkOrders, lisOrders, treatOrders };
|
|
|
+ },
|
|
|
+ // 组装统一提交参数并调用 12100054 混合医嘱保存,成功后跳转医嘱录入页
|
|
|
+ submitMixedOrders(westOrders, checkOrders, lisOrders, treatOrders, admID, locID, userID, hospID, groupID) {
|
|
|
+ // 参考 inspectionExamine.vue(03050001):检查(E)按 tabIndex 分组生成 appMessage.bodyPart,
|
|
|
+ // 每项 { bodyPart:[...], tabIndex };检验(L)/治疗(T)不参与分组
|
|
|
+ const bodyPartGroup = {};
|
|
|
+ checkOrders.forEach((order) => {
|
|
|
+ const tabIndex = order.tabIndex;
|
|
|
+ if (!bodyPartGroup[tabIndex]) {
|
|
|
+ bodyPartGroup[tabIndex] = [];
|
|
|
+ }
|
|
|
+ (order.ordbodyPart || []).forEach((part) => {
|
|
|
+ bodyPartGroup[tabIndex].push({ bodyPart: part == null ? [] : part });
|
|
|
+ });
|
|
|
});
|
|
|
- // 检验检查/治疗
|
|
|
- Object.keys(this.selectedMap).forEach((k) => {
|
|
|
- const it = this.selectedMap[k];
|
|
|
- const qty = this.treatQtyMap[k] || 1;
|
|
|
- this.addInfo(this.buildCheckObj(it, qty));
|
|
|
+ const bodyPartArr = Object.keys(bodyPartGroup).map((tabIndex) => ({
|
|
|
+ bodyPart: bodyPartGroup[tabIndex],
|
|
|
+ tabIndex: Number(tabIndex)
|
|
|
+ }));
|
|
|
+ const appMessage = {
|
|
|
+ appPurpose: '',
|
|
|
+ HPIllness: '',
|
|
|
+ sign: '',
|
|
|
+ chiefComplaint: '',
|
|
|
+ // 检查项目参与 bodyPart 分组;无检查项时传空数组
|
|
|
+ bodyPart: bodyPartArr.length > 0 ? bodyPartArr : []
|
|
|
+ };
|
|
|
+ const saveData = {
|
|
|
+ admID: admID || '', // 就诊id
|
|
|
+ locID: locID || '', // 开单科室
|
|
|
+ docID: userID || '', // 开单医生
|
|
|
+ userID: userID || '', // 用户
|
|
|
+ hospID: hospID || '', // 登录医院id
|
|
|
+ groupID: groupID || '', // 登录角色id
|
|
|
+ medType: 'WM',
|
|
|
+ orderReSorce: 'Doctor',
|
|
|
+ westOrders: westOrders, // 西药 M
|
|
|
+ checkOrders: checkOrders, // 检查 C
|
|
|
+ lisOrders: lisOrders, // 检验 L
|
|
|
+ treatOrders: treatOrders, // 治疗 T
|
|
|
+ appMessage: appMessage // 检查部位分组(参考 inspectionExamine.vue 03050001 入参)
|
|
|
+ };
|
|
|
+ if (!westOrders.length && !checkOrders.length && !lisOrders.length && !treatOrders.length) {
|
|
|
+ uni.showToast({ title: '请先选择医嘱', icon: 'none' });
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ $http.post('urlDeault', this, {
|
|
|
+ code: '12100054',
|
|
|
+ data: {
|
|
|
+ params: [saveData]
|
|
|
+ },
|
|
|
+ success: (res) => {
|
|
|
+ if (res.errorCode === '0') {
|
|
|
+ uni.showToast({ title: '保存成功', icon: 'success' });
|
|
|
+ // 保存成功后跳转到医嘱录入页
|
|
|
+ setTimeout(() => {
|
|
|
+ uni.navigateTo({
|
|
|
+ url: '/pages/entryWrite/page/Entry/Entry?select=2&addText=添加医嘱'
|
|
|
+ });
|
|
|
+ }, 800);
|
|
|
+ } else {
|
|
|
+ const msg =
|
|
|
+ (res.errorList && res.errorList[0] && res.errorList[0].errorMessage) ||
|
|
|
+ res.errorMessage ||
|
|
|
+ '保存失败';
|
|
|
+ uni.showToast({ title: msg, icon: 'none' });
|
|
|
+ }
|
|
|
+ },
|
|
|
+ fail: () => {
|
|
|
+ uni.showToast({ title: '保存失败,请重试', icon: 'none' });
|
|
|
+ }
|
|
|
});
|
|
|
- console.log('this.added', this.medObjMap, this.selectedMap);
|
|
|
- // this.setData({ added: true });
|
|
|
- // uni.showToast({ title: '已保存', icon: 'success' });
|
|
|
+ },
|
|
|
+ // 从下拉数据源按选中索引取 ID(找不到返回 '')
|
|
|
+ listId(listKey, pickKey, idField) {
|
|
|
+ const list = this[listKey] || [];
|
|
|
+ const idx = this[pickKey];
|
|
|
+ if (!list.length || idx < 0 || !list[idx]) return '';
|
|
|
+ return list[idx][idField] || '';
|
|
|
},
|
|
|
buildCheckObj(it, qty) {
|
|
|
return {
|