You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

519 lines
16 KiB
Vue

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

<template>
<div class="app-container">
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
<el-form-item label="工单编码" prop="workorderCode">
<el-input
v-model="queryParams.workorderCode"
placeholder="请输入工单编码"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="工单状态" prop="status">
<el-select
v-model="queryParams.status"
placeholder="工单状态"
clearable
style="width: 240px"
>
<el-option
v-for="dict in dict.type.workorder_type"
:key="dict.value"
:label="dict.label"
:value="dict.value"
/>
</el-select>
</el-form-item>
<el-form-item label="订单编码" prop="orderCode">
<el-input
v-model="queryParams.orderCode"
placeholder="请输入订单编码"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="产品名称" prop="productName">
<el-input
v-model="queryParams.productName"
placeholder="请输入产品名称"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="工艺编码" prop="routeCode">
<el-input
v-model="queryParams.routeCode"
placeholder="请输入工艺编码"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="产线编码" prop="prodLineCode">
<el-input
v-model="queryParams.prodLineCode"
placeholder="请输入产线编码"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="生产日期" prop="productDateArray">
<el-date-picker
v-model="queryParams.productDateArray"
value-format="yyyy-MM-dd"
type="daterange"
range-separator="至"
start-placeholder="开始日期"
end-placeholder="结束日期">
</el-date-picker>
</el-form-item>
<el-form-item label="班次" prop="shiftId">
<el-input
v-model="queryParams.shiftId"
placeholder="请输入班次"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item>
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
</el-form-item>
</el-form>
<el-row :gutter="10" class="mb8">
<!--<el-col :span="1.5">
<el-button
type="primary"
plain
icon="el-icon-plus"
size="mini"
@click="handleAdd"
v-hasPermi="['mes:pro:workorder:add']"
>上传SAP生产</el-button>
</el-col>-->
<el-col :span="1.5">
<el-button
type="success"
plain
icon="el-icon-info"
size="mini"
:disabled="multiple&&multiple0"
@click="handleUpdateDown"
v-hasPermi="['mes:pro:workorder:edit']"
>下达工单</el-button>
</el-col>
<el-col :span="1.5">
<el-button
type="warning"
plain
icon="el-icon-edit"
size="mini"
:disabled="single"
@click="handleUpdate"
v-hasPermi="['mes:pro:workorder:edit']"
>工单变更</el-button>
</el-col>
<el-col :span="1.5">
<el-button
type="danger"
plain
icon="el-icon-delete"
size="mini"
:disabled="multiple"
@click="handleDelete"
v-hasPermi="['mes:pro:workorder:remove']"
>删除</el-button>
</el-col>
<el-col :span="1.5">
<el-button
type="warning"
plain
icon="el-icon-download"
size="mini"
@click="handleExport"
v-hasPermi="['mes:pro:workorder:export']"
>导出</el-button>
</el-col>
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
</el-row>
<el-table v-loading="loading" :data="workorderList" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" align="center" >
</el-table-column>
<el-table-column label="工单ID" align="center" prop="workorderId" v-if="false"/>
<el-table-column label="子工单编码" align="center" prop="workorderCode" width="180"/>
<el-table-column label="工单名称" align="center" prop="workorderName" v-if="false"/>
<el-table-column label="订单id" align="center" prop="orderId" v-if="false"/>
<el-table-column label="子订单编码" align="center" prop="orderCode" width="160"/>
<el-table-column label="产品ID" align="center" prop="productId" v-if="false"/>
<el-table-column label="产品编号" align="center" prop="productCode" width="160"/>
<el-table-column label="产品名称" align="center" prop="productName" width="160"/>
<el-table-column label="规格型号" align="center" prop="productSpc" v-if="false"/>
<el-table-column label="单位" align="center" prop="unit" />
<el-table-column label="已生产数量" align="center" prop="quantityProduced" width="100"/>
<el-table-column label="已拆分数量" align="center" prop="quantitySplit" width="100"/>
<el-table-column label="工艺编码" align="center" prop="routeCode" />
<el-table-column label="产线设备" align="center" prop="prodLineCode" />
<el-table-column label="工单生产日期" align="center" prop="productDate" width="180">
<template slot-scope="scope">
<span>{{ parseTime(scope.row.productDate, '{y}-{m}-{d}') }}</span>
</template>
</el-table-column>
<el-table-column label="班次" align="center" prop="shiftId" />
<el-table-column label="工单状态" align="center" prop="status" >
<template slot-scope="scope">
<dict-tag :options="dict.type.workorder_type" :value="scope.row.status"/>
</template>
</el-table-column>
<el-table-column label="备注" align="center" prop="remark" />
<el-table-column label="产品类型" align="center" prop="prodType" />
</el-table>
<pagination
v-show="total>0"
:total="total"
:page.sync="queryParams.pageNum"
:limit.sync="queryParams.pageSize"
@pagination="getList"
/>
<!-- 添加或修改生产工单对话框 -->
<el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
<el-form ref="form" :model="form" :rules="rules" label-width="80px">
<el-form-item label="工单编码" prop="workorderCode">
<el-input v-model="form.workorderCode" placeholder="请输入工单编码" />
</el-form-item>
<el-form-item label="工单名称" prop="workorderName">
<el-input v-model="form.workorderName" placeholder="请输入工单名称" />
</el-form-item>
<el-form-item label="订单id" prop="orderId">
<el-input v-model="form.orderId" placeholder="请输入订单id" />
</el-form-item>
<el-form-item label="订单编码" prop="orderCode">
<el-input v-model="form.orderCode" placeholder="请输入订单编码" />
</el-form-item>
<el-form-item label="产品ID" prop="productId">
<el-input v-model="form.productId" placeholder="请输入产品ID" />
</el-form-item>
<el-form-item label="产品编号" prop="productCode">
<el-input v-model="form.productCode" placeholder="请输入产品编号" />
</el-form-item>
<el-form-item label="产品名称" prop="productName">
<el-input v-model="form.productName" placeholder="请输入产品名称" />
</el-form-item>
<el-form-item label="规格型号" prop="productSpc">
<el-input v-model="form.productSpc" placeholder="请输入规格型号" />
</el-form-item>
<el-form-item label="单位" prop="unit">
<el-input v-model="form.unit" placeholder="请输入单位" />
</el-form-item>
<el-form-item label="已生产数量" prop="quantityProduced">
<el-input v-model="form.quantityProduced" placeholder="请输入已生产数量" />
</el-form-item>
<el-form-item label="已拆分数量" prop="quantitySplit">
<el-input v-model="form.quantitySplit" placeholder="请输入已拆分数量" />
</el-form-item>
<el-form-item label="工艺id" prop="routeCode">
<el-input v-model="form.routeCode" placeholder="请输入工艺id" />
</el-form-item>
<el-form-item label="产线设备" prop="prodLineCode">
<el-input v-model="form.prodLineCode" placeholder="请输入产线设备" />
</el-form-item>
<el-form-item label="工单生产日期" prop="productDate">
<el-date-picker
v-model="form.productDate"
type="daterange"
range-separator="至"
start-placeholder="开始日期"
end-placeholder="结束日期">
</el-date-picker>
</el-form-item>
<el-form-item label="班次" prop="shiftId">
<el-input v-model="form.shiftId" placeholder="请输入班次" />
</el-form-item>
<el-form-item label="父工单" prop="parentOrder">
<el-input v-model="form.parentOrder" placeholder="请输入父工单" />
</el-form-item>
<el-form-item label="备注" prop="remark">
<el-input v-model="form.remark" placeholder="请输入备注" />
</el-form-item>
<el-form-item label="预留字段1" prop="attr1">
<el-input v-model="form.attr1" placeholder="请输入预留字段1" />
</el-form-item>
<el-form-item label="预留字段2" prop="attr2">
<el-input v-model="form.attr2" placeholder="请输入预留字段2" />
</el-form-item>
<el-form-item label="预留字段3" prop="attr3">
<el-input v-model="form.attr3" placeholder="请输入预留字段3" />
</el-form-item>
<el-form-item label="预留字段4" prop="attr4">
<el-input v-model="form.attr4" placeholder="请输入预留字段4" />
</el-form-item>
<el-form-item label="${comment}" prop="factoryCode">
<el-input v-model="form.factoryCode" placeholder="请输入${comment}" />
</el-form-item>
<el-form-item label="是否为底层节点(1是0不是)" prop="isEnd">
<el-input v-model="form.isEnd" placeholder="请输入是否为底层节点(1是0不是)" />
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="submitForm">确 定</el-button>
<el-button @click="cancel"> </el-button>
</div>
</el-dialog>
</div>
</template>
<script>
import { listWorkorder, getWorkorder, delWorkorder,downWorkorder, addWorkorder, updateWorkorder } from "@/api/plan/workorder";
import moment from 'moment';
export default {
name: "Workorder",
dicts: ['workorder_type'],
data() {
return {
// 遮罩层
loading: true,
// 选中数组
ids: [],
cods:[],
// 非单个禁用
single: true,
// 非多个禁用
multiple: true,
// 下达禁用
statuses: [],
// 显示搜索条件
showSearch: true,
// 总条数
total: 0,
// 生产工单表格数据
workorderList: [],
// 弹出层标题
title: "",
// 是否显示弹出层
open: false,
// 查询参数
queryParams: {
productDateArray: [new Date(),new Date()],
pageNum: 1,
pageSize: 10,
workorderCode: null,
workorderName: null,
orderId: null,
orderCode: null,
productId: null,
productCode: null,
productName: null,
productSpc: null,
unit: null,
quantityProduced: null,
quantitySplit: null,
routeCode: null,
prodLineCode: null,
productDate: new Date(),
shiftId: null,
parentOrder: null,
ancestors: null,
status: 'w0',
attr1: null,
attr2: null,
attr3: null,
attr4: null,
prodType: null,
factoryCode: null,
isEnd: null
},
// 表单参数
form: {},
// 表单校验
rules: {
workorderCode: [
{ required: true, message: "工单编码不能为空", trigger: "blur" }
],
workorderName: [
{ required: true, message: "工单名称不能为空", trigger: "blur" }
],
orderId: [
{ required: true, message: "订单id不能为空", trigger: "blur" }
],
productCode: [
{ required: true, message: "产品编号不能为空", trigger: "blur" }
],
productName: [
{ required: true, message: "产品名称不能为空", trigger: "blur" }
],
unit: [
{ required: true, message: "单位不能为空", trigger: "blur" }
],
}
};
},
created() {
this.getList();
},
methods: {
/** 查询生产工单列表 */
getList() {
this.loading = true;
this.queryParams.isEnd = '1';//只查子单
if(this.queryParams.productDateArray!=null){
this.queryParams.productDateStart = moment(this.queryParams.productDateArray[0]).format('YYYY-MM-DD');
this.queryParams.productDateEnd = moment(this.queryParams.productDateArray[1]).format('YYYY-MM-DD');
}
listWorkorder(this.queryParams).then(response => {
this.workorderList = response.rows;
this.total = response.total;
this.loading = false;
});
},
// 取消按钮
cancel() {
this.open = false;
this.reset();
},
// 表单重置
reset() {
this.form = {
workorderId: null,
workorderCode: null,
workorderName: null,
orderId: null,
orderCode: null,
productId: null,
productCode: null,
productName: null,
productSpc: null,
unit: null,
quantityProduced: null,
quantitySplit: null,
routeCode: null,
prodLineCode: null,
productDate: null,
shiftId: null,
parentOrder: null,
ancestors: null,
status: null,
remark: null,
attr1: null,
attr2: null,
attr3: null,
attr4: null,
createBy: null,
createTime: null,
updateBy: null,
updateTime: null,
prodType: null,
factoryCode: null,
isEnd: null
};
this.resetForm("form");
},
/** 搜索按钮操作 */
handleQuery() {
this.queryParams.pageNum = 1;
this.getList();
},
/** 重置按钮操作 */
resetQuery() {
this.resetForm("queryForm");
this.handleQuery();
},
// 多选框选中数据
handleSelectionChange(selection) {
this.ids = selection.map(item => item.workorderId)
this.codes = selection.map(item => item.workorderCode)
this.single = selection.length!==1
this.multiple = !selection.length
this.statuses = selection.map(item => item.status)
},
/** 新增按钮操作 */
handleAdd() {
alert("待建设")
//this.reset();
//this.open = true;
//this.title = "添加生产工单";
},
/** 修改按钮操作 */
handleUpdate(row) {
this.reset();
const workorderId = row.workorderId || this.ids
getWorkorder(workorderId).then(response => {
this.form = response.data;
this.open = true;
this.title = "修改生产工单";
});
},
/**下达工单**/
handleUpdateDown(row) {
var statusesArray = this.statuses;
for(var i=0; i<statusesArray.length; i++) {
if(statusesArray[i]=='w1'){//
this.$modal.msgError("");
return
}
}
const workorderIds = row.workorderCode || this.codes;
this.$modal.confirm('"' + workorderIds + '"').then(function() {
return downWorkorder(workorderIds);
}).then(() => {
this.getList();
this.$modal.msgSuccess("下发成功");
}).catch(() => {});
},
/** 提交按钮 */
submitForm() {
this.$refs["form"].validate(valid => {
if (valid) {
if (this.form.workorderId != null) {
updateWorkorder(this.form).then(response => {
this.$modal.msgSuccess("修改成功");
this.open = false;
this.getList();
});
} else {
addWorkorder(this.form).then(response => {
this.$modal.msgSuccess("新增成功");
this.open = false;
this.getList();
});
}
}
});
},
/** 删除按钮操作 */
handleDelete(row) {
var statusesArray = this.statuses;
for(var i=0; i<statusesArray.length; i++) {
if(statusesArray[i]=='w1'){//
this.$modal.msgError("");
return
}
}
const workorderIds = row.workorderId || this.ids;
const workorderCodes = row.workorderCode || this.codes;
this.$modal.confirm('"' + workorderCodes + '"').then(function() {
return delWorkorder(workorderIds);
}).then(() => {
this.getList();
this.$modal.msgSuccess("删除成功");
}).catch(() => {});
},
/** 导出按钮操作 */
handleExport() {
this.download('workorder/workorder/export', {
...this.queryParams
}, `workorder_${new Date().getTime()}.xlsx`)
}
}
};
</script>