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.

765 lines
24 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="98px">
<el-form-item label="报工单编号" prop="reportCode">
<el-input
v-model="queryParams.reportCode"
placeholder="请输入报工单编号"
clearable
@keyup.enter.native="handleQuery"
/>
</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="workorderCode">
<el-input
v-model="queryParams.workorderCode"
placeholder="请输入生产工单编码"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="产品编码" prop="productCode">
<el-input
v-model="queryParams.productCode"
placeholder="请输入产品编码"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
</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="feedbackTimeArray">
<el-date-picker
v-model="queryParams.feedbackTimeArray"
format="yyyy-MM-dd"
type="datetimerange"
range-separator="至"
start-placeholder="开始日期"
end-placeholder="结束日期">
</el-date-picker>
</el-form-item>
<el-form-item label="SAP报工结果" prop="uploadStatus">
<el-select v-model="queryParams.uploadStatus" placeholder="请选择结果" clearable>
<el-option
v-for="item in uploadStatusList"
:key="item.dictValue"
:label="item.dictLabel"
:value="item.dictValue">
</el-option>
</el-select>
</el-form-item>
<el-form-item label="创建时间" prop="createTimeArray">
<el-date-picker
v-model="queryParams.createTimeArray"
format="yyyy-MM-dd HH:mm:ss"
type="datetimerange"
range-separator="至"
start-placeholder="开始日期"
end-placeholder="结束日期">
</el-date-picker>
</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:reportWork:add']"
>新增</el-button>
</el-col>
<el-col :span="1.5">
<el-button
type="success"
plain
icon="el-icon-edit"
size="mini"
:disabled="single"
@click="handleUpdate"
v-hasPermi="['mes:reportWork: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:reportWork:remove']"
>删除</el-button>
</el-col>
<el-col :span="1.5">
<el-button
type="primary"
plain
icon="el-icon-s-claim"
size="mini"
:disabled="single"
@click="handleReport"
v-hasPermi="['mes:reportWork:edit']"
>报工SAP</el-button>
</el-col>
<el-col :span="1.5">
<el-button
type="info"
plain
icon="el-icon-s-release"
size="mini"
:disabled="single"
@click="handleReportConsume"
v-hasPermi="['mes:reportWork:edit']"
>物料损耗</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:reportWork:export']"
>导出</el-button>
</el-col>
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
</el-row>
<el-table v-loading="loading" :data="reportWorkList" @selection-change="handleSelectionChange">
<el-table-column type="selection" align="center" />
<el-table-column label="报工单编号" align="center" prop="reportCode" width="120">
<template slot-scope="scope">
<el-button
type="text"
@click="handleView(scope.row)"
>{{scope.row.reportCode}}</el-button>
</template>
</el-table-column>
<el-table-column label="报工类型" align="center" prop="reportType" width="100">
<template slot-scope="scope">
<dict-tag :options="dict.type.report_type" :value="scope.row.reportType"/>
</template>
</el-table-column>
<el-table-column label="工单编码" align="center" prop="workorderCode" width="130"/>
<el-table-column label="产品编码" align="center" prop="productCode" width="130"
:formatter="productCodeFormate"
/>
<el-table-column label="产品名称" align="center" prop="productName" width="200"/>
<el-table-column label="排产数量(母)" align="center" prop="quantity" width="100"/>
<el-table-column label="规格型号" align="center" prop="spec" v-if="false"/>
<el-table-column label="单位" align="center" prop="unit" />
<el-table-column label="报工批次" align="center" prop="batch" width="100"/>
<el-table-column label="本次报工数量" align="center" prop="quantityFeedback" width="100"/>
<el-table-column label="用人数" align="center" prop="useMan" />
<el-table-column label="工时" align="center" prop="workTime" />
<el-table-column label="报工时间" align="center" prop="feedbackTime" width="150"/><!--加时分秒生成报工单的逻辑要变切记!!-->
<!--
<el-table-column label="不合格数量" align="center" prop="quantityUnqualified" width="100">
<template slot-scope="scope">
<div :style="{ color: scope.row.quantityUnqualified ? 'red' : 'red' }">
{{ scope.row.quantityUnqualified }}
</div>
</template>
</el-table-column>-->
<el-table-column label="报工人" align="center" prop="nickName" />
<el-table-column label="工号" align="center" prop="userName" v-if="false"/>
<!--
<el-table-column label="报工状态" align="center" prop="uploadStatus" width="100"/>-->
<el-table-column label="SAP报工时间" align="center" prop="uploadTime" width="150"/>
<!--<el-table-column label="报工信息" align="center" prop="uploadMsg" width="100"/>-->
<el-table-column label="线体编码" align="center" prop="machineCode" />
<el-table-column label="线体名称" align="center" prop="machineName" />
<el-table-column label="班组编码" align="center" prop="teamCode" v-if="false"/>
<el-table-column label="班次编码" align="center" prop="shiftCode" v-if="false"/>
<el-table-column label="创建时间" align="center" prop="createTime" width="150"/>
</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="1200px" append-to-body>
<el-form ref="form" :model="form" :rules="rules" label-width="110px">
<el-row>
<el-col :span="6">
<el-form-item label="报工单编号" prop="reportCode">
<el-input v-model="form.reportCode" placeholder="请输入报工单编号" disabled/>
</el-form-item>
</el-col>
</el-col>
<el-col :span="6">
<el-form-item label="报工人员姓名" prop="nickName">
<el-input v-model="form.nickName" placeholder="请输入报工人员" >
<el-button slot="append" @click="handleSelectUser" icon="el-icon-search"></el-button>
</el-input>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="报工人员工号" prop="userName">
<el-input v-model="form.userName" placeholder="请输入报工人员" disabled/>
</el-form-item>
</el-col>
<el-col v-if="false">
<el-form-item label="默认">
<el-input v-model="form.reportType" disabled/>
<el-input v-model="form.feedbackChannel" disabled/>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="生产工单编码" prop="workorderCode">
<el-input v-model="form.workorderCode" placeholder="请选择生产工单">
<el-button slot="append" @click="handleSelectWorkOrder" icon="el-icon-search"></el-button>
</el-input>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="6">
<el-form-item label="产品编码" prop="productCode">
<el-input v-model="form.productCode" placeholder="请输入产品编码" disabled/>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="产品名称" prop="productName">
<el-input v-model="form.productName" placeholder="请输入产品名称" disabled/>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="规格型号" prop="spec">
<el-input v-model="form.spec" placeholder="请输入内容" disabled/>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="班次编码" prop="shiftId" v-if="false">
<el-input v-model="form.shiftId" placeholder="请输入班次编码" />
</el-form-item>
<el-form-item label="班次名称" prop="shiftName">
<el-input v-model="form.shiftName" placeholder="请输入班次名称" disabled/>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="6">
<el-form-item label="排产数量" prop="quantity">
<el-input v-model="form.quantity" disabled/>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="单位" prop="unit">
<el-input v-model="form.unit" placeholder="请输入单位" disabled/>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="线体名称" prop="machineName">
<el-input v-model="form.machineName" placeholder="请选择线体名称">
<el-button slot="append" @click="handleSelectEquip" icon="el-icon-search"></el-button>
</el-input>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="线体编码" prop="machineCode">
<el-input v-model="form.machineCode" placeholder="请输入线体编码" disabled/>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="6">
<el-form-item label="报工时间" prop="feedbackTime">
<el-date-picker clearable
v-model="form.feedbackTime"
type="date"
value-format="yyyy-MM-dd"
style="width: 180px"
placeholder="请选择报工时间">
</el-date-picker>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="本次报工数量" prop="quantityFeedback">
<el-input-number
:min="0"
:step="1"
v-model="form.quantityFeedback"
style="width: 180px"
/>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="本次报工工时" prop="workTime">
<el-input-number
:min="0"
:step="1"
v-model="form.workTime"
style="width: 180px"
/>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="本次报工用人" prop="useMan">
<el-input-number
:min="0"
:step="1"
v-model="form.useMan"
style="width: 180px"
/>
</el-form-item>
</el-col>
<!--
<el-col :span="6">
<el-form-item label="班组编码" prop="teamCode">
<el-select v-model="form.teamCode" class="selectItem" placeholder="请选择班组">
<el-option v-for="(item,index) in teamList"
:key="index"
:label="item.teamDesc"
:value="item.teamCode">
</el-option>
</el-select>
</el-form-item>
</el-col>-->
</el-row>
<el-row>
<el-col :span="6">
<el-form-item label="批次编码" prop="batch">
<el-select v-model="form.batch" class="selectItem" placeholder="请选择班组" clearable>
<el-option v-for="(item,index) in batchList"
:key="index"
:label="item.batchCode"
:value="item.batchCode">
</el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="结束报工" prop="endReport">
<el-radio v-model="form.endReport" label="0">否</el-radio>
<el-radio v-model="form.endReport" label="1">是</el-radio>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="24">
<el-form-item label="备注" prop="remark">
<el-input v-model="form.remark" placeholder="请输入内容" type="textarea"/>
</el-form-item>
</el-col>
</el-row>
</el-form>
<div v-if="optType =='reportConsume' || optType =='view'">
<el-divider content-position="center" v-if="form.reportCode !=null">工单物料消耗明细</el-divider>
<ReportWorkConsume :reportCode="form.reportCode"
:productCode="form.productCode"
:workorderCode="form.workorderCode"
></ReportWorkConsume>
</div>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="cancel" v-if="optType =='view'">返回</el-button>
<el-button type="primary" @click="submitForm" v-else>确定</el-button>
<el-button @click="cancel"> </el-button>
</div>
</el-dialog>
<!--人员选择弹窗-->
<ItemSelectUser
ref="itemSelectUser"
@onSelected="onSelectUser"
></ItemSelectUser>
<!--工单选择弹窗-->
<ItemSelectWorkOrder
ref="itemSelectWorkOrder"
@onSelected="onSelectWorkOrder"
></ItemSelectWorkOrder>
<!--线体选择弹窗-->
<ItemSelectEquip
ref="itemSelectEquip"
@onSelected="onSelectEquip"
></ItemSelectEquip>
</div>
</template>
<script>
import { listReportWork, getReportWork, delReportWork, addReportWork, updateReportWork,reportSap,getBatchList } from "@/api/mes/reportWork";
import ReportWorkConsume from "./reportWorkConsume.vue";
import ItemSelectUser from "./selectUser.vue";
import ItemSelectWorkOrder from "./selectWorkOrder.vue";
import ItemSelectEquip from "./selectEquip.vue";
import moment from 'moment';
export default {
name: "ReportWork",
dicts: ['report_type'],
components: {ReportWorkConsume,ItemSelectUser,ItemSelectWorkOrder,ItemSelectEquip},
data() {
return {
optType: undefined,
// 遮罩层
loading: true,
// 选中数组
ids: [],
selectRow:{},
// 非单个禁用
single: true,
// 非多个禁用
multiple: true,
// 显示搜索条件
showSearch: true,
// 总条数
total: 0,
consumeTotal:0,
// 报工报表表格数据
reportWorkList: [],
reportWorkConsumeList: [],
// 弹出层标题
title: "",
// 是否显示弹出层
open: false,
consumeQueryParams:{
consumePageNum:1,
consumePageSize:10,
reportCode:null,
},
// 查询参数
queryParams: {
createTimeArray: [],
feedbackTimeArray: [],
pageNum: 1,
pageSize: 10,
reportType: null,
reportCode: null,
workorderCode: null,
productCode: null,
productName: null,
spec: null,
unit: null,
quantity: null,
quantityFeedback: null,
quantityQualified: null,
quantityUnqualified: null,
userName: null,
nickName: null,
feedbackChannel: null,
feedbackTime: null,
recordUser: null,
status: null,
workTime: null,
machineCode: null,
machineName: null,
teamCode: null,
shiftId: null,
attr1: null,
attr2: null,
attr3: null,
attr4: null,
},
// 表单参数
form: {
endReport:'0'
},
uploadStatusList:[
{"dictLabel":"待报工","dictValue":"0"},
{"dictLabel":"报工成功","dictValue":"1"},
{"dictLabel":"报工失败","dictValue":"2"}
],
teamList:[],
batchList:[],
// 表单校验
rules: {
workorderCode:[
{ required: true, message: "本次报工工单不能为空", trigger: "blur" }
],
quantityFeedback: [
{ required: true, message: "本次报工数量不能为空", trigger: "blur" }
],
feedbackTime: [
{ required: true, message: "本次报工时间不能为空", trigger: "blur" }
],
machineName: [
{ required: true, message: "本次报工线体不能为空", trigger: "blur" }
]
,nickName: [
{ required: true, message: "本次报工忍不能为空", trigger: "blur" }
],
}
};
},
created() {
this.getList();
this.getDate();
//this.getTeamList();
},
methods: {
//产品编码格式化
productCodeFormate(row, column, cellValue){
return cellValue.slice(7,18); //返回值
},
//获取班组下拉列表
//getTeamList(){
// getTeamList().then(response => {
// this.teamList = response;
// });
//},
/**获取默认查询时间段**/
getDate() {
let start = this.Fungetdate (0)
let end = this.Fungetdate (1)
this.queryParams.createTimeArray.push(start,end)
//this.queryParams.feedbackTimeArray.push(start,end)
},
Fungetdate (num) {
var dd = new Date();
dd.setDate(dd.getDate() + num);
var y = dd.getFullYear();
var m = dd.getMonth() + 1;//获取当前月份的日期
var d = dd.getDate();
return y + "-" + m + "-" + d+" 00:00:00";
},
/** 查询报工报表列表 */
getList() {
if(this.queryParams.createTimeArray !=null && this.queryParams.createTimeArray.length>0){
this.queryParams.createTimeStart = moment(this.queryParams.createTimeArray[0]).format('YYYY-MM-DD HH:mm:ss');
this.queryParams.createTimeEnd = moment(this.queryParams.createTimeArray[1]).format('YYYY-MM-DD HH:mm:ss');
}
if(this.queryParams.feedbackTimeArray !=null && this.queryParams.feedbackTimeArray.length>0){
this.queryParams.feedbackTimeStart = moment(this.queryParams.feedbackTimeArray[0]).format('YYYY-MM-DD 00:00:00');
this.queryParams.feedbackTimeEnd = moment(this.queryParams.feedbackTimeArray[1]).format('YYYY-MM-DD 00:00:00');
}
this.loading = true;
listReportWork(this.queryParams).then(response => {
this.reportWorkList = response.rows;
this.total = response.total;
this.loading = false;
});
},
// 查询明细按钮操作
handleView(row){
this.reset();
const id = row.id || this.ids;
getReportWork(id).then(response => {
this.form = response.data;
this.open = true;
this.title = "查看报工信息";
this.optType = "view";
});
},
// 取消按钮
cancel() {
this.open = false;
this.reset();
},
// 表单重置
reset() {
this.form = {
id: null,
reportType: 'UNI',
reportCode: null,
workorderCode: null,
productCode: null,
productName: null,
spec: null,
unit: null,
quantity: null,
quantityFeedback: null,
quantityQualified: null,
quantityUnqualified: null,
userName: null,
nickName: null,
feedbackChannel: 'PC',
feedbackTime: null,
recordUser: null,
status: null,
remark: null,
workTime: null,
machineCode: null,
machineName: null,
teamCode: null,
shiftId: null,
attr1: null,
attr2: null,
attr3: null,
attr4: null,
createBy: null,
createTime: null,
updateTime: null,
updateBy: null,
endReport:'0'
};
this.resetForm("form");
},
/** 搜索按钮操作 */
handleQuery() {
this.queryParams.pageNum = 1;
this.getList();
},
/** 重置按钮操作 */
resetQuery() {
this.resetForm("queryForm");
this.handleQuery();
},
// 多选框选中数据
handleSelectionChange(selection) {
this.ids = selection.map(item => item.id)
this.selectRow = selection
this.single = selection.length!==1
this.multiple = !selection.length
},
/** 新增按钮操作 */
handleAdd() {
this.reset();
this.open = true;
this.title = "添加报工记录";
this.optType = "add";
},
/** 修改按钮操作 */
handleUpdate(row) {
this.reset();
this.optType = "edit";
let sr = this.selectRow[0];
if(sr.uploadStatus =='sap报工成功'){
this.$modal.msgError(`上传sap成功,不允许修改`);
return
}
const id = row.id || this.ids
getReportWork(id).then(response => {
this.form = response.data;
this.open = true;
this.title = "修改报工报表";
});
},
/** 提交按钮 */
submitForm() {
this.$refs["form"].validate(valid => {
if (valid) {
if (this.form.id != null) {
updateReportWork(this.form).then(response => {
this.$modal.msgSuccess("修改成功");
this.open = false;
this.getList();
});
} else {
addReportWork(this.form).then(response => {
this.$modal.msgSuccess("新增成功");
this.open = false;
this.getList();
});
}
}
});
},
/** 删除按钮操作 */
handleDelete(row) {
let sr = this.selectRow[0];
if(sr.uploadStatus =='sap报工成功'){
this.$modal.msgError(`上传sap成功,不允许删除`);
return
}
const ids = row.id || this.ids;
this.$modal.confirm('是否确认删除报工报表编号为"' + ids + '"的数据项?').then(function() {
return delReportWork(ids);
}).then(() => {
this.getList();
this.$modal.msgSuccess("删除成功");
}).catch(() => {});
},
/** 报工按钮操作 */
handleReport(row) {
let sr = this.selectRow[0];
const code = sr.reportCode;
this.$modal.confirm('是否确认报工报表编号为"' + code + '"的数据项向sap报工').then(function() {
return reportSap(code);
}).then(() => {
this.getList();
this.$modal.msgSuccess("报工成功");
}).catch(() => {});
},
/** 物料损耗按钮操作 */
handleReportConsume(row) {
this.reset();
this.optType = "reportConsume";
let sr = this.selectRow[0];
const id = row.id || this.ids
getReportWork(id).then(response => {
this.form = response.data;
this.open = true;
this.title = "工单物料损耗";
});
},
/** 导出按钮操作 */
handleExport() {
this.download('mes/reportWork/export', {
...this.queryParams
}, `reportWork_${new Date().getTime()}.xlsx`)
},
/**人员选择弹出框**/
handleSelectUser() {
this.$refs.itemSelectUser.showFlag = true;
},
//人员选择确认
onSelectUser(obj) {
debugger
this.form.userName = obj.code;
this.form.nickName = obj.name;
},
/**工单选择弹出框**/
handleSelectWorkOrder() {
this.$refs.itemSelectWorkOrder.showFlag = true;
},
//工单选择确认
onSelectWorkOrder(obj) {
this.form.workorderCode = obj.workorderCode;
this.form.productName = obj.productName;
this.form.productCode = obj.productCode;
this.form.productSpc = obj.productSpc;
this.form.quantity = obj.quantitySplit;
this.form.unit = obj.unit;
this.form.shiftId = obj.shiftId;
this.form.shiftName = obj.shiftName;
getBatchList(obj.workorderCode).then(response => {
this.batchList = response;
});
},
/**线体选择弹出框**/
handleSelectEquip() {
this.$refs.itemSelectEquip.showFlag = true;
},
//线体选择确认
onSelectEquip(obj) {
this.form.machineCode = obj.equipmentCode;
this.form.machineName = obj.equipmentName;
},
}
};
</script>