金蝶工序计划
This commit is contained in:
parent
dcd221f21b
commit
c23718c42a
@ -58,3 +58,19 @@ export function updateOperationPlanningMainOperators(data) {
|
|||||||
data: 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: '/',
|
path: '/',
|
||||||
component: Layout,
|
component: Layout,
|
||||||
hidden: false,
|
hidden: false,
|
||||||
redirect: '/home'
|
redirect: '/workbench/index'
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
path: '/home',
|
path: '/home',
|
||||||
component: Layout,
|
component: Layout,
|
||||||
hidden: true,
|
hidden: true,
|
||||||
redirect: '/system/productionPlan',
|
redirect: '/workbench/index',
|
||||||
children: [
|
children: [
|
||||||
{
|
{
|
||||||
path: '/system/productionPlan',
|
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',
|
path: '/workbench',
|
||||||
component: Layout,
|
component: Layout,
|
||||||
|
|||||||
@ -72,7 +72,7 @@ export default {
|
|||||||
return {
|
return {
|
||||||
codeUrl: "",
|
codeUrl: "",
|
||||||
loginForm: {
|
loginForm: {
|
||||||
username: "admin",
|
username: "",
|
||||||
password: "",
|
password: "",
|
||||||
rememberMe: false,
|
rememberMe: false,
|
||||||
code: "",
|
code: "",
|
||||||
@ -121,11 +121,17 @@ export default {
|
|||||||
const username = Cookies.get("username");
|
const username = Cookies.get("username");
|
||||||
const password = Cookies.get("password");
|
const password = Cookies.get("password");
|
||||||
const rememberMe = Cookies.get('rememberMe')
|
const rememberMe = Cookies.get('rememberMe')
|
||||||
this.loginForm = {
|
const remember = rememberMe === true || rememberMe === 'true'
|
||||||
username: username === undefined ? this.loginForm.username : username,
|
|
||||||
password: password === undefined ? this.loginForm.password : decrypt(password),
|
if (!remember) {
|
||||||
rememberMe: rememberMe === undefined ? false : Boolean(rememberMe)
|
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() {
|
handleLogin() {
|
||||||
this.$refs.loginForm.validate(valid => {
|
this.$refs.loginForm.validate(valid => {
|
||||||
|
|||||||
@ -49,6 +49,8 @@
|
|||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-form>
|
</el-form>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<!-- <el-row :gutter="10" class="mb8">
|
<!-- <el-row :gutter="10" class="mb8">
|
||||||
<el-col :span="1.5">
|
<el-col :span="1.5">
|
||||||
<el-button
|
<el-button
|
||||||
@ -148,7 +150,14 @@
|
|||||||
<span>{{ parseTime(scope.row.planFinishTime, '{y}-{m}-{d}') }}</span>
|
<span>{{ parseTime(scope.row.planFinishTime, '{y}-{m}-{d}') }}</span>
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</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">
|
<template slot-scope="scope">
|
||||||
<el-tag size="mini" :class="statusTagClass(scope.row)">{{ statusText(scope.row) }}</el-tag>
|
<el-tag size="mini" :class="statusTagClass(scope.row)">{{ statusText(scope.row) }}</el-tag>
|
||||||
</template>
|
</template>
|
||||||
@ -205,19 +214,7 @@
|
|||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</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>
|
</el-table>
|
||||||
|
|
||||||
<pagination
|
<pagination
|
||||||
@ -239,9 +236,9 @@
|
|||||||
<template slot="title">
|
<template slot="title">
|
||||||
<div class="process-drawer__title-line">
|
<div class="process-drawer__title-line">
|
||||||
<span class="process-drawer__title-main">工序详情</span>
|
<span class="process-drawer__title-main">工序详情</span>
|
||||||
<span v-if="processDialogBillNo" class="process-drawer__title-kv">工序单号:{{ processDialogBillNo }}</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="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="processDialogProduct" class="process-drawer__title-kv process-drawer__title-product">物料编码:{{ processDialogProduct }}</span>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
<div class="process-drawer__toolbar">
|
<div class="process-drawer__toolbar">
|
||||||
@ -255,6 +252,7 @@
|
|||||||
:loading="processDialogSaving"
|
:loading="processDialogSaving"
|
||||||
:disabled="!processDialogDirtyCount"
|
:disabled="!processDialogDirtyCount"
|
||||||
@click="submitOperatorUpdates"
|
@click="submitOperatorUpdates"
|
||||||
|
v-hasPermi="['system:operationPlanningMain:updateOperators']"
|
||||||
>保存</el-button>
|
>保存</el-button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@ -410,7 +408,7 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<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 {
|
export default {
|
||||||
name: "OperationPlanningMain",
|
name: "OperationPlanningMain",
|
||||||
@ -429,6 +427,8 @@ export default {
|
|||||||
processDialogList: [],
|
processDialogList: [],
|
||||||
processDialogOrder: null,
|
processDialogOrder: null,
|
||||||
processDialogSaving: false,
|
processDialogSaving: false,
|
||||||
|
k3SyncLoading: false,
|
||||||
|
k3QueryLoading: false,
|
||||||
// 非单个禁用
|
// 非单个禁用
|
||||||
single: true,
|
single: true,
|
||||||
// 非多个禁用
|
// 非多个禁用
|
||||||
@ -437,6 +437,13 @@ export default {
|
|||||||
showSearch: true,
|
showSearch: true,
|
||||||
// 总条数
|
// 总条数
|
||||||
total: 0,
|
total: 0,
|
||||||
|
statusFilters: [
|
||||||
|
{ text: '未开始', value: '未开始' },
|
||||||
|
{ text: '进行中', value: '进行中' },
|
||||||
|
{ text: '预警', value: '预警' },
|
||||||
|
{ text: '延期', value: '延期' },
|
||||||
|
{ text: '已完成', value: '已完成' }
|
||||||
|
],
|
||||||
// 工序计划主表格数据
|
// 工序计划主表格数据
|
||||||
operationPlanningMainList: [],
|
operationPlanningMainList: [],
|
||||||
// 弹出层标题
|
// 弹出层标题
|
||||||
@ -469,6 +476,24 @@ export default {
|
|||||||
'铆焊工段': [
|
'铆焊工段': [
|
||||||
'数控激光下料', '数控火焰下料', '数控切管下料', '铆工', '焊工',
|
'数控激光下料', '数控火焰下料', '数控切管下料', '铆工', '焊工',
|
||||||
'激光焊工', '机器人焊接', '打磨', '抛丸', '校形'
|
'激光焊工', '机器人焊接', '打磨', '抛丸', '校形'
|
||||||
|
],
|
||||||
|
'委外中心': [
|
||||||
|
'勤润','泰美','南浦','德宝','圣田','盛懋','智创'
|
||||||
|
],
|
||||||
|
'电钳工段': [
|
||||||
|
'组装线(电气组装配线配盘)','伺服(三相异步)电气测试调试'
|
||||||
|
],
|
||||||
|
'装一工段': [
|
||||||
|
'产品二班 | 一单元', '产品二班 | 二单元', '产品二班 | 三单元', '产品二班 | 四单元',
|
||||||
|
'产品二班 | 五单元', '产品二班 | 六单元', '产品二班 | 七单元', '产品二班 | 八单元',
|
||||||
|
'产品一班 | 一单元', '产品一班 | 二单元', '产品一班 | 三单元', '产品一班 | 四单元',
|
||||||
|
'链条班 | 一单元', '链条班 | 二单元', '链条班 | 三单元', '链条班 | 四单元', '链条班 | 五单元',
|
||||||
|
'测试班 | 一单元', '测试班 | 二单元', '测试班 | 三单元'
|
||||||
|
],
|
||||||
|
'装二工段': [
|
||||||
|
'集成产品组 | 一单元', '集成产品组 | 二单元', '集成产品组 | 三单元', '集成产品组 | 四单元',
|
||||||
|
'减速机班 | 一单元', '减速机班 | 二单元',
|
||||||
|
'装配一组 | 一单元', '装配一组 | 二单元', '装配一组 | 三单元', '装配一组 | 四单元'
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
staticOperatorData: {
|
staticOperatorData: {
|
||||||
@ -492,6 +517,26 @@ export default {
|
|||||||
'石泽明', '王晓凡', '郝亮', '耿利刚', '魏辰强', '李永文', '吴海庆', '范会雨',
|
'石泽明', '王晓凡', '郝亮', '耿利刚', '魏辰强', '李永文', '吴海庆', '范会雨',
|
||||||
'贾会涛', '吴凯亮', '赵兰争', '董亚军', '王晓军', '代程翼', '魏佳蕊', '齐乐芳',
|
'贾会涛', '吴凯亮', '赵兰争', '董亚军', '王晓军', '代程翼', '魏佳蕊', '齐乐芳',
|
||||||
'康坤兰', '赵锦泽', '游梦皓', '牛立革', '宋金娜', '赵科飞'
|
'康坤兰', '赵锦泽', '游梦皓', '牛立革', '宋金娜', '赵科飞'
|
||||||
|
],
|
||||||
|
'电钳工段': [
|
||||||
|
'乔克俭', '乔鑫磊', '贾江涛', '魏兴宁', '韩巍', '温玉博',
|
||||||
|
'王宁', '李士荷', '李卓航', '王烁', '孙涵', '赵泽龙'
|
||||||
|
],
|
||||||
|
'装一工段': [
|
||||||
|
'位会然', '李飞飞', '孙红霞', '王恩静', '宋瑞彦', '胡建泛', '常静肖', '宋丽花',
|
||||||
|
'刘世普', '马宇航', '王欢欢', '韦隆香', '高领琪', '梁红霞', '张晓帅',
|
||||||
|
'姚少鹏', '王晓田', '任泽钊', '牛泽鹏', '胡韶倩', '史傲磊', '于金赐', '孙畅',
|
||||||
|
'宋少然', '李丽哲', '刘翠娟', '李丽彦', '董静柳', '高肖欣', '康文娟', '高丽月',
|
||||||
|
'徐燕', '茹彩肖',
|
||||||
|
'何许娜', '侯乐辉', '李少杰', '李江花', '梅彦恒', '何旭冉'
|
||||||
|
],
|
||||||
|
'装二工段': [
|
||||||
|
'尹哲辉', '李博博', '李建霞', '丁小丽', '周晓冲', '曹海勃', '董永军', '周文茹',
|
||||||
|
'王硕', '王玉博', '任泽寒', '宁素丽',
|
||||||
|
'董士杰', '张佳迅', '边敬辉', '谷飞博', '王东坡', '王玉霞', '刘倚辰', '孙玉凯'
|
||||||
|
],
|
||||||
|
'委外中心': [
|
||||||
|
'刘冉', '吕松林', '王旭得', '张浩宇', '李欣'
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
// 表单校验
|
// 表单校验
|
||||||
@ -560,6 +605,40 @@ export default {
|
|||||||
const opts = this.staticOperatorData[workCenter] || [];
|
const opts = this.staticOperatorData[workCenter] || [];
|
||||||
return opts;
|
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() {
|
initFromRoute() {
|
||||||
const q = (this.$route && this.$route.query) || {};
|
const q = (this.$route && this.$route.query) || {};
|
||||||
const batchNo = q.batchNo || q.hbytSclh || q.productionOrderNo;
|
const batchNo = q.batchNo || q.hbytSclh || q.productionOrderNo;
|
||||||
@ -726,6 +805,9 @@ export default {
|
|||||||
if (!row) return '-';
|
if (!row) return '-';
|
||||||
return this.calcOrderStatus(row) || '-';
|
return this.calcOrderStatus(row) || '-';
|
||||||
},
|
},
|
||||||
|
filterOrderStatus(value, row) {
|
||||||
|
return this.statusText(row) === value;
|
||||||
|
},
|
||||||
statusTagClass(row) {
|
statusTagClass(row) {
|
||||||
const text = this.statusText(row);
|
const text = this.statusText(row);
|
||||||
if (text === '未开始') return 'tag-gray';
|
if (text === '未开始') return 'tag-gray';
|
||||||
|
|||||||
@ -41,23 +41,6 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</el-col>
|
</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>
|
</el-row>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
@ -67,14 +50,12 @@ import OverviewCards from './components/OverviewCards'
|
|||||||
import WorkOrderBar from './components/WorkOrderBar'
|
import WorkOrderBar from './components/WorkOrderBar'
|
||||||
import ProcessDefectRank from './components/ProcessDefectRank'
|
import ProcessDefectRank from './components/ProcessDefectRank'
|
||||||
import WorkOrderProgress from './components/WorkOrderProgress'
|
import WorkOrderProgress from './components/WorkOrderProgress'
|
||||||
import ShipOrderData from './components/ShipOrderData'
|
|
||||||
|
|
||||||
import {
|
import {
|
||||||
getOverview,
|
getOverview,
|
||||||
getWorkOrderBar,
|
getWorkOrderBar,
|
||||||
getProcessDefectRank,
|
getProcessDefectRank,
|
||||||
getWorkOrderProgress,
|
getWorkOrderProgress
|
||||||
getShipOrderData
|
|
||||||
} from '@/api/system/workbench'
|
} from '@/api/system/workbench'
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
@ -83,8 +64,7 @@ export default {
|
|||||||
OverviewCards,
|
OverviewCards,
|
||||||
WorkOrderBar,
|
WorkOrderBar,
|
||||||
ProcessDefectRank,
|
ProcessDefectRank,
|
||||||
WorkOrderProgress,
|
WorkOrderProgress
|
||||||
ShipOrderData
|
|
||||||
},
|
},
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
@ -96,9 +76,7 @@ export default {
|
|||||||
],
|
],
|
||||||
workOrderData: { xAxis: [], series: [] },
|
workOrderData: { xAxis: [], series: [] },
|
||||||
defectRankList: [],
|
defectRankList: [],
|
||||||
workOrderProgressList: [],
|
workOrderProgressList: []
|
||||||
shipOrderTimeRange: 'lastMonth',
|
|
||||||
shipOrderList: []
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
created() {
|
created() {
|
||||||
@ -149,20 +127,6 @@ export default {
|
|||||||
}).catch(() => {
|
}).catch(() => {
|
||||||
this.mockWorkOrderProgress()
|
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() {
|
mockOverview() {
|
||||||
this.overviewList = [
|
this.overviewList = [
|
||||||
@ -203,16 +167,6 @@ export default {
|
|||||||
{ workOrderNo: 'MO202112160004', status: '已开工', progress: 67, totalQty: 233 },
|
{ workOrderNo: 'MO202112160004', status: '已开工', progress: 67, totalQty: 233 },
|
||||||
{ workOrderNo: 'MO202112160005', status: '已开工', progress: 55, totalQty: 983 }
|
{ 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