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

380 lines
8.7 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-17">
<search-box v-model="val1"/>
</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.index || !this.index2 || !this.val1 || !this.pkId}" @tap="handleSubmit">解包退料</button>
</view>
<!-- 弹窗无遮罩 -->
<view class="dialog" v-if="showDialog">
<!-- 转运类型横排不换行 -->
<view class="form-line">
<text class="label">转运类型</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>
<!-- 按钮组 -->
<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, getOrderList, jbGetVehicleCode, jbReturnMaterial} from '@/utils/getData4.js'
export default {
components: {
NavBar,
SearchBox
},
data() {
return {
title: '',
options: [],
index: '',
options2: [],
index2: '',
id: '',
code: '',
val1: '',
dataList: [],
pkId: '',
pkObj: {},
disabled: false,
showDialog: false, // 控制弹窗显示
selectType: '0', // 选中的类型
statusMap: {
'1': '未开始',
'2': '已下发',
'3': '生产中',
'4': '等待中',
'5': '已完成'
},
reload: false,
status: 'more',
contentText: {
contentdown: '查看更多',
contentrefresh: '加载中',
contentnomore: '没有更多'
},
totalCount: 0,
pageNum: 1,
pageSize: 100
};
},
onLoad (options) {
this.title = options.title
this.id = options.id
},
created () {
this._regionList()
},
methods: {
// 关闭弹窗
closeDialog() {
this.showDialog = false
},
// 保存并关闭
save() {
this._jbReturnMaterial()
this.showDialog = false
},
handleSubmit () {
if (!this.index || !this.index2 || !this.val1 || !this.pkId) {
this.disabled = false
return
}
this.showDialog = true
},
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
if (e) {
this._jbGetVehicleCode()
}
},
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 : {}
},
async _jbGetVehicleCode () {
let res = await jbGetVehicleCode(this.index2)
if (res.code === '200') {
this.val1 = res.data.tp_code
}
},
clearUp () {
this.index = ''
this.index2 = ''
this.val1 = ''
this.dataList = []
this.pkId = ''
this.pkObj = {}
this.disabled = false
},
async _jbReturnMaterial () {
this.disabled = true
try {
let res = await jbReturnMaterial(this.index, this.index2, this.val1, this.pkId, this.selectType)
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: 600rpx;
background: #fff;
border-radius: 16rpx;
z-index: 9999 !important; /* 最高层级 */
overflow: hidden;
}
/* 转运类型行 */
.form-line {
display: flex;
align-items: center;
padding: 40rpx;
padding-top: 50rpx;
}
.label {
font-size: 30rpx;
width: 150rpx;
flex-shrink: 0;
}
/* 单选组:横排 + 不换行 */
.radio-group {
display: flex;
align-items: center;
white-space: nowrap;
}
.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>