Files
pad-nl-three-uni/pages/management/receive-confirm_241107.vue
2024-11-13 19:23:45 +08:00

612 lines
21 KiB
Vue
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<template>
<view class="content">
<nav-bar title="收货确认"></nav-bar>
<view class="search-confirm-wrap">
<view class="zd-row">
<view class="zd-col-24 zd-row jcflexstart">
<view class="zd-col-11"><search-box placeholder="请输入查询条件" v-model="val1" /></view>
<view class="zd-col-11 select_wraper mgl10">
<zxz-uni-data-select placeholder="请选择收货组织信息" v-model="value1" filterable :localdata="range1"></zxz-uni-data-select>
</view>
</view>
<button class="confirm-button" @tap="toSearch">查询</button>
<button class="confirm-button confirm-button_1" :class="{'confirm-button_disabled': !subCheckData.length}" @tap="showPop(3, '', '')">一键设置仓库</button>
<button class="confirm-button" :class="{'confirm-button_disabled': !subCheckData.length}" @tap="showPop(2, '', '')">库位分配</button>
<button class="confirm-button" :class="{'confirm-button_disabled': !subCheckData.length}" :disabled="disabled1" @tap="_receiptBillConfirm">收货确认</button>
</view>
</view>
<view class="zd-row jcflexstart table-title_wraper">收货确认</view>
<view class="grid-wrap">
<view class="zdrow-wrap">
<view class="zd-row sticky zd-th-wraper">
<view class="zd-col-1 zd-th"><text>序号</text></view>
<view class="zd-col-3 zd-th"><text class="fontcol1">送货单号</text></view>
<view class="zd-col-2 zd-th"><text>送货日期</text></view>
<view class="zd-col-2 zd-th"><text>提交时间</text></view>
<view class="zd-col-2 zd-th"><text>采购公司</text></view>
<view class="zd-col-2 zd-th"><text>所属厂区</text></view>
<view class="zd-col-2 zd-th"><text>供应商编码</text></view>
<view class="zd-col-2 zd-th"><text>供应商</text></view>
<view class="zd-col-2 zd-th"><text>到货日期</text></view>
<view class="zd-col-4 zd-th"><text>审核结果</text></view>
<view class="zd-col-2 zd-th">更多</view>
</view>
<view class="zd-td-wraper" v-for="(e, i) in dataList" :key="e.id">
<view class="zd-row" @tap="loadSubData(e)">
<view class="zd-col-1 zd-td"><text>{{i+1}}</text></view>
<view class="zd-col-3 zd-td fontcol1"><text>{{e.djbh}}</text></view>
<view class="zd-col-2 zd-td"><text>{{e.ywrq}}</text></view>
<view class="zd-col-2 zd-td"><text>{{e.tjsj}}</text></view>
<view class="zd-col-2 zd-td"><text>{{e.cggs}}</text></view>
<view class="zd-col-2 zd-td"><text>{{e.sscq}}</text></view>
<view class="zd-col-2 zd-td"><text>{{e.gysbm}}</text></view>
<view class="zd-col-2 zd-td"><text>{{e.gys}}</text></view>
<view class="zd-col-2 zd-td"><text>{{e.dhrq}}</text></view>
<view class="zd-col-4 zd-td"><text>{{e.shjg}}</text></view>
<view class="zd-col-2 zd-td" @tap.stop="getDetails(4,e)">
<uni-icons type="more-filled" size="14" color="#fff"></uni-icons>
</view>
</view>
<!-- 二级表格start -->
<view v-if="e.subData.length > 0" class="zd-sec-wraper pd0">
<view class="table-wrap">
<table class="grid-table">
<thead>
<tr>
<th>序号</th>
<th>
<view class="zd-row jcenter">
<view class="zd-checkbox zd-checkbox_i" :class="{'zd-checkbox_active': e.subAllChecked}" @tap="toSubAllCheckbox(e)"></view>
</view>
</th>
<th><text class="fontcol1">采购订单号</text></th>
<th>物料编码</th>
<th>物料名称</th>
<th>单位</th>
<th>订单量</th>
<th>总数</th>
<th>本次送货数量</th>
<th>收货组织</th>
<th>是否质检</th>
<th>收货数量</th>
<th>收货仓库编码</th>
<th>收货仓库名称</th>
<th>收货库位名称</th>
<th>件数</th>
<th>更多</th>
</tr>
</thead>
<tbody>
<tr v-for="(el, j) in e.subData" :key="el.id">
<td>{{j+1}}</td>
<td @tap="toSubCheckbox(e, el)">
<view class="zd-row jcenter">
<view class="zd-checkbox zd-checkbox_i" :class="{'zd-checkbox_active': el.checked}"></view>
</view>
</td>
<td><view class="underline fontcol1" @tap="showPop(1, e, el)">{{el.cgbh}}</view></td>
<td>{{el.wlbm}}</td>
<td>{{el.wlmc}}</td>
<td>{{el.jldw}}</td>
<td>{{el.ddsl}}</td>
<td>{{el.wlzs}}</td>
<td>{{el.bcshsl}}</td>
<td>{{el.zzmc}}</td>
<td>{{['否', '是'][Number(el.sfzj)]}}</td>
<td><input class="td_input" type="number" v-model="el.shsl" @blur="updateNumkw(el)" /></td>
<td @tap.stop="showPop(0, e, el)">
<view class="zd-row td_change">
<uni-icons type="shop" size="16" color="#fff"></uni-icons>
<view class="mgl10">{{el.ckbm}}</view>
</view>
</td>
<td>{{el.ckmc}}</td>
<td>{{el.kwmc}}</td>
<td>{{el.num}}</td>
<td @tap.stop="getDetails(4,el)"><uni-icons type="more-filled" size="14" color="#fff"></uni-icons></td>
</tr>
</tbody>
</table>
</view>
</view>
<!-- 二级表格end -->
</view>
</view>
<view class="zd-row jcenter pd20">
<pagination v-show="dataList.length > 0" :total="totalCount1" :page-size="queryParams1.pageSize" :current-page="currentPage1" @page-change="handlePageChange1" />
</view>
</view>
<view class="footer"></view>
<grid-detail :show="delShow" :data="detailObj" @closeDetail="delShow=false"></grid-detail>
<view class="pop-wraper" :class="{'popshow': show, 'pophide': !show}">
<view v-if="type === 0" class="allwidth pop-title">修改收货仓库</view>
<view v-if="type === 1 || type === 2" class="allwidth pop-title">分配明细</view>
<view v-if="type === 3" class="allwidth pop-title">一键设置仓库</view>
<view v-if="type === 0" class="zd-row jcenter kwcode_wraper">
<view class="zd-col-10 select_wraper">
<zxz-uni-data-select placeholder="请选择仓库名称" v-model="value2" filterable :localdata="range2"></zxz-uni-data-select>
</view>
</view>
<view v-if="type === 1 || type === 2" class="pop-grid-wraper">
<view class="zd-row sticky zd-sec-th-wraper zd-pop-th-wraper">
<view class="zd-col-2 zd-sec-th"><text>序号</text></view>
<view class="zd-col-4 zd-sec-th"><text>物料编号</text></view>
<view class="zd-col-5 zd-sec-th"><text>物料名称</text></view>
<view class="zd-col-5 zd-sec-th"><text>库位编码</text></view>
<view class="zd-col-4 zd-sec-th"><text>数量</text></view>
<view class="zd-col-4 zd-sec-th"><text>库存数量</text></view>
<view class="zd-col-4 zd-sec-th"><text>单据编号</text></view>
<view class="zd-col-4 zd-sec-th"><text>分录序号</text></view>
<view class="zd-col-4 zd-sec-th"><text>备注</text></view>
</view>
<view v-if="type === 1" class="zd-row zd-td-wraper" v-for="(ele, t) in popData" :key="ele.id">
<view class="zd-col-2 zd-sec-td zd-pop-td"><text>{{t+1}}</text></view>
<view class="zd-col-4 zd-sec-td zd-pop-td"><text>{{ele.wlbm}}</text></view>
<view class="zd-col-5 zd-sec-td zd-pop-td"><text>{{ele.wlmc}}</text></view>
<view v-if="ele.status" class="zd-col-5 zd-sec-td zd-pop-td"><text>{{ele.kwbm}}</text></view>
<view v-else class="zd-col-5 zd-sec-td zd-pop-td">
<scan-input
v-model="ele.kwbm"
/>
</view>
<view v-if="ele.status" class="zd-col-4 zd-sec-td zd-pop-td"><text>{{ele.fpsl}}</text></view>
<view v-else class="zd-col-4 zd-sec-td zd-pop-td">
<input type="number" class="pop-input" v-model="ele.fpsl">
</view>
<view class="zd-col-4 zd-sec-td zd-pop-td"><text>{{ele.kcsl}}</text></view>
<view class="zd-col-4 zd-sec-td zd-pop-td"><text>{{ele.djbh}}</text></view>
<view class="zd-col-4 zd-sec-td zd-pop-td"><text>{{ele.flxh}}</text></view>
<view class="zd-col-4 zd-sec-td zd-pop-td"><text>{{ele.bz}}</text></view>
</view>
<view v-if="type === 2" class="zd-row zd-td-wraper" v-for="(ele, t) in popData" :key="ele.id">
<view class="zd-col-2 zd-sec-td zd-pop-td"><text>{{t+1}}</text></view>
<view class="zd-col-4 zd-sec-td zd-pop-td"><text>{{ele.wlbm}}</text></view>
<view class="zd-col-5 zd-sec-td zd-pop-td"><text>{{ele.wlmc}}</text></view>
<view class="zd-col-5 zd-sec-td zd-pop-td">
<scan-input
v-model="ele.kwbm"
/>
</view>
<view class="zd-col-4 zd-sec-td zd-pop-td">
<input type="number" class="pop-input" v-model="ele.fpsl">
</view>
<view class="zd-col-4 zd-sec-td zd-pop-td"><text>{{ele.kcsl}}</text></view>
<view class="zd-col-4 zd-sec-td zd-pop-td"><text>{{ele.djbh}}</text></view>
<view class="zd-col-4 zd-sec-td zd-pop-td"><text>{{ele.flxh}}</text></view>
<view class="zd-col-4 zd-sec-td zd-pop-td"><text>{{ele.bz}}</text></view>
</view>
</view>
<view v-if="type === 3" class="kwcode_wraper">
<view class="zd-row jcenter">
<view class="zd-col-3 pop_label">收货仓库</view>
<view class="zd-col-10 select_wraper">
<zxz-uni-data-select placeholder="请选择仓库名称" v-model="value2" filterable :localdata="range2"></zxz-uni-data-select>
</view>
</view>
</view>
<view class="mgb20 zd-row jcenter">
<view class="zd-col-10 zd-row">
<button class="confirm-button confirm-button_cancle mgl0" @tap="show = false">取消</button>
<button v-show="type === 0" class="confirm-button mgl0" @tap="modalConfirm">确定</button>
<button v-show="type === 1" class="confirm-button mgl0" :class="{'confirm-button_disabled': popData.length === 0}" :disabled="popdisabled" @tap="_updateAssignDtl">确定</button>
<button v-show="type === 2" class="confirm-button mgl0" :class="{'confirm-button_disabled': popData.length === 0}" :disabled="popdisabled" @tap="_stIvtaddAssignDtl">确定</button>
<button v-show="type === 3" class="confirm-button mgl0" @tap="_receiptBillDetailSetStor">确定</button>
</view>
</view>
</view>
<view v-if="show" class="modal" @click.stop="show = false"></view>
</view>
</template>
<script>
import NavBar from '@/components/NavBar.vue'
import SearchBox from '@/components/SearchBox.vue'
import ScanInput from '@/components/ScanInput.vue'
import Pagination from '@/components/Pagination.vue'
import GridDetail from '@/components/GridDetail.vue'
// import {getOrganizationInfo, getWarehouseInfo, receiptPage, receiptBillDetailPage, viewAssignDtl, warehouseAssignLocation} from '@/utils/mork2.js'
// import {updateAssignDtl, receiptBillDetailUpdate, receiptBillDetailSetStor, stIvtaddAssignDtl, receiptBillConfirm} from '@/utils/getData2.js'
import {getOrganizationInfo, getWarehouseInfo, receiptPage, receiptBillDetailPage, viewAssignDtl, warehouseAssignLocation, updateAssignDtl, receiptBillDetailUpdate, receiptBillDetailSetStor, stIvtaddAssignDtl, receiptBillConfirm} from '@/utils/getData2.js'
export default {
components: {
NavBar,
SearchBox,
ScanInput,
Pagination,
GridDetail
},
data() {
return {
val1: '', // 模糊查询
value1: '', // 收货组织信息
range1: [],
totalCount1: 0, // 分页
queryParams1:{
pageSize: 10,
pageNum: 1
},
currentPage1: 1,
dataList: [], // 一级表格数据
subCheckData: [], // 二级表格多选数组
popData: [], // 二级表格点击物料编码弹出弹窗
popdisabled: false,
popObj: {}, // 弹窗当前主表格内容
show: false, // 弹窗显示布尔值
type: '', // 弹窗类型
delShow: false, // 详情弹窗布尔值
detailObj: {}, // 详情弹窗
disabled1: false,
value2: '', // 收货仓库信息
range2: []
};
},
onLoad () {
this.toSearch()
},
methods: {
// 组织信息下拉框
async _getOrganizationInfo () {
let res = await getOrganizationInfo()
if (res.code === 1) {
this.range1 = [...res.result]
this.range1.map(e => {
this.$set(e, 'text', e.kczzmc)
this.$set(e, 'value', e.kczzbm)
})
}
},
// 仓库下拉框
async _getWarehouseInfo () {
let res = await getWarehouseInfo()
if (res.code === 1) {
this.range2 = [...res.result]
this.range2.map(e => {
this.$set(e, 'text', e.ckmc)
this.$set(e, 'value', e.ckbm)
})
}
},
// 查询一级表格
toSearch () {
this.queryParams1 = {
pageSize: 10,
pageNum: 1
}
this.currentPage1 = 1
this.pkId = ''
this._receiptPage()
},
// 一级表格接口
async _receiptPage () {
let res = await receiptPage(this.val1, this.value1, this.queryParams1.pageNum + '', this.queryParams1.pageSize + '')
if (res.code === 1) {
res.result.map(el => {
this.$set(el, 'checked', false)
this.$set(el, 'subData', [])
this.$set(el, 'subAllChecked', false)
})
this.dataList = [...res.result]
this.totalCount1 = Number(res.totalElements)
this.queryParams1.pageSize = Number(res.pageSize)
this.queryParams1.pageNum = Number(res.pageNum)
} else {
uni.showToast({
title: res.desc,
icon: 'none'
})
}
this._getWarehouseInfo()
this._getOrganizationInfo()
},
// 一级表格切换分页
handlePageChange1(page) {
this.queryParams1.pageNum = page
this.currentPage1 = page
this.subCheckData = []
this._receiptPage()
},
// 点击一级表格一行加载二级表格
loadSubData (e) {
this.subCheckData = this.subCheckData.filter(item1 => !e.subData.some(item2 => item2.id === item1.id))
if (e.subData.length > 0) {
e.subData = []
} else if (e.subData.length === 0) {
this._receiptBillDetailPage(e)
}
e.subAllChecked = false
},
// 二级表格接口
async _receiptBillDetailPage (e) {
let res = await receiptBillDetailPage(this.val1, e.djid, '1', '200')
if (res.code === 1) {
res.result.map(el => {
this.$set(el, 'subChecked', false)
})
this.dataList.map(el => {
if (el.djid === e.djid) {
el.subData = [...res.result]
}
})
} else {
uni.showToast({
title: res.desc,
icon: 'none'
})
}
},
// 二级表格全选
toSubAllCheckbox (e) {
e.subAllChecked = !e.subAllChecked
e.subData.map(el => {
el.checked = e.subAllChecked
})
if (e.subAllChecked) {
this.subCheckData = this.subCheckData.concat(e.subData)
for (let i = 0; i < this.subCheckData.length; i++) {
for (let j = i + 1; j < this.subCheckData.length; j++) {
if (this.subCheckData[i].id === this.subCheckData[j].id) {
this.subCheckData.splice(j, 1)
j--
}
}
}
} else if (!e.subAllChecked) {
this.subCheckData = this.subCheckData.filter(item1 => !e.subData.some(item2 => item2.id === item1.id))
}
},
// 二级表格多选
toSubCheckbox (e,el) {
if (el.checked) {
this.$set(el, 'checked', false)
this.subCheckData = this.subCheckData.filter(item => item.id !== el.id)
} else if (!el.checked) {
this.$set(el, 'checked', true)
this.subCheckData.push(el)
}
let arr = e.subData.filter(ele => ele.checked === true)
e.subAllChecked = arr.length === e.subData.length
},
showPop (type, e, obj) {
this.type = type
if (type === 0) { // 修改二级表格单行收货仓库
this.show = true
this.popObj = {id: e.djid, iid: obj.id}
} else if (type === 1) { // 点击二级表格行中的物料编号显示弹窗
this._viewAssignDtl(e, obj)
} else if (type === 2) { // 点击库位分配按钮显示弹窗
if (!this.subCheckData.length) return
this._warehouseAssignLocation()
} else if (type === 3) { // 点击一键设置仓库按钮
if (!this.subCheckData.length) return
this.show = true
}
},
// 点击二级表格行中的物料编号,弹窗加载表格
async _viewAssignDtl (e, obj) {
let res = await viewAssignDtl(obj)
if (res.code ===1) {
this.popData = [...res.result]
this.sortArr(this.popData)
this.popObj = e
this.show = true
} else {
uni.showToast({
title: res.desc,
icon: 'none'
})
}
},
// 按单据编号排序,单据编号相同按照分录序号排序
sortArr (arr) {
arr.sort((a, b) => {
if (a.djbh !== b.djbh) {
return a.djbh < b.djbh ? -1 : 1
} else {
return a.flxh < b.flxh ? -1 : 1
}
})
},
// 点击二级表格行中的物料编号,弹窗加载表格 -> 点击确定按钮
async _updateAssignDtl () {
this.popdisabled = true
if (this.popData.length === 0) {
this.popdisabled = false
return
}
try {
let res = await updateAssignDtl(this.popData)
if (res.code === 1) {
this.show = false
this._receiptBillDetailPage(this.popObj)
}
uni.showToast({
title: res.desc,
icon: 'none'
})
this.popdisabled = false
} catch (e) {
this.popdisabled = false
}
},
// 分配库位弹窗表格
async _warehouseAssignLocation () {
let res = await warehouseAssignLocation(this.subCheckData)
if (res.code ===1) {
this.popData = [...res.result]
this.sortArr(this.popData)
this.show = true
} else {
uni.showToast({
title: res.desc,
icon: 'none'
})
}
},
// 修改二级表格单行收货数量
updateNumkw (e) {
let arr = []
arr.push(e)
this._receiptBillDetailUpdate(arr)
},
// 修改调出仓库确定
modalConfirm () {
if (this.value2 === '') {
uni.showToast({
title: '请设置收货仓库',
icon: 'none'
})
return
}
let mc = ''
this.range2.map(el => {
if (el.value === this.value2) {
mc = el.text
}
})
let arr = []
this.dataList.map(e => {
if (e.djid === this.popObj.id) {
e.subData.map(el => {
if (el.id === this.popObj.iid) {
el.ckbm = this.value2
el.ckmc = mc
arr.push(el)
this.show = false
this._receiptBillDetailUpdate(arr)
}
})
}
})
},
// 二级表格单行收货数量和收货仓库接口
async _receiptBillDetailUpdate (e) {
try {
let res = await receiptBillDetailUpdate(e)
if (res.code === 1) {
uni.showToast({
title: res.desc,
icon: 'none'
})
} else {
uni.showToast({
title: res.desc,
icon: 'none'
})
}
this.value2 = ''
} catch (e) {
console.log(e)
}
},
// 一键设置仓库弹窗确定按钮
async _receiptBillDetailSetStor () {
if (this.value2 === '') {
uni.showToast({
title: '请设置收货仓库',
icon: 'none'
})
return
}
this.show = false
try {
let res = await receiptBillDetailSetStor(this.value2, this.subCheckData)
uni.showToast({
title: res.desc,
icon: 'none'
})
} catch (e) {
console.log(e)
}
},
// 分配库位弹窗表格 -> 点击确定按钮
async _stIvtaddAssignDtl () {
this.popdisabled = true
if (this.popData.length === 0) {
this.popdisabled = false
return
}
try {
let res = await stIvtaddAssignDtl(this.popData)
if (res.code === 1) {
this.show = false
this.checkData = []
this.subCheckData = []
this._receiptPage()
}
uni.showToast({
title: res.desc,
icon: 'none'
})
this.popdisabled = false
} catch (e) {
this.popdisabled = false
}
},
// 点击收货确认按钮
async _receiptBillConfirm () {
this.disabled1 = true
if (!this.subCheckData.length) {
this.disabled1 = false
return
}
try {
let res = await receiptBillConfirm(this.subCheckData)
if (res.code === 1) {
this.disabled1 = false
this.checkData = []
this.subCheckData = []
this._receiptPage()
} else {
this.disabled1 = false
uni.showToast({
title: res.desc,
icon: 'none'
})
}
} catch (e) {
this.disabled1 = false
}
},
// 详情弹窗
getDetails (type,e) {
this.delShow = !this.delShow
this.detailObj = {type: type, data:e}
}
}
}
</script>
<style lang="stylus" scoped>
@import '../../common/style/mixin.styl';
.confirm-button_1
min-width 100px
.select_wraper
/deep/ .uni-select__input-box
height 30px
/deep/ .uni-select__selector
z-index 11
/deep/ .uni-select
height: 30px;
min-height: 30px;
line-height: 30px;
padding: 0 2px 0 12px;
border: 1px solid #4980bd;
background-color: rgba(45,88,184,0.1);
border-radius: 6px;
/deep/ .uni-select__input-placeholder, /deep/ .uni-select__input-text
font-size 13px
/deep/ .uni-select__selector
background-color #071F3E
border-color #0c3162
/deep/ .uni-popper__arrow
border-bottom-color #0c3162
&:after
border-bottom-color #071F3E
/deep/ .uni-select__selector-item
color #fff
.zd-th
font-size: 12px;
line-height: 13px;
height: 36px;
</style>