生产管理
This commit is contained in:
parent
2ab8a99ff5
commit
c847ba1595
@ -173,3 +173,26 @@ export function orderSplit(data) {
|
|||||||
data
|
data
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export function getDetailTree(data) {
|
||||||
|
return request({
|
||||||
|
url: 'base/order/getDetailTree',
|
||||||
|
method: 'get',
|
||||||
|
params: data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
export function getDetailTreeInfo(data) {
|
||||||
|
return request({
|
||||||
|
url: 'base/order/getDetailTreeInfoById',
|
||||||
|
method: 'get',
|
||||||
|
params: data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
export function orderStop(data) {
|
||||||
|
return request({
|
||||||
|
url: 'base/order/stop',
|
||||||
|
method: 'post',
|
||||||
|
params: data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
27
src/assets/icons/svg/back.svg
Normal file
27
src/assets/icons/svg/back.svg
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<svg width="72px" height="72px" viewBox="0 0 40 40" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||||
|
<title>rollback</title>
|
||||||
|
<defs>
|
||||||
|
<filter x="-1.1%" y="-5.8%" width="102.1%" height="115.3%" filterUnits="objectBoundingBox" id="filter-1">
|
||||||
|
<feOffset dx="0" dy="5" in="SourceAlpha" result="shadowOffsetOuter1"></feOffset>
|
||||||
|
<feGaussianBlur stdDeviation="6" in="shadowOffsetOuter1" result="shadowBlurOuter1"></feGaussianBlur>
|
||||||
|
<feColorMatrix values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.0926573427 0" type="matrix" in="shadowBlurOuter1" result="shadowMatrixOuter1"></feColorMatrix>
|
||||||
|
<feMerge>
|
||||||
|
<feMergeNode in="shadowMatrixOuter1"></feMergeNode>
|
||||||
|
<feMergeNode in="SourceGraphic"></feMergeNode>
|
||||||
|
</feMerge>
|
||||||
|
</filter>
|
||||||
|
</defs>
|
||||||
|
<g id="页面" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
|
||||||
|
<g id="页内多种导航方式" transform="translate(-1914.000000, -745.000000)" fill-rule="nonzero">
|
||||||
|
<g id="编组-16" filter="url(#filter-1)" transform="translate(94.000000, 641.000000)">
|
||||||
|
<g id="编组-3备份" transform="translate(1816.000000, 96.000000)">
|
||||||
|
<g id="rollback" transform="translate(16.000000, 15.000000)">
|
||||||
|
<rect id="矩形" fill="#000000" opacity="0" x="0" y="0" width="20" height="20"></rect>
|
||||||
|
<path d="M11.390625,3.78125 L5.71875,3.78125 L5.71875,2.625 C5.71875,2.5203125 5.5984375,2.4625 5.5171875,2.5265625 L3.2984375,4.2765625 C3.234375,4.3265625 3.234375,4.4234375 3.2984375,4.4734375 L5.5171875,6.2234375 C5.5984375,6.2875 5.71875,6.2296875 5.71875,6.125 L5.71875,4.96875 L11.203125,4.96875 C11.7554097,4.96875 12.203125,5.41646525 12.203125,5.96875 L12.203125,11.3125 C12.203125,11.8647847 11.7554097,12.3125 11.203125,12.3125 L2.93775156,12.3125 L2.93775156,12.3125 C2.55569144,12.3125 2.36466138,12.4938859 2.36466138,12.8566576 C2.36466138,13.5 2.93775156,13.5 2.93775156,13.5 C2.93775156,13.5 5.75537604,13.5 11.390625,13.5 C13,13.5 13.390625,12.8986083 13.390625,11.9909216 L13.390625,4.96875 C13.390625,4.06071182 13,3.78125 11.390625,3.78125 Z" id="路径" fill="#0B58FF"></path>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 2.4 KiB |
@ -89,6 +89,7 @@ export default {
|
|||||||
id: '',
|
id: '',
|
||||||
name: '',
|
name: '',
|
||||||
code: '',
|
code: '',
|
||||||
|
grade:1,
|
||||||
planQuantity: '',
|
planQuantity: '',
|
||||||
planProductId: '',
|
planProductId: '',
|
||||||
specifications:undefined,
|
specifications:undefined,
|
||||||
|
@ -0,0 +1,37 @@
|
|||||||
|
<!--
|
||||||
|
* @Author: zhp
|
||||||
|
* @Date: 2024-09-06 14:44:06
|
||||||
|
* @LastEditTime: 2024-09-09 16:31:04
|
||||||
|
* @LastEditors: zhp
|
||||||
|
* @Description:
|
||||||
|
-->
|
||||||
|
<template>
|
||||||
|
<el-button @click="handleRoute" type="text"> {{ injectData.workOrderNum }} </el-button>
|
||||||
|
</template>
|
||||||
|
<script>
|
||||||
|
import { orderAssignmentList } from '@/api/base/orderManage'
|
||||||
|
export default {
|
||||||
|
props: {
|
||||||
|
injectData: {
|
||||||
|
type: Object,
|
||||||
|
default: () => ({}),
|
||||||
|
},
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
async handleRoute() {
|
||||||
|
const res = await orderAssignmentList({ orderIdList: [this.injectData.id] })
|
||||||
|
console.log(res.data);
|
||||||
|
let arr = []
|
||||||
|
res.data[this.injectData.id].forEach((ele) => {
|
||||||
|
arr.push(ele.workOrderId)
|
||||||
|
});
|
||||||
|
let woIdString = arr.join(',')
|
||||||
|
console.log(woIdString);
|
||||||
|
|
||||||
|
this.$router.push({
|
||||||
|
path: '/produce/core-work-order-detail?woIdString=' + woIdString
|
||||||
|
})
|
||||||
|
}
|
||||||
|
},
|
||||||
|
};
|
||||||
|
</script>
|
@ -31,9 +31,10 @@
|
|||||||
</template>
|
</template>
|
||||||
<script>
|
<script>
|
||||||
import { parseTime } from '@/utils/ruoyi'
|
import { parseTime } from '@/utils/ruoyi'
|
||||||
import { getOrderPage, orderDelete, customerList, orderFinish, orderVoid } from '@/api/base/orderManage'
|
import { getOrderPage, orderDelete, customerList, orderFinish, orderVoid, orderStop } from '@/api/base/orderManage'
|
||||||
import OrderAdd from './components/orderAdd'
|
import OrderAdd from './components/orderAdd'
|
||||||
import orderSplit from './components/orderSplit'
|
import orderSplit from './components/orderSplit'
|
||||||
|
import orderNum from './components/orderNum.vue'
|
||||||
|
|
||||||
import AddWorkOrder from './components/addWorkOrder'
|
import AddWorkOrder from './components/addWorkOrder'
|
||||||
import { publicFormatter } from '@/utils/dict'
|
import { publicFormatter } from '@/utils/dict'
|
||||||
@ -98,7 +99,8 @@ const tableProps = [
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
prop: 'workOrderNum',
|
prop: 'workOrderNum',
|
||||||
label: '工单数量'
|
label: '工单数量',
|
||||||
|
subcomponent: orderNum,
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
export default {
|
export default {
|
||||||
@ -305,6 +307,22 @@ export default {
|
|||||||
]
|
]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
: undefined,
|
||||||
|
this.$auth.hasPermi('base:order-manage:stop')
|
||||||
|
? {
|
||||||
|
type: 'stop',
|
||||||
|
btnName: '终止',
|
||||||
|
// showParam: {
|
||||||
|
// type: '&',
|
||||||
|
// data: [
|
||||||
|
// {
|
||||||
|
// type: 'equal',
|
||||||
|
// name: 'status',
|
||||||
|
// value: 1
|
||||||
|
// }
|
||||||
|
// ]
|
||||||
|
// }
|
||||||
|
}
|
||||||
: undefined
|
: undefined
|
||||||
].filter((v) => v),
|
].filter((v) => v),
|
||||||
addOrEditTitle: '',
|
addOrEditTitle: '',
|
||||||
@ -333,15 +351,15 @@ export default {
|
|||||||
name: this.queryParams.name,
|
name: this.queryParams.name,
|
||||||
status: this.queryParams.status,
|
status: this.queryParams.status,
|
||||||
lastIssuedTime: this.queryParams.lastIssuedTime,
|
lastIssuedTime: this.queryParams.lastIssuedTime,
|
||||||
parentId: row.parentId
|
parentId: row.id
|
||||||
}
|
}
|
||||||
const response = await getOrderPage(queryParams)
|
const response = await getOrderPage(queryParams)
|
||||||
row.children = response.data.records
|
// row.children = response.data.records
|
||||||
// this.list.forEach((ele) => {
|
this.list.forEach((ele) => {
|
||||||
// if (ele.parentId === row.parentId) {
|
if (ele.id === row.id) {
|
||||||
this.$set(this.list[row._pageIndex-1], 'children', response.data.records); // 展开该行
|
this.$set(this.list[row._pageIndex-1], 'children', response.data.records); // 展开该行
|
||||||
// }
|
}
|
||||||
// })
|
})
|
||||||
row.hasChildren = true;
|
row.hasChildren = true;
|
||||||
this.$set(row, 'expanded', true); // 展开该行
|
this.$set(row, 'expanded', true); // 展开该行
|
||||||
} else {
|
} else {
|
||||||
@ -356,7 +374,6 @@ export default {
|
|||||||
getOrderPage({...this.queryParams}).then(res => {
|
getOrderPage({...this.queryParams}).then(res => {
|
||||||
let arr = res.data.records || []
|
let arr = res.data.records || []
|
||||||
this.total = res.data.total || 0
|
this.total = res.data.total || 0
|
||||||
console.log(11111);
|
|
||||||
// if (arr.length > 0) {
|
// if (arr.length > 0) {
|
||||||
// customerList().then(result => {
|
// customerList().then(result => {
|
||||||
// let tempData = result.data || []
|
// let tempData = result.data || []
|
||||||
@ -445,6 +462,11 @@ export default {
|
|||||||
case 'complete':
|
case 'complete':
|
||||||
this.handleComplete(val.data)
|
this.handleComplete(val.data)
|
||||||
break
|
break
|
||||||
|
case 'stop':
|
||||||
|
orderStop({ id: val.data.id }).then((res) => {
|
||||||
|
this.getList()
|
||||||
|
})
|
||||||
|
break
|
||||||
default:
|
default:
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
@ -108,8 +108,15 @@
|
|||||||
<!-- <div :class="{ active: activeModule === 'useInfo' }" @click="toggleTab('useInfo')">用料信息</div> -->
|
<!-- <div :class="{ active: activeModule === 'useInfo' }" @click="toggleTab('useInfo')">用料信息</div> -->
|
||||||
</div>
|
</div>
|
||||||
<!-- 列表 -->
|
<!-- 列表 -->
|
||||||
<base-table v-show="activeModule === 'orderInfo'" :page="queryParams.pageNo" :limit="queryParams.pageSize"
|
<el-row v-show="activeModule === 'orderInfo'">
|
||||||
:table-props="tableProps1" :table-data="list1" :max-height="tableH" />
|
<el-col :span="6">
|
||||||
|
<el-tree :data="treeData" :props="defaultProps" @node-click="handleNodeClick"></el-tree>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="18">
|
||||||
|
<base-table :page="queryParams.pageNo" :limit="queryParams.pageSize" :table-props="tableProps1"
|
||||||
|
:table-data="list1" :max-height="tableH" />
|
||||||
|
</el-col>
|
||||||
|
</el-row>
|
||||||
<!-- <base-table v-show="activeModule === 'useInfo'" :page="queryParams.pageNo" :limit="queryParams.pageSize"
|
<!-- <base-table v-show="activeModule === 'useInfo'" :page="queryParams.pageNo" :limit="queryParams.pageSize"
|
||||||
:table-props="tableProps2" :table-data="list2" :max-height="tableH" /> -->
|
:table-props="tableProps2" :table-data="list2" :max-height="tableH" /> -->
|
||||||
</div>
|
</div>
|
||||||
@ -119,6 +126,7 @@
|
|||||||
import { parseTime } from '@/utils/ruoyi'
|
import { parseTime } from '@/utils/ruoyi'
|
||||||
import { publicFormatter } from '@/utils/dict'
|
import { publicFormatter } from '@/utils/dict'
|
||||||
import { getProcessFlowList } from '@/api/base/orderManage'
|
import { getProcessFlowList } from '@/api/base/orderManage'
|
||||||
|
import { orderDetail, bomUseNum, getDetailTree, getDetailTreeInfo } from '@/api/base/orderManage'
|
||||||
const tableProps1 = [
|
const tableProps1 = [
|
||||||
{
|
{
|
||||||
prop: 'issueTime',
|
prop: 'issueTime',
|
||||||
@ -199,13 +207,13 @@ const tableProps2 = [
|
|||||||
label: '剩余生产预计消耗'
|
label: '剩余生产预计消耗'
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
import { orderDetail, bomUseNum } from '@/api/base/orderManage'
|
|
||||||
export default {
|
export default {
|
||||||
name: 'OrderDetailData',
|
name: 'OrderDetailData',
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
orderId: '',
|
orderId: '',
|
||||||
tableProps1,
|
tableProps1,
|
||||||
|
treeData:undefined,
|
||||||
activeModule:'orderInfo',
|
activeModule:'orderInfo',
|
||||||
tableProps2,
|
tableProps2,
|
||||||
list1: [],
|
list1: [],
|
||||||
@ -216,6 +224,10 @@ export default {
|
|||||||
pageNo: 1,
|
pageNo: 1,
|
||||||
pageSize: 500
|
pageSize: 500
|
||||||
},
|
},
|
||||||
|
defaultProps: {
|
||||||
|
children: 'children',
|
||||||
|
label: 'name'
|
||||||
|
},
|
||||||
orderMsg: {},
|
orderMsg: {},
|
||||||
processFlowName: ''
|
processFlowName: ''
|
||||||
}
|
}
|
||||||
@ -234,6 +246,15 @@ export default {
|
|||||||
toggleTab(val) {
|
toggleTab(val) {
|
||||||
this.activeModule = val
|
this.activeModule = val
|
||||||
},
|
},
|
||||||
|
handleNodeClick(val) {
|
||||||
|
console.log(val)
|
||||||
|
getDetailTreeInfo({
|
||||||
|
id: val.id
|
||||||
|
}).then(res => {
|
||||||
|
this.list1 = res.data.order
|
||||||
|
console.log(res)
|
||||||
|
})
|
||||||
|
},
|
||||||
initData(to) {
|
initData(to) {
|
||||||
if (to.name === 'OrderDetailData') {
|
if (to.name === 'OrderDetailData') {
|
||||||
this.orderId = location.href.split('?')[1].split('=')[1]
|
this.orderId = location.href.split('?')[1].split('=')[1]
|
||||||
@ -262,6 +283,12 @@ export default {
|
|||||||
this.list2 = []
|
this.list2 = []
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
getDetailTree({
|
||||||
|
id: this.orderId
|
||||||
|
}).then(res => {
|
||||||
|
console.log(res)
|
||||||
|
this.treeData =res.data
|
||||||
|
})
|
||||||
// 工艺
|
// 工艺
|
||||||
getProcessFlowList().then(res => {
|
getProcessFlowList().then(res => {
|
||||||
let arr = res.data || []
|
let arr = res.data || []
|
||||||
|
@ -174,40 +174,40 @@ export default {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
: undefined,
|
: undefined,
|
||||||
this.$auth.hasPermi('base:order-completion-monitoring:qualityDet')
|
// this.$auth.hasPermi('base:order-completion-monitoring:qualityDet')
|
||||||
? {
|
// ? {
|
||||||
type: 'qualityDetail',
|
// type: 'qualityDetail',
|
||||||
btnName: '质量',
|
// btnName: '质量',
|
||||||
showTip: '质量详情',
|
// showTip: '质量详情',
|
||||||
showParam: {
|
// showParam: {
|
||||||
type: '&',
|
// type: '&',
|
||||||
data: [
|
// data: [
|
||||||
{
|
// {
|
||||||
type: 'more',
|
// type: 'more',
|
||||||
name: 'workOrderNum',
|
// name: 'workOrderNum',
|
||||||
value: 1
|
// value: 1
|
||||||
}
|
// }
|
||||||
]
|
// ]
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
: undefined,
|
// : undefined,
|
||||||
this.$auth.hasPermi('base:order-completion-monitoring:sendOut')
|
// this.$auth.hasPermi('base:order-completion-monitoring:sendOut')
|
||||||
? {
|
// ? {
|
||||||
type: 'sendOutDetail',
|
// type: 'sendOutDetail',
|
||||||
btnName: '发货',
|
// btnName: '发货',
|
||||||
showTip: '发货详情',
|
// showTip: '发货详情',
|
||||||
showParam: {
|
// showParam: {
|
||||||
type: '&',
|
// type: '&',
|
||||||
data: [
|
// data: [
|
||||||
{
|
// {
|
||||||
type: 'more',
|
// type: 'more',
|
||||||
name: 'workOrderNum',
|
// name: 'workOrderNum',
|
||||||
value: 1
|
// value: 1
|
||||||
}
|
// }
|
||||||
]
|
// ]
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
: undefined
|
// : undefined
|
||||||
].filter((v) => v),
|
].filter((v) => v),
|
||||||
chartList: []
|
chartList: []
|
||||||
}
|
}
|
||||||
@ -297,7 +297,7 @@ export default {
|
|||||||
switch (val.type) {
|
switch (val.type) {
|
||||||
case 'orderDetail':
|
case 'orderDetail':
|
||||||
this.$router.push({
|
this.$router.push({
|
||||||
path: '/core/core-work-order-detail?woIdString='+val.data.woIdString
|
path: '/produce/core-work-order-detail?woIdString='+val.data.woIdString
|
||||||
})
|
})
|
||||||
break
|
break
|
||||||
case 'qualityDetail':
|
case 'qualityDetail':
|
||||||
@ -368,4 +368,4 @@ export default {
|
|||||||
vertical-align: bottom;
|
vertical-align: bottom;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
|
100
src/views/produce/workOrder/barChart.vue
Normal file
100
src/views/produce/workOrder/barChart.vue
Normal file
@ -0,0 +1,100 @@
|
|||||||
|
<!--
|
||||||
|
* @Author: zhp
|
||||||
|
* @Date: 2024-09-11 10:07:42
|
||||||
|
* @LastEditTime: 2024-09-11 10:07:43
|
||||||
|
* @LastEditors: zhp
|
||||||
|
* @Description:
|
||||||
|
-->
|
||||||
|
<template>
|
||||||
|
<div
|
||||||
|
id="orderEnergyChart"
|
||||||
|
style="width: 100%"
|
||||||
|
:style="{ height: chartHeight + 'px' }"
|
||||||
|
></div>
|
||||||
|
</template>
|
||||||
|
<script>
|
||||||
|
import * as echarts from 'echarts'
|
||||||
|
import resize from '@/utils/chartMixins/resize'
|
||||||
|
export default {
|
||||||
|
name: "BarChart",
|
||||||
|
mixins: [resize],
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
chartDom: '',
|
||||||
|
chart: '',
|
||||||
|
chartHeight: this.tableHeight(430)
|
||||||
|
}
|
||||||
|
},
|
||||||
|
props: {
|
||||||
|
chartData: {
|
||||||
|
type: Array,
|
||||||
|
required: true,
|
||||||
|
default: () => {
|
||||||
|
return []
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
watch: {
|
||||||
|
chartData: function () {
|
||||||
|
this.getChart()
|
||||||
|
}
|
||||||
|
},
|
||||||
|
mounted() {
|
||||||
|
window.addEventListener('resize', () => {
|
||||||
|
this.chartHeight = this.tableHeight(430)
|
||||||
|
})
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
getChart() {
|
||||||
|
if (
|
||||||
|
this.chart !== null &&
|
||||||
|
this.chart !== '' &&
|
||||||
|
this.chart !== undefined
|
||||||
|
) {
|
||||||
|
this.chart.dispose() // 页面多次刷新会出现警告,Dom已经初始化了一个实例,这是销毁实例
|
||||||
|
}
|
||||||
|
this.chartDom = document.getElementById('orderEnergyChart')
|
||||||
|
this.chart = echarts.init(this.chartDom)
|
||||||
|
console.log(this.chartData)
|
||||||
|
let xData = []
|
||||||
|
let yData = []
|
||||||
|
this.chartData && this.chartData.map(item =>{
|
||||||
|
xData.push(item.objName)
|
||||||
|
yData.push(item.useNum)
|
||||||
|
})
|
||||||
|
var option = {
|
||||||
|
color:['#288AFF'],
|
||||||
|
grid: {
|
||||||
|
left: '2%',
|
||||||
|
right: '1%',
|
||||||
|
bottom: '1%',
|
||||||
|
containLabel: true
|
||||||
|
},
|
||||||
|
xAxis: {
|
||||||
|
type: 'category',
|
||||||
|
data: xData,
|
||||||
|
axisLabel: {
|
||||||
|
rotate: "45"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
yAxis: {
|
||||||
|
type: 'value'
|
||||||
|
},
|
||||||
|
series: [
|
||||||
|
{
|
||||||
|
data: yData,
|
||||||
|
type: 'bar',
|
||||||
|
barMaxWidth: 20,
|
||||||
|
label: {
|
||||||
|
show: true,
|
||||||
|
position: 'top'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
};
|
||||||
|
|
||||||
|
option && this.chart.setOption(option);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
@ -1,155 +1,175 @@
|
|||||||
<!--
|
<!--
|
||||||
* @Author: zwq
|
* @Author: zwq
|
||||||
* @Date: 2021-11-18 14:16:25
|
* @Date: 2021-11-18 14:16:25
|
||||||
* @LastEditors: DY
|
* @LastEditors: zhp
|
||||||
* @LastEditTime: 2023-11-23 18:45:15
|
* @LastEditTime: 2024-09-11 10:27:13
|
||||||
* @Description:
|
* @Description:
|
||||||
-->
|
-->
|
||||||
<template>
|
<template>
|
||||||
<!-- <el-drawer
|
<!-- <el-drawer
|
||||||
:visible.sync="visible"
|
:visible.sync="visible"
|
||||||
:show-close="false"
|
:show-close="false"
|
||||||
:wrapper-closable="false"
|
:wrapper-closable="false"
|
||||||
class="drawer"
|
class="drawer"
|
||||||
size="50%"> -->
|
size="50%"> -->
|
||||||
<div class="app-container">
|
|
||||||
<!-- <small-title slot="title" :no-padding="true">
|
|
||||||
{{ isdetail ? '详情' : !dataForm.id ? '新增' : '编辑' }}
|
|
||||||
</small-title> -->
|
|
||||||
<el-button style="float: right" type="primary" @click="goback()">返回</el-button>
|
|
||||||
<div v-show="workOrderButton.length">
|
|
||||||
<el-button v-for="(work, index) in workOrderButton" :key="index" type="primary" @click="init(work.id, true)">{{ work.name }}</el-button>
|
|
||||||
</div>
|
|
||||||
<div class="content">
|
|
||||||
<div>
|
|
||||||
<h1>工单编码:{{ dataForm.code }}</h1>
|
|
||||||
</div>
|
|
||||||
<small-title
|
|
||||||
style="margin: 16px 0; padding-left: 8px"
|
|
||||||
:no-padding="true">
|
|
||||||
基本信息
|
|
||||||
</small-title>
|
|
||||||
<div class="formContent">
|
|
||||||
<el-row :gutter="20">
|
|
||||||
<el-col :span="8">工单名称:{{ dataForm.name }}</el-col>
|
|
||||||
<el-col :span="8">工单来源:{{ dataForm.triggerOrigin === 1 ? 'MES' : dataForm.triggerOrigin === 2 ? 'ERP' : ''}}</el-col>
|
|
||||||
<el-col :span="8">所属订单:
|
|
||||||
<span v-for="(item, index) in orderList" :key="index" style="margin-right: 10px">{{ item.orderName }}</span>
|
|
||||||
</el-col>
|
|
||||||
</el-row>
|
|
||||||
<el-row :gutter="20">
|
|
||||||
<el-col :span="8">产品名称:{{ dataForm.productName }}</el-col>
|
|
||||||
<el-col :span="8">规 格:{{ dataForm.specifications }}</el-col>
|
|
||||||
<el-col :span="8">计划生产数量:{{ dataForm.planQuantity }}</el-col>
|
|
||||||
</el-row>
|
|
||||||
<el-row :gutter="20">
|
|
||||||
<el-col :span="8">预计用时(小时):{{ dataForm.remainingTime }}</el-col>
|
|
||||||
<el-col :span="8">计划投入数量:{{ dataForm.planAssignQuantity }}</el-col>
|
|
||||||
<el-col :span="8">优先级:{{ fitlerP(dataForm.priority) }}</el-col>
|
|
||||||
</el-row>
|
|
||||||
<el-row :gutter="20">
|
|
||||||
<el-col :span="8">负责人:{{ dataForm.workers }}</el-col>
|
|
||||||
<el-col :span="8">关联产线:
|
|
||||||
<span v-for="(item, index) in dataForm.productLineNames" :key="index" style="margin-right: 10px">{{ item }}</span>
|
|
||||||
</el-col>
|
|
||||||
<el-col :span="8">物料计算方式:{{ dataForm.materialMethod === 1 ? '产品基础' : dataForm.materialMethod === 2 ? '工艺扩展' : '' }}</el-col>
|
|
||||||
</el-row>
|
|
||||||
<el-row :gutter="20">
|
|
||||||
<el-col :span="8">关联工艺:{{ dataForm.processFlowName }}</el-col>
|
|
||||||
</el-row>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<small-title
|
<div class="status-timegraph-container" style="background: #f2f4f9; flex: 1; display: flex; flex-direction: column">
|
||||||
style="margin: 16px 0; padding-left: 8px"
|
<el-row v-show="workOrderButton.length !== 0" class="" style="
|
||||||
:no-padding="true">
|
margin-bottom: 4px;
|
||||||
生产信息
|
border-radius: 8px;
|
||||||
</small-title>
|
">
|
||||||
<div class="formContent">
|
<workOrderNav :id-list="workOrderButton" @getWorkOrderId="getId">
|
||||||
<el-row :gutter="20">
|
</workOrderNav>
|
||||||
<el-col :span="8">工单创建时间:{{ parseTime(dataForm.createTime) }}</el-col>
|
</el-row>
|
||||||
<el-col :span="8">计划开始时间:{{ parseTime(dataForm.planStartTime) }}</el-col>
|
<el-row class="" style="
|
||||||
<el-col :span="8">计划完成时间:{{ parseTime(dataForm.planFinishTime) }}</el-col>
|
height: 1px;
|
||||||
</el-row>
|
flex: .3;
|
||||||
<el-row :gutter="20">
|
margin-bottom: 12px;
|
||||||
<el-col :span="8">预计结束时间:{{ parseTime(dataForm.computeFinishTime) }}</el-col>
|
background: #fff;
|
||||||
<el-col :span="8">实际开始时间:{{ parseTime(dataForm.startProduceTime) }}</el-col>
|
padding: 16px 16px px;
|
||||||
<el-col :span="8">实际完成时间:{{ parseTime(dataForm.finishProduceTime) }}</el-col>
|
border-radius: 8px;
|
||||||
</el-row>
|
display: flex;
|
||||||
<el-row :gutter="20">
|
flex-direction: column;
|
||||||
<el-col :span="8">工单状态:{{ fitlerS(dataForm.status) }}</el-col>
|
">
|
||||||
<el-col :span="8">实际投入数量:{{ dataForm.assignQuantity }}</el-col>
|
<div class="content">
|
||||||
<el-col :span="8">实际生产数量:{{ dataForm.actualQuantity }}</el-col>
|
<div>
|
||||||
</el-row>
|
<h1>工单编码:{{ dataForm.code }}</h1>
|
||||||
<el-row :gutter="20">
|
</div>
|
||||||
<el-col :span="8">废片数量:{{ dataForm.nokQuantity }}</el-col>
|
<small-title style="margin: 16px 0; padding-left: 8px" :no-padding="true">
|
||||||
<el-col :span="8">检测瑕疵数:{{ }}</el-col>
|
基本信息
|
||||||
</el-row>
|
</small-title>
|
||||||
</div>
|
<div class="formContent">
|
||||||
|
<el-row :gutter="20">
|
||||||
|
<el-col :span="8">工单名称:{{ dataForm.name }}</el-col>
|
||||||
|
<el-col :span="8">工单来源:{{ dataForm.triggerOrigin === 1 ? 'MES' : dataForm.triggerOrigin === 2 ? 'ERP' : ''}}
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="8">所属订单:
|
||||||
|
<span v-for="(item, index) in orderList" :key="index" style="margin-right: 10px">{{ item.orderName
|
||||||
|
}}</span>
|
||||||
|
</el-col>
|
||||||
|
</el-row>
|
||||||
|
<el-row :gutter="20">
|
||||||
|
<el-col :span="8">产品名称:{{ dataForm.productName }}</el-col>
|
||||||
|
<el-col :span="8">规 格:{{ dataForm.specifications }}</el-col>
|
||||||
|
<el-col :span="8">计划生产数量:{{ dataForm.planQuantity }}</el-col>
|
||||||
|
</el-row>
|
||||||
|
<el-row :gutter="20">
|
||||||
|
<el-col :span="8">预计用时(小时):{{ dataForm.remainingTime }}</el-col>
|
||||||
|
<el-col :span="8">计划投入数量:{{ dataForm.planAssignQuantity }}</el-col>
|
||||||
|
<el-col :span="8">优先级:{{ fitlerP(dataForm.priority) }}</el-col>
|
||||||
|
</el-row>
|
||||||
|
<el-row :gutter="20">
|
||||||
|
<el-col :span="8">负责人:{{ dataForm.workers }}</el-col>
|
||||||
|
<el-col :span="8">关联产线:
|
||||||
|
<span v-for="(item, index) in dataForm.productLineNames" :key="index" style="margin-right: 10px">{{ item
|
||||||
|
}}</span>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="8">物料计算方式:{{ dataForm.materialMethod === 1 ? '产品基础' : dataForm.materialMethod === 2 ? '工艺扩展'
|
||||||
|
:
|
||||||
|
'' }}</el-col>
|
||||||
|
</el-row>
|
||||||
|
<el-row :gutter="20">
|
||||||
|
<el-col :span="8">关联工艺:{{ dataForm.processFlowName }}</el-col>
|
||||||
|
</el-row>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</el-row>
|
||||||
|
<el-row class="" style="
|
||||||
|
height: 1px;
|
||||||
|
flex: 1;
|
||||||
|
margin-bottom: 12px;
|
||||||
|
background: #fff;
|
||||||
|
padding: 16px 16px 32px;
|
||||||
|
border-radius: 8px;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
">
|
||||||
|
<el-tabs v-model="activeName" @tab-click="switchTab">
|
||||||
|
<el-tab-pane label="生产信息" name="produce">
|
||||||
|
<div class="formContent">
|
||||||
|
<el-row :gutter="20">
|
||||||
|
<el-col :span="8">工单创建时间:{{ parseTime(dataForm.createTime) }}</el-col>
|
||||||
|
<el-col :span="8">计划开始时间:{{ parseTime(dataForm.planStartTime) }}</el-col>
|
||||||
|
<el-col :span="8">计划完成时间:{{ parseTime(dataForm.planFinishTime) }}</el-col>
|
||||||
|
</el-row>
|
||||||
|
<el-row :gutter="20">
|
||||||
|
<el-col :span="8">预计结束时间:{{ parseTime(dataForm.computeFinishTime) }}</el-col>
|
||||||
|
<el-col :span="8">实际开始时间:{{ parseTime(dataForm.startProduceTime) }}</el-col>
|
||||||
|
<el-col :span="8">实际完成时间:{{ parseTime(dataForm.finishProduceTime) }}</el-col>
|
||||||
|
</el-row>
|
||||||
|
<el-row :gutter="20">
|
||||||
|
<el-col :span="8">工单状态:{{ fitlerS(dataForm.status) }}</el-col>
|
||||||
|
<el-col :span="8">实际投入数量:{{ dataForm.assignQuantity }}</el-col>
|
||||||
|
<el-col :span="8">实际生产数量:{{ dataForm.actualQuantity }}</el-col>
|
||||||
|
</el-row>
|
||||||
|
<el-row :gutter="20">
|
||||||
|
<el-col :span="8">废片数量:{{ dataForm.nokQuantity }}</el-col>
|
||||||
|
<el-col :span="8">检测瑕疵数:{{ }}</el-col>
|
||||||
|
</el-row>
|
||||||
|
</div>
|
||||||
|
</el-tab-pane>
|
||||||
|
<el-tab-pane label="订单信息" name="order">
|
||||||
|
<base-table :max-height="tableH" :table-props="tableProps" :page="listQuery.pageNo"
|
||||||
|
:limit="listQuery.pageSize" :table-data="orderList">
|
||||||
|
<method-btn v-if="!isdetail" slot="handleBtn" :width="120" label="操作" :method-list="tableBtn"
|
||||||
|
@clickBtn="handleClick" />
|
||||||
|
</base-table>
|
||||||
|
</el-tab-pane>
|
||||||
|
<el-tab-pane label="预计用料信息" name="material">
|
||||||
|
<base-table :max-height="tableH" :table-props="tableProps1" :page="listQuery1.pageNo"
|
||||||
|
:limit="listQuery1.pageSize" :table-data="materialList" />
|
||||||
|
</el-tab-pane>
|
||||||
|
<el-tab-pane label="质量信息" name="quality">
|
||||||
|
<base-table :max-height="tableH" :table-props="tablePropsQuality" :table-data="qualityList" :page="1"
|
||||||
|
:limit="10" />
|
||||||
|
</el-tab-pane>
|
||||||
|
<el-tab-pane label="能源信息" name="energy">
|
||||||
|
<div class="toggleTabBox">
|
||||||
|
<div :class="{ active: activeModule === 'dataList' }" @click="toggleTab('dataList')">数据列表</div>
|
||||||
|
<div :class="{ active: activeModule === 'barChart' }" @click="toggleTab('barChart')">柱状图</div>
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<div v-show="activeModule === 'dataList'">
|
||||||
|
<!-- 表格 -->
|
||||||
|
<base-table :max-height="tableH" :table-props="tablePropsEnergy" :page="listQueryEnergy.pageNo"
|
||||||
|
:limit="listQueryEnergy.pageSize" :table-data="energyList" />
|
||||||
|
</div>
|
||||||
|
<!-- 图形 -->
|
||||||
|
<div v-show="activeModule === 'barChart'">
|
||||||
|
<bar-chart ref="orderEnergyChart" :chartData="chartData" />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</el-tab-pane>
|
||||||
|
</el-tabs>
|
||||||
|
|
||||||
<div class="attr-list">
|
</el-row>
|
||||||
<small-title
|
|
||||||
style="margin: 16px 0; padding-left: 8px"
|
|
||||||
:no-padding="true">
|
|
||||||
订单相关信息
|
|
||||||
</small-title>
|
|
||||||
<base-table
|
|
||||||
:table-props="tableProps"
|
|
||||||
:page="listQuery.pageNo"
|
|
||||||
:limit="listQuery.pageSize"
|
|
||||||
:table-data="orderList">
|
|
||||||
<method-btn
|
|
||||||
v-if="!isdetail"
|
|
||||||
slot="handleBtn"
|
|
||||||
:width="120"
|
|
||||||
label="操作"
|
|
||||||
:method-list="tableBtn"
|
|
||||||
@clickBtn="handleClick" />
|
|
||||||
</base-table>
|
|
||||||
<!-- <pagination
|
|
||||||
v-show="listQuery.total > 0"
|
|
||||||
:total="listQuery.total"
|
|
||||||
:page.sync="listQuery.pageNo"
|
|
||||||
:limit.sync="listQuery.pageSize"
|
|
||||||
:page-sizes="[5, 10, 15]"
|
|
||||||
@pagination="getList" /> -->
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="attr-list">
|
<!-- 对话框(添加 / 修改) -->
|
||||||
<small-title
|
<!-- <base-dialog dialogTitle="添加设备" :dialogVisible="open" width="500px" @close="open = false" @cancel="open = false"
|
||||||
style="margin: 16px 0; padding-left: 8px"
|
@confirm="submitForm">
|
||||||
:no-padding="true">
|
<el-select v-if="open" style="width: 100%" filterable clearable v-model="queryParams.equipmentId"
|
||||||
预计用料信息
|
placeholder="请选择一个设备">
|
||||||
</small-title>
|
<el-option v-for="eq in eqList" :key="eq.id" :value="eq.id" :label="eq.name"></el-option>
|
||||||
<base-table
|
</el-select>
|
||||||
:table-props="tableProps1"
|
</base-dialog> -->
|
||||||
:page="listQuery1.pageNo"
|
</div>
|
||||||
:limit="listQuery1.pageSize"
|
|
||||||
:table-data="materialList" />
|
|
||||||
<!-- <pagination
|
|
||||||
v-show="listQuery1.total > 0"
|
|
||||||
:total="listQuery1.total"
|
|
||||||
:page.sync="listQuery1.pageNo"
|
|
||||||
:limit.sync="listQuery1.pageSize"
|
|
||||||
:page-sizes="[5, 10, 15]"
|
|
||||||
@pagination="getList" /> -->
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<!-- <div class="drawer-body__footer">
|
|
||||||
<el-button type="primary" @click="goback()">关闭</el-button>
|
|
||||||
</div> -->
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
// import basicAdd from '../../core/mixins/basic-add';
|
// import basicAdd from '../../core/mixins/basic-add';
|
||||||
import { getCoreWO, getMaterialBomPage, getConOrderList, getCoreWOListById } from "@/api/base/coreWorkOrder";
|
import { getCoreWO, getMaterialBomPage, getConOrderList, getCoreWOListById } from "@/api/base/coreWorkOrder";
|
||||||
|
import tableHeightMixin from '@/mixins/tableHeightMixin';
|
||||||
|
import { getOrderEnergyData } from "@/api/monitoring/orderEnergy";
|
||||||
// import { orderList } from "@/api/base/orderManage";
|
// import { orderList } from "@/api/base/orderManage";
|
||||||
|
import {
|
||||||
|
getStatisticalDataPage,
|
||||||
|
} from '@/api/monitoring/statisticalData';
|
||||||
import { getProcessFlowList } from '@/api/base/orderManage'
|
import { getProcessFlowList } from '@/api/base/orderManage'
|
||||||
import SmallTitle from './SmallTitle';
|
import SmallTitle from './SmallTitle';
|
||||||
import { publicFormatter } from "@/utils/dict";
|
import { publicFormatter } from "@/utils/dict";
|
||||||
import { parseTime } from '@/utils/ruoyi'
|
import { parseTime } from '@/utils/ruoyi'
|
||||||
|
import workOrderNav from './workOrderNav.vue'
|
||||||
|
import BarChart from "./barChart"
|
||||||
const tableBtn = [
|
const tableBtn = [
|
||||||
{
|
{
|
||||||
type: 'edit',
|
type: 'edit',
|
||||||
@ -199,14 +219,101 @@ const tableProps1 = [
|
|||||||
label: '剩余生产预计消耗'
|
label: '剩余生产预计消耗'
|
||||||
},
|
},
|
||||||
];
|
];
|
||||||
|
const tablePropsEnergy = [
|
||||||
|
{
|
||||||
|
prop: 'objName',
|
||||||
|
label: '对象名称'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
prop: 'objCode',
|
||||||
|
label: '对象编码',
|
||||||
|
// filter: publicFormatter('unit_dict')
|
||||||
|
},
|
||||||
|
{
|
||||||
|
prop: 'energyType',
|
||||||
|
label: '能源类型',
|
||||||
|
// filter: publicFormatter('unit_dict')
|
||||||
|
},
|
||||||
|
{
|
||||||
|
prop: 'startNum',
|
||||||
|
label: '工单开始值',
|
||||||
|
// filter: publicFormatter('unit_dict')
|
||||||
|
},
|
||||||
|
{
|
||||||
|
prop: 'endNum',
|
||||||
|
label: '工单结束值/当前值'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
prop: 'useNum',
|
||||||
|
label: '使用量'
|
||||||
|
},
|
||||||
|
];
|
||||||
export default {
|
export default {
|
||||||
components: { SmallTitle },
|
mixins: [tableHeightMixin],
|
||||||
|
components: { SmallTitle, workOrderNav, BarChart },
|
||||||
|
computed: {
|
||||||
|
tablePropsQuality() {
|
||||||
|
return [
|
||||||
|
{
|
||||||
|
// width: 128,
|
||||||
|
prop: 'workOrderName',
|
||||||
|
label: '工单名称',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
// width: 128,
|
||||||
|
prop: 'productionName',
|
||||||
|
label: '产品',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
// width: 160,
|
||||||
|
prop: 'inspectionContent',
|
||||||
|
label: '检测内容',
|
||||||
|
},
|
||||||
|
...this.dynamicProps,
|
||||||
|
{
|
||||||
|
// width: 128,
|
||||||
|
prop: 'sumScrap',
|
||||||
|
label: '未检测总数',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
// width: 128,
|
||||||
|
prop: 'scrapRatio',
|
||||||
|
label: '比例(%)',
|
||||||
|
// subcomponent: {
|
||||||
|
// name: 'TextOnly',
|
||||||
|
// props: {
|
||||||
|
// injectData: {
|
||||||
|
// type: Object,
|
||||||
|
// default: () => ({}),
|
||||||
|
// },
|
||||||
|
// },
|
||||||
|
// data() {
|
||||||
|
// return {
|
||||||
|
// text: '比例',
|
||||||
|
// };
|
||||||
|
// },
|
||||||
|
// methods: {
|
||||||
|
// handleEmit(payload) {
|
||||||
|
// console.log('handleEmit', payload);
|
||||||
|
// },
|
||||||
|
// },
|
||||||
|
// render(h) {
|
||||||
|
// return h('el-button', { props: { type: 'text' } }, this.text);
|
||||||
|
// },
|
||||||
|
// },
|
||||||
|
},
|
||||||
|
];
|
||||||
|
},
|
||||||
|
},
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
tableBtn,
|
tableBtn,
|
||||||
tableProps,
|
tableProps,
|
||||||
tableProps1,
|
heightNum: 236,
|
||||||
|
tablePropsEnergy,
|
||||||
|
tableProps1,
|
||||||
|
activeModule:'dataList',
|
||||||
|
workOrderId:undefined,
|
||||||
addOrUpdateVisible: false,
|
addOrUpdateVisible: false,
|
||||||
urlOptions: {
|
urlOptions: {
|
||||||
infoURL: getCoreWO
|
infoURL: getCoreWO
|
||||||
@ -215,7 +322,13 @@ export default {
|
|||||||
pageSize: 10,
|
pageSize: 10,
|
||||||
pageNo: 1,
|
pageNo: 1,
|
||||||
total: 0,
|
total: 0,
|
||||||
},
|
},
|
||||||
|
listQueryEnergy: {
|
||||||
|
pageSize: 10,
|
||||||
|
pageNo: 1,
|
||||||
|
total: 0,
|
||||||
|
},
|
||||||
|
activeName:'produce',
|
||||||
listQuery1: {
|
listQuery1: {
|
||||||
pageSize: 10,
|
pageSize: 10,
|
||||||
pageNo: 1,
|
pageNo: 1,
|
||||||
@ -223,40 +336,120 @@ export default {
|
|||||||
},
|
},
|
||||||
dataForm: {},
|
dataForm: {},
|
||||||
orderList: [],
|
orderList: [],
|
||||||
materialList: [],
|
materialList: [],
|
||||||
|
energyList: [],
|
||||||
|
qualityList: [],
|
||||||
|
chartData:[],
|
||||||
|
dynamicProps:[],
|
||||||
// orderArray: [],
|
// orderArray: [],
|
||||||
visible: false,
|
visible: false,
|
||||||
isdetail: false,
|
isdetail: false,
|
||||||
workOrderButton: [],
|
workOrderButton: [],
|
||||||
processFlowList: []
|
processFlowList: []
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
|
watch: {
|
||||||
|
workOrderId(newValue, oldValue) {
|
||||||
|
this.activeName = 'produce'
|
||||||
|
this.init(newValue)
|
||||||
|
this.dataForm.id = newValue
|
||||||
|
}
|
||||||
|
},
|
||||||
created() {
|
created() {
|
||||||
this.getDict()
|
this.getDict()
|
||||||
},
|
},
|
||||||
mounted() {
|
mounted() {
|
||||||
if (this.$route.query.woIdString && this.$route.query.woIdString !== 'undefined') {
|
if (this.$route.query.woIdString && this.$route.query.woIdString !== 'undefined') {
|
||||||
const idList = this.$route.query.woIdString.split(',')
|
const idList = this.$route.query.woIdString.split(',')
|
||||||
|
console.log(idList);
|
||||||
|
|
||||||
getCoreWOListById(idList).then(res => {
|
getCoreWOListById(idList).then(res => {
|
||||||
this.workOrderButton = res.data.map(work => {
|
this.workOrderButton = res.data.map(work => {
|
||||||
return {
|
return {
|
||||||
id: work.id,
|
id: work.id,
|
||||||
name: work.name
|
name: work.name
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
// console.log(this.workOrderButton);
|
||||||
this.init(this.workOrderButton[0].id, true)
|
this.init(this.workOrderButton[0].id, true)
|
||||||
})
|
})
|
||||||
} else {
|
} else {
|
||||||
this.init(this.$route.query.id, true)
|
this.init(this.$route.query.id, true)
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
|
getId(val) {
|
||||||
|
this.workOrderId = val
|
||||||
|
},
|
||||||
|
async switchTab(val) {
|
||||||
|
if (this.activeName === 'order') {
|
||||||
|
getConOrderList({
|
||||||
|
workOrderId: this.dataForm.id,
|
||||||
|
}).then((response) => {
|
||||||
|
this.orderList = response.data;
|
||||||
|
// this.listQuery.total = response.data.total;
|
||||||
|
});
|
||||||
|
}else if (this.activeName === 'material') {
|
||||||
|
getConOrderList({
|
||||||
|
workOrderId: this.dataForm.id,
|
||||||
|
}).then((response) => {
|
||||||
|
this.materialList = response.data;
|
||||||
|
// this.listQuery.total = response.data.total;
|
||||||
|
});
|
||||||
|
} else if (this.activeName === 'energy') {
|
||||||
|
getOrderEnergyData({
|
||||||
|
workOrderId: this.dataForm.id,
|
||||||
|
}).then((response) => {
|
||||||
|
this.energyList = response.data
|
||||||
|
this.chartData = response.data
|
||||||
|
// this.listQuery.total = response.data.total;
|
||||||
|
});
|
||||||
|
} else if (this.activeName === 'quality') {
|
||||||
|
const {
|
||||||
|
data: { data, otherList, otherMap, nameData },
|
||||||
|
} = await getStatisticalDataPage({
|
||||||
|
workOrderIdList:[this.dataForm,id]
|
||||||
|
})
|
||||||
|
// console.log(this.queryParams);
|
||||||
|
this.dynamicProps = this.filterNameData(nameData)
|
||||||
|
this.qualityList = this.filterData(data);
|
||||||
|
}
|
||||||
|
},
|
||||||
getDict() {
|
getDict() {
|
||||||
// 工艺
|
// 工艺
|
||||||
getProcessFlowList().then(res => {
|
getProcessFlowList().then(res => {
|
||||||
this.processFlowList = res.data || []
|
this.processFlowList = res.data || []
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
|
filterNameData(nameData) {
|
||||||
|
const ndSet = new Set();
|
||||||
|
nameData.forEach((nd) => {
|
||||||
|
ndSet.add(nd.name);
|
||||||
|
});
|
||||||
|
return Array.from(ndSet.values())
|
||||||
|
.sort()
|
||||||
|
.map((name) => ({
|
||||||
|
prop: name,
|
||||||
|
label: name,
|
||||||
|
}));
|
||||||
|
},
|
||||||
|
filterData(data) {
|
||||||
|
return data.map((item) => {
|
||||||
|
const { data: innerData } = item;
|
||||||
|
const keyValuePairs = {};
|
||||||
|
innerData.map((d) => {
|
||||||
|
keyValuePairs[d.dynamicName] = d.dynamicValue;
|
||||||
|
});
|
||||||
|
return {
|
||||||
|
inspectionContent: item.inspectionContent,
|
||||||
|
...keyValuePairs,
|
||||||
|
sumInput: item.sumInput,
|
||||||
|
productionName: item.productionName,
|
||||||
|
workOrderId: item.workOrderId,
|
||||||
|
scrapRatio: item.scrapRatio,
|
||||||
|
};
|
||||||
|
});
|
||||||
|
},
|
||||||
fitlerP(val) {
|
fitlerP(val) {
|
||||||
if (val) {
|
if (val) {
|
||||||
if (val === 1) {
|
if (val === 1) {
|
||||||
@ -318,24 +511,26 @@ export default {
|
|||||||
} else {
|
} else {
|
||||||
this.addNew(raw.data.id);
|
this.addNew(raw.data.id);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
toggleTab(val) {
|
||||||
|
this.activeModule = val
|
||||||
|
if (this.activeModule === 'barChart') {
|
||||||
|
this.$nextTick((res) => {
|
||||||
|
this.$refs.orderEnergyChart.getChart()
|
||||||
|
})
|
||||||
|
}
|
||||||
|
},
|
||||||
getList() {
|
getList() {
|
||||||
// 获取订单列表
|
// 获取订单列表
|
||||||
getConOrderList({
|
|
||||||
workOrderId: this.dataForm.id,
|
|
||||||
}).then((response) => {
|
|
||||||
this.orderList = response.data;
|
|
||||||
// this.listQuery.total = response.data.total;
|
|
||||||
});
|
|
||||||
// 获取预使用原料列表
|
// 获取预使用原料列表
|
||||||
if (this.dataForm.planProductId) {
|
// if (this.dataForm.planProductId) {
|
||||||
getMaterialBomPage({
|
// getMaterialBomPage({
|
||||||
productId: this.dataForm.planProductId,
|
// productId: this.dataForm.planProductId,
|
||||||
}).then((response) => {
|
// }).then((response) => {
|
||||||
this.materialList = response.data;
|
// this.materialList = response.data;
|
||||||
// this.listQuery.total = response.data.length;
|
// // this.listQuery.total = response.data.length;
|
||||||
});
|
// });
|
||||||
}
|
// }
|
||||||
// 获取订单相关信息
|
// 获取订单相关信息
|
||||||
// orderList({
|
// orderList({
|
||||||
// workOrderId: this.dataForm.id
|
// workOrderId: this.dataForm.id
|
||||||
@ -364,7 +559,7 @@ export default {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
// 获取订单列表和用料列表
|
// 获取订单列表和用料列表
|
||||||
this.getList();
|
// this.getList();
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
if (this.urlOptions.isGetCode) {
|
if (this.urlOptions.isGetCode) {
|
||||||
@ -373,10 +568,6 @@ export default {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
goback() {
|
|
||||||
this.$router.go(-1);
|
|
||||||
// this.initData();
|
|
||||||
},
|
|
||||||
goEdit() {
|
goEdit() {
|
||||||
this.isdetail = false;
|
this.isdetail = false;
|
||||||
},
|
},
|
||||||
@ -390,7 +581,7 @@ export default {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
</script>
|
</script>
|
||||||
<style scoped>
|
<style lang="scss" scoped>
|
||||||
.drawer >>> .el-drawer {
|
.drawer >>> .el-drawer {
|
||||||
border-radius: 8px 0 0 8px;
|
border-radius: 8px 0 0 8px;
|
||||||
display: flex;
|
display: flex;
|
||||||
@ -453,4 +644,26 @@ export default {
|
|||||||
.add {
|
.add {
|
||||||
color: #0b58ff;
|
color: #0b58ff;
|
||||||
}
|
}
|
||||||
|
.container{
|
||||||
|
/* background-color: #fff; */
|
||||||
|
border-radius: 8px;
|
||||||
|
padding: 16px 16px 0 16px;
|
||||||
|
margin: 8px 0 8px 0px;
|
||||||
|
}
|
||||||
|
.toggleTabBox {
|
||||||
|
display: inline-block;
|
||||||
|
|
||||||
|
div {
|
||||||
|
display: inline-block;
|
||||||
|
padding: 0 8px 4px;
|
||||||
|
color: rgba(102, 102, 102, 0.5);
|
||||||
|
border-bottom: 2px solid rgba(242, 244, 249, 1);
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
|
||||||
|
.active {
|
||||||
|
color: rgba(0, 0, 0, 0.85);
|
||||||
|
border-bottom-color: #0B58FF;
|
||||||
|
}
|
||||||
|
}
|
||||||
</style>
|
</style>
|
||||||
|
151
src/views/produce/workOrder/workOrderNav.vue
Normal file
151
src/views/produce/workOrder/workOrderNav.vue
Normal file
@ -0,0 +1,151 @@
|
|||||||
|
<!--
|
||||||
|
* @Author: zhp
|
||||||
|
* @Date: 2024-09-09 15:39:08
|
||||||
|
* @LastEditTime: 2024-09-11 10:25:54
|
||||||
|
* @LastEditors: zhp
|
||||||
|
* @Description:
|
||||||
|
-->
|
||||||
|
<template>
|
||||||
|
<div>
|
||||||
|
<div class="button-nav">
|
||||||
|
<!-- <div class="text-carousel"> -->
|
||||||
|
<el-button style="flex: .1" type="text" @click="prevText" icon="el-icon-caret-left"></el-button>
|
||||||
|
<button @click="handleChange(item.id)" v-for="(item,index) in idList" :key="item.id"
|
||||||
|
:class="[item.id === currentMenu ? 'active' : '']">{{ item.name }}
|
||||||
|
</button>
|
||||||
|
<el-button style="flex: .1" type="text" @click="nextText" icon="el-icon-caret-right"></el-button>
|
||||||
|
<button style="flex: .2;display: inline-block;" @click="goback()">
|
||||||
|
<svg-icon style="width: 20px; height: 20px" :icon-class=" 'back' " />
|
||||||
|
<span>返回</span>
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
<!-- </div> -->
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
export default {
|
||||||
|
props: {
|
||||||
|
idList: {
|
||||||
|
type: Array,
|
||||||
|
default:[]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
currentMenu: undefined
|
||||||
|
};
|
||||||
|
},
|
||||||
|
watch: {
|
||||||
|
currentMenu(newValue,oldValue) {
|
||||||
|
this.$emit('getWorkOrderId', newValue)
|
||||||
|
},
|
||||||
|
idList(newValue, oldValue) {
|
||||||
|
console.log(newValue);
|
||||||
|
this.currentMenu = newValue[0].id
|
||||||
|
}
|
||||||
|
},
|
||||||
|
// created() {
|
||||||
|
// if (this.currentMenu === undefined) {
|
||||||
|
// console.log(this.idList);
|
||||||
|
// this.$nextTick(() => {
|
||||||
|
// this.currentMenu = this.idList[0]?.id
|
||||||
|
// })
|
||||||
|
// }
|
||||||
|
// },
|
||||||
|
// mounted() {
|
||||||
|
|
||||||
|
// },
|
||||||
|
methods: {
|
||||||
|
goback() {
|
||||||
|
this.$router.go(-1);
|
||||||
|
// this.initData();
|
||||||
|
},
|
||||||
|
handleChange(val) {
|
||||||
|
this.currentMenu = val
|
||||||
|
// this.$emit('getWorkOrderId',val)
|
||||||
|
},
|
||||||
|
prevText() {
|
||||||
|
const currentIndex = this.idList.findIndex((item) => item.id === this.currentMenu);
|
||||||
|
const newIndex = (currentIndex - 1 + this.idList.length) % this.idList.length;
|
||||||
|
this.currentMenu = this.idList[newIndex].id;
|
||||||
|
// this.$emit('getWorkOrderId', val)
|
||||||
|
},
|
||||||
|
nextText() {
|
||||||
|
const currentIndex = this.idList.findIndex((item) => item.id === this.currentMenu);
|
||||||
|
const newIndex = (currentIndex + 1) % this.idList.length;
|
||||||
|
this.currentMenu = this.idList[newIndex].id;
|
||||||
|
// this.$emit('getWorkOrderId', val)
|
||||||
|
},
|
||||||
|
},
|
||||||
|
};
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style scoped lang="scss">
|
||||||
|
.button-nav {
|
||||||
|
width: 100%;
|
||||||
|
padding: 12px 0;
|
||||||
|
display: flex;
|
||||||
|
// justify-content: space-around;
|
||||||
|
gap: 12px;
|
||||||
|
|
||||||
|
* {
|
||||||
|
user-select: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
button {
|
||||||
|
cursor: pointer;
|
||||||
|
appearance: none;
|
||||||
|
outline: none;
|
||||||
|
border: none;
|
||||||
|
background: #fff;
|
||||||
|
border-radius: 8px;
|
||||||
|
border-bottom-left-radius: 5px;
|
||||||
|
border-bottom-right-radius: 5px;
|
||||||
|
padding: 20px;
|
||||||
|
color: #888;
|
||||||
|
letter-spacing: 2px;
|
||||||
|
flex: 1;
|
||||||
|
box-sizing: padding-box;
|
||||||
|
position: relative;
|
||||||
|
|
||||||
|
&::after {
|
||||||
|
content: attr(data-text);
|
||||||
|
position: absolute;
|
||||||
|
top: 10px;
|
||||||
|
left: 50%;
|
||||||
|
font-size: 18px;
|
||||||
|
font-weight: 500;
|
||||||
|
transform: translate(-50%);
|
||||||
|
}
|
||||||
|
|
||||||
|
&.active {
|
||||||
|
color: #111;
|
||||||
|
border-bottom: 4px solid #0b58ff;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
<style scoped>
|
||||||
|
.custom-tabs >>> .el-tabs__header {
|
||||||
|
margin-bottom: 8px;
|
||||||
|
display: inline-block;
|
||||||
|
/* transform: translateY(-12px); */
|
||||||
|
}
|
||||||
|
.custom-tabs >>> .el-tabs__item {
|
||||||
|
padding-left: 0px !important;
|
||||||
|
padding-right: 0px !important;
|
||||||
|
line-height: 36px !important;
|
||||||
|
height: 36px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.custom-tabs >>> .el-tabs__content {
|
||||||
|
height: calc(100% - 42px);
|
||||||
|
}
|
||||||
|
.custom-tabs >>> .el-tab-pane {
|
||||||
|
box-sizing: border-box;
|
||||||
|
height: 100%;
|
||||||
|
padding: 20px;
|
||||||
|
border: 10px solid #f002;
|
||||||
|
}
|
||||||
|
</style>
|
@ -1,3 +1,10 @@
|
|||||||
|
<!--
|
||||||
|
* @Author: zhp
|
||||||
|
* @Date: 2024-08-13 08:36:54
|
||||||
|
* @LastEditTime: 2024-09-11 09:35:12
|
||||||
|
* @LastEditors: zhp
|
||||||
|
* @Description:
|
||||||
|
-->
|
||||||
<template>
|
<template>
|
||||||
<base-table
|
<base-table
|
||||||
:table-props="tableProps"
|
:table-props="tableProps"
|
||||||
|
Loading…
Reference in New Issue
Block a user