From c08c4b9b5cbac3c92ecc740c9e0b16c2ed85db4e Mon Sep 17 00:00:00 2001 From: zjj <3272660260@qq.com> Date: 星期六, 19 七月 2025 13:52:19 +0800 Subject: [PATCH] # --- locale/zh-Hans.json | 3 pages/home/index.vue | 9 pages.json | 12 + locale/en.json | 3 pages/check/checkOrder.vue | 288 ++++++++++++++++++++++++++ pages/check/checkOrderItem.vue | 289 ++++++++++++++++++++++++++ 6 files changed, 601 insertions(+), 3 deletions(-) diff --git a/locale/en.json b/locale/en.json index 6285cbf..a960e47 100644 --- a/locale/en.json +++ b/locale/en.json @@ -34,7 +34,8 @@ "outLogin":"Login Out", "language-change-confirm":"chenge", "hello":"Hello, welcome to log in to the WMS system!", - "intro":"Make manufacturing and logistics more efficient" + "intro":"Make manufacturing and logistics more efficient", + "checkOrder":"checkOrder" }, diff --git a/locale/zh-Hans.json b/locale/zh-Hans.json index 65b55d3..ff7223c 100644 --- a/locale/zh-Hans.json +++ b/locale/zh-Hans.json @@ -35,7 +35,8 @@ "outLogin":"閫�鍑虹櫥褰�", "language-change-confirm":"纭畾鍒囨崲?", "hello":"鎮ㄥソ锛屾杩庣櫥褰昗MS绯荤粺锛�", - "intro":"璁╁埗閫犱笌鐗╂祦鏇撮珮鏁�" + "intro":"璁╁埗閫犱笌鐗╂祦鏇撮珮鏁�", + "checkOrder":"鐩樼偣" }, diff --git a/pages.json b/pages.json index 8e9a351..def2d0d 100644 --- a/pages.json +++ b/pages.json @@ -19,6 +19,18 @@ } }, { + "path": "pages/check/checkOrder", + "style": { + "navigationBarTitleText": "鐩樼偣鍗�" + } + }, + { + "path": "pages/check/checkOrderItem", + "style": { + "navigationBarTitleText": "鍒濈洏" + } + }, + { "path": "pages/outbound/wavePickItem", "style": { "navigationBarTitleText": "娉㈡鎷h揣" diff --git a/pages/check/checkOrder.vue b/pages/check/checkOrder.vue new file mode 100644 index 0000000..6300da0 --- /dev/null +++ b/pages/check/checkOrder.vue @@ -0,0 +1,288 @@ +<template> + <view class="has-foot"> + <form> + <view class="cu-form-group" v-show="!isconfirm"> + <view class="title">娉㈡鍙�</view> + <input placeholder="璇锋壂鎻忔尝娆″彿" v-model="barcode" @input="search()" focus></input> + <text class='cuIcon-close text-gray margin-right-xs' v-show="barcode!==''" @click="clearCode"></text> + </view> + + </form> + + + + <view class="cu-list det menu sm-border padding"> + <block v-for="(item, index) in list" :key="index"> + <view class="cu-list det menu " @click="clickTaskItem(index)"> + + + <view class="cu-bar bg-white solid-bottom margin-top-sm"> + <view class="action"> + <view class="index"> + {{index+1}} + </view> + </view> + <view class="content2"> + <text class="text-gray"><text class="text-black ">{{item.exceStatus$}}</text></text> + </view> + </view> + + <view class="cu-item"> + <view class="content"> + <text class="text-gray">鐩樼偣宸紓鍗�:<text class="text-black ">{{item.orderCode}}</text></text> + </view> + </view> + <view class="cu-item"> + <view class="content"> + <text class="text-gray">鍒涘缓鏃堕棿:<text class="text-black ">{{item.createTime$}}</text></text> + </view> + </view> + <view class="cu-item"> + <view class="content"> + <text class="text-gray">搴撻潰鏁伴噺:<text class="text-black ">{{item.anfme}}</text></text> + </view> + <view class="content"> + <text class="text-gray">鐩樼偣鏁伴噺:<text class="text-black ">{{item.checkQty}}</text></text> + </view> + </view> + <view class="cu-item"> + <view class="content"> + <text class="text-gray">鐩樼偣绫诲瀷:<text class="text-black ">{{item.checkType$}}</text></text> + </view> + </view> + <view class="cu-item"> + <view class="content"> + <progress :percent="Math.trunc((item.checkQty/item.anfme)*100) " show-info stroke-width="3" /> + </view> + </view> + + </view> + </block> + </view> + + + <view class="text-blue text-right padding-lr" v-show="isconfirm"> + 鏈鏀惰揣鎬绘暟閲�:{{allCount}} + </view> + + <view class="cu-form-group " v-show="isconfirm"> + <view class="title">鏀惰揣鍖�</view> + <uni-data-select v-model="whAreaId" :localdata="range" placement="top" + @change="selChange"></uni-data-select> + </view> + + <view class="cu-bar btn-group foot" v-show="!isconfirm"> + <button class="cu-btn text-blue line-blue shadow" @click="clear">娓呯┖</button> + <button class="cu-btn bg-blue shadow-blur" @click="next">涓嬩竴姝�</button> + </view> + + <view class="cu-bar btn-group foot" v-show="isconfirm"> + <button class="cu-btn text-blue line-blue shadow" @click="prev">涓婁竴姝�</button> + <button class="cu-btn bg-blue shadow-blur" @click="confirm">鎻愪氦鏀惰揣</button> + </view> + + </view> +</template> + +<script> + import { + request + } from '../../common/request.js' + import { + mapState, + mapMutations, + mapActions, + mapGetters + } from 'vuex'; + export default { + data() { + return { + isClickItem:false, + clickItem:'', + QRbarcode:null, + barcode: '', + whAreaId: '', + list: [], + range: [], + isconfirm: false, + itemStyle: { + backgroundColor: '#42b983', + borderColor: '#42b983' + }, + } + }, + computed: { + ...mapState('user', ['dynamicFields']), + allCount() { + return this.list.reduce((acc, row) => +row.receiptQty + acc, 0) + } + }, + mounted() { + this.search() + }, + methods: { + clickTaskItem(index){ + let that = this + uni.navigateTo({ + url: "./checkOrderItem", + // 閫氳繃eventChannel鍚戣鎵撳紑椤甸潰浼犻�佹暟鎹� + success: function(res) { + res.eventChannel.emit('checkItem', { + data: that.list[index] + }) + } + + }); + }, + typeChange(e){ + this.typeSelect = e.value + this.search() + }, + async search() { + this.list = [] + // if(this.barcode === '' || this.barcode ===null){ + // return ; + // } + const { + code, + data, + msg + } = await request('/getCheckList',{ + code:this.barcode + } + ) + if (code === 200) { + if (Object.keys(data).length === 0){ + uni.showToast({ + title: "鏈煡璇㈠埌娉㈡鏁版嵁", + icon: "none", + position: 'top' + }) + } + this.list.push(...data) + + }else if(code == 401){ + setTimeout(() => { + uni.removeStorageSync('token'); + uni.reLaunch({ + url: "/pages/login/login" + }); + }, 1000); + }else { + uni.showToast({ + title: msg, + icon: "none", + position: 'top' + }) + } + + + }, + clearCode() { + this.barcode = '' + }, + remove(index) { + this.list.splice(index, 1); + }, + clear() { + this.list = [] + this.barcode = '' + }, + next() { + if (this.list.length) { + this.isconfirm = true + } else { + uni.showToast({ + icon: "none", + title: '鏈�夌墿鏂欐爣绛�' + }) + } + }, + prev() { + this.isconfirm = false + }, + selChange(val) { + uni.setStorageSync('whAreaId', val) + }, + async confirm() { + const newArr = this.list.map(item => { + return { + ...item, + receiptQty: item.receiptQty === null ? 0 : +item.receiptQty + }; + }); + if (this.whAreaId === '') { + uni.showToast({ + icon: "none", + title: '璇烽�夋嫨鏀惰揣鍖�' + }) + } else { + const { + code, + data, + msg + } = await request('/orders/confirm', { + receipts: newArr, + whAreaId: this.whAreaId + }) + if (code === 200) { + uni.showToast({ + title: '鏀惰揣鎴愬姛' + }) + this.list = [] + this.barcode = '' + this.isconfirm = false + } else { + uni.showToast({ + title: msg, + icon: "none", + position: 'top' + }) + } + + } + }, + + DateChange(e, item) { + item.prodTime = e.detail.value + } + } + } +</script> + +<style> + .index { + border: 1px solid #e54d42; + color: #e54d42; + border-radius: 50%; + display: block; + width: 50rpx; + height: 50rpx; + line-height: 48rpx; + text-align: center; + margin-right: 20rpx; + font-size: 30rpx; + } + + .text-blue { + color: #0081ff !important; + + } + + .item { + position: relative; + display: flex; + min-height: 80upx; + align-items: center; + } + .content2 { + /* background-color: coral; */ + width: 100%; + display: flex; + flex-direction: row; + align-items: center; + justify-content: flex-end; + margin-right: 10px; + color: #0081ff; + } +</style> \ No newline at end of file diff --git a/pages/check/checkOrderItem.vue b/pages/check/checkOrderItem.vue new file mode 100644 index 0000000..d46931d --- /dev/null +++ b/pages/check/checkOrderItem.vue @@ -0,0 +1,289 @@ +<template> + <view class="has-foot"> + <form> + <view class="cu-form-group" v-show="!isconfirm"> + <view class="title">宸紓鍗曞彿</view> + <text class="text-black ">{{check.orderCode}}</text> + </view> + <view class="cu-form-group" v-show="!isconfirm"> + <view class="title">瀹瑰櫒鍙�</view> + <input placeholder="璇锋壂鎻忓鍣ㄥ彿" v-model="barcode" focus></input> + <text class='cuIcon-close text-gray margin-right-xs' v-show="barcode!==''" @click="clearCode"></text> + <text class='cuIcon-search text-blue' @click="search"></text> + </view> + + </form> + + + + <view class="cu-list det menu sm-border padding"> + <block v-for="(item, index) in list"> + <view class="cu-list det menu "> + + + <view class="cu-bar bg-white solid-bottom margin-top-sm"> + <view class="action"> + <view class="index"> + {{index+1}} + </view> + </view> + <view class="content2"> + <text class="text-gray"><text class="text-black ">{{item.exceStatus$}}</text></text> + </view> + </view> + + <view class="cu-item"> + <view class="content"> + <text class="text-gray">鐗╂枡缂栫爜:<text class="text-black ">{{item.matnrCode}}</text></text> + </view> + </view> + <view class="cu-item"> + <view class="content"> + <text class="text-gray">鐗╂枡鍚嶇О:<text class="text-black ">{{item.maktx}}</text></text> + </view> + </view> + <view class="cu-item"> + <view class="content"> + <text class="text-gray">搴撳瓨鏁�:<text class="text-black ">{{item.anfme}}</text></text> + </view> + </view> + <view class="cu-item"> + <view class="content"> + <view class="cu-form-group padding-lr-0"> + <view class="title text-blue"><text + class="text-red text-xl vertical-middle"></text>瀹炵洏鏁�:</view> + <uni-number-box style="width: 70%;" :max="max" v-model="item.checkQty" + :step='1' ></uni-number-box> + </view> + </view> + </view> + <view class="cu-item"> + <view class="content"> + <view class="cu-form-group padding-lr-0"> + <text class=" text-blue">澶囨敞:</text> + <input placeholder="璇疯緭鍏ュ娉�" v-model="item.memo" ></input> + </view> + </view> + </view> + <view class="cu-item" v-if="item.checkQty !== item.anfme"> + <view class="content"> + <view class="cu-form-group padding-lr-0"> + <view class=" text-blue" >宸紓鍘熷洜</view> + <view style="width: 80%;"> + <uni-data-select style="min-width: 90%; max-width: 90%;" v-model="item.reason" :localdata="reasons" + placement="top"></uni-data-select> + </view> + </view> + </view> + </view> + + </view> + + + + </block> + </view> + + + + + <view class="cu-bar btn-group foot" v-show="!isconfirm"> + <button class="cu-btn text-blue line-blue shadow" @click="clear">娓呯┖</button> + <button class="cu-btn bg-blue shadow-blur" :disabled="repeatClick" @click="complete">鎻愪氦</button> + </view> + + + + </view> +</template> + +<script> + import { + request + } from '../../common/request.js' + import { + mapState, + mapMutations, + mapActions, + mapGetters + } from 'vuex'; + export default { + data() { + return { + check:'', + list: [], + isconfirm: false, + barcode:'', + max: 99999999, + repeatClick:false, + reasons:[] + + } + }, + computed: { + + + }, + mounted() { + this.getReasons() + }, + onLoad() { + let that = this + const eventChannel = this.getOpenerEventChannel(); + + eventChannel.on('checkItem', function(data) { + that.check = data.data + + }) + + }, + methods: { + async getReasons() { + const { + code, + data, + msg + } = await request('/getCheckDiffReasonList', {},'get') + if (code === 200) { + this.reasons = data.map(item => ({ + value: item.id, + text: item.label + })); + } + }, + clear() { + this.barcode = '' + this.list = [] + }, + clearCode() { + this.barcode = '' + }, + async search() { + this.list = [] + // if(this.barcode === '' || this.barcode ===null){ + // return ; + // } + const { + code, + data, + msg + } = await request('/getCheckTaskItemList',{ + barcode:this.barcode, + checkCode: this.check.orderCode + } + ) + if (code === 200) { + if (Object.keys(data).length === 0){ + uni.showToast({ + title: "璇ユ爣绛炬湭鏌ヨ鍒版暟鎹�", + icon: "none", + position: 'top' + }) + } + for(var i=0;i<data.length;i++){ + data[i].checkQty = data[i].anfme + } + this.list=data + + }else if(code == 401){ + setTimeout(() => { + uni.removeStorageSync('token'); + uni.reLaunch({ + url: "/pages/login/login" + }); + }, 1000); + }else { + uni.showToast({ + title: msg, + icon: "none", + position: 'top' + }) + } + + + }, + async complete() { + + let that = this + if(that.barcode === '' || that.barcode === null){ + uni.showToast({ + title: "瀹瑰櫒鍙蜂负绌�", + icon: "error", + }) + return ; + } + if(that.list === [] || that.list.length === 0){ + uni.showToast({ + title: "浠诲姟鏄庣粏涓虹┖", + icon: "error", + }) + return ; + } + this.repeatClick = true + const { + code, + data, + msg + } = await request('/saveCheckDiff',{ + container:that.barcode, + checkId: that.check.id, + checkDiffItems:that.list + }) + if (code === 200) { + uni.showToast({ + title: msg, + icon: "none", + }) + that.clear() + } else { + uni.showToast({ + title: msg, + icon: "none", + }) + } + this.repeatClick = false + }, + } + } +</script> + +<style> + .index { + border: 1px solid #e54d42; + color: #e54d42; + border-radius: 50%; + display: block; + width: 50rpx; + height: 50rpx; + line-height: 48rpx; + text-align: center; + margin-right: 20rpx; + font-size: 30rpx; + } + + .text-blue { + color: #0081ff !important; + + } + + .item { + position: relative; + display: flex; + min-height: 80upx; + align-items: center; + } + .content2 { + /* background-color: coral; */ + width: 100%; + display: flex; + flex-direction: row; + align-items: center; + justify-content: flex-end; + margin-right: 10px; + color: #0081ff; + } + .noMargin{ + margin-top: 0px; + padding: 5px; + } +</style> \ No newline at end of file diff --git a/pages/home/index.vue b/pages/home/index.vue index bfe5663..38b766c 100644 --- a/pages/home/index.vue +++ b/pages/home/index.vue @@ -133,7 +133,7 @@ <view class="cu-bar bg-white solid-bottom margin-top"> <view class="action"> - <text class="cuIcon-title text-orange "></text> 鍑哄簱 + <text class="cuIcon-title text-orange "></text> 浣滀笟 </view> </view> @@ -152,6 +152,13 @@ <text>{{$t('index.wavePick')}}</text> </navigator> </view> + <view class="cu-item"> + <navigator hover-class='none' url="/pages/check/checkOrder" navigateTo> + <view class="cuIcon-apps text-blue"> + </view> + <text>{{$t('index.checkOrder')}}</text> + </navigator> + </view> </view> -- Gitblit v1.9.1