This commit is contained in:
2025-07-22 14:34:32 +08:00
10 changed files with 368 additions and 32 deletions

View File

@@ -606,4 +606,7 @@ uni-button[disabled]:not([type]) {
width: 100%;
border-radius: 20rpx;
background-color: #fff;
}
.down_icon {
text-align: center;
}

View File

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

View File

@@ -703,6 +703,14 @@
}
}
,{
"path" : "pages/SecondPhase/slitting/CallAxis",
"style" :
{
"navigationStyle": "custom"
}
}
],
"globalStyle": {
// "pageOrientation": "landscape",

View File

@@ -13,9 +13,10 @@
</view>
</view>
<view class="zd-row submitbar">
<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}" :disabled="disabled" @tap="_confirmPass">确认</button>
<button class="zd-col-8 btn-submit btn-success" @tap="btn_active=true">出库点放行</button>
<button class="zd-col-4 btn-submit btn-default" @tap="clearUp">清空</button>
<button class="zd-col-4 btn-submit btn-success" :class="{'btn-info': !index}" :disabled="disabled" @tap="_confirmPass">确认</button>
<button class="zd-col-6 btn-submit btn-success" @tap="btn_active=true">出库点放行</button>
<button class="zd-col-8 btn-submit btn-success" :disabled="disabled" @tap="handleConfirm">异常出库点放行</button>
</view>
<view class="more_btns_wraper" :class="btn_active ? 'popshow' : 'pophide'">
<view class="more_btns_items">
@@ -31,7 +32,8 @@
<script>
import NavBar from '@/components/NavBar.vue'
import SearchBox from '@/components/SearchBox.vue'
import {confirmPass, outPointPass} from '@/utils/getData3.js'
import { confirmAction } from '@/utils/utils.js'
import {confirmPass, outPointPass, outExcepionPointPass} from '@/utils/getData3.js'
export default {
components: {
NavBar,
@@ -89,6 +91,25 @@
this.disabled = false
this.btn_active = false
}
},
async handleConfirm() {
const isConfirmed = await confirmAction("提示", "确定是否进行异常出库点放行?")
if (isConfirmed) {
this._outExcepionPointPass()
}
},
async _outExcepionPointPass () {
try {
this.disabled = true
let res = await outExcepionPointPass('CK2001')
uni.showToast({
title: res.message,
icon: 'none'
})
this.disabled = false
} catch (e) {
this.disabled = false
}
}
}
}

View File

@@ -20,9 +20,9 @@
<tr>
<th>选择</th>
<th class="th_2">订单号</th>
<th>客户名称</th>
<th><view style="width: 240rpx;">客户名称</view></th>
<th>子卷号</th>
<th>子卷规格</th>
<th><view style="width: 240rpx;">子卷规格</view></th>
<th>子卷重量</th>
<th>子管重量</th>
<th>木箱料号</th>
@@ -32,9 +32,9 @@
<tr v-for="(e, i) in dataList" :key="i">
<td><span class="iconfont icon_minus-filled" @click="toCheck(e, i)">&minus;</span></td>
<td class="td_2">{{e.sale_order_name}}</td>
<td>{{e.customer_description}}</td>
<td class="wrap">{{e.customer_description}}</td>
<td>{{e.container_name}}</td>
<td>{{e.paper_tube_description}}</td>
<td class="wrap">{{e.paper_tube_description}}</td>
<td>{{e.paper_weight}}</td>
<td>{{e.box_weight}}</td>
<td>{{e.box_type}}</td>
@@ -51,11 +51,11 @@
<view class="msg_wrapper" :class="show ? 'popshow' : 'pophide'">
<view class="pop-line"></view>
<view class="zd_wrapper-2">
<view class="zd-row filter_item">
<view :class="!disabled ? 'zd-col-18' : 'zd-col-24'">
<input type="text" placeholder="输入关键字搜索" class="filter_input" :class="{'filter_input_disabled': disabled}" :disabled="disabled" v-model="val2">
<view class="filter_item">
<view class="filter_label">木箱描述</view>
<view class="filter_input_wraper">
<uni-data-select v-model="index" :localdata="options" @change="selectChange"></uni-data-select>
</view>
<view v-show="!disabled" class="zd-col-5"><button class="btn-submit btn-success" @tap="_queryBoxSpec">查询</button></view>
</view>
</view>
<view class="msg_content msg_content_1 pdb110">
@@ -65,7 +65,7 @@
<thead>
<tr>
<th>木箱规格</th>
<th>物料名称</th>
<th><view style="width: 240rpx;">物料名称</view></th>
<th>木箱长度</th>
<th>木箱宽度</th>
<th>木箱高度</th>
@@ -76,7 +76,7 @@
<tbody>
<tr v-for="(e, i) in popData" :key="'pop' + i" @click="popCheck(e)" :class="{'checked': e.material_code === pkId}">
<td>{{e.material_code}}</td>
<td>{{e.material_name}}</td>
<td class="wrap">{{e.material_name}}</td>
<td>{{e.box_length}}</td>
<td>{{e.box_width}}</td>
<td>{{e.box_high}}</td>
@@ -129,7 +129,7 @@
import NavBar from '@/components/NavBar.vue'
import SearchBox from '@/components/SearchBox.vue'
import UpTop from '@/components/upTop.vue'
import {queryContainerNameBySaleOrder, queryBoxSpec, updateEntityList} from '@/utils/getData3.js'
import {queryContainerNameBySaleOrder, getSameBoxList, queryBoxSpec, updateEntityList} from '@/utils/getData3.js'
export default {
components: {
NavBar,
@@ -145,7 +145,8 @@
popData: [],
show: false,
disabled: false,
val2: '',
options: [],
index: '',
pkId: '',
pkObj: {},
paper: '',
@@ -238,11 +239,32 @@
}
}
this.disabled = code !== ''
this.val2 = code
this._queryBoxSpec()
this._getSameBoxList(code)
},
async _queryBoxSpec () {
let res = await queryBoxSpec(this.val2)
async _getSameBoxList (e) {
let res = await getSameBoxList(e)
if (res && res.length) {
this.options = [...res]
if (this.options.length > 0) {
this.index = this.options[0].value
this._queryBoxSpec(this.index)
}
}
},
selectChange (e) {
this.index = e
if (e) {
this._queryBoxSpec(e)
} else {
this.popData = []
this.pkId = ''
this.pkObj = {}
}
},
async _queryBoxSpec (e) {
this.pkId = ''
this.pkObj = {}
let res = await queryBoxSpec(e)
if (res.code === 200) {
this.popData = [...res.content]
this.show = true
@@ -274,6 +296,9 @@
}
},
popSure () {
if (!this.pkId) {
return
}
if (this.dataList.length > Number(this.pkObj.num)) {
uni.showToast({
title: '子卷数量超过木箱的最大装卷数!',

View File

@@ -3,8 +3,8 @@
<!-- <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="zd_wrapper" style="padding: 0;">
<view class="filter_item" style="padding: 14rpx;">
<view class="filter_label_wraper">
<span class="filter_label">子卷号</span>
</view>
@@ -12,14 +12,24 @@
<search-box v-model="val1" @handleChange="handleChange" />
</view>
</view>
<view class="filter_item">
<view class="filter_label_wraper">
<span class="filter_label filter_label_1"></span>
</view>
<view class="filter_input_wraper filter_input_wraper_1">
<view class="iconfont icon_unchecked" :class="{'icon_checked': isV === '1'}" @tap="isVirtual">&#xe66b;</view>
<view class="filter_input_wraper_inn_text">直接入库</view>
<transition
name="content"
@before-enter="beforeEnter"
@enter="enter"
@leave="leave"
>
<view class="filter_item" v-if="isExpanded">
<view class="filter_label_wraper">
<span class="filter_label"></span>
</view>
<view class="filter_input_wraper" style="margin-left: 44rpx;">
<view class="iconfont icon_unchecked" :class="{'icon_checked': isV === '1'}" @tap="isVirtual">&#xe66b;</view>
<view class="filter_input_wraper_inn_text">直接入库</view>
</view>
</view>
</transition>
<view class="down_icon">
<uni-icons :type="iconType" size="24" color="#4e6ef2" style="margin:0 auto;" @click="toggleContent"></uni-icons>
</view>
</view>
<view class="zd_wrapper grid-wraper">
@@ -82,9 +92,16 @@
arr1: [],
dataList: [],
disabled: false,
isV: '0'
isV: '0',
isExpanded: false,
contentHeight: 0
};
},
computed: {
iconType() {
return this.isExpanded ? 'up' : 'down'
}
},
onPageScroll(e) {
this.$refs.UT.topData(e.scrollTop)
},
@@ -92,6 +109,44 @@
this.title = options.title
},
methods: {
toggleContent() {
this.isExpanded = !this.isExpanded
},
beforeEnter(el) {
el.style.height = '0'
this.$nextTick(() => {
el.style.height = el.scrollHeight + 'px'
})
},
enter(el, done) {
const animation = el.animate(
[
{ height: '0', opacity: 0 },
{ height: el.scrollHeight + 'px', opacity: 1 },
],
{
duration: 300,
easing: 'ease',
}
);
animation.onfinish = done
},
leave(el, done) {
const animation = el.animate(
[
{ height: el.scrollHeight + 'px', opacity: 1 },
{ height: '0', opacity: 0 },
],
{
duration: 300,
easing: 'ease',
}
)
animation.onfinish = () => {
el.style.height = '0'
done()
}
},
isVirtual () {
this.isV = this.isV === '0' ? '1' : '0'
},

View File

@@ -0,0 +1,177 @@
<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="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="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>
<th>组别</th>
<th>上下轴</th>
<th>呼叫状态</th>
<th>气胀轴尺寸</th>
<th>呼叫时间</th>
</tr>
</thead>
<tbody>
<tr v-for="(e, i) in dataList" :key="i" @click="toCheck(e)" :class="{'checked': e.workorder_id === pkId}">
<td>{{e.resource_name}}</td>
<td>{{e.container_name}}</td>
<td>{{e.parent_container_name}}</td>
<td>{{e.split_group}}</td>
<td>{{['上轴', '下轴'][Number(e.up_or_down) - 1]}}</td>
<td>{{['未呼叫', '已呼叫'][Number(e.status)]}}</td>
<td>{{e.qzz_size}}</td>
<td>{{e.start_time}}</td>
</tr>
</tbody>
</table>
</view>
</view>
</view>
<view class="zd-row submitbar">
<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}" @tap="_doCallTubeShaftShow(index)">刷新</button>
<button class="zd-col-8 btn-submit btn-success" :class="{'btn-info': !index || !pkId || pkObj.status === '1'}" :disabled="disabled" @tap="toSure">确认</button>
</view>
</view>
</template>
<script>
import NavBar from '@/components/NavBar.vue'
import SearchBox from '@/components/SearchBox.vue'
import {queryProductArea} from '@/utils/getData2.js'
import {slitterDevices, doCallTubeShaftShow, doCallTubeShaft} from '@/utils/getData3.js'
export default {
components: {
NavBar,
SearchBox
},
data() {
return {
title: '',
options: [],
index: '',
options2: [],
index2: '',
dataList: [],
pkId: '',
pkObj: {},
disabled: false
};
},
onLoad (options) {
this.title = options.title
this._queryProductArea()
},
methods: {
selectChange2(e) {
this.index2 = e
if (e) {
this._slitterDevices(e)
} else {
this.index = ''
}
},
/** 生产区域下拉框查询 */
async _queryProductArea () {
let res = await queryProductArea()
this.options2 = [...res.data]
},
async _slitterDevices (e) {
let res = await slitterDevices(e)
this.options = [...res]
},
selectChange (e) {
this.index = e
if (e) {
this._doCallTubeShaftShow(e)
} else {
this.dataList = []
}
},
async _doCallTubeShaftShow (e) {
if (!this.index) {
return
}
try {
let res = await doCallTubeShaftShow(e)
if (res) {
this.dataList = [...res]
} else {
this.dataList = []
}
} catch (e) {
this.dataList = []
}
},
toCheck (e) {
this.pkId = this.pkId === e.workorder_id ? '' : e.workorder_id
this.pkObj = this.pkId === e.workorder_id ? e : {}
},
toSure () {
this.disabled = false
if (!this.index || !this.pkId || this.pkObj.status === '1') {
this.disabled = false
return
}
uni.showModal({
title: '提示',
content: `将呼叫母卷:${this.pkObj.parent_container_name}${this.pkObj.split_group}组的计划`,
confirmColor: '#ff6a00',
success: (res) => {
if (res.confirm) {
this._doCallTubeShaft()
} else if (res.cancel) {
this.disabled = false
}
}
})
},
async _doCallTubeShaft () {
this.disabled = true
try {
let res = await doCallTubeShaft(this.index, this.pkObj)
if (res) {
uni.showToast({
title: res.message,
icon: 'none'
})
this.pkId = ''
this.pkObj = {}
this._doCallTubeShaftShow(this.index)
}
this.disabled = false
} catch (e) {
this.disabled = false
}
},
clearUp () {
this.index = ''
this.index2 = ''
this.options = []
this.pkId = ''
this.pkObj = {}
}
}
}
</script>

View File

@@ -260,6 +260,10 @@ export const queryContainerNameBySaleOrder = (code) => request({
url:'api/pdmBiSubpackagerelation/queryContainerNameBySaleOrder',
data: {type: '1', container_name: code}
})
export const getSameBoxList = (code) => request({
url:'api/samebox/getSameBoxList',
data: {box_code: code}
})
export const queryBoxSpec = (code) => request({
method: 'GET',
url:'api/pdmBiSubpackagerelation/queryBoxSpec',
@@ -287,6 +291,10 @@ export const outPointPass = (code) => request({
url:'api/twoPda/st/outPointPass',
data: {point_code: code}
})
export const outExcepionPointPass = (code) => request({
url:'api/twoPda/st/outExcepionPointPass',
data: {point_code: code}
})
/**
* 打印
@@ -568,4 +576,15 @@ export const updatePackagePoint = (ivt, code) => request({
export const cutCacheInventory = (code, type) => request({
url:'/api/pda/slitter/cutCacheInventory',
data: {point_code: code, type: type}
})
/**
* 呼叫套轴
*/
export const doCallTubeShaftShow = (code) => request({
url:'api/pda/slitter/doCallTubeShaftShow',
data: {device_code: code}
})
export const doCallTubeShaft = (code, row) => request({
url:'api/pda/slitter/doCallTubeShaft',
data: {device_code: code, row: row}
})

View File

@@ -110,6 +110,7 @@ export const allAuthority = () => {
{menu_id: '8', title: '空轴绑定', path: '/pages/SecondPhase/slitting/EmptyAxisBind'},
{menu_id: '8', title: '空轴退回', path: '/pages/SecondPhase/slitting/EmptyAxisReturn'},
{menu_id: '8', title: '分切暂存维护', path: '/pages/SecondPhase/slitting/CacheSave'},
{menu_id: '8', title: '呼叫套轴', path: '/pages/SecondPhase/slitting/CallAxis'}
]},
{menu_id: '10', path: 'RF15', title: '打包间管理', sonTree: [
{menu_id: '1', title: '子卷包装解绑', path: '/pages/SecondPhase/SubRollPackUnbind'},
@@ -210,6 +211,10 @@ export const queryContainerNameBySaleOrder = () => {
}
return res
}
export const getSameBoxList = () => {
let res = [{text: '物料一', value: '001'}, {text: '物料a', value: '002'}, {text: '物料b', value: '003'}]
return res
}
export const queryBoxSpec = () => {
let res = {
"totalElements": 1,
@@ -281,4 +286,8 @@ export const twoQueryBoxIvt = (code) => {
export const showManualView = (code) => {
let res = [{resource_name: 'B60FQ00003', up_or_down: '1', qzz_size: '6', status: '01', qzz_generation: '5', start_time: '2025-03-11 15:24:26'}]
return res
}
export const doCallTubeShaftShow = () => {
let res = [{"workorder_id":"1850909252072378369","resource_name":"B50FQ00001","container_name":"BB3X2410280807A2","parent_container_name":"BB3X24102809","split_group":"A","up_or_down":"2","status":"0","qzz_size":"6","tube":"玻璃纤维及其制品|FRP管|6英寸|15|1700|阶梯","qzz_generation":"4","start_time":"","is_paper_ok":"1","qzzno":"","manufacture_sort":"P1"}]
return res
}

19
utils/utils.js Normal file
View File

@@ -0,0 +1,19 @@
export function confirmAction(title = "确认操作", content = "确定要执行此操作吗?", confirmCallback) {
return new Promise((resolve, reject) => {
uni.showModal({
title: title,
content: content,
showCancel: true,
success: (res) => {
if (res.confirm) {
resolve(true); // 调用确认回调
if (confirmCallback) {
confirmCallback();
}
} else if (res.cancel) {
resolve(false);
}
}
});
});
}