Files
klp-oa/klp-ui/src/views/wms/post/objection/components/FlowOverviewSection.vue
王文昊 3fd207a42c refactor(wms/flow): 调整客诉流程为串行模式并替换质量部为技术部
1.  将原并行的质量部+生产部流程改为技术部→生产部→陈总→吴部长的串行流程
2.  替换所有质量部相关描述为技术部,更新部门映射配置
3.  重构流程状态推进逻辑,新增getNextDept方法简化流程推进
4.  新增表单本地暂存功能,优化列表项UI布局
5.  更新流程步骤展示、状态文案和标签颜色配置
2026-07-13 13:29:49 +08:00

139 lines
3.0 KiB
Vue
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.

<template>
<div v-if="enabled" class="section-container">
<div class="section-title">
<i class="el-icon-s-order"></i>
<span>流程总览 <span class="en-sub">· Process Overview</span></span>
</div>
<el-steps :active="activeStep" align-center class="flow-steps">
<el-step title="技术部处理" icon="el-icon-s-operation" />
<el-step title="生产部处理" icon="el-icon-s-operation" />
<el-step title="陈总审批" icon="el-icon-s-check" />
<el-step title="吴部长处理" icon="el-icon-s-custom" />
<el-step title="已办结" icon="el-icon-circle-check" />
</el-steps>
<div class="current-status">
<span class="status-label">当前阶段</span>
<el-tag :type="tagType" size="small">{{ flowStatusText }}</el-tag>
</div>
</div>
</template>
<script>
export default {
name: 'FlowOverviewSection',
props: {
enabled: {
type: Boolean,
default: true
},
flowStatus: {
type: [Number, String],
default: undefined
}
},
computed: {
/**
* el-steps active 从 0 开始。
* 1=技术部处理→0, 2=生产部处理→1, 3=陈总审批→2, 4=吴部长处理→3, 5=已办结→4
*/
activeStep() {
if (this.flowStatus == null) return -1;
const v = Number(this.flowStatus);
if (v >= 5) return 4;
return v - 1;
},
flowStatusText() {
const map = {
1: '技术部处理中',
2: '生产部处理中',
3: '待陈总审批',
4: '待吴部长处理',
5: '已办结'
};
return map[this.flowStatus] || '未知';
},
tagType() {
const map = {
1: 'warning',
2: 'warning',
3: 'primary',
4: 'warning',
5: 'success'
};
return map[this.flowStatus] || '';
}
}
}
</script>
<style scoped>
.section-container {
margin-bottom: 4px;
}
.section-title {
width: 100%;
font-size: 13px;
font-weight: 600;
color: #1e293b;
margin: 20px 0 10px 0;
padding: 0 0 8px 0;
border-bottom: 1px solid #cbd5e1;
display: flex;
align-items: center;
gap: 8px;
letter-spacing: 0.2px;
}
.section-title .en-sub {
font-size: 11px;
font-weight: 400;
color: #94a3b8;
letter-spacing: 0.2px;
}
.section-title i {
font-size: 14px;
color: #475569;
}
.flow-steps {
padding: 6px 0 4px;
}
.flow-steps >>> .el-step.is-wait .el-step__icon-inner,
.flow-steps >>> .el-step.is-wait .el-step__title {
color: #94a3b8;
}
.flow-steps >>> .el-step.is-process .el-step__icon-inner,
.flow-steps >>> .el-step.is-process .el-step__title {
color: #2563eb;
}
.flow-steps >>> .el-step.is-finish .el-step__icon-inner,
.flow-steps >>> .el-step.is-finish .el-step__title {
color: #52c41a;
}
.flow-steps >>> .el-step__description {
display: none;
}
.current-status {
display: flex;
align-items: center;
justify-content: flex-end;
gap: 6px;
margin-top: 4px;
padding-top: 6px;
border-top: 1px solid #e2e8f0;
}
.status-label {
font-size: 11px;
color: #64748b;
letter-spacing: 0.2px;
}
</style>