Files
klp-oa/klp-ui/src/views/wms/post/objection/components/DeptOpinionForm.vue
砂糖 da01bfaa48 feat: 完成售后投诉流程全链路优化与功能完善
本次提交完成了多项核心优化与功能新增:
1.  重构投诉受理流程状态,移除冗余的执行反馈阶段,简化为4个流程节点
2.  新增售后单关联客户、下游用户、工程信息等扩展字段,完善基础信息采集
3.  新增部门结构化意见表单与预览组件,优化部门意见填写与展示流程
4.  新增售后意见汇总页面,支持流程阶段筛选与详情查看
5.  优化合同列表页面,新增重置筛选按钮与默认备注逻辑
6.  新增PDF导出功能,完善钢卷信息展示列
7.  修复逻辑删除级联问题,新增任务过滤逻辑保障数据一致性
2026-06-29 14:58:24 +08:00

147 lines
5.7 KiB
Vue

<template>
<div class="dept-form-container">
<!-- 生产部 deptId=1 -->
<template v-if="deptId === 1">
<el-form-item label="内部调查情况" prop="internalInvestigation">
<el-input v-model="formData.internalInvestigation" type="textarea" :rows="3" placeholder="请描述内部调查情况" @input="emitJson" />
</el-form-item>
<el-row :gutter="16">
<el-col :span="12">
<el-form-item label="确认人" prop="internalConfirmer">
<el-input v-model="formData.internalConfirmer" placeholder="请输入确认人" @input="emitJson" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="日期" prop="internalConfirmDate">
<el-date-picker v-model="formData.internalConfirmDate" type="date" value-format="yyyy-MM-dd" placeholder="选择日期" style="width:100%" @change="emitJson" />
</el-form-item>
</el-col>
</el-row>
<el-form-item label="外部调查情况" prop="externalInvestigation">
<el-input v-model="formData.externalInvestigation" type="textarea" :rows="3" placeholder="请描述外部调查情况" @input="emitJson" />
</el-form-item>
<el-row :gutter="16">
<el-col :span="12">
<el-form-item label="确认人" prop="externalConfirmer">
<el-input v-model="formData.externalConfirmer" placeholder="请输入确认人" @input="emitJson" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="日期" prop="externalConfirmDate">
<el-date-picker v-model="formData.externalConfirmDate" type="date" value-format="yyyy-MM-dd" placeholder="选择日期" style="width:100%" @change="emitJson" />
</el-form-item>
</el-col>
</el-row>
<el-form-item label="责任单位" prop="responsibleUnit">
<el-input v-model="formData.responsibleUnit" placeholder="请输入责任单位" @input="emitJson" />
</el-form-item>
<el-row :gutter="16">
<el-col :span="12">
<el-form-item label="接收人" prop="receiver">
<el-input v-model="formData.receiver" placeholder="请输入接收人" @input="emitJson" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="接受日期" prop="acceptDate">
<el-date-picker v-model="formData.acceptDate" type="date" value-format="yyyy-MM-dd" placeholder="选择日期" style="width:100%" @change="emitJson" />
</el-form-item>
</el-col>
</el-row>
</template>
<!-- 质量部 deptId=2 -->
<template v-else-if="deptId === 2">
<el-form-item label="产生原因" prop="cause">
<el-input v-model="formData.cause" type="textarea" :rows="3" placeholder="请描述产生原因" @input="emitJson" />
</el-form-item>
<el-form-item label="流出原因" prop="escapeReason">
<el-input v-model="formData.escapeReason" type="textarea" :rows="3" placeholder="请描述流出原因" @input="emitJson" />
</el-form-item>
<el-form-item label="纠正措施" prop="correctiveAction">
<el-input v-model="formData.correctiveAction" type="textarea" :rows="3" placeholder="请输入纠正措施" @input="emitJson" />
</el-form-item>
<el-form-item label="预计整改完成日期" prop="rectifyDate">
<el-date-picker v-model="formData.rectifyDate" type="date" value-format="yyyy-MM-dd" placeholder="选择日期" style="width:100%" @change="emitJson" />
</el-form-item>
<el-form-item label="主管意见" prop="supervisorOpinion">
<el-input v-model="formData.supervisorOpinion" type="textarea" :rows="2" placeholder="请输入主管意见" @input="emitJson" />
</el-form-item>
</template>
<!-- 销售部 deptId=3 -->
<template v-else>
<el-form-item label="处理意见" prop="handlingOpinion">
<el-input v-model="formData.handlingOpinion" type="textarea" :rows="4" placeholder="请输入处理意见" @input="emitJson" />
</el-form-item>
<el-form-item label="领导意见" prop="leaderOpinion">
<el-input v-model="formData.leaderOpinion" type="textarea" :rows="3" placeholder="请输入领导意见" @input="emitJson" />
</el-form-item>
</template>
</div>
</template>
<script>
export default {
name: 'DeptOpinionForm',
props: {
deptId: {
type: Number,
required: true
},
jsonData: {
type: String,
default: ''
}
},
data() {
return {
formData: {}
};
},
watch: {
jsonData: {
immediate: true,
handler(val) {
this.parseJson(val);
}
},
deptId() {
this.parseJson(this.jsonData);
}
},
methods: {
parseJson(val) {
const defaults = this.getDefaults();
if (val) {
try {
const parsed = JSON.parse(val);
this.formData = { ...defaults, ...parsed };
} catch (e) {
this.formData = { ...defaults };
}
} else {
this.formData = { ...defaults };
}
},
getDefaults() {
if (this.deptId === 1) {
return { internalInvestigation: '', internalConfirmer: '', internalConfirmDate: '', externalInvestigation: '', externalConfirmer: '', externalConfirmDate: '', responsibleUnit: '', receiver: '', acceptDate: '' };
} else if (this.deptId === 2) {
return { cause: '', escapeReason: '', correctiveAction: '', rectifyDate: '', supervisorOpinion: '' };
} else {
return { handlingOpinion: '', leaderOpinion: '' };
}
},
emitJson() {
this.$emit('input', JSON.stringify(this.formData));
}
}
};
</script>
<style scoped>
.dept-form-container {
width: 100%;
}
</style>