Revert "Merge remote-tracking branch 'origin/develop' into develop"
This reverts commit5946c1ea4b, reversing changes made to8d905c9844.
This commit is contained in:
@@ -93,6 +93,7 @@
|
||||
</el-table-column>
|
||||
<el-table-column prop="createTime" label="创建时间" width="160" />
|
||||
<el-table-column prop="prescriptionNo" label="申请单号" width="140" />
|
||||
<el-table-column prop="requesterId_dictText" label="申请者" width="120" />
|
||||
<el-table-column label="申请单状态" width="120" align="center">
|
||||
<template #default="scope">
|
||||
<el-tag :type="getStatusTagType(scope.row.status)" effect="plain" round>
|
||||
@@ -100,7 +101,6 @@
|
||||
</el-tag>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="requesterId_dictText" label="申请者" width="120" />
|
||||
<el-table-column label="操作" width="280" align="center" fixed="right">
|
||||
<template #default="scope">
|
||||
<!-- 详情 - 所有状态都显示 -->
|
||||
@@ -678,16 +678,15 @@ const handlePrint = async (row) => {
|
||||
}
|
||||
|
||||
// 构建 descJson 字段行(与详情弹窗展示的字段一致)
|
||||
const fieldKeys = ['targetDepartment', 'urgencyLevel', 'expectedExaminationTime', 'allergyHistory', 'examinationPurpose', 'medicalHistorySummary', 'symptom', 'sign', 'clinicalDiagnosis', 'otherDiagnosis', 'relatedResult', 'attention'];
|
||||
const fieldKeys = ['targetDepartment', 'symptom', 'sign', 'clinicalDiagnosis', 'otherDiagnosis', 'relatedResult', 'attention'];
|
||||
let descFieldsHtml = '';
|
||||
fieldKeys.forEach((key) => {
|
||||
const label = labelMap[key] || key;
|
||||
const value = transformField(key, descData[key]);
|
||||
if (value != null && value !== '') {
|
||||
if (descData[key] != null && descData[key] !== '') {
|
||||
descFieldsHtml += `
|
||||
<div class="info-row">
|
||||
<span class="label">${label}:</span>
|
||||
<span class="value">${value}</span>
|
||||
<span class="value">${descData[key]}</span>
|
||||
</div>`;
|
||||
}
|
||||
});
|
||||
|
||||
@@ -136,7 +136,7 @@
|
||||
currentDetail.patientName || '-'
|
||||
}}</el-descriptions-item>
|
||||
<el-descriptions-item label="申请单名称">{{
|
||||
buildApplicationName(currentDetail)
|
||||
currentDetail.name || '-'
|
||||
}}</el-descriptions-item>
|
||||
<el-descriptions-item label="创建时间">{{
|
||||
currentDetail.createTime || '-'
|
||||
|
||||
@@ -289,62 +289,43 @@ function getList() {
|
||||
return obj;
|
||||
});
|
||||
form.value.diagnosisList = datas;
|
||||
// 去重:按 conditionId 去重,防止后端重复插入导致重复记录
|
||||
deduplicateDiagnosisList();
|
||||
// form.value.diagnosisList = res.data;
|
||||
emits('diagnosisSave', false);
|
||||
}
|
||||
});
|
||||
getTcmDiagnosis({ encounterId: props.patientInfo.encounterId }).then((res) => {
|
||||
console.log('getTcmDiagnosis=======>', JSON.stringify(res.data?.illness));
|
||||
console.log('getTcmDiagnosis=======>', JSON.stringify(res.data.illness));
|
||||
|
||||
if (res.code == 200 && res.data?.illness?.length > 0) {
|
||||
diagnosisNetDatas.value = res.data.illness;
|
||||
res.data.illness.forEach((item, index) => {
|
||||
newList.push({
|
||||
name: item.name + '-' + (res.data.symptom?.[index]?.name || ''),
|
||||
ybNo: item.ybNo,
|
||||
medTypeCode: item.medTypeCode,
|
||||
diagnosisDoctor: props.patientInfo.practitionerName || props.patientInfo.doctorName || props.patientInfo.physicianName || userStore.name,
|
||||
diagnosisTime: new Date().toLocaleString('zh-CN')
|
||||
if (res.code == 200) {
|
||||
if (res.data.illness.length > 0) {
|
||||
diagnosisNetDatas.value = res.data.illness;
|
||||
res.data.illness.forEach((item, index) => {
|
||||
newList.push({
|
||||
name: item.name + '-' + (res.data.symptom[index]?.name || ''),
|
||||
ybNo: item.ybNo,
|
||||
medTypeCode: item.medTypeCode,
|
||||
diagnosisDoctor: props.patientInfo.practitionerName || props.patientInfo.doctorName || props.patientInfo.physicianName || userStore.name,
|
||||
diagnosisTime: new Date().toLocaleString('zh-CN')
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
// 将新数据添加到现有列表中
|
||||
form.value.diagnosisList.push(...newList);
|
||||
|
||||
// 重新排序整个列表
|
||||
form.value.diagnosisList.sort((a, b) => {
|
||||
const aNo = typeof a.diagSrtNo === 'number' ? a.diagSrtNo : 9999;
|
||||
const bNo = typeof b.diagSrtNo === 'number' ? b.diagSrtNo : 9999;
|
||||
return aNo - bNo;
|
||||
});
|
||||
// TCM 数据添加后也去重
|
||||
deduplicateDiagnosisList();
|
||||
|
||||
// 将新数据添加到现有列表中
|
||||
form.value.diagnosisList.push(...newList);
|
||||
|
||||
// 重新排序整个列表
|
||||
form.value.diagnosisList.sort((a, b) => {
|
||||
const aNo = typeof a.diagSrtNo === 'number' ? a.diagSrtNo : 9999;
|
||||
const bNo = typeof b.diagSrtNo === 'number' ? b.diagSrtNo : 9999;
|
||||
return aNo - bNo;
|
||||
});
|
||||
}
|
||||
emits('diagnosisSave', false);
|
||||
}
|
||||
emits('diagnosisSave', false);
|
||||
});
|
||||
|
||||
|
||||
getTree();
|
||||
}
|
||||
|
||||
/**
|
||||
* 诊断列表去重:按 ybNo + name 组合去重,保留第一条记录
|
||||
* 防止后端 saveOrUpdate 在删除后误 INSERT 导致重复
|
||||
*/
|
||||
function deduplicateDiagnosisList() {
|
||||
const seen = new Set();
|
||||
const dedupedList = [];
|
||||
for (const item of form.value.diagnosisList) {
|
||||
// 使用 ybNo 和 name 组合作为唯一标识(中医诊断没有 ybNo,用 name 去重)
|
||||
const key = item.ybNo ? `${item.ybNo}` : `name_${item.name}`;
|
||||
if (!seen.has(key)) {
|
||||
seen.add(key);
|
||||
dedupedList.push(item);
|
||||
}
|
||||
}
|
||||
form.value.diagnosisList = dedupedList;
|
||||
}
|
||||
|
||||
init();
|
||||
function init() {
|
||||
diagnosisInit().then((res) => {
|
||||
@@ -622,18 +603,6 @@ function handleSaveDiagnosis() {
|
||||
return aNo - bNo;
|
||||
});
|
||||
|
||||
// 步骤1.5:确保每条诊断都有诊断医生和诊断时间(元数据补全)
|
||||
const doctorName = props.patientInfo.practitionerName || props.patientInfo.doctorName || props.patientInfo.physicianName || userStore.name;
|
||||
const now = new Date().toLocaleString('zh-CN');
|
||||
sortedList.forEach((item) => {
|
||||
if (!item.diagnosisDoctor) {
|
||||
item.diagnosisDoctor = doctorName;
|
||||
}
|
||||
if (!item.diagnosisTime) {
|
||||
item.diagnosisTime = now;
|
||||
}
|
||||
});
|
||||
|
||||
// 步骤2:重新分配连续的序号(从1开始)
|
||||
sortedList.forEach((item, index) => {
|
||||
item.diagSrtNo = index + 1; // 这里是关键!把”诊断排序”改成新顺序
|
||||
|
||||
@@ -142,11 +142,6 @@
|
||||
<el-table-column label="医嘱" align="center" prop="productName" width="300">
|
||||
<template #default="scope">
|
||||
<template v-if="getRowDisabled(scope.row)">
|
||||
<!-- 当行的 adviceType 不在当前选项列表中时,显示标签而非下拉框 -->
|
||||
<template v-if="!hasAdviceTypeOption(scope.row)">
|
||||
<el-tag size="small" type="primary">{{ getAdviceTypeLabel(scope.row.adviceType) }}</el-tag>
|
||||
</template>
|
||||
<template v-else>
|
||||
<el-select
|
||||
style="width: 35%; margin-right: 8px"
|
||||
:model-value="getRowSelectValue(scope.row)"
|
||||
@@ -221,7 +216,6 @@
|
||||
/>
|
||||
</template>
|
||||
</el-popover>
|
||||
</template>
|
||||
</template>
|
||||
<span v-else>{{ scope.row.adviceName }}</span>
|
||||
</template>
|
||||
@@ -756,31 +750,6 @@ function getRowDisabled(row) {
|
||||
return row.isEdit;
|
||||
}
|
||||
|
||||
/**
|
||||
* 判断行的 adviceType 是否在当前 adviceTypeList 选项中有匹配项
|
||||
* 修复 Bug #488:避免 el-select 因无匹配选项而回显为纯数字
|
||||
*/
|
||||
function hasAdviceTypeOption(row) {
|
||||
if (!row.adviceType && row.adviceType !== 0) return false;
|
||||
if (row.adviceType == 1 && row.categoryCode) {
|
||||
const compositeValue = '1-' + row.categoryCode;
|
||||
return adviceTypeList.value.some(item => item.value === compositeValue);
|
||||
}
|
||||
return adviceTypeList.value.some(item => item.value === row.adviceType);
|
||||
}
|
||||
|
||||
/**
|
||||
* 将原始 adviceType 数字映射为人类可读标签
|
||||
* 修复 Bug #488:当 adviceType 不在选项列表中时,显示标签而非数字
|
||||
*/
|
||||
function getAdviceTypeLabel(type) {
|
||||
if (!type && type !== 0) return '';
|
||||
// 优先使用字典文本(如果后端返回了 adviceType_dictText)
|
||||
// 但由于当前行数据可能没有 dictText,提供兜底映射
|
||||
const fallbackMap = { 1: '西药', 2: '中成药', 3: '诊疗', 4: '耗材', 5: '会诊', 6: '手术', 23: '检查' };
|
||||
return fallbackMap[type] || String(type);
|
||||
}
|
||||
|
||||
/**
|
||||
* 将行的 adviceType + categoryCode 映射为 el-select 的选中值
|
||||
* 药品子分类使用复合值如 '1-2'(adviceType-categoryCode),诊疗/手术/全部使用原始值
|
||||
@@ -863,22 +832,13 @@ function clickRowDb(row, column, event) {
|
||||
}
|
||||
row.showPopover = false;
|
||||
// 仅”待签发(statusEnum==1)”允许编辑;”已签发(statusEnum==2)”及之后状态不允许编辑
|
||||
// 使用 Number() 做类型转换,确保后端返回的数值能正确比较
|
||||
if (Number(row.statusEnum) === 1) {
|
||||
if (row.statusEnum == 1) {
|
||||
// 确保治疗类型为字符串,方便与单选框 label 对齐,默认为长期医嘱('1')
|
||||
row.therapyEnum = String(row.therapyEnum ?? '1');
|
||||
row.isEdit = true;
|
||||
const index = prescriptionList.value.findIndex((item) => item.uniqueKey === row.uniqueKey);
|
||||
if (index !== -1) {
|
||||
prescriptionList.value.splice(index, 1, row);
|
||||
// 使用 nextTick 确保数据更新后再设置展开状态,保证 el-table 能正确识别 row-key
|
||||
nextTick(() => {
|
||||
expandOrder.value = [row.uniqueKey];
|
||||
});
|
||||
} else {
|
||||
console.warn('⚠️ clickRowDb 未找到匹配行: uniqueKey=', row.uniqueKey, ', row=', row);
|
||||
proxy.$modal.msgWarning('无法进入编辑模式,请刷新列表后重试');
|
||||
}
|
||||
prescriptionList.value[index] = row;
|
||||
expandOrder.value = [row.uniqueKey];
|
||||
}
|
||||
}
|
||||
|
||||
@@ -950,8 +910,9 @@ function handleFocus(row, index) {
|
||||
// 用 adviceType + categoryCode 组合查找匹配的选项
|
||||
const selectValue = (adviceType == 1 && row.categoryCode) ? '1-' + row.categoryCode : adviceType;
|
||||
const selectedItem = adviceTypeList.value.find(item => item.value === selectValue) || adviceTypeList.value.find(item => item.adviceType === adviceType);
|
||||
// 当行没有显式选择医嘱类型时,使用已配置的默认categoryCode,确保后端能返回结果
|
||||
const categoryCode = row.adviceType !== undefined ? (selectedItem ? selectedItem.categoryCode : '') : (adviceQueryParams.value.categoryCode || '');
|
||||
// 修复Bug #486:当行没有显式选择医嘱类型时(row.adviceType为undefined),
|
||||
// 不传categoryCode,让搜索在全药库中进行;只有行已选择类型时才用对应categoryCode过滤
|
||||
const categoryCode = row.adviceType !== undefined ? (selectedItem ? selectedItem.categoryCode : '') : '';
|
||||
const searchKey = row.adviceName || '';
|
||||
|
||||
nextTick(() => {
|
||||
@@ -988,8 +949,9 @@ function handleChange(value) {
|
||||
// 用 adviceType + categoryCode 组合查找匹配的选项
|
||||
const selectValue = (adviceType == 1 && row?.categoryCode) ? '1-' + row.categoryCode : adviceType;
|
||||
const selectedItem = adviceTypeList.value.find(item => item.value === selectValue) || adviceTypeList.value.find(item => item.adviceType === adviceType);
|
||||
// 当行没有显式选择医嘱类型时,使用已配置的默认categoryCode,确保后端能返回结果
|
||||
const categoryCode = row?.adviceType !== undefined ? (selectedItem ? selectedItem.categoryCode : '') : (adviceQueryParams.value.categoryCode || '');
|
||||
// 修复Bug #486:当行没有显式选择医嘱类型时(row?.adviceType为undefined),
|
||||
// 不传categoryCode,让搜索在全药库中进行;只有行已选择类型时才用对应categoryCode过滤
|
||||
const categoryCode = row?.adviceType !== undefined ? (selectedItem ? selectedItem.categoryCode : '') : '';
|
||||
// 修复Bug #453:当adviceType为空字符串或NaN时,不传具体类型,让refresh函数根据searchKey决定搜索范围
|
||||
const effectiveAdviceType = (adviceType && !isNaN(Number(adviceType))) ? adviceType : '';
|
||||
tableRef.refresh(effectiveAdviceType, categoryCode, value);
|
||||
@@ -1416,9 +1378,6 @@ function handleSaveSign(row, index) {
|
||||
bindMethod.value[itemNo] = true;
|
||||
}
|
||||
}
|
||||
}).catch(() => {
|
||||
// 绑定设备接口失败不影响主流程保存,静默降级
|
||||
console.warn('绑定设备检查接口调用失败(adviceType=' + row.adviceType + ', itemNo=' + itemNo + ')');
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user