From f26f29d84e0a68831a6af14dab3eec5500496d2e Mon Sep 17 00:00:00 2001 From: spring <2396852758@qq.com> Date: 星期三, 28 五月 2025 16:48:52 +0800 Subject: [PATCH] 初始化项目 --- pages/wareHouse/finishProductIn/index.vue | 718 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 718 insertions(+), 0 deletions(-) diff --git a/pages/wareHouse/finishProductIn/index.vue b/pages/wareHouse/finishProductIn/index.vue new file mode 100644 index 0000000..be6f4d7 --- /dev/null +++ b/pages/wareHouse/finishProductIn/index.vue @@ -0,0 +1,718 @@ +<template> + <view class="page"> + <view class="finishProductIn-index-bg"/> + <u-navbar title="鎴愬搧鍏ュ簱" :background="background" :border-bottom="false" :title-bold="true" title-color="#000" back-icon-color="#000"/> + <view class="finishProductIn-index-param"> + <view class="finishProductIn-index-param-view"> + <view class="finishProductIn-index-param-item param-extra"> + <view class="finishProductIn-index-param-item-left"> + <text class="item-one">鑷冲簱浣嶅彿</text> + </view> + <view class="finishProductIn-index-param-item-right" @click="seachLocationNo"> + <text class="item-one">{{tolocationNo}}</text> + <u-icon name="arrow-right" color="#687792" size="28"></u-icon> + </view> + </view> + <view class="finishProductIn-index-param-item param-extra"> + <view class="finishProductIn-index-param-item-left"> + <text class="item-one">鑷姩鎻愪氦</text> + </view> + <view class="finishProductIn-index-param-item-right"> + <!--<text class="item-one">{{isAuto?'鏄�':'鍚�'}}</text>--> + <picker class="item-one" style="width: 100%;" @change="autoNumBindChange($event,isAutoList)" :value="autoNumIndex" :range="isAutoList" + range-key="label"> + <view> + <text>{{isAutoList[autoNumIndex].label}}</text> + </view> + </picker> + <u-icon name="arrow-right" color="#687792" size="28"></u-icon> + </view> + </view> + <view class="finishProductIn-index-param-item"> + <view class="finishProductIn-index-param-item-left"> + <text class="item-one">鏄惁棰勭暀</text> + </view> + <view class="finishProductIn-index-param-item-right"> + <!--<text class="item-one">{{isAuto?'鏄�':'鍚�'}}</text>--> + <picker class="item-one" style="width: 100%;" @change="reserveNumBindChange($event,isReserveList)" :value="reserveNumIndex" :range="isReserveList" + range-key="label"> + <view> + <text>{{isReserveList[reserveNumIndex].label}}</text> + </view> + </picker> + <u-icon name="arrow-right" color="#687792" size="28"></u-icon> + </view> + </view> + </view> + </view> + <view class="finishProductIn-index-operate-info"> + <view class="finishProductIn-index-operate-info-view"> + <view class="info-one"> + <view class="t1">{{totalQty}}</view> + <view class="t2">鎬绘暟</view> + </view> + <view class="info-two"> + <view class="t1">{{totalPan}}</view> + <view class="t2">鎬荤洏鏁�</view> + </view> + </view> + </view> + <view class="wrap"> + <scroll-view class="finishProductIn-index-scroll-list" scroll-y="true"> + <u-cell-group class="finishProductIn-index-scroll-list-group" :border="false"> + <view class="content" v-for="(item, index) in list" :key="item.id" :index="index"> + <view class="content-header"> + <view class="header-item"> + <view class="content-header-icon-one"></view> + <view class="content-header-title">{{ item.partBatchNo }}</view> + </view> + <view class="header-item"> + <view class="content-header-icon-two"></view> + <view class="content-header-title-ne">{{ item.partName }}</view> + </view> + <view class="header-item-toolbar" @click="deleteHandle(item)"> + <view class="header-item-toolbar-del-icon"> + + </view> + <view class="header-item-toolbar-del-text"> + 鍒犻櫎 + </view> + </view> + </view> + <view class="content-body"> + <view class="part-one"> + <view class="part-one-left"> + <text>璁㈠崟鍙�: {{ item.customerOrderNo }}</text> + </view> + <view class="part-one-right"> + <text>闆朵欢鍙�: {{ item.partNo }}</text> + </view> + </view> + <view class="part-two"> + <view class="list-row"> + <view class="list-row-left">{{' '}}erp鎵瑰彿: {{ item.ifsBatchNo }}</view> + <view class="list-row-right">浠庡簱浣嶅彿: {{ item.locationNo }}</view> + </view> + <view class="list-row"> + <view class="list-row-left">璁¢噺鍗曚綅: {{ item.unit }}</view> + <view class="list-row-right">鑷冲簱浣嶅彿: {{ item.arriveLocationNo }}</view> + </view> + </view> + <view class="part-three"> + <view class="part-three-left"> + <view class="_label"> + 鍙敤搴撳瓨鏁伴噺 + </view> + <view class="_content"> + {{ item.availableStockQuantity }} + </view> + </view> + <view class="part-three-right"> + <view class="_label"> + 绉诲簱搴撳瓨鏁伴噺 + </view> + <view class="_content"> + <u-input placeholder="璇疯緭鍏ユ暟閲�" v-model="item.moveQty" type="digit"></u-input> + <!--<text>{{ item.moveQty }}</text>--> + <view class="edit_icon"></view> + </view> + </view> + </view> + </view> + <!--<view class="row-list"> + <view class="_label"> + 绉诲簱搴撳瓨鏁伴噺: + </view> + <view class="_content"> + <u-input placeholder="璇疯緭鍏ョЩ搴撳簱瀛樻暟閲�" v-model="item.moveQty" type="digit"></u-input> + </view> + </view>--> + </view> + </u-cell-group> + </scroll-view> + <scan></scan> + + <view class="finishProductIn-form-footer" v-if="list.length>0"> + <u-button class="btn" type="primary" @click="submit">鎻愪氦</u-button> + </view> + </view> + </view> +</template> +<script> + import scan from "@/components/scan/scan.vue"; + import content_bg from '@/static/custom/finishProductIn/locNoBg.png' + + export default { + components: { + scan + }, + data() { + return { + background:{ + backgroundImage: `url(${content_bg})`, + backgroundAttachment: 'fixed', + backgroundSize: '100% auto', + backgroundRepeat: 'no-repeat', + }, + list: [], + tolocationNo: "CPK01", + isUseLotBatchNo:false, + isAuto:false, + isReserve:false, + index:0, + isAutoList:[ + {value:false,label:'鍚�'}, + {value:true,label:'鏄�'} + ], + autoNumIndex:0, + isReserveList:[ + {value:false,label:'鍚�'}, + {value:true,label:'鏄�'} + ], + reserveNumIndex:0, + }; + }, + onLoad() { + // this.loadList({"part_no":"88.118.1/A0048179","wdr":"221026000567N","qty_arrived":"1","wdr":"221026000567N","unit_meas":"pcs","material_code":null}); + // this.loadList({"part_no":"88.118.1/A0187345","lot_batch_no":"230315003687N","qty_arrived":2.64,"wdr":"妫�5","unit_meas":"km","material_code":"25070076","sn_no":"妫�5"}); + }, + onShow() { + + let that = this + + uni.$off('scan') // 姣忔杩涙潵鍏� 绉婚櫎鍏ㄥ眬鑷畾涔変簨浠剁洃鍚櫒 + uni.$on('scan', function(data) { + console.log('onscan'); + //鎵爜鎴愬姛鍚庣殑鍥炶皟锛屼綘鍙互鍐欒嚜宸辩殑閫昏緫浠g爜鍦ㄨ繖閲� + console.log('鎵爜缁撴灉锛�', data.code); + + if (data.code != "" && (that.tolocationNo == "")) { + uni.showToast({ + title: '璇烽�夋嫨鑷冲簱浣嶅彿', + icon: 'none' + }) + return + } + //鍒ゆ柇浜岀淮鐮佷腑鏄惁鏈塻n_no锛屽吋瀹硅�佹爣绛句簩缁寸爜 + let snNoIndex=data.code.indexOf('sn_no') + if(snNoIndex>-1){ + this.isUseLotBatchNo=false + }else{ + this.isUseLotBatchNo=true + } + const result = JSON.parse(data.code) + //鍒ゆ柇鏁扮粍涓槸鍚﹀瓨鍦� SN鍜宲artNo 鏄惁宸茬粡瀛樺湪 + let initList = that.list.filter(item => { + return item.partNo === result.part_no && item.partBatchNo === (this.isUseLotBatchNo?result.lot_batch_no:result.sn_no) && that.tolocationNo === item.arriveLocationNo + }) + if (initList.length > 0) { + uni.showToast({ + title: "姝ゆ潯璁板綍宸插瓨鍦ㄣ��", + icon: "none" + }); + return + } + that.loadList(result); + }) + }, + onNavigationBarButtonTap(e) { + uni.scanCode({ + success: res => { + try { + const result = JSON.parse(res.result) + + } catch (e) {} + } + }); + }, + computed: { + totalQty(){ + const total=this.list.reduce((prev, curr) => { + return prev + (parseFloat(curr.moveQty)||0) + }, 0) + return parseFloat(total.toFixed(6)) + }, + totalPan(){ + return this.list.length + } + }, + methods: { + autoNumBindChange(e,storage){ + if (storage.length <= 0) { + this.autoNumIndex = null + return + } + this.autoNumIndex = e.target.value + this.isAuto = storage[this.autoNumIndex].value + }, + reserveNumBindChange(e,storage){ + if (storage.length <= 0) { + this.reserveNumIndex = null + return + } + this.reserveNumIndex = e.target.value + this.isReserve = storage[this.reserveNumIndex].value + }, + //鑷冲簱浣� + seachLocationNo() { + uni.navigateTo({ + url: '/pages/wareHouse/finishProductIn/locNoList' + }) + }, + loadList(result) { + + uni.showLoading({ + mask: true, + title: "鍔犺浇涓�", + }); + let that = this + if(that.list.length > 1) { + uni.showToast({ + title: '鎴愬搧鍏ュ簱涓嶆敮鎸佹壒閲忔搷浣�', + icon: "none" + }); + return + } + if (result) { + let data = { + sn: (this.isUseLotBatchNo?result.lot_batch_no:result.sn_no), + partNo: result.part_no + } + // 鏌ヨ搴撳瓨淇℃伅 + that.$u.api.finishProductIn.list(data).then(res => { + that.index++ + let reList = res.data + + if (reList.length == 0) { + uni.showToast({ + title: `搴撲綅鍙�:${that.tolocationNo},闆朵欢鍙�:${data.partNo},SN:${data.sn},鏈壂鍒板簱瀛樹俊鎭痐, + icon: "none" + }); + } else { + for (let i = 0; i < reList.length; i++) { + let item = { + id: reList[i].id, + partNo: reList[i].partNo, + partName: reList[i].partName, + partBatchNo: reList[i].partBatchNo, + ifsBatchNo: reList[i].ifsBatchNo, + unit: reList[i].unit, + locationNo: reList[i].locationNo, + availableStockQuantity: reList[i].availableStockQuantity, + arriveLocationNo: that.tolocationNo, + moveQty: reList[i].availableStockQuantity, + customerOrderNo: reList[i].customerOrderNo, + materialCode:result.material_code + } + + that.list.push(item) + } + if(this.isAuto){ + this.submit() + } + } + uni.hideLoading(); + }) + + } + }, + //鑷冲簱浣嶅彿璁剧疆 + setNo(no) { + this.tolocationNo = no + }, + deleteHandle(obj) { + let that = this + uni.showModal({ + title: '鎻愮ず', + content: '姝ゆ搷浣滃皢鍒犻櫎璇ュ叆搴撲俊鎭�, 鏄惁缁х画?', + success: function(res) { + if (res.confirm) { + that.list.map((item, index) => { + if (obj.id == item.id) { + that.list.splice(index, 1) + } + }); + } + } + }); + }, + submit() { + let that = this + that.list.map((item) => { + if (item.moveQty <= 0) { + uni.showToast({ + title: '璇峰叆搴撴暟閲忓繀椤诲ぇ浜�0', + icon: "none" + }); + return + } + if (item.moveQty > item.availableStockQuantity) { + uni.showToast({ + title: '鍏ュ簱鏁伴噺涓嶈兘澶т簬鍙敤搴撳瓨鏁伴噺', + icon: "none" + }); + return + } + }); + if(that.list.length > 1) { + uni.showToast({ + title: '鎴愬搧鍏ュ簱涓嶆敮鎸佹壒閲忔搷浣�', + icon: "none" + }); + return + } + let subList = [] + that.list.map((item) => { + let sub = { + stockId: item.id, + arriveLocationNo: item.arriveLocationNo, + moveQty: item.moveQty, + materialCode:item.materialCode, + snNo:item.partBatchNo, + isReserve:that.isReserve + } + subList.push(sub) + }); + + that.$u.api.finishProductIn.addList(subList).then(res => { + if (res.code == 0) { + uni.showToast({ + title: '鎻愪氦鎴愬姛', + duration: 2000 + }); + that.index = 0 + that.list = [] + } else { + uni.showModal({ + title: '鎻愮ず', + content: res.msg||'鎻愪氦澶辫触', + showCancel: false, + success: function() { + + } + }) + } + }) + }, + } + }; +</script> +<style lang="scss" scoped> + .finishProductIn-index-bg{ + background-color: #F6F9FF; + background-image: url('~@/static/custom/finishProductIn/locNoBg.png'); + // background: linear-gradient(180deg,rgba(206,227,254,1),rgba(206,227,254,1) 20%,rgba(206,227,254,0.5) 40%,rgba(206,227,254,0.25) 60%,rgba(206,227,254,0.08) 80%,rgba(206,227,254,0)); + padding: 0 20rpx; + background-attachment: fixed; + background-size: 100% auto; + background-repeat: no-repeat; + position: fixed; + top: 0; + bottom: 0; + width: 100%; + z-index: -1; + } + .finishProductIn-index-param{ + padding: 50rpx 30rpx 0rpx 30rpx; + .finishProductIn-index-param-view{ + height: 300rpx; + background: rgba(255,255,255,0.61); + box-shadow: 0rpx 6rpx 8rpx 0rpx rgba(110,120,135,0.09); + border-radius: 10rpx; + padding:0rpx 23rpx; + margin-bottom: 20rpx; + .finishProductIn-index-param-item{ + height: 100rpx; + border: 1px solid #ADC8E4; + line-height: 100rpx; + display:flex; + justify-content: space-between; + border: none; + .finishProductIn-index-param-item-left{ + .item-one{ + font-size: 30rpx; + color: #4F4F4F; + } + } + .finishProductIn-index-param-item-right{ + display: flex; + .item-one{ + font-size: 30rpx; + color: #333333; + margin-right: 6rpx; + } + .item-two{ + font-size: 30rpx; + color: #A6B4CC; + margin-right: 6rpx; + } + .item-three{ + font-size: 30rpx; + color: #214DED; + margin-right: 6rpx; + } + } + } + .param-extra{ + border-bottom: 1px solid #E8EBEE; + } + } + } + + .finishProductIn-index-operate-info{ + height: 144rpx; + width: 690rpx; + margin: 0 auto 20rpx; + .finishProductIn-index-operate-info-view{ + background-image: url('~@/static/custom/finishProductIn/info-bg.png'); + background-size: 100% auto; + background-repeat: no-repeat; + height: 144rpx; + position: relative; + .info-one{ + position:absolute; + top:0rpx; + left:60rpx; + height:144rpx; + display: flex; + flex-direction:column; + justify-content: center; + text-align: center; + .t1{ + font-size: 36rpx; + color: #0C72FF; + font-weight: bold; + } + .t2{ + font-size: 28rpx; + color: #4C4E4E; + } + } + .info-two{ + position:absolute; + top:0rpx; + left:270rpx; + height:144rpx; + display: flex; + flex-direction:column; + justify-content: center; + text-align: center; + .t1{ + font-size: 36rpx; + color: #0C72FF; + font-weight: bold; + } + .t2{ + font-size: 28rpx; + color: #4C4E4E; + } + } + } + } + + .wrap .finishProductIn-index-scroll-list{ + height:calc(100vh - var(--window-top) - var(--window-bottom) - 756rpx); + width:100%; + } + .finishProductIn-index-scroll-list-group{ + ::v-deep .u-cell-item-box { + background-color:rgba(250,252,255,0.36) !important; + padding:0rpx 30rpx ; + } + .content { + font-size: 12px; + background-color: #FFFFFF; + box-sizing: border-box; + border-radius: 10rpx; + margin: 0rpx 0rpx 26rpx; + height: 450rpx; + padding: 10rpx 20rpx; + box-shadow:0rpx 6rpx 12rpx 2rpx rgba(127, 127, 127, 0.1) !important; + position:relative; + .content-header{ + .header-item{ + height: 50rpx; + display: flex; + align-items:center; + .content-header-icon-one{ + background-image: url('~@/static/custom/finishProductIn/label-icon-1.png'); + background-size: 100% auto; + background-repeat: no-repeat; + height:28rpx; + width:28rpx; + } + .content-header-icon-two{ + background-image: url('~@/static/custom/finishProductIn/header_icon.png'); + background-size: 100% auto; + background-repeat: no-repeat; + height:28rpx; + width:28rpx; + } + .content-header-title{ + margin-left: 11rpx; + font-size: 26rpx; + font-weight: bold; + color: #333333; + } + .content-header-title-ne{ + margin-left: 11rpx; + font-size: 26rpx; + color: #333333; + } + } + .header-item-toolbar{ + position: absolute; + background-image: url('~@/static/custom/finishProductIn/del-icon.png'); + background-size: 100% auto; + background-repeat: no-repeat; + height:60rpx; + width:140rpx; + right:0; + top:0; + display: flex; + justify-content: flex-end; + padding-top: 10rpx; + padding-right: 18rpx; + .header-item-toolbar-del-icon{ + background-image: url('~@/static/custom/finishProductIn/icon_dele.png'); + background-size: 100% auto; + background-repeat: no-repeat; + height:25rpx; + width:22rpx; + margin-top: 5rpx; + } + .header-item-toolbar-del-text{ + margin-left:7rpx; + height: 23rpx; + font-size: 24rpx; + color: #FFFFFF; + } + } + } + + .content-body{ + margin-top:8rpx; + .part-one{ + display: flex; + justify-content: space-between; + margin-bottom: 16rpx; + .part-one-left{ + padding: 8rpx 16rpx; + height: 50rpx; + background: #EFF5FF; + border-radius: 20rpx; + font-size: 24rpx; + color: #2D85EC; + } + .part-one-right{ + padding: 8rpx 16rpx; + height: 50rpx; + background: #EBFEFD; + border-radius: 20rpx; + font-size: 24rpx; + color: #139FAC; + } + } + .part-two{ + background: #F5F9FF; + border-radius: 10rpx; + padding-left: 20rpx; + padding-top: 10rpx; + padding-bottom: 10rpx; + height: 130rpx; + margin-bottom: 16rpx; + .list-row{ + display: flex; + justify-content: space-between; + height: 55rpx; + line-height: 55rpx; + font-size: 26rpx; + font-weight: 500; + color: #666666; + .list-row-left{ + width: 54%; + } + .list-row-right{ + width: 46%; + } + } + } + + .part-three{ + display: flex; + justify-content: space-between; + padding-left: 20rpx; + .part-three-left{ + width: 54%; + ._label{ + font-size: 26rpx; + color: #444444; + } + ._content{ + margin-top: 12rpx; + height: 56rpx; + line-height: 52rpx; + background: #F6FAFF; + border: 1px solid #4FA0FF; + border-radius: 8rpx; + width:265rpx; + padding-left: 20rpx; + color: #214DED; + font-weight: bold; + } + } + .part-three-right{ + width: 46%; + ._label{ + font-size: 26rpx; + color: #444444; + } + ._content{ + margin-top: 12rpx; + height: 56rpx; + line-height: 52rpx; + background: #F6FAFF; + border: 1px solid #4FA0FF; + border-radius: 8rpx; + width:265rpx; + padding-left: 20rpx; + padding-right: 10rpx; + color: #214DED; + font-weight: bold; + display: flex; + justify-content: space-between; + align-items: center; + .edit_icon{ + background-image: url('~@/static/custom/finishProductIn/icon_edit.png'); + background-size: 100% auto; + background-repeat: no-repeat; + height:26rpx; + width:26rpx; + } + ::v-deep .u-input__input{ + font-size: 26rpx !important; + } + } + } + } + } + } + } + .finishProductIn-form-footer{ + display: flex; + margin-top: 10rpx; + margin-bottom: 10rpx; + margin-left: 20rpx; + margin-right: 20rpx; + padding-bottom: 14rpx; + .btn { + flex: 1; + margin: 10rpx; + background: #214DED; + box-shadow: 0rpx 6rpx 8rpx 0rpx rgba(4,49,212,0.3); + font-weight: bold; + color: #FEFEFE; + font-family: PingFang SC; + } + } +</style> -- Gitblit v1.9.3