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.

739 lines
22 KiB
Vue

2 years ago
<template>
<div class="app-container">
2 years ago
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="98px">
2 years ago
<el-form-item label="报工单编号" prop="reportCode">
<el-input
v-model="queryParams.reportCode"
placeholder="请输入报工单编号"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
1 year ago
<el-form-item label="生产订单编码" prop="orderCode">
2 years ago
<el-input
1 year ago
v-model="queryParams.orderCode"
placeholder="请输入生产订单编码"
2 years ago
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
2 years ago
<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>
2 years ago
</el-form-item>
1 year ago
<el-form-item label="产品名称" prop="productName">
2 years ago
<el-input
v-model="queryParams.productName"
placeholder="请输入产品名称"
clearable
@keyup.enter.native="handleQuery"
/>
1 year ago
</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
2 years ago
<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">
2 years ago
<el-col :span="1.5">
2 years ago
<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>
2 years ago
</el-col>
1 year ago
<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>
2 years ago
<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" />
2 years ago
<el-table-column label="报工单编号" align="center" prop="reportCode" width="120">
2 years ago
<template slot-scope="scope">
1 year ago
<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"
/>
2 years ago
<el-table-column label="产品名称" align="center" prop="productName" width="200"/>
2 years ago
<el-table-column label="规格型号" align="center" prop="spec" />
1 year ago
<el-table-column label="排产数量(母)" align="center" prop="quantity" width="100"/>
2 years ago
<el-table-column label="单位" align="center" prop="unit" />
<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" />
1 year ago
<el-table-column label="报工时间" align="center" prop="feedbackTime" width="150"/><!--加时分秒生成报工单的逻辑要变切记-->
<!--
2 years ago
<el-table-column label="不合格数量" align="center" prop="quantityUnqualified" width="100">
1 year ago
<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"/>-->
1 year ago
<el-table-column label="SAP报工时间" align="center" prop="uploadTime" width="150"/>
<!--<el-table-column label="报工信息" align="center" prop="uploadMsg" width="100"/>-->
2 years ago
<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"/>
1 year ago
<el-table-column label="创建时间" align="center" prop="createTime" width="150"/>
2 years ago
</el-table>
<pagination
v-show="total>0"
:total="total"
:page.sync="queryParams.pageNum"
:limit.sync="queryParams.pageSize"
@pagination="getList"
/>
<!-- 添加或修改报工报表对话框 -->
2 years ago
<el-dialog :title="title" :visible.sync="open" width="1200px" append-to-body>
<el-form ref="form" :model="form" :rules="rules" label-width="110px">
1 year ago
<el-row>
<el-col :span="6">
<el-form-item label="报工单编号" prop="reportCode">
<el-input v-model="form.reportCode" placeholder="请输入报工单编号" disabled/>
2 years ago
</el-form-item>
</el-col>
1 year ago
</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>
2 years ago
<el-row>
<el-col :span="6">
<el-form-item label="产品编码" prop="productCode">
1 year ago
<el-input v-model="form.productCode" placeholder="请输入产品编码" disabled/>
2 years ago
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="产品名称" prop="productName">
1 year ago
<el-input v-model="form.productName" placeholder="请输入产品名称" disabled/>
2 years ago
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="规格型号" prop="spec">
1 year ago
<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/>
2 years ago
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="6">
1 year ago
<el-form-item label="排产数量" prop="quantity">
<el-input v-model="form.quantity" disabled/>
2 years ago
</el-form-item>
</el-col>
<el-col :span="6">
1 year ago
<el-form-item label="单位" prop="unit">
<el-input v-model="form.unit" placeholder="请输入单位" disabled/>
2 years ago
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="线体名称" prop="machineName">
1 year ago
<el-input v-model="form.machineName" placeholder="请选择线体名称">
<el-button slot="append" @click="handleSelectEquip" icon="el-icon-search"></el-button>
</el-input>
2 years ago
</el-form-item>
</el-col>
<el-col :span="6">
1 year ago
<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">
2 years ago
<el-form-item label="报工时间" prop="feedbackTime">
<el-date-picker clearable
v-model="form.feedbackTime"
type="date"
1 year ago
value-format="yyyy-MM-dd"
style="width: 180px"
2 years ago
placeholder="请选择报工时间">
</el-date-picker>
</el-form-item>
</el-col>
<el-col :span="6">
1 year ago
<el-form-item label="本次报工数量" prop="quantityFeedback">
<el-input-number
:min="0"
:step="1"
v-model="form.quantityFeedback"
style="width: 180px"
/>
</el-form-item>
2 years ago
</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>
<!--
1 year ago
<el-col :span="6">
2 years ago
<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>
2 years ago
</el-form-item>
</el-col>-->
2 years ago
</el-row>
<el-row>
2 years ago
<el-col :span="24">
<el-form-item label="备注" prop="remark">
<el-input v-model="form.remark" placeholder="请输入内容" type="textarea"/>
2 years ago
</el-form-item>
</el-col>
</el-row>
2 years ago
</el-form>
1 year ago
<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>
2 years ago
<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>
2 years ago
</div>
</el-dialog>
1 year ago
<!--人员选择弹窗-->
<ItemSelectUser
ref="itemSelectUser"
@onSelected="onSelectUser"
></ItemSelectUser>
<!--工单选择弹窗-->
<ItemSelectWorkOrder
ref="itemSelectWorkOrder"
@onSelected="onSelectWorkOrder"
></ItemSelectWorkOrder>
<!--线体选择弹窗-->
<ItemSelectEquip
ref="itemSelectEquip"
@onSelected="onSelectEquip"
></ItemSelectEquip>
2 years ago
</div>
</template>
<script>
1 year ago
import { listReportWork, getReportWork, delReportWork, addReportWork, updateReportWork,reportSap } from "@/api/mes/reportWork";
import ReportWorkConsume from "./reportWorkConsume.vue";
1 year ago
import ItemSelectUser from "./selectUser.vue";
import ItemSelectWorkOrder from "./selectWorkOrder.vue";
import ItemSelectEquip from "./selectEquip.vue";
import moment from 'moment';
2 years ago
export default {
name: "ReportWork",
1 year ago
dicts: ['report_type'],
components: {ReportWorkConsume,ItemSelectUser,ItemSelectWorkOrder,ItemSelectEquip},
2 years ago
data() {
return {
optType: undefined,
2 years ago
// 遮罩层
loading: true,
// 选中数组
ids: [],
1 year ago
selectRow:{},
2 years ago
// 非单个禁用
single: true,
// 非多个禁用
multiple: true,
// 显示搜索条件
showSearch: true,
// 总条数
total: 0,
2 years ago
consumeTotal:0,
2 years ago
// 报工报表表格数据
reportWorkList: [],
2 years ago
reportWorkConsumeList: [],
2 years ago
// 弹出层标题
title: "",
// 是否显示弹出层
open: false,
1 year ago
consumeQueryParams:{
consumePageNum:1,
consumePageSize:10,
reportCode:null,
},
2 years ago
// 查询参数
queryParams: {
1 year ago
createTimeArray: [],
feedbackTimeArray: [],
2 years ago
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,
1 year ago
shiftId: null,
2 years ago
attr1: null,
attr2: null,
attr3: null,
attr4: null,
},
// 表单参数
form: {},
1 year ago
uploadStatusList:[
{"dictLabel":"待报工","dictValue":"0"},
{"dictLabel":"报工成功","dictValue":"1"},
{"dictLabel":"报工失败","dictValue":"2"}
],
teamList:[],
2 years ago
// 表单校验
rules: {
1 year ago
workorderCode:[
{ required: true, message: "本次报工工单不能为空", trigger: "blur" }
2 years ago
],
quantityFeedback: [
{ required: true, message: "本次报工数量不能为空", trigger: "blur" }
],
1 year ago
feedbackTime: [
{ required: true, message: "本次报工时间不能为空", trigger: "blur" }
2 years ago
],
1 year ago
machineName: [
{ required: true, message: "本次报工线体不能为空", trigger: "blur" }
]
,nickName: [
{ required: true, message: "本次报工忍不能为空", trigger: "blur" }
],
2 years ago
}
};
},
created() {
this.getList();
1 year ago
this.getDate();
//this.getTeamList();
2 years ago
},
methods: {
//产品编码格式化
productCodeFormate(row, column, cellValue){
return cellValue.slice(7,18); //返回值
},
//获取班组下拉列表
//getTeamList(){
// getTeamList().then(response => {
// this.teamList = response;
// });
//},
1 year ago
/**获取默认查询时间段**/
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";
},
2 years ago
/** 查询报工报表列表 */
getList() {
1 year ago
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');
}
2 years ago
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";
});
},
2 years ago
// 取消按钮
cancel() {
this.open = false;
this.reset();
},
// 表单重置
reset() {
this.form = {
id: null,
1 year ago
reportType: 'UNI',
2 years ago
reportCode: null,
workorderCode: null,
productCode: null,
productName: null,
spec: null,
unit: null,
quantity: null,
quantityFeedback: null,
quantityQualified: null,
quantityUnqualified: null,
userName: null,
nickName: null,
1 year ago
feedbackChannel: 'PC',
2 years ago
feedbackTime: null,
recordUser: null,
status: null,
remark: null,
workTime: null,
machineCode: null,
machineName: null,
teamCode: null,
1 year ago
shiftId: null,
2 years ago
attr1: null,
attr2: null,
attr3: null,
attr4: null,
createBy: null,
createTime: null,
updateTime: null,
updateBy: 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.id)
1 year ago
this.selectRow = selection
2 years ago
this.single = selection.length!==1
this.multiple = !selection.length
},
/** 新增按钮操作 */
handleAdd() {
this.reset();
this.open = true;
this.title = "添加报工记录";
this.optType = "add";
2 years ago
},
/** 修改按钮操作 */
handleUpdate(row) {
this.reset();
1 year ago
this.optType = "edit";
let sr = this.selectRow[0];
if(sr.uploadStatus =='sap报工成功'){
this.$modal.msgError(`上传sap成功,不允许修改`);
return
}
2 years ago
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) {
1 year ago
let sr = this.selectRow[0];
if(sr.uploadStatus =='sap报工成功'){
this.$modal.msgError(`上传sap成功,不允许删除`);
return
}
2 years ago
const ids = row.id || this.ids;
this.$modal.confirm('是否确认删除报工报表编号为"' + ids + '"的数据项?').then(function() {
return delReportWork(ids);
}).then(() => {
this.getList();
this.$modal.msgSuccess("删除成功");
}).catch(() => {});
},
1 year ago
/** 报工按钮操作 */
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 = "工单物料损耗";
});
},
2 years ago
/** 导出按钮操作 */
handleExport() {
this.download('mes/reportWork/export', {
...this.queryParams
}, `reportWork_${new Date().getTime()}.xlsx`)
1 year ago
},
/**人员选择弹出框**/
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;
},
/**线体选择弹出框**/
handleSelectEquip() {
this.$refs.itemSelectEquip.showFlag = true;
},
//线体选择确认
onSelectEquip(obj) {
this.form.machineCode = obj.equipmentCode;
this.form.machineName = obj.equipmentName;
},
2 years ago
}
};
</script>