新增二期呼叫套轴,分切上料2加功能

This commit is contained in:
2026-08-06 16:49:16 +08:00
parent 29ccbcc358
commit 36f5d4afd4
8 changed files with 578 additions and 9 deletions

View File

@@ -8,3 +8,4 @@
+ 线上菜单接口地址:(https://apifox.com/apidoc/shared-cb4996b0-0426-44a6-82a5-0cefe2540fb9/api-152616802)
+ 生产入库、退货入库、报废入库、拆分入库这几个页面的木箱输入框只能扫码,不能输入;盘点明细页面木箱输入框只能扫码,不能输入,点击确定按钮后再次获取焦点;虚拟区发货确认、生产区发货确认两个页面点击确认后会再次获取焦点
+ 一期二期菜单会公用一个页面
+ 插件uni-data-select不能升级会影响模糊搜索

View File

@@ -113,6 +113,19 @@ uni-button:after {
background-color: #E9B451;
}
.icon_close::before {
content: "\e6dc";
}
.icon_close {
width: 48rpx;
height: 48rpx;
font-size: 40rpx;
font-weight: 700;
color: #323232;
line-height: 48rpx;
}
/** */
.zd_container {
width: 100%;
@@ -170,6 +183,11 @@ uni-button:after {
.filter_label_1 {
line-height: 30rpx;
}
.filter_label_2 {
line-height: 56rpx;
text-align: left;
text-align-last: auto;
}
.filter_search {
width: 100rpx;
height: 70rpx;
@@ -202,6 +220,12 @@ uni-button:after {
height: 30rpx;
margin-top: 20rpx;
}
.filter_input_wraper_2 {
width: 100%;
height: 80rpx;
line-height: 80rpx;
margin-bottom: 10rpx;
}
.filter_input_wraper_inn_text {
line-height: 30rpx;
font-size: 28rpx;
@@ -446,6 +470,9 @@ uni-button[disabled]:not([type]) {
top: 100%;
transform: translateY(0%);
}
.pophide2 {
transform: translateY(140%);
}
.msg_wrapper {
position: fixed;
top: auto;
@@ -616,3 +643,81 @@ uni-button[disabled]:not([type]) {
.down_icon {
text-align: center;
}
.msg_wrapper_2 {
position: fixed;
top: auto;
bottom: calc(7% - var(--status-bar-height));
left: 7%;
width: 86%;
height: 86%;
background-color: #ffffff;
box-shadow: 0 -8px 16px 0 rgba(28,31,33,.1);
border-top-left-radius: 20rpx;
border-top-right-radius: 20rpx;
z-index: 301;
transition: all .3s;
}
.pop-title_wraper_2 {
padding: 20rpx 24rpx;
border-bottom: 1rpx solid #dcdfe6;
margin-bottom: 20rpx;
flex-shrink: 0;
}
.pop-title_2 {
font-size: 34rpx;
line-height: 34rpx;
font-weight: 700;
color: #333;
}
.msg_content_2 {
height: calc(100% - 220rpx);
padding: 0 24rpx;
overflow-y: auto;
position: relative;
z-index: 10000;
}
.msg_filter {
width: 100%;
min-height: 100%;
}
.msg_tip_2 {
font-size: 32rpx;
line-height: 32rpx;
font-weight: 700;
color: #333;
margin-bottom: 20rpx;
text-align: left;
padding-left: 20rpx;
}
.msg_tip_2:before {
position: absolute;
left: 0;
content: '';
width: 8rpx;
height: 30rpx;
background-color: #007aff;
border-radius: 4rpx;
}
.msg_tip_2_blue:before {
background-color: #007aff;
}
.msg_tip_2_yellow:before {
background-color: #ff791a;
}
.msg_fgx {
width: 100%;
height: 1rpx;
background: #dcdfe6;
margin: 40rpx 0;
}
.filter_input_wraper_2-bottom {
margin-bottom: 40rpx;
}
.submitbar-popup {
width: 100%;
flex-shrink:0;
background-color: #fff;
padding: 20rpx 0 19rpx 0;
box-shadow: 0 0 20rpx 0 rgba(160,160,160,0.7);
}

View File

@@ -2,8 +2,8 @@
"name" : "海亮铜箔",
"appid" : "__UNI__3A002CD",
"description" : "海亮铜箔二期手持系统",
"versionName" : "1.4.4",
"versionCode" : 144,
"versionName" : "1.4.5",
"versionCode" : 145,
"transformPx" : false,
/* 5+App */
"app-plus" : {

View File

@@ -770,6 +770,13 @@
{
"navigationStyle": "custom"
}
},
{
"path" : "pages/SecondPhase/slitting/CallPaperShaft",
"style" :
{
"navigationStyle": "custom"
}
}
],
"globalStyle": {

View File

@@ -0,0 +1,222 @@
<template>
<view class="zd_container">
<!-- <nav-bar title="呼叫套轴"></nav-bar> -->
<nav-bar :title="title"></nav-bar>
<view class="zd_content">
<view class="zd_wrapper">
<view class="filter_item">
<view class="filter_label">区域</view>
<view class="filter_input_wraper">
<uni-data-select v-model="index1" :localdata="options1" @change="selectChange1"></uni-data-select>
</view>
</view>
<view class="filter_item">
<view class="filter_label_wraper">
<span class="filter_label">位置</span>
</view>
<view class="filter_input_wraper">
<uni-data-select v-model="index2" :localdata="options2" @change="selectChange2"></uni-data-select>
</view>
</view>
<view class="filter_item">
<view class="filter_label">左管</view>
<view class="filter_input_wraper">
<uni-data-select v-model="upL" :searchInput="true" :localdata="newaxis1" @handleChange="handleChange1" @showSelector="showSelector1"></uni-data-select>
</view>
</view>
<view class="filter_item">
<view class="filter_label">右管</view>
<view class="filter_input_wraper">
<uni-data-select v-model="upR" :searchInput="true" :localdata="newaxis2" @handleChange="handleChange2" @showSelector="showSelector2"></uni-data-select>
</view>
</view>
<view class="filter_item">
<view class="filter_label_wraper">
<span class="filter_label">尺寸</span>
</view>
<view class="filter_input_wraper">
<uni-data-select v-model="index3" :localdata="options3" @change="selectChange3"></uni-data-select>
</view>
</view>
<view class="filter_item">
<view class="filter_label_wraper">
<span class="filter_label">代数</span>
</view>
<view class="filter_input_wraper">
<uni-data-select v-model="index4" :localdata="options4" @change="selectChange4"></uni-data-select>
</view>
</view>
<view class="filter_item">
<view class="filter_label">数量</view>
<view class="filter_input_wraper">
<!-- <input type="number" class="filter_input" v-model="qty"> -->
<NumberInput
v-model="qty"
input-class="filter_input"
mode="integer"
/>
</view>
</view>
</view>
</view>
<view class="zd-row submitbar">
<button class="zd-col-6 btn-submit btn-default" @tap="clearUp">清空</button>
<button class="zd-col-15 btn-submit btn-success" :class="{'btn-info': !index1 || !index2 || (!upL && !upR) || !index3 || !index4 || !qty}" :disabled="disabled" @tap="_slitXnplan">呼叫套轴</button>
</view>
</view>
</template>
<script>
import NavBar from '@/components/NavBar.vue'
import SearchBox from '@/components/SearchBox.vue'
import NumberInput from '@/components/NumberInput.vue'
import {queryProductArea, queryDeviceByarea} from '@/utils/getData2.js'
import {slitXnplan, slitXnarea, paperQueryPaperMaterial} from '@/utils/getData3.js'
export default {
components: {
NavBar,
SearchBox,
NumberInput
},
data() {
return {
title: '',
options1: [],
index1: '',
options2: [],
index2: '',
options3: [{text: '3寸', value: '3'}, {text: '6寸', value: '6'}],
index3: '',
options4: [{text: '4代', value: '4'}, {text: '5代', value: '5'}],
index4: '',
axis: [],
newaxis1: [],
newaxis2: [],
upL: '',
upR: '',
qty: null,
disabled: false,
disabled1: false
};
},
onLoad (options) {
this.title = options.title
this._queryProductArea()
this._paperQueryPaperMaterial()
},
methods: {
/** 生产区域下拉框查询 */
async _queryProductArea () {
let res = await queryProductArea()
this.options1 = [...res.data]
},
async _slitXnarea (e) {
try {
let res = await slitXnarea(e)
if (res) {
const list = res.map(el => {
return {
text: el.label,
value: el.value
}
})
this.options2 = list
}
} catch (e) {
this.options2 = []
}
},
selectChange1(e) {
this.index1 = e
if (e) {
this._slitXnarea(e)
} else {
this.options2 = []
}
},
selectChange2(e) {
this.index2 = e
},
selectChange3(e) {
this.index3 = e
},
selectChange4(e) {
this.index4 = e
},
async _paperQueryPaperMaterial () {
let res = await paperQueryPaperMaterial()
this.axis = [...res.rows]
},
clearUp () {
this.index1 = ''
this.index2 = ''
this.upL = ''
this.upR = ''
this.index3 = ''
this.index4 = ''
this.qty = null
this.disabled = false
this.disabled1 = false
},
async _slitXnplan () {
this.disabled = true
if (!this.index1 || !this.index2 || (!this.upL && !this.upR) || !this.index3 || !this.index4 || !this.qty) {
this.disabled = false
return
}
let upLT = ''
let upRT = ''
this.axis.map(el => {
if (el.value === this.upL) {
upLT = el.text
}
if (el.value === this.upR) {
upRT = el.text
}
})
try {
let res = await slitXnplan(this.index1, this.index2, upLT, this.upL, upRT, this.upR, this.index3, this.index4, this.qty)
this.disabled = false
uni.showToast({
title: res.message,
icon: 'none'
})
} catch (e) {
this.disabled = false
}
},
/** 模糊匹配 */
selectMatchItem (lists, keyWord) {
let resArr = []
lists.filter((item) => {
if (item.text.indexOf(keyWord) > -1) {
resArr.push(item)
}
})
return resArr
},
handleChange1 (e) {
if (e){
this.upL = ''
this.newaxis1 = this.selectMatchItem(this.axis, e)
} else {
this.newaxis1 = this.axis
}
},
showSelector1 () {
this.newaxis1 = this.axis
},
handleChange2 (e) {
if (e){
this.upR = ''
this.newaxis2 = this.selectMatchItem(this.axis, e)
} else {
this.newaxis2 = this.axis
}
},
showSelector2 () {
this.newaxis2 = this.axis
}
}
}
</script>

View File

@@ -73,8 +73,9 @@
</view>
</view>
<view class="zd-row submitbar">
<button class="zd-col-6 btn-submit btn-default" @tap="clearUp">清空</button>
<button class="zd-col-15 btn-submit btn-success" :class="{'btn-info': !index || !dataList.length}" @tap="downRolls2Confirm">确认</button>
<button class="zd-col-5 btn-submit btn-default" @tap="clearUp">清空</button>
<button class="zd-col-8 btn-submit btn-success" :class="{'btn-info': !index || !dataList.length}" @tap="downRolls2Confirm">确认</button>
<button class="zd-col-8 btn-submit btn-success" :class="{'btn-info': !index}" @tap="bindPlanDeviceConfirm">绑定</button>
</view>
<view class="msg_modal" :class="modalShow ? 'popshow1' : 'pophide1'">
<view class="msg_tip">提示</view>
@@ -88,6 +89,40 @@
</view>
</view>
<view v-if="modalShow" class="msg_mask msg_mask_1"></view>
<view class="msg_wrapper_2" :class="modalShow1 ? 'popshow' : 'pophide2'">
<view class="zd-row pop-title_wraper_2">
<text class="pop-title_2">绑定轴信息</text>
<text class="iconfont icon_close" @tap="modalShow1 = false"></text>
</view>
<view class="msg_content_2">
<view class="msg_filter">
<view class="relative msg_tip_2 msg_tip_2_blue">上轴信息</view>
<view class="filter_label filter_label_2">缓存架编码</view>
<view class="filter_input_wraper_2">
<input type="text" class="filter_input" placeholder="请输入缓存架编码" v-model="upShelf">
</view>
<view class="filter_label filter_label_2">绑定计划</view>
<view class="filter_input_wraper_2">
<uni-data-select v-model="upPlanCode" :searchInput="true" :localdata="PlanOptions1" @handleChange="handleChange1" @showSelector="showSelector1"></uni-data-select>
</view>
<view class="msg_fgx"></view>
<view class="relative msg_tip_2 msg_tip_2_yellow">下轴信息</view>
<view class="filter_label filter_label_2">缓存架编码</view>
<view class="filter_input_wraper_2">
<input type="text" class="filter_input" placeholder="请输入缓存架编码" v-model="downShelf">
</view>
<view class="filter_label filter_label_2">绑定计划</view>
<view class="filter_input_wraper_2 filter_input_wraper_2-bottom">
<uni-data-select v-model="downPlanCode" :searchInput="true" :localdata="PlanOptions2" @handleChange="handleChange2" @showSelector="showSelector2"></uni-data-select>
</view>
</view>
</view>
<view class="zd-row submitbar">
<button class="zd-col-11 btn-submit btn-success" :class="{'btn-info': !((upShelf && upPlanCode) || (downShelf && downPlanCode))}" :disabled="disabled" @tap="bindSure(0)">确认绑定</button>
<button class="zd-col-11 btn-submit btn-success" :class="{'btn-info': !((upShelf && upPlanCode) || (downShelf && downPlanCode))}" :disabled="disabled" @tap="bindSure(1)">强制绑定</button>
</view>
</view>
<view v-if="modalShow1" class="msg_mask"></view>
</view>
</template>
@@ -95,7 +130,9 @@
import NavBar from '@/components/NavBar.vue'
import SearchBox from '@/components/SearchBox.vue'
import {queryProductArea} from '@/utils/getData2.js'
import {getTubeLength, slitterDevices, downRolls2} from '@/utils/getData3.js'
import {getTubeLength, slitterDevices, downRolls2, getUnbindPlan, dBindPlanDevice} from '@/utils/getData3.js'
// import {getTubeLength, slitterDevices, queryProductArea, getUnbindPlan} from '@/utils/mork2.js'
// import {downRolls2, dBindPlanDevice} from '@/utils/getData3.js'
export default {
components: {
NavBar,
@@ -117,7 +154,15 @@
disabled1: false,
modalShow: false,
htmlContent1: [],
htmlContent2: []
htmlContent2: [],
modalShow1: false,
upShelf: '',
upPlanCode: '',
downShelf: '',
downPlanCode: '',
PlanOptions: [],
PlanOptions1: [],
PlanOptions2: []
};
},
onLoad (options) {
@@ -144,8 +189,29 @@
let res = await slitterDevices(e)
this.options = [...res]
},
async _getUnbindPlan (e) {
try {
let res = await getUnbindPlan(e)
if (res) {
const list = res.map(el => {
return {
text: el.label,
value: el.value
}
})
this.PlanOptions = list
}
} catch (e) {
this.PlanOptions = []
}
},
selectChange (e) {
this.index = e
if (e) {
this._getUnbindPlan(e)
} else {
this.PlanOptions = []
}
},
radioChange (e) {
this.index1 = e.detail.value
@@ -250,6 +316,79 @@
this.dataList = []
this.disabled = false
this.disabled1 = false
},
/** 模糊匹配 */
selectMatchItem (lists, keyWord) {
let resArr = []
lists.filter((item) => {
if (item.text.indexOf(keyWord) > -1) {
resArr.push(item)
}
})
return resArr
},
handleChange1 (e) {
if (e){
this.upPlanCode = ''
this.PlanOptions1 = this.selectMatchItem(this.PlanOptions, e)
} else {
this.PlanOptions1 = this.PlanOptions
}
},
showSelector1 () {
this.PlanOptions1 = this.PlanOptions
},
handleChange2 (e) {
if (e){
this.downPlanCode = ''
this.PlanOptions2 = this.selectMatchItem(this.PlanOptions, e)
} else {
this.PlanOptions2 = this.PlanOptions
}
},
showSelector2 () {
this.PlanOptions2 = this.PlanOptions
},
bindPlanDeviceConfirm () {
if (!this.index) {
uni.showToast({
title: '请先选择设备',
icon: 'none'
})
return
}
this.modalShow1 = true
this.upShelf = ''
this.upPlanCode = ''
this.downShelf = ''
this.downPlanCode = ''
},
async bindSure (type) {
this.disabled = true
const upValid = this.upShelf && this.upPlanCode
const downValid = this.downShelf && this.downPlanCode
if (!upValid && !downValid) {
uni.showToast({
title: '请至少完整填写上轴或下轴一组信息',
icon: 'none'
})
this.disabled = false
return
}
try {
let res = await dBindPlanDevice(this.upShelf, this.upPlanCode, this.downShelf, this.downPlanCode, type, this.index)
if (res) {
uni.showToast({
title: res.message,
icon: 'none'
})
}
this.disabled = false
this.modalShow1 = false
} catch (e) {
this.disabled = false
this.modalShow1 = false
}
}
}
}

View File

@@ -506,6 +506,23 @@ export const downRolls2 = (device, code) => request({
container: code
}
})
export const getUnbindPlan = (device) => request({
url:'api/pda/slitter/get-unbind-plan',
data: {
deviceCode: device
}
})
export const dBindPlanDevice = (upShelf, upPlanCode, downShelf, downPlanCode, force, device) => request({
url:'api/pda/slitter/do-bind-plan-device',
data: {
upShelf: upShelf,
upPlanCode: upPlanCode,
downShelf: downShelf,
downPlanCode: downPlanCode,
force: force,
device: device
}
})
/**
* 母卷暂存管理(分切管理二期)
*/
@@ -682,3 +699,26 @@ export const changePointMove = (code, move) => request({
url:'api/pda/raw/changePointMove',
data: {deviceCode: code, move: move}
})
/**
* 呼叫套轴(二期)
*/
// 获取位置下拉框
export const slitXnarea = (area) => request({
url:'api/pda/slitter/list-xn-area',
data: {area: area}
})
// 呼叫套轴
export const slitXnplan = (area, location, ulk, ulv, urk, urv, size, qzz, num) => request({
url:'api/pda/slitter/bind-xn-plan',
data: {
area: area,
location: location,
up_left_size_k: ulk,
up_left_size_v: ulv,
up_right_size_k: urk,
up_right_size_v: urv,
qzz_size: size,
qzz_generation: qzz,
qqz_num: num
}
})

View File

@@ -114,7 +114,8 @@ export const allAuthority = () => {
{menu_id: '8', title: '子卷拼单', path: '/pages/SecondPhase/slitting/Zjpindan'},
{menu_id: '8', title: '人工呼叫空轴', path: '/pages/SecondPhase/slitting/ManEmptyAxle'},
{menu_id: '11', title: '备货出入库', path: '/pages/SecondPhase/slitting/GdsPrepInOut'},
{menu_id: '11', title: '任务管理', path: '/pages/SecondPhase/slitting/Task'}
{menu_id: '11', title: '任务管理', path: '/pages/SecondPhase/slitting/Task'},
{menu_id: '8', title: '呼叫套轴', path: '/pages/SecondPhase/slitting/CallPaperShaft'}
]},
{menu_id: '10', path: 'RF15', title: '打包间管理', sonTree: [
{menu_id: '1', title: '子卷包装解绑', path: '/pages/SecondPhase/SubRollPackUnbind'},
@@ -183,6 +184,19 @@ export const queryProductArea = () => {
}
return res
}
export const slitXnarea = () => {
let res = [
{
"label": "B1分切合单1区",
"value": "1"
},
{
"label": "B1分切合单2区",
"value": "2"
}
]
return res
}
export const slitterDevices = (area) => {
let res = [{text: '物料一', value: '001'}, {text: '物料a', value: '002'}, {text: '物料b', value: '003'}]
return res
@@ -302,3 +316,44 @@ export const getTubeLength = (code) => {
let res = {"data":{"bh":"15","length":"1500"},"message":"获取信息成功!","status":200}
return res
}
export const getUnbindPlan = () => {
let res = [
{
"label": "1",
"value": "1"
},
{
"label": "2",
"value": "2"
},
{
"label": "3",
"value": "3"
},
{
"label": "1",
"value": "1"
},
{
"label": "2",
"value": "2"
},
{
"label": "3",
"value": "3"
},
{
"label": "1",
"value": "1"
},
{
"label": "2",
"value": "2"
},
{
"label": "3",
"value": "3"
}
]
return res
}