金蝶工序计划
This commit is contained in:
parent
dcd221f21b
commit
c23718c42a
@ -58,3 +58,19 @@ export function updateOperationPlanningMainOperators(data) {
|
||||
data: data
|
||||
})
|
||||
}
|
||||
|
||||
export function syncOperationPlanningMain(data) {
|
||||
return request({
|
||||
url: '/system/operationPlanningMain/sync',
|
||||
method: 'post',
|
||||
data: data
|
||||
})
|
||||
}
|
||||
|
||||
export function queryFromK3OperationPlanningMain(query) {
|
||||
return request({
|
||||
url: '/system/operationPlanningMain/queryFromK3',
|
||||
method: 'get',
|
||||
params: query
|
||||
})
|
||||
}
|
||||
|
||||
@ -34,13 +34,13 @@ export const constantRoutes = [
|
||||
path: '/',
|
||||
component: Layout,
|
||||
hidden: false,
|
||||
redirect: '/home'
|
||||
redirect: '/workbench/index'
|
||||
},
|
||||
{
|
||||
path: '/home',
|
||||
component: Layout,
|
||||
hidden: true,
|
||||
redirect: '/system/productionPlan',
|
||||
redirect: '/workbench/index',
|
||||
children: [
|
||||
{
|
||||
path: '/system/productionPlan',
|
||||
@ -48,20 +48,6 @@ export const constantRoutes = [
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
path: '/system/operationPlanningMain',
|
||||
component: Layout,
|
||||
hidden: false,
|
||||
redirect: to => ({ path: '/system/operationPlanningMain/index', query: to.query }),
|
||||
children: [
|
||||
{
|
||||
path: 'index',
|
||||
component: () => import('@/views/system/operationPlanningMain'),
|
||||
name: 'OperationPlanningMain',
|
||||
meta: { title: '生产计划', icon: 'table' }
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
path: '/workbench',
|
||||
component: Layout,
|
||||
|
||||
@ -72,7 +72,7 @@ export default {
|
||||
return {
|
||||
codeUrl: "",
|
||||
loginForm: {
|
||||
username: "admin",
|
||||
username: "",
|
||||
password: "",
|
||||
rememberMe: false,
|
||||
code: "",
|
||||
@ -121,11 +121,17 @@ export default {
|
||||
const username = Cookies.get("username");
|
||||
const password = Cookies.get("password");
|
||||
const rememberMe = Cookies.get('rememberMe')
|
||||
this.loginForm = {
|
||||
username: username === undefined ? this.loginForm.username : username,
|
||||
password: password === undefined ? this.loginForm.password : decrypt(password),
|
||||
rememberMe: rememberMe === undefined ? false : Boolean(rememberMe)
|
||||
};
|
||||
const remember = rememberMe === true || rememberMe === 'true'
|
||||
|
||||
if (!remember) {
|
||||
Cookies.remove("username");
|
||||
Cookies.remove("password");
|
||||
Cookies.remove('rememberMe');
|
||||
}
|
||||
|
||||
this.loginForm.username = remember ? (username || '') : ''
|
||||
this.loginForm.password = remember ? (password ? decrypt(password) : '') : ''
|
||||
this.loginForm.rememberMe = remember
|
||||
},
|
||||
handleLogin() {
|
||||
this.$refs.loginForm.validate(valid => {
|
||||
|
||||
@ -49,6 +49,8 @@
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
|
||||
|
||||
|
||||
<!-- <el-row :gutter="10" class="mb8">
|
||||
<el-col :span="1.5">
|
||||
<el-button
|
||||
@ -148,7 +150,14 @@
|
||||
<span>{{ parseTime(scope.row.planFinishTime, '{y}-{m}-{d}') }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="状态" width="100" align="center">
|
||||
<el-table-column
|
||||
label="状态"
|
||||
width="100"
|
||||
align="center"
|
||||
:filters="statusFilters"
|
||||
:filter-multiple="false"
|
||||
:filter-method="filterOrderStatus"
|
||||
>
|
||||
<template slot-scope="scope">
|
||||
<el-tag size="mini" :class="statusTagClass(scope.row)">{{ statusText(scope.row) }}</el-tag>
|
||||
</template>
|
||||
@ -205,19 +214,7 @@
|
||||
</div>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="操作" width="170" align="center" class-name="small-padding fixed-width">
|
||||
<template slot-scope="scope">
|
||||
<el-button size="mini" type="text" @click="handleDispatch(scope.row)">下发</el-button>
|
||||
<el-button size="mini" type="text" @click="handleUpdate(scope.row)" v-hasPermi="['system:operationPlanningMain:edit']">编辑</el-button>
|
||||
<el-dropdown @command="cmd => handleMoreCommand(cmd, scope.row)">
|
||||
<span class="more-trigger">更多<i class="el-icon-arrow-down el-icon--right"></i></span>
|
||||
<el-dropdown-menu slot="dropdown">
|
||||
<el-dropdown-item command="viewProcess">查看工序</el-dropdown-item>
|
||||
<el-dropdown-item command="delete" divided>删除</el-dropdown-item>
|
||||
</el-dropdown-menu>
|
||||
</el-dropdown>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
</el-table>
|
||||
|
||||
<pagination
|
||||
@ -239,9 +236,9 @@
|
||||
<template slot="title">
|
||||
<div class="process-drawer__title-line">
|
||||
<span class="process-drawer__title-main">工序详情</span>
|
||||
<span v-if="processDialogBillNo" class="process-drawer__title-kv">工序单号:{{ processDialogBillNo }}</span>
|
||||
<span v-if="processDialogBatchNo" class="process-drawer__title-kv">生产号:{{ processDialogBatchNo }}</span>
|
||||
<span v-if="processDialogProduct" class="process-drawer__title-kv process-drawer__title-product">产品:{{ processDialogProduct }}</span>
|
||||
<span v-if="processDialogBillNo" class="process-drawer__title-kv">单据编码:{{ processDialogBillNo }}</span>
|
||||
<span v-if="processDialogBatchNo" class="process-drawer__title-kv">生产执行单号:{{ processDialogBatchNo }}</span>
|
||||
<span v-if="processDialogProduct" class="process-drawer__title-kv process-drawer__title-product">物料编码:{{ processDialogProduct }}</span>
|
||||
</div>
|
||||
</template>
|
||||
<div class="process-drawer__toolbar">
|
||||
@ -255,6 +252,7 @@
|
||||
:loading="processDialogSaving"
|
||||
:disabled="!processDialogDirtyCount"
|
||||
@click="submitOperatorUpdates"
|
||||
v-hasPermi="['system:operationPlanningMain:updateOperators']"
|
||||
>保存</el-button>
|
||||
</div>
|
||||
</div>
|
||||
@ -410,7 +408,7 @@
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { listOperationPlanningMain, cascadeListOperationPlanningMain, getOperationPlanningMain, delOperationPlanningMain, addOperationPlanningMain, updateOperationPlanningMain, updateOperationPlanningMainOperators, getEquipmentOptions } from "@/api/system/operationPlanningMain";
|
||||
import { listOperationPlanningMain, cascadeListOperationPlanningMain, getOperationPlanningMain, delOperationPlanningMain, addOperationPlanningMain, updateOperationPlanningMain, updateOperationPlanningMainOperators, syncOperationPlanningMain, queryFromK3OperationPlanningMain, getEquipmentOptions } from "@/api/system/operationPlanningMain";
|
||||
|
||||
export default {
|
||||
name: "OperationPlanningMain",
|
||||
@ -429,6 +427,8 @@ export default {
|
||||
processDialogList: [],
|
||||
processDialogOrder: null,
|
||||
processDialogSaving: false,
|
||||
k3SyncLoading: false,
|
||||
k3QueryLoading: false,
|
||||
// 非单个禁用
|
||||
single: true,
|
||||
// 非多个禁用
|
||||
@ -437,6 +437,13 @@ export default {
|
||||
showSearch: true,
|
||||
// 总条数
|
||||
total: 0,
|
||||
statusFilters: [
|
||||
{ text: '未开始', value: '未开始' },
|
||||
{ text: '进行中', value: '进行中' },
|
||||
{ text: '预警', value: '预警' },
|
||||
{ text: '延期', value: '延期' },
|
||||
{ text: '已完成', value: '已完成' }
|
||||
],
|
||||
// 工序计划主表格数据
|
||||
operationPlanningMainList: [],
|
||||
// 弹出层标题
|
||||
@ -469,6 +476,24 @@ export default {
|
||||
'铆焊工段': [
|
||||
'数控激光下料', '数控火焰下料', '数控切管下料', '铆工', '焊工',
|
||||
'激光焊工', '机器人焊接', '打磨', '抛丸', '校形'
|
||||
],
|
||||
'委外中心': [
|
||||
'勤润','泰美','南浦','德宝','圣田','盛懋','智创'
|
||||
],
|
||||
'电钳工段': [
|
||||
'组装线(电气组装配线配盘)','伺服(三相异步)电气测试调试'
|
||||
],
|
||||
'装一工段': [
|
||||
'产品二班 | 一单元', '产品二班 | 二单元', '产品二班 | 三单元', '产品二班 | 四单元',
|
||||
'产品二班 | 五单元', '产品二班 | 六单元', '产品二班 | 七单元', '产品二班 | 八单元',
|
||||
'产品一班 | 一单元', '产品一班 | 二单元', '产品一班 | 三单元', '产品一班 | 四单元',
|
||||
'链条班 | 一单元', '链条班 | 二单元', '链条班 | 三单元', '链条班 | 四单元', '链条班 | 五单元',
|
||||
'测试班 | 一单元', '测试班 | 二单元', '测试班 | 三单元'
|
||||
],
|
||||
'装二工段': [
|
||||
'集成产品组 | 一单元', '集成产品组 | 二单元', '集成产品组 | 三单元', '集成产品组 | 四单元',
|
||||
'减速机班 | 一单元', '减速机班 | 二单元',
|
||||
'装配一组 | 一单元', '装配一组 | 二单元', '装配一组 | 三单元', '装配一组 | 四单元'
|
||||
]
|
||||
},
|
||||
staticOperatorData: {
|
||||
@ -492,6 +517,26 @@ export default {
|
||||
'石泽明', '王晓凡', '郝亮', '耿利刚', '魏辰强', '李永文', '吴海庆', '范会雨',
|
||||
'贾会涛', '吴凯亮', '赵兰争', '董亚军', '王晓军', '代程翼', '魏佳蕊', '齐乐芳',
|
||||
'康坤兰', '赵锦泽', '游梦皓', '牛立革', '宋金娜', '赵科飞'
|
||||
],
|
||||
'电钳工段': [
|
||||
'乔克俭', '乔鑫磊', '贾江涛', '魏兴宁', '韩巍', '温玉博',
|
||||
'王宁', '李士荷', '李卓航', '王烁', '孙涵', '赵泽龙'
|
||||
],
|
||||
'装一工段': [
|
||||
'位会然', '李飞飞', '孙红霞', '王恩静', '宋瑞彦', '胡建泛', '常静肖', '宋丽花',
|
||||
'刘世普', '马宇航', '王欢欢', '韦隆香', '高领琪', '梁红霞', '张晓帅',
|
||||
'姚少鹏', '王晓田', '任泽钊', '牛泽鹏', '胡韶倩', '史傲磊', '于金赐', '孙畅',
|
||||
'宋少然', '李丽哲', '刘翠娟', '李丽彦', '董静柳', '高肖欣', '康文娟', '高丽月',
|
||||
'徐燕', '茹彩肖',
|
||||
'何许娜', '侯乐辉', '李少杰', '李江花', '梅彦恒', '何旭冉'
|
||||
],
|
||||
'装二工段': [
|
||||
'尹哲辉', '李博博', '李建霞', '丁小丽', '周晓冲', '曹海勃', '董永军', '周文茹',
|
||||
'王硕', '王玉博', '任泽寒', '宁素丽',
|
||||
'董士杰', '张佳迅', '边敬辉', '谷飞博', '王东坡', '王玉霞', '刘倚辰', '孙玉凯'
|
||||
],
|
||||
'委外中心': [
|
||||
'刘冉', '吕松林', '王旭得', '张浩宇', '李欣'
|
||||
]
|
||||
},
|
||||
// 表单校验
|
||||
@ -560,6 +605,40 @@ export default {
|
||||
const opts = this.staticOperatorData[workCenter] || [];
|
||||
return opts;
|
||||
},
|
||||
buildK3Query() {
|
||||
const q = this.queryParams || {};
|
||||
const { pageNum, pageSize, ...filters } = q;
|
||||
return { ...filters };
|
||||
},
|
||||
handleSyncK3() {
|
||||
if (this.k3SyncLoading) return;
|
||||
const payload = this.buildK3Query();
|
||||
this.$modal.confirm('确认同步K3数据?').then(() => {
|
||||
this.k3SyncLoading = true;
|
||||
return syncOperationPlanningMain(payload);
|
||||
}).then(() => {
|
||||
this.$modal.msgSuccess('同步成功');
|
||||
this.getList();
|
||||
}).catch(() => {
|
||||
}).finally(() => {
|
||||
this.k3SyncLoading = false;
|
||||
});
|
||||
},
|
||||
handleQueryFromK3() {
|
||||
if (this.k3QueryLoading) return;
|
||||
const query = this.buildK3Query();
|
||||
this.k3QueryLoading = true;
|
||||
queryFromK3OperationPlanningMain(query)
|
||||
.then(response => {
|
||||
const { rows, total, hasTotal } = this.normalizeListResponse(response);
|
||||
this.operationPlanningMainList = (rows || []).map(row => this.decorateRow(row));
|
||||
this.total = hasTotal ? total : this.inferTotalFromPage(rows);
|
||||
this.$modal.msgSuccess('已从K3查询');
|
||||
})
|
||||
.finally(() => {
|
||||
this.k3QueryLoading = false;
|
||||
});
|
||||
},
|
||||
initFromRoute() {
|
||||
const q = (this.$route && this.$route.query) || {};
|
||||
const batchNo = q.batchNo || q.hbytSclh || q.productionOrderNo;
|
||||
@ -726,6 +805,9 @@ export default {
|
||||
if (!row) return '-';
|
||||
return this.calcOrderStatus(row) || '-';
|
||||
},
|
||||
filterOrderStatus(value, row) {
|
||||
return this.statusText(row) === value;
|
||||
},
|
||||
statusTagClass(row) {
|
||||
const text = this.statusText(row);
|
||||
if (text === '未开始') return 'tag-gray';
|
||||
|
||||
@ -41,23 +41,6 @@
|
||||
</div>
|
||||
</div>
|
||||
</el-col>
|
||||
|
||||
<!-- 右侧:出货订单数据 -->
|
||||
<el-col :xs="24" :sm="24" :lg="10">
|
||||
<div class="workbench-panel">
|
||||
<div class="workbench-panel-header" style="display: flex; justify-content: space-between; align-items: center;">
|
||||
<span class="workbench-panel-title">出货订单数据</span>
|
||||
<el-radio-group v-model="shipOrderTimeRange" size="mini" @change="fetchShipOrderData">
|
||||
<el-radio-button label="lastMonth">上月</el-radio-button>
|
||||
<el-radio-button label="thisMonth">本月</el-radio-button>
|
||||
<el-radio-button label="halfYear">近6个月</el-radio-button>
|
||||
</el-radio-group>
|
||||
</div>
|
||||
<div class="workbench-panel-body">
|
||||
<ship-order-data :list="shipOrderList" />
|
||||
</div>
|
||||
</div>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</div>
|
||||
</template>
|
||||
@ -67,14 +50,12 @@ import OverviewCards from './components/OverviewCards'
|
||||
import WorkOrderBar from './components/WorkOrderBar'
|
||||
import ProcessDefectRank from './components/ProcessDefectRank'
|
||||
import WorkOrderProgress from './components/WorkOrderProgress'
|
||||
import ShipOrderData from './components/ShipOrderData'
|
||||
|
||||
import {
|
||||
getOverview,
|
||||
getWorkOrderBar,
|
||||
getProcessDefectRank,
|
||||
getWorkOrderProgress,
|
||||
getShipOrderData
|
||||
getWorkOrderProgress
|
||||
} from '@/api/system/workbench'
|
||||
|
||||
export default {
|
||||
@ -83,8 +64,7 @@ export default {
|
||||
OverviewCards,
|
||||
WorkOrderBar,
|
||||
ProcessDefectRank,
|
||||
WorkOrderProgress,
|
||||
ShipOrderData
|
||||
WorkOrderProgress
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
@ -96,9 +76,7 @@ export default {
|
||||
],
|
||||
workOrderData: { xAxis: [], series: [] },
|
||||
defectRankList: [],
|
||||
workOrderProgressList: [],
|
||||
shipOrderTimeRange: 'lastMonth',
|
||||
shipOrderList: []
|
||||
workOrderProgressList: []
|
||||
}
|
||||
},
|
||||
created() {
|
||||
@ -149,20 +127,6 @@ export default {
|
||||
}).catch(() => {
|
||||
this.mockWorkOrderProgress()
|
||||
})
|
||||
|
||||
// 获取出货订单
|
||||
this.fetchShipOrderData()
|
||||
},
|
||||
fetchShipOrderData() {
|
||||
getShipOrderData({ range: this.shipOrderTimeRange }).then(res => {
|
||||
if (res && res.data && res.data.items) {
|
||||
this.shipOrderList = res.data.items
|
||||
} else {
|
||||
this.mockShipOrderData()
|
||||
}
|
||||
}).catch(() => {
|
||||
this.mockShipOrderData()
|
||||
})
|
||||
},
|
||||
mockOverview() {
|
||||
this.overviewList = [
|
||||
@ -203,16 +167,6 @@ export default {
|
||||
{ workOrderNo: 'MO202112160004', status: '已开工', progress: 67, totalQty: 233 },
|
||||
{ workOrderNo: 'MO202112160005', status: '已开工', progress: 55, totalQty: 983 }
|
||||
]
|
||||
},
|
||||
mockShipOrderData() {
|
||||
this.shipOrderList = [
|
||||
{ customerName: '松下电器(中国)有限公司', yoy: 0.61, orderQty: 3261 },
|
||||
{ customerName: '苹果科技有限公司', yoy: -0.38, orderQty: 3664 },
|
||||
{ customerName: '华为技术有限公司', yoy: 0.47, orderQty: 2735 },
|
||||
{ customerName: '小米科技有限责任公司', yoy: 0.05, orderQty: 3718 },
|
||||
{ customerName: '联想集团', yoy: -0.62, orderQty: 3299 },
|
||||
{ customerName: '广东移动通信有限公司', yoy: -0.18, orderQty: 7058 }
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user