# 销售台账/销售报价-总合同号联动选择及附件查看
## 涉及页面
- 销售台账列表页/新增编辑页
- 销售报价列表页/新增编辑页
## 新增API
| 方法 | 路径 | 说明 |
|------|------|------|
| GET | /basic/customer-contract/list/{customerId} | 查询客户合同记录列表(供下拉选择) |
| GET | /basic/customer-contract/files/byContractNo?masterContractNo=xxx | 根据总合同号查询附件 |
## 前端修改点
### 1. 销售台账新增/编辑页 - 客户选择后联动总合同号
```html
```
### 2. 销售报价新增/编辑页 - 同样添加客户和总合同号联动
```html
```
### 3. 销售台账列表页 - 操作栏添加查看总合同附件按钮
```html
编辑
删除
查看附件
```
### 4. 总合同附件查看弹窗
```html
{{ formatFileSize(row.byteSize) }}
预览
下载
```
### 5. data 数据
```js
data() {
return {
// 合同列表(供下拉选择)
contractList: [],
// 总合同附件弹窗
contractFileDialogVisible: false,
contractFileList: []
}
}
```
### 6. 方法
```js
methods: {
// 客户选择变化时,加载该客户的合同列表
async handleCustomerChange(customerId) {
this.form.masterContractNo = '' // 清空总合同号
this.contractList = []
if (!customerId) return
const res = await this.$http.get(`/basic/customer-contract/list/${customerId}`)
if (res.code === 200) {
this.contractList = res.data
}
},
// 查看总合同附件
async handleViewContractFiles(row) {
if (!row.masterContractNo) {
this.$message.warning('该记录没有总合同号')
return
}
const res = await this.$http.get('/basic/customer-contract/files/byContractNo', {
params: { masterContractNo: row.masterContractNo }
})
if (res.code === 200) {
this.contractFileList = res.data || []
this.contractFileDialogVisible = true
}
},
// 格式化文件大小
formatFileSize(bytes) {
if (!bytes) return '0 B'
const k = 1024
const sizes = ['B', 'KB', 'MB', 'GB']
const i = Math.floor(Math.log(bytes) / Math.log(k))
return parseFloat((bytes / Math.pow(k, i)).toFixed(2)) + ' ' + sizes[i]
}
}
```
### 7. 销售台账/报价列表页 - 表格显示总合同号列
```html
```
### 8. 编辑页打开时回显总合同号
```js
// 打开编辑弹窗时,加载客户的合同列表并回显
async handleEdit(row) {
this.form = { ...row }
this.dialogVisible = true
// 加载客户的合同列表
if (row.customerId) {
const res = await this.$http.get(`/basic/customer-contract/list/${row.customerId}`)
if (res.code === 200) {
this.contractList = res.data
}
}
}
```
## 注意事项
- 总合同号来源于客户档案私海的合同记录子表
- 选择顺序:先选客户 -> 自动加载该客户的合同列表 -> 再选总合同号
- 销售台账表已有 `master_contract_no` 字段,销售报价表需新增该字段
- 查看附件按钮仅在总合同号存在时显示
- 附件列表通过总合同号查询,支持预览和下载