|
|
|
@ -1,9 +1,133 @@ |
|
|
|
<template> |
|
|
|
<div class="detail-container"> |
|
|
|
<!-- 左上角按钮区域 --> |
|
|
|
<div class="header-buttons"> |
|
|
|
<el-button |
|
|
|
type="primary" |
|
|
|
size="default" |
|
|
|
@click="handleEdit" |
|
|
|
v-if="isDraftStatus" |
|
|
|
:disabled="isEditMode"> |
|
|
|
修改 |
|
|
|
</el-button> |
|
|
|
</div> |
|
|
|
|
|
|
|
<!-- 修改模式下的编辑表单 --> |
|
|
|
<div v-if="isEditMode" class="edit-form"> |
|
|
|
<!-- 第一行 --> |
|
|
|
<div class="detail-row"> |
|
|
|
<div class="detail-item"> |
|
|
|
<span class="label">申请单号:</span> |
|
|
|
<span class="value disabled">{{ detailData.requestNo }}</span> |
|
|
|
</div> |
|
|
|
|
|
|
|
<div class="detail-item"> |
|
|
|
<span class="label">申请日期:</span> |
|
|
|
<span class="value disabled">{{ formatDate(detailData.requestDate) }}</span> |
|
|
|
</div> |
|
|
|
|
|
|
|
<div class="detail-item"> |
|
|
|
<span class="label">供应商编码:</span> |
|
|
|
<span class="value disabled">{{ detailData.supplierNo }}</span> |
|
|
|
</div> |
|
|
|
|
|
|
|
<div class="detail-item long"> |
|
|
|
<span class="label">供应商名称:</span> |
|
|
|
<span class="value disabled">{{ detailData.supplierName }}</span> |
|
|
|
</div> |
|
|
|
</div> |
|
|
|
|
|
|
|
<!-- 第二行 --> |
|
|
|
<div class="detail-row"> |
|
|
|
<div class="detail-item address"> |
|
|
|
<span class="label">验货地址:</span> |
|
|
|
<el-input |
|
|
|
v-model="editData.inspectAddress" |
|
|
|
placeholder="请输入验货地址" |
|
|
|
size="small" |
|
|
|
class="edit-input"> |
|
|
|
</el-input> |
|
|
|
</div> |
|
|
|
|
|
|
|
<div class="detail-item long"> |
|
|
|
<span class="label">联系人:</span> |
|
|
|
<el-input |
|
|
|
v-model="editData.inspectContract" |
|
|
|
placeholder="请输入联系人" |
|
|
|
size="small" |
|
|
|
class="edit-input"> |
|
|
|
</el-input> |
|
|
|
</div> |
|
|
|
</div> |
|
|
|
|
|
|
|
<!-- 第三行 --> |
|
|
|
<div class="detail-row"> |
|
|
|
<div class="detail-item"> |
|
|
|
<span class="label">申请录入人:</span> |
|
|
|
<span class="value disabled">{{ detailData.createBy }}</span> |
|
|
|
</div> |
|
|
|
|
|
|
|
<div class="detail-item"> |
|
|
|
<span class="label">申请录入时间:</span> |
|
|
|
<span class="value disabled">{{ detailData.createDate }}</span> |
|
|
|
</div> |
|
|
|
|
|
|
|
<div class="detail-item"> |
|
|
|
<span class="label">建议验货日期:</span> |
|
|
|
<el-date-picker |
|
|
|
v-model="editData.needInspectDate" |
|
|
|
type="date" |
|
|
|
value-format="yyyy-MM-dd" |
|
|
|
placeholder="选择日期" |
|
|
|
size="small" |
|
|
|
class="edit-input" |
|
|
|
style="width: 100%"> |
|
|
|
</el-date-picker> |
|
|
|
</div> |
|
|
|
</div> |
|
|
|
|
|
|
|
<!-- 第四行 --> |
|
|
|
<div class="detail-row"> |
|
|
|
<div class="detail-item"> |
|
|
|
<span class="label">排程人:</span> |
|
|
|
<span class="value disabled">{{ detailData.scheduledBy || ' ' }}</span> |
|
|
|
</div> |
|
|
|
|
|
|
|
<div class="detail-item"> |
|
|
|
<span class="label">排程时间:</span> |
|
|
|
<span class="value disabled">{{ detailData.scheduledDate || ' ' }}</span> |
|
|
|
</div> |
|
|
|
|
|
|
|
<div class="detail-item"> |
|
|
|
<span class="label">状态:</span> |
|
|
|
<span class="value disabled">{{ detailData.status }}</span> |
|
|
|
</div> |
|
|
|
|
|
|
|
<div class="detail-item"> |
|
|
|
<span class="label">计划验货日期:</span> |
|
|
|
<span class="value disabled">{{ detailData.planStartDate || ' ' }}</span> |
|
|
|
</div> |
|
|
|
</div> |
|
|
|
|
|
|
|
<!-- 第五行 --> |
|
|
|
<div class="detail-row"> |
|
|
|
<div class="detail-item"> |
|
|
|
<span class="label">QC:</span> |
|
|
|
<span class="value disabled">{{ detailData.qcOperator || ' ' }}</span> |
|
|
|
</div> |
|
|
|
</div> |
|
|
|
|
|
|
|
<!-- 编辑模式底部按钮 --> |
|
|
|
<div class="edit-actions"> |
|
|
|
<el-button type="primary" size="small" @click="handleSave" :loading="saveLoading">保存</el-button> |
|
|
|
<el-button size="small" @click="handleCancelEdit">取消</el-button> |
|
|
|
</div> |
|
|
|
</div> |
|
|
|
|
|
|
|
<!-- 查看模式 --> |
|
|
|
<div v-else> |
|
|
|
<!-- 第一行 --> |
|
|
|
<div class="detail-row"> |
|
|
|
<div class="detail-item"> |
|
|
|
<span class="label">申请单号:</span> |
|
|
|
<span class="value">{{ detailData.requestNo }}</span> |
|
|
|
@ -23,31 +147,23 @@ |
|
|
|
<span class="label">供应商名称:</span> |
|
|
|
<span class="value">{{ detailData.supplierName }}</span> |
|
|
|
</div> |
|
|
|
|
|
|
|
</div> |
|
|
|
|
|
|
|
<!-- 第二行 --> |
|
|
|
<div class="detail-row"> |
|
|
|
|
|
|
|
<div class="detail-item address"> |
|
|
|
<span class="label">验货地址:</span> |
|
|
|
<span class="value"> |
|
|
|
{{ detailData.inspectAddress }} |
|
|
|
</span> |
|
|
|
<span class="value">{{ detailData.inspectAddress || ' ' }}</span> |
|
|
|
</div> |
|
|
|
|
|
|
|
<div class="detail-item long"> |
|
|
|
<span class="label">联系人:</span> |
|
|
|
<span class="value"> |
|
|
|
{{ detailData.inspectContract }} |
|
|
|
</span> |
|
|
|
<span class="value">{{ detailData.inspectContract || ' ' }}</span> |
|
|
|
</div> |
|
|
|
|
|
|
|
</div> |
|
|
|
|
|
|
|
<!-- 第三行 --> |
|
|
|
<div class="detail-row"> |
|
|
|
|
|
|
|
<div class="detail-item"> |
|
|
|
<span class="label">申请录入人:</span> |
|
|
|
<span class="value">{{ detailData.createBy }}</span> |
|
|
|
@ -60,24 +176,20 @@ |
|
|
|
|
|
|
|
<div class="detail-item"> |
|
|
|
<span class="label">建议验货日期:</span> |
|
|
|
<span class="value"> |
|
|
|
{{ formatDate(detailData.needInspectDate) }} |
|
|
|
</span> |
|
|
|
<span class="value">{{ formatDate(detailData.needInspectDate) || ' ' }}</span> |
|
|
|
</div> |
|
|
|
|
|
|
|
</div> |
|
|
|
|
|
|
|
<!-- 第四行 --> |
|
|
|
<div class="detail-row"> |
|
|
|
|
|
|
|
<div class="detail-item"> |
|
|
|
<span class="label">排程人:</span> |
|
|
|
<span class="value">{{ detailData.scheduledBy }}</span> |
|
|
|
<span class="value">{{ detailData.scheduledBy || ' ' }}</span> |
|
|
|
</div> |
|
|
|
|
|
|
|
<div class="detail-item"> |
|
|
|
<span class="label">排程时间:</span> |
|
|
|
<span class="value">{{ detailData.scheduledDate }}</span> |
|
|
|
<span class="value">{{ detailData.scheduledDate || ' ' }}</span> |
|
|
|
</div> |
|
|
|
|
|
|
|
<div class="detail-item"> |
|
|
|
@ -87,27 +199,24 @@ |
|
|
|
|
|
|
|
<div class="detail-item"> |
|
|
|
<span class="label">计划验货日期:</span> |
|
|
|
<span class="value"> |
|
|
|
{{ detailData.planStartDate }} |
|
|
|
</span> |
|
|
|
<span class="value">{{ detailData.planStartDate || ' ' }}</span> |
|
|
|
</div> |
|
|
|
|
|
|
|
</div> |
|
|
|
|
|
|
|
<!-- 第五行 --> |
|
|
|
<div class="detail-row"> |
|
|
|
|
|
|
|
<div class="detail-item"> |
|
|
|
<span class="label">QC:</span> |
|
|
|
<span class="value">{{ detailData.qcOperator }}</span> |
|
|
|
<span class="value">{{ detailData.qcOperator || ' ' }}</span> |
|
|
|
</div> |
|
|
|
</div> |
|
|
|
|
|
|
|
</div> |
|
|
|
|
|
|
|
</div> |
|
|
|
</template> |
|
|
|
|
|
|
|
<script> |
|
|
|
import { updateInspectionRequest } from '@/api/inspection/inspectionRequestHeader.js' |
|
|
|
|
|
|
|
export default { |
|
|
|
name: 'InspectionRequestDetail', |
|
|
|
|
|
|
|
@ -118,32 +227,131 @@ export default { |
|
|
|
} |
|
|
|
}, |
|
|
|
|
|
|
|
data() { |
|
|
|
return { |
|
|
|
isEditMode: false, |
|
|
|
saveLoading: false, |
|
|
|
editData: { |
|
|
|
requestNo: '', |
|
|
|
needInspectDate: '', |
|
|
|
inspectAddress: '', |
|
|
|
inspectContract: '' |
|
|
|
} |
|
|
|
} |
|
|
|
}, |
|
|
|
|
|
|
|
computed: { |
|
|
|
// 判断是否为草稿状态 |
|
|
|
isDraftStatus() { |
|
|
|
const status = this.detailData.status || this.detailData.statusDb || '' |
|
|
|
return status === 'Draft' || status === 'draft' || status === '草稿' |
|
|
|
} |
|
|
|
}, |
|
|
|
|
|
|
|
watch: { |
|
|
|
detailData: { |
|
|
|
handler(newVal) { |
|
|
|
if (newVal) { |
|
|
|
this.editData = { |
|
|
|
requestNo: newVal.requestNo, |
|
|
|
needInspectDate: newVal.needInspectDate, |
|
|
|
inspectAddress: newVal.inspectAddress, |
|
|
|
inspectContract: newVal.inspectContract |
|
|
|
} |
|
|
|
} |
|
|
|
}, |
|
|
|
immediate: true, |
|
|
|
deep: true |
|
|
|
} |
|
|
|
}, |
|
|
|
|
|
|
|
methods: { |
|
|
|
// 格式化日期,只显示年月日 |
|
|
|
formatDate(dateStr) { |
|
|
|
if (!dateStr) return '' |
|
|
|
// 如果包含时分秒,截取前10位 |
|
|
|
if (dateStr.length > 10) { |
|
|
|
return dateStr.substring(0, 10) |
|
|
|
} |
|
|
|
return dateStr |
|
|
|
}, |
|
|
|
|
|
|
|
handleEdit() { |
|
|
|
this.editData = { |
|
|
|
requestNo: this.detailData.requestNo, |
|
|
|
needInspectDate: this.detailData.needInspectDate, |
|
|
|
inspectAddress: this.detailData.inspectAddress, |
|
|
|
inspectContract: this.detailData.inspectContract |
|
|
|
} |
|
|
|
this.isEditMode = true |
|
|
|
}, |
|
|
|
|
|
|
|
handleCancelEdit() { |
|
|
|
this.isEditMode = false |
|
|
|
this.editData = { |
|
|
|
requestNo: this.detailData.requestNo, |
|
|
|
needInspectDate: this.detailData.needInspectDate, |
|
|
|
inspectAddress: this.detailData.inspectAddress, |
|
|
|
inspectContract: this.detailData.inspectContract |
|
|
|
} |
|
|
|
}, |
|
|
|
|
|
|
|
// 保存修改 |
|
|
|
async handleSave() { |
|
|
|
if (!this.editData.needInspectDate) { |
|
|
|
this.$message.warning('请选择建议验货日期') |
|
|
|
return |
|
|
|
} |
|
|
|
</script> |
|
|
|
|
|
|
|
this.saveLoading = true |
|
|
|
try { |
|
|
|
const submitData = { |
|
|
|
requestNo: this.editData.requestNo, |
|
|
|
needInspectDate: this.editData.needInspectDate, |
|
|
|
inspectAddress: this.editData.inspectAddress, |
|
|
|
inspectContract: this.editData.inspectContract |
|
|
|
} |
|
|
|
|
|
|
|
await updateInspectionRequest(submitData) |
|
|
|
this.$message.success('修改成功') |
|
|
|
|
|
|
|
// 触发父组件刷新主表数据 |
|
|
|
this.$emit('update-success') // ← 已经有了,确保这行存在 |
|
|
|
|
|
|
|
// 退出编辑模式 |
|
|
|
this.isEditMode = false |
|
|
|
|
|
|
|
} catch (error) { |
|
|
|
console.error('保存失败:', error) |
|
|
|
this.$message.error(error.message || '修改失败,请稍后重试') |
|
|
|
} finally { |
|
|
|
this.saveLoading = false |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
</script> |
|
|
|
<style scoped lang="scss"> |
|
|
|
|
|
|
|
.detail-container { |
|
|
|
padding: 15px 20px; |
|
|
|
padding: 10px 20px; // 从15px改为10px |
|
|
|
border: 1px solid #dcdfe6; |
|
|
|
background: #fff; |
|
|
|
position: relative; |
|
|
|
} |
|
|
|
|
|
|
|
// 左上角按钮区域 |
|
|
|
.header-buttons { |
|
|
|
position: absolute; |
|
|
|
top: 10px; // 从15px改为10px,与padding保持一致 |
|
|
|
right: 20px; |
|
|
|
display: flex; |
|
|
|
gap: 10px; |
|
|
|
} |
|
|
|
|
|
|
|
.detail-row { |
|
|
|
display: flex; |
|
|
|
align-items: center; |
|
|
|
margin-bottom: 18px; |
|
|
|
margin-bottom: 8px; // 从18px改为8px |
|
|
|
flex-wrap: wrap; |
|
|
|
} |
|
|
|
|
|
|
|
.detail-item { |
|
|
|
@ -151,6 +359,7 @@ export default { |
|
|
|
align-items: center; |
|
|
|
width: 300px; |
|
|
|
margin-right: 30px; |
|
|
|
margin-bottom: 6px; // 从10px改为6px |
|
|
|
} |
|
|
|
|
|
|
|
.detail-item.long { |
|
|
|
@ -166,6 +375,7 @@ export default { |
|
|
|
font-size: 14px; |
|
|
|
font-weight: 500; |
|
|
|
white-space: nowrap; |
|
|
|
min-width: 85px; |
|
|
|
} |
|
|
|
|
|
|
|
.value { |
|
|
|
@ -182,4 +392,33 @@ export default { |
|
|
|
white-space: nowrap; |
|
|
|
} |
|
|
|
|
|
|
|
.value.disabled { |
|
|
|
background: #f5f7fa; |
|
|
|
color: #c0c4cc; |
|
|
|
cursor: not-allowed; |
|
|
|
} |
|
|
|
|
|
|
|
.edit-input { |
|
|
|
flex: 1; |
|
|
|
|
|
|
|
/deep/ .el-input__inner { |
|
|
|
height: 28px; |
|
|
|
line-height: 28px; |
|
|
|
font-size: 14px; |
|
|
|
} |
|
|
|
|
|
|
|
/deep/ .el-date-editor .el-input__inner { |
|
|
|
padding-left: 10px; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
.edit-actions { |
|
|
|
display: flex; |
|
|
|
justify-content: center; |
|
|
|
gap: 15px; |
|
|
|
margin-top: 15px; // 从20px改为15px |
|
|
|
padding-top: 12px; // 从15px改为12px |
|
|
|
border-top: 1px solid #ebeef5; |
|
|
|
} |
|
|
|
|
|
|
|
</style> |