Files
tyapi-server/发票信息回显问题修复说明.md
2025-08-02 02:54:21 +08:00

198 lines
5.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 发票信息回显问题修复说明
## 问题描述
用户反馈前端页面中,公司名称和纳税人识别号没有回显,即使用户还没有进行过开票信息的提交,也应该从企业认证信息中自动回显这些字段。
## 问题分析
### 1. 后端问题
`GetUserInvoiceInfoWithEnterpriseInfo` 方法中,当用户还没有开票信息记录时,会创建一个新的实体,但是公司名称和纳税人识别号字段被设置为空字符串,而不是使用传入的企业认证信息。
### 2. 前端问题
前端页面没有正确处理只读字段的显示,公司名称和纳税人识别号字段在编辑状态下没有禁用,也没有显示相应的提示信息。
## 修复方案
### 1. 后端修复
#### 修复 `GetUserInvoiceInfoWithEnterpriseInfo` 方法
```go
// 修复前
if info == nil {
info = &entities.UserInvoiceInfo{
ID: uuid.New().String(),
UserID: userID,
CompanyName: "", // 空字符串
TaxpayerID: "", // 空字符串
// ... 其他字段
}
}
// 修复后
if info == nil {
info = &entities.UserInvoiceInfo{
ID: uuid.New().String(),
UserID: userID,
CompanyName: companyName, // 使用企业认证信息填充
TaxpayerID: taxpayerID, // 使用企业认证信息填充
// ... 其他字段
}
} else {
// 如果已有记录,使用传入的企业认证信息覆盖公司名称和纳税人识别号
if companyName != "" {
info.CompanyName = companyName
}
if taxpayerID != "" {
info.TaxpayerID = taxpayerID
}
}
```
#### 修复效果
- ✅ 用户首次访问发票页面时,公司名称和纳税人识别号会自动从企业认证信息中回显
- ✅ 即使用户还没有提交过开票信息,也能看到企业认证信息
- ✅ 企业认证信息更新后,发票信息也会自动更新
### 2. 前端修复
#### 添加只读字段标识
```javascript
// 开票信息(只读)
const invoiceInfo = reactive({
company_name: '',
taxpayer_id: '',
bank_name: '',
bank_account: '',
company_address: '',
company_phone: '',
receiving_email: '',
company_name_read_only: false, // 新增:公司名称只读标识
taxpayer_id_read_only: false // 新增:纳税人识别号只读标识
})
```
#### 修改表单字段显示
```vue
<el-form-item label="公司名称" prop="company_name">
<el-input
v-model="editingInfo.company_name"
placeholder="请输入公司名称"
:disabled="invoiceInfo.company_name_read_only"
:class="{ 'readonly-field': invoiceInfo.company_name_read_only }"
/>
<div v-if="invoiceInfo.company_name_read_only" class="field-note">
<i class="el-icon-info"></i>
公司名称从企业认证信息自动获取不可修改
</div>
</el-form-item>
<el-form-item label="纳税人识别号" prop="taxpayer_id">
<el-input
v-model="editingInfo.taxpayer_id"
placeholder="请输入纳税人识别号"
:disabled="invoiceInfo.taxpayer_id_read_only"
:class="{ 'readonly-field': invoiceInfo.taxpayer_id_read_only }"
/>
<div v-if="invoiceInfo.taxpayer_id_read_only" class="field-note">
<i class="el-icon-info"></i>
纳税人识别号从企业认证信息自动获取不可修改
</div>
</el-form-item>
```
#### 修改验证规则
```javascript
// 开票信息验证规则
const infoRules = computed(() => ({
company_name: invoiceInfo.company_name_read_only ? [] : [
{ required: true, message: '请输入公司名称', trigger: 'blur' }
],
taxpayer_id: invoiceInfo.taxpayer_id_read_only ? [] : [
{ required: true, message: '请输入纳税人识别号', trigger: 'blur' }
],
receiving_email: [
{ required: true, message: '请输入接收邮箱', trigger: 'blur' },
{ type: 'email', message: '请输入正确的邮箱格式', trigger: 'blur' }
]
}))
```
#### 添加样式
```css
/* 只读字段样式 */
.readonly-field .el-input__inner {
background-color: #f5f7fa;
color: #606266;
cursor: not-allowed;
}
.field-note {
font-size: 12px;
color: #909399;
margin-top: 4px;
display: flex;
align-items: center;
gap: 4px;
}
.field-note i {
font-size: 14px;
}
```
#### 修复效果
- ✅ 公司名称和纳税人识别号字段在编辑状态下显示为禁用状态
- ✅ 只读字段有明显的视觉区分(灰色背景)
- ✅ 显示友好的提示信息,说明字段来源
- ✅ 只读字段不需要验证,避免验证错误
## 测试场景
### 1. 首次访问场景
- 用户完成企业认证后,首次访问发票页面
- 公司名称和纳税人识别号应该自动回显
- 字段显示为只读状态
### 2. 编辑场景
- 用户点击"编辑信息"按钮
- 公司名称和纳税人识别号字段应该禁用
- 显示提示信息说明字段来源
### 3. 保存场景
- 用户填写其他字段后保存
- 只读字段不会被验证
- 保存成功后,只读字段仍然保持禁用状态
### 4. 企业认证信息更新场景
- 用户更新企业认证信息
- 重新访问发票页面
- 公司名称和纳税人识别号应该自动更新
## 技术要点
### 1. 数据流向
```
企业认证信息 → 应用服务层 → 领域服务层 → 前端页面
```
### 2. 权限控制
- 公司名称和纳税人识别号只能从企业认证信息获取
- 用户不能手动修改这些字段
- 前端和后端都有相应的权限控制
### 3. 用户体验
- 清晰的视觉反馈(禁用状态、提示信息)
- 友好的错误提示
- 自动数据回显,减少用户输入
## 总结
通过这次修复,我们实现了:
1.**数据回显**:公司名称和纳税人识别号自动从企业认证信息回显
2.**权限控制**:只读字段不能被用户修改
3.**用户体验**:清晰的视觉反馈和友好的提示信息
4.**数据一致性**:确保发票信息与企业认证信息保持一致
这个修复既解决了用户反馈的问题,又提升了整体的用户体验。