Files
hht-zzzw-uni/pages/zw/jb-lower-mater.vue
2026-06-03 13:05:15 +08:00

542 lines
14 KiB
Vue
Raw 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="zd_container">
<!-- 解包出桶 -->
<nav-bar :title="title"></nav-bar>
<view class="zd_content">
<view class="zd_wrapper">
<view class="zd-row border-bottom">
<view class="zd-col-7">
<span class="filter_label">设备区域</span>
</view>
<view class="zd-col-24 filter_select">
<uni-data-select v-model="index" :localdata="options" @change="selectChange"></uni-data-select>
</view>
</view>
<view class="zd-row border-bottom">
<view class="zd-col-7">
<span class="filter_label">设备点位</span>
</view>
<view class="zd-col-24 filter_select">
<uni-data-select v-model="index2" :localdata="options2" @change="selectChange2"></uni-data-select>
</view>
</view>
<view class="zd-row border-bottom">
<view class="zd-col-7">
<span class="filter_label">物料重量</span>
</view>
<view class="zd-col-24">
<!-- <search-box v-model="code" @handleChange="handleChange1" @handleDel="handleDel1" /> -->
<input type="number" class="filter_input" v-model="val3" @blur="handleBlur()">
</view>
</view>
<!-- <view class="zd-row border-bottom">
<view class="zd-col-7">
<span class="filter_label">托盘编码</span>
</view>
<view class="zd-col-17">
<search-box v-model="val1"/>
</view>
</view> -->
<view class="zd-row border-bottom">
<view class="zd-col-7">
<span class="filter_label">料桶编码</span>
</view>
<view class="zd-col-17">
<search-box v-model="val2" @handleInput="handleInput" @handleChange="handleChange2"/>
</view>
</view>
</view>
<view class="zd_wrapper grid-wraper">
<view class="slide_new">
<table>
<thead>
<tr>
<th>工单号</th>
<th>物料名称</th>
<th>批次号</th>
<th>工单状态</th>
<th>开工人</th>
<th>重量</th>
</tr>
</thead>
<tbody>
<tr v-for="(e, i) in dataList" :key="i" @tap="toChek(e)" :class="{'checked': pkId === e.workorder_id}">
<td>{{e.workorder_code}}</td>
<td>{{e.material_name}}</td>
<td>{{JSON.parse(e.ext_data).batch_no}}</td>
<td>{{e.workorder_status_name}}</td>
<td>{{e.operator}}</td>
<td>{{e.plan_weight}}</td>
</tr>
</tbody>
</table>
</view>
</view>
<!-- <uni-load-more color="#007AFF" iconType="circle" :status="status" :icon-size="14" :content-text="contentText" v-if="dataList.length > 0"/> -->
</view>
<view class="zd-row submit-bar">
<button class="zd-col-11 button-primary" :class="{'button-info': !this.index2}" @tap="seachList">查询工单</button>
<!-- <button class="zd-col-11 button-primary" :class="{'button-info': !this.index2 || !this.val3 || !this.val2 || !this.pkId}" @tap="xlconfirm">确认出桶</button> -->
<button class="zd-col-11 button-primary" :class="{'button-info': !this.index2 || !this.val3 || !this.val2 || !this.pkId}" @tap="handleSubmit">确认出桶</button>
</view>
<!-- 弹窗层级最高不会被覆盖 -->
<view class="dialog" v-if="showDialog">
<!-- 第一行转运类型不换行 -->
<view class="form-line">
<text class="label no-wrap">转运类型</text>
<view class="radio-group">
<view class="radio-item" :class="{active: selectType === '0'}" @click="selectType = '0'">
<view class="circle"><view class="dot" v-if="selectType === '0'"></view></view>
<text class="text">人工转运</text>
</view>
<view class="radio-item" :class="{active: selectType === '1'}" @click="selectType = '1'">
<view class="circle"><view class="dot" v-if="selectType === '1'"></view></view>
<text class="text">AGV转运</text>
</view>
</view>
</view>
<!-- 第二行库位信息 使用 uni-data-select -->
<view class="form-line">
<text class="label">库位信息</text>
<uni-data-select
v-model="selectStructCode"
:localdata="structList"
placeholder=""
@change="onStructChange"
></uni-data-select>
</view>
<!-- 按钮 -->
<view class="btn-group">
<button class="btn cancel" @click="closeDialog">取消</button>
<button class="btn save" @click="save">保存</button>
</view>
</view>
</view>
</template>
<script>
import NavBar from '@/components/NavBar.vue'
import SearchBox from '@/components/SearchBox.vue'
import {regionList, pointList, getWeight, jbGetVehicleCode, getOrderList, downMaterial, structListByWorkId} from '@/utils/getData4.js'
export default {
components: {
NavBar,
SearchBox
},
data() {
return {
title: '',
options: [],
index: '',
options2: [],
index2: '',
id: '',
code: '',
val1: '',
val2: '',
val3: '',
dataList: [],
pkId: '',
pkObj: {},
flag: '',
dupWeight: '',
orgWeight: '',
standError: '',
disabled: false,
statusMap: {
'1': '未开始',
'2': '已下发',
'3': '生产中',
'4': '等待中',
'5': '已完成'
},
reload: false,
status: 'more',
contentText: {
contentdown: '查看更多',
contentrefresh: '加载中',
contentnomore: '没有更多'
},
totalCount: 0,
pageNum: 1,
pageSize: 100,
showDialog: false,
selectType: '0',
selectStructName: '',
selectStructCode: '',
// structList: [
// { value: 'A01', text: 'A区01库位' },
// { value: 'A02', text: 'A区02库位' },
// { value: 'B01', text: 'B区01库位' },
// { value: 'B21', text: 'B区21库位' },
// { value: 'B31', text: 'B区31库位' },
// { value: 'B02', text: 'B区02库位' }
// ],
structList: []
};
},
onLoad (options) {
this.title = options.title
this.id = options.id
},
created () {
this._regionList()
// this._pointList('DDJBQ')
},
methods: {
handleInput (e) {
if (e) {
this.val2 = e.slice(-4)
}
},
handleChange2 (e) {
if (e) {
this.val2 = e.slice(-4)
}
},
closeDialog() {
this.showDialog = false
},
save() {
this.xlconfirm()
this.showDialog = false
},
handleSubmit () {
if (!this.index2 || !this.val3 || !this.val2 || !this.pkId) {
this.disabled = false
return
}
this.showDialog = true
},
// 库位选择事件
onStructChange(e) {
this.selectStructCode = e
let item = this.structList.find(i => i.value === e)
if (item) {
this.selectStructName = item.text
}
},
handleBlur () {
if (this.val3) {
if (this.val3 < 0) {
this.val3 = 0
} else {
if (this.val3 > 2000) {
this.val3 = 2000
}
// 1. 过滤非法字符
// this.val3 = this.val3.replace(/[^0-9]/g, '')
// this.val3 = this.val3.replace(/^0+/, '') || '0'
// this.val3 = this.val3.replace(/^0+/, '')
// 4. 处理多个0开头的情况
if (/^0+[1-9]/.test(this.val3)) {
// 如果0后面跟着非零数字去掉前导零
this.val3 = this.val3.replace(/^0+/, '');
} else if (/^0+$/.test(this.val3)) {
// 如果全是0只保留一个0
this.val3 = '0';
} else if (/^0+\./.test(this.val3)) {
// 处理0.xxx的情况去掉整数部分多余的0
this.val3 = '0.' + this.val3.replace(/^0+\./, '');
}
if (Number(this.val3) === 0) {
this.val3 = 0
}
}
} else {
// uni.showToast({
// title: '数量必填',
// icon: 'none'
// })
}
},
async _structListByWorkId () {
let res = await structListByWorkId(this.pkId)
if (res.code === '200') {
this.structList = res.data
}
},
async _regionList () {
try {
let res = await regionList()
if (res) {
this.options = res.data
} else {
this.options = []
}
} catch (e) {
this.options = []
}
},
async _pointList (e) {
try {
let res = await pointList(e)
if (res) {
this.options2 = res.data
} else {
this.options2 = []
}
} catch (e) {
this.options2 = []
}
},
selectChange (e) {
this.index = e
this._pointList(e)
},
selectChange2 (e) {
this.index2 = e
this._jbGetVehicleCode()
this.seachList()
},
handleChange (e) {
if (e) {
this.dataList = []
this.pageNum = 1
this.pkId = ''
this._getOrderList()
}
},
seachList () {
if (!this.index2) {
return
}
this.dataList = []
this.pageNum = 1
this.pkId = ''
this._getOrderList()
},
async _getOrderList () {
let res = await getOrderList(this.index2, '2')
if (res.code === '200') {
// this.dataList = res.data
this.dataList = res.data.map(item => ({
...item,
workorder_status_name: this.statusMap[item.workorder_status] || ''
}))
// this.totalCount = res.totalElements
// if (res.totalElements > 0) {
// const dataMap = res.content
// this.dataList = this.reload ? dataMap : this.dataList.concat(dataMap)
// this.reload = false
// } else {
// this.dataList = []
// }
// if (this.totalCount == this.dataList.length) {
// this.reload = false
// this.status = 'noMore'
// }
}
},
onReachBottom () {
if (this.totalCount > this.dataList.length) {
this.status = 'loading'
setTimeout(() => {
this.pageNum++
this._getOrderList()
}, 1000)
} else { //停止加载
this.status = 'noMore'
}
},
toChek (e) {
this.pkId = this.pkId === e.workorder_id ? '' : e.workorder_id
this.pkObj = this.pkId === e.workorder_id ? e : {}
this._getWeight()
},
clearUp () {
this.index2 = ''
this.val2 = ''
this.val3 = ''
this.dataList = []
this.pageNum = 1
this.pkId = ''
this.selectStructName = ''
this.selectStructCode = ''
this.structList = []
},
async _getWeight () {
if (!this.index2) {
return
}
let res = await getWeight(this.index2, this.pkId)
if (res.code === '200') {
uni.showToast({
title: res.message,
icon: 'none'
})
this.val3 = res.data.org_weight
this.flag = res.data.flag
this.dupWeight = res.data.weight
this.orgWeight = res.data.org_weight
this.standError = res.data.stand_error
}
},
async _jbGetVehicleCode () {
if (!this.index2) {
return
}
let res = await jbGetVehicleCode(this.index2)
if (res.code === '200') {
// this.val1 = res.data.tp_code
this.val2 = res.data.lt_code
}
},
xlconfirm () {
console.log(1)
console.log(this.flag, 'flag')
this.disabled = true
// if (!this.index2 || !this.val3 || !this.val2 || !this.pkId) {
// this.disabled = false
// return
// }
if (this.flag === '2') {
let chazhi = Number(this.val3) - Number(this.orgWeight)
if ( chazhi > Number(this.standError)) {
uni.showModal({
title: '提示',
content: '输⼊的重量:' + this.val3 + '与吨袋的重量:' + this.orgWeight + '误差过⼤!是否继续?',
confirmColor: '#ff6a00',
success: (res) => {
if (res.confirm) {
this._downMaterial()
} else if (res.cancel) {
this.disabled = false
}
}
})
} else {
console.log(2)
this._downMaterial()
}
}
if (this.flag === '1') {
let chazhi = Number(this.val3) - Number(this.orgWeight)
if ( chazhi > Number(this.standError)) {
uni.showModal({
title: '提示',
content: '您修改的重量:' + this.val3 + '与吨袋的重量:' + this.orgWeight + '误差过⼤!是否以您输⼊的重量继续?',
confirmColor: '#ff6a00',
success: (res) => {
if (res.confirm) {
this._downMaterial()
} else if (res.cancel) {
this.disabled = false
}
}
})
} else {
this._downMaterial()
}
}
},
async _downMaterial () {
try {
let res = await downMaterial(this.pkId, this.index, this.val3, this.index2, this.val1, this.val2, this.selectType, this.selectStructCode, this.selectStructName)
if (res.code === '200') {
uni.showToast({
title: res.message,
icon: 'none'
})
this.clearUp()
} else {
uni.showToast({
title: res.message,
icon: 'none'
})
this.disabled = false
}
} catch (e) {
this.disabled = false
}
}
}
}
</script>
<style lang="stylus" scoped>
/* 弹窗最高层级 */
.dialog {
position: fixed;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
width: 90%;
max-width: 650rpx;
background: #fff;
border-radius: 16rpx;
z-index: 9999 !important;
// overflow: hidden;
}
.form-line {
display: flex;
align-items: center;
padding: 30rpx 40rpx;
}
.label {
font-size: 30rpx;
// width: 140rpx;
flex-shrink: 0;
}
.no-wrap {
white-space: nowrap;
}
/* 单选样式 */
.radio-group {
display: flex;
align-items: center;
}
.radio-item {
display: flex;
align-items: center;
margin-right: 50rpx;
}
.circle {
width: 36rpx;
height: 36rpx;
border: 2rpx solid #ccc;
border-radius: 50%;
display: flex;
align-items: center;
justify-content: center;
margin-right: 12rpx;
}
.dot {
width: 20rpx;
height: 20rpx;
background: #007aff;
border-radius: 50%;
}
.radio-item.active .circle {
border-color: #007aff;
}
.text {
font-size: 30rpx;
white-space: nowrap;
}
/* 按钮 */
.btn-group {
display: flex;
border-top: 1rpx solid #eee;
}
.btn {
flex: 1;
height: 90rpx;
line-height: 90rpx;
font-size: 30rpx;
border: none;
background: #fff;
}
.cancel {
border-right: 1rpx solid #eee;
color: #666;
}
.save {
color: #007aff;
font-weight: 500;
}
</style>