Commit 99cc9a96 authored by 沈翠玲's avatar 沈翠玲

到货单

parent 31279af9
...@@ -51,10 +51,16 @@ const install = (Vue, vm) => { ...@@ -51,10 +51,16 @@ const install = (Vue, vm) => {
createforstorage: (params = {}) => vm.$u.postJson(config.adminPath + '/sfctb/createforstorage', params), createforstorage: (params = {}) => vm.$u.postJson(config.adminPath + '/sfctb/createforstorage', params),
stockSaleOutList: (params = {}) => vm.$u.postJson(config.adminPath + '/stockSaleOut/list', params), stockSaleOutList: (params = {}) => vm.$u.postJson(config.adminPath + '/stockSaleOut/list', params),
stockList: (params = {}) => vm.$u.postJson(config.adminPath + '/stockSaleOut/stockList', params), stockList: (params = {}) => vm.$u.postJson(config.adminPath + '/stockSaleOut/stockList', params),
confirmStock: (params = {}) => vm.$u.postJson(config.adminPath + '/stockSaleOut/confirm', params),
getforinvmlinfo: (params = {}) => vm.$u.postJson(config.adminPath + '/invml/getforinvmlinfo', params),
validateArrival: (params = {}) => vm.$u.postJson(config.adminPath + '/stockArrival/validate', params),
confirmArrival: (params = {}) => vm.$u.postJson(config.adminPath + '/stockArrival/confirm', params),
warehouseList: (params = {}) => vm.$u.postJson(config.adminPath + '/warehouseArrive/list', params),
}; };
} }
export default { export default {
install install
} }
...@@ -140,5 +140,41 @@ ...@@ -140,5 +140,41 @@
"未连接到服务器": "ไม่ได้เชื่อมต่อกับเซิร์ฟเวอร์", "未连接到服务器": "ไม่ได้เชื่อมต่อกับเซิร์ฟเวอร์",
"失败": "ล้มเหลว", "失败": "ล้มเหลว",
"未知错误": "ข้อผิดพลาดที่ไม่รู้จัก", "未知错误": "ข้อผิดพลาดที่ไม่รู้จัก",
"获取用户语言失败": "ล้มเหลวในการรับภาษาผู้ใช้" "获取用户语言失败": "ล้มเหลวในการรับภาษาผู้ใช้",
"录入到货单": "ใส่ลงในใบส่งสินค้า",
"供应商代码": "รหัสผู้ขาย",
"到货供应商": "ผู้จัดจำหน่ายขาเข้า",
"到货明细": "รายละเอียดการมาถึง",
"一个到货单无法录入两个供应商订单": "ใบสั่งซื้อสินค้าหนึ่งใบไม่สามารถป้อนคำสั่งซื้อของผู้จำหน่ายสองรายได้",
"销售出库": "การขายออกจากคลัง",
"销货单创建": "การสร้างใบขาย",
"请扫描单号": "กรุณาสแกนหมายเลขเดี่ยว",
"步骤一 扫描单号": "ขั้นตอนที่ 1 สแกนหมายเลขเดียว",
"摄像头对准": "การจัดตำแหน่งกล้อง",
"出货通知单号二维码": "หมายเลขใบแจ้งการจัดส่ง QR Code",
"点击扫描或": "คลิกสแกน หรือ",
"点选单号": "ชี้หมายเลขแผ่น",
"交货单:{0}": "การจัดส่ง: {0}",
"拣货明细": "รายละเอียดการหยิบสินค้า",
"计划出库日期:{0}": "กำหนดวันออกจากคลังสินค้า: {0}",
"请扫描盘点条码": "กรุณาสแกนบาร์โค้ด",
"返回": "กลับ",
"提交": "ส่ง",
"保存成功": "บันทึกความสำเร็จ",
"产品编号:{0}": "รหัสสินค้า: {0}",
"产品名称:{0}": "ชื่อสินค้า: {0}",
"领料": "ปลอกคอ",
"未配货": "ไม่จัดส่ง",
"库存明细": "รายละเอียดสินค้าคงคลัง",
"选择库存": "เลือกสินค้า",
"库房/储位:{0}|{1}": "คลังสินค้า / พื้นที่จัดเก็บ: {0}} {1}",
"库存数:{0}pcs": "จำนวนสต็อก: {0}pcs",
"出货数:": "จำนวนการจัดส่ง:",
"库存数:": "จำนวนสต็อก:",
"采购到货": "ซื้อมาถึง",
"到货仓": "ไปยังคลังสินค้า",
"请选择到货仓": "กรุณาเลือกไปยังคลังสินค้า",
"确认成功": "ยืนยันความสำเร็จ",
"到货确认": "ยืนยันการมาถึง",
"确认": "ยืนยัน"
} }
...@@ -146,5 +146,35 @@ ...@@ -146,5 +146,35 @@
"到货供应商": "到货供应商", "到货供应商": "到货供应商",
"到货明细": "到货明细", "到货明细": "到货明细",
"一个到货单无法录入两个供应商订单": "一个到货单无法录入两个供应商订单", "一个到货单无法录入两个供应商订单": "一个到货单无法录入两个供应商订单",
"销售出库": "销售出库" "销售出库": "销售出库",
"销货单创建": "销货单创建",
"请扫描单号": "请扫描单号",
"步骤一 扫描单号": "步骤一 扫描单号",
"摄像头对准": "摄像头对准",
"出货通知单号二维码": "出货通知单号二维码",
"点击扫描或": "点击扫描或",
"点选单号": "点选单号",
"交货单:{0}": "交货单:{0}",
"拣货明细": "拣货明细",
"计划出库日期:{0}": "计划出库日期:{0}",
"请扫描盘点条码": "请扫描盘点条码",
"返回": "返回",
"提交": "提交",
"保存成功": "保存成功",
"产品编号:{0}": "产品编号:{0}",
"产品名称:{0}": "产品名称:{0}",
"领料": "领料",
"未配货": "未配货",
"库存明细": "库存明细",
"选择库存": "选择库存",
"库房/储位:{0}|{1}": "库房/储位:{0}|{1}",
"库存数:{0}pcs": "库存数:{0}pcs",
"出货数:": "出货数:",
"库存数:": "库存数:",
"采购到货": "采购到货",
"到货仓": "到货仓",
"请选择到货仓": "请选择到货仓",
"确认成功": "确认成功",
"到货确认": "到货确认",
"确认": "确认"
} }
\ No newline at end of file
...@@ -5,7 +5,14 @@ ...@@ -5,7 +5,14 @@
</StickyNavBar> </StickyNavBar>
<view style="padding: 0 10px;"> <view style="padding: 0 10px;">
<u-form ref="daohuoForm" :modelValue="daohuoForm" :rules="rules" labelWidth="200"> <u-form ref="daohuoForm" :modelValue="daohuoForm" :rules="rules" labelWidth="200">
<u-form-item prop="cc001" class="under" :label="$t('到货供应商')"> <u-form-item prop="warehouse" class="under" :label="$t('到货仓')">
<uni-data-select
v-model="daohuoForm.warehouse"
:clear="false"
:localdata="typeData"
></uni-data-select>
</u-form-item>
<u-form-item prop="supplierNo" class="under" :label="$t('到货供应商')">
<input <input
v-model="input" v-model="input"
type="text" type="text"
...@@ -15,7 +22,7 @@ ...@@ -15,7 +22,7 @@
</input> </input>
</u-form-item> </u-form-item>
</u-form> </u-form>
<view>{{$t('到货明细')}}</view> <view v-if="goodsList.length > 0">{{$t('到货明细')}}</view>
</view> </view>
<ContentLoadingMore class="cardbox" :list="goodsList"> <ContentLoadingMore class="cardbox" :list="goodsList">
<view class="cardContent" v-for="(item, index) in goodsList"> <view class="cardContent" v-for="(item, index) in goodsList">
...@@ -23,7 +30,6 @@ ...@@ -23,7 +30,6 @@
:item="item" :item="item"
:idx="index" :idx="index"
@deleGonds="deleGonds" @deleGonds="deleGonds"
:list="list"
/> />
</view> </view>
</ContentLoadingMore> </ContentLoadingMore>
...@@ -51,17 +57,18 @@ import BottomBtn from "@/components/BottomBtn/index.vue"; ...@@ -51,17 +57,18 @@ import BottomBtn from "@/components/BottomBtn/index.vue";
totalNum: 0, totalNum: 0,
show: true, show: true,
goodsList: [], goodsList: [],
typeData: [],
btnArr: [ btnArr: [
{ {
style: "", style: "",
type: "warning", type: "warning",
text: "返回", text: i18n.t('返回'),
way: "goBack", way: "goBack",
}, },
{ {
style: "", style: "",
type: "primary", type: "primary",
text: "到货确认", text: i18n.t('到货确认'),
way: "goSubmit", way: "goSubmit",
}, },
], ],
...@@ -69,77 +76,90 @@ import BottomBtn from "@/components/BottomBtn/index.vue"; ...@@ -69,77 +76,90 @@ import BottomBtn from "@/components/BottomBtn/index.vue";
input: '', input: '',
loading: false, loading: false,
daohuoForm: { daohuoForm: {
cc001: "3701" supplierNo: "",
warehouse: null
}, },
rules: { rules: {
cc001: { required: true,type: 'string', trigger: ['blur'], errorMessage: "11" }, supplierNo: { required: true,type: 'string', trigger: ['blur'], errorMessage: "11" },
cc002: { required: true, type: 'string',trigger: ['blur'], errorMessage: "11" } purchaseType: { required: true, type: 'string',trigger: ['blur'], errorMessage: "11" }
}, },
} }
}, },
created() { created() {
this.warehouseList()
}, },
methods: { methods: {
warehouseList() {
this.$u.api.warehouseList().then(res => {
if(res.success) {
this.typeData = res.data.map(v => ({text: v.warehouseName, value: v.warehouseName}))
}
})
},
getBtnHandle(row) { getBtnHandle(row) {
this[row.way](); this[row.way]();
}, },
goBack() { goBack() {
uni.navigateBack(); uni.navigateBack();
}, },
inputCC(e){ async inputCC(e){
if(e && e.detail.value) { if(e && e.detail.value) {
// 2028-330-20250106001-0019-A1010004-5 // 2028-330-20250106001-0019-A1010004-5
if(e.detail.value.includes("-")){ if(e.detail.value.includes("-")){
const arr = e.detail.value.split("-") const arr = e.detail.value.split("-")
if (arr.length === 6) { if (arr.length === 6) {
if (arr[0] !== this.daohuoForm.cc001) return this.$u.toast(i18n.t('一个到货单无法录入两个供应商订单')) if (arr[0] !== this.daohuoForm.supplierNo && this.daohuoForm.supplierNo) return this.$u.toast(i18n.t('一个到货单无法录入两个供应商订单'))
const index = this.goodsList.findIndex(v => v.joinlabel = arr.slice(0, 5).join('-')) const data = await this.$u.api.validateArrival({
"materialNo": arr[4],
"purchaseNo": arr[2],
"purchaseSerial": arr[3],
"purchaseType": arr[1]
})
if (!data.success) return
const index = this.goodsList.findIndex(v => v.joinlabel === arr.slice(0, 5).join('-'))
if (index > -1) { if (index > -1) {
this.goodsList[index]['cc006'] = Number(this.goodsList[index]['cc006']) + Number(arr[5]) this.goodsList[index]['arrivalQuantity'] = Number(this.goodsList[index]['arrivalQuantity']) + Number(arr[5])
} else { } else {
const data1 = await this.$u.api
.getforinvmbinfo({
mb001: arr[4]
})
this.goodsList.push({ this.goodsList.push({
cc001: arr[0], supplierNo: arr[0],
cc002: arr[1], purchaseType: arr[1],
cc003: arr[2], purchaseNo: arr[2],
cc004: arr[3], purchaseSerial: arr[3],
cc005: arr[4], materialNo: arr[4],
cc006: arr[5], arrivalQuantity: arr[5],
udf07: data1.data['udf07'],
mb002: data1.data['mb002'],
joinlabel: arr.slice(0, 5).join('-') joinlabel: arr.slice(0, 5).join('-')
}) })
} }
this.input = '' this.input = ''
this.daohuoForm.cc001 = arr[0] this.daohuoForm.supplierNo = arr[0]
} }
} else { } else {
} }
} }
}, },
deleGonds(idx) { deleGonds(idx) {
this.list = this.list.filter((item) => {
return item.qrcode !== this.goodsList[idx].qrcode;
})
this.goodsList.splice(idx, 1); this.goodsList.splice(idx, 1);
}, },
goSubmit(){ goSubmit(){
if (!this.goodsList.length) return; if (!this.goodsList.length) return;
if(!this.daohuoForm.cc001) return this.$u.toast(i18n.t('请输入到货单别')); if(!this.daohuoForm.warehouse) return this.$u.toast(i18n.t('请选择到货仓'));
if(!this.daohuoForm.cc002) return this.$u.toast(i18n.t('请输入到货单号'));
this.loading = true; this.loading = true;
this.$u.api.getforcreate({ this.$u.api.confirmStock({
cc001: this.daohuoForm.cc001, warehouse: this.daohuoForm.warehouse,
cc002: this.daohuoForm.cc002 details: this.goodsList.map(v => ({arrivalQuantity: v.arrivalQuantity, materialNo: v.materialNo, purchaseNo: v.purchaseNo, purchaseSerial: v.purchaseSerial, purchaseType: v.purchaseType, supplierNo: v.supplierNo}))
}) })
.then(res => { .then(res => {
this.loading = false; this.loading = false;
if (res.success) { if (res.success) {
if (res.data) { this.$u.toast(i18n.t('确认成功'));
if(!res.data.purths || res.data.purths.length === 0) return this.$u.toast(i18n.t('到货单已经完成入库')); this.goodsList = []
uni.navigateTo({ this.daohuoForm.supplierNo = ''
url: '/pages/forcreate/Info?info=' + encodeURIComponent(JSON.stringify(res.data))
});
} else {
this.$u.toast(i18n.t('到货单不存在或未检验'));
}
} else { } else {
this.$u.toast(res.errorMessage); this.$u.toast(res.errorMessage);
} }
...@@ -150,6 +170,9 @@ import BottomBtn from "@/components/BottomBtn/index.vue"; ...@@ -150,6 +170,9 @@ import BottomBtn from "@/components/BottomBtn/index.vue";
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
.page {
background: #fff;
}
.btn { .btn {
padding: 20rpx; padding: 20rpx;
background: #fff; background: #fff;
...@@ -184,14 +207,16 @@ import BottomBtn from "@/components/BottomBtn/index.vue"; ...@@ -184,14 +207,16 @@ import BottomBtn from "@/components/BottomBtn/index.vue";
} }
} }
.cardbox { .cardbox {
min-height: calc(100vh - 540rpx); border: 1px solid #dadde2;
padding: 0rpx 20rpx; border-radius: 5px;
background: #f3f3f5;
margin: 0rpx 20rpx;
margin-top: 20rpx; margin-top: 20rpx;
} }
.cardContent { .cardContent {
border-radius: 8px; border-radius: 8px;
background: #fff; background: #fff;
margin-bottom: 20rpx; margin-top: 20rpx;
} }
/deep/ .u-sticky { /deep/ .u-sticky {
top: 0 !important; top: 0 !important;
...@@ -203,7 +228,7 @@ import BottomBtn from "@/components/BottomBtn/index.vue"; ...@@ -203,7 +228,7 @@ import BottomBtn from "@/components/BottomBtn/index.vue";
} }
.cardbox { .cardbox {
min-height: calc(100vh - 480rpx); min-height: calc(100vh - 520rpx);
padding: 0rpx 20rpx; padding: 0rpx 20rpx;
margin-top: 20rpx; margin-top: 20rpx;
} }
......
<template> <template>
<view> <view>
<view class="listItemTitle"> <view class="listItemTitle">
<view> <view class="item" style="border-bottom: 1px solid #d8dbdf;">
<view class="item">入库条码:{{ item.qrcode }}</view> <view>{{item.purchaseNo}}|{{item.purchaseSerial}}</view>
<view class="item">工单编号:{{ item.workorderNo }}</view> <view>{{item.arrivalQuantity}}pcs
<view class="item">产品编号:{{ item.sapItemCode }}</view> <text style="margin-left: 40rpx"><u-icon name="minus" color="#000" size="32" @click="deleGonds(idx)"></u-icon></text>
<view class="item">产品描述:{{ item.itemName }}</view>
<view class="item">入库仓位:{{ item.NLPLA }}</view>
<view class="item">入库数量:{{ filterQuantity() }} {{ item.unitOfMeasure }}</view>
<view class="item">loss数量:{{ filterLoss() }} {{ item.unitOfMeasure }}</view>
<view class="item">样品数量:{{ filterSampleNum() }} {{ item.unitOfMeasure }}</view>
</view>
<u-button size="mini" type="primary" plain @click="deleGonds(idx)">
<u-icon name="trash" size="28"></u-icon>
删除
</u-button>
</view>
<view class="listBottom">
<view class="bottomTitle" @click="show = !show">
<view class="desc">卷条码明细</view>
<view class="topIcons">
<view v-if="show">
<u-icon name="arrow-down" color="#aaa" size="32"></u-icon>
展开
</view>
<view v-else>
<u-icon name="arrow-up" color="#aaa" size="32"></u-icon>
收起
</view>
</view> </view>
</view> </view>
<view v-if="!show" class="bottomBox"> <view class="item">
<view class="bottomItem" v-for="(ele, idx) in list" :key="ele.qrcode+idx" v-if="ele.qrcode === item.qrcode"> <view>品号:{{item.materialNo}}</view>
<view class="items">尺码:{{ ele.standardSize }}</view>
<view class="items">数量:{{ ele.quantity }} {{ ele.unitOfMeasure }}</view>
<view class="items">loss数量:{{ ele.lossNum }} {{ ele.unitOfMeasure }}</view>
<view class="items">样品数量:{{ ele.sampleNum }} {{ ele.unitOfMeasure }}</view>
</view>
</view> </view>
<view class="item">品名:{{ item.mb002 }}</view>
<view class="item">图号:{{ item.mb029 }}</view>
</view> </view>
<!-- <BottomBtn :btnArr="btnArr" @getBtnHandle="getBtnHandle"></BottomBtn> -->
</view> </view>
</template> </template>
...@@ -60,12 +34,6 @@ export default { ...@@ -60,12 +34,6 @@ export default {
return {}; return {};
} }
}, },
list: {
type: Array,
default: function () {
return [];
}
},
idx: { idx: {
type: Number, type: Number,
default: 0 default: 0
...@@ -83,15 +51,6 @@ export default { ...@@ -83,15 +51,6 @@ export default {
methods: { methods: {
deleGonds(idx) { deleGonds(idx) {
this.$emit('deleGonds',idx) this.$emit('deleGonds',idx)
},
filterQuantity() {
return this.list.filter(v => v.qrcode == this.item.qrcode).reduce((acc, cur) => acc + cur.quantity, 0)
},
filterLoss() {
return this.list.filter(v => v.qrcode == this.item.qrcode).reduce((acc, cur) => acc + cur.lossNum, 0)
},
filterSampleNum() {
return this.list.filter(v => v.qrcode == this.item.qrcode).reduce((acc, cur) => acc + cur.sampleNum, 0)
} }
} }
}; };
...@@ -142,8 +101,7 @@ page { ...@@ -142,8 +101,7 @@ page {
} }
} }
.listItemTitle { .listItemTitle {
display: flex; width: 100%;
justify-content: space-between;
padding: 20rpx; padding: 20rpx;
border-bottom: 2px solid #f8f8f8; border-bottom: 2px solid #f8f8f8;
.u-btn { .u-btn {
...@@ -152,8 +110,11 @@ page { ...@@ -152,8 +110,11 @@ page {
margin-top: 10rpx; margin-top: 10rpx;
} }
.item { .item {
width: 100%;
line-height: 50rpx; line-height: 50rpx;
color: #333; color: #333;
display: flex;
justify-content: space-between;
font-size: 28rpx; font-size: 28rpx;
font-weight: 500; font-weight: 500;
word-break: break-all; word-break: break-all;
......
...@@ -69,12 +69,12 @@ import i18n from '../../lang/index' ...@@ -69,12 +69,12 @@ import i18n from '../../lang/index'
url: '/pages/invmbinfo/Main' url: '/pages/invmbinfo/Main'
}, },
{ {
src: require('@/static/images/infor.png'), src: require('@/static/images/keyin.png'),
text: i18n.t('到货单'), text: i18n.t('采购到货'),
url: '/pages/dhd/Main' url: '/pages/dhd/Main'
}, },
{ {
src: require('@/static/images/infor.png'), src: require('@/static/images/item.png'),
text: i18n.t('销售出库'), text: i18n.t('销售出库'),
url: '/pages/saleck/Main' url: '/pages/saleck/Main'
} }
......
<template> <template>
<view> <view>
<StickyNavBar> <StickyNavBar>
<NavBar title="销售出库"></NavBar> <NavBar :title="$t('销售出库')"></NavBar>
<view class="btn"> <view class="btn">
<uni-easyinput <uni-easyinput
prefixIcon="search" prefixIcon="search"
:disabled="isDisabled" :disabled="isDisabled"
v-model="wxparams" v-model="wxparams"
:focus="isFocus" :focus="isFocus"
placeholder="请扫描单号" :placeholder="$t('请扫描单号')"
@confirm="handleConfirm" @confirm="handleConfirm"
></uni-easyinput> ></uni-easyinput>
</view> </view>
</StickyNavBar> </StickyNavBar>
<view class="cardBox"> <view class="cardBox">
<text class="cardBoxTip"> <text class="cardBoxTip">{{$t('步骤一 扫描单号')}}</text>
步骤一 扫描单号
</text>
<u-image class='cardBoxImg' :src="bgSrc" width="560rpx" height="400rpx"></u-image> <u-image class='cardBoxImg' :src="bgSrc" width="560rpx" height="400rpx"></u-image>
<view class="cardBoxTip2">{{$t('摄像头对准')}}</view>
<view class="cardBoxTip3">{{$t('出货通知单号二维码')}}</view>
<view class="cardBoxTip2"> <view class="cardBoxTip2">
摄像头对准 <text class="tipLeft">{{$t('点击扫描或')}}</text>
</view> <text class="tipRight">{{$t('点选单号')}}</text>
<view class="cardBoxTip3">
出货通知单号二维码
</view>
<view class="cardBoxTip2">
<text class="tipLeft">
点击扫描或
</text>
<text class="tipRight">
点选单号
</text>
</view> </view>
</view> </view>
</view> </view>
</template> </template>
<script> <script>
import i18n from '../../lang/index'
import StickyNavBar from '@/components/StickyNavBar/index.vue'; import StickyNavBar from '@/components/StickyNavBar/index.vue';
import ContentLoadingMore from '@/components/ContentLoadingMore/index.vue'; import ContentLoadingMore from '@/components/ContentLoadingMore/index.vue';
export default { export default {
......
...@@ -4,12 +4,12 @@ ...@@ -4,12 +4,12 @@
<view class="cardContent" v-for="(item, index) in goodsList"> <view class="cardContent" v-for="(item, index) in goodsList">
<view class="listItemTitle" @click="handleClick(item)"> <view class="listItemTitle" @click="handleClick(item)">
<view> <view>
<view class="item">产品编号:{{ item.applyNo }}</view> <view class="item">{{$t('产品编号:{0}', [ item.ml001 ])}}</view>
<!-- <view class="item">物料编号:{{ item.sapItemCode }}</view> --> <!-- <view class="item">物料编号:{{ item.sapItemCode }}</view> -->
<!-- <view class="item">物料描述:{{ item.itemName }}</view> --> <!-- <view class="item">物料描述:{{ item.itemName }}</view> -->
<view class="item">产品名称:{{ item.workunitName }}</view> <view class="item">{{$t('产品名称:{0}', [ item.materialName ])}}</view>
<view class="item">库房/储位:{{ item.materialType ? '补料': '领料' }}</view> <view class="item">{{$t('库房/储位:{0}|{1}', [ item.ml002 , item.ml003 ])}}</view>
<view class="item">库存数:{{ item.grantNum? '配货中' : '未配货' }}</view> <view class="item">{{$t('库存数:')}}{{item.ml005}}</view>
</view> </view>
</view> </view>
</view> </view>
...@@ -19,6 +19,8 @@ ...@@ -19,6 +19,8 @@
</template> </template>
<script> <script>
import i18n from '../../../lang/index'
import ContentLoadingMore from '@/components/ContentLoadingMore/index.vue'; import ContentLoadingMore from '@/components/ContentLoadingMore/index.vue';
export default { export default {
components: { components: {
...@@ -28,6 +30,9 @@ export default { ...@@ -28,6 +30,9 @@ export default {
order: { order: {
type: String type: String
}, },
currentKc: {
type: Object
}
}, },
data() { data() {
return { return {
...@@ -45,33 +50,42 @@ export default { ...@@ -45,33 +50,42 @@ export default {
status: 'loadmore' status: 'loadmore'
}; };
}, },
created() { activated() {
if(this.order) { if(this.order) {
this.getPlnr(this.order); this.getPlnr(this.order);
} }
}, },
methods: { methods: {
handleClick(item){ handleClick(item){
}, },
getPlnr(order) { getPlnr(order) {
this.totalNum = 0; this.totalNum = 0;
this.isDisabled = true; if (this.currentKc) {
this.$u.api.mesApi this.$u.api
.getforinvmlinfo({
ml001: this.currentKc.materialNo
}).then((res) => {
if (res && res.success) {
this.goodsList = res.data;
} else {
this.$u.toast(res.msg);
}
})
} else {
this.$u.api
.stockList({ .stockList({
saleOutNo: order saleOutNo: order
}) })
.then((res) => { .then((res) => {
setTimeout(() => { if (res && res.success) {
this.isDisabled = false; this.goodsList = res.data;
}, 1000);
if (res && res.code - 200 === 0) {
this.goodsList = this.goodsList.concat(res.rows);
this.total = res.total
} else { } else {
this.$u.toast(res.msg); this.$u.toast(res.msg);
} }
}); });
}
} }
} }
}; };
......
<template> <template>
<view> <view>
<view class="listItemTitle"> <view class="listItemTitle">
<view> <view @click="handleDetail(null)">
<view class="item">交货单:{{ applyNo }}</view> <view class="item">{{$t('交货单:{0}', [ applyNo ])}}</view>
</view> </view>
</view> </view>
<view class="listBottom"> <view class="listBottom">
<view class="bottomTitle"> <view class="bottomTitle">
<view class="desc">拣货明细</view> <view class="desc">{{$t('拣货明细')}}</view>
</view> </view>
<view class="bottomBox"> <view class="bottomBox">
<view class="bottomItem" v-for="(ele, idx) in goodlist" :key="ele.materialNo+idx" > <view class="bottomItem" v-for="(ele, idx) in goodlist" :key="ele.materialNo+idx" >
<view class="box-top"> <view class="box-top">
<view class="left"> <view class="left">
<view class="items">{{ ele.materialNo }}|{{ ele.materialName }}</view> <view class="items">{{ ele.materialNo }}|{{ ele.materialName }}</view>
<view class="items">计划出库日期:{{ ele.planOutDate }}</view> <view class="items">{{$t('计划出库日期:{0}', [ ele.planOutDate ])}}</view>
</view> </view>
<view class="right"> <view class="right">
<u-icon name="plus" color="#000" size="32" @click.stop="addKC(ele)"></u-icon> <u-icon name="plus" color="#000" size="32" @click="addKC(ele)"></u-icon>
<view class="items">{{outQuantity(ele.materialNo)}}/{{deliverQuantity(ele.materialNo)}}</view> <view class="items">{{outQuantity(ele.materialNo)}}/{{ele.deliverQuantity}}pcs</view>
</view> </view>
</view> </view>
<view class="detail-box"> <view class="detail-box">
<view v-for="(item, index) in list" :key="item.materialNo + '444' + index"> <template v-for="(item, index) in list">
<view class="detail-line" v-if="item.materialNo === ele.materialNo && item.outQuantity"> <view class="detail-line-wrap" v-if="item.materialNo === ele.materialNo && item.outQuantity" :key="item.materialNo + '444' + index" @click="handleDetail(item)">
<text>{{item.warehouse}}|{{item.location}}</text> <view class="detail-line">
<text style="margin-left: auto">{{item.outQuantity}}/{{item.deliverQuantity}}</text> <text>{{item.warehouse}}|{{item.location}}</text>
<text style="margin-left: auto">{{item.outQuantity}}pcs</text>
</view>
</view> </view>
</view> </template>
</view> </view>
</view> </view>
</view> </view>
</view> </view>
<u-modal :show="show" title=""> <u-modal :show="show" title="">
<uni-easyinput v-model="wxparams" placeholder="请扫描盘点条码"> <uni-easyinput v-model="wxparams" :placeholder="$t('请扫描盘点条码')">
</uni-easyinput> </uni-easyinput>
</u-modal> </u-modal>
<!-- <BottomBtn :btnArr="btnArr" @getBtnHandle="getBtnHandle"></BottomBtn> --> <BottomBtn :btnArr="btnArr" @getBtnHandle="getBtnHandle"></BottomBtn>
</view> </view>
</template> </template>
<script> <script>
import i18n from '../../../lang/index'
import StickyNavBar from '@/components/StickyNavBar/index.vue'; import StickyNavBar from '@/components/StickyNavBar/index.vue';
import ContentLoadingMore from '@/components/ContentLoadingMore/index.vue'; import ContentLoadingMore from '@/components/ContentLoadingMore/index.vue';
import BottomBtn from '@/components/BottomBtn/index.vue'; import BottomBtn from '@/components/BottomBtn/index.vue';
...@@ -64,20 +68,20 @@ export default { ...@@ -64,20 +68,20 @@ export default {
show: false, show: false,
applyNo: '', applyNo: '',
wxparams: '', wxparams: '',
list: [{good: 1, list: [{name: 1}]}], list: [],
goodlist: [], goodlist: [],
btnArr: [ btnArr: [
{ {
style: '', style: '',
type: 'warning', type: 'warning',
text: '返回', text: i18n.t('返回'),
way: 'goBack' way: 'goBack'
}, },
{ {
style: '', style: '',
type: 'primary', type: 'primary',
text: '提交', text: i18n.t('确认'),
way: 'goSubmit' way: 'goSubmit'
} }
], ],
...@@ -87,7 +91,23 @@ export default { ...@@ -87,7 +91,23 @@ export default {
}, },
computed: { computed: {
}, },
created(){ created () {
uni.$on('sendkcData', (data, info) => {
data.forEach((vvvv) => {
if (vvvv.outQuantity) {
this.list.push({
"deliverQuantity": info.deliverQuantity,
"location": vvvv.ml003,
"materialName": info.materialName,
"materialNo": info.materialNo,
"outQuantity": vvvv.outQuantity,
"planOutDate": info.planOutDate,
"unit": info.materialNo,
"warehouse": vvvv.ml002
})
}
})
});
if(this.order) { if(this.order) {
this.$u.api this.$u.api
.stockSaleOutList({ .stockSaleOutList({
...@@ -102,6 +122,7 @@ export default { ...@@ -102,6 +122,7 @@ export default {
if (index < 0){ if (index < 0){
this.goodlist.push({ this.goodlist.push({
"materialName": v.materialName, "materialName": v.materialName,
"deliverQuantity": v.deliverQuantity,
"materialNo": v.materialNo, "materialNo": v.materialNo,
"planOutDate": v.planOutDate, "planOutDate": v.planOutDate,
"unit": v.unit "unit": v.unit
...@@ -113,12 +134,43 @@ export default { ...@@ -113,12 +134,43 @@ export default {
} }
}, },
beforeDestroy() {
// 移除监听事件,防止内存泄漏
uni.$off('sendkcData');
},
methods: { methods: {
handleDetail(item){
this.$emit('kcdetail', item)
},
goBack() {
uni.navigateBack();
},
goSubmit() {
if (this.list.length === 0) {
return;
}
const arr = this.list.filter(v => v.outQuantity)
if (arr.length === 0) {
return;
}
this.$u.api.confirmStock({
applyNo: this.applyNo,
data: arr
}).then(res => {
if (res.success) {
this.$u.toast(i18n.t('保存成功'))
uni.navigateBack()
}
})
},
addKC(ele) { addKC(ele) {
uni.navigateTo({ uni.navigateTo({
url: `/pages/saleck/selectCK?info=${encodeURIComponent(JSON.stringify(ele))}` url: `/pages/saleck/selectCK?info=${encodeURIComponent(JSON.stringify(ele))}`
}); });
}, },
getBtnHandle(row) {
this[row.way]();
},
deliverQuantity(materialNo) { deliverQuantity(materialNo) {
const y = JSON.parse(JSON.stringify(this.list)) const y = JSON.parse(JSON.stringify(this.list))
const arr = y.filter(i => i.materialNo = materialNo) const arr = y.filter(i => i.materialNo = materialNo)
...@@ -127,7 +179,8 @@ export default { ...@@ -127,7 +179,8 @@ export default {
outQuantity(materialNo) { outQuantity(materialNo) {
const y = JSON.parse(JSON.stringify(this.list)) const y = JSON.parse(JSON.stringify(this.list))
const arr = y.filter(i => i.materialNo = materialNo) const arr = y.filter(i => i.materialNo = materialNo)
return isNaN(arr.reduce((pre, cur) => pre + Number(cur.outQuantity), 0)) ? 0 : arr.reduce((pre, cur) => pre + Number(cur.outQuantity), 0) const num = arr.reduce((pre, cur) => pre + (cur.outQuantity ? Number(cur.outQuantity) : 0), 0)
return isNaN(num) ? 0 : num
}, },
deleGonds(row, idx) { deleGonds(row, idx) {
this.$emit('deleGonds', row, idx); this.$emit('deleGonds', row, idx);
...@@ -249,7 +302,7 @@ page { ...@@ -249,7 +302,7 @@ page {
padding: 20rpx; padding: 20rpx;
display: flex; display: flex;
justify-content: space-between; justify-content: space-between;
border-bottom: 1px solid #d4d7dc;
.right { .right {
text-align: right; text-align: right;
} }
...@@ -257,10 +310,17 @@ page { ...@@ -257,10 +310,17 @@ page {
.detail-box { .detail-box {
padding: 20rpx; padding: 20rpx;
background: #fff; background: #fff;
}
.detail-line-wrap {
&:first-child {
border-top: 1px solid #d4d7dc;
}
} }
.detail-line { .detail-line {
background: rgb(243, 243, 245); background: rgb(243, 243, 245);
display: flex; display: flex;
padding: 0px 10rpx;
border: 1px solid #d4d7dc; border: 1px solid #d4d7dc;
height: 80rpx; height: 80rpx;
line-height: 80rpx; line-height: 80rpx;
......
...@@ -2,12 +2,16 @@ ...@@ -2,12 +2,16 @@
<view class="page"> <view class="page">
<StickyNavBar> <StickyNavBar>
<u-tabs :list="tabList" :is-scroll="false" :current="current" @change="handleTabChange"></u-tabs> <u-tabs :list="tabList" :is-scroll="false" :current="current" @change="handleTabChange"></u-tabs>
<component :is="tabList[current].comName" :order="order"></component> <keep-alive>
</StickyNavBar> <component :is="tabList[current].comName" :order="order" :currentKc="currentKc" @kcdetail="(v) => currentKc = v"></component>
</keep-alive>
</StickyNavBar>
</view> </view>
</template> </template>
<script> <script>
import i18n from '../../lang/index'
import StickyNavBar from '@/components/StickyNavBar/index.vue'; import StickyNavBar from '@/components/StickyNavBar/index.vue';
import lhmx from './components/lhmx.vue'; import lhmx from './components/lhmx.vue';
import kcmx from './components/kcmx.vue'; import kcmx from './components/kcmx.vue';
...@@ -21,11 +25,12 @@ ...@@ -21,11 +25,12 @@
return { return {
current: 0, current: 0,
order: '', order: '',
currentKc: null,
tabList: [{ tabList: [{
name: '拣货明细', name: i18n.t('拣货明细'),
comName: 'lhmx' comName: 'lhmx'
}, { }, {
name: '库存明细', name: i18n.t('库存明细'),
comName: 'kcmx' comName: 'kcmx'
}], }],
}; };
......
<template> <template>
<view class="page"> <view class="page">
<StickyNavBar> <StickyNavBar>
<NavBar title="选择库存"></NavBar> <NavBar :title="$t('选择库存')"></NavBar>
<view class="info">{{ info.materialNo }}|{{ info.materialName }}</view> <view class="info">{{ info.materialNo }}|{{ info.materialName }}</view>
</StickyNavBar> </StickyNavBar>
<ContentLoadingMore class="cardbox" :loadmore='true' :status="status" :list='goodsList'> <ContentLoadingMore class="cardbox" :loadmore='true' :list='goodsList'>
<view class="cardContent" v-for="(item, index) in goodsList"> <view class="cardContent" v-for="(item, index) in goodsList">
<view class="listItemTitle" @click="handleClick(item)"> <view class="listItemTitle" @click="handleClick(item)">
<view> <view>
<view class="item">库房/储位:{{ item.applyNo }}</view> <view class="item">{{$t('库房/储位:{0}|{1}', [ item.ml002 , item.ml003 ])}}</view>
<view class="item">库存数:{{ item.workunitName }}</view> <view class="item">{{$t('库存数:{0}pcs', [ item.ml005 ])}}</view>
<view class="item">出货数:<uni-easyinput <view class="item">{{$t('出货数:')}}<uni-easyinput
prefixIcon="search" v-model="item.outQuantity"
v-model="item.workunitName"
placeholder="" placeholder=""
></uni-easyinput></view> ></uni-easyinput></view>
</view> </view>
...@@ -24,12 +23,18 @@ ...@@ -24,12 +23,18 @@
</template> </template>
<script> <script>
import i18n from '../../lang/index'
import ContentLoadingMore from '@/components/ContentLoadingMore/index.vue';
import BottomBtn from '@/components/BottomBtn/index.vue';
import StickyNavBar from '@/components/StickyNavBar/index.vue'; import StickyNavBar from '@/components/StickyNavBar/index.vue';
import lhmx from './components/lhmx.vue'; import lhmx from './components/lhmx.vue';
import kcmx from './components/kcmx.vue'; import kcmx from './components/kcmx.vue';
export default { export default {
components: { components: {
StickyNavBar, StickyNavBar,
ContentLoadingMore,
BottomBtn,
lhmx, lhmx,
kcmx kcmx
}, },
...@@ -37,24 +42,18 @@ ...@@ -37,24 +42,18 @@
return { return {
current: 0, current: 0,
info: {}, info: {},
tabList: [{ goodsList: [],
name: '拣货明细',
comName: 'lhmx'
}, {
name: '库存明细',
comName: 'kcmx'
}],
btnArr: [ btnArr: [
{ {
style: '', style: '',
type: 'warning', type: 'warning',
text: '返回', text: i18n.t('返回'),
way: 'goBack' way: 'goBack'
}, },
{ {
style: '', style: '',
type: 'primary', type: 'primary',
text: '提交', text: i18n.t('提交'),
way: 'goSubmit' way: 'goSubmit'
} }
] ]
...@@ -64,7 +63,17 @@ ...@@ -64,7 +63,17 @@
onLoad(option) { onLoad(option) {
if (option && option.info) { if (option && option.info) {
this.info = JSON.parse(decodeURIComponent(option.info)) this.info = JSON.parse(decodeURIComponent(option.info))
this.$u.api
.getforinvmlinfo({
ml001: this.info.materialNo
}).then(({data}) => {
if (data) {
data.forEach(element => {
element['outQuantity'] = 0
});
this.goodsList = data
}
})
} }
}, },
watch: { watch: {
...@@ -83,6 +92,10 @@ ...@@ -83,6 +92,10 @@
return; return;
} }
const data = JSON.parse(JSON.stringify(this.goodsList)); const data = JSON.parse(JSON.stringify(this.goodsList));
console.log('datadatadata0', data)
uni.$emit('sendkcData', data, this.info);
uni.navigateBack();
}, },
handleTabChange(index) { handleTabChange(index) {
this.current = index; this.current = index;
...@@ -95,6 +108,11 @@ ...@@ -95,6 +108,11 @@
page { page {
background: #f8f8f8; background: #f8f8f8;
} }
.info {
height: 120rpx;
padding: 0 20rpx;
line-height: 120rpx;
}
.headerTitle { .headerTitle {
padding: 20rpx; padding: 20rpx;
...@@ -147,14 +165,14 @@ ...@@ -147,14 +165,14 @@
.cardbox { .cardbox {
min-height: calc(100vh - 480rpx); min-height: calc(100vh - 480rpx);
padding: 0rpx 20rpx; padding: 0 20rpx;
margin-top: 20rpx; margin-top: 20rpx;
} }
.cardContent { .cardContent {
border-radius: 8px; border-radius: 8px;
background: #fff; background: #fff;
margin-bottom: 20rpx; margin-top: 20rpx;
} }
.listItemTitle { .listItemTitle {
...@@ -173,7 +191,9 @@ ...@@ -173,7 +191,9 @@
line-height: 50rpx; line-height: 50rpx;
color: #333; color: #333;
font-size: 28rpx; font-size: 28rpx;
display: flex;
font-weight: 500; font-weight: 500;
align-items: center;
word-break: break-all; word-break: break-all;
font-weight: 600; font-weight: 600;
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment