Compare commits
1 Commits
44fd7de754
...
36e1d9a5b1
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
36e1d9a5b1 |
@@ -541,9 +541,9 @@
|
|||||||
CI.service_id AS request_id,
|
CI.service_id AS request_id,
|
||||||
CI.service_id || '-ci-dev' AS unique_key,
|
CI.service_id || '-ci-dev' AS unique_key,
|
||||||
'' AS prescription_no,
|
'' AS prescription_no,
|
||||||
COALESCE(DR.requester_id, CI.enterer_id) AS requester_id,
|
CI.enterer_id AS requester_id,
|
||||||
CI.entered_date AS request_time,
|
CI.entered_date AS request_time,
|
||||||
CASE WHEN COALESCE(DR.requester_id, CI.enterer_id) = #{practitionerId} THEN '1' ELSE '0' END AS biz_request_flag,
|
CASE WHEN CI.enterer_id = #{practitionerId} THEN '1' ELSE '0' END AS biz_request_flag,
|
||||||
DR.content_json AS content_json,
|
DR.content_json AS content_json,
|
||||||
NULL AS skin_test_flag,
|
NULL AS skin_test_flag,
|
||||||
NULL AS inject_flag,
|
NULL AS inject_flag,
|
||||||
|
|||||||
@@ -69,14 +69,13 @@ const throttledGetList = throttle(
|
|||||||
watch(
|
watch(
|
||||||
() => props.adviceQueryParams,
|
() => props.adviceQueryParams,
|
||||||
(newValue) => {
|
(newValue) => {
|
||||||
// 始终同步参数到 queryParams,避免弹窗打开时使用旧参数
|
// 只有在弹窗打开时才响应 adviceQueryParams 的变化,避免选择项目后弹窗关闭时触发不必要的请求
|
||||||
queryParams.value.searchKey = newValue?.searchKey;
|
|
||||||
queryParams.value.adviceType = newValue?.adviceType;
|
|
||||||
queryParams.value.categoryCode = newValue?.categoryCode;
|
|
||||||
// 只有在弹窗打开时才触发 API 请求
|
|
||||||
if (!props.popoverVisible) {
|
if (!props.popoverVisible) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
queryParams.value.searchKey = newValue?.searchKey;
|
||||||
|
queryParams.value.adviceType = newValue?.adviceType;
|
||||||
|
queryParams.value.categoryCode = newValue?.categoryCode;
|
||||||
throttledGetList();
|
throttledGetList();
|
||||||
},
|
},
|
||||||
{ deep: true }
|
{ deep: true }
|
||||||
|
|||||||
@@ -316,7 +316,6 @@
|
|||||||
<span class="cat-title">{{ cat.categoryName }}</span>
|
<span class="cat-title">{{ cat.categoryName }}</span>
|
||||||
<span v-if="categoryLoadingSet.has(cat.typeId)" class="loading-dot"></span>
|
<span v-if="categoryLoadingSet.has(cat.typeId)" class="loading-dot"></span>
|
||||||
</template>
|
</template>
|
||||||
<!-- 检查项目(部位/项目列表) -->
|
|
||||||
<div
|
<div
|
||||||
v-for="item in cat.items"
|
v-for="item in cat.items"
|
||||||
:key="item.id"
|
:key="item.id"
|
||||||
@@ -334,27 +333,6 @@
|
|||||||
<div v-if="categoryLoadingSet.has(cat.typeId)" class="category-loading-hint">
|
<div v-if="categoryLoadingSet.has(cat.typeId)" class="category-loading-hint">
|
||||||
加载中...
|
加载中...
|
||||||
</div>
|
</div>
|
||||||
<!-- Bug #428修复: 渲染分类联动加载的检查方法列表 -->
|
|
||||||
<div
|
|
||||||
v-if="cat.methods && cat.methods.length > 0"
|
|
||||||
class="method-section"
|
|
||||||
>
|
|
||||||
<div class="method-section-title">检查方法</div>
|
|
||||||
<div
|
|
||||||
v-for="method in cat.methods"
|
|
||||||
:key="method.id"
|
|
||||||
class="method-row"
|
|
||||||
>
|
|
||||||
<el-checkbox
|
|
||||||
:model-value="isMethodSelected(method, cat)"
|
|
||||||
@change="(val) => handleMethodSelect(val, method, cat)"
|
|
||||||
class="method-checkbox"
|
|
||||||
>
|
|
||||||
{{ method.name }}
|
|
||||||
</el-checkbox>
|
|
||||||
<span class="method-price-tag">¥{{ method.packagePrice || method.price || 0 }}</span>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</el-collapse-item>
|
</el-collapse-item>
|
||||||
</el-collapse>
|
</el-collapse>
|
||||||
</div>
|
</div>
|
||||||
@@ -1069,78 +1047,6 @@ function handleDelete(row) {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
// Bug #428修复: 判断某个检查方法是否已被选中(任意项目关联了该方法)
|
|
||||||
function isMethodSelected(method, cat) {
|
|
||||||
return selectedItems.value.some(item =>
|
|
||||||
item.selectedMethod?.id === method.id && item.checkType === cat.typeName
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Bug #428修复: 勾选检查方法
|
|
||||||
async function handleMethodSelect(checked, method, cat) {
|
|
||||||
if (checked) {
|
|
||||||
// 找到该方法所属的第一个检查项目
|
|
||||||
const targetItem = cat.items[0];
|
|
||||||
if (!targetItem) {
|
|
||||||
// 如果分类下没有项目,尝试从其他分类找同名项目或创建
|
|
||||||
console.warn('分类下没有检查项目,无法关联方法');
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
// 如果该项目已存在,只更新 selectedMethod
|
|
||||||
const existingItem = selectedItems.value.find(s => s.id === targetItem.id);
|
|
||||||
if (existingItem) {
|
|
||||||
existingItem.selectedMethod = method;
|
|
||||||
updateMethodDisplay();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
// 如果该项目不存在,创建一个并关联方法
|
|
||||||
if (selectedItems.value.length > 0) {
|
|
||||||
const currentCategory = selectedItems.value[0].checkType;
|
|
||||||
const newCategory = cat.typeCode || '';
|
|
||||||
if (currentCategory !== newCategory) {
|
|
||||||
ElMessage.warning('一个检查单不能同时选择多个项目类型的检查项目');
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
selectedItems.value.push({
|
|
||||||
id: targetItem.id, name: targetItem.name,
|
|
||||||
price: targetItem.price, quantity: 1,
|
|
||||||
serviceFee: targetItem.serviceFee || 0,
|
|
||||||
unit: targetItem.unit || '次',
|
|
||||||
applyPart: targetItem.name,
|
|
||||||
checkType: cat.typeName,
|
|
||||||
nationalCode: targetItem.nationalCode || '',
|
|
||||||
checked: true,
|
|
||||||
methods: [method],
|
|
||||||
selectedMethod: method,
|
|
||||||
expanded: false,
|
|
||||||
isPackage: !!targetItem.packageName,
|
|
||||||
packageId: targetItem.packageId || null
|
|
||||||
});
|
|
||||||
|
|
||||||
// 自动回填执行科室
|
|
||||||
if (selectedItems.value.length === 1 && cat?.performDeptName) {
|
|
||||||
form.performDeptCode = cat.performDeptName;
|
|
||||||
}
|
|
||||||
|
|
||||||
// 同时勾选左侧项目的 checkbox
|
|
||||||
targetItem.checked = true;
|
|
||||||
|
|
||||||
} else {
|
|
||||||
// 取消选择方法:将 selectedItems 中关联该方法的项的 selectedMethod 清空
|
|
||||||
const itemsWithMethod = selectedItems.value.filter(
|
|
||||||
item => item.selectedMethod?.id === method.id
|
|
||||||
);
|
|
||||||
for (const item of itemsWithMethod) {
|
|
||||||
item.selectedMethod = null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
updateMethodDisplay();
|
|
||||||
}
|
|
||||||
|
|
||||||
// ====== 勾选逻辑 ======
|
// ====== 勾选逻辑 ======
|
||||||
async function handleItemSelect(checked, item, cat) {
|
async function handleItemSelect(checked, item, cat) {
|
||||||
if (checked) {
|
if (checked) {
|
||||||
@@ -1461,53 +1367,6 @@ defineExpose({ getList });
|
|||||||
margin-left: 6px;
|
margin-left: 6px;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Bug #428修复: 分类下检查方法区域样式 */
|
|
||||||
.method-section {
|
|
||||||
padding: 6px 8px;
|
|
||||||
background: #f0f7ff;
|
|
||||||
border-radius: 4px;
|
|
||||||
margin-top: 6px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.method-section-title {
|
|
||||||
font-size: 12px;
|
|
||||||
font-weight: 600;
|
|
||||||
color: #409eff;
|
|
||||||
margin-bottom: 4px;
|
|
||||||
padding-bottom: 3px;
|
|
||||||
border-bottom: 1px dashed #d9ecff;
|
|
||||||
}
|
|
||||||
|
|
||||||
.method-row {
|
|
||||||
display: flex;
|
|
||||||
align-items: center;
|
|
||||||
justify-content: space-between;
|
|
||||||
padding: 3px 4px;
|
|
||||||
border-radius: 3px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.method-row:hover {
|
|
||||||
background: #e8f4ff;
|
|
||||||
}
|
|
||||||
|
|
||||||
.method-checkbox {
|
|
||||||
flex: 1;
|
|
||||||
overflow: hidden;
|
|
||||||
}
|
|
||||||
|
|
||||||
.method-checkbox :deep(.el-checkbox__label) {
|
|
||||||
font-size: 12px;
|
|
||||||
color: #303133;
|
|
||||||
}
|
|
||||||
|
|
||||||
.method-price-tag {
|
|
||||||
font-size: 11px;
|
|
||||||
color: #e6a23c;
|
|
||||||
font-weight: 500;
|
|
||||||
flex-shrink: 0;
|
|
||||||
margin-left: 6px;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* 已选择 tags */
|
/* 已选择 tags */
|
||||||
.selected-panel {
|
.selected-panel {
|
||||||
width: 140px; /* Bug #384修复: 加宽以适应展开内容 */
|
width: 140px; /* Bug #384修复: 加宽以适应展开内容 */
|
||||||
@@ -1579,41 +1438,6 @@ defineExpose({ getList });
|
|||||||
transform: rotate(180deg);
|
transform: rotate(180deg);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Bug #428修复: 套餐明细列表样式 */
|
|
||||||
.package-details-list {
|
|
||||||
padding: 6px 10px;
|
|
||||||
background: #fffbe6;
|
|
||||||
border-top: 1px solid #ffe58f;
|
|
||||||
display: flex;
|
|
||||||
flex-direction: column;
|
|
||||||
gap: 4px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.detail-row {
|
|
||||||
display: flex;
|
|
||||||
align-items: center;
|
|
||||||
justify-content: space-between;
|
|
||||||
padding: 2px 6px;
|
|
||||||
border-radius: 3px;
|
|
||||||
font-size: 11px;
|
|
||||||
background: #fff;
|
|
||||||
}
|
|
||||||
|
|
||||||
.detail-row:hover {
|
|
||||||
background: #fff9e6;
|
|
||||||
}
|
|
||||||
|
|
||||||
.detail-name {
|
|
||||||
color: #303133;
|
|
||||||
font-weight: 500;
|
|
||||||
}
|
|
||||||
|
|
||||||
.detail-info {
|
|
||||||
color: #909399;
|
|
||||||
font-size: 10px;
|
|
||||||
white-space: nowrap;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Bug #384修复: 检查方法勾选框列表 */
|
/* Bug #384修复: 检查方法勾选框列表 */
|
||||||
.method-list {
|
.method-list {
|
||||||
padding: 6px 10px;
|
padding: 6px 10px;
|
||||||
|
|||||||
@@ -1013,29 +1013,15 @@ const mapAdviceTypeLabel = (type, adviceTableName) => {
|
|||||||
if (type === 2 && adviceTableName === 'adm_device_definition') {
|
if (type === 2 && adviceTableName === 'adm_device_definition') {
|
||||||
return '耗材';
|
return '耗材';
|
||||||
}
|
}
|
||||||
|
|
||||||
// 🔧 Bug Fix: 处理检查类型(adviceType=23)
|
// 🔧 Bug Fix: 处理检查类型(adviceType=23)
|
||||||
// 检查类型属于诊疗类,应该显示为"检查"
|
// 检查类型属于诊疗类,应该显示为"检查"
|
||||||
if (type === 23) {
|
if (type === 23) {
|
||||||
return '检查';
|
return '检查';
|
||||||
}
|
}
|
||||||
|
|
||||||
const found = adviceTypeList.value.find((item) => item.value === type);
|
const found = adviceTypeList.value.find((item) => item.value === type);
|
||||||
if (found) {
|
return found ? found.label : '';
|
||||||
return found.label;
|
|
||||||
}
|
|
||||||
|
|
||||||
// 🔧 Bug #458 Fix: 诊疗/手术类型字典缺失时的兜底,避免保存后"医嘱类型"列显示为空
|
|
||||||
if (adviceTableName === 'wor_activity_definition' || adviceTableName === 'wor_service_request') {
|
|
||||||
if (type === 6) return '手术';
|
|
||||||
if (type === 4) return '手术';
|
|
||||||
if (type === 1) return '检验';
|
|
||||||
if (type === 2) return '检查';
|
|
||||||
if (type === 5) return '其他';
|
|
||||||
return '诊疗';
|
|
||||||
}
|
|
||||||
|
|
||||||
return '';
|
|
||||||
};
|
};
|
||||||
|
|
||||||
// 西药处方管理相关变量
|
// 西药处方管理相关变量
|
||||||
|
|||||||
Reference in New Issue
Block a user