fix: 修复#428检查申请分类联动功能
- 修复1: 将el-collapse-item的@click事件改为el-collapse的@change事件 - 修复2: 添加handleCollapseChange函数处理展开事件 - 修复3: 修改已选择区域展开后显示套餐明细或检查方法 - 修复4: 添加loadPackageDetailsForItem函数加载套餐明细 - 修复5: 修改toggleItemExpand函数在展开时加载套餐明细
This commit is contained in:
@@ -301,12 +301,11 @@
|
|||||||
<div v-if="filteredCategoryList.length === 0" class="empty-hint">
|
<div v-if="filteredCategoryList.length === 0" class="empty-hint">
|
||||||
{{ dictLoading ? '' : '暂无检查项目,请在"检查项目设置"中配置' }}
|
{{ dictLoading ? '' : '暂无检查项目,请在"检查项目设置"中配置' }}
|
||||||
</div>
|
</div>
|
||||||
<el-collapse v-else v-model="activeNames">
|
<el-collapse v-else v-model="activeNames" @change="(activeNames) => handleCollapseChange(activeNames)">
|
||||||
<el-collapse-item
|
<el-collapse-item
|
||||||
v-for="cat in filteredCategoryList"
|
v-for="cat in filteredCategoryList"
|
||||||
:key="cat.typeId"
|
:key="cat.typeId"
|
||||||
:name="cat.typeId"
|
:name="cat.typeId"
|
||||||
@click="handleCategoryExpand(cat)"
|
|
||||||
>
|
>
|
||||||
<template #title>
|
<template #title>
|
||||||
<span class="cat-title">{{ cat.categoryName }}</span>
|
<span class="cat-title">{{ cat.categoryName }}</span>
|
||||||
@@ -356,21 +355,7 @@
|
|||||||
</el-button>
|
</el-button>
|
||||||
</div>
|
</div>
|
||||||
<!-- Bug #384修复: 展开后显示检查方法勾选框列表 -->
|
<!-- Bug #384修复: 展开后显示检查方法勾选框列表 -->
|
||||||
<div v-if="item.expanded && item.methods && item.methods.length > 0" class="method-list">
|
<!-- Bug #428修复: 展开后显示套餐明细或检查方法 --> <div v-if="item.expanded"> <!-- 显示套餐明细 --> <div v-if="item.packageDetails && item.packageDetails.length > 0" class="package-details-list"> <div class="detail-row" v-for="detail in item.packageDetails" :key="detail.id"> <span class="detail-name">{{ detail.name }}</span> <span class="detail-info">数量: {{ detail.quantity }} 单价: ¥{{ detail.price }}</span> </div> </div> <!-- 显示检查方法 --> <div v-else-if="item.methods && item.methods.length > 0" class="method-list"> <div v-for="method in item.methods" :key="method.id" class="method-option"> <el-checkbox :model-value="item.selectedMethod?.id === method.id" @change="(val) => selectMethodCheckbox(val, item, method)"> <span class="method-name">{{ method.name }}</span> <span class="method-price">¥{{ method.packagePrice || item.price }}</span> </el-checkbox> </div> </div> </div>
|
||||||
<div
|
|
||||||
v-for="method in item.methods"
|
|
||||||
:key="method.id"
|
|
||||||
class="method-option"
|
|
||||||
>
|
|
||||||
<el-checkbox
|
|
||||||
:model-value="item.selectedMethod?.id === method.id"
|
|
||||||
@change="(val) => selectMethodCheckbox(val, item, method)"
|
|
||||||
>
|
|
||||||
<span class="method-name">{{ method.name }}</span>
|
|
||||||
<span class="method-price">¥{{ method.packagePrice || item.price }}</span>
|
|
||||||
</el-checkbox>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -427,6 +412,7 @@ async function loadPackageDetails(row, treeNode, resolve) {
|
|||||||
resolve(children);
|
resolve(children);
|
||||||
} else {
|
} else {
|
||||||
resolve([]);
|
resolve([]);
|
||||||
|
async function loadPackageDetailsForItem(item) { if (!item.isPackage || !item.packageId) { return; } try { const res = await request({ url: `/exam/package/${item.packageId}/details`, method: 'get' }); if (res.code === 200 && res.data) { item.packageDetails = res.data.map(detail => ({ ...detail, name: detail.name || detail.itemName, unit: detail.unit || '次', price: detail.price || detail.itemPrice || 0, quantity: detail.quantity || 1 })); } else { item.packageDetails = []; } } catch (err) { console.error('加载套餐明细失败:', err); item.packageDetails = []; } }
|
||||||
}
|
}
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
console.error('加载套餐明细失败:', err);
|
console.error('加载套餐明细失败:', err);
|
||||||
@@ -623,6 +609,17 @@ async function handleCategoryExpand(cat) {
|
|||||||
console.error('加载分类检查方法失败', err);
|
console.error('加载分类检查方法失败', err);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
async function handleCollapseChange(activeNames) {
|
||||||
|
// 当折叠面板展开时,加载对应分类的检查方法
|
||||||
|
if (Array.isArray(activeNames) && activeNames.length > 0) {
|
||||||
|
for (const typeId of activeNames) {
|
||||||
|
const cat = filteredCategoryList.value.find(c => c.typeId == typeId);
|
||||||
|
if (cat && (!cat.methods || cat.methods.length === 0)) {
|
||||||
|
await handleCategoryExpand(cat);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
watch(availableMethods, (newMethods) => {
|
watch(availableMethods, (newMethods) => {
|
||||||
if (form.inspectionMethod && !newMethods.find(m => m.name === form.inspectionMethod)) {
|
if (form.inspectionMethod && !newMethods.find(m => m.name === form.inspectionMethod)) {
|
||||||
@@ -1060,8 +1057,12 @@ async function handleItemSelect(checked, item, cat) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Bug #384修复: 展开/收起项目卡片
|
// Bug #384修复: 展开/收起项目卡片
|
||||||
function toggleItemExpand(item) {
|
async function toggleItemExpand(item) {
|
||||||
item.expanded = !item.expanded;
|
item.expanded = !item.expanded;
|
||||||
|
// 如果是展开且该项目是套餐,加载套餐明细
|
||||||
|
if (item.expanded && item.isPackage && (!item.packageDetails || item.packageDetails.length === 0)) {
|
||||||
|
await loadPackageDetailsForItem(item);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Bug #384修复: 勾选框选择检查方法(单选逻辑)
|
// Bug #384修复: 勾选框选择检查方法(单选逻辑)
|
||||||
|
|||||||
Reference in New Issue
Block a user