计件工资统计

yangwl
Yangwl 9 months ago
parent 431cc25140
commit d88c1116ed

@ -0,0 +1,9 @@
import request from '@/utils/request'
export function listReportWorks(query) {
return request({
url: '/mes/reportWorks/lists',
method: 'get',
params: query
});
}

@ -0,0 +1,24 @@
import request from '@/utils/request'
// 查询unitPrice列表
export function listUnitPriceReport(query) {
return request({
url: '/mes/unitPriceReport/list',
method: 'get',
params: query
});
}
export function getReport(id) {
return request({
url: '/mes/unitPriceReport/' + id,
method: 'get'
});
}
// 修改计件工资统计
export function updateUnitPriceReport(data) {
return request({
url: '/mes/unitPriceReport',
method: 'put',
data: data
});
}

@ -23,7 +23,13 @@ export function getProduct(productId) {
method: 'get'
});
}
// 查询物料信息详细
export function getProductByCode(productCode) {
return request({
url: '/wms/product/code/' + productCode,
method: 'get'
});
}
// 新增物料信息
export function addProduct(data) {
return request({

@ -127,7 +127,17 @@
v-hasPermi="['mes:reportWork:edit']"
>报工SAP</el-button>
</el-col>
<el-col :span="1.5">
<el-button
type="primary"
plain
icon="el-icon-s-claim"
size="mini"
:disabled="single"
@click="handleReportCancel"
v-hasPermi="['mes:reportWork:edit']"
>撤销报工SAP</el-button>
</el-col>
<el-col :span="1.5">
<el-button
type="warning"
@ -148,6 +158,17 @@
@click="handleAddSAP"
>SAP收货</el-button>
</el-col>
<el-col :span="1.5">
<el-button
type="success"
plain
:disabled="single"
icon="el-icon-download"
size="mini"
@click="showPrint"
>打印预览
</el-button>
</el-col>
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
</el-row>
@ -162,7 +183,9 @@
>{{scope.row.workorderCode}}</el-button>
</template>
</el-table-column>
<el-table-column label="sap工单编码" align="center" prop="workorderCodeSap" width="130"/>
<el-table-column label="订单编码" align="center" prop="workorderCodeSap" width="130"
:formatter="orderCodeFormate"
/>
<el-table-column label="产品编码" align="center" prop="productCode" width="130"
:formatter="productCodeFormate"
/>
@ -172,10 +195,17 @@
<el-table-column label="排产数量" align="center" prop="quantity" width="100"/>
<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" width="100"/>
<el-table-column label="用人数" align="center" prop="useMan" width="100"/>
<el-table-column label="累计工时" align="center" prop="workTime" />
<el-table-column label="生产时间" align="center" prop="productDate" width="100"/>
<el-table-column label="SAP报工状态" align="center" prop="uploadStatus" width="150"/>
<el-table-column label="SAP报工状态" align="center" prop="uploadStatus" width="150">
<template slot-scope="scope">
<dict-tag
:options="dict.type.report_sap_status"
:value="scope.row.uploadStatus"
/>
</template>
</el-table-column>
<el-table-column label="SAP报工时间" align="center" prop="uploadTime" width="150"/>
<el-table-column label="SAP报工信息" align="center" prop="uploadMsg" width="150" :show-overflow-tooltip="true"/>
</el-table>
@ -534,6 +564,41 @@
<el-table-column label="创建时间" align="center" prop="createTime" width="150"/>
</el-table>
</el-tab-pane>
<!--母工单产品bom参考-->
<el-tab-pane label="BOM组成参照" name="pBom">
<el-table v-loading="loading" :data="pBomTableList" ref="pBomTable"
row-key="materialCode"
style="width: 100%"
max-height="480"
:tree-props="{children: 'children', hasChildren: 'hasChildren'}"
>
<el-table-column width="50" align="center" type="selection"/>
<el-table-column label="物料编码" width="160" align="left" prop="materialCode"/>
<el-table-column label="物料名称" width="280" align="left" prop="materialName" :show-overflow-tooltip="true" />
<el-table-column label="物料组编码" width="100" align="left" prop="productGroup" />
<el-table-column label="物料组名称" width="100" align="center" prop="productGroupName" :show-overflow-tooltip="true" />
<el-table-column label="标准用量" align="center" prop="standardDosage"/>
<el-table-column label="损耗率" align="center" prop="lossRate" width="100"/>
<el-table-column label="损耗额" align="center" prop="lossAmount" width="100"/>
<el-table-column label="含损耗用量" align="center" prop="cilosses" width="100"/>
<el-table-column label="成本核算标识相关" align="center" prop="sanka" width="100"/>
</el-table>
</el-tab-pane>
<!--子工单产品bom参考
<el-tab-pane label="子工单BOM组成" name="sBom">
<el-table v-loading="loading" :data="sBomTableList" ref="sBomTable">
<el-table-column width="50" align="center" type="selection"/>
<el-table-column label="物料编码" width="160" align="left" prop="component"/>
<el-table-column label="物料名称" width="280" align="left" prop="componentName" :show-overflow-tooltip="true" />
<el-table-column label="物料组编码" width="100" align="left" prop="productGroup" />
<el-table-column label="物料组名称" width="100" align="center" prop="productGroupName" :show-overflow-tooltip="true" />
<el-table-column label="标准用量" align="center" prop="standardDosage"/>
<el-table-column label="损耗率" align="center" prop="lossRate" width="150"/>
<el-table-column label="损耗额" align="center" prop="lossAmount" width="150"/>
<el-table-column label="含损耗用量" align="center" prop="cilosses" width="150"/>
<el-table-column label="成本核算标识相关" align="center" prop="sanka" width="150"/>
</el-table>
</el-tab-pane>-->
</el-tabs>
<div slot="footer" class="dialog-footer">
@ -574,12 +639,12 @@
<el-input type="number" size="small" v-model="scope.row.quantityQualified" @change="handleEdit(scope.$index,scope.row)"></el-input>
</template>
</el-table-column>
<!-- <el-table-column label="用人数" align="center" prop="useMan">-->
<!-- <template slot-scope="scope">-->
<!-- <el-input type="number" size="small" v-model="scope.row.useMan" @change="handleEdit(scope.$index,scope.row)"></el-input>-->
<!-- </template>-->
<!-- </el-table-column>-->
<!-- <el-table-column label="计划日期" width="100" align="center" prop="productDate"/>-->
<!-- <el-table-column label="用人数" align="center" prop="useMan">-->
<!-- <template slot-scope="scope">-->
<!-- <el-input type="number" size="small" v-model="scope.row.useMan" @change="handleEdit(scope.$index,scope.row)"></el-input>-->
<!-- </template>-->
<!-- </el-table-column>-->
<!-- <el-table-column label="计划日期" width="100" align="center" prop="productDate"/>-->
<el-table-column label="计划日期" width="180" align="center" prop="productDate">
<template slot-scope="scope">
<el-date-picker v-model="scope.row.productDate" :value-format="'yyyy-MM-dd'" type="date" ></el-date-picker>
@ -598,7 +663,7 @@
</el-tab-pane>
</el-tabs>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="cancel" v-if="optType =='view'"></el-button>
<el-button type="primary" @click="submitReportSAP" v-if="optType =='view'"> </el-button>
<el-button type="primary" @click="submitReportSAP" v-else> </el-button>
<el-button @click="cancel"> </el-button>
</div>
@ -620,14 +685,78 @@
@onSelected="onSelectEquip"
></ItemSelectEquip>
<!--母工单---->
<!-- 打印预览弹出层 -->
<el-dialog
title="生产订单确认入库"
:visible.sync="printDialogVisible"
width="1300px"
>
<div id="printFrom" class="my-print-box">
<el-form :ref="formRef" :model="form">
<!-- 表头-工单信息 -->
<el-row>
<el-col :span="7">
<img src="@/assets/logo/lanjv.png" class="report-logo"/>
</el-col>
<el-col :span="10" class="center-text">
<h1>生产订单确认入库单</h1>
</el-col>
</el-row>
<el-row class="my-print-head">
<el-col :offset="10" :span="4"></el-col><!---->
</el-row>
<!-- 导航栏 -->
<el-row class="my-print-nav">
<el-col :span="4">工厂:{{ printData.factory }}</el-col>
<el-col :span="4">工作中心:{{ printData.workCenter }}</el-col>
<el-col :span="4">打印日期:{{ printData.printDate }}</el-col>
<el-col :span="4">页次: 1/ 1</el-col>
</el-row>
<!-- 主数据 -->
<el-table v-if="refreshNewWorkerTable" v-loading="newWorkerLoading" class="my-print-table"
:data="printData.workTable" border style="width: 100%">
<el-table-column type="index" label="序号" width="50"></el-table-column>
<el-table-column prop="workorderCodeSap" label="订单号" width="100" :formatter="orderCodeFormate"/>
<el-table-column prop="workorderCode" label="生产工单号" width="130"></el-table-column>
<el-table-column prop="productCode" label="物料编码" width="120" :formatter="productCodeFormate"/>
<el-table-column prop="productName" label="物料名称" width="180"></el-table-column>
<el-table-column prop="unit" label="单位" width="50"></el-table-column>
<el-table-column prop="version" label="版本"></el-table-column>
<el-table-column prop="quantity" label="报工数量"></el-table-column>
<el-table-column prop="batch" label="批次" width="240"></el-table-column>
<el-table-column prop="quantityFeedback" label="批次数量" width="100"></el-table-column>
<el-table-column prop="voucher" label="凭证"></el-table-column>
</el-table>
<br/>
<!-- 底部
<el-row class="my-print-foot">
<el-col :offset="1" :span="3">SAP-No:{{ printData.SAPNo }}</el-col>
<el-col :offset="1" :span="3">Z-PM-F-030-A.1</el-col>
</el-row>
<el-row class="my-print-foot">
<el-col :offset="1" :span="3">制单人:{{ printData.manufacture }}</el-col>
<el-col :offset="1" :span="3">审核人{{ printData.auditor }}</el-col>
</el-row>
-->
</el-form>
</div>
<span slot="footer" class="dialog-footer">
<el-button type="primary" @click="handlePrint(printData)"> </el-button>
</span>
</el-dialog>
</div>
</template>
<script>
import { listReportWork, getReportWork, delReportWork, addReportWork, getWorkcenterList,
updateReportWork,reportSap,getBatchList,
getReportList,getReportSAPList,submitReportPS,submitReportPSSAP,getCKList} from "@/api/mes/reportWork";
import { getConsumeList,submitConsumePS,submitReportInfo} from "@/api/mes/reportWorkConsume";
updateReportWork,reportSap,getBatchList,reportSapCancel,
getReportList,getReportSAPList,submitReportPS,submitReportPSSAP,getCKList,
getPutInOrderList
} from "@/api/mes/reportWork";
import { getConsumeList,submitConsumePS,submitReportInfo,getBomList} from "@/api/mes/reportWorkConsume";
import ReportWorkConsume from "./reportWorkConsume.vue";
import ItemSelectUser from "./selectUser.vue";
import ItemSelectWorkOrder from "./selectWorkOrder.vue";
@ -636,7 +765,7 @@ import moment from 'moment';
import { getlistCK } from '@/api/wms/outorder'
export default {
name: "ReportWork",
dicts: ['report_type'],
dicts: ['report_type','report_sap_status'],
components: {ReportWorkConsume,ItemSelectUser,ItemSelectWorkOrder,ItemSelectEquip},
data() {
return {
@ -661,6 +790,8 @@ export default {
sOrderTableList: [],
pConsumeTableList: [],
sConsumeTableList: [],
pBomTableList: [],
sBomTableList: [],
activeName0: 'first',
activeName: 'pOrder',
activeName2: 'pConsume',
@ -740,6 +871,27 @@ export default {
],
teamList:[],
batchList:[],
printDialogVisible: false,
//
formRef: 'form',
printData: {
printable: 'printFrom',
ignore: ['no-print'],
workCenter: "暂无数据",
SAPNo: null,
manufacture: null,
auditor: null,
printDate: null,
factory: null,
productDate: null,
workTable: [],
},
refreshNewWorkerTable: true,
//
workerLoading: false,
newWorkerLoading: false,
//
refreshWorkerTable: true,
//
rules: {
workorderCode:[
@ -789,7 +941,12 @@ export default {
productCodeFormate(row, column, cellValue){
return cellValue.slice(7,18); //
},
//
orderCodeFormate(row, column, cellValue){
if(cellValue !=null){
return cellValue.slice(3,18); //
}
},
/**获取默认查询时间段**/
getDate() {
let start = this.Fungetdate (0)
@ -919,6 +1076,8 @@ export default {
this.reportRows = [];
this.pConsumeTableList = [];
this.sConsumeTableList = [];
this.pBomTableList = [],
this.sBomTableList = [],
this.pConsumeRows = [];
this.sConsumeRows = [];
this.consumeRows = [];
@ -951,7 +1110,7 @@ export default {
this.reset();
let sr = this.selectRow[0];
if(sr.uploadStatus =='sap报工成功'){
if(sr.uploadStatus =='1'){
this.optType = 'view'
}else{
this.optType = ''
@ -988,7 +1147,7 @@ export default {
this.reset();
this.optType = "edit";
let sr = this.selectRow[0];
if(sr.uploadStatus =='sap报工成功'){
if(sr.uploadStatus =='1'){
this.$modal.msgError(`上传sap成功,不允许修改`);
return
}
@ -1024,7 +1183,7 @@ export default {
handleDelete(row) {
let sr = this.selectRow[0];
if(sr.uploadStatus =='sap报工成功'){
if(sr.uploadStatus =='1'){
this.$modal.msgError(`上传sap成功,不允许删除`);
return
}
@ -1041,7 +1200,7 @@ export default {
handleReport(row) {
this.loading = true;
let sr = this.selectRow[0];
if(sr.uploadStatus =='sap报工成功'){
if(sr.uploadStatus =='1'){
this.$modal.msgError(`上报sap已完成,不能重复报工`);
return
}
@ -1061,13 +1220,32 @@ export default {
});
},
/**报工撤销sap。报工状态回退**/
handleReportCancel(){
this.loading = true;
let sr = this.selectRow[0];
const code = sr.workorderCode;
let _this = this;
this.$modal.confirm('是否确认工单"' + code + '"的数据项撤销sap报工').then(function() {
reportSapCancel(code).then(response => {
if(response !=null && response.code ==200){
_this.$modal.msgSuccess("报工撤销成功");
}
_this.loading = false;
});
}).then(() => {
}).catch(() => {
});
},
/** 报工详情按钮操作 */
handleReportHz(row) {
this.reset();
let sr = row;
if(sr.uploadStatus =='sap报工成功'){
if(sr.uploadStatus =='1'){
this.optType = 'view'
}else{
this.optType = ''
@ -1137,14 +1315,7 @@ export default {
/** 报工损耗按钮操作 */
handleConsumeHz(row) {
this.reset();
let sr = row;
if(sr.uploadStatus =='sap报工成功'){
this.optType = 'view'
}else{
this.optType = ''
}
let sr = this.selectRow[0];
this.queryParams.workorderCode = sr.workorderCode;
//
this.queryParams.parentOrder = '0';
@ -1163,6 +1334,19 @@ export default {
this.queryParams.workorderCode = '';
});
this.queryParams.workorderCode = sr.workorderCode;
//BOM
this.queryParams.parentOrder = '0';
getBomList(this.queryParams).then(response => {
this.pBomTableList = this.handleTree(response, 'materialCode', 'pMaterialCode')
});
//BOM
//this.queryParams.parentOrder = sr.workorderCode;
//getBomList(this.queryParams).then(response => {
// this.sBomTableList = response;
// this.queryParams.workorderCode = '';
//});
},
//
pConsumeSelection(selection) {
@ -1244,7 +1428,57 @@ export default {
this.open = false;
this.getList();
});
},
// -
handlePrint(params) {
printJS({
printable: params.printable, // 'printFrom', // id
type: params.type || 'html',
maxWidth: 1500, //
font_size: "",//
header: params.header, // '',
targetStyles: ['*'],
style: '@page {margin:0 10mm};', // -
ignoreElements: params.ignore || [], // ['no-print']
properties: params.properties || null
})
},
// -
showPrint() {
//
this.printData.workCenter = "暂无数据";
this.printData.printDate = null;
this.printData.workTable = [];
this.printData.factory = null;
this.printData.productDate = null;
//
this.printDialogVisible = true;
this.printData.printDate = moment(new Date()).format('YYYY.MM.DD');
this.printData.manufacture = this.$store.state.user.name;
this.newWorkerLoading = true // true
this.refreshNewWorkerTable = false // refreshProTablefalse
getPutInOrderList(this.selectRow[0].workorderCode).then(response => {
this.printData.workTable = response.data;
this.printData.factory = response.data[0].factoryCode;
this.printData.workCenter = response.data[0].workshopName;
this.refreshNewWorkerTable = true // refreshProTabletrue
this.newWorkerLoading = false // false
})
}
}
};
</script>
<style scoped>
.print-btn{
margin-bottom: 15px;
margin-left: 10px;
}
.center-text {
text-align: center;
}
.report-logo {
margin-top: 15px;
margin-left: 15px;
height: 38px;
}
</style>

@ -0,0 +1,395 @@
<template>
<div class="app-container">
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" >
<el-form-item label="工单编码/SAP订单号/产品编码" prop="keywords">
<el-input
v-model="queryParams.keywords"
placeholder="工单编码/SAP订单号/产品编码"
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>
<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-col>
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
</el-row>
<el-table
v-loading="loading" :data="reportWorkList" @selection-change="handleSelectionChange"
row-key="id"
lazy
:load="load"
:tree-props="{children: 'children', hasChildren: 'hasChildren'}">
<el-table-column type="selection" align="center" />
<el-table-column label="SAP订单编码" align="center" prop="workorderCodeSap" width="130">
</el-table-column>
<el-table-column label="产品编码" align="center" prop="productCode" width="130"
:formatter="productCodeFormate"
/>
<el-table-column label="线体编码" align="center" prop="machineCode" />
<el-table-column label="线体名称" align="center" prop="machineName" />
<el-table-column label="产品名称" align="center" prop="productName" width="220" :show-overflow-tooltip="true" />
<el-table-column label="排产数量" align="center" prop="quantity" width="100"/>
<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" width="100"/>
<el-table-column label="累计工时" align="center" prop="workTime" />
<el-table-column label="生产时间" align="center" prop="productDate" width="100"/>
<el-table-column label="SAP报工状态" align="center" prop="uploadStatus" width="150"/>
<el-table-column label="SAP报工时间" align="center" prop="uploadTime" width="150"/>
<el-table-column label="SAP报工信息" align="center" prop="uploadMsg" width="150" :show-overflow-tooltip="true"/>
</el-table>
<pagination
v-show="total>0"
:total="total"
:page.sync="queryParams.pageNum"
:limit.sync="queryParams.pageSize"
@pagination="getList"
/>
</div>
</template>
<script>
import { listReportWorks} from "@/api/mes/reportWorks";
import moment from 'moment';
export default {
name: "ReportWork",
dicts: ['report_type'],
data() {
return {
optType: undefined,
//
loading: true,
//
ids: [],
selectRow:{},
//
single: true,
//
multiple: true,
//
showSearch: true,
//
total: 0,
consumeTotal:0,
// SAPCD:"",
//
title: "",
titleConsume:"",
titleReport:"",
//
open: false,
openReport: false,
openReportSAP: false,
openConsume: 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,
workorderCodeSap: null,
parentOrder:null,
uploadStatus:"0"
},
//
form: {
endReport:'0',
consumesInfos:[]
},
formSAdd: {
endReport:'0'
},
teamList:[],
batchList:[],
//
};
},
created() {
//this.getDate();
this.getList();
},
methods: {
//
productCodeFormate(row, column, cellValue){
return cellValue.slice(7,18); //
},
/**获取默认查询时间段**/
getDate() {
// let start = this.Fungetdate (0)
// let end = this.Fungetdate (1)
//this.queryParams.createTimeArray.push(start,end)
//this.queryParams.feedbackTimeArray.push(start,end)
this.getList();
},
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;
},
/** 查询报工报表列表 */
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');
// this.queryParams.feedbackTimeEnd = moment(this.queryParams.feedbackTimeArray[1]).format('YYYY-MM-DD');
// }
this.loading = true;
listReportWorks(this.queryParams).then(response => {
this.reportWorkList = response.rows;
this.total = response.total;
this.loading = false;
});
},
//
cancel() {
this.open = false;
this.openReport = false;
this.openReportSAP=false;
this.openConsume = 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");
this.pOrderTableList = [];
this.sOrderTableList = [];
this.pReportRows = [];
this.sReportRows = [];
this.reportRows = [];
this.pConsumeTableList = [];
this.sConsumeTableList = [];
this.pConsumeRows = [];
this.sConsumeRows = [];
this.consumeRows = [];
},
/** 搜索按钮操作 */
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(() => {});
},
/** 报工按钮操作 */
handleEdit(index, row) {
console.log('row:',index, row);
},
//
pReportSelection(selection) {
this.pReportRows = selection
},
sReportSelection(selection) {
this.sReportRows = selection
},
/** 导出按钮操作 */
handleExport() {
this.download('mes/reportWork/export', {
...this.queryParams
}, `reportWork_${new Date().getTime()}.xlsx`)
},
}
};
</script>

@ -44,27 +44,27 @@
</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="['system:unitPrice: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="['system:unitPrice:edit']"
>修改</el-button>
</el-col>
<!-- <el-col :span="1.5">-->
<!-- <el-button-->
<!-- type="primary"-->
<!-- plain-->
<!-- icon="el-icon-plus"-->
<!-- size="mini"-->
<!-- @click="handleAdd"-->
<!-- v-hasPermi="['system:unitPrice: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="['system:unitPrice:edit']"-->
<!-- >修改</el-button>-->
<!-- </el-col>-->
<el-col :span="1.5">
<el-button
type="danger"
@ -144,14 +144,15 @@
<el-row>
<el-col :span="12">
<el-form-item label="产品编码" prop="productCode">
<el-input
placeholder="请输入内容"
v-model="form.productCode"
>
<template slot="suffix">
<i class="el-input__icon el-icon-search" @click="handleSearch"></i>
</template>
</el-input>
<el-input v-model="form.productCode" :disabled="true"/>
<!-- <el-input-->
<!-- placeholder="请输入内容"-->
<!-- v-model="form.productCode"-->
<!-- >-->
<!-- <template slot="suffix">-->
<!-- <i class="el-input__icon el-icon-search" @click="handleSearch"></i>-->
<!-- </template>-->
<!-- </el-input>-->
</el-form-item>
</el-col>
@ -165,24 +166,18 @@
<el-row>
<el-col :span="12">
<el-form-item label="产线" prop="lineName">
<el-select v-model="form.lineName" filterable placeholder="请选择产线"
@change="handleSelectChange">
<option
v-for="item in options"
:key="item.value"
:value="item.value"
>
{{ item.label }}
</option>
<el-option
v-for="item in options"
:key="item.value"
:label="item.label"
:value="item.value"
:data-label="item.label"> <!-- 将label的值作为data-label属性传递 -->
</el-option>
</el-select>
</el-form-item>npn
<el-input v-model="form.lineName" :disabled="true"/>
<!-- <el-select v-model="form.lineName" filterable placeholder="请选择产线"-->
<!-- @change="handleSelectChange">-->
<!-- <el-option-->
<!-- v-for="item in options"-->
<!-- :key="item.value"-->
<!-- :label="item.label"-->
<!-- :value="item.value"-->
<!-- :data-label="item.label"> &lt;!&ndash; 将label的值作为data-label属性传递 &ndash;&gt;-->
<!-- </el-option>-->
<!-- </el-select>-->
</el-form-item>
</el-col>
<el-col :span="12">
@ -191,46 +186,69 @@
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="子工序编码" prop="childprocessCode">
<el-input v-model="form.childprocessCode" :disabled="true"/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="子工序名称" prop="childprocessName">
<el-input v-model="form.childprocessName" :disabled="true"/>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="单价(元/PC" prop="attr1" label-width="120px" >
<el-input v-model="form.attr1" @input="handleInput"/>
</el-form-item>
</el-col>
</el-row>
</el-form>
<el-divider content-position="center" >操作步骤</el-divider>
<el-button type="primary"
plain
icon="el-icon-plus"
size="mini"
@click="addRow">添加</el-button>
<el-table
:data="tableData"
style="width: 100%; height: 300px; overflow-y: auto;"
border
stripe
>
<!-- Your table columns go here -->
<!-- For example, if you have columns named 'name' and 'age': -->
<el-table-column label="序号" prop="childProcessCode" width="100"></el-table-column>
<!-- <el-divider content-position="center" >操作步骤</el-divider>-->
<!-- <el-button type="primary"-->
<!-- plain-->
<!-- icon="el-icon-plus"-->
<!-- size="mini"-->
<!-- @click="addRow">添加</el-button>-->
<!-- <el-table-->
<!-- :data="tableData"-->
<!-- style="width: 100%; height: 300px; overflow-y: auto;"-->
<!-- border-->
<!-- stripe-->
<!-- >-->
<!-- &lt;!&ndash; Your table columns go here &ndash;&gt;-->
<!-- &lt;!&ndash; For example, if you have columns named 'name' and 'age': &ndash;&gt;-->
<!-- <el-table-column label="序号" prop="childProcessCode" width="100"></el-table-column>-->
<el-table-column label="工序名称" prop="childProcessName">
<template slot-scope="scope">
<!-- <el-table-column label="工序名称" prop="childProcessName">-->
<!-- <template slot-scope="scope">-->
<el-input
v-model="scope.row.childProcessName" @change="handleEdit(scope.row, scope.$index)" ></el-input>
</template>
</el-table-column>
<!-- <el-input-->
<!-- v-model="scope.row.childProcessName" @change="handleEdit(scope.row, scope.$index)" ></el-input>-->
<!-- </template>-->
<!-- </el-table-column>-->
<el-table-column label="工序单价(元 / PC" prop="unitPrice">
<template slot-scope="scope">
<!-- <el-table-column label="工序单价(元 / PC" prop="unitPrice">-->
<!-- <template slot-scope="scope">-->
<el-input
:type="inputType"
@input="handleInput(scope.row, scope.$index)"
v-model="scope.row.unitPrice" @change="handleEditUnitPrice(scope.row, scope.$index)" ></el-input>
</template>
</el-table-column>
<el-table-column label="操作" width="100">
<template slot-scope="scope">
<el-button size="mini" @click="handlDelete(scope.$index)"></el-button>
</template>
</el-table-column>
</el-table>
<!-- <el-input-->
<!-- :type="inputType"-->
<!-- @input="handleInput(scope.row, scope.$index)"-->
<!-- v-model="scope.row.unitPrice" @change="handleEditUnitPrice(scope.row, scope.$index)" ></el-input>-->
<!-- </template>-->
<!-- </el-table-column>-->
<!-- <el-table-column label="操作" width="100">-->
<!-- <template slot-scope="scope">-->
<!-- <el-button size="mini" @click="handlDelete(scope.$index)"></el-button>-->
<!-- </template>-->
<!-- </el-table-column>-->
<!-- </el-table>-->
@ -255,9 +273,9 @@
<i class="el-icon-upload"></i>
<div class="el-upload__text">将文件拖到此处<em>点击上传</em></div>
<div class="el-upload__tip text-center" slot="tip">
<div class="el-upload__tip" slot="tip">
<el-checkbox v-model="upload.updateSupport" /> 是否更新已经存在的数据
</div>
<!-- <div class="el-upload__tip" slot="tip">-->
<!-- <el-checkbox v-model="upload.updateSupport" /> 是否更新已经存在的数据-->
<!-- </div>-->
<span>仅允许导入xlsxlsx格式文件</span>
<el-link type="primary" :underline="false" style="font-size:12px;vertical-align: baseline;" @click="importTemplate"></el-link>
</div>
@ -274,7 +292,7 @@
// import { ElEditable } from 'element-plus';
import { getToken } from "@/utils/auth";
import { listUnitPrice, getUnitPrice, delUnitPrice, addUnitPrice, updateUnitPrice } from "@/api/mes/unitPrice";
import { listProduct} from "@/api/wms/product";
import { getProductByCode} from "@/api/wms/product";
import { listChildprocessall} from "@/api/mes/childprocess";
export default {
name: "UnitPrice",
@ -372,6 +390,9 @@ export default {
],
lineName: [
{ required: true, message: "产线不能为空", trigger: "blur" },
],
attr1: [
{ required: true, message: "单价不能为空", trigger: "blur" },
],
},
productCodeList: [],
@ -418,13 +439,12 @@ export default {
console.log('Edited row:', row);
row._editablechildProcessName = false; // Set _editable to false after editing
},
handleInput(row, index) {
//
// 使
const numericRegex = /^\d+(\.\d*)?$/;
if (!numericRegex.test(row.unitPrice)) {
//
this.$set(this.tableData, index, { ...row, unitPrice: row.unitPrice.replace(/[^\d.]/g, '') });
handleInput(value) {
//
const regex = /^[0-9]*\.?[0-9]*$/;
if (!regex.test(value)) {
//
this.form.attr1 = value.replace(/[^0-9.]/g, '');
}
},
handleEditUnitPrice(row, index) {
@ -499,7 +519,7 @@ export default {
getUnitPrice(picId).then(response => {
this.form = response.data;
this.open = true;
this.title = "修改unitPrice";
this.title = "修改产品单价";
});
},
/** 提交按钮 */
@ -507,13 +527,14 @@ export default {
this.$refs["form"].validate(valid => {
if (valid) {
console.log(this.form,this.tableData)
// if (this.form.picId != null) {
// updateUnitPrice(this.form).then(response => {
// this.$modal.msgSuccess("");
// this.open = false;
// this.getList();
// });
// } else {
if (this.form.picId != null) {
updateUnitPrice(this.form).then(response => {
this.$modal.msgSuccess("修改成功");
this.open = false;
this.getList();
});
}
// else {
// addUnitPrice(this.form).then(response => {
// this.$modal.msgSuccess("");
// this.open = false;
@ -536,7 +557,7 @@ export default {
},
/** 导出按钮操作 */
handleExport() {
this.download('system/unitPrice/export', {
this.download('mes/unitPrice/export', {
...this.queryParams
}, `unitPrice_${new Date().getTime()}.xlsx`)
},
@ -570,14 +591,15 @@ export default {
handleSearch() {
console.log('Search triggered with input:', this.form.productCode);
listProduct(this.form).then(response => {
this.form.productName=response.rows[0].productDescZh;
let productCode=this.form.productCode;
getProductByCode(productCode).then(response => {
this.form.productName=response.data.productDescZh;
});
},
handleSelectChange(value,option) {
handleSelectChange(value) {
// Add your logic here to handle the selection change
console.log(value,option)
// this.form.lineCode = value;
console.log(value)
this.form.lineCode = value;
// this.form.lineName = selectedData;
// You can perform any actions based on the selected value here.
// For example, call a function or update some other data.

@ -0,0 +1,314 @@
<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="workorderCodeSap">
<el-input
v-model="queryParams.workorderCodeSap"
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 label="物料描述" prop="productName">
<el-input
v-model="queryParams.productName"
placeholder="请输入物料描述"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="产线编码" prop="lineCode">
<el-input
v-model="queryParams.lineCode"
placeholder="请输入产线编码"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="产线名称" prop="lineName">
<el-input
v-model="queryParams.lineName"
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-table v-loading="loading" :data="unitPriceList" @selection-change="handleSelectionChange">
<!-- <el-table-column type="selection" width="55" align="center" />-->
<el-table-column fixed="left" label="工单号" align="center" width="180" prop="workorderCode" />
<el-table-column fixed="left" label="SAP订单号" align="center" width="120" prop="workorderCodeSap" />
<el-table-column label="物料码" align="center" width="110">
<template slot-scope="scope">
{{ scope.row.productCode.slice(-11) }}
</template>
</el-table-column>
<el-table-column label="物料描述" align="center" width="250" prop="productName" />
<el-table-column label="产线编码" align="center" prop="lineCode" />
<el-table-column label="产线名称" align="center" prop="equipmentName" />
<el-table-column label="操作者" width="110" align="center" prop="nickName" />
<el-table-column label="子工序名称" width="110" align="center" prop="childprocessName" />
<el-table-column label="工序单价" align="center" prop="attr1" />
<el-table-column label="件数" align="center" prop="totalQuantity" />
<el-table-column label="薪酬(元)" width="110" align="center" prop="result" />
<el-table-column label="人数" align="center" prop="headCount" />
<el-table-column label="平均工资(元)" width="110" align="center" prop="avgResult" />
<el-table-column label="实际工资(元)" width="110" align="center" prop="realWages" />
<!-- <el-table-column label="实际工资" align="center" prop="realWages">-->
<!-- <template slot-scope="scope">-->
<!-- <el-input type="text" size="small" v-model="scope.row.realWages" @change="handleEdit(scope.$index,scope.row)"></el-input>-->
<!-- </template>-->
<!-- </el-table-column>-->
<!-- <el-table-column label="实际工资" align="center" prop="realWages" />-->
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
<template slot-scope="scope">
<el-button
size="mini"
type="text"
icon="el-icon-edit"
@click="handleUpdate(scope.row)"
v-hasPermi="['system:unitPrice:edit']"
>工资修改</el-button>
<!-- <el-button-->
<!-- size="mini"-->
<!-- type="text"-->
<!-- icon="el-icon-delete"-->
<!-- @click="handleDelete(scope.row)"-->
<!-- v-hasPermi="['system:unitPrice:remove']"-->
<!-- >删除</el-button>-->
</template>
</el-table-column>
</el-table>
<pagination
v-show="total>0"
:total="total"
:page.sync="queryParams.pageNum"
:limit.sync="queryParams.pageSize"
@pagination="getList"
/>
<!-- 添加或修改unitPrice对话框 -->
<el-dialog :title="title" :visible.sync="open" width="680px" append-to-body>
<el-form ref="form" :model="form" :rules="rules" label-width="100px">
<el-row>
<el-col :span="12">
<el-form-item label="实际工资" prop="attr1" >
<el-input v-model="form.attr1" />
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="24">
<el-form-item label="备注">
<el-input v-model="form.remark" type="textarea" placeholder="请输入内容"></el-input>
</el-form-item>
</el-col>
</el-row>
</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 { ElEditable } from 'element-plus';
import { getToken } from "@/utils/auth";
import { listUnitPriceReport,getReport,updateUnitPriceReport } from "@/api/mes/unitPriceReport";
export default {
name: "UnitPrice",
// components: {
// 'el-editable': ElEditable,
// //
// },
data() {
return {
//
loading: true,
//
ids: [],
//
single: true,
//
multiple: true,
//
showSearch: true,
//
total: 0,
// unitPrice
unitPriceList: [],
//
title: "",
//
open: false,
value: '',
//
queryParams: {
pageNum: 1,
pageSize: 10,
factoryId: null,
workorderCodeSap: null,
productCode: null,
productName: null,
lineCode: null,
lineName: null,
childprocessId: null,
childprocessCode: null,
childprocessName: null,
attr1: null,
attr2: null,
attr3: null,
attr4: null,
},
productQueryParams:{
productCode: null,
productName: null,
},
//
form: {},
//
productCodeList: [],
state: '',
timeout: null,
productCode:'',
tableData: [],
};
},
created() {
this.getList();
// this.fetchProcessOptions();
},
methods: {
handleEdit(index, row) {
console.log('row:',index, row);
},
/** 查询unitPrice列表 */
getList() {
this.loading = true;
listUnitPriceReport(this.queryParams).then(response => {
this.unitPriceList = response.rows;
this.total = response.total;
this.loading = false;
});
},
//
cancel() {
this.open = false;
this.reset();
},
//
reset() {
this.form = {
picId: null,
factoryId: null,
productCode: null,
productName: null,
lineCode: null,
lineName: null,
childprocessId: null,
childprocessCode: null,
childprocessName: null,
attr1: null,
attr2: null,
attr3: null,
attr4: null,
createBy: null,
createTime: null,
updateBy: null,
updateTime: null
};
this.resetForm("form");
this.tableData = [];
this.nextID=1;
},
/** 搜索按钮操作 */
handleQuery() {
this.queryParams.pageNum = 1;
this.getList();
},
/** 重置按钮操作 */
resetQuery() {
this.resetForm("queryForm");
this.handleQuery();
},
//
handleSelectionChange(selection) {
this.ids = selection.map(item => item.picId)
this.single = selection.length !== 1
this.multiple = !selection.length
},
/** 新增按钮操作 */
handleAdd() {
this.reset();
this.open = true;
this.title = "添加计件薪酬信息";
},
/** 修改按钮操作 */
handleUpdate(row) {
console.log(row)
this.reset();
const picId = row.id || this.ids
getReport(picId).then(response => {
this.form = response.data;
this.open = true;
if (response.data.attr1 === null || response.data.attr1 === undefined) {
this.form.attr1 = row.avgResult;
} else {
this.form.attr1 = response.data.attr1;
}
});
},
/** 提交按钮 */
submitForm() {
this.$refs["form"].validate(valid => {
if (valid) {
console.log(this.form,this.tableData)
if (this.form.id != null) {
updateUnitPriceReport(this.form).then(response => {
this.$modal.msgSuccess("修改成功");
this.open = false;
this.getList();
});
}
// else {
// addUnitPrice(this.form).then(response => {
// this.$modal.msgSuccess("");
// this.open = false;
// this.getList();
// });
// }
}
});
},
/** 导出按钮操作 */
handleExport() {
this.download('mes/unitPrice/export', {
...this.queryParams
}, `unitPrice_${new Date().getTime()}.xlsx`)
},
}
};
</script>
Loading…
Cancel
Save