refactor(wms/post): 优化售后与流程页面功能
1. 调整售后列表页拖拽面板初始尺寸与标题 2. 新增部门参数传递与处理逻辑到售后相关页面 3. 移除售后意见页的部门切换 tabs 相关代码 4. 新增盘库、排产、设备维修流程文档
This commit is contained in:
@@ -106,6 +106,83 @@ graph TD
|
||||
classDef s5 fill:#fff1f0,stroke:#f5222d,color:#303133,stroke-width:2px
|
||||
classDef dec fill:#f9f0ff,stroke:#722ed1,color:#303133,stroke-width:2px
|
||||
linkStyle default stroke:#bfbfbf,stroke-width:2px
|
||||
`,
|
||||
|
||||
inventoryCheck: `
|
||||
graph TD
|
||||
A["<b>创建盘库单</b><br/>填写盘库单基本信息<br/>添加盘库计划"]:::c1
|
||||
|
||||
A --> B["<b>盘库计划</b><br/>设定起止时间<br/>选择库区类型"]:::c2
|
||||
B --> C{"<b>库区类型?</b>"}:::cdec
|
||||
|
||||
C -->|逻辑库| D["<b>获取库存快照</b><br/>记录当前时间节点<br/>库存情况"]:::c3
|
||||
C -->|物理库| E["<b>获取库存快照</b><br/>记录当前时间节点<br/>库存情况"]:::c3
|
||||
E --> F["<b>记录吞吐记录</b><br/>额外记录物理库<br/>出入库流水明细"]:::c4
|
||||
|
||||
D --> G["<b>人工实地盘库</b><br/>按盘库计划执行<br/>录入实际库存数据"]:::c5
|
||||
F --> G
|
||||
|
||||
G --> H["<b>系统自动对照</b><br/>快照库存 vs 实际库存<br/>逐项比对查找差异"]:::c6
|
||||
|
||||
H --> I["<b>盘亏明细</b><br/>系统有 实际无<br/>库存缺失项"]:::loss
|
||||
H --> J["<b>盘盈明细</b><br/>实际有 系统无<br/>库存多出项"]:::gain
|
||||
H --> K["<b>明细差异</b><br/>数据不一致<br/>数量/规格偏差"]:::diff
|
||||
|
||||
I --> L["<b>生成盘库差异报告</b><br/>汇总盘亏/盘盈/差异<br/>存储差异记录"]:::c7
|
||||
J --> L
|
||||
K --> L
|
||||
|
||||
L --> M(["<b>盘库单封存</b><br/>流程结束"]):::cend
|
||||
|
||||
classDef c1 fill:#409eff,stroke:#337ecc,color:#fff,stroke-width:2px
|
||||
classDef c2 fill:#e6fffa,stroke:#13c2c2,color:#303133,stroke-width:2px
|
||||
classDef cdec fill:#f9f0ff,stroke:#722ed1,color:#303133,stroke-width:2px
|
||||
classDef c3 fill:#f0f5ff,stroke:#597ef7,color:#303133,stroke-width:2px
|
||||
classDef c4 fill:#fff7e6,stroke:#fa8c16,color:#303133,stroke-width:2px
|
||||
classDef c5 fill:#e6f7ff,stroke:#1890ff,color:#303133,stroke-width:2px
|
||||
classDef c6 fill:#fffbe6,stroke:#fadb14,color:#303133,stroke-width:2px
|
||||
classDef loss fill:#fff1f0,stroke:#f5222d,color:#303133,stroke-width:2px
|
||||
classDef gain fill:#f6ffed,stroke:#52c41a,color:#303133,stroke-width:2px
|
||||
classDef diff fill:#fff0f6,stroke:#eb2f96,color:#303133,stroke-width:2px
|
||||
classDef c7 fill:#f0f5ff,stroke:#597ef7,color:#303133,stroke-width:2px
|
||||
classDef cend fill:#dcf7e8,stroke:#52c41a,color:#303133,stroke-width:2px,rx:10,ry:10
|
||||
linkStyle default stroke:#bfbfbf,stroke-width:2px
|
||||
`,
|
||||
|
||||
productionSchedule: `
|
||||
stateDiagram-v2
|
||||
[*] --> 创建排产单: 填写基本信息
|
||||
创建排产单 --> 关联合同获取需求: 选择合同
|
||||
关联合同获取需求 --> 选择需求合并明细: 选取需求<br/>合并相同条目
|
||||
选择需求合并明细 --> 提交审批
|
||||
|
||||
提交审批 --> 审批驳回: 审批不通过
|
||||
提交审批 --> 审批通过: 审批通过
|
||||
|
||||
审批驳回 --> 选择需求合并明细: 退回修改后重新提交
|
||||
|
||||
审批通过 --> 车间接收执行单: 转为执行单推送车间
|
||||
|
||||
车间接收执行单 --> 执行生产: 车间接收
|
||||
车间接收执行单 --> 审批驳回: 车间打回拒绝
|
||||
|
||||
执行生产 --> [*]: 排产完结
|
||||
`,
|
||||
|
||||
equipmentRepair: `
|
||||
stateDiagram-v2
|
||||
[*] --> 创建维修计划: 点选异常巡检记录<br/>绑定记录与异常设备
|
||||
创建维修计划 --> 审批维修计划
|
||||
|
||||
审批维修计划 --> 审批驳回: 审批不通过
|
||||
审批维修计划 --> 审批通过: 审批通过
|
||||
|
||||
审批驳回 --> 创建维修计划: 退回修改后重新提交
|
||||
|
||||
审批通过 --> 逐设备维修记录: 逐一执行设备维修<br/>记录维修过程与结果
|
||||
|
||||
逐设备维修记录 --> 逐设备维修记录: 存在未维修设备
|
||||
逐设备维修记录 --> [*]: 全部设备维修完成<br/>流程结束
|
||||
`
|
||||
}
|
||||
|
||||
@@ -118,6 +195,9 @@ export default {
|
||||
tabs: [
|
||||
{ key: 'steelFullChain', label: '生产全链路流程', icon: 'el-icon-s-operation' },
|
||||
{ key: 'afterSales', label: '售后处理流程', icon: 'el-icon-s-claim' },
|
||||
{ key: 'inventoryCheck', label: '盘库流程', icon: 'el-icon-s-check' },
|
||||
{ key: 'productionSchedule', label: '排产流程', icon: 'el-icon-s-order' },
|
||||
{ key: 'equipmentRepair', label: '设备维修流程', icon: 'el-icon-s-tools' },
|
||||
],
|
||||
svgCache: {},
|
||||
selectedNode: null,
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
<template>
|
||||
<div class="app-container objection-container">
|
||||
<DragResizePanel :initialSize="380" :minSize="280" :maxSize="600">
|
||||
<DragResizePanel :initialSize="280" :minSize="280" :maxSize="600">
|
||||
<template #panelA>
|
||||
<div class="left-panel">
|
||||
<div class="panel-header">
|
||||
<div class="header-title">
|
||||
<i class="el-icon-s-claim"></i>
|
||||
<span>售后单列表</span>
|
||||
<span>售后单</span>
|
||||
<el-button size="mini" type="text" icon="el-icon-refresh" @click="getList" style="margin-left:4px;"
|
||||
title="刷新列表"></el-button>
|
||||
</div>
|
||||
|
||||
@@ -1,11 +1,6 @@
|
||||
<template>
|
||||
<div class="app-container">
|
||||
<div class="filter-bar">
|
||||
<div class="dept-tabs">
|
||||
<span v-for="tab in deptTabs" :key="tab.key" class="dept-tab" :class="{ active: activeDept === tab.key }" @click="switchDept(tab.key)">
|
||||
{{ tab.label }}
|
||||
</span>
|
||||
</div>
|
||||
<el-form :model="queryParams" ref="queryForm" size="small" class="filter-form">
|
||||
<el-form-item label="售后编号">
|
||||
<el-input v-model="queryParams.complaintNo" placeholder="请输入售后编号" clearable @keyup.enter.native="handleQuery" />
|
||||
@@ -125,17 +120,11 @@ export default {
|
||||
coilLoading: false,
|
||||
submitLoading: false,
|
||||
total: 0,
|
||||
activeDept: 'production',
|
||||
deptTabs: [
|
||||
{ key: 'production', label: '生产部' },
|
||||
{ key: 'quality', label: '质量部' },
|
||||
{ key: 'sales', label: '销售部' }
|
||||
],
|
||||
deptMap: { production: 1, quality: 2, sales: 3 },
|
||||
|
||||
queryParams: {
|
||||
pageNum: 1,
|
||||
pageSize: 10,
|
||||
deptId: 1,
|
||||
deptId: undefined,
|
||||
complaintNo: undefined,
|
||||
taskStatus: undefined
|
||||
},
|
||||
@@ -149,15 +138,10 @@ export default {
|
||||
};
|
||||
},
|
||||
created() {
|
||||
this.queryParams.deptId = this.$route.query.deptId != null ? Number(this.$route.query.deptId) : 1;
|
||||
this.getList();
|
||||
},
|
||||
methods: {
|
||||
switchDept(key) {
|
||||
this.activeDept = key;
|
||||
this.queryParams.deptId = this.deptMap[key];
|
||||
this.queryParams.pageNum = 1;
|
||||
this.getList();
|
||||
},
|
||||
getList() {
|
||||
this.loading = true;
|
||||
const params = { ...this.queryParams };
|
||||
@@ -213,8 +197,8 @@ export default {
|
||||
}).finally(() => { this.coilLoading = false; });
|
||||
},
|
||||
getDeptLabel() {
|
||||
const map = { production: '生产部', quality: '质量部', sales: '销售部' };
|
||||
return map[this.activeDept] || '';
|
||||
const map = { 1: '生产部', 2: '质量部', 3: '销售部' };
|
||||
return map[this.queryParams.deptId] || '';
|
||||
},
|
||||
canEdit(row) {
|
||||
const status = (row.acceptInfo || {}).flowStatus;
|
||||
@@ -255,33 +239,6 @@ export default {
|
||||
gap: 20px;
|
||||
flex-wrap: wrap;
|
||||
}
|
||||
.dept-tabs {
|
||||
display: flex;
|
||||
gap: 0;
|
||||
}
|
||||
.dept-tab {
|
||||
padding: 6px 20px;
|
||||
cursor: pointer;
|
||||
font-size: 13px;
|
||||
color: #606266;
|
||||
background: #fff;
|
||||
border: 1px solid #dcdfe6;
|
||||
transition: all 0.2s;
|
||||
}
|
||||
.dept-tab:first-child {
|
||||
border-radius: 4px 0 0 4px;
|
||||
}
|
||||
.dept-tab:last-child {
|
||||
border-radius: 0 4px 4px 0;
|
||||
}
|
||||
.dept-tab.active {
|
||||
color: #fff;
|
||||
background: #409eff;
|
||||
border-color: #409eff;
|
||||
}
|
||||
.dept-tab:hover:not(.active) {
|
||||
color: #409eff;
|
||||
}
|
||||
.filter-form {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
|
||||
@@ -126,6 +126,7 @@ export default {
|
||||
queryParams: {
|
||||
pageNum: 1,
|
||||
pageSize: 10,
|
||||
deptId: undefined,
|
||||
complaintNo: undefined,
|
||||
executeStatus: undefined
|
||||
},
|
||||
@@ -140,6 +141,7 @@ export default {
|
||||
};
|
||||
},
|
||||
created() {
|
||||
this.queryParams.deptId = this.$route.query.deptId != null ? Number(this.$route.query.deptId) : undefined;
|
||||
this.getList();
|
||||
},
|
||||
methods: {
|
||||
@@ -149,6 +151,9 @@ export default {
|
||||
if (params.executeStatus === '' || params.executeStatus === undefined) {
|
||||
delete params.executeStatus;
|
||||
}
|
||||
if (params.deptId === '' || params.deptId === undefined || params.deptId === null) {
|
||||
delete params.deptId;
|
||||
}
|
||||
let complaintNoFilter = params.complaintNo;
|
||||
delete params.complaintNo;
|
||||
listPlanExecuteRel(params).then(response => {
|
||||
|
||||
Reference in New Issue
Block a user