# 处方模板数据未回显问题 (2025-08-07 01:30Z)
_**User**_
@/views @/patients @/enteralNutrition 添加预包装处方时,点击处方模板,选中对应处方以后点击确认,表格中并未回显对应的数据
---
_**Assistant**_
我需要先分析一下肠内营养模块的预包装处方模板功能,特别是模板选择后数据回显的问题。让我先探索相关的组件结构和代码。
---
## Todo List
- [-] 分析PackageTable组件的数据接收和处理逻辑
- [ ] 检查处方模板选择功能的实现逻辑
- [ ] 修复预包装处方模板数据回显问题
---
---
Read file: src/views/patients/enteralNutrition/components/table/PackageTable.vue
---
## Todo List
- [x] 分析PackageTable组件的数据接收和处理逻辑
- [-] 检查处方模板选择功能的实现逻辑
- [ ] 修复预包装处方模板数据回显问题
- [ ] 检查LeftCard中handleTemplateSelected和PackageTable中数据传递的数据流
---
现在我发现了问题的关键。通过分析代码,我发现问题在于`LeftCard.vue`中的`handleTemplateSelected`函数里对预包装处方模板的数据处理有问题。让我仔细分析:
1. 在`LeftCard.vue`的第197行,当处方类型是`'package'`时,调用了`handlePackageTemplateData`函数
2. 但是在第382行,检查条件是`prescriptionType.value == 'package'`,而实际上预包装处方的类型应该是`'3'`
---
Grep search for "prescriptionType.*package" • **2** files
| File | Line | Match |
|------|------|-------|
| `file:///e%3A/CodeProjects/Cursor/wkx-his-web/src/views/patients/enteralNutrition/components/LeftCard.vue` | L197 | `if (prescriptionType.value === 'package') {` |
| `file:///e%3A/CodeProjects/Cursor/wkx-his-web/src/views/patients/enteralNutrition/components/LeftCard.vue` | L395 | `} else if (prescriptionType.value == 'package') {` |
| `file:///e%3A/CodeProjects/Cursor/wkx-his-web/src/views/patients/enteralNutrition/components/LeftCard.vue` | L197 | `if (prescriptionType.value === 'package') {` |
| `file:///e%3A/CodeProjects/Cursor/wkx-his-web/src/views/patients/enteralNutrition/components/LeftCard.vue` | L395 | `} else if (prescriptionType.value == 'package') {` |
---
Grep search for "prescriptionType\.value.*[\"']3[\"']" • **1** files
| File | Line | Match |
|------|------|-------|
| `file:///e%3A/CodeProjects/Cursor/wkx-his-web/src/views/patients/enteralNutrition/components/LeftCard.vue` | L495 | `prescriptionType.value = '3';` |
---
## Todo List
- [x] 分析PackageTable组件的数据接收和处理逻辑
- [x] 检查处方模板选择功能的实现逻辑
- [-] 修复预包装处方模板数据回显问题
- [ ] 检查LeftCard中handleTemplateSelected和PackageTable中数据传递的数据流
---
现在我找到了问题的根源!在`LeftCard.vue`中:
1. 添加预包装处方时,`prescriptionType.value`被设置为`'3'`(第494行)
2. 但是在`handleTemplateSelected`函数中,判断预包装处方使用的是`'package'`字符串(第196行和第394行)
3. 这导致模板数据无法正确处理和回显到`PackageTable`
让我修复这个问题:
---
Edit file: src/views/patients/enteralNutrition/components/LeftCard.vue
undefined
**Chunk 1**
Lines added: 1, lines removed: 1
```diff
@@ -195,5 +195,5 @@
// 根据处方类型处理模板数据
- if (prescriptionType.value === 'package') {
+ if (prescriptionType.value === '3') {
// 预包装处方:直接更新packageData
handlePackageTemplateData(contentData);
```
---
Edit file: src/views/patients/enteralNutrition/components/LeftCard.vue
undefined
**Chunk 1**
Lines added: 1, lines removed: 1
```diff
@@ -380,5 +380,5 @@
param.value.status = status;
- if (prescriptionType.value == 'normal') {
+ if (prescriptionType.value == '2') {
param.value.chargeType = '3';
if (!configData.value || configData.value.length == 0) {
```
**Chunk 2**
Lines added: 1, lines removed: 1
```diff
@@ -393,5 +393,5 @@
}
param.value.consumableList = JSON.parse(materialData.value);
- } else if (prescriptionType.value == 'package') {
+ } else if (prescriptionType.value == '3') {
param.value.chargeType = '2';
if (!packageData.value || packageData.value.length == 0) {
```
---
但是我发现还有一个问题,在`handlePackageTemplateData`函数中,数据结构的处理可能不正确。让我检查`PackageTable`期望的数据格式:
---
Read file: src/views/patients/enteralNutrition/components/LeftCard.vue
---
现在我需要检查`PackageTable`的数据结构,看看创建默认行的方法:
---
Read file: src/views/patients/enteralNutrition/components/table/PackageTable.vue
---
我看到问题了!在`PackageTable`中,`createDefaultRow`函数创建的数据结构有`products`数组,但在`handlePackageTemplateData`中没有包含这个结构。让我修复这个问题:
---
Edit file: src/views/patients/enteralNutrition/components/LeftCard.vue
undefined
**Chunk 1**
Lines added: 1, lines removed: 1
```diff
@@ -141,5 +141,5 @@
contentData.product.forEach((product, index) => {
const packageRow = {
- // PackageTable使用扁平结构,不是products数组
+ // PackageTable需要这些直接字段
nutritionProductId: product.id ? `${product.id}_${index}` : '',
quantity: product.quantity || 1,
```
**Chunk 2**
Lines added: 5, lines removed: undefined
```diff
@@ -164,4 +164,9 @@
totalDose: product.totalDose || '',
productSpecUnit: product.productSpecUnit || 'g',
+ // PackageTable也需要products数组(兼容TableRow接口)
+ products: [{
+ specification: product.specification || '',
+ dosePerDay: product.dosePerDay || ''
+ }],
sn: index,
tableId: Date.now() + index
```
---
现在让我检查一下还有什么需要修复的。让我查看一下模板的数据结构,以及`PackageTable`如何处理接收到的数据:
---
Read file: src/views/patients/enteralNutrition/components/table/PackageTable.vue
---
看起来数据处理应该是正确的。现在让我也检查一下导入缺失的导入语句,因为我注意到linter有错误:
---
Edit file: src/views/patients/enteralNutrition/components/LeftCard.vue
undefined
**Chunk 1**
Lines added: 2, lines removed: 1
```diff
@@ -76,5 +76,6 @@