PDA绑定查询功能 80%

This commit is contained in:
hehaibing-1996
2025-01-21 19:08:00 +08:00
parent 9b3bbcd08b
commit 2085c6e216
13 changed files with 1124 additions and 40 deletions

View File

@ -0,0 +1,96 @@
<template>
<view class="card">
<view class="card-header">
<text>{{item.matCode}}&nbsp;&nbsp;{{currentIndex + 1}}/{{cardData.length}}</text>
</view>
<view class="card-content">
<view class="content-item">
<text>名称:</text>
<text>{{item.matName}}</text>
</view>
<view class="content-item">
<text>规格:</text>
<text>{{item.matSpec}}</text>
</view>
<view class="content-item" style="font-weight: 600;">
<text>数量:</text>
<text>{{item.matQty}}</text>
</view>
<view class="content-combined">
<view class="content-item" style="font-weight: 600;color: firebrick;">
<text>库位:</text>
<text>{{item.locationCode}}</text>
</view>
<view class="content-item" style="font-weight: 600;color: firebrick;">
<text>货架编码:</text>
<text>{{item.shelfCode}}</text>
</view>
</view>
<view class="content-combined">
<view class="content-item" style="font-weight: 600;color: violet;">
<text>人员:</text>
<text>{{item.modifyUser}}</text>
</view>
<view class="content-time">
<text>绑定时间:</text>
<text>{{item.modifyTime}}</text>
</view>
</view>
</view>
</view>
</template>
<script setup>
import {
ref
} from 'vue';
const props = defineProps({
item: {
type: Object,
required: true
},
currentIndex: {
type: Number,
required: true
},
cardData: {
type: Array,
required: true
}
});
</script>
<style scoped>
.card {
border: 3rpx solid black;
border-radius: 15rpx;
margin: 8rpx;
padding: 8rpx;
background-color: beige;
}
.card-header {
font-size: 40rpx;
font-weight: bold;
margin-bottom: 2rpx;
text-align: center;
}
.content-item {
margin-bottom: 5rpx;
font-size: 30rpx;
}
.content-time {
margin-bottom: 0rpx;
font-size: 18rpx;
display: flex;
align-items: center;
}
.content-combined {
display: flex;
justify-content: space-between;
margin-bottom: 5rpx;
}
</style>

View File

@ -10,7 +10,7 @@ export function getConfig(key, defaultValue) {
}
export function getServerIPAndPort() {
var serverIP = getConfig('serverIP', '192.168.139.36');
var serverIP = getConfig('serverIP', '192.168.119.36');
var serverPort = getConfig('serverPort', '8888');
return serverIP + ':' + serverPort;
}

View File

@ -33,6 +33,13 @@
{
"navigationBarTitleText" : ""
}
},
{
"path" : "pages/queryBindList/queryBindList",
"style" :
{
"navigationBarTitleText" : "智慧物流系统-绑定查询"
}
}
],
"globalStyle": {

View File

@ -20,10 +20,12 @@
</navigator>
</view>
<view class="uni-flex uni-column" style="flex: 5;">
<view class="uni-flex uni-row" style="-webkit-justify-content: center;justify-content: center;">
<image class="function-image" src="/static/bindQuery.png" />
</view>
<view class="function-text">绑定查询</view>
<navigator url="../queryBindList/queryBindList" hover-class="navigator-hover">
<view class="uni-flex uni-row" style="-webkit-justify-content: center;justify-content: center;">
<image class="function-image" src="/static/bindQuery.png" />
</view>
<view class="function-text">绑定查询</view>
</navigator>
</view>
<view class="uni-flex uni-column" style="flex: 5;">
<view class="uni-flex uni-row" style="-webkit-justify-content: center;justify-content: center;">

View File

@ -0,0 +1,466 @@
<template>
<view class="bg-image">
<bindSelectMat ref="proup" @close="handlePopupClose" @selected="bindSelectedMat" />
<view class="diy-flex-row">
<view style="flex: 3">
<!-- 占位 -->
</view>
<view style="flex: 80;margin: 5rpx;">
<view class="diy-flex-row">
<view class="rightImageContainer" style="flex: 12;padding-top: 20rpx;">
<image style="width: 60rpx;height: 60rpx" src="/static/scan.png" />
</view>
<view class="uni-input-wrapper" style="flex: 60;">
<input id="inputMatCode" class="uni-input" style="font-size: 50rpx; padding: 10rpx;"
:placeholder="placeholderText" v-model="matCodeCondition" @blur="queryMatList"></input>
</view>
<view style="flex: 3;">
</view>
<view style="flex: 30;">
<button @click="queryMatList">查询</button>
</view>
</view>
</view>
<view style="flex: 2">
<!-- 占位 -->
</view>
</view>
<view class="diy-flex-column" style="margin-top: 5rpx;">
<view class="diy-flex-inforow">
<view style="width: 10rpx;"></view>
<view style="width: 275rpx;">记录数:[{{recordCount}}]</view>
<view style="width: 10rpx;"></view>
<view style="width: 455rpx;">货架码:{{shelfCode}}</view>
</view>
</view>
<view class="diy-flex-column" style="margin-top: 5rpx;">
<scroll-view class="scroll-view" scroll-y="true">
<view v-for="(item, index) in cardData" :key="index">
<Card :item="item" :currentIndex="index" :cardData="cardData" />
</view>
</scroll-view>
</view>
</view>
</template>
<script>
import bindSelectMat from '@/pages/bindSelectMat/bindSelectMat.vue';
import {
recive
} from '../../src/libs/Broadcast.js';
import {
unregisterReceiver
} from '../../src/libs/Broadcast.js';
import {
getConfig
} from '@/config.js';
import {
saveConfig
} from '@/config.js';
import {
getServerIPAndPort
} from '@/config.js';
import Card from '@/components/Card.vue';
export default {
components: {
bindSelectMat,
Card
},
data() {
return {
isNeedScanLocationCode: true,
isNeedCallShelfCode: true,
matBaseInfoId: null,
matCode: '',
locationId: null,
locationCode: '',
matCode: '',
matName: '',
matSpec: '',
matQty: 100, //默认数量值
userName: '', //当前登录的用户名
recordCount: 0,
shelfId: null,
shelfCode: '',
placeholderText: '请先扫描货架码',
matCodeCondition: '', //物料编码搜索条件
cardData: null,
}
},
onShow: function() {
this.userName = getConfig('userName', 'admin');
const self = this; // 保存this的引用
recive(function(res) {
console.log("Success:" + res.data);
self.analysisScanCode(res.data);
}, function(err) {
console.log("Error:", JSON.stringify(err)); // 正确打印错误信息
});
},
methods: {
analysisScanCode: function(encodedString) {
// 去除末尾的逗号和"..."(如果有的话)
encodedString = encodedString.replace(/,\s*\.\.\.$/, '');
// 分割字符串并转换为字节数组
let byteStrings = encodedString.split(',');
let byteArray = [];
for (let byteString of byteStrings) {
byteArray.push(parseInt(byteString, 10)); // 将字符串转换为十进制整数
}
// 将字节数组转换为UTF-8字符串
// 注意这里使用了一个简单的循环来构建字符串因为String.fromCharCode.apply可能在大数据上性能不佳
let originalString = '';
for (let i = 0; i < byteArray.length; i++) {
// 对于每个字节使用fromCharCode转换为对应的字符
// 注意这里假设你的字节数组已经是正确的UTF-8编码并且不需要额外的处理来组合多字节字符
originalString += String.fromCharCode(byteArray[i]);
}
this.shelfCode = originalString;
//调用接口获取当前工位信息 当前工位是否有货架
var serverIPAndPort = getServerIPAndPort();
// uni.request({
// url: 'http://' + serverIPAndPort + '/pdaMatBind/getShelfInfoByLocationCode', // 请求的接口地址
// method: 'POST', // 设置请求方式为 POST
// data: {
// "locationCode": this.locationCode,
// "userName": this.userName,
// "deviceType": "PDA"
// },
// header: {
// 'Content-Type': 'application/json', // 如果需要以JSON格式发送数据
// },
// success: (res) => {
// // 请求成功的回调函数
// if (res.statusCode === 200) {
// //接口返回数据为200 表示获取成功!
// if (res.data.code == 200) {
// this.locationId = res.data.data.locationId;
// this.shelfId = res.data.data.shelfId;
// this.shelfCode = res.data.data.shelfCode;
// if (this.shelfId == null) {
// this.shelfCode = '(工位无货架,请呼叫!)';
// this.isNeedScanLocationCode = false;
// this.isNeedCallShelfCode = true;
// this.placeholderText = '请呼叫货架';
// } else {
// this.isNeedScanLocationCode = false;
// this.isNeedCallShelfCode = false;
// this.placeholderText = '输入编码或名称';
// }
// uni.showToast({
// title: '获取成功!',
// icon: 'none',
// duration: 1500
// });
// } else {
// uni.showToast({
// title: '获取失败:' + res.data.message,
// icon: 'none',
// duration: 3500
// });
// this.clear();
// }
// } else {
// uni.showToast({
// title: '服务器返回错误状态码' + res.statusCode,
// icon: 'none',
// duration: 3000
// });
// this.clear();
// }
// },
// fail: (err) => {
// // 请求失败的回调函数
// uni.showToast({
// title: '请求失败' + err,
// icon: 'none',
// duration: 3000
// });
// this.clear();
// },
// complete: (event) => {
// // 请求完成的回调函数(无论成功或失败都会调用)
// console.log('请求完成', event);
// }
// });
uni.request({
url: 'http://' + serverIPAndPort +
'/matDetailCurrenInfo/getMatDetailCurrentInfos', // 请求的接口地址
method: 'POST', // 设置请求方式为 POST
data: {
"shelfCode": this.shelfCode,
"matCode": '',
"userName": this.userName,
"deviceType": "PDA",
"pageNumber": 1,
"pageSize": 100
},
header: {
'Content-Type': 'application/json', // 如果需要以JSON格式发送数据
},
success: (res) => {
// 请求成功的回调函数
if (res.statusCode === 200) {
//接口返回数据为200 表示获取成功!
if (res.data.code == 200) {
//未查询到信息
if (res.data.data == null || res.data.data.count == 0) {
uni.showToast({
title: '该货架不存在绑定的物料信息!',
icon: 'none',
duration: 1500
});
return;
}
//有物料信息
this.cardData = res.data.data.lists;
this.recordCount = res.data.data.count;
uni.showToast({
title: '获取成功!',
icon: 'none',
duration: 100
});
} else {
uni.showToast({
title: '获取失败:' + res.data.message,
icon: 'none',
duration: 3500
});
this.clear();
}
} else {
uni.showToast({
title: '服务器返回错误状态码' + res.statusCode,
icon: 'none',
duration: 3000
});
this.clear();
}
},
fail: (err) => {
// 请求失败的回调函数
uni.showToast({
title: '请求失败' + err,
icon: 'none',
duration: 3000
});
this.clear();
},
complete: (event) => {
// 请求完成的回调函数(无论成功或失败都会调用)
console.log('请求完成', event);
}
});
},
bindSelectedMat: function(item) {
console.log('用户选择了项目:', item);
this.matCode = item.matCode;
this.matName = item.matName;
this.matSpec = item.matSpec;
this.matBaseInfoId = item.id;
},
queryMatList: function() {
if (this.shelfCode == null || this.shelfCode == '') {
uni.showToast({
title: '请先扫描货架码!',
icon: 'none',
duration: 1000
});
return;
}
var serverIPAndPort = getServerIPAndPort();
uni.request({
url: 'http://' + serverIPAndPort +
'/matDetailCurrenInfo/getMatDetailCurrentInfos', // 请求的接口地址
method: 'POST', // 设置请求方式为 POST
data: {
"shelfCode": this.shelfCode,
"matCode": this.matCodeCondition,
"userName": this.userName,
"deviceType": "PDA",
"pageNumber": 1,
"pageSize": 100
},
header: {
'Content-Type': 'application/json', // 如果需要以JSON格式发送数据
},
success: (res) => {
// 请求成功的回调函数
if (res.statusCode === 200) {
//接口返回数据为200 表示获取成功!
if (res.data.code == 200) {
//未查询到信息
if (res.data.data == null || res.data.data.count == 0) {
uni.showToast({
title: '该货架不存在绑定的物料信息!',
icon: 'none',
duration: 1500
});
return;
}
//有物料信息
this.cardData = res.data.data.lists;
this.recordCount = res.data.data.count;
uni.showToast({
title: '获取成功!',
icon: 'none',
duration: 100
});
} else {
uni.showToast({
title: '获取失败:' + res.data.message,
icon: 'none',
duration: 3500
});
this.clear();
}
} else {
uni.showToast({
title: '服务器返回错误状态码' + res.statusCode,
icon: 'none',
duration: 3000
});
this.clear();
}
},
fail: (err) => {
// 请求失败的回调函数
uni.showToast({
title: '请求失败' + err,
icon: 'none',
duration: 3000
});
this.clear();
},
complete: (event) => {
// 请求完成的回调函数(无论成功或失败都会调用)
console.log('请求完成', event);
}
});
},
//清空当前界面所有内容
clear: function() {
this.locationId = null;
this.locationCode = '';
this.shelfId = null;
this.shelfCode = '';
this.isNeedCallShelfCode = true;
this.isNeedScanLocationCode = true;
this.placeholderText = '请先扫描货架码';
},
clearMatInfo: function() {
this.matCode = '';
this.matName = '';
this.matSpec = '';
},
handlePopupClose() {
// 弹出层关闭后的处理逻辑
console.log('弹出层已关闭');
},
}
}
</script>
<style>
.uni-input-wrapper {
/* #ifndef APP-NVUE */
display: flex;
/* #endif */
flex-direction: row;
flex-wrap: nowrap;
background-color: #FFFFFF;
}
.mini-btn {
margin-right: 10rpx;
}
.bg-image {
background-image: url('/static/background.png');
/* 背景图片路径 */
background-size: cover;
/* 背景图片覆盖整个元素 */
background-position: center;
/* 背景图片居中 */
height: 100%;
/* 视图高度设置为100% */
width: 100%;
/* 视图宽度设置为100% */
position: fixed;
/* 视图定位为固定 */
top: 0;
left: 0;
/* z-index: -1; */
}
.diy-flex-row {
display: flex;
flex-direction: row;
margin-top: 15rpx;
margin-bottom: 15rpx;
font-size: 50rpx;
}
.diy-flex-column {
display: flex;
flex-direction: column;
}
.diy-flex-inforow {
display: flex;
flex-direction: row;
font-size: 40rpx;
font-weight: 500;
margin-top: 8rpx;
margin-bottom: 8rpx;
}
.scroll-view {
height: 75vh;
}
</style>

View File

@ -1,8 +1,8 @@
{
"hash": "8bc42da3",
"configHash": "d3426109",
"hash": "b0fe367b",
"configHash": "e12fdbcd",
"lockfileHash": "e3b0c442",
"browserHash": "9884c163",
"browserHash": "aae2cf7f",
"optimized": {},
"chunks": {}
}

View File

@ -1,8 +1,8 @@
;(function(){
let u=void 0,isReady=false,onReadyCallbacks=[],isServiceReady=false,onServiceReadyCallbacks=[];
const __uniConfig = {"pages":[],"globalStyle":{"backgroundColor":"#F8F8F8","navigationBar":{"backgroundColor":"#F8F8F8","titleText":"智慧物流系统-移动端","type":"default","titleColor":"#000000"},"isNVue":false},"nvue":{"compiler":"uni-app","styleCompiler":"uni-app","flex-direction":"column"},"renderer":"auto","appname":"PDA","splashscreen":{"alwaysShowBeforeRender":true,"autoclose":true},"compilerVersion":"4.36","entryPagePath":"pages/index/index","entryPageQuery":"","realEntryPagePath":"","networkTimeout":{"request":60000,"connectSocket":60000,"uploadFile":60000,"downloadFile":60000},"locales":{},"darkmode":false,"themeConfig":{}};
const __uniRoutes = [{"path":"pages/index/index","meta":{"isQuit":true,"isEntry":true,"navigationBar":{"titleText":"智慧物流系统-登录","type":"default"},"isNVue":false}},{"path":"pages/config/config","meta":{"navigationBar":{"titleText":"智慧物流系统-用户配置","type":"default"},"isNVue":false}},{"path":"pages/main/main","meta":{"navigationBar":{"titleText":"智慧物流系统-主页","type":"default"},"isNVue":false}},{"path":"pages/bind/bind","meta":{"navigationBar":{"titleText":"智慧物流系统-物料绑定","type":"default"},"isNVue":false}},{"path":"pages/bindSelectMat/bindSelectMat","meta":{"navigationBar":{"titleText":"","type":"default"},"isNVue":false}}].map(uniRoute=>(uniRoute.meta.route=uniRoute.path,__uniConfig.pages.push(uniRoute.path),uniRoute.path='/'+uniRoute.path,uniRoute));
const __uniConfig = {"pages":[],"globalStyle":{"backgroundColor":"#F8F8F8","navigationBar":{"backgroundColor":"#F8F8F8","titleText":"智慧物流系统-移动端","type":"default","titleColor":"#000000"},"isNVue":false},"nvue":{"compiler":"uni-app","styleCompiler":"uni-app","flex-direction":"column"},"renderer":"auto","appname":"PDA","splashscreen":{"alwaysShowBeforeRender":true,"autoclose":true},"compilerVersion":"4.45","entryPagePath":"pages/index/index","entryPageQuery":"","realEntryPagePath":"","networkTimeout":{"request":60000,"connectSocket":60000,"uploadFile":60000,"downloadFile":60000},"locales":{},"darkmode":false,"themeConfig":{}};
const __uniRoutes = [{"path":"pages/index/index","meta":{"isQuit":true,"isEntry":true,"navigationBar":{"titleText":"智慧物流系统-登录","type":"default"},"isNVue":false}},{"path":"pages/config/config","meta":{"navigationBar":{"titleText":"智慧物流系统-用户配置","type":"default"},"isNVue":false}},{"path":"pages/main/main","meta":{"navigationBar":{"titleText":"智慧物流系统-主页","type":"default"},"isNVue":false}},{"path":"pages/bind/bind","meta":{"navigationBar":{"titleText":"智慧物流系统-物料绑定","type":"default"},"isNVue":false}},{"path":"pages/bindSelectMat/bindSelectMat","meta":{"navigationBar":{"titleText":"","type":"default"},"isNVue":false}},{"path":"pages/queryBindList/queryBindList","meta":{"navigationBar":{"titleText":"智慧物流系统-绑定查询","type":"default"},"isNVue":false}}].map(uniRoute=>(uniRoute.meta.route=uniRoute.path,__uniConfig.pages.push(uniRoute.path),uniRoute.path='/'+uniRoute.path,uniRoute));
__uniConfig.styles=[];//styles
__uniConfig.onReady=function(callback){if(__uniConfig.ready){callback()}else{onReadyCallbacks.push(callback)}};Object.defineProperty(__uniConfig,"ready",{get:function(){return isReady},set:function(val){isReady=val;if(!isReady){return}const callbacks=onReadyCallbacks.slice(0);onReadyCallbacks.length=0;callbacks.forEach(function(callback){callback()})}});
__uniConfig.onServiceReady=function(callback){if(__uniConfig.serviceReady){callback()}else{onServiceReadyCallbacks.push(callback)}};Object.defineProperty(__uniConfig,"serviceReady",{get:function(){return isServiceReady},set:function(val){isServiceReady=val;if(!isServiceReady){return}const callbacks=onServiceReadyCallbacks.slice(0);onServiceReadyCallbacks.length=0;callbacks.forEach(function(callback){callback()})}});

View File

@ -130,7 +130,7 @@ if (uni.restoreGlobal) {
return uni.getStorageSync(key) || defaultValue;
}
function getServerIPAndPort() {
var serverIP = getConfig("serverIP", "192.168.139.36");
var serverIP = getConfig("serverIP", "192.168.119.36");
var serverPort = getConfig("serverPort", "8888");
return serverIP + ":" + serverPort;
}
@ -142,7 +142,7 @@ if (uni.restoreGlobal) {
}
return target;
};
const _sfc_main$5 = {
const _sfc_main$7 = {
data() {
return {
title: "登录",
@ -218,7 +218,7 @@ if (uni.restoreGlobal) {
}
}
};
function _sfc_render$4(_ctx, _cache, $props, $setup, $data, $options) {
function _sfc_render$6(_ctx, _cache, $props, $setup, $data, $options) {
return vue.openBlock(), vue.createElementBlock("view", { class: "bg-image" }, [
vue.createElementVNode("navigator", {
url: "../config/config",
@ -304,8 +304,8 @@ if (uni.restoreGlobal) {
])
]);
}
const PagesIndexIndex = /* @__PURE__ */ _export_sfc(_sfc_main$5, [["render", _sfc_render$4], ["__file", "E:/代码/赛特制冷WCS/wcs/PDA/PDA/pages/index/index.vue"]]);
const _sfc_main$4 = {
const PagesIndexIndex = /* @__PURE__ */ _export_sfc(_sfc_main$7, [["render", _sfc_render$6], ["__file", "E:/代码/赛特制冷WCS/wcs/PDA/PDA/pages/index/index.vue"]]);
const _sfc_main$6 = {
data() {
return {
serverIP: "",
@ -327,7 +327,7 @@ if (uni.restoreGlobal) {
}
}
};
function _sfc_render$3(_ctx, _cache, $props, $setup, $data, $options) {
function _sfc_render$5(_ctx, _cache, $props, $setup, $data, $options) {
return vue.openBlock(), vue.createElementBlock("view", { class: "container" }, [
vue.createElementVNode("view", null, [
vue.createElementVNode("label", null, "服务器IP:"),
@ -364,7 +364,7 @@ if (uni.restoreGlobal) {
}, "保存配置")
]);
}
const PagesConfigConfig = /* @__PURE__ */ _export_sfc(_sfc_main$4, [["render", _sfc_render$3], ["__file", "E:/代码/赛特制冷WCS/wcs/PDA/PDA/pages/config/config.vue"]]);
const PagesConfigConfig = /* @__PURE__ */ _export_sfc(_sfc_main$6, [["render", _sfc_render$5], ["__file", "E:/代码/赛特制冷WCS/wcs/PDA/PDA/pages/config/config.vue"]]);
const _imports_0$1 = "/static/logOut.png";
const _imports_1 = "/static/bind.png";
const _imports_2 = "/static/bindQuery.png";
@ -372,13 +372,13 @@ if (uni.restoreGlobal) {
const _imports_4 = "/static/callOut.png";
const _imports_5 = "/static/stockTaking.png";
const _imports_6 = "/static/task.png";
const _sfc_main$3 = {
const _sfc_main$5 = {
data() {
return {};
},
methods: {}
};
function _sfc_render$2(_ctx, _cache, $props, $setup, $data, $options) {
function _sfc_render$4(_ctx, _cache, $props, $setup, $data, $options) {
return vue.openBlock(), vue.createElementBlock("view", { class: "bg-image" }, [
vue.createElementVNode("view", null, [
vue.createElementVNode("navigator", {
@ -420,16 +420,21 @@ if (uni.restoreGlobal) {
class: "uni-flex uni-column",
style: { "flex": "5" }
}, [
vue.createElementVNode("view", {
class: "uni-flex uni-row",
style: { "-webkit-justify-content": "center", "justify-content": "center" }
vue.createElementVNode("navigator", {
url: "../queryBindList/queryBindList",
"hover-class": "navigator-hover"
}, [
vue.createElementVNode("image", {
class: "function-image",
src: _imports_2
})
]),
vue.createElementVNode("view", { class: "function-text" }, "绑定查询")
vue.createElementVNode("view", {
class: "uni-flex uni-row",
style: { "-webkit-justify-content": "center", "justify-content": "center" }
}, [
vue.createElementVNode("image", {
class: "function-image",
src: _imports_2
})
]),
vue.createElementVNode("view", { class: "function-text" }, "绑定查询")
])
]),
vue.createElementVNode("view", {
class: "uni-flex uni-column",
@ -504,8 +509,8 @@ if (uni.restoreGlobal) {
])
]);
}
const PagesMainMain = /* @__PURE__ */ _export_sfc(_sfc_main$3, [["render", _sfc_render$2], ["__file", "E:/代码/赛特制冷WCS/wcs/PDA/PDA/pages/main/main.vue"]]);
const _sfc_main$2 = {
const PagesMainMain = /* @__PURE__ */ _export_sfc(_sfc_main$5, [["render", _sfc_render$4], ["__file", "E:/代码/赛特制冷WCS/wcs/PDA/PDA/pages/main/main.vue"]]);
const _sfc_main$4 = {
data() {
return {
visible: false,
@ -591,7 +596,7 @@ if (uni.restoreGlobal) {
}
}
};
function _sfc_render$1(_ctx, _cache, $props, $setup, $data, $options) {
function _sfc_render$3(_ctx, _cache, $props, $setup, $data, $options) {
return $data.visible ? (vue.openBlock(), vue.createElementBlock("view", {
key: 0,
class: "popup-container"
@ -622,9 +627,9 @@ if (uni.restoreGlobal) {
])
])) : vue.createCommentVNode("v-if", true);
}
const PagesBindSelectMatBindSelectMat = /* @__PURE__ */ _export_sfc(_sfc_main$2, [["render", _sfc_render$1], ["__scopeId", "data-v-68e7b952"], ["__file", "E:/代码/赛特制冷WCS/wcs/PDA/PDA/pages/bindSelectMat/bindSelectMat.vue"]]);
const PagesBindSelectMatBindSelectMat = /* @__PURE__ */ _export_sfc(_sfc_main$4, [["render", _sfc_render$3], ["__scopeId", "data-v-68e7b952"], ["__file", "E:/代码/赛特制冷WCS/wcs/PDA/PDA/pages/bindSelectMat/bindSelectMat.vue"]]);
const _imports_0 = "/static/scan.png";
const _sfc_main$1 = {
const _sfc_main$3 = {
components: {
bindSelectMat: PagesBindSelectMatBindSelectMat
},
@ -857,7 +862,7 @@ if (uni.restoreGlobal) {
}
}
};
function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
function _sfc_render$2(_ctx, _cache, $props, $setup, $data, $options) {
const _component_bindSelectMat = vue.resolveComponent("bindSelectMat");
return vue.openBlock(), vue.createElementBlock("view", { class: "bg-image" }, [
vue.createVNode(_component_bindSelectMat, {
@ -1034,12 +1039,461 @@ if (uni.restoreGlobal) {
])
]);
}
const PagesBindBind = /* @__PURE__ */ _export_sfc(_sfc_main$1, [["render", _sfc_render], ["__file", "E:/代码/赛特制冷WCS/wcs/PDA/PDA/pages/bind/bind.vue"]]);
const PagesBindBind = /* @__PURE__ */ _export_sfc(_sfc_main$3, [["render", _sfc_render$2], ["__file", "E:/代码/赛特制冷WCS/wcs/PDA/PDA/pages/bind/bind.vue"]]);
const _sfc_main$2 = {
__name: "Card",
props: {
item: {
type: Object,
required: true
},
currentIndex: {
type: Number,
required: true
},
cardData: {
type: Array,
required: true
}
},
setup(__props, { expose: __expose }) {
__expose();
const props = __props;
const __returned__ = { props, ref: vue.ref };
Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true });
return __returned__;
}
};
function _sfc_render$1(_ctx, _cache, $props, $setup, $data, $options) {
return vue.openBlock(), vue.createElementBlock("view", { class: "card" }, [
vue.createElementVNode("view", { class: "card-header" }, [
vue.createElementVNode(
"text",
null,
vue.toDisplayString($props.item.matCode) + "  " + vue.toDisplayString($props.currentIndex + 1) + "/" + vue.toDisplayString($props.cardData.length),
1
/* TEXT */
)
]),
vue.createElementVNode("view", { class: "card-content" }, [
vue.createElementVNode("view", { class: "content-item" }, [
vue.createElementVNode("text", null, "名称:"),
vue.createElementVNode(
"text",
null,
vue.toDisplayString($props.item.matName),
1
/* TEXT */
)
]),
vue.createElementVNode("view", { class: "content-item" }, [
vue.createElementVNode("text", null, "规格:"),
vue.createElementVNode(
"text",
null,
vue.toDisplayString($props.item.matSpec),
1
/* TEXT */
)
]),
vue.createElementVNode("view", {
class: "content-item",
style: { "font-weight": "600" }
}, [
vue.createElementVNode("text", null, "数量:"),
vue.createElementVNode(
"text",
null,
vue.toDisplayString($props.item.matQty),
1
/* TEXT */
)
]),
vue.createElementVNode("view", { class: "content-combined" }, [
vue.createElementVNode("view", {
class: "content-item",
style: { "font-weight": "600", "color": "firebrick" }
}, [
vue.createElementVNode("text", null, "库位:"),
vue.createElementVNode(
"text",
null,
vue.toDisplayString($props.item.locationCode),
1
/* TEXT */
)
]),
vue.createElementVNode("view", {
class: "content-item",
style: { "font-weight": "600", "color": "firebrick" }
}, [
vue.createElementVNode("text", null, "货架编码:"),
vue.createElementVNode(
"text",
null,
vue.toDisplayString($props.item.shelfCode),
1
/* TEXT */
)
])
]),
vue.createElementVNode("view", { class: "content-combined" }, [
vue.createElementVNode("view", {
class: "content-item",
style: { "font-weight": "600", "color": "violet" }
}, [
vue.createElementVNode("text", null, "人员:"),
vue.createElementVNode(
"text",
null,
vue.toDisplayString($props.item.modifyUser),
1
/* TEXT */
)
]),
vue.createElementVNode("view", { class: "content-time" }, [
vue.createElementVNode("text", null, "绑定时间:"),
vue.createElementVNode(
"text",
null,
vue.toDisplayString($props.item.modifyTime),
1
/* TEXT */
)
])
])
])
]);
}
const Card = /* @__PURE__ */ _export_sfc(_sfc_main$2, [["render", _sfc_render$1], ["__scopeId", "data-v-29c414df"], ["__file", "E:/代码/赛特制冷WCS/wcs/PDA/PDA/components/Card.vue"]]);
const _sfc_main$1 = {
components: {
bindSelectMat: PagesBindSelectMatBindSelectMat,
Card
},
data() {
return {
isNeedScanLocationCode: true,
isNeedCallShelfCode: true,
matBaseInfoId: null,
matCode: "",
locationId: null,
locationCode: "",
matCode: "",
matName: "",
matSpec: "",
matQty: 100,
//默认数量值
userName: "",
//当前登录的用户名
recordCount: 0,
shelfId: null,
shelfCode: "",
placeholderText: "请先扫描货架码",
matCodeCondition: "",
//物料编码搜索条件
cardData: null
};
},
onShow: function() {
this.userName = getConfig("userName", "admin");
const self = this;
recive(function(res) {
formatAppLog("log", "at pages/queryBindList/queryBindList.vue:117", "Success:" + res.data);
self.analysisScanCode(res.data);
}, function(err) {
formatAppLog("log", "at pages/queryBindList/queryBindList.vue:120", "Error:", JSON.stringify(err));
});
},
methods: {
analysisScanCode: function(encodedString) {
encodedString = encodedString.replace(/,\s*\.\.\.$/, "");
let byteStrings = encodedString.split(",");
let byteArray = [];
for (let byteString of byteStrings) {
byteArray.push(parseInt(byteString, 10));
}
let originalString = "";
for (let i = 0; i < byteArray.length; i++) {
originalString += String.fromCharCode(byteArray[i]);
}
this.shelfCode = originalString;
var serverIPAndPort = getServerIPAndPort();
uni.request({
url: "http://" + serverIPAndPort + "/matDetailCurrenInfo/getMatDetailCurrentInfos",
// 请求的接口地址
method: "POST",
// 设置请求方式为 POST
data: {
"shelfCode": this.shelfCode,
"matCode": "",
"userName": this.userName,
"deviceType": "PDA",
"pageNumber": 1,
"pageSize": 100
},
header: {
"Content-Type": "application/json"
// 如果需要以JSON格式发送数据
},
success: (res) => {
if (res.statusCode === 200) {
if (res.data.code == 200) {
if (res.data.data == null || res.data.data.count == 0) {
uni.showToast({
title: "该货架不存在绑定的物料信息!",
icon: "none",
duration: 1500
});
return;
}
this.cardData = res.data.data.lists;
this.recordCount = res.data.data.count;
uni.showToast({
title: "获取成功!",
icon: "none",
duration: 100
});
} else {
uni.showToast({
title: "获取失败:" + res.data.message,
icon: "none",
duration: 3500
});
this.clear();
}
} else {
uni.showToast({
title: "服务器返回错误状态码" + res.statusCode,
icon: "none",
duration: 3e3
});
this.clear();
}
},
fail: (err) => {
uni.showToast({
title: "请求失败" + err,
icon: "none",
duration: 3e3
});
this.clear();
},
complete: (event) => {
formatAppLog("log", "at pages/queryBindList/queryBindList.vue:284", "请求完成", event);
}
});
},
bindSelectedMat: function(item) {
formatAppLog("log", "at pages/queryBindList/queryBindList.vue:292", "用户选择了项目:", item);
this.matCode = item.matCode;
this.matName = item.matName;
this.matSpec = item.matSpec;
this.matBaseInfoId = item.id;
},
queryMatList: function() {
if (this.shelfCode == null || this.shelfCode == "") {
uni.showToast({
title: "请先扫描货架码!",
icon: "none",
duration: 1e3
});
return;
}
var serverIPAndPort = getServerIPAndPort();
uni.request({
url: "http://" + serverIPAndPort + "/matDetailCurrenInfo/getMatDetailCurrentInfos",
// 请求的接口地址
method: "POST",
// 设置请求方式为 POST
data: {
"shelfCode": this.shelfCode,
"matCode": this.matCodeCondition,
"userName": this.userName,
"deviceType": "PDA",
"pageNumber": 1,
"pageSize": 100
},
header: {
"Content-Type": "application/json"
// 如果需要以JSON格式发送数据
},
success: (res) => {
if (res.statusCode === 200) {
if (res.data.code == 200) {
if (res.data.data == null || res.data.data.count == 0) {
uni.showToast({
title: "该货架不存在绑定的物料信息!",
icon: "none",
duration: 1500
});
return;
}
this.cardData = res.data.data.lists;
this.recordCount = res.data.data.count;
uni.showToast({
title: "获取成功!",
icon: "none",
duration: 100
});
} else {
uni.showToast({
title: "获取失败:" + res.data.message,
icon: "none",
duration: 3500
});
this.clear();
}
} else {
uni.showToast({
title: "服务器返回错误状态码" + res.statusCode,
icon: "none",
duration: 3e3
});
this.clear();
}
},
fail: (err) => {
uni.showToast({
title: "请求失败" + err,
icon: "none",
duration: 3e3
});
this.clear();
},
complete: (event) => {
formatAppLog("log", "at pages/queryBindList/queryBindList.vue:379", "请求完成", event);
}
});
},
//清空当前界面所有内容
clear: function() {
this.locationId = null;
this.locationCode = "";
this.shelfId = null;
this.shelfCode = "";
this.isNeedCallShelfCode = true;
this.isNeedScanLocationCode = true;
this.placeholderText = "请先扫描货架码";
},
clearMatInfo: function() {
this.matCode = "";
this.matName = "";
this.matSpec = "";
},
handlePopupClose() {
formatAppLog("log", "at pages/queryBindList/queryBindList.vue:403", "弹出层已关闭");
}
}
};
function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
const _component_bindSelectMat = vue.resolveComponent("bindSelectMat");
const _component_Card = vue.resolveComponent("Card");
return vue.openBlock(), vue.createElementBlock("view", { class: "bg-image" }, [
vue.createVNode(_component_bindSelectMat, {
ref: "proup",
onClose: $options.handlePopupClose,
onSelected: $options.bindSelectedMat
}, null, 8, ["onClose", "onSelected"]),
vue.createElementVNode("view", { class: "diy-flex-row" }, [
vue.createElementVNode("view", { style: { "flex": "3" } }, [
vue.createCommentVNode(" 占位 ")
]),
vue.createElementVNode("view", { style: { "flex": "80", "margin": "5rpx" } }, [
vue.createElementVNode("view", { class: "diy-flex-row" }, [
vue.createElementVNode("view", {
class: "rightImageContainer",
style: { "flex": "12", "padding-top": "20rpx" }
}, [
vue.createElementVNode("image", {
style: { "width": "60rpx", "height": "60rpx" },
src: _imports_0
})
]),
vue.createElementVNode("view", {
class: "uni-input-wrapper",
style: { "flex": "60" }
}, [
vue.withDirectives(vue.createElementVNode("input", {
id: "inputMatCode",
class: "uni-input",
style: { "font-size": "50rpx", "padding": "10rpx" },
placeholder: $data.placeholderText,
"onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => $data.matCodeCondition = $event),
onBlur: _cache[1] || (_cache[1] = (...args) => $options.queryMatList && $options.queryMatList(...args))
}, null, 40, ["placeholder"]), [
[vue.vModelText, $data.matCodeCondition]
])
]),
vue.createElementVNode("view", { style: { "flex": "3" } }),
vue.createElementVNode("view", { style: { "flex": "30" } }, [
vue.createElementVNode("button", {
onClick: _cache[2] || (_cache[2] = (...args) => $options.queryMatList && $options.queryMatList(...args))
}, "查询")
])
])
]),
vue.createElementVNode("view", { style: { "flex": "2" } }, [
vue.createCommentVNode(" 占位 ")
])
]),
vue.createElementVNode("view", {
class: "diy-flex-column",
style: { "margin-top": "5rpx" }
}, [
vue.createElementVNode("view", { class: "diy-flex-inforow" }, [
vue.createElementVNode("view", { style: { "width": "10rpx" } }),
vue.createElementVNode(
"view",
{ style: { "width": "275rpx" } },
"记录数:[" + vue.toDisplayString($data.recordCount) + "]",
1
/* TEXT */
),
vue.createElementVNode("view", { style: { "width": "10rpx" } }),
vue.createElementVNode(
"view",
{ style: { "width": "455rpx" } },
"货架码:" + vue.toDisplayString($data.shelfCode),
1
/* TEXT */
)
])
]),
vue.createElementVNode("view", {
class: "diy-flex-column",
style: { "margin-top": "5rpx" }
}, [
vue.createElementVNode("scroll-view", {
class: "scroll-view",
"scroll-y": "true"
}, [
(vue.openBlock(true), vue.createElementBlock(
vue.Fragment,
null,
vue.renderList($data.cardData, (item, index) => {
return vue.openBlock(), vue.createElementBlock("view", { key: index }, [
vue.createVNode(_component_Card, {
item,
currentIndex: index,
cardData: $data.cardData
}, null, 8, ["item", "currentIndex", "cardData"])
]);
}),
128
/* KEYED_FRAGMENT */
))
])
])
]);
}
const PagesQueryBindListQueryBindList = /* @__PURE__ */ _export_sfc(_sfc_main$1, [["render", _sfc_render], ["__file", "E:/代码/赛特制冷WCS/wcs/PDA/PDA/pages/queryBindList/queryBindList.vue"]]);
__definePage("pages/index/index", PagesIndexIndex);
__definePage("pages/config/config", PagesConfigConfig);
__definePage("pages/main/main", PagesMainMain);
__definePage("pages/bind/bind", PagesBindBind);
__definePage("pages/bindSelectMat/bindSelectMat", PagesBindSelectMatBindSelectMat);
__definePage("pages/queryBindList/queryBindList", PagesQueryBindListQueryBindList);
const _sfc_main = {
onLaunch: function() {
formatAppLog("log", "at App.vue:4", "App Launch");

View File

@ -82,7 +82,7 @@
"uni-app": {
"control": "uni-v3",
"vueVersion": "3",
"compilerVersion": "4.36",
"compilerVersion": "4.45",
"nvueCompiler": "uni-app",
"renderer": "auto",
"nvue": {

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,14 @@
using System;
using System.Collections.Generic;
using System.Text;
namespace WCS.Model.ApiModel.PDAMatBind
{
public class GetShelfInfoByShelfCodeRequest : RequestBase
{
/// <summary>
/// 货架编码
/// </summary>
public string ShelfCode { get; set; }
}
}

View File

@ -77,6 +77,49 @@ namespace WCS.WebApi.Controllers
}
[Route("getShelfInfoByShelfCode")]
[HttpPost(Name = "getShelfInfoByShelfCode")]
public async Task<ResponseBase> getShelfInfoByShelfCode(GetShelfInfoByShelfCodeRequest request)
{
//判断参数
if (string.IsNullOrEmpty(request.ShelfCode))
{
return new ResponseCommon()
{
Code = 201,
Message = "货架编码为空!",
Data = null,
};
}
//获取是否存在当前工位
var shelf = await DbHelp.db.Queryable<ShelfInfo>()
.Where(t => t.ShelfCode == request.ShelfCode)
.Where(t => t.IsEnable == true)
.FirstAsync();
if (shelf == null)
{
return new ResponseCommon()
{
Code = 201,
Message = $"货架[{request.ShelfCode}]不存在或者已被禁用!\r\n请联系系统管理人员维护货架信息",
Data = null,
};
}
return new ResponseBase<object>()
{
Code = 200,
Message = $"success",
Data = new
{
ShelfId = shelf.Id,
ShelfCode = shelf.ShelfCode,
},
};
}
[Route("bindMatDetail")]
[HttpPost(Name = "bindMatDetail")]
public async Task<ResponseCommon> bindMatDetail(BindMatDetailRequest request)
@ -224,5 +267,7 @@ namespace WCS.WebApi.Controllers
};
}
}
}
}