This commit is contained in:
2025-08-05 11:03:43 +08:00
parent 9f2f0a58f3
commit 2f2d588070
8 changed files with 473 additions and 33 deletions

View File

@@ -434,6 +434,14 @@
}
}
,{
"path" : "pages/zw/mancar-safe",
"style" :
{
"navigationStyle": "custom"
}
}
],
"globalStyle": {
// "pageOrientation": "landscape",

View File

@@ -41,7 +41,7 @@
return {
userName: '',
menuList: [
{title: '解包管理', path: 'RF03', sonTree: [{title: '解包上料', path: '/pages/zw/jb-up-mater'}, {title: '解包下料', path: '/pages/zw/jb-lower-mater'}, {title: '料桶入', path: '/pages/zw/materbox-instore'}, {title: '解包退料', path: '/pages/zw/jb-return-mater'}]},
{title: '解包管理', path: 'RF03', sonTree: [{title: '解包上料', path: '/pages/zw/jb-up-mater'}, {title: '解包下料', path: '/pages/zw/jb-lower-mater'}, {title: '料桶入', path: '/pages/zw/materbox-instore'}, {title: '解包退料', path: '/pages/zw/jb-return-mater'}, {title: '人车安全', path: '/pages/zw/mancar-safe'}]},
// {title: '预装管理', path: 'RF04', sonTree: [{title: '物料组盘', path: '/pages/entry/mater-group'}, {title: '货架绑定', path: '/pages/outbound/shelf-bind'}]},
// {title: '产线管理', path: 'RF07', sonTree: [{title: '产线叫料', path: '/pages/outbound/line-callmater'}, {title: '线边仓出库', path: '/pages/outbound/mater-outstore'}, {title: '出库确认', path: '/pages/outbound/out-store-confirm'}]},
// {title: '入库管理', path: 'RF01', sonTree: [{title: '物料组盘', path: '/pages/entry/mater-group'}, {title: '组盘入库', path: '/pages/entry/groupplate-instore'}, {title: '货架绑定', path: '/pages/outbound/shelf-bind'}, {title: '拣选余料回库', path: '/pages/entry/pick-yl-return-store'}, {title: '空载具入库', path: '/pages/entry/empty-vehicle-instore'}]},
@@ -50,11 +50,11 @@
// {title: '出库管理', path: 'RF02', sonTree: [{title: '产线转运', path: '/pages/outbound/line-transfer'}, {title: '空载具出库', path: '/pages/outbound/empty-vehicle-outstore'}, {title: 'CTU载具出库', path: '/pages/outbound/ctu-vehicle-outstore'}]}
{title: '入库管理', path: 'RF01', sonTree: [{title: '物料组盘入库', path: '/pages/entry/mater-group-to-store'}, {title: '合格证入库', path: '/pages/entry/qualified-to-store'}, {title: '单据入库', path: '/pages/entry/bill-to-store'}, {title: '盘点入库', path: '/pages/entry/check-to-store'}, {title: '空托盘入库', path: '/pages/entry/empty-tray-to-store'}]},
{title: '出库管理', path: 'RF02', sonTree: [{title: '空托盘出库', path: '/pages/outbound/tray-out-store'}, {title: '出库确认', path: '/pages/outbound/out-store-confirm'}, {title: '单据出库', path: '/pages/outbound/bill-list'}, {title: '盘点出库', path: '/pages/outbound/stock-out-store'}, {title: '物料出库', path: '/pages/outbound/mater-outstore'}, {title: '货架绑定', path: '/pages/outbound/shelf-bind'}, {title: '产线转运', path: '/pages/outbound/line-transfer'}, {title: '空载具出库', path: '/pages/outbound/empty-vehicle-outstore'}, {title: 'CTU载具出库', path: '/pages/outbound/ctu-vehicle-outstore'}]},
{title: '拣选管理', path: 'RF04', sonTree: [{title: '拣选作业', path: '/pages/pick/pick-task'}]},
{title: '设备操控', path: 'RF07', sonTree: [{title: '切换出入库模式', path: '/pages/mode/switch-in-out'}, {title: '拣选工位启停模式', path: '/pages/mode/pick'}, {title: '下发输送线运动命令', path: '/pages/mode/command'}]},
{title: '产线叫料', path: 'RF10', sonTree: [{title: '二楼生产出库', path: '/pages/outbound/produce-out-store-2nd'}, {title: '二楼取货确认', path: '/pages/outbound/pick-confirm-2nd'}, {title: '二楼货架绑定', path: '/pages/outbound/shelf-bind-2nd'}]},
{title: '转运管理', path: 'RF09', sonTree: [{title: '托盘转运', path: '/pages/transfer/tray-transfer'}]},
{title: '叫料搬运', path: 'RF11', sonTree: [{title: '叫料搬运', path: '/pages/carry/call-carry'}]}
// {title: '拣选管理', path: 'RF04', sonTree: [{title: '拣选作业', path: '/pages/pick/pick-task'}]},
// {title: '设备操控', path: 'RF07', sonTree: [{title: '切换出入库模式', path: '/pages/mode/switch-in-out'}, {title: '拣选工位启停模式', path: '/pages/mode/pick'}, {title: '下发输送线运动命令', path: '/pages/mode/command'}]},
// {title: '产线叫料', path: 'RF10', sonTree: [{title: '二楼生产出库', path: '/pages/outbound/produce-out-store-2nd'}, {title: '二楼取货确认', path: '/pages/outbound/pick-confirm-2nd'}, {title: '二楼货架绑定', path: '/pages/outbound/shelf-bind-2nd'}]},
// {title: '转运管理', path: 'RF09', sonTree: [{title: '托盘转运', path: '/pages/transfer/tray-transfer'}]},
// {title: '叫料搬运', path: 'RF11', sonTree: [{title: '叫料搬运', path: '/pages/carry/call-carry'}]}
],
menu: [{title: '叫料搬运', path: 'RF11', sonTree: [{title: '叫料搬运', path: '/pages/carry/call-carry'}]}],
show: false,

View File

@@ -69,7 +69,8 @@
<td>{{e.workorder_code}}</td>
<td>{{e.material_code}}</td>
<td>{{e.material_name}}</td>
<td>{{e.workorder_status}}</td>
<!-- <td>{{e.workorder_status}}</td> -->
<td>{{e.workorder_status_name}}</td>
<td>{{e.operator}}</td>
<td>{{e.create_name}}</td>
<td>{{e.plan_weight}}</td>
@@ -93,7 +94,7 @@
<script>
import NavBar from '@/components/NavBar.vue'
import SearchBox from '@/components/SearchBox.vue'
import {regionList, pointList, getWeight, getOrderList, downMaterial} from '@/utils/getData4.js'
import {regionList, pointList, getWeight, jbGetVehicleCode, getOrderList, downMaterial} from '@/utils/getData4.js'
export default {
components: {
NavBar,
@@ -115,7 +116,15 @@
pkId: '',
pkObj: {},
flag: '',
dupWeight: '',
orgWeight: '',
standError: '',
disabled: false,
statusMap: {
'1': '未开始',
'3': '生产中',
'5': '已结束'
},
reload: false,
status: 'more',
contentText: {
@@ -166,6 +175,7 @@
},
selectChange2 (e) {
this.index2 = e
this._jbGetVehicleCode()
this.seachList()
},
handleChange (e) {
@@ -188,7 +198,11 @@
async _getOrderList () {
let res = await getOrderList(this.index2, '2')
if (res.code === '200') {
this.dataList = res.data
// this.dataList = res.data
this.taskList = 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
@@ -227,6 +241,19 @@
console.log(11111)
this.val3 = res.data.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 () {
@@ -236,18 +263,38 @@
return
}
if (this.flag === '2') {
uni.showModal({
title: '提示',
content: '是否确认以重量:' + this.val3 + '提交?',
confirmColor: '#ff6a00',
success: (res) => {
if (res.confirm) {
this._downMaterial()
} else if (res.cancel) {
this.disabled = false
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
}
}
}
})
})
}
}
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
}
}
})
}
}
},
async _downMaterial () {

View File

@@ -49,7 +49,8 @@
<td>{{e.workorder_code}}</td>
<td>{{e.material_code}}</td>
<td>{{e.material_name}}</td>
<td>{{e.workorder_status}}</td>
<!-- <td>{{e.workorder_status}}</td> -->
<td>{{e.workorder_status_name}}</td>
<td>{{e.operator}}</td>
<td>{{e.create_name}}</td>
<td>{{e.plan_qty}}</td>
@@ -165,7 +166,11 @@
async _getOrderList () {
let res = await getOrderList(this.index2, '2')
if (res.code === '200') {
this.dataList = res.data
// this.dataList = res.data
this.taskList = 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

View File

@@ -43,7 +43,8 @@
<td>{{e.workorder_code}}</td>
<td>{{e.material_code}}</td>
<td>{{e.material_name}}</td>
<td>{{e.workorder_status}}</td>
<!-- <td>{{e.workorder_status}}</td> -->
<td>{{e.workorder_status_name}}</td>
<td>{{e.operator}}</td>
<td>{{e.create_name}}</td>
<td>{{e.plan_weight}}</td>
@@ -86,6 +87,11 @@
pkId: '',
pkObj: {},
disabled: false,
statusMap: {
'1': '未开始',
'3': '生产中',
'5': '已结束'
},
reload: false,
status: 'more',
contentText: {
@@ -106,6 +112,10 @@
this._regionList()
},
methods: {
// 获取状态名称
getStatusName (status) {
return this.statusMap[status] || ''
},
async _regionList () {
try {
let res = await regionList()
@@ -150,7 +160,11 @@
async _getOrderList () {
let res = await getOrderList(this.index2, '1')
if (res.code === '200') {
this.dataList = res.data
// this.dataList = res.data
this.taskList = 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

202
pages/zw/mancar-safe.vue Normal file
View File

@@ -0,0 +1,202 @@
<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>
<view class="zd_wrapper grid-wraper">
<view class="slide_new">
<table>
<thead>
<tr>
<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.record_id}">
<td>{{e.into_member}}</td>
<td>{{e.in_time}}</td>
<td>{{e.region_code}}</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-7 button-primary" :class="{'button-info': !index}" @tap="seachList">刷新</button>
<button class="zd-col-7 button-primary" :class="{'button-info': !index || !pkId}" @tap="_intoRegion">进入区域</button>
<button class="zd-col-8 button-primary" :class="{'button-info': !index || !pkId}" @tap="_outRegion">退出区域</button>
</view>
</view>
</template>
<script>
import NavBar from '@/components/NavBar.vue'
import SearchBox from '@/components/SearchBox.vue'
import {regionList, getAllIntoRegionMembers, intoRegion, outRegion} from '@/utils/getData4.js'
export default {
components: {
NavBar,
SearchBox
},
data() {
return {
title: '',
options: [],
index: '',
id: '',
code: '',
dataList: [],
pkId: '',
pkObj: {},
disabled: false,
disabled2: false,
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()
this.seachList()
},
methods: {
async _regionList () {
try {
let res = await regionList()
if (res) {
this.options = res.data
} else {
this.options = []
}
} catch (e) {
this.options = []
}
},
selectChange (e) {
this.index = e
this.seachList()
},
seachList () {
if (!this.index) {
return
}
this.dataList = []
this.pageNum = 1
this.pkId = ''
this._getAllIntoRegionMembers()
},
async _getAllIntoRegionMembers () {
let res = await getAllIntoRegionMembers(this.index)
if (res.code === '200') {
this.dataList = res.data
// 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._getAllIntoRegionMembers()
}, 1000)
} else { //停止加载
this.status = 'noMore'
}
},
toChek (e) {
this.pkId = this.pkId === e.record_id ? '' : e.record_id
this.pkObj = this.pkId === e.record_id ? e : {}
},
clearUp () {
this.pkId = ''
this.pkObj = {}
},
async _intoRegion () {
this.disabled = true
if (!index || !pkId) {
this.disabled = false
return
}
try {
let res = await intoRegion(this.index, this.pkObj.into_member)
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
}
},
async _outRegion () {
this.disabled2 = true
if (!index || !pkId) {
this.disabled2 = false
return
}
try {
let res = await outRegion(this.index, this.pkObj.into_member, this.dataList)
if (res.code === '200') {
uni.showToast({
title: res.message,
icon: 'none'
})
this.clearUp()
} else {
uni.showToast({
title: res.message,
icon: 'none'
})
this.disabled2 = false
}
} catch (e) {
this.disabled2 = false
}
}
}
}
</script>

View File

@@ -1,6 +1,6 @@
<template>
<view class="zd_container">
<!-- 料桶入 -->
<!-- 料桶 -->
<nav-bar :title="title"></nav-bar>
<view class="zd_content">
<view class="zd_wrapper">
@@ -21,14 +21,89 @@
<view class="zd-col-17">
<search-box
v-model="val2"
@handleChange="handleChange"
/>
</view>
</view>
<view class="zd-row border-bottom">
<view class="zd-col-7">
<span class="filter_label filter_input_disabled">托盘码</span>
</view>
<view class="zd-col-17">
<input type="text" class="filter_input filter_input_disabled" v-model="currentData.storagevehicle_code" disabled>
</view>
</view>
<view class="zd-row border-bottom">
<view class="zd-col-7">
<span class="filter_label filter_input_disabled">批次</span>
</view>
<view class="zd-col-17">
<input type="text" class="filter_input filter_input_disabled" v-model="currentData.pcsn" disabled>
</view>
</view>
<view class="zd-row border-bottom">
<view class="zd-col-7">
<span class="filter_label filter_input_disabled">数量</span>
</view>
<view class="zd-col-17">
<input type="text" class="filter_input filter_input_disabled" v-model="currentData.qty" disabled>
</view>
</view>
<view class="zd-row border-bottom">
<view class="zd-col-7">
<span class="filter_label filter_input_disabled">单位</span>
</view>
<view class="zd-col-17">
<input type="text" class="filter_input filter_input_disabled" v-model="currentData.qty_unit_name" disabled>
</view>
</view>
<view class="zd-row border-bottom">
<view class="zd-col-7">
<span class="filter_label filter_input_disabled">供应商</span>
</view>
<view class="zd-col-17">
<input type="text" class="filter_input filter_input_disabled" v-model="currentData.supp_name" disabled>
</view>
</view>
<view class="zd-row border-bottom">
<view class="zd-col-7">
<span class="filter_label filter_input_disabled">物料编码</span>
</view>
<view class="zd-col-17">
<input type="text" class="filter_input filter_input_disabled" v-model="currentData.material_code" disabled>
</view>
</view>
<view class="zd-row border-bottom">
<view class="zd-col-7">
<span class="filter_label filter_input_disabled">物料名称</span>
</view>
<view class="zd-col-17">
<input type="text" class="filter_input filter_input_disabled" v-model="currentData.material_name" disabled>
</view>
</view>
<view class="zd-row border-bottom">
<view class="zd-col-7">
<span class="filter_label filter_input_disabled">物料规格</span>
</view>
<view class="zd-col-17">
<input type="text" class="filter_input filter_input_disabled" v-model="currentData.material_spec" disabled>
</view>
</view>
<view class="zd-row border-bottom">
<view class="zd-col-7">
<span class="filter_label filter_input_disabled">物料类型</span>
</view>
<view class="zd-col-17">
<input type="text" class="filter_input filter_input_disabled" v-model="currentData.material_model" disabled>
</view>
</view>
</view>
</view>
<view class="zd-row submit-bar">
<button class="zd-col-11 button-primary" :class="{'button-info': !val1}" :disabled="disabled" @tap="_checkStruct">检查站点</button>
<button class="zd-col-11 button-primary" :class="{'button-info': !val1 || !val2 || flag === '2'}" :disabled="disabled2" @tap="_confirmSet">确认放置</button>
<!-- <button class="zd-col-11 button-primary" :class="{'button-info': !val1}" :disabled="disabled" @tap="_checkStruct">检查站点</button> -->
<button class="zd-col-7 button-primary" :class="{'button-info': !val2}" :disabled="disabled" @tap="_checkStruct">刷新数据</button>
<button class="zd-col-7 button-primary" :class="{'button-info': !val1}" :disabled="disabled3" @tap="_checkStruct">空桶取出</button>
<button class="zd-col-8 button-primary" :class="{'button-info': !val1 || !val2 || flag === '2'}" :disabled="disabled2" @tap="_confirmSet">确认放置</button>
</view>
</view>
</template>
@@ -36,7 +111,7 @@
<script>
import NavBar from '@/components/NavBar.vue'
import SearchBox from '@/components/SearchBox.vue'
import {checkStruct, confirmSet} from '@/utils/getData4.js'
import {checkStruct, jbGetLtInfo, jbEmptyTakeOut, confirmSet} from '@/utils/getData4.js'
export default {
components: {
NavBar,
@@ -48,8 +123,10 @@
val1: '',
val2: '',
flag: '',
currentData: {},
disabled: false,
disabled2: false,
disabled3: false
};
},
onLoad (options) {
@@ -68,6 +145,15 @@
this.val2 = ''
this.disabled2 = false
},
clearUp3 () {
this.val1 = ''
this.disabled3 = false
},
handleChange (e) {
if (e) {
this._jbGetLtInfo()
}
},
async _checkStruct () {
console.log(1111)
this.disabled = true
@@ -95,6 +181,57 @@
this.disabled = false
}
},
async _jbGetLtInfo () {
this.disabled = true
if (!this.val2) {
this.disabled = false
return
}
try {
let res = await jbGetLtInfo(this.val2)
if (res.code === '200') {
this.currentData = res.data
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
}
},
async _jbEmptyTakeOut () {
this.disabled3 = true
if (!this.val1) {
this.disabled3 = false
return
}
try {
let res = await jbEmptyTakeOut(this.val1)
if (res.code === '200') {
uni.showToast({
title: res.message,
icon: 'none'
})
this.clearUp3()
} else {
uni.showToast({
title: res.message,
icon: 'none'
})
this.disabled3 = false
}
} catch (e) {
this.disabled3 = false
}
},
async _confirmSet () {
this.disabled2 = true
if (!this.val1 || !this.val2 || this.flag === '2') {

View File

@@ -153,8 +153,13 @@ export const downMaterial = (wid, area, weight, pcode, tcode, lcode) => request(
url:'api/pda/jb/downMaterial',
data: {workorder_id: wid, area: area, weight: weight, point_code: pcode, tp_code: tcode, lt_code: lcode}
})
// 获取解包点位的托盘编码
export const jbGetVehicleCode = (pcode) => request({
url:'api/pda/jb/jbGetVehicleCode',
data: {point_code: pcode}
})
// 料桶入
// 料桶
// 检测站点
export const checkStruct = (pcode) => request({
url:'api/pda/jb/checkStruct',
@@ -165,6 +170,16 @@ export const confirmSet = (pcode, vcode) => request({
url:'api/pda/jb/confirmSet',
data: {point_code: pcode, vehicle_code: vcode}
})
// 获取料桶组盘信息
export const jbGetLtInfo = (vcode) => request({
url:'api/pda/jb/jbGetLtInfo',
data: {vehicle_code: vcode}
})
// 空桶取出
export const jbEmptyTakeOut = (pcode) => request({
url:'api/pda/jb/jbEmptyTakeOut',
data: {point_code: pcode}
})
// 解包退料
// 解包退料
@@ -172,8 +187,20 @@ export const jbReturnMaterial = (area, pcode, wid) => request({
url:'api/pda/jb/jbReturnMaterial',
data: {area: area, point_code: pcode, workorder_id: wid}
})
// 获取解包点位的托盘编码
export const jbGetVehicleCode = (pcode) => request({
url:'api/pda/jb/jbGetVehicleCode',
data: {point_code: pcode}
// 人车安全
// 进入区域
export const intoRegion = (rcode, nickname) => request({
url:'api/pda/jb/intoRegion',
data: {region_code: rcode, nickname: nickname}
})
// 退出区域
export const outRegion = (rcode, nickname, rows) => request({
url:'api/pda/jb/outRegion',
data: {region_code: rcode, nickname: nickname, rows: rows}
})
// 获取进入区域的信息记录
export const getAllIntoRegionMembers = (rcode) => request({
url:'api/pda/jb/getAllIntoRegionMembers',
data: {region_code: rcode}
})