Merge pull request '更新' (#403) from projects/mes-zwq into projects/mes-test

Reviewed-on: #403
This commit is contained in:
朱文强 2024-11-13 14:47:51 +08:00
commit a492fe4c87
6 changed files with 1033 additions and 863 deletions

View File

@ -1,7 +1,7 @@
###
# @Author: Do not edit
# @Date: 2023-08-29 09:40:39
# @LastEditTime: 2024-10-21 16:41:54
# @LastEditTime: 2024-11-07 09:29:23
# @LastEditors: zwq
# @Description:
###
@ -12,16 +12,7 @@ ENV = 'development'
VUE_APP_TITLE = MES系统
# 芋道管理系统/开发环境
# VUE_APP_BASE_API = 'http://100.64.0.26:48082'
# VUE_APP_BASE_API = 'http://192.168.0.33:48082'
# VUE_APP_BASE_API = 'http://192.168.4.173:48080'
# VUE_APP_BASE_API = 'http://192.168.2.173:48080'
# VUE_APP_BASE_API = 'http://192.168.1.81:48082'
# VUE_APP_BASE_API = 'http://192.168.1.8:48082'
# VUE_APP_BASE_API = 'http://192.168.4.159:48080'
# VUE_APP_BASE_API = 'http://192.168.1.56:48082'
# VUE_APP_BASE_API = 'http://192.168.4.159:48080'
# VUE_APP_BASE_API = 'http://192.168.1.64:48082'
# VUE_APP_BASE_API = 'http://172.16.21.222:48082'
VUE_APP_BASE_API = 'http://mes2.kszny.picaiba.com'

View File

@ -207,11 +207,11 @@ export function getDetailTree(data) {
params: data
})
}
export function getDetailTreeInfo(data) {
export function getDetailTreeInfo(query) {
return request({
url: 'base/order/getDetailTreeInfoById',
url: 'base/order/getDetailTreeInfoByIdNew',
method: 'get',
params: data
params: query
})
}

View File

@ -1,135 +1,221 @@
<template>
<el-form ref="addWorkOrder" :rules="rules" label-width="130px" :model="form" label-position='top'>
<el-form
ref="addWorkOrder"
:rules="rules"
label-width="130px"
:model="form"
label-position="top">
<el-row :gutter="20">
<el-col :span='6'>
<el-form-item label="工单名称" prop="name" v-if='!isBind'>
<el-col :span="6">
<el-form-item label="工单模式">
<el-radio-group v-model="isBind">
<el-radio :label="true">绑定工单</el-radio>
<el-radio :label="false">新增工单</el-radio>
</el-radio-group>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="工单名称" prop="name" v-if="!isBind">
<el-input v-model="form.name"></el-input>
</el-form-item>
<el-form-item label="工单名称" prop="workOrderId" v-if='isBind'>
<el-select v-model="form.workOrderId" placeholder="请选择" style="width: 100%;" filterable
<el-form-item label="工单名称" prop="workOrderId" v-if="isBind">
<el-select
v-model="form.workOrderId"
placeholder="请选择"
style="width: 100%"
filterable
@change="getWorkOrderMsg">
<el-option v-for="item in workOrderList" :key="item.id" :label="item.name" :value="item.id">
</el-option>
<el-option
v-for="item in workOrderList"
:key="item.id"
:label="item.name"
:value="item.id"></el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span='6'>
<el-col :span="6">
<el-form-item label="工单编码" prop="code">
<el-input v-model="form.code" disabled></el-input>
</el-form-item>
</el-col>
<el-col :span='6'>
<el-col :span="6">
<el-form-item label="产品名称" prop="planProductId">
<el-select v-model="form.planProductId" placeholder="请选择" disabled style="width: 100%;">
<el-option v-for="item in productList" :key="item.id" :label="item.name+' | '+item.specifications"
<el-select
v-model="form.planProductId"
placeholder="请选择"
disabled
style="width: 100%">
<el-option
v-for="item in productList"
:key="item.id"
:label="item.name + ' | ' + item.specifications"
:value="item.id">
<span style="float: left">{{ item.name }}</span>
<span style="float: right; color: #8492a6; font-size: 13px">{{ item.specifications }}</span>
<span style="float: right; color: #8492a6; font-size: 13px">
{{ item.specifications }}
</span>
</el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span='6'>
<el-col :span="6">
<el-form-item label="计划开始时间">
<el-date-picker v-model="planStartTime" type="datetime" value-format="yyyy-MM-dd HH:mm:ss"
style="width: 100%;" placeholder="选择日期" :disabled="isBind">
</el-date-picker>
<el-date-picker
v-model="planStartTime"
type="datetime"
value-format="yyyy-MM-dd HH:mm:ss"
style="width: 100%"
placeholder="选择日期"
:disabled="isBind"></el-date-picker>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span='6'>
<el-col :span="6">
<el-form-item label="计划完成时间">
<el-date-picker v-model="planFinishTime" type="datetime" value-format="yyyy-MM-dd HH:mm:ss"
style="width: 100%;" placeholder="选择日期" :disabled="isBind">
</el-date-picker>
<el-date-picker
v-model="planFinishTime"
type="datetime"
value-format="yyyy-MM-dd HH:mm:ss"
style="width: 100%"
placeholder="选择日期"
:disabled="isBind"></el-date-picker>
</el-form-item>
</el-col>
<el-col :span='6'>
<el-col :span="6">
<el-form-item label="计划投入数量" prop="planAssignQuantity">
<el-input-number v-model="form.planAssignQuantity" :min="0" :max="9999999999999" :disabled="isBind"
style="width: 100%;"></el-input-number>
<el-input-number
v-model="form.planAssignQuantity"
:min="0"
:max="9999999999999"
:disabled="isBind"
style="width: 100%"></el-input-number>
</el-form-item>
</el-col>
<el-col :span='6'>
<el-col :span="6">
<el-form-item label="计划生产数量" prop="planQuantity">
<el-input-number v-model="form.planQuantity" :min="0" :max="9999999999999" :disabled="isBind"
style="width: 100%;"></el-input-number>
<el-input-number
v-model="form.planQuantity"
:min="0"
:max="9999999999999"
:disabled="isBind"
style="width: 100%"></el-input-number>
</el-form-item>
</el-col>
<el-col :span='6'>
<el-col :span="6">
<el-form-item label="关联工艺" prop="processFlowId">
<el-select v-model="form.processFlowId" placeholder="请选择" disabled style="width: 100%;">
<el-option v-for="item in processFlowList" :key="item.id" :label="item.name" :value="item.id">
</el-option>
<el-select
v-model="form.processFlowId"
placeholder="请选择"
disabled
style="width: 100%">
<el-option
v-for="item in processFlowList"
:key="item.id"
:label="item.name"
:value="item.id"></el-option>
</el-select>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span='6'>
<el-col :span="6">
<el-form-item label="物料计算方式" prop="materialMethod">
<el-select v-model="form.materialMethod" placeholder="请选择" style="width: 100%;" disabled>
<el-select
v-model="form.materialMethod"
placeholder="请选择"
style="width: 100%"
disabled>
<el-option label="产品基础BOM" :value="1"></el-option>
<el-option label="工艺扩展BOM" :value="2"></el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span='6'>
<el-col :span="6">
<el-form-item label="优先级" prop="priority">
<el-select v-model="form.priority" placeholder="请选择" style="width: 100%;" :disabled="isBind">
<el-option v-for="item in getDictDatas(DICT_TYPE.ORDER_PRIORITY)" :key="item.value" :label="item.label"
:value="item.value">
</el-option>
<el-select
v-model="form.priority"
placeholder="请选择"
style="width: 100%"
:disabled="isBind">
<el-option
v-for="item in getDictDatas(DICT_TYPE.ORDER_PRIORITY)"
:key="item.value"
:label="item.label"
:value="item.value"></el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span='6'>
<el-col :span="6">
<el-form-item label="工单类型" prop="type">
<el-select v-model="form.type" placeholder="请选择" style="width: 100%;" :disabled="isBind">
<el-option v-for="item in workOrderTypeList" :key="item.id" :label="item.name" :value="item.id">
</el-option>
<el-select
v-model="form.type"
placeholder="请选择"
style="width: 100%"
:disabled="isBind">
<el-option
v-for="item in workOrderTypeList"
:key="item.id"
:label="item.name"
:value="item.id"></el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span='6'>
<el-col :span="6">
<el-form-item label="关联产线" prop="productLineId">
<el-select v-model="form.productLineId" placeholder="请选择" multiple style="width: 100%;" :disabled="isBind">
<el-option v-for="item in productLineList" :key="item.id" :label="item.name" :value="item.id">
</el-option>
<el-select
v-model="form.productLineId"
placeholder="请选择"
multiple
style="width: 100%"
:disabled="isBind">
<el-option
v-for="item in productLineList"
:key="item.id"
:label="item.name"
:value="item.id"></el-option>
</el-select>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span='6'>
<el-col :span="6">
<el-form-item label="负责人" prop="workers">
<el-input v-model="form.workers" :disabled="isBind"></el-input>
</el-form-item>
</el-col>
<el-col :span='6'>
<el-col :span="6">
<el-form-item label="负责部门" prop="deptId">
<el-select v-model="form.deptId" placeholder="请选择关联产线" style="width: 100%;">
<el-option v-for="item in deptList" :key="item.id" :label="item.name" :value="item.id">
</el-option>
<el-select
v-model="form.deptId"
placeholder="请选择关联产线"
style="width: 100%">
<el-option
v-for="item in deptList"
:key="item.id"
:label="item.name"
:value="item.id"></el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span='6'>
<el-col :span="6">
<el-form-item label="计划分配订单量" prop="planAssignmentQuantity">
<el-input-number v-model="form.planAssignmentQuantity" :min="0" :max="9999999999999" style="width: 100%;">
</el-input-number>
<el-input-number
v-model="form.planAssignmentQuantity"
:min="0"
:max="9999999999999"
style="width: 100%"></el-input-number>
</el-form-item>
</el-col>
</el-row>
</el-form>
</template>
<script>
import { getProductAll } from '@/api/base/product'
import { getProcessFlowList, getWorkOrderCode, orderIssue, workOrderList, getWorkOrderById } from '@/api/base/orderManage'
import { getLineAll } from '@/api/base/productionLine'
import { getProductAll } from '@/api/base/product';
import {
getProcessFlowList,
getWorkOrderCode,
orderIssue,
workOrderList,
getWorkOrderById,
} from '@/api/base/orderManage';
import { getLineAll } from '@/api/base/productionLine';
import { listDept } from '@/api/system/dept';
import moment from 'moment'
import moment from 'moment';
export default {
name: 'AddWorkOrder',
data() {
@ -143,7 +229,7 @@ export default {
planStartTime: '',
planFinishTime: '',
planAssignQuantity: 0,
deptId:undefined,
deptId: undefined,
planQuantity: 0,
processFlowId: '',
materialMethod: 1,
@ -151,68 +237,95 @@ export default {
productLineId: [],
type: '',
workers: '',
planAssignmentQuantity: ''
planAssignmentQuantity: '',
},
deptList:[],
deptList: [],
rules: {
name: [{ required: true, message: "工单名称不能为空", trigger: "blur" }],
planProductId: [{ required: true, message: "产品名称不能为空", trigger: "change" }],
planAssignQuantity: [{ required: true, message: "计划投入数量不能为空", trigger: "blur" }],
planQuantity: [{ required: true, message: "计划生产数量不能为空", trigger: "blur" }],
productLineId: [{ required: true, message: "产线不能为空", trigger: "change" }],
planAssignmentQuantity: [{ required: true, message: "计划分配订单量不能为空", trigger: "blur" }]
name: [
{ required: true, message: '工单名称不能为空', trigger: 'blur' },
],
planProductId: [
{ required: true, message: '产品名称不能为空', trigger: 'change' },
],
planAssignQuantity: [
{ required: true, message: '计划投入数量不能为空', trigger: 'blur' },
],
planQuantity: [
{ required: true, message: '计划生产数量不能为空', trigger: 'blur' },
],
productLineId: [
{ required: true, message: '产线不能为空', trigger: 'change' },
],
planAssignmentQuantity: [
{
required: true,
message: '计划分配订单量不能为空',
trigger: 'blur',
},
],
},
productList: [],
processFlowList: [],
productLineList: [],
workOrderTypeList: [
{id: 1,name:'标准工单'},
{id: 2, name:'特殊工单'}
{ id: 1, name: '标准工单' },
{ id: 2, name: '特殊工单' },
],
planStartTime: '',
planFinishTime: '',
isBind: false,
workOrderList: []
}
workOrderList: [],
orderData: {},
};
},
methods: {
init(data, param) {
this.form.orderId = data.id
this.getList()
if (param === 'add') {
this.isBind = false
getWorkOrderCode().then(res => {
this.form.code = res.data || ''
})
this.form.planProductId = data.planProductId
this.form.processFlowId = data.processFlowId
this.form.materialMethod = data.materialMethod
}else{//
this.isBind = true
this.isBind = true;
this.orderData = data;
this.form.orderId = data.id;
this.getList();
},
changeAdd() {
if (this.isBind) {
this.isBind = false;
getWorkOrderCode().then((res) => {
this.form.code = res.data || '';
});
this.form.orderId = null;
this.form.planProductId = this.orderData.planProductId;
this.form.processFlowId = this.orderData.processFlowId;
this.form.materialMethod = this.orderData.materialMethod;
} else {
this.isBind = true;
this.form.orderId = this.orderData.id;
this.form.planProductId = null;
this.form.processFlowId = null;
this.form.materialMethod = null;
this.form.code = null;
}
},
getList() {
listDept().then(res => {
this.deptList = res.data || []
})
listDept().then((res) => {
this.deptList = res.data || [];
});
//
getProductAll().then(res => {
this.productList = res.data || []
})
getProductAll().then((res) => {
this.productList = res.data || [];
});
// 线
getLineAll().then(res => {
this.productLineList = res.data || []
})
getLineAll().then((res) => {
this.productLineList = res.data || [];
});
//
getProcessFlowList().then(res => {
this.processFlowList = res.data || []
})
getProcessFlowList().then((res) => {
this.processFlowList = res.data || [];
});
// list
workOrderList({
status: 1
}).then(res => {
this.workOrderList = res.data || []
})
status: 1,
}).then((res) => {
this.workOrderList = res.data || [];
});
},
addWorkOrderSubmit() {
this.$refs['addWorkOrder'].validate((valid) => {
@ -222,23 +335,27 @@ export default {
orderIssue({
workOrderId: this.form.workOrderId,
orderId: this.form.orderId,
planAssignmentQuantity: this.form.planAssignmentQuantity
planAssignmentQuantity: this.form.planAssignmentQuantity,
}).then((res) => {
if (res.code === 0) {
this.$modal.msgSuccess("操作成功")
this.$emit('addWorkOrderSubmit')
this.$modal.msgSuccess('操作成功');
this.$emit('addWorkOrderSubmit');
}
})
});
} else {
//
let _this = this
_this.form.planStartTime = _this.planStartTime ? new Date(_this.planStartTime).valueOf() : ''
_this.form.planFinishTime = _this.planFinishTime ? new Date(_this.planFinishTime).valueOf() : ''
orderIssue({ ..._this.form }).then(res => {
let _this = this;
_this.form.planStartTime = _this.planStartTime
? new Date(_this.planStartTime).valueOf()
: '';
_this.form.planFinishTime = _this.planFinishTime
? new Date(_this.planFinishTime).valueOf()
: '';
orderIssue({ ..._this.form }).then((res) => {
if (res.code === 0) {
_this.$modal.msgSuccess("操作成功")
let name = this.form.name
_this.$emit('addWorkOrderSubmit')
_this.$modal.msgSuccess('操作成功');
let name = this.form.name;
_this.$emit('addWorkOrderSubmit');
// 使
// _this.$modal.confirm('使?').then(function() {
// _this.$router.push({
@ -246,45 +363,55 @@ export default {
// })
// })
}
})
});
}
} else {
return false
return false;
}
})
});
},
formClear() {
this.$refs.addWorkOrder.resetFields()
this.form.materialMethod = 1
this.form.planAssignQuantity = 0
this.form.planQuantity = 0
this.planFinishTime = ''
this.planStartTime = ''
this.form.planFinishTime = ''
this.form.planStartTime = ''
this.isBind = false
this.$refs.addWorkOrder.resetFields();
this.form.materialMethod = 1;
this.form.planAssignQuantity = 0;
this.form.planQuantity = 0;
this.planFinishTime = '';
this.planStartTime = '';
this.form.planFinishTime = '';
this.form.planStartTime = '';
this.isBind = false;
},
//
getWorkOrderMsg() {
if (this.form.workOrderId) {
getWorkOrderById({id:this.form.workOrderId}).then(res => {
getWorkOrderById({ id: this.form.workOrderId }).then((res) => {
if (res.code === 0) {
this.form.code = res.data.code
this.form.planProductId = res.data.planProductId
this.planStartTime = res.data.planStartTime ? moment.unix(res.data.planStartTime).format('YYYY-MM-DD HH:mm:ss') : null
this.planFinishTime = res.data.planFinishTime ? moment.unix(res.data.planFinishTime).format('YYYY-MM-DD HH:mm:ss') : null
this.form.planAssignQuantity = res.data.planAssignQuantity
this.form.planQuantity = res.data.planQuantity
this.form.processFlowId = res.data.processFlowId
this.form.materialMethod = res.data.materialMethod
this.form.priority = res.data.priority ? res.data.priority + '' : ''
this.form.productLineId = res.data.productLineIds
this.form.type = res.data.type
this.form.workers = res.data.workers
this.form.code = res.data.code;
this.form.planProductId = res.data.planProductId;
this.planStartTime = res.data.planStartTime
? moment
.unix(res.data.planStartTime)
.format('YYYY-MM-DD HH:mm:ss')
: null;
this.planFinishTime = res.data.planFinishTime
? moment
.unix(res.data.planFinishTime)
.format('YYYY-MM-DD HH:mm:ss')
: null;
this.form.planAssignQuantity = res.data.planAssignQuantity;
this.form.planQuantity = res.data.planQuantity;
this.form.processFlowId = res.data.processFlowId;
this.form.materialMethod = res.data.materialMethod;
this.form.priority = res.data.priority
? res.data.priority + ''
: '';
this.form.productLineId = res.data.productLineIds;
this.form.type = res.data.type;
this.form.workers = res.data.workers;
}
})
});
}
}
}
}
},
},
};
</script>

View File

@ -2,7 +2,7 @@
* @Author: zwq
* @Date: 2024-09-26 14:08:58
* @LastEditors: zwq
* @LastEditTime: 2024-11-05 14:19:46
* @LastEditTime: 2024-11-06 09:52:59
* @Description:
-->
<template>
@ -49,6 +49,7 @@ import { parseTime } from '@/utils/ruoyi';
import inputArea from './inputArea.vue';
import selectMember from './selectMember';
import selectTime from './selectTime';
import { publicFormatter } from '@/utils/dict'
const tableProps = [
{
prop: 'name',
@ -61,19 +62,16 @@ const tableProps = [
prop: 'code',
label: '订单编码',
minWidth: 180,
subcomponent: inputArea,
},
{
prop: 'productName',
label: '产品',
showOverflowtooltip: true,
subcomponent: inputArea,
},
{
prop: 'specifications',
label: '产品规格',
showOverflowtooltip: true,
subcomponent: inputArea,
},
// {
// prop: 'priority',
@ -97,19 +95,20 @@ const tableProps = [
prop: 'customerId',
label: '客户',
showOverflowtooltip: true,
subcomponent: selectMember,
// subcomponent: selectMember,
},
{
prop: 'price',
label: '单价',
width: 100,
subcomponent: inputArea,
// subcomponent: inputArea,
},
{
prop: 'packSpec',
label: '包装规格',
width: 100,
subcomponent: selectMember,
filter: publicFormatter('pack_spec')
// subcomponent: selectMember,
},
{
prop: 'remark',
@ -171,6 +170,7 @@ export default {
this.list = res.data;
this.list.forEach((item, index) => {
item.name = item.name + '-' + (index + 1);
item.code = item.code + '-' + (index + 1);
});
});
} else {
@ -249,7 +249,6 @@ export default {
// }
// },
inputChange(data) {
console.log(data)
switch (data.sType) {
case 1:
this.list[data._pageIndex - 1][data.prop] = data[data.prop];

View File

@ -1,108 +1,209 @@
<template>
<div class="app-container">
<!-- 搜索工作栏 -->
<search-bar :formConfigs="formConfig" ref="searchBarForm" @headBtnClick="buttonClick" />
<!-- 列表 -->
<base-table ref="table" @row-click="handleRowClick" row-key="id"
:tree-props="{ children: 'children'}"
:page="queryParams.pageNo" :limit="queryParams.pageSize" :table-props="tableProps" :table-data="list"
:max-height="tableH">
<method-btn v-if="tableBtn.length" slot="handleBtn" :width="240" label="操作" :method-list="tableBtn"
@clickBtn="handleClick" />
</base-table>
<pagination :page.sync="queryParams.pageNo" :limit.sync="queryParams.pageSize" :total="total"
<search-bar
:formConfigs="formConfig"
ref="searchBarForm"
@headBtnClick="buttonClick" />
<el-table
:data="list"
:header-cell-style="{
background: '#F2F4F9',
color: '#606266',
}"
class="orderTable"
v-loading="loading"
border
style="width: 100%"
:max-height="tableH"
:row-class-name="tableRowClassName"
ref="table"
row-key="id"
lazy
:load="load"
:tree-props="{ children: 'children', hasChildren: 'hasChildren' }">
<el-table-column prop="grade" label="订单类型" width="150">
<template slot-scope="scope">
{{
scope.row.grade != null
? ['一级订单', '二级订单', '三级订单'][scope.row.grade - 1]
: '-'
}}
</template>
</el-table-column>
<el-table-column prop="createTime" label="添加时间" width="160">
<template v-slot="scope">
<span>{{ parseTime(scope.row.createTime) }}</span>
</template>
</el-table-column>
<el-table-column
prop="name"
label="订单名称"
show-overflow-tooltip
min-width="120" />
<el-table-column prop="code" label="订单编码" width="160" />
<el-table-column
prop="customerName"
label="客户"
show-overflow-tooltip
min-width="120" />
<el-table-column prop="status" label="订单状态">
<template v-slot="scope">
<span>
{{ getDictDataLabel(DICT_TYPE.ORDER_STATUS, scope.row.status) }}
</span>
</template>
</el-table-column>
<el-table-column prop="planQuantity" label="计划加工量" width="100" />
<el-table-column prop="actualQuantity" label="实际加工量" width="100" />
<el-table-column
prop="productName"
label="产品"
show-overflow-tooltip
min-width="120" />
<el-table-column prop="deliveTime" label="交货时间" width="160">
<template v-slot="scope">
<span>{{ parseTime(scope.row.deliveTime) }}</span>
</template>
</el-table-column>
<el-table-column prop="workOrderNum" label="工单数量" width="140">
<template v-slot="scope">
<el-button @click="handleRoute" type="text">
{{ scope.row.workOrderNum }}
</el-button>
</template>
</el-table-column>
<el-table-column label="操作" width="340">
<template v-slot="scope">
<el-button
type="text"
:disabled="!(scope.row.status != 5 && scope.row.workOrderNum === 0)"
@click="handleClick({ data: scope.row, type: 'split' })"
v-hasPermi="['base:order-manage:split']">
拆分订单
</el-button>
<span style="margin: 0 4px; font-size: 18px; color: #e5e7eb">|</span>
<el-button
type="text"
:disabled="
!(
scope.row.status === 1 ||
scope.row.status === 2 ||
scope.row.status === 3
)
"
@click="handleClick({ data: scope.row, type: 'bind' })"
v-hasPermi="['base:order-manage:bindWorkOrder']">
绑定工单
</el-button>
<!-- addWorkOrder -->
<span style="margin: 0 4px; font-size: 18px; color: #e5e7eb">|</span>
<el-button
type="text"
:disabled="!(scope.row.status === 2 || scope.row.status === 3)"
@click="handleClick({ data: scope.row, type: 'complete' })"
v-hasPermi="['base:order-manage:bindWorkOrder']">
完成
</el-button>
<span style="margin: 0 4px; font-size: 18px; color: #e5e7eb">|</span>
<el-button
type="text"
@click="handleClick({ data: scope.row, type: 'detail' })"
v-hasPermi="['base:order-manage:detail']">
<span class="iconfont icon-detail primary-color" />
</el-button>
<span style="margin: 0 4px; font-size: 18px; color: #e5e7eb">|</span>
<el-button
type="text"
:disabled="
!(scope.row.status === 1 && scope.row.triggerOrigin === 1)
"
@click="handleClick({ data: scope.row, type: 'edit' })"
v-hasPermi="['base:order-manage:edit']">
<span
class="iconfont icon-edit"
:class="
!(scope.row.status === 1 && scope.row.triggerOrigin === 1)
? ''
: 'primary-color'
" />
</el-button>
<span style="margin: 0 4px; font-size: 18px; color: #e5e7eb">|</span>
<el-button
type="text"
:disabled="scope.row.status != 1"
@click="handleClick({ data: scope.row, type: 'void' })"
v-hasPermi="['base:order-manage:delete']">
作废
</el-button>
<span style="margin: 0 4px; font-size: 18px; color: #e5e7eb">|</span>
<el-button
type="text"
@click="handleClick({ data: scope.row, type: 'stop' })"
v-hasPermi="['base:order-manage:stop']">
终止
</el-button>
</template>
</el-table-column>
</el-table>
<pagination
:page.sync="queryParams.pageNo"
:limit.sync="queryParams.pageSize"
:total="total"
@pagination="getList" />
<!-- 新增&编辑 -->
<base-dialog :dialogTitle="addOrEditTitle" :dialogVisible="centervisible" @cancel="handleCancel"
@confirm="handleConfirm" :before-close="handleCancel" width='60%'>
<base-dialog
:dialogTitle="addOrEditTitle"
:dialogVisible="centervisible"
@cancel="handleCancel"
@confirm="handleConfirm"
:before-close="handleCancel"
width="60%">
<order-add ref="orderAdd" @successSubmit="successSubmit" />
</base-dialog>
<!-- 查看详情 -->
<!-- 新增工单 -->
<base-dialog :dialogTitle="workIssueTitle" :dialogVisible="addWorkOrdervisible" @cancel="addWorkOrderCancel"
@confirm="addWorkOrderConfirm" :before-close="addWorkOrderCancel" width='70%'>
<add-work-order ref="addWorkOrder" @addWorkOrderSubmit="addWorkOrderSubmit" />
<base-dialog
:dialogTitle="workIssueTitle"
:dialogVisible="addWorkOrdervisible"
@cancel="addWorkOrderCancel"
@confirm="addWorkOrderConfirm"
:before-close="addWorkOrderCancel"
width="70%">
<add-work-order
ref="addWorkOrder"
@addWorkOrderSubmit="addWorkOrderSubmit" />
</base-dialog>
<base-dialog :dialogTitle="splitTitle" :dialogVisible="splitWorkOrdervisible" @cancel="splitWorkOrderCancel"
@confirm="splitWorkOrderConfirm" :before-close="splitWorkOrderCancel" width='70%'>
<order-split ref="splitWorkOrder" @splitWorkOrderSubmit="splitWorkOrderSubmit" />
<base-dialog
:dialogTitle="splitTitle"
:dialogVisible="splitWorkOrdervisible"
@cancel="splitWorkOrderCancel"
@confirm="splitWorkOrderConfirm"
:before-close="splitWorkOrderCancel"
width="70%">
<order-split
ref="splitWorkOrder"
@splitWorkOrderSubmit="splitWorkOrderSubmit" />
</base-dialog>
</div>
</template>
<script>
import { parseTime } from '@/utils/ruoyi'
import { getOrderPage, orderDelete, customerList, orderFinish, orderVoid, orderStop } from '@/api/base/orderManage'
import OrderAdd from './components/orderAdd'
import orderSplit from './components/orderSplit'
import orderNum from './components/orderNum.vue'
import { parseTime } from '@/utils/ruoyi';
import {
getOrderPage,
orderDelete,
orderAssignmentList,
orderFinish,
orderVoid,
orderStop,
} from '@/api/base/orderManage';
import OrderAdd from './components/orderAdd';
import orderSplit from './components/orderSplit';
import AddWorkOrder from './components/addWorkOrder';
import AddWorkOrder from './components/addWorkOrder'
import { publicFormatter } from '@/utils/dict'
const tableProps = [
// {
// prop: 'type',
// label: '',
// showOverflowtooltip: true
// },
{
prop: 'createTime',
label: '添加时间',
filter: parseTime,
minWidth: 160
},
{
prop: 'name',
label: '订单名称',
minWidth: 120,
showOverflowtooltip: true
},
{
prop: 'code',
label: '订单编码',
minWidth: 160
},
{
prop: 'customerName',
label: '客户',
showOverflowtooltip: true
},
// {
// prop: 'priority',
// label: '',
// filter: publicFormatter('order_priority')
// },
{
prop: 'status',
label: '订单状态',
filter: publicFormatter('order_status')
},
{
prop: 'planQuantity',
label: '计划加工量',
width: 100
},
{
prop: 'actualQuantity',
label: '实际加工量',
width: 100
},
{
prop: 'productName',
label: '产品',
showOverflowtooltip: true
},
{
prop: 'deliveTime',
label: '交货时间',
filter: parseTime,
minWidth: 160
},
{
prop: 'workOrderNum',
label: '工单数量',
subcomponent: orderNum,
}
]
export default {
name: 'OrderManage',
data() {
@ -112,7 +213,7 @@ export default {
type: 'input',
label: '订单名称',
placeholder: '订单名称',
param: 'name'
param: 'name',
},
{
type: 'select',
@ -120,260 +221,124 @@ export default {
selectOptions: this.getDictDatas(this.DICT_TYPE.ORDER_STATUS),
labelField: 'label',
valueField: 'value',
param: 'status'
param: 'status',
},
{
type: 'datePicker',
label: '时间段',
dateType: 'daterange',
format: 'yyyy-MM-dd',
valueFormat: "yyyy-MM-dd",
valueFormat: 'yyyy-MM-dd',
rangeSeparator: '-',
startPlaceholder: '开始时间',
endPlaceholder: '结束时间',
param: 'timeVal',
defaultSelect: [],
width: 250
width: 250,
},
{
type: 'button',
btnName: '查询',
name: 'search',
color: 'primary'
color: 'primary',
},
{
type: this.$auth.hasPermi('base:order-manage:create') ? 'separate' : '',
type: this.$auth.hasPermi('base:order-manage:create')
? 'separate'
: '',
},
{
type: this.$auth.hasPermi('base:order-manage:create') ? 'button' : '',
btnName: '新增',
name: 'add',
color: 'success',
plain: true
}
plain: true,
},
],
loading: false,
splitTitle: '拆分订单',
splitWorkOrdervisible:false,
splitWorkOrdervisible: false,
//
queryParams: {
pageNo: 1,
pageSize: 20,
name: null,
status: null,
lastIssuedTime: []
lastIssuedTime: [],
},
total: 0,
tableProps,
list: [],
tableH: this.tableHeight(260),
tableBtn: [
this.$auth.hasPermi('base:order-manage:split')
? {
type: 'split',
btnName: '拆分订单',
showTip: '拆分订单',
showParam: {
type: '&',
data: [
{
type: 'unequal',
name: 'status',
value: 5
},
{
type: 'equal',
name: 'workOrderNum',
value: 0
},
]
}
}
: undefined,
this.$auth.hasPermi('base:order-manage:addWorkOrder')
? {
type: 'add',
btnName: '新增',
showTip: '新增工单',
showParam: {
type: '|',
data: [
{
type: 'equal',
name: 'status',
value: 1
},
{
type: 'equal',
name: 'status',
value: 2
},
{
type: 'equal',
name: 'status',
value: 3
}
]
}
}
: undefined,
this.$auth.hasPermi('base:order-manage:bindWorkOrder')
? {
type: 'bind',
btnName: '绑定',
showTip: '绑定工单',
showParam: {
type: '|',
data: [
{
type: 'equal',
name: 'status',
value: 1
},
{
type: 'equal',
name: 'status',
value: 2
},
{
type: 'equal',
name: 'status',
value: 3
}
]
}
}
: undefined,
this.$auth.hasPermi('base:order-manage:bindWorkOrder')
? {
type: 'complete',
btnName: '完成',
showTip: '完成订单',
showParam: {
type: '|',
data: [
{
type: 'equal',
name: 'status',
value: 2
},
{
type: 'equal',
name: 'status',
value: 3
}
]
}
}
: undefined,
this.$auth.hasPermi('base:order-manage:detail')
? {
type: 'detail',
btnName: '详情'
}
: undefined,
this.$auth.hasPermi('base:order-manage:edit')
? {
type: 'edit',
btnName: '编辑',
showParam: {
type: '&',
data: [
{
type: 'equal',
name: 'triggerOrigin',
value: 1
},
{
type: 'equal',
name: 'status',
value: 1
}
]
}
}
: undefined,
this.$auth.hasPermi('base:order-manage:delete')
? {
type: 'void',
btnName: '作废',
showParam: {
type: '&',
data: [
{
type: 'equal',
name: 'status',
value: 1
}
]
}
}
: undefined,
this.$auth.hasPermi('base:order-manage:stop')
? {
type: 'stop',
btnName: '终止',
// showParam: {
// type: '&',
// data: [
// {
// type: 'equal',
// name: 'status',
// value: 1
// }
// ]
// }
}
: undefined
].filter((v) => v),
addOrEditTitle: '',
centervisible: false,
expandedRowKeys:[],
expandedRowKeys: [],
priorityList: this.getDictDatas(this.DICT_TYPE.ORDER_PRIORITY),
workIssueTitle: '',
addWorkOrdervisible: false,
orderDetailVisible: false
}
orderDetailVisible: false,
};
},
components: { OrderAdd, AddWorkOrder,orderSplit },
components: { OrderAdd, AddWorkOrder, orderSplit },
created() {
window.addEventListener('resize', () => {
this.tableH = this.tableHeight(260)
})
this.getList()
this.tableH = this.tableHeight(260);
});
this.getList();
},
methods: {
async handleRowClick(row) {
console.log(row)
if (!row.children) {
const queryParams = {
pageNo: this.queryParams.pageNo,
pageSize: this.queryParams.pageSize,
name: this.queryParams.name,
status: this.queryParams.status,
lastIssuedTime: this.queryParams.lastIssuedTime,
parentId: row.id
}
const response = await getOrderPage(queryParams)
// row.children = response.data.records
this.list.forEach((ele) => {
if (ele.id === row.id) {
this.$set(this.list[row._pageIndex-1], 'children', response.data.records); //
}
})
row.hasChildren = true;
this.$set(row, 'expanded', true); //
} else {
row.expanded = !row.expanded; // /
}
// this.$nextTick(() => {
// const tableInstance = this.$refs.table.getTableRef();
// tableInstance.toggleRowExpansion(row);
// })
load(tree, treeNode, resolve) {
setTimeout(() => {
getOrderPage({ ...this.queryParams, parentId: tree.id }).then((res) => {
let arr = res.data.records || [];
// if (arr.length > 0) {
// arr.forEach((item) => {
// item.hasChildren = true;
// });
// } else {
// this.$message('');
// }
resolve(arr);
});
}, 1000);
},
// async handleRowClick(row) {
// console.log(row);
// if (!row.children) {
// const queryParams = {
// pageNo: this.queryParams.pageNo,
// pageSize: this.queryParams.pageSize,
// name: this.queryParams.name,
// status: this.queryParams.status,
// lastIssuedTime: this.queryParams.lastIssuedTime,
// parentId: row.id,
// };
// const response = await getOrderPage(queryParams);
// // row.children = response.data.records
// this.list.forEach((ele) => {
// if (ele.id === row.id) {
// this.$set(
// this.list[row._pageIndex - 1],
// 'children',
// response.data.records
// ); //
// }
// });
// row.hasChildren = true;
// this.$set(row, 'expanded', true); //
// } else {
// row.expanded = !row.expanded; // /
// }
// // this.$nextTick(() => {
// // const tableInstance = this.$refs.table.getTableRef();
// // tableInstance.toggleRowExpansion(row);
// // })
// },
getList() {
getOrderPage({...this.queryParams}).then(res => {
let arr = res.data.records || []
this.total = res.data.total || 0
this.loading = true;
this.list = [];
getOrderPage({ ...this.queryParams }).then((res) => {
let arr = res.data.records || [];
this.total = res.data.total || 0;
// if (arr.length > 0) {
// customerList().then(result => {
// let tempData = result.data || []
@ -386,144 +351,178 @@ export default {
// }
// item.price = item.price.toFixed(2)
// })
this.list = arr
this.list = arr;
this.loading = false;
// }
// })
// }else {
// this.list = arr
// }
})
});
},
buttonClick(val) {
console.log(val)
if (val.btnName === 'search') {
this.queryParams.name = val.name
this.queryParams.status = val.status
this.queryParams.name = val.name;
this.queryParams.status = val.status;
if (val.timeVal && val.timeVal.length > 0) {
this.queryParams.lastIssuedTime[0] = val.timeVal[0] + ' 00:00:00'
this.queryParams.lastIssuedTime[1] = val.timeVal[1] + ' 23:59:59'
this.queryParams.lastIssuedTime[0] = val.timeVal[0] + ' 00:00:00';
this.queryParams.lastIssuedTime[1] = val.timeVal[1] + ' 23:59:59';
} else {
this.queryParams.lastIssuedTime = []
this.queryParams.lastIssuedTime = [];
}
this.getList()
this.getList();
} else {
this.addOrEditTitle = '新增'
this.centervisible = true
this.addOrEditTitle = '新增';
this.centervisible = true;
this.$nextTick(() => {
this.$refs.orderAdd.init()
})
this.$refs.orderAdd.init();
});
}
},
handleClick(val) {
console.log(val)
console.log(val);
switch (val.type) {
case 'edit':
this.addOrEditTitle = '编辑'
this.centervisible = true
this.addOrEditTitle = '编辑';
this.centervisible = true;
this.$nextTick(() => {
this.$refs.orderAdd.init(val.data.id)
})
break
this.$refs.orderAdd.init(val.data.id);
});
break;
case 'delete':
this.handleDelete(val.data)
break
this.handleDelete(val.data);
break;
case 'detail':
this.$router.push({path: 'order-detail-data?orderId='+ val.data.id})
break
this.$router.push({
path: 'order-detail-data?orderId=' + val.data.id,
});
break;
case 'add':
this.workIssueTitle = '新增工单'
this.addWorkOrdervisible = true
this.workIssueTitle = '新增工单';
this.addWorkOrdervisible = true;
this.$nextTick(() => {
this.$refs.addWorkOrder.init(val.data, 'add')
})
break
this.$refs.addWorkOrder.init(val.data, 'add');
});
break;
case 'void':
orderVoid({ id: val.data.id }).then((res) => {
console.log(res)
})
break
console.log(res);
});
break;
case 'split':
this.splitTitle = '拆分订单'
this.splitWorkOrdervisible = true
this.splitTitle = '拆分订单';
this.splitWorkOrdervisible = true;
this.$nextTick(() => {
this.$refs.splitWorkOrder.init(val.data)
})
this.$refs.splitWorkOrder.init(val.data);
});
// orderVoid({ id: val.data.id }).then((res) => {
// console.log(res)
// })
break
break;
case 'bind':
this.workIssueTitle = '绑定工单'
this.addWorkOrdervisible = true
this.workIssueTitle = '绑定工单';
this.addWorkOrdervisible = true;
this.$nextTick(() => {
this.$refs.addWorkOrder.init(val.data, 'bind')
})
break
this.$refs.addWorkOrder.init(val.data, 'bind');
});
break;
case 'complete':
this.handleComplete(val.data)
break
this.handleComplete(val.data);
break;
case 'stop':
orderStop({ id: val.data.id }).then((res) => {
this.getList()
})
break
this.getList();
});
break;
default:
}
},
//
handleDelete(val) {
this.$modal.confirm('是否确认删除"' + val.name + '"的数据项?').then(function() {
return orderDelete({ id: val.id })
}).then(() => {
this.$modal
.confirm('是否确认删除"' + val.name + '"的数据项?')
.then(function () {
return orderDelete({ id: val.id });
})
.then(() => {
this.getList();
this.$modal.msgSuccess("操作成功");
}).catch(() => {});
this.$modal.msgSuccess('操作成功');
})
.catch(() => {});
},
//
handleComplete(val) {
this.$modal.confirm('是否确认完成订单"' + val.name + '"?').then(function() {
return orderFinish({ id: val.id })
}).then(() => {
this.$modal
.confirm('是否确认完成订单"' + val.name + '"?')
.then(function () {
return orderFinish({ id: val.id });
})
.then(() => {
this.getList();
this.$modal.msgSuccess("操作成功");
}).catch(() => {});
this.$modal.msgSuccess('操作成功');
})
.catch(() => {});
},
//
handleCancel() {
this.$refs.orderAdd.formClear()
this.centervisible = false
this.addOrEditTitle = ''
this.$refs.orderAdd.formClear();
this.centervisible = false;
this.addOrEditTitle = '';
},
handleConfirm() {
this.$refs.orderAdd.submitForm()
this.$refs.orderAdd.submitForm();
},
successSubmit() {
this.handleCancel()
this.getList()
this.handleCancel();
this.getList();
},
//
addWorkOrderCancel() {
this.$refs.addWorkOrder.formClear()
this.addWorkOrdervisible = false
this.$refs.addWorkOrder.formClear();
this.addWorkOrdervisible = false;
},
addWorkOrderConfirm() {
this.$refs.addWorkOrder.addWorkOrderSubmit()
this.$refs.addWorkOrder.addWorkOrderSubmit();
},
addWorkOrderSubmit() {
this.addWorkOrderCancel()
this.getList()
this.addWorkOrderCancel();
this.getList();
},
splitWorkOrderCancel() {
this.$refs.splitWorkOrder.formClear()
this.splitWorkOrdervisible = false
this.$refs.splitWorkOrder.formClear();
this.splitWorkOrdervisible = false;
},
splitWorkOrderConfirm() {
this.$refs.splitWorkOrder.submitForm()
this.$refs.splitWorkOrder.submitForm();
},
splitWorkOrderSubmit() {
this.splitWorkOrderCancel()
this.getList()
this.splitWorkOrderCancel();
this.getList();
},
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,
});
},
tableRowClassName({ row, rowIndex }) {
if (row.grade === 2) {
return 'warning-row';
} else if (row.grade === 3) {
return 'success-row';
}
return '';
},
// bindWorkOrderCancel() {
// this.$refs.bindWorkOrder.formClear()
// this.bindWorkOrdervisible = false
@ -535,6 +534,40 @@ export default {
// this.bindWorkOrderCancel()
// this.getList()
// }
}
}
},
};
</script>
<style scoped>
.iconfont {
font-family: 'iconfont' !important;
font-size: 16px;
font-style: normal;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
.delete-color {
color: #ff5454;
}
.primary-color {
color: #0b58ff;
}
.icon-detail:before {
content: '\e601';
}
.icon-edit:before {
content: '\e602';
}
.orderTable >>> .warning-row {
background: oldlace;
}
.orderTable >>> .success-row {
background: #f0f9eb;
}
.orderTable >>> tbody tr:hover > td {
background-color: unset !important;
}
</style>

View File

@ -38,9 +38,16 @@
{{ getDictDataLabel(DICT_TYPE.PACK_SPEC, orderMsg.packSpec) }}
</div>
</el-col>
<el-col :span='3'>
<el-col :span="3">
<div class="blodTip">物料计算方式</div>
<div class="lightTip">{{orderMsg.materialMethod ? (orderMsg.materialMethod === 1 ? '产品基础' : '工艺扩展') : ''}}
<div class="lightTip">
{{
orderMsg.materialMethod
? orderMsg.materialMethod === 1
? '产品基础'
: '工艺扩展'
: ''
}}
</div>
</el-col>
<!-- <el-col :span="3">
@ -143,6 +150,7 @@
<el-tree
:data="treeData"
:props="defaultProps"
default-expand-all
@node-click="handleNodeClick"></el-tree>
</el-col>
<el-col :span="18">
@ -185,16 +193,23 @@ const tableProps1 = [
filter: parseTime,
minWidth: 160,
},
{
prop: 'type',
label: '订单/工单类型',
minWidth: 140,
showOverflowtooltip: true,
sortable:true
},
{
prop: 'name',
label: '工单名',
label: '订单/工单名',
minWidth: 100,
showOverflowtooltip: true,
},
{
prop: 'code',
label: '工单编码',
minWidth: 150,
label: '订单/工单编码',
minWidth: 165,
},
{
prop: 'planAssignmentQuantity',
@ -206,11 +221,11 @@ const tableProps1 = [
label: '实际加工量',
width: 100,
},
{
prop: 'actualArea',
label: '加工平方数',
width: 100,
},
// {
// prop: 'actualArea',
// label: '',
// width: 100,
// },
{
prop: 'status',
label: '状态',
@ -298,12 +313,10 @@ export default {
this.activeModule = val;
},
handleNodeClick(val) {
console.log(val);
getDetailTreeInfo({
id: val.id,
}).then((res) => {
this.list1 = res.data.order;
console.log(res);
this.list1 = res.data;
});
},
initData(to) {
@ -313,12 +326,10 @@ export default {
}
},
getMsg() {
console.log(this.orderId)
orderDetail({
id: this.orderId,
}).then((res) => {
this.orderMsg = res.data;
this.list1 = res.data.coreWorkOrderRespVOS;
getOrderRemainNum(this.orderId).then((resNum) => {
bomUseNum({
@ -339,11 +350,20 @@ export default {
}
});
});
getDetailTreeInfo({
id: this.orderId,
}).then((res) => {
this.list1 = res.data;
});
getDetailTree({
id: this.orderId,
}).then((res) => {
console.log(res);
this.treeData = res.data;
this.treeData.unshift({
id:this.orderId,
name:'全部'
})
});
//
getProcessFlowList().then((res) => {