yxk_gk_master/pages/processReport/add1.vue

799 lines
23 KiB
Vue
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<template>
<view class="container">
<view class="top_head">
<view class="top_head1">工单号:{{startWorkingInfo.code}}</view>
<uni-icons @click="showDialog" type="scan" size="25" color='#fff' class='scan_icon'></uni-icons>
</view>
<view class="content" v-if="startWorkingInfo.code">
<view class="list_item">加工工序:{{startWorkingInfo.processName}}</view>
<view class="list_item" v-if="startWorkingInfo.isOutsource==0">汇报人:{{startWorkingInfo.createByName}}</view>
<view class="list_item" v-else-if="startWorkingInfo.isOutsource==1" >业务员:{{startWorkingInfo.createByName}}</view>
<view class="list_item" v-if="startWorkingInfo.isOutsource==1" @click="chooseSpplier()">供应商:
<span v-if="startWorkingInfo.supplierIdName" class="list_item_inut_name" required>供应商:{{startWorkingInfo.supplierIdName}}</span>
<span v-else class="list_item_inut_name" required>选择供应商</span>
<uni-icons type="arrowdown" size="25"></uni-icons>
</view>
<view class="list_item" v-else-if="startWorkingInfo.isOutsource==0" @click="chooseDevice()">设备:
<span class="list_item_inut_name ml" v-if="startWorkingInfo.deviceId">{{startWorkingInfo.deviceName}}</span>
<span class="list_item_inut_name ml" v-else>选择设备</span>
<uni-icons type="arrowdown" size="25"></uni-icons>
</view>
<view class="list_item">
<view class="list_item_inut_name" required>完工数量:</view>
<input type="number" placeholder="请输入完工数量" class="list_input" v-model="startWorkingInfo.completionCount" @change='toFixed4'/>
</view>
<view class="list_item">计划数量:{{startWorkingInfo.planCount}}</view>
<view class="list_item">已完工数量:{{startWorkingInfo.hascompletionCount}}</view>
<view class="list_item">是否检验: <span v-if="startWorkingInfo.isExamine==1">是</span> <span v-else-if="startWorkingInfo.isExamine==0">否</span></view>
<view class="list_item" v-if="startWorkingInfo.isExamine==0">
<view class="list_item_inut_name">合格数量:</view>
<input type="number" :precision="2" placeholder="请输入合格数量" class="list_input" v-model="startWorkingInfo.conformityCount" @change='toFixed1'/>
</view>
<view class="list_item" v-if="startWorkingInfo.isExamine==0">
<view class="list_item_inut_name">返工数量:</view>
<input type="number" placeholder="请输入返工数量" class="list_input" v-model="startWorkingInfo.reworkCount" @change='toFixed2'/>
</view>
<view class="list_item" v-if="startWorkingInfo.isExamine==0">
<view class="list_item_inut_name">报废数量:</view>
<input type="number" placeholder="请输入报废数量" class="list_input" v-model="startWorkingInfo.scrapCount" @change='toFixed3'/>
</view>
<view class="list_item">
<view class="list_item_inut_name">备注:</view>
<input placeholder="请输入备注" class="list_input" v-model="startWorkingInfo.remark" />
</view>
</view>
<view class="bottom_btn_container">
<view class="bottom_btn_out">
<view class="bottom_btn" @click="toBack">取消</view>
<!-- <view class="bottom_btn" @click="submit">提交</view> -->
<button class="bottom_btn" @click="submit" :disabled="isDisabled">提交</button>
</view>
</view>
<!-- 工序 -->
<view class="news_out" v-if='show_gua'>
<view class="news_container">
<view class="news_in">
<uni-icons type="closeempty" size="30" class="news_closeempty" @click="show_gua=false"></uni-icons>
<view class="article_out article_out_img">
<view class="item">
<view class="itemname">工序流转卡:</view>
<input id="planCode" type="text" class="list_input" v-model="code" />
<uni-icons type="scan" size="25" color='#5c91e4' class='scan_icon'></uni-icons>
</view>
<view class="item">
<view class="itemname">工序:</view>
<input id="processCode" type="text" class="list_input" v-model="processCode"/>
<uni-icons type="scan" size="25" color='#5c91e4' class='scan_icon'></uni-icons>
</view>
</view>
<view class='submit_gua_qu'>
<view class='submit_guaqi' @click='submitGuaQi'>确定</view>
<view class='submit_quxiao' @click='show_gua=false'>取消</view>
</view>
</view>
</view>
</view>
<!-- 选择操作工 -->
<chooseUserSingle v-if="chooseUserVisible" @change="getUser"></chooseUserSingle>
<!-- 选择供应商 -->
<chooseSpplierSingle v-if="chooseSpplierVisible" @change="getSpplier"></chooseSpplierSingle>
<!-- 选择设备 -->
<chooseDeviceSingle v-if="chooseDeviceVisible" @change="getDevice" :device_type='device_type'></chooseDeviceSingle>
</view>
</template>
<script>
import uniIcons from '@/components/uni-icons/uni-icons.vue'
import chooseUserSingle from '@/components/system/chooseUserSingle.vue'
import chooseSpplierSingle from '@/components/system/chooseSpplier.vue'
import chooseDeviceSingle from '@/components/system/chooseDeviceSingle.vue'
export default {
components: {
uniIcons,
chooseUserSingle,
chooseDeviceSingle,
chooseSpplierSingle,
},
data() {
return {
device_type:'',
id:'',
chooseUserVisible: false,
chooseSpplierVisible: false,
chooseDeviceVisible: false,
show_gua: false,
processCode: '',
code: '',
isDisabled: false,
startWorkingInfo: {
code: "",
processName: "",
isOutsource: "",
supplierName: "",
dispatchItemId: "",
isExamine: "",
conformityCount: '',
reworkCount:'',
scrapCount:'',
remark:''
},
tableInfo: {
processCode: '',
isExamine: "",
processName: "",
planCount: ''
},
username:'',
userInfo: {},
dataList: [
// {
// operator: "",
// operatorName: "",
// planCount:"",
// },
],
}
},
computed: {
},
onLoad: function(option) {
console.log(option)
this.id = option.id
this.getStartWorking();
},
mounted() {
this.initScannerModule();
let _this = this;
uni.getStorage({
key: 'userInfo',
success: function(res) {
_this.userInfo = res.data
_this.startWorkingInfo.createByName=_this.userInfo.name
},
fail: function(res) {
uni.redirectTo({
url: 'login/login'
});
},
})
},
methods: {
//选择设备
chooseDevice() {
if(this.startWorkingInfo.deviceId) {
this.chooseDeviceVisible = false;
} else {
this.chooseDeviceVisible = true;
}
},
getDevice(val) {
this.chooseDeviceVisible = false;
if (val) {
this.$set(this.startWorkingInfo, "deviceId", val.id)
this.$set(this.startWorkingInfo, "deviceName", val.name)
}
},
submitGuaQi(){
this.startWorkingInfo.code = this.tableInfo.processCode;
this.startWorkingInfo.processName = this.tableInfo.processName ? this.tableInfo.processName : '';
// this.startWorkingInfo.supplierName = j.supplierName ? j.supplierName : '';
// this.startWorkingInfo.dispatchItemId = j.dispatchItemId;
this.startWorkingInfo.createByName = this.userInfo.name ? this.userInfo.name : '';
this.startWorkingInfo.isExamine = this.tableInfo.isExamine ? this.tableInfo.isExamine : 0;
this.startWorkingInfo.planCount = this.tableInfo.planCount!=undefined ? this.tableInfo.planCount : 0;
this.show_gua = false;
},
toFixed1() {
this.$set(this.startWorkingInfo,'conformityCount',Number(this.startWorkingInfo.conformityCount).toFixed(this.startWorkingInfo.quantityAccuracy))
},
toFixed2() {
this.$set(this.startWorkingInfo,'reworkCount',Number(this.startWorkingInfo.reworkCount).toFixed(this.startWorkingInfo.quantityAccuracy))
},
toFixed3() {
this.$set(this.startWorkingInfo,'scrapCount',Number(this.startWorkingInfo.scrapCount).toFixed(this.startWorkingInfo.quantityAccuracy))
},
toFixed4() {
this.$set(this.startWorkingInfo,'completionCount',Number(this.startWorkingInfo.completionCount).toFixed(this.startWorkingInfo.quantityAccuracy))
},
showDialog(){
this.show_gua = true;
this.code = '';
this.processCode = ''
},
// 扫码
initScannerModule(){
var code = "";
var lastTime,nextTime;
var lastCode,nextCode;
var _this = this
document.onkeypress = function(e) {
nextCode = e.which;
nextTime = new Date().getTime();
if(lastCode != null && lastTime != null && nextTime - lastTime <= 30) {
code += String.fromCharCode(lastCode);
} else if(lastCode != null && lastTime != null && nextTime - lastTime > 100){
code = "";
}
lastCode = nextCode;
lastTime = nextTime;
console.log(code)
if(e.which == 13){
console.log(_this.processCode)
console.log("扫描结束")
// 2.获取到条形码 code
_this.$http.request({
url: '/apis/workingProcedurePlan/childList',
params: {
planCode:JSON.parse(_this.code).planNo,
processCode:JSON.parse(_this.processCode).code
},
method: 'POST'
})
.then(res => {
console.log(res)
console.log(res.data.data.datas[0].processName)
if (res.data.code == 0) {
let j = {
planCount:res.data.data.datas[0].planCount,
processName:res.data.data.datas[0].processName,
processCode: res.data.data.datas[0].processCode ,
isExamine: res.data.data.datas[0].isExamine?res.data.data.datas[0].isExamine:'',
}
_this.tableInfo = j
console.log(_this.tableInfo)
}else{
uni.showToast({
title: res.data.msg? res.data.msg:'扫码失败',
icon: 'none',
duration: 2000
});
}
});
}
}
},
//选择操作工
chooseUser(index) {
this.chooseUserVisible = true;
},
//选择供应商
chooseSpplier() {
if(this.startWorkingInfo.supplierId) {
this.chooseSpplierVisible = false;
} else {
this.chooseSpplierVisible = true;
}
},
// getUser(val) {
// this.chooseUserVisible = false
// if (val) {
// this.$set(this.startWorkingInfo, "createBy", val.userId)
// this.$set(this.startWorkingInfo, "createByName", val.NAME)
// }
// },
getSpplier(val) {
this.chooseSpplierVisible = false;
if (val) {
this.$set(this.startWorkingInfo, "supplierId", val.id)
this.$set(this.startWorkingInfo, "supplierIdName", val.unit_name)
}
},
//在制工单
getStartWorking() {
this.$http.request({
url: '/apis/mes/dispatch/getStartWorkingDetail',
method: 'post',
params: {id:this.id}
}).then(res => {
if (res) {
if (res.data.code == 0) {
let j = res.data.data ? res.data.data : {}
this.startWorkingInfo.code = j.code;
this.startWorkingInfo.quantityAccuracy = j.quantityAccuracy;
this.startWorkingInfo.processName = j.processName ? j.processName : '';
this.startWorkingInfo.supplierName = j.supplierName ? j.supplierName : '';
this.startWorkingInfo.dispatchItemId = j.dispatchItemId;
this.startWorkingInfo.isOutsource = j.isOutsource ? j.isOutsource : 0;
this.startWorkingInfo.isExamine = j.isExamine ? j.isExamine : 0;
this.startWorkingInfo.planCount = j.planCount!=undefined ? (j.planCount).toFixed(this.startWorkingInfo.quantityAccuracy) : 0;
this.startWorkingInfo.hascompletionCount = j.completionCount!=undefined ? (j.completionCount).toFixed(this.startWorkingInfo.quantityAccuracy) : 0;
this.$set(this.startWorkingInfo,'completionCount', (parseFloat(this.startWorkingInfo.planCount)-parseFloat(this.startWorkingInfo.hascompletionCount)).toFixed(this.startWorkingInfo.quantityAccuracy))
if(this.startWorkingInfo.isOutsource==0){
// this.startWorkingInfo.createByName=j.operatorName
// this.startWorkingInfo.createBy =j.operator
this.startWorkingInfo.deviceName=j.deviceName
this.startWorkingInfo.deviceId=j.deviceId
// this.startWorkingInfo.deviceId=j.deviceId
// this.startWorkingInfo.createBy =this.userInfo.userId
}else if(this.startWorkingInfo.isOutsource==1){
// this.startWorkingInfo.createByName=j.operatorName
// this.startWorkingInfo.createBy =j.operator
this.startWorkingInfo.supplierIdName=j.supplierName
this.startWorkingInfo.supplierId=j.supplierId
}
}
}
});
},
//取消
toBack() {
uni.navigateBack()
},
//提交
submit() {
//委外的时候,供应商和业务员必填
if(this.startWorkingInfo.isOutsource==1){
// if(this.startWorkingInfo.createBy==undefined){
// uni.showToast({
// title: '请选择业务员',
// icon: "none",
// duration: 2000
// });
// return false
// }
if(this.startWorkingInfo.supplierId==undefined){
uni.showToast({
title: '请选择供应商',
icon: "none",
duration: 2000
});
return false
}
}
//验证完工数量必填且大于0
if (this.startWorkingInfo.completionCount == undefined||this.startWorkingInfo.completionCount=='') {
uni.showToast({
title: '请填写完工数量',
icon: "none",
duration: 2000
});
return false
}/* else {
let reg_positive_integer = /^[1-9]*[1-9][0-9]*$/; //验证正整数
if (!reg_positive_integer.test(this.startWorkingInfo.completionCount)) {
uni.showToast({
title: '完工数量为大于0的整数',
icon: "none",
duration: 2000
});
return
}
}*/
//检验的时候合格数量、返工数量、报废数量为0
if (this.startWorkingInfo.isExamine == 1) { //检验
this.startWorkingInfo.scrapCount = 0;
this.startWorkingInfo.reworkCount = 0;
this.startWorkingInfo.conformityCount = 0;
} else {
if (this.startWorkingInfo.conformityCount != undefined&&this.startWorkingInfo.conformityCount!='') {
// let reg_positive_integer = /^([1-9]\d*|[0]{1,1})$/; //验证正整数和0
// if (!reg_positive_integer.test(this.startWorkingInfo.conformityCount)) {
// uni.showToast({
// title: '合格数量为大于等于0的整数',
// icon: "none",
// duration: 2000
// });
// return
// }
}
if (this.startWorkingInfo.reworkCount != undefined&&this.startWorkingInfo.reworkCount!='') {
// let reg_positive_integer = /^([1-9]\d*|[0]{1,1})$/; //验证正整数和0
// if (!reg_positive_integer.test(this.startWorkingInfo.reworkCount)) {
// uni.showToast({
// title: '返工数量为大于等于0的整数',
// icon: "none",
// duration: 2000
// });
// return
// }
}
if (this.startWorkingInfo.scrapCount != undefined&&this.startWorkingInfo.scrapCount!='') {
// let reg_positive_integer = /^([1-9]\d*|[0]{1,1})$/; //验证正整数和0
// if (!reg_positive_integer.test(this.startWorkingInfo.scrapCount)) {
// uni.showToast({
// title: '报废数量为大于等于0的整数',
// icon: "none",
// duration: 2000
// });
// return
// }
}
let a=this.startWorkingInfo.conformityCount?this.startWorkingInfo.conformityCount:0;
let b=this.startWorkingInfo.reworkCount?this.startWorkingInfo.reworkCount:0;
let c=this.startWorkingInfo.scrapCount?this.startWorkingInfo.scrapCount:0;
let d=parseFloat(a)+parseFloat(b)+parseFloat(c);
console.log(a)
if(d!=this.startWorkingInfo.completionCount){
uni.showToast({
title: '合格数量、返工数量、报废数量的总和必须等于完工数量',
icon: "none",
duration: 2000
});
return
}
this.$set(this.startWorkingInfo,'conformityCount',a)
this.$set(this.startWorkingInfo,'reworkCount',b)
this.$set(this.startWorkingInfo,'scrapCount',c)
}
let arr=[];
arr.push(this.startWorkingInfo)
if(this.isDisabled) {
return
}
this.isDisabled = true
this.$http.request({
url: '/apis/mes/processReport/submitReport',
method: 'post',
params: {
reportDetail: encodeURIComponent(JSON.stringify(arr))
},
}).then(res => {
this.isDisabled = false
if (res) {
let _this = this;
if (res.data.code == 0) {
uni.showToast({
title: '提交成功',
icon: "none",
duration: 2000
});
setTimeout(function() {
uni.redirectTo({
url: '/pages/index/index'
});
}, 1000)
} else {
uni.showToast({
title: res.data.msg ? res.data.msg : '提交失败',
icon: "none",
duration: 2000
});
}
}
});
}
}
}
</script>
<style scoped>
.ml {
margin-left: 20px;
}
.container {
position: absolute;
width: 100%;
height: 100%;
background-color: #f3f3f3;
box-sizing: border-box;
}
.top_head {
position: fixed;
top: var(-window-top);
width: 100%;
height: 60px;
background-color: #007AFF;
color: #fff;
padding-left: 20px;
box-sizing: border-box;
z-index: 1;
}
.top_head1 {
font-size: 15px;
line-height: 60px;
}
.content {
position: relative;
width: 100%;
height: calc(100% - 60px - 70px);
padding-top: 10px;
padding-bottom: 10px;
margin-top: 60px;
box-sizing: border-box;
overflow: auto;
}
.list_item {
position: relative;
display: flex;
align-items: center;
width: 50%;
height: calc((100% - 80px - 20px) / 8);
max-height: 60px;
font-size: 16px;
background-color: #9bb9e2;
margin: auto;
color: #333;
text-align: left;
padding-left: 10px;
box-sizing: border-box;
margin-bottom: 10px;
}
.list_item_inut_name[required]:before{
position: relative;
content: "*";
color: red;
}
.list_input {
position: absolute;
height: 100%;
left: 90px;
right: 10px;
overflow: hidden;
top: 0;
font-size: 16px;
}
.bottom_btn_container{
position: fixed;
bottom:0;
width:100%;
left: 0;
height: 70px;
background-color: #dadada;
}
.bottom_btn_out{
position: relative;
display: flex;
justify-content: center;
align-items: center;
}
.bottom_btn{
position: relative;
margin: 0 10px;
/* width: 30%; */
width: 30%;
height: 60px;
line-height: 60px;
text-align: center;
font-size: 25px;
color: #333;
top:5px;
letter-spacing: 4px;
border-radius: 4px;
}
.bottom_btn:nth-child(1){
background-color: #fff;
border: 2px solid #007AFF;
color: #007AFF;
box-sizing: border-box;
/* box-shadow: 3px 3px 10px rgba(160, 160, 159,0.2) inset,-3px -3px 10px rgba(160, 160, 159,0.2) inset; */
}
.bottom_btn:nth-child(2){
color: #fff;
background-color: #007AFF;
/* box-shadow: 3px 3px 10px rgba(16, 36, 177,0.2) inset,-3px -3px 10px rgba(16, 36, 177,0.2) inset; */
}
.bottom_btn:nth-child(3){
color: #fff;
background-color: #007AFF;
/* box-shadow: 3px 3px 10px rgba(16, 36, 177,0.2) inset,-3px -3px 10px rgba(16, 36, 177,0.2) inset; */
}
.scan_icon{
position: absolute;
right: 20px;
top: 15px;
}
.center3{
padding: 10px 5px;
position: relative;
float: right;
/* margin-left: 20px; */
margin-top: 20px;
width: calc(30% - 12px);
height:calc((70% - 8px));
border: 1px solid #193b5a;
box-shadow: 5px 5px 10px rgba(23,60,144,0.5) inset,-5px -5px 10px rgba(23,60,144,0.3) inset;
box-sizing: border-box;
border-radius: 14px;
display: flex;
justify-content: space-around;
align-items: center;
flex-wrap: wrap;
}
.center_btn{
position: relative;
width: calc((100% - 40px) / 2);
padding-top:calc(((100% - 160px) / 4 -22px) / 2) ;
padding-bottom:calc(((100% - 160px) / 4 -22px) / 2) ;
padding-left: 8px;
padding-right: 8px;
color:#fef28a;
font-size: 21px;
line-height: 21px;
text-align: center;
white-space: nowrap;
text-align: center;
/* border: 1px solid #193b5a; */
border-radius: 3px;
/* box-shadow: 5px 5px 10px rgba(28,45,104,1) inset,-5px -5px 10px rgba(28,45,104,1) inset; */
box-sizing: border-box;
background-image: linear-gradient(to top, rgba(7,40,93,1) , rgba(0,66,145,1));
cursor: pointer;
}
.center_btn image{
position: absolute;
width: 100%;
height: 100%;
left: 0;
top: 0;
}
.news_out{
position: fixed;
width: 100%;
height: 100%;
left: 0;
top: 0;
background-color: rgba(0,0,0,0.4);
}
.news_container{
position: relative;
width: 100%;
height: 100%;
overflow: auto;
display: flex;
justify-content: center;
align-items: center;
}
.news_in{
position: relative;
font-size: 17px;
color: #333;
width: 80%;
max-height: 80%;
background-color: #fff;
border-radius: 5px;
padding: 15px;
box-sizing: border-box;
overflow: hidden;
}
.news_title{
padding-right: 20px;
line-height: 24px;
font-size: 18px;
color: #303133;
}
.article_out{
position: relative;
overflow: auto;
max-height: 500px;
}
.article_out_img{
}
.article_out_img img{
width: 100%;
margin-top: 5px;
}
.news_closeempty{
position: absolute;
right: 10px;
top: 10px;
z-index: 1;
}
.news_in h5{
margin: 10px 0;
}
.bottom_copy{
position: fixed;
width: 100%;
bottom: 10px;
color: #a6a6a6;
font-size: 13px;
text-align: center;
}
.bottom_copy_in{
position: relative;
display: flex;
justify-content: center;
}
.bottom_copy_in a{
color: #a6a6a6;
}
.process_title{
line-height: 30px;
width: 100%;
text-align: center;
font-size: 16px;
}
.guaqi{
width: 90%;
margin: auto;
height: 100px;
padding: 10px;
box-sizing: border-box;
border: 1px solid #ccc;
}
.submit_gua_qu{
position: relative;
margin: auto;
margin-top: 15px;
width: 170px;
height: 40px;
}
.submit_guaqi,.submit_quxiao{
float: left;
width: 80px;
height: 40px;
line-height: 40px;
background-color: #007AFF;
text-align: center;
color: #fff;
border-radius: 4px;
margin: auto;
cursor: pointer;
}
.submit_quxiao{
float: right;
}
.iteminput {
width: 100%;
text-align: right;
font-size: 26upx;
box-sizing: border-box;
}
.itemtext {
position: relative;
float: right;
right: 30upx;
width: 50%;
min-height: 92upx;
line-height: 40upx;
color: #000;
padding-top: 26upx;
padding-bottom: 26upx;
box-sizing: border-box;
text-align: right;
}
.item {
position: relative;
/* overflow: auto; */
width: 100%;
min-height: 50upx;
background-color: #fff;
/* border-bottom: 1px solid #EDEDED; */
}
.itemname {
position: absolute;
left: 0upx;
top: 70;
height: 50upx;
line-height: 50upx;
color: #999999;
}
.mt{
margin-top: 20px;
}
</style>