feat: 完成售后投诉流程全链路优化与功能完善
本次提交完成了多项核心优化与功能新增: 1. 重构投诉受理流程状态,移除冗余的执行反馈阶段,简化为4个流程节点 2. 新增售后单关联客户、下游用户、工程信息等扩展字段,完善基础信息采集 3. 新增部门结构化意见表单与预览组件,优化部门意见填写与展示流程 4. 新增售后意见汇总页面,支持流程阶段筛选与详情查看 5. 优化合同列表页面,新增重置筛选按钮与默认备注逻辑 6. 新增PDF导出功能,完善钢卷信息展示列 7. 修复逻辑删除级联问题,新增任务过滤逻辑保障数据一致性
This commit is contained in:
@@ -0,0 +1,146 @@
|
||||
<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>
|
||||
Reference in New Issue
Block a user