Compare commits

...

7 Commits

21 changed files with 1681 additions and 42 deletions

View File

@ -56,3 +56,70 @@ config.header['platform'] = 'APP'
</view> </view>
</uni-td> </uni-td>
``` ```
# 以下为复杂页面的完整配置参数
```json
{
"path": "pages/index/index", // 首页
"style": {
"navigationBarTitleText": "首页", // 页面标题
"enablePullDownRefresh": true, // 开启下拉刷新
"backgroundColor": "#F8F8F8", // 导航栏背景颜色
"onReachBottomDistance": 100, // 设置页面上拉触底事件触发时距离页面底部的距离,默认是50px
"app-plus": { // 以下是App平台特有配置
"titleNView": {
"titleSize": "16px" // App端原生导航栏标题字体大小
"titleColor": "#fff",
"buttons": [{ // 导航栏右侧按钮下面是使用icon展示的示例
"text": "\ue60f",
"fontSize": "30px",
"fontSrc": "/static/iconfont.ttf"
}]
}
}
}
}
```
## 以下为底部按钮列表的使用方式
```js
//按钮列表的引入
import bottomBtnGroup from '@/components/bottomBtn/bottomBtnGroup.vue'
//注册组件
components: {
bottomBtnGroup
},
//UI 引用
<bottomBtnGroup :toolbar="bottomBtnList"></bottomBtnGroup>
// vue Data定义
data() {
return {
//form 底部按钮栏配置
bottomBtnList: [{
label: "新增",
type: "primary",
event: (done) => { // 接收 done 回调 // ✅ 箭头函数this 指向组件
setTimeout(() => {
// // 在这里执行你想要延迟执行的函数或代码
console.log("延时5秒") // 调用你的函数
this.containCallMethods(done);//你需要执行的方法
}, 5000);
//this.containCallMethods(done);
},
},
{
label: "取消",
type: "primary",
event: function() {
//方式2
return new Promise(resolve => {
console.log("取消方法完成")
setTimeout(resolve, 5000);
});
}
},
],
}
}
```

View File

@ -0,0 +1,43 @@
import request from '@/utils/request'
/** 接口 */
const Api = {
qurey: '/api/wms/pda/queryInBillSkuInfo',
save: '/api/wms/pda/createPalletByBill',
queryEmptyLoc:'/api/wms/pda/queryEmptyLoc',
clearEmptyLoc:'/api/wms/pda/clearEmptyLoc',
}
/** 入库单明细查询 */
export const qurey = data => {
return request({
url: Api.qurey + this.invoiceCode,
data: data,
method: 'GET'
})
}
/** 单据组盘表单提交 */
export const save = data => {
return request({
url: Api.save,
data: data,
method: 'POST'
})
}
/** 查询空托盘巷道信息 */
export const queryEmptyLoc = data => {
return request({
url: Api.queryEmptyLoc,
data: data,
method: 'POST'
})
}
/** 查询空托盘巷道信息 */
export const clearEmptyLoc = data => {
return request({
url: Api.clearEmptyLoc,
data: data,
method: 'POST'
})
}

View File

@ -0,0 +1,42 @@
import request from '@/utils/request'
/**重庆电热SMT操作相关接口定义**/
const Api = {
emptyPoleCall: '/api/restful/SMTPda/emptyPoleCall',
save: '/api/wms/pda/createPalletByBill',
queryEmptyLoc: '/api/wms/pda/queryEmptyLoc',
clearEmptyLoc: '/api/wms/pda/clearEmptyLoc',
}
/** 容器呼叫 */
export const emptyPoleCall = data => {
return request({
url: Api.emptyPoleCall,
data: data,
method: 'POST'
})
}
/** 单据组盘表单提交 */
export const save = data => {
return request({
url: Api.save,
data: data,
method: 'POST'
})
}
/** 查询空托盘巷道信息 */
export const queryEmptyLoc = data => {
return request({
url: Api.queryEmptyLoc,
data: data,
method: 'POST'
})
}
/** 查询空托盘巷道信息 */
export const clearEmptyLoc = data => {
return request({
url: Api.clearEmptyLoc,
data: data,
method: 'POST'
})
}

View File

@ -25,7 +25,8 @@ export async function getDictionary(dictType ){
}).then(response => { }).then(response => {
dictionary = response.data; dictionary = response.data;
dictionary.map((item) => { dictionary.map((item) => {
item.text = item.label item.text = item.label,
item.value = item.value
}); });
}).catch((e)=>{ }).catch((e)=>{
console.log("获取下拉值数据时出现异常",e) console.log("获取下拉值数据时出现异常",e)

View File

@ -0,0 +1,299 @@
<!-- PageBottom.vue -->
<template>
<view class="pageBottom" :style="{ position: position, bottom: isSubmit ? '60rpx' : '0' }">
<view class="uni-flex uni-row buttons">
<view class="flex-item " v-for="(item, index) in toolbar" :key="index" style="padding: 1ch;width: 100%;">
<!-- 更多按钮:todo 1.按钮权限控制2.动态宽度 -->
<!-- type: 'primary' 蓝色不同终端默认颜色不同,'default' 白色,'warn'红色 如想在多端统一颜色请改用default然后自行写样式 -->
<!-- style: 支持自定义样式 -->
<button :type="item.type && ['primary','default','warn'].includes(item.type) ? item.type : 'default'"
@click="handleClick(item,index)" :style="item.style || ''" :loading="buttonStates[index]"
:disabled="buttonStates[index]">
{{ item.label }}{{ item.disable }}
</button>
</view>
</view>
</view>
</template>
<script>
import {
propsToAttrMap
} from '@vue/shared';
export default {
name: 'bottomBtnGroup',
// props
props: {
///
toolbar: {
type: Array,
default () {
return [{
label: "新增",
type: "primary",
event: function(done) {
//1 done
setTimeout(() => {
console.log("延时5秒 新增方法完成")
done(); //
}, 5000);
}
},
{
label: "删除",
type: "default",
event: function(done) {
setTimeout(() => {
console.log("延时5秒 删除方法完成")
done();
}, 5000);
}
},
{
label: "取消",
type: "primary",
event: function() {
//2
return new Promise(resolve => {
console.log("取消方法完成")
setTimeout(resolve, 5000);
});
}
},
]
}
},
//
backgroundWhite: {
type: Boolean,
default: false
},
//
isSubmit: {
type: Boolean,
default: false
},
//
disable: {
type: Boolean,
default: false
},
position: {
type: String,
default: 'fixed'
}
},
created() {
// loading
this.initButtonStates();
},
data() {
return {
loading: false,
// loadingtoolbar
buttonStates: []
};
},
watch: {
// toolbar
toolbar: {
handler() {
this.initButtonStates();
},
deep: true
}
},
//
methods: {
// loading
initButtonStates() {
this.toolbar.map((item, index) => {
//this.buttonStates.push(false)//vue3
//
this.$set(this.buttonStates, index, false); //vue2
});
},
async handleClick(item, index) {
try {
this.$set(this.buttonStates, index, true);
this.$modal.loading("请等待...")
//1 item.event() Promise loding
//return new Promise(resolve => setTimeout(resolve, 5000));
//2 resolve/reject done
await new Promise((resolve, reject) => {
// resolve/reject
item.event(resolve, reject);
});
} catch (error) {
console.error('catch 按钮事件执行出错:', error);
} finally {
//
console.info('finally 按钮事件执行');
this.$set(this.buttonStates, index, false);
this.$modal.closeLoading()
}
}
}
};
</script>
<style scoped lang="scss">
.pageBottom {
left: 0;
bottom: 0;
z-index: 30;
display: flex;
justify-content: center;
align-items: center;
flex-direction: column;
width: 100%;
padding: 20rpx 0 20rpx;
.button {
display: flex;
justify-content: center;
align-items: center;
width: 686rpx;
height: 72rpx;
font-weight: 400;
font-size: 32rpx;
color: #ffffff;
border-radius: 16rpx;
//background: rgb(22, 93, 255);
}
.backgroundWhite {
background: #fff;
color: #165dff;
border: 2rpx solid rgb(22, 93, 255);
}
.buttons {
display: flex;
justify-content: center;
width: 100%;
position: fixed;
bottom: 0;
left: 0;
padding: 24rpx 0 60rpx;
background-color: #fff;
//background-color: #165DFF;
.buttonOne {
display: flex;
justify-content: center;
align-items: center;
height: 90rpx;
width: 664rpx;
box-sizing: border-box;
//background: rgb(22, 93, 255);
border-radius: 16rpx;
color: #FFFFFF;
font-weight: 400;
font-size: 32rpx;
}
.buttonLeft {
display: flex;
justify-content: center;
align-items: center;
height: 90rpx;
width: 332rpx;
box-sizing: border-box;
background: rgb(22, 93, 255);
border-radius: 16rpx;
color: #FFFFFF;
font-weight: 400;
font-size: 32rpx;
}
.buttonRight {
display: flex;
justify-content: center;
align-items: center;
height: 90rpx;
width: 332rpx;
border-radius: 16rpx;
background: rgb(22, 93, 255);
font-weight: 400;
font-size: 32rpx;
color: #FFFFFF;
margin-left: 22rpx;
}
}
.thirdbuttons {
display: flex;
justify-content: center;
width: 100%;
position: fixed;
bottom: 0;
left: 0;
padding: 10rpx 0 60rpx;
background-color: #fff;
.buttonLeft {
display: flex;
justify-content: center;
align-items: center;
height: 72rpx;
width: 232rpx;
box-sizing: border-box;
border: 2rpx solid rgb(22, 93, 255);
border-radius: 16rpx;
background: rgb(255, 255, 255);
color: #165DFF;
font-weight: 400;
font-size: 32rpx;
}
.buttonMid {
display: flex;
justify-content: center;
align-items: center;
height: 72rpx;
width: 232rpx;
box-sizing: border-box;
border: 2rpx solid rgb(22, 93, 255);
border-radius: 16rpx;
background: rgb(255, 255, 255);
color: #165DFF;
font-weight: 400;
font-size: 32rpx;
margin-left: 10rpx;
}
.buttonRight {
display: flex;
justify-content: center;
align-items: center;
height: 72rpx;
width: 232rpx;
border-radius: 16rpx;
background: rgb(22, 93, 255);
font-weight: 400;
font-size: 32rpx;
color: #FFFFFF;
margin-left: 10rpx;
}
}
}
.contentWhite {
content: '';
position: fixed;
left: 0;
bottom: 0;
width: 100%;
height: 240rpx;
background: linear-gradient(to bottom,
#f3ece400 0%,
#F2F3F5 100%);
pointer-events: none;
}
</style>

View File

@ -1,8 +1,10 @@
// 应用全局配置 // 应用全局配置
module.exports = { module.exports = {
//项目初始化时设置的IP的端口 一般为调试模式时的信息 //###### baseUrl访问后端的地址#######
// baseUrl: 'http://127.0.0.1:9292', //###### 发布版本也不要来改这里,可以启动后在连接配置界面改 #######
baseUrl: 'http://10.180.218.86:9292', //###### 【IP端口配置】界面为解决一次发布多处使用 #######
//###### 如发布一个APP可配置访问本地测试服务 127 或 现场实际 IP #######
baseUrl: 'http://127.0.0.1:9292',
//页面是否开启验证码:针对于登录页和注册页 //页面是否开启验证码:针对于登录页和注册页
captchaEnabled: false, captchaEnabled: false,
// 应用信息 // 应用信息

View File

@ -215,6 +215,18 @@
"style": { "style": {
"navigationBarTitleText": "空容器入库" "navigationBarTitleText": "空容器入库"
} }
},
//project
{
"path": "pages/work/project/smt/bunchPoleCall",
"style": {
"navigationBarTitleText": "串杆呼叫"
}
},{
"path": "pages/work/project/smt/bunchPolePutaway",
"style": {
"navigationBarTitleText": "空容器入库"
}
} }
], ],
"tabBar": { "tabBar": {

View File

@ -32,7 +32,7 @@
<swiper class="work-swiper" :class="dotStyle?'square-dot':'round-dot'" :indicator-dots="true" :circular="true" <swiper class="work-swiper" :class="dotStyle?'square-dot':'round-dot'" :indicator-dots="true" :circular="true"
:autoplay="true" interval="5000" duration="500"> :autoplay="true" interval="5000" duration="500">
<swiper-item v-for="(item,index) in swiperList" :key="index"> <swiper-item v-for="(item,index) in swiperList" :key="index">
<image :src="item.url" v-if="item.type=='image'" ></image> <image :src="item.url" v-if="item.type=='image'"></image>
<video :src="item.url" autoplay loop muted :show-play-btn="false" :controls="false" objectFit="cover" <video :src="item.url" autoplay loop muted :show-play-btn="false" :controls="false" objectFit="cover"
v-if="item.type=='video'"></video> v-if="item.type=='video'"></video>
</swiper-item> </swiper-item>
@ -41,11 +41,12 @@
<view class="bodytitle"> <view class="bodytitle">
业务操作 业务操作
</view> </view>
<!--以下页面路由来源与静态路由-->
<view class="bodybox"> <view class="bodybox">
<view v-for="(item,index) in wmsRouter" class="bodyboxitem" :key="index"> <view v-for="(item,index) in wmsRouter" class="bodyboxitem" :key="index">
<view class="grid-item-box" @click="navChange(item)"> <view class="grid-item-box" @click="navChange(item)">
<!-- <uni-icons :class='item.icon' size="30"></uni-icons> --> <!-- <uni-icons :class='item.icon' size="30"></uni-icons> -->
<image :src="item.icon" ></image> <image :src="item.icon"></image>
<text class="text">{{item.title}}</text> <text class="text">{{item.title}}</text>
</view> </view>
</view> </view>
@ -54,16 +55,18 @@
<view style="width: 140rpx;"></view> <view style="width: 140rpx;"></view>
</view> </view>
</view> </view>
<view class="grid-body" v-if="userRoutes.length>0"> <scroll-view scroll-x class="bg-white nav work-container" scroll-with-animation :scroll-left="scrollLeft">
<template v-for="oneMenuList in userRoutes"> <view class="cu-item" :class="index==TabCur?'text-green cur':''" v-for="(item,index) in userRoutes"
<view class="bodytitle"> :key="index" @tap="tabSelect" :data-id="index" :data-routeList="item">
{{oneMenuList.title}} {{item.title}}
</view> </view>
<view class="bodybox"> <view class="nav-grid-body">
<view v-for="(item,index) in oneMenuList.children" class="bodyboxitem" :key="index"> <!--以下页面路由来源与静态路由-->
<view class="nav-bodybox">
<view v-for="(item,index) in currentRouteItems.children" class="nav-bodyboxitem" :key="index">
<view class="grid-item-box" @click="navChange(item)"> <view class="grid-item-box" @click="navChange(item)">
<uni-icons :class='item.icon' size="30"></uni-icons> <!-- <uni-icons :class='item.icon' size="30"></uni-icons> -->
<image :src="item.icon"></image>
<text class="text">{{item.title}}</text> <text class="text">{{item.title}}</text>
</view> </view>
</view> </view>
@ -71,9 +74,8 @@
<view style="width: 140rpx;"></view> <view style="width: 140rpx;"></view>
<view style="width: 140rpx;"></view> <view style="width: 140rpx;"></view>
</view> </view>
</template>
</view>
</view> </view>
</scroll-view>
</view> </view>
</template> </template>
@ -122,7 +124,11 @@
towerStart: 0, towerStart: 0,
direction: '', direction: '',
dotStyle: true, dotStyle: true,
userRoutes: [] userRoutes: [],
TabCur: 0,
scrollLeft: 0,
//
currentRouteItems: [],
} }
}, },
computed: { computed: {
@ -131,11 +137,6 @@
}, },
windowHeight() { windowHeight() {
return uni.getSystemInfoSync().windowHeight - 50 return uni.getSystemInfoSync().windowHeight - 50
},
warehouseinfo() {
if (Array.isArray(this.warehouse) && this.warehouse.length > 0) {
return '【' + this.warehouse[0].warehouseCode + '】' + this.warehouse[0].warehouseName
}
} }
}, },
onLoad() { onLoad() {
@ -145,9 +146,21 @@
// //
console.log(store) console.log(store)
console.log(store.getters.userRoutes) console.log(store.getters.userRoutes)
//
this.userRoutes = store.getters.userRoutes; this.userRoutes = store.getters.userRoutes;
//
this.currentRouteItems = this.userRoutes[0];
}, },
methods: { methods: {
tabSelect(e) {
this.TabCur = e.currentTarget.dataset.id;
this.scrollLeft = (e.currentTarget.dataset.id - 1) * 60
console.log(e)
this.currentRouteItems = e.currentTarget.dataset.routelist;
console.log("this.currentRouteItems", e.currentTarget.dataset.routelist)
console.log("tabSelect", this.$store.state.user)
console.log("tabSelect", this.$store.state.user.avatar)
},
changeGrid(e) { changeGrid(e) {
this.$modal.showToast('模块建设中~') this.$modal.showToast('模块建设中~')
console.log(e) console.log(e)
@ -155,11 +168,11 @@
navChange(e) { navChange(e) {
console.log("navChange", e) console.log("navChange", e)
//todo //todo
var path = e.path; const path = e.path;
console.log(path) console.log(path)
//this.PageCur = e.currentTarget.dataset.cur this.$tab.navigateTo(path);
this.$tab.navigateTo(path)
}, },
// towerSwiper // towerSwiper
TowerSwiper(name) { TowerSwiper(name) {
let list = this[name]; let list = this[name];
@ -299,7 +312,7 @@
.work-container { .work-container {
background: linear-gradient(180.00deg, rgb(181, 202, 245) 0%, rgb(184, 204, 245) 40.449%, rgba(213, 227, 249, 0) 87.96%); background: linear-gradient(180.00deg, rgb(181, 202, 245) 0%, rgb(184, 204, 245) 40.449%, rgba(213, 227, 249, 0) 87.96%);
width: 100%; width: 100%;
height: 90vh; min-height: 90vh;
overflow: hidden; overflow: hidden;
} }
@ -319,7 +332,8 @@
align-items: center; align-items: center;
justify-content: center; justify-content: center;
padding: 15px 0; padding: 15px 0;
image{
image {
width: 100rpx; width: 100rpx;
height: 100rpx; height: 100rpx;
} }
@ -347,6 +361,7 @@
box-shadow: 0px 4rpx 11rpx 0px rgba(111, 150, 198, 0.09), 0px 4px 84px 0px rgba(130, 154, 190, 0.11); box-shadow: 0px 4rpx 11rpx 0px rgba(111, 150, 198, 0.09), 0px 4px 84px 0px rgba(130, 154, 190, 0.11);
background: rgb(255, 255, 255); background: rgb(255, 255, 255);
padding-bottom: 64rpx; padding-bottom: 64rpx;
.bodytitle { .bodytitle {
color: rgb(29, 33, 41); color: rgb(29, 33, 41);
font-family: 苹方-; font-family: 苹方-;
@ -365,12 +380,62 @@
justify-content: space-evenly; justify-content: space-evenly;
} }
.empty-bodybox {
min-height: 80vh;
display: flex;
align-items: center;
flex-wrap: wrap;
justify-content: space-evenly;
}
.bodyboxitem { .bodyboxitem {
width: 140rpx; width: 140rpx;
height: 195rpx; height: 195rpx;
} }
} }
.nav-grid-body {
width: 686rpx;
border-radius: 24rpx;
padding: 32rpx;
margin: 32rpx auto;
box-shadow: 0px 4rpx 11rpx 0px rgba(111, 150, 198, 0.09), 0px 4px 84px 0px rgba(130, 154, 190, 0.11);
background: rgb(255, 255, 255);
padding-bottom: 64rpx;
min-height: 80vh;
.nav-bodytitle {
color: rgb(29, 33, 41);
font-family: 苹方-;
font-size: 32rpx;
font-weight: 500;
line-height: 45rpx;
letter-spacing: 0px;
text-align: left;
margin-bottom: 10rpx;
}
.nav-bodybox {
display: flex;
align-items: center;
flex-wrap: wrap;
justify-content: space-evenly;
}
.empty-bodybox {
min-height: 80vh;
display: flex;
align-items: center;
flex-wrap: wrap;
justify-content: space-evenly;
}
.nav-bodyboxitem {
width: 140rpx;
height: 195rpx;
}
}
.swiper-item { .swiper-item {
/* #ifndef APP-NVUE */ /* #ifndef APP-NVUE */
display: flex; display: flex;

View File

@ -0,0 +1,423 @@
<!--RS2508 重庆电热 SMT定制串杆呼叫-->
<template>
<view class="container">
<cu-custom :isBack="true">
<block slot="content">容器呼叫</block>
</cu-custom>
<view class="example">
<uni-forms ref="form" :model="formData" labelWidth="80px">
<uni-forms-item label="库存类型" name="skuType">
<view class="fromItem">
<uni-data-select v-model="skuType" :localdata="skuTypeList" @change="changeSkuType"
placeholder="请选择库存类型">
</uni-data-select>
<image style="width: 28rpx;" src="/static/images/right.png" mode="widthFix"></image>
</view>
</uni-forms-item>
<uni-forms-item label="容器类型" name="containerType">
<view class="fromItem">
<uni-easyinput v-model="skuInput" placeholder="请选择容器类型" @input="onSkuInput"
@focus="showSkuDropdown = true" @blur="handleSkuBlur" />
<view class="sku-dropdown" v-if="showSkuDropdown && filteredSkuList.length > 0">
<view v-for="item in filteredSkuList" :key="item.value" class="dropdown-item"
@mousedown.prevent="selectSku(item)">
{{ item.text }}
</view>
</view>
<image style="width: 28rpx;" src="/static/images/right.png" mode="widthFix"></image>
</view>
</uni-forms-item>
<view class="textarea">
<textarea class="full-width-textarea" v-model="skuInfo">
</textarea>
</view>
<uni-forms-item label="送料位置" name="targetLoc">
<view class="fromItem">
<uni-easyinput v-model="formData.targetLoc" placeholder="请扫描货位编号" @blur="trimLocInput" />
<image style="width: 28rpx;" src="/static/images/right.png" mode="widthFix"></image>
</view>
</uni-forms-item>
</uni-forms>
<view class="switch-item">
<view class="uni-list-cell-db">{{callStatus}}</view>
<switch v-model="formData.targetLoc" :checked="formData.fullFlag" @change="switchChange" />
</view>
</view>
<bottomBtnGroup :toolbar="bottomBtnList"></bottomBtnGroup>
</view>
</template>
<script>
import {
getSkuDictionary,
getSkuTypes
} from "@/api/wms/sku.js"
import {
queryAreaByLocCode
} from "@/api/wms/palletDetailUnBind.js"
import {
emptyPoleCall
} from "@/api/project/smtOperateApi.js"
import {
createPalletBySku,
callAgvIn
} from "@/api/wms/bill.js"
import {
getDictionary
} from "@/api/wms/dictData.js"
import {
formatDate
} from 'tough-cookie';
import
bottomBtnGroup
from '@/components/bottomBtn/bottomBtnGroup.vue'
export default {
components: {
bottomBtnGroup
},
onLoad() {
//
this.getSkuTypes();
},
onReady() {
this.$refs.form.setRules(this.rules)
},
watch: {
async skuType(newVal) {
const param = {
categoryCode: this.skuType
};
const data = await getSkuDictionary(param);
//this.skuList =data;
this.originalSkuList = data; //
this.filteredSkuList = data.map(item => ({
value: item.skuCode,
text: `${item.skuCode} - ${item.skuName}`
}));
}
},
methods: {
/// []
async formSubmit(param) {
//
console.log("父组件的 提交方法formSubmit", param)
},
onSkuInput(value) {
this.skuInput = value;
this.filteredSkuList = this.originalSkuList
.filter(item => item.skuCode.includes(value))
.map(item => ({
value: item.skuCode,
text: `${item.skuCode} - ${item.skuName}`
}));
this.showSkuDropdown = true;
},
selectSku(item) {
this.formData.containerType = item.value;
this.skuInput = item.value; //
this.showSkuDropdown = false;
this.skuInfo = item.text
},
handleSkuBlur() {
setTimeout(() => {
this.showSkuDropdown = false;
}, 200);
},
//
async trimLocInput(event) {
this.formData.targetLoc = event.target.value.trim();
if (!this.formData.targetLoc) {
//
this.$modal.msgError("请扫描货位编号")
return;
}
},
switchChange(e) {
this.formData.fullFlag = e.detail.value;
if (this.formData.fullFlag) {
this.callStatus = "容器类型【满】"
} else {
this.callStatus = "容器类型【空】"
}
},
//
async getSkuTypes() {
this.skuTypeList = await getSkuTypes();
console.log("this.skuTypeList", this.skuTypeList)
this.formData.skuType = this.skuTypeList[0].categoryCode
},
changeSkuType() {
this.skuInput = '';
this.skuInfo = '';
},
// submit(ref) {
// this.$refs.form.validate().then(res => {
// updateUserProfile(this.user).then(response => {
// this.$modal.msgSuccess("")
// })
// })
// }
//
async containCallMethods(done) {
this.$refs.form.validate().then(res => {
console.log("校验通过后的数据", res)
const requestData = {
...this.formData,
}
console.log("requestData", requestData)
emptyPoleCall({
...this.formData,
}).then(response => {
console.log("response", response)
this.$modal.msgSuccess(response.msg)
}).finally(() => {
done();
});
})
},
textareaAInput(e) {
this.textareaAValue = e.detail.value
},
textareaBInput(e) {
this.textareaBValue = e.detail.value
}
},
data() {
return {
rules: {
containType: {
rules: [{
required: true,
errorMessage: '请选择物料'
}]
},
remark: {
rules: [{
required: true,
errorMessage: '请扫码托盘号'
}]
}
},
//form
bottomBtnList: [{
label: "新增",
type: "primary",
event: (done) => { // done // this
setTimeout(() => {
// //
console.log("延时5秒") //
this.containCallMethods(done);
}, 5000);
//this.containCallMethods(done);
},
},
{
label: "取消",
type: "primary",
event: function() {
//2
return new Promise(resolve => {
console.log("取消方法完成")
setTimeout(resolve, 5000);
});
}
},
],
//tabe
skuList: [],
skuType: '',
skuTypeList: [],
skuInput: '',
showSkuDropdown: false,
filteredSkuList: [],
originalSkuList: [],
skuInfo: "",
callStatus: "容器类型【满】",
//
formData: {
houseCode: "SMT", //
sourceLocArea: "", //
containerCode: "", //
containerType: "", //
fullFlag: true, //
targetLoc: ""
},
};
},
}
</script>
<style scoped lang="scss">
.container {
background: rgb(242, 243, 245);
height: 100vh;
}
.uni-forms-item {
border-bottom: 1px solid #E5E6EB;
margin-bottom: 0;
padding: 24rpx 0;
}
::v-deep .uni-forms-item__label {
color: #1D2129;
font-size: 28rpx;
font-weight: 400;
}
::v-deep .uni-select {
border: 0px;
}
::v-deep.uni-select__input-placeholder {
font-size: 28rpx;
font-weight: 400;
color: #86909C;
}
.textarea {
background-color: #F2F3F5;
width: 100%;
}
::v-deep.full-width-textarea {
width: 100% !important;
border: unset !important;
}
::v-deep .is-input-border {
border: unset;
}
::v-deep .uni-easyinput__placeholder-class {
font-size: 28rpx;
color: #86909C;
}
::v-deep .uni-input-input {
font-size: 28rpx;
}
::v-deep .uni-select__input-placeholder {
font-size: 28rpx;
color: #86909C;
}
::v-deep .uniui-bottom {
display: none;
}
::v-deep .uniui-top {
display: none;
}
.fromItem {
display: flex;
align-items: center;
}
.example {
padding: 0 24rpx;
background-color: #fff;
width: 702rpx;
border-radius: 24rpx;
margin: 24rpx auto;
}
// /-#86909C
.sku-dropdown {
position: absolute;
z-index: 1000;
background: white;
border: 1px solid #ddd;
border-radius: 4px;
max-height: 200px;
overflow-y: auto;
width: 100%;
box-shadow: 0 2px 12px rgba(0, 0, 0, 0.1);
}
.dropdown-item {
padding: 8px 12px;
font-size: 14px;
color: #333;
border-bottom: 1px solid #eee;
}
.dropdown-item:last-child {
border-bottom: none;
}
.dropdown-item:hover {
background-color: #f5f5f5;
}
.cu-form-group .title {
min-width: calc(4em + 15px);
}
page {
background-color: #ffffff;
}
.segmented-control {
margin-bottom: 15px;
}
.button-group {
margin-top: 15px;
display: flex;
justify-content: space-around;
}
.form-item {
display: flex;
align-items: center;
flex: 1;
}
.button {
display: flex;
align-items: center;
height: 35px;
line-height: 35px;
margin-left: 10px;
}
.switch-item {
display: flex;
align-items: center;
justify-content: space-between;
padding: 10px;
border-bottom: 1px solid #eee;
}
/* 输入框样式 */
.full-width-textarea {
width: calc(100vw - 260rpx);
/* 直接扣除边距 */
padding: 20rpx;
box-sizing: border-box;
border: 2rpx solid #e5e5e5;
border-radius: 8rpx;
min-height: 200rpx;
font-size: 28rpx;
line-height: 1.5;
}
</style>

View File

@ -0,0 +1,686 @@
<!--RS2508 重庆电热 SMT定制串杆上架-->
<template>
<view class="container">
<cu-custom :isBack="true">
<block slot="backText"></block>
<block slot="content">余料出库</block>
</cu-custom>
<view class="example">
<uni-forms ref="form" :model="formData" labelWidth="80px">
<uni-card>注意余料出库后请人工拉走系统会自动清除托盘信息</uni-card>
<uni-forms-item label="货位编号" name="locCode">
<view class="fromItem">
<uni-easyinput v-model="formData.locCode" placeholder="请扫描货位编号" @blur="trimLocInput" />
<image style="width: 28rpx;" src="/static/images/right.png" mode="widthFix"></image>
</view>
</uni-forms-item>
<uni-forms-item label="物料类型" name="skuType">
<view class="fromItem">
<uni-data-select v-model="skuType" :localdata="skuTypeList" @change="changeSkuType"
placeholder="请选择物料类型">
</uni-data-select>
<image style="width: 28rpx;" src="/static/images/right.png" mode="widthFix"></image>
</view>
</uni-forms-item>
<uni-forms-item label="物料" name="skuCode">
<view class="fromItem">
<uni-easyinput v-model="skuInput" placeholder="输入物料码" @input="onSkuInput"
@focus="showSkuDropdown = true" @blur="handleSkuBlur" />
<image style="width: 28rpx;" src="/static/images/right.png" mode="widthFix"></image>
</view>
</uni-forms-item>
<view class="sku-dropdown" v-if="showSkuDropdown && filteredSkuList.length > 0">
<view v-for="item in filteredSkuList" :key="item.value" class="dropdown-item"
@mousedown.prevent="selectSku(item)">
{{ item.text }}
</view>
</view>
<view class="textarea">
<textarea class="full-width-textarea" v-model="skuInfo">
</textarea>
</view>
<uni-forms-item label="库存数量" name="countQty">
<view class="fromItem">
<uni-easyinput v-model="countQty" disabled="true" />
<image style="width: 28rpx;" src="/static/images/right.png" mode="widthFix"></image>
</view>
</uni-forms-item>
</uni-forms>
<!-- <view class="button-group">
<button type="primary" :disabled="isButtonDisabled" style="width: 100px;" @click="callAgv"></button>
</view> -->
</view>
<bottomBtn :isSubmit="true" :isWhite="false" position="fixed" :disable="isButtonDisabled" :texts="['确认叫料']"
@onSubmit="callAgv"></bottomBtn>
<view class="cu-modal" :class="msgModalName=='Modal'?'show':''">
<view class="cu-dialog">
<view class="cu-bar bg-white justify-end">
<view class="content">{{msgTitleName}}</view>
<view class="action" @tap="hideMsgModal">
<text class="cuIcon-close text-red"></text>
</view>
</view>
<view class="padding-xl">
{{msg}}
</view>
</view>
</view>
</view>
</template>
<script>
import {
getStation,
setStation
} from '@/utils/station'
import {
getInventoryList,
getSkuTypes
} from "@/api/wms/sku.js"
import {
createPalletBySku,
callAgvIn,
manualCall,
surplusOut
} from "@/api/wms/bill.js"
import {
getDictionary
} from "@/api/wms/dictData.js"
import {
formatDate
} from 'tough-cookie';
import {
bottomBtn
} from '@/components/bottomBtn/bottomBtn.vue'
export default {
data() {
return {
skuInput: '',
showSkuDropdown: false,
filteredSkuList: [],
originalSkuList: [],
whCode: this.$store.state.user.warehouse[0]?.warehouseCode,
userCode: this.$store.state.user.name,
isButtonDisabled: false,
autoCall: true,
skuInfo: "",
countQty: "",
callStatus: "已开启自动呼叫空容器",
//
formData: {
palletCode: "",
skuCode: "",
locCode: "",
skuQty: ""
},
stations: [],
rules: {
skuCode: {
rules: [{
required: true,
errorMessage: '请选择物料'
}]
},
palletCode: {
rules: [{
required: true,
errorMessage: '请扫码托盘号'
}]
},
locCode: {
rules: [{
required: true,
errorMessage: '请扫码货位号'
}]
},
skuQty: {
rules: [{
required: true,
errorMessage: '请输入物料数量'
}]
}
},
//
billInfo: {
totalPlanQty: 0,
totalSurplusQty: 0,
wmsInBillSkuInfos: []
},
//table
searchVal: '',
tableData: [],
//
pageSize: 10,
//
pageCurrent: 1,
//
total: 0,
loading: false,
//tabe
selectedIndexs: [],
//
tableClumns: [{
dataIndex: "itemCode",
key: "itemCode",
title: "明细单号"
},
{
dataIndex: "batch",
key: "batch",
title: "批次"
},
{
dataIndex: "skuCode",
key: "skuCode",
title: "物料编号"
},
{
dataIndex: "skuName",
key: "skuName",
title: "物料名称"
},
{
dataIndex: "planQty",
key: "planQty",
title: "计划数量"
},
{
dataIndex: "lockQty",
key: "lockQty",
title: "锁定数量"
},
{
dataIndex: "qty",
key: "qty",
title: "组盘数量"
},
],
warehouseList: [],
skuList: [],
skuType: '',
skuTypeList: [],
skuArray: [],
skushow: false,
invoiceCode: null,
palletCode: null,
houseCode: null,
skuCode: null,
locCode: null,
skuQty: null,
totalPlanQty: null,
totalSurplusQty: null,
msgModalName: null,
msgTitleName: null,
msg: null
};
},
components: {
bottomBtn
},
onLoad() {
//
this.getSkuTypes()
//
// this.getWarehouses()
//this.getInvoicesByBusinessType()
const saved = getStation();
this.stations = saved ? JSON.parse(saved) : [];
console.log(this.stations);
if (this.stations.length === 0) {
this.$modal.msgError("请先在空工装回库页面配置工位!")
}
var stas = [];
for (var i = 0; i < this.stations.length; i++) {
stas[i] = {
value: this.stations[i],
text: this.stations[i]
}
}
this.stations = stas;
},
onReady() {
this.$refs.form.setRules(this.rules)
},
watch: {
async skuType(newVal) {
const param = {
categoryCode: this.skuType,
station: ""
};
const data = await getInventoryList(param);
//this.skuList =data;
this.originalSkuList = data; //
this.filteredSkuList = data.map(item => ({
value: item.skuCode,
text: `${item.skuCode} - ${item.skuName}`,
qtyDesc: `托数:${item.ext1} 总数量:${item.ext2}`
}));
}
},
methods: {
onSkuInput(value) {
this.skuInput = value;
this.filteredSkuList = this.originalSkuList
.filter(item => item.skuCode.includes(value))
.map(item => ({
value: item.skuCode,
text: `${item.skuCode} - ${item.skuName}`,
qtyDesc: `托数:${item.ext1} 总数量:${item.ext2}`
}));
this.showSkuDropdown = true;
},
selectSku(item) {
this.formData.skuCode = item.value;
this.skuInput = item.value; //
this.showSkuDropdown = false;
this.skuInfo = item.text;
this.countQty = item.qtyDesc;
},
handleSkuBlur() {
setTimeout(() => {
this.showSkuDropdown = false;
}, 200);
},
//
trimPalletInput(event) {
this.formData.palletCode = event.target.value.trim();
},
//
trimLocInput(event) {
this.formData.locCode = event.target.value.trim();
},
/// []
async fetch(param) {
var response = await queryInBillSkuInfo(param);
return {
total: response.data.total,
data: response.data.record,
};
},
switchChange(e) {
this.autoCall = e.detail.value;
if (this.autoCall) {
this.callStatus = "已开启自动呼叫空容器"
} else {
this.callStatus = "已停止自动呼叫空容器"
}
},
//
async getSkuTypes() {
this.skuTypeList = await getSkuTypes();
console.log("this.skutypeList", this.skuTypeList)
},
changeSkuType() {
this.skuInput = '';
this.skuInfo = '';
this.countQty = '';
},
//
// async getSkus() {
// console.log("this.skuType",this.skuType)
// if(this.skuType){
// this.skuList = await getSkuDictionary(this.skuType);
// }
// },
//
async getWarehouses() {
this.warehouseList = await getDictionary('warehouseList');
console.log("this.warehouseList", this.warehouseList)
},
//
selectedItems() {
return this.selectedIndexs.map(i => this.tableData[i])
},
//
selectionChange(e) {
console.log(e.detail.index)
this.selectedIndexs = e.detail.index
//
},
//
delTable() {
console.log(this.selectedItems())
},
//
change(e) {
this.$refs.table.clearSelection()
this.selectedIndexs.length = 0
this.getData(e.current)
},
//
search() {
this.getData(1, this.searchVal)
},
//
getData(pageCurrent, value = '') {
this.loading = true
this.pageCurrent = pageCurrent
this.request({
pageSize: this.pageSize,
pageCurrent: pageCurrent,
value: value,
success: res => {
// console.log('data', res);
this.tableData = res.data
this.total = res.total
this.loading = false
}
})
},
//
getSelectDetail() {
if (this.selectedIndexs.length == 0) {
//
this.$modal.msgError("请先选择需要组盘的单据明细")
return;
}
//
let arr = [];
let len = this.billInfo.wmsInBillSkuInfos.length;
for (let i = 0; i < len; i++) {
if (this.selectedIndexs.indexOf(i) >= 0) {
arr.push(this.billInfo.wmsInBillSkuInfos[i]);
} else {
// console.log(this.selectArr.indexOf(i))
//this.selectArr.indexOf(i);
}
}
console.log("选中的单据明细数据为", arr.length)
return arr;
},
// request
request(options) {
const {
pageSize,
pageCurrent,
success,
value
} = options
let total = tableData.length
let data = tableData.filter((item, index) => {
const idx = index - (pageCurrent - 1) * pageSize
return idx < pageSize && idx >= 0
})
if (value) {
data = []
tableData.forEach(item => {
if (item.name.indexOf(value) !== -1) {
data.push(item)
}
})
total = data.length
}
setTimeout(() => {
typeof success === 'function' &&
success({
data: data,
total: total
})
}, 500)
},
// submit(ref) {
// this.$refs.form.validate().then(res => {
// updateUserProfile(this.user).then(response => {
// this.$modal.msgSuccess("")
// })
// })
// }
//
submitPallet: function(ref) {
this.isButtonDisabled = true;
this.$modal.loading("请等待...")
this.$refs.form.validate().then(res => {
let requestData = {
...this.formData,
userCode: this.userCode,
warehouseCode: this.whCode
}
createPalletBySku(requestData).then(response => {
console.log("response", response)
this.$modal.msgSuccess("组盘成功")
}).finally(() => {
this.isButtonDisabled = false; //
this.$modal.closeLoading()
});
}).catch(() => {
this.isButtonDisabled = false; //
this.$modal.closeLoading()
})
},
//AGV
callAgv: function() {
this.isButtonDisabled = true;
this.$modal.loading("请等待...")
if (!this.formData.locCode) {
this.$modal.closeLoading()
}
if (!this.formData.palletCode) {
this.$modal.closeLoading()
}
var data = {
locCode: this.formData.locCode,
skuCode: this.formData.skuCode,
userCode: this.userCode,
warehouseCode: this.whCode
}
surplusOut(data).then(response => {
console.log("response", response)
this.$modal.msgSuccess("呼叫成功")
}).finally(() => {
this.isButtonDisabled = false; //
this.$modal.closeLoading()
});
},
hideMsgModal(e) {
//
this.msgModalName = null;
},
textareaAInput(e) {
this.textareaAValue = e.detail.value
},
textareaBInput(e) {
this.textareaBValue = e.detail.value
},
//
queryRkOrder: async function(e) {
console.log('进入查询方法', e);
console.log('this.formData', this.formData);
console.log('this.formData.invoiceCode', this.formData.invoiceCode);
var invoiceCode = this.formData.invoiceCode;
if (invoiceCode == null) {
this.$modal.msgError("单据号不能为空")
return;
}
if (invoiceCode.length < 1) {
this.$modal.msgError("单据号不能为空")
return;
}
//
var billInfo = await queryInBillSkuInfo({
'invoiceCode': invoiceCode
});
console.log("billInfo", billInfo)
if (billInfo) {
this.billInfo = billInfo.data;
};
}
}
}
</script>
<style lang="scss">
.sku-dropdown {
position: absolute;
z-index: 1000;
background: white;
border: 1px solid #ddd;
border-radius: 4px;
max-height: 200px;
overflow-y: auto;
width: 100%;
box-shadow: 0 2px 12px rgba(0, 0, 0, 0.1);
}
.dropdown-item {
padding: 8px 12px;
font-size: 14px;
color: #333;
border-bottom: 1px solid #eee;
}
.dropdown-item:last-child {
border-bottom: none;
}
.dropdown-item:hover {
background-color: #f5f5f5;
}
.cu-form-group .title {
min-width: calc(4em + 15px);
}
page {
background-color: #ffffff;
}
.container {
background: rgb(242, 243, 245);
height: 100vh;
}
.uni-forms-item {
border-bottom: 1px solid #E5E6EB;
margin-bottom: 0;
padding: 24rpx 0;
}
::v-deep .uni-forms-item__label {
color: #1D2129;
font-size: 28rpx;
font-weight: 400;
}
::v-deep .uni-select {
border: 0px;
}
::v-deep.uni-select__input-placeholder {
font-size: 28rpx;
font-weight: 400;
color: #86909C;
}
.textarea {
background-color: #F2F3F5;
width: 100%;
}
::v-deep.full-width-textarea {
width: 100% !important;
border: unset !important;
}
::v-deep .is-input-border {
border: unset;
}
::v-deep .uni-easyinput__placeholder-class {
font-size: 28rpx;
color: #86909C;
}
::v-deep .uni-input-input {
font-size: 28rpx;
}
::v-deep .uni-select__input-placeholder {
font-size: 28rpx;
color: #86909C;
}
::v-deep .uniui-bottom {
display: none;
}
::v-deep .uniui-top {
display: none;
}
.fromItem {
display: flex;
align-items: center;
}
.example {
padding: 12rpx 24rpx 0;
background-color: #fff;
width: 702rpx;
border-radius: 24rpx;
margin: 24rpx auto;
}
.segmented-control {
margin-bottom: 15px;
}
.button-group {
margin-top: 15px;
display: flex;
justify-content: space-around;
}
.form-item {
display: flex;
align-items: center;
flex: 1;
}
.button {
display: flex;
align-items: center;
height: 35px;
line-height: 35px;
margin-left: 10px;
}
.switch-item {
display: flex;
align-items: center;
justify-content: space-between;
padding: 10px;
border-bottom: 1px solid #eee;
}
/* 输入框样式 */
.full-width-textarea {
width: calc(100vw - 260rpx);
/* 直接扣除边距 */
padding: 20rpx;
box-sizing: border-box;
border: 2rpx solid #e5e5e5;
border-radius: 8rpx;
min-height: 200rpx;
font-size: 28rpx;
line-height: 1.5;
}
</style>

View File

Before

Width:  |  Height:  |  Size: 2.0 KiB

After

Width:  |  Height:  |  Size: 2.0 KiB

View File

Before

Width:  |  Height:  |  Size: 2.2 KiB

After

Width:  |  Height:  |  Size: 2.2 KiB

View File

Before

Width:  |  Height:  |  Size: 2.2 KiB

After

Width:  |  Height:  |  Size: 2.2 KiB

View File

Before

Width:  |  Height:  |  Size: 3.1 KiB

After

Width:  |  Height:  |  Size: 3.1 KiB

View File

Before

Width:  |  Height:  |  Size: 2.0 KiB

After

Width:  |  Height:  |  Size: 2.0 KiB

View File

Before

Width:  |  Height:  |  Size: 2.0 KiB

After

Width:  |  Height:  |  Size: 2.0 KiB

View File

Before

Width:  |  Height:  |  Size: 2.2 KiB

After

Width:  |  Height:  |  Size: 2.2 KiB

View File

Before

Width:  |  Height:  |  Size: 2.2 KiB

After

Width:  |  Height:  |  Size: 2.2 KiB

View File

Before

Width:  |  Height:  |  Size: 2.1 KiB

After

Width:  |  Height:  |  Size: 2.1 KiB

View File

Before

Width:  |  Height:  |  Size: 2.1 KiB

After

Width:  |  Height:  |  Size: 2.1 KiB

View File

@ -1,88 +1,87 @@
{ {
"code": 200, "code": 200,
"data": [ "data": [
{ {
"path": "/pages/work/wms/skuCreatePallet", "path": "/pages/work/wms/skuCreatePallet",
"name": "skuCreatePallet", "name": "skuCreatePallet",
"title": "组盘入库", "title": "组盘入库",
"color": "red", "color": "red",
"icon": "/static/images/work/组合 1747.png" "icon": "/static/images/work/组合1747.png"
}, },
{ {
"path": "/pages/work/wms/skuCreatePalletByCodeH5", "path": "/pages/work/wms/skuCreatePalletByCodeH5",
"name": "skuCreatePalletByCodeH5", "name": "skuCreatePalletByCodeH5",
"title": "一码通入库H5", "title": "一码通入库H5",
"color": "red", "color": "red",
"icon": "/static/images/work/组合 1749.png" "icon": "/static/images/work/组合1749.png"
}, },
{ {
"path": "/pages/work/wms/manualCall", "path": "/pages/work/wms/manualCall",
"name": "manualCall", "name": "manualCall",
"title": "人工叫料", "title": "人工叫料",
"color": "red", "color": "red",
"icon": "/static/images/work/组合 1753.png" "icon": "/static/images/work/组合1753.png"
}, },
{ {
"path": "/pages/work/wms/emptyPalletOut", "path": "/pages/work/wms/emptyPalletOut",
"name": "emptyPalletOut", "name": "emptyPalletOut",
"title": "空容器出库", "title": "空容器出库",
"color": "red", "color": "red",
"icon": "/static/images/work/组合 1756.png" "icon": "/static/images/work/组合1756.png"
}, },
{ {
"path": "/pages/work/wms/returnEmptyRack", "path": "/pages/work/wms/returnEmptyRack",
"name": "returnEmptyRack", "name": "returnEmptyRack",
"title": "空工装回库", "title": "空工装回库",
"color": "red", "color": "red",
"icon": "/static/images/work/组合 1758.png" "icon": "/static/images/work/组合1758.png"
}, },
{ {
"path": "/pages/work/wms/surplusReturn", "path": "/pages/work/wms/surplusReturn",
"name": "surplusReturn", "name": "surplusReturn",
"title": "余料回库", "title": "余料回库",
"color": "red", "color": "red",
"icon": "/static/images/work/组合 1759.png" "icon": "/static/images/work/组合1759.png"
}, },
{ {
"path": "/pages/work/wms/clearEmptyLoc", "path": "/pages/work/wms/clearEmptyLoc",
"name": "clearEmptyLoc", "name": "clearEmptyLoc",
"title": "工装货位腾空", "title": "工装货位腾空",
"icon": "/static/images/work/组合 1763.png" "icon": "/static/images/work/组合1763.png"
}, },
{ {
"path": "/pages/work/wms/palletInfoQuery", "path": "/pages/work/wms/palletInfoQuery",
"name": "palletInfoQuery", "name": "palletInfoQuery",
"title": "托盘信息查询", "title": "托盘信息查询",
"icon": "/static/images/work/组合 1764.png" "icon": "/static/images/work/组合1764.png"
}, },
{ {
"path": "/pages/work/wms/surplusOut", "path": "/pages/work/wms/surplusOut",
"name": "surplusOut", "name": "surplusOut",
"title": "余料出库", "title": "余料出库",
"color": "red", "color": "red",
"icon": "/static/images/work/组合 1762.png" "icon": "/static/images/work/组合1762.png"
}, },
{ {
"path": "/pages/work/wms/skuCreatePalletByCode", "path": "/pages/work/wms/skuCreatePalletByCode",
"name": "skuCreatePalletByCode", "name": "skuCreatePalletByCode",
"title": "一码通入库APP", "title": "一码通入库APP",
"color": "red", "color": "red",
"icon": "/static/images/work/组合 1752.png" "icon": "/static/images/work/组合1752.png"
}, },
{ {
"path": "/pages/work/wms/mesStockChange", "path": "/pages/work/wms/mesStockChange",
"name": "mesStockChange", "name": "mesStockChange",
"title": "Mes工位库库存变更", "title": "Mes工位库库存变更",
"color": "red", "color": "red",
"icon": "/static/images/work/组合 1763.png" "icon": "/static/images/work/组合1763.png"
}, },
{ {
"path": "/pages/work/wms/emptyPalletIn", "path": "/pages/work/wms/emptyPalletIn",
"name": "emptyPalletIn", "name": "emptyPalletIn",
"title": "空容器入库", "title": "空容器入库",
"color": "red", "color": "red",
"icon": "/static/images/work/组合 1758.png" "icon": "/static/images/work/组合1758.png"
} }
], ],
"msg": "成功" "msg": "成功"