拷贝铜箔手持

This commit is contained in:
2024-02-01 13:55:27 +08:00
commit 076e6bfc76
145 changed files with 22312 additions and 0 deletions

View File

@@ -0,0 +1,325 @@
<template>
<view class="zd_container">
<nav-bar :inner2="true" @goIn="goIn" title="盘点明细"></nav-bar>
<view class="zd_content">
<view class="zd_wrapper">
<view class="filter_item">
<view class="filter_label_wraper">
<span class="filter_label">木箱</span>
</view>
<view class="filter_input_wraper">
<search-box
v-model="val1"
:focused="focusedStatus"
@handleChange="handleChange"
/>
</view>
</view>
<view class="filter_item">
<view class="filter_label">已盘点数</view>
<view class="filter_input_wraper">
<input type="text" class="filter_input" v-model="val2" disabled>
</view>
</view>
<view class="filter_item">
<view class="filter_label">未盘点数</view>
<view class="filter_input_wraper">
<input type="text" class="filter_input" v-model="val3" disabled>
</view>
</view>
</view>
<view class="zd_wrapper grid-wraper">
<view class="slide_new">
<table>
<thead>
<tr>
<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>盘点时间</th>
<th>单据号</th>
</tr>
</thead>
<tbody>
<tr v-for="(el, i) in dataList" :key="i" :class="{'checked': el.checked}">
<td><span class="iconfont icon_unchecked" :class="{'icon_checked': el.checked}" @tap="toCheck(el)">&#xe66b;</span></td>
<td style="text-decoration: underline;" @tap="toXq(el.storagevehicle_code)"><a>{{el.storagevehicle_code}}</a></td>
<td>{{el.status}}</td>
<td>{{el.net_qty}}</td>
<!-- <td>{{el.base_qty}}</td>
<td><input type="number" class="sin_input" :min="0" v-model="el.fac_qty" @blur="e => {if (e.target.value === '') {el.fac_qty=0}}" v-enter-number></td> -->
<td>{{el.sect_name}}</td>
<td>{{el.struct_name}}</td>
<td>{{el.material_code}}</td>
<td>{{el.material_name}}</td>
<td @tap="toRemark(el)"><input type="text" class="sin_input" v-model="el.remark"></td>
<td>{{el.quanlity_in_box}}</td>
<td>{{el.check_result}}</td>
<td>{{el.check_optname}}</td>
<td>{{el.check_time}}</td>
<td>{{el.check_code}}</td>
</tr>
</tbody>
</table>
</view>
</view>
</view>
<view class="submit-bar">
<!-- <button class="submit-button" :class="{'btn-disabled': !dataList.length}" :disabled="disabled1" @tap="_saveCheck">保存</button> -->
<!-- <button class="submit-button" :class="{'btn-disabled': !dataList.length}" :disabled="disabled1" @tap="_confirmCheck">确认</button> -->
<button class="submit-button" :class="{'btn-disabled': !dataList.length}" :disabled="disabled1" @tap="_checkexception">异常</button>
<button class="submit-button" :class="{'btn-disabled': !dataList.length}" :disabled="disabled1" @tap="_checknormal">正常</button>
<button class="submit-button" @tap="_checkQueryDtl(checkCode, val1)">查询</button>
</view>
<view v-show="modelShow" class="msg_wrapper">
<view class="msg_box">
<view class="msg_item">
<view class="filter_label">备注</view>
<view class="filter_input_wraper">
<input type="text" class="msg_input" v-model="val0">
</view>
</view>
<view class="msg_btns">
<button class="submit-button" @tap="toSurerk">确定</button>
</view>
</view>
</view>
<view v-show="modelShow" class="mask"></view>
</view>
</template>
<script>
import NavBar from '@/components/NavBar.vue'
import SearchBox from '@/components/SearchBox.vue'
import {checkQueryDtl, checkexception, checknormal} from '@/utils/getData1.js'
export default {
components: {
NavBar,
SearchBox
},
data() {
return {
focusedStatus: true,
modelShow: false,
value: '1',
val0: '',
val1: '',
val2: '',
val3: '',
checkCode: '',
dataList: [],
// dataList : [{
// checked: false,
// storagevehicle_code: '1',
// status: '1',
// net_qty: '1',
// sect_name: '1',
// struct_name: '1',
// material_code: '1',
// material_name: '1',
// remark: '3342',
// }],
checkArr: [],
disabled1: false,
obj: {}
};
},
created () {
},
onLoad (option) {
this.checkCode = option.checkcode
// this._checkQueryDtl()
},
methods: {
goIn () {
uni.navigateTo({
url: `/pages/WarehouseManage/CheckList`
})
},
handleChange (e) {
this._checkQueryDtl(e)
},
toRemark (e) {
this.val0 = e.remark
this.obj = e
this.modelShow = true
},
toSurerk () {
this.modelShow = false
this.dataList.map(el => {
if (this.obj.storagevehicle_code === el.storagevehicle_code) {
el.remark = this.val0
}
})
},
toXq (code) {
uni.navigateTo({
url: '/pages/WarehouseManage/Details?storagevehicle_code=' + code + '&checkcode=' + this.checkCode
})
},
toCheck (e) {
e.checked = !e.checked
this.checkArr = this.dataList.filter(i => { return i.checked === true })
},
/** 初始化查询 */
async _checkQueryDtl () {
let res = await checkQueryDtl(this.checkCode, this.val1)
this.val2 = res.check_num
this.val3 = res.uncheck_num
res.data.map(el => {
this.$set(el, 'checked', false)
})
this.dataList = [...res.data]
},
async _checkexception () {
this.disabled1 = true
try {
let res = await checkexception(this.checkArr, this.checkCode)
this.disabled1 = false
this.checkArr = []
this.dataList = []
this.obj = {}
this.val0 = ''
this.val1 = ''
this.val2 = ''
this.val3 = ''
this.focusedStatus = true
uni.showToast({
title: res.message,
icon: 'none'
})
} catch (e) {
this.disabled1 = false
}
},
async _checknormal () {
this.disabled1 = true
try {
let res = await checknormal(this.checkArr, this.checkCode)
this.disabled1 = false
this.checkArr = []
this.dataList = []
this.obj = {}
this.val0 = ''
this.val1 = ''
this.val2 = ''
this.val3 = ''
this.focusedStatus = true
uni.showToast({
title: res.message,
icon: 'none'
})
} catch (e) {
this.disabled1 = false
}
}
}
}
</script>
<style lang="stylus" scoped>
.zd_content
padding-bottom 77rpx
// .slide_new table td:nth-child(1), .slide_new table th:nth-child(1)
// box-shadow 1px 0 2px rgba(0,0,0,.12)
// .slide_new table td:first-child, .slide_new table th:first-child
// width 92rpx
// // .slide_new table td:nth-child(2), .slide_new table th:nth-child(2)
// // position sticky
// // left 89rpx
// // z-index 102
// // box-shadow 1px 0 2px rgba(0,0,0,.12)
.msg_wrapper
position fixed
top 0
bottom 0
left 0
right 0
text-align center
z-index 10000
&::after
content ""
display inline-block
height 100%
width 0
vertical-align middle
.msg_box
display inline-block
width calc(100% - 30rpx)
padding 30rpx
vertical-align middle
background-color #fff
border-radius 8rpx
border 1px solid #ebeef5
font-size 36rpx
box-shadow 0 2px 12px 0 rgb(0 0 0 / 10%)
text-align left
overflow hidden
backface-visibility hidden
.buttonbox
width 100px
height 30px
margin-top 20px
margin 0 auto
.mask
position fixed
top 0
left 0
width 100%
height 100%
opacity .6
background #000
z-index 9999
.msg_item
display flex
justify-content: space-between
align-items: center
width 100%
height 80rpx
line-height 80rpx
margin 0 auto
margin-bottom 14rpx
.label_item
display inline-block
width 180rpx
font-size 32rpx
line-height inherit
color #606266
.from_item
display inline-block
width calc(100% - 200rpx)
line-height inherit
.msg_input
width 100%
height 80rpx
padding 0 30rpx
border-radius 4px
border 1px solid #DCDFE6
font-size 28rpx
line-height 80rpx
color #606266
.msg_btns
width 600rpx
height 70rpx
line-height 70rpx
margin 40rpx auto 0
display flex
justify-content: center
align-items: center
.submit-bar
justify-content space-around
.submit-button
margin-left 20rpx
margin-right 20rpx
</style>

View File

@@ -0,0 +1,120 @@
<template>
<view class="zd_container">
<nav-bar title="盘点管理"></nav-bar>
<view class="zd_content">
<view class="zd_wrapper">
<view class="filter_item">
<view class="filter_label">单据编码</view>
<view class="filter_input_wraper">
<input type="text" class="filter_input" v-model="val1">
</view>
</view>
<view class="filter_item">
<view class="filter_label">仓库</view>
<view class="filter_input_wraper">
<uni-data-select v-model="index" :localdata="options" @change="selectChange"></uni-data-select>
</view>
</view>
</view>
<view class="zd_wrapper grid-wraper">
<view class="slide_new">
<table>
<thead>
<tr>
<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="(e, i) in dataList" :key="i" @click="toCheck(e)" :class="{'checked': e.check_code === pkId}">
<td>{{e.check_code}}</td>
<td>{{e.check_type}}</td>
<td>{{e.stor_name}}</td>
<td>{{e.dtl_num}}</td>
<td>{{e.status}}</td>
<td>{{e.is_nok}}</td>
<td>{{e.input_optname}}</td>
<td>{{e.input_time}}</td>
<td>{{e.confirm_optname}}</td>
<td>{{e.confirm_time}}</td>
</tr>
</tbody>
</table>
</view>
</view>
</view>
<view class="submit-bar">
<button class="submit-button" :class="{'btn-disabled': !pkId}" :disabled="disabled1" @tap="toPandian">盘点</button>
<button class="submit-button" @tap="_checkQuery">查询</button>
</view>
</view>
</template>
<script>
import NavBar from '@/components/NavBar.vue'
import {checkQuery, checkgetStor} from '@/utils/getData1.js'
export default {
components: {
NavBar,
},
data() {
return {
val1: '',
dataList: [],
pkId: '',
pkObj: {},
options: [],
index: '1582991156504039424', // 默认兰州仓库
disabled1: false
};
},
created () {
this._checkgetStor()
this._checkQuery()
},
methods: {
/** 初始化查询 */
async _checkQuery () {
let res = await checkQuery(this.val1, this.index)
this.dataList = [...res.data]
},
/** 选择器 */
selectChange(e) {
this.index = e
},
/** 仓库下拉框查询 */
async _checkgetStor () {
let res = await checkgetStor()
this.options = [...res.data]
},
toPandian () {
if (this.pkId) {
uni.navigateTo({
url: '/pages/WarehouseManage/CheckDtl?checkcode=' + this.pkObj.check_code + '&checknum=' + this.pkObj.check_num + '&unchecknum=' + this.pkObj.uncheck_num
})
}
},
toCheck (e) {
this.pkId = this.pkId === e.check_code ? '' : e.check_code
this.pkObj = this.pkId === e.check_code ? e : {}
}
}
}
</script>
<style lang="stylus">
.zd_content
padding-bottom 77rpx
.slide_new table td:nth-child(1), .slide_new table th:nth-child(1)
box-shadow 1px 0 2px rgba(0,0,0,.12)
.bgyellow td
background-color #E9B451
</style>

View File

@@ -0,0 +1,125 @@
<template>
<view class="zd_container">
<nav-bar title="客户标签打印"></nav-bar>
<view class="zd_content">
<view class="zd_wrapper">
<view class="filter_item">
<view class="filter_label_wraper">
<span class="filter_label">木箱</span>
</view>
<view class="filter_input_wraper">
<search-box
v-model="val1"
:focused="true"
@handleChange="handleChange"
/>
</view>
</view>
</view>
<view class="zd_wrapper grid-wraper">
<view class="slide_new">
<table>
<thead>
<tr>
<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="(e, i) in dataList" :key="i">
<td>{{e.package_box_sn}}</td>
<td>{{e.quanlity_in_box}}</td>
<td>{{e.box_weight}}</td>
<td>{{e.sale_order_name}}</td>
<td>{{e.product_name}}</td>
<td>{{e.product_description}}</td>
<td>{{e.width}}</td>
<td>{{e.container_name}}</td>
<td>{{e.net_weight}}</td>
<td>{{e.date_of_FG_inbound}}</td>
<td>{{e.date_of_production}}</td>
</tr>
</tbody>
</table>
</view>
</view>
</view>
<view class="submit-bar">
<button class="submit-button" :class="{'btn-disabled': !val1}" :disabled="disabled2" @tap="_customerPrint">打印</button>
<button class="submit-button" @tap="_customerInfo(val1)">查询</button>
</view>
</view>
</template>
<script>
import NavBar from '@/components/NavBar.vue'
import SearchBox from '@/components/SearchBox.vue'
import {customerInfo, customerPrint} from '@/utils/getData2.js'
export default {
components: {
NavBar,
SearchBox
},
data() {
return {
val1: '',
dataList: [],
disabled1: false,
disabled2: false
};
},
methods: {
handleChange (e) {
this._customerInfo(e)
},
/** 查询 */
async _customerInfo (e) {
if (!this.val1) {
uni.showToast({
title: '请扫木箱码',
icon: 'none'
})
return
}
let res = await customerInfo(e)
this.dataList = [...res.data]
},
/** 打印 */
async _customerPrint () {
this.disabled2 = true
if (!this.val1) {
uni.showToast({
title: '请扫木箱码',
icon: 'none'
})
this.disabled2 = false
return
}
try {
let res = await customerPrint(this.val1, this.$store.getters.setPrintName)
this.disabled2 = false
this.val1 = ''
uni.showToast({
title: res.message,
icon: 'none'
})
} catch (e) {
this.disabled2 = false
}
},
}
}
</script>
<style lang="stylus">
</style>

View File

@@ -0,0 +1,103 @@
<template>
<view class="zd_container">
<nav-bar :inner2="true" @goIn="goIn" title="详情信息"></nav-bar>
<view class="zd_content">
<view class="zd_wrapper grid-wraper">
<view class="slide_new">
<table>
<thead>
<tr>
<th>子卷号</th>
<th>sap批次</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, i) in dataList" :key="i">
<td>{{el.container_name}}</td>
<td>{{el.sap_pcsn}}</td>
<td>{{el.net_weight}}</td>
<td>{{el.status}}</td>
<td>{{el.sale_order_name}}</td>
<td>{{el.customer_name}}</td>
<td>{{el.customer_description}}</td>
<td>{{el.width}}</td>
<td>{{el.thickness}}</td>
<td>{{el.length}}</td>
<td>{{el.width_standard}}</td>
<td>{{el.thickness_request}}</td>
<td>{{el.quality_guaran_period}}</td>
<td>{{el.date_of_production}}</td>
<td>{{el.date_of_fg_inbound}}</td>
</tr>
</tbody>
</table>
</view>
</view>
</view>
<view class="submit-bar">
<!-- <button class="submit-button" :class="{'btn-disabled': !dataList.length}" :disabled="disabled1" @tap="_saveCheck">保存</button> -->
</view>
</view>
</template>
<script>
import NavBar from '@/components/NavBar.vue'
import {checkQueryDetails} from '@/utils/getData1.js'
export default {
components: {
NavBar,
},
data() {
return {
checkCode: '',
storagevehicleCode: '',
dataList: [],
disabled1: false
};
},
created () {
},
onLoad (option) {
this.checkCode = option.checkcode
this.storagevehicleCode = option.storagevehicle_code
this._checkQueryDetails()
},
methods: {
goIn () {
uni.navigateTo({
url: `/pages/WarehouseManage/CheckDtl`
})
uni.navigateTo({
url: '/pages/WarehouseManage/CheckDtl?checkcode=' + this.checkCode
})
},
/** 初始化查询 */
async _checkQueryDetails () {
let res = await checkQueryDetails(this.storagevehicleCode)
this.dataList = [...res.data]
}
}
}
</script>
<style lang="stylus">
.zd_content
padding-bottom 77rpx
.slide_new table td:nth-child(1), .slide_new table th:nth-child(1)
box-shadow 1px 0 2px rgba(0,0,0,.12)
.bgyellow td
background-color #E9B451
</style>

View File

@@ -0,0 +1,74 @@
<template>
<view class="zd_container">
<nav-bar title="空载具入库"></nav-bar>
<view class="zd_content">
<view class="zd_wrapper">
<view class="filter_item">
<view class="filter_label_wraper">
<span class="filter_label">站点码</span>
</view>
<view class="filter_input_wraper">
<search-box v-model="val1" />
</view>
</view>
<view class="filter_item">
<view class="filter_label_wraper">
<span class="filter_label">载具码</span>
</view>
<view class="filter_input_wraper">
<search-box v-model="val2" />
</view>
</view>
</view>
</view>
<view class="submit-bar">
<button class="submit-button" :class="{'btn-disabled': !val1 || !val2}" :disabled="disabled1" @tap="_emptyVehiclepointOperate">入库</button>
</view>
</view>
</template>
<script>
import NavBar from '@/components/NavBar.vue'
import SearchBox from '@/components/SearchBox.vue'
import {emptyVehiclepointOperate} from '@/utils/getData1.js'
export default {
components: {
NavBar,
SearchBox
},
data() {
return {
val1: '',
val2: '',
disabled1: false
};
},
methods: {
handleChange (e) {
console.log(e)
},
async _emptyVehiclepointOperate () {
this.disabled1 = true
if (!this.val1 || !this.val2) {
this.disabled1 = false
return
}
try {
let res = await emptyVehiclepointOperate(this.val1, this.val2, '1')
uni.showToast({
title: res.message,
icon: 'none'
})
this.val1 = ''
this.val2 = ''
this.disabled1 = false
} catch (e) {
this.disabled1 = false
}
}
}
}
</script>
<style lang="stylus">
</style>

View File

@@ -0,0 +1,82 @@
<template>
<view class="zd_container">
<nav-bar title="空载具出库"></nav-bar>
<view class="zd_content">
<view class="zd_wrapper">
<view class="filter_item">
<view class="filter_label_wraper">
<span class="filter_label">站点码</span>
</view>
<view class="filter_input_wraper">
<search-box v-model="val1" @handleChange="handleChange1"/>
</view>
</view>
<view class="filter_item">
<view class="filter_label_wraper">
<span class="filter_label">载具码</span>
</view>
<view class="filter_input_wraper">
<search-box v-model="val2" />
</view>
</view>
</view>
</view>
<view class="submit-bar">
<button class="submit-button" :class="{'btn-disabled': !val1 || !val2}" :disabled="disabled1" @tap="_emptyVehiclepointOperate">出库</button>
</view>
</view>
</template>
<script>
import NavBar from '@/components/NavBar.vue'
import SearchBox from '@/components/SearchBox.vue'
import {emptyVehiclepointOperate, emptyVehiclepointStatusQuery} from '@/utils/getData1.js'
export default {
components: {
NavBar,
SearchBox
},
data() {
return {
val1: '',
val2: '',
disabled1: false
};
},
methods: {
handleChange1 (e) {
this._emptyVehiclepointStatusQuery(e)
},
/** 1.2点位状态查询 */
async _emptyVehiclepointStatusQuery (val1) {
if (!val1) {
return
}
let res = await emptyVehiclepointStatusQuery(val1)
this.val2 = res.data.vehicle_code
},
async _emptyVehiclepointOperate () {
this.disabled1 = true
if (!this.val1 || !this.val2) {
this.disabled1 = false
return
}
try {
let res = await emptyVehiclepointOperate(this.val1, this.val2, '0')
uni.showToast({
title: res.message,
icon: 'none'
})
this.val1 = ''
this.val2 = ''
this.disabled1 = false
} catch (e) {
this.disabled1 = false
}
}
}
}
</script>
<style lang="stylus">
</style>

View File

@@ -0,0 +1,80 @@
<template>
<view class="zd_container">
<nav-bar title="异常出库解锁"></nav-bar>
<view class="zd_content">
<view class="zd_wrapper">
<view class="filter_item">
<view class="filter_label_wraper">
<span class="filter_label">木箱</span>
</view>
<view class="filter_input_wraper">
<search-box v-model="val1" :focused="true" @handleChange="handleChange1"
/>
</view>
</view>
<view class="filter_item">
<view class="filter_label_wraper">
<span class="filter_label">点位</span>
</view>
<view class="filter_input_wraper">
<search-box v-model="val2" @handleChange="handleChange2" />
</view>
</view>
</view>
</view>
<view class="submit-bar">
<button class="submit-button" :class="{'btn-disabled': !val1 && !val2}" :disabled="disabled1" @tap="_abnormalOut">解锁</button>
</view>
</view>
</template>
<script>
import NavBar from '@/components/NavBar.vue'
import SearchBox from '@/components/SearchBox.vue'
import {abnormalOut} from '@/utils/getData1.js'
export default {
components: {
NavBar,
SearchBox
},
data() {
return {
val1: '',
val2: '',
disabled1: false
};
},
methods: {
handleChange1 (e) {
},
handleChange2 (e) {
},
async _abnormalOut () {
this.disabled1 = true
if (!this.val1 && !this.val2) {
this.disabled1 = false
return
}
try {
let res = await abnormalOut(this.val1, this.val2)
this.disabled1 = false
uni.showToast({
title: res.message,
icon: 'none'
})
} catch (e) {
this.disabled1 = false
}
}
}
}
</script>
<style lang="stylus">
.zd_content
padding-bottom 77rpx
.slide_new table td:nth-child(1), .slide_new table th:nth-child(1)
box-shadow 1px 0 2px rgba(0,0,0,.12)
.bgyellow td
background-color #E9B451
</style>

View File

@@ -0,0 +1,210 @@
<template>
<view class="zd_container">
<nav-bar title="生产入库"></nav-bar>
<view class="zd_content">
<view class="zd_wrapper">
<view class="filter_item">
<view class="filter_label_wraper">
<span class="filter_label">木箱</span>
</view>
<view class="filter_input_wraper">
<search-box-mx :focused="focused" @inputDel="inputDel" @inputScan="inputScan" @toPhone="toPhone">
<input type="text" class="filter_input search_input" v-model="val1" :focus="focused" @input="onKeyInput" @focus="onFocus" @blur="onBlur">
</search-box-mx>
</view>
</view>
<view class="filter_item">
<view class="filter_label_wraper">
<span class="filter_label">点位</span>
</view>
<view class="filter_input_wraper">
<search-box
v-model="val2"
/>
</view>
</view>
<view class="filter_item">
<view class="filter_label_wraper">
<span class="filter_label filter_label_1"></span>
</view>
<view class="filter_input_wraper filter_input_wraper_1">
<view class="iconfont icon_unchecked" :class="{'icon_checked': isV === '1'}" @tap="isVirtual">&#xe66b;</view>
<view class="filter_input_wraper_inn_text">虚拟库</view>
</view>
</view>
<view v-show="isV === '1'" class="filter_item">
<view class="filter_label">库区</view>
<view class="filter_input_wraper">
<uni-data-select v-model="index1" :localdata="options1" @change="selectChange1"></uni-data-select>
</view>
</view>
</view>
<view class="zd_wrapper grid-wraper">
<view class="slide_new">
<table>
<thead>
<tr>
<th>木箱码</th>
<th>子卷号</th>
<th>物料编码</th>
<th>物料名称</th>
<th>重量KG</th>
</tr>
</thead>
<tbody>
<tr v-for="(e, i) in dataList" :key="i">
<td>{{e.package_box_sn}}</td>
<td>{{e.container_name}}</td>
<td>{{e.product_name}}</td>
<td>{{e.product_description}}</td>
<td>{{e.net_weight}}</td>
</tr>
</tbody>
</table>
</view>
</view>
</view>
<view class="submit-bar">
<button class="submit-button" :class="{'btn-disabled': !val1 || dataList.length === 0 || (isV === '1' && index1 === '')}" :disabled="disabled" @tap="_stConfirm">入库确认</button>
<!-- <button class="submit-button" :class="{'btn-disabled': dataList.length === 0}" :disabled="disabled1" @tap="_stPrint">补码</button> -->
<button class="submit-button" @tap="_boxQuery(val1)">查询</button>
</view>
</view>
</template>
<script>
import NavBar from '@/components/NavBar.vue'
import SearchBox from '@/components/SearchBox.vue'
import SearchBoxMx from '@/components/SearchBoxMx.vue'
import permision from "@/utils/permission.js"
import {boxQuery, stConfirm, stPrint, getStorSect} from '@/utils/getData2.js'
export default {
components: {
NavBar,
SearchBox,
SearchBoxMx
},
data() {
return {
val1: '',
val2: '',
isV: '0',
options1: [],
index1: '',
dataList: [],
disabled: false,
disabled1: false,
focused: true
};
},
created () {
this._getStorSect()
},
mounted () {
setTimeout(() => {
uni.hideKeyboard()
}, 500)
},
methods: {
/** 虚拟库 */
isVirtual () {
this.isV = this.isV === '0' ? '1' : '0'
},
/** 选择器1 */
selectChange1(e) {
this.index1 = e
},
/** 库区下拉框查询 */
async _getStorSect () {
let res = await getStorSect()
this.options1 = [...res.data]
},
/** 初始化查询 */
async _boxQuery (e) {
let res = await boxQuery(e, '2')
this.dataList = [...res.data]
},
/** 确认 */
async _stConfirm () {
this.disabled = true
if (!this.val1 || this.dataList.length === 0 || (this.isV === '1' && this.index1 === '')) {
this.disabled = false
return
}
try {
let res = await stConfirm(this.dataList, this.val2, '2', this.isV, '', this.val1, this.index1)
this.disabled = false
// this._boxQuery(this.val1)
this.val1 = ''
this.val2 = ''
this.isV = '0'
this.index1 = ''
this.dataList = []
uni.showToast({
title: res.message,
icon: 'none'
})
} catch (e) {
this.disabled = false
}
},
/** 补码 */
async _stPrint () {
this.disabled1 = true
if (this.dataList.length === 0) {
this.disabled1 = false
return
}
try {
let res = await stPrint(this.dataList)
this.disabled1 = false
this._boxQuery(this.val1)
uni.showToast({
title: res.message,
icon: 'none'
})
} catch (e) {
this.disabled1 = false
}
},
onKeyInput (event) {
var value = event.detail.value
value=value.replace(/[^\w\.\/]/ig,'')
if (value.length !== 14) {
this.$nextTick(() => {
this.val1 = ''
})
uni.hideKeyboard()
return
}
uni.hideKeyboard()
this._boxQuery(this.val1)
},
onFocus () {
this.focused = true
setTimeout(() => {
uni.hideKeyboard()
}, 300)
},
onBlur () {
this.focused = false
},
inputDel () {
this.val1 = ''
},
inputScan () {
this.focused = true
setTimeout(() => {
uni.hideKeyboard()
}, 300)
},
toPhone (e) {
this.val1 = e
this._boxQuery(this.val1)
}
}
}
</script>
<style lang="stylus">
</style>

View File

@@ -0,0 +1,208 @@
<template>
<view class="zd_container">
<nav-bar title="拆分入库"></nav-bar>
<view class="zd_content">
<view class="zd_wrapper">
<view class="filter_item">
<view class="filter_label_wraper">
<span class="filter_label">木箱</span>
</view>
<view class="filter_input_wraper">
<search-box-mx :focused="focused" @inputDel="inputDel" @inputScan="inputScan" @toPhone="toPhone">
<input type="text" class="filter_input search_input" v-model="val1" :focus="focused" @input="onKeyInput" @focus="onFocus" @blur="onBlur">
</search-box-mx>
</view>
</view>
<view class="filter_item">
<view class="filter_label_wraper">
<span class="filter_label">点位</span>
</view>
<view class="filter_input_wraper">
<search-box
v-model="val2"
/>
</view>
</view>
<view class="filter_item">
<view class="filter_label_wraper">
<span class="filter_label filter_label_1"></span>
</view>
<view class="filter_input_wraper filter_input_wraper_1">
<view class="iconfont icon_unchecked" :class="{'icon_checked': isV === '1'}" @tap="isVirtual">&#xe66b;</view>
<view class="filter_input_wraper_inn_text">虚拟库</view>
</view>
</view>
<view v-show="isV === '1'" class="filter_item">
<view class="filter_label">库区</view>
<view class="filter_input_wraper">
<uni-data-select v-model="index1" :localdata="options1" @change="selectChange1"></uni-data-select>
</view>
</view>
</view>
<view class="zd_wrapper grid-wraper">
<view class="slide_new">
<table>
<thead>
<tr>
<th>木箱码</th>
<th>子卷号</th>
<th>物料编码</th>
<th>物料名称</th>
<th>重量KG</th>
</tr>
</thead>
<tbody>
<tr v-for="(e, i) in dataList" :key="i">
<td>{{e.package_box_sn}}</td>
<td>{{e.container_name}}</td>
<td>{{e.product_name}}</td>
<td>{{e.product_description}}</td>
<td>{{e.net_weight}}</td>
</tr>
</tbody>
</table>
</view>
</view>
</view>
<view class="submit-bar">
<button class="submit-button" :class="{'btn-disabled': !val1 || dataList.length === 0 || (isV === '1' && index1 === '')}" :disabled="disabled" @tap="_stConfirm">入库确认</button>
<button class="submit-button" :class="{'btn-disabled': dataList.length === 0}" :disabled="disabled1" @tap="_stPrint">补码</button>
<button class="submit-button" @tap="_boxQuery(val1)">查询</button>
</view>
</view>
</template>
<script>
import NavBar from '@/components/NavBar.vue'
import SearchBox from '@/components/SearchBox.vue'
import SearchBoxMx from '@/components/SearchBoxMx.vue'
import {boxQuery, stConfirm, stPrint, getStorSect} from '@/utils/getData2.js'
export default {
components: {
NavBar,
SearchBox,
SearchBoxMx
},
data() {
return {
val1: '',
val2: '',
isV: '0',
options1: [],
index1: '',
dataList: [],
disabled: false,
disabled1: false,
focused: true
};
},
created () {
this._getStorSect()
},
mounted () {
setTimeout(() => {
uni.hideKeyboard()
}, 500)
},
methods: {
/** 虚拟库 */
isVirtual () {
this.isV = this.isV === '0' ? '1' : '0'
},
/** 选择器1 */
selectChange1(e) {
this.index1 = e
},
/** 库区下拉框查询 */
async _getStorSect () {
let res = await getStorSect()
this.options1 = [...res.data]
},
/** 初始化查询 */
async _boxQuery (e) {
let res = await boxQuery(e, '4')
this.dataList = [...res.data]
},
/** 确认 */
async _stConfirm () {
this.disabled = true
if (!this.val1 || this.dataList.length === 0 || (this.isV === '1' && this.index1 === '')) {
this.disabled = false
return
}
try {
let res = await stConfirm(this.dataList, this.val2, '4', this.isV, '', this.val1, this.index1)
this.disabled = false
// this._boxQuery(this.val1)
this.val1 = ''
this.val2 = ''
this.isV = '0'
this.dataList = []
uni.showToast({
title: res.message,
icon: 'none'
})
} catch (e) {
this.disabled = false
}
},
/** 补码 */
async _stPrint () {
this.disabled1 = true
if (this.dataList.length === 0) {
this.disabled1 = false
return
}
try {
let res = await stPrint(this.dataList)
this.disabled1 = false
this._boxQuery(this.val1)
uni.showToast({
title: res.message,
icon: 'none'
})
} catch (e) {
this.disabled1 = false
}
},
onKeyInput (event) {
var value = event.detail.value
value=value.replace(/[^\w\.\/]/ig,'')
if (value.length !== 14) {
this.$nextTick(() => {
this.val1 = ''
})
uni.hideKeyboard()
return
}
uni.hideKeyboard()
this._boxQuery(this.val1)
},
onFocus () {
this.focused = true
setTimeout(() => {
uni.hideKeyboard()
}, 300)
},
onBlur () {
this.focused = false
},
inputDel () {
this.val1 = ''
},
inputScan () {
this.focused = true
setTimeout(() => {
uni.hideKeyboard()
}, 300)
},
toPhone (e) {
this.val1 = e
this._boxQuery(this.val1)
}
}
}
</script>
<style lang="stylus">
</style>

View File

@@ -0,0 +1,103 @@
<template>
<view class="zd_container">
<nav-bar title="贴标捆扎"></nav-bar>
<view class="zd_content">
<view class="zd_wrapper">
<view class="filter_item">
<view class="filter_label_wraper">
<span class="filter_label">木箱</span>
</view>
<view class="filter_input_wraper">
<search-box
v-model="val1"
/>
</view>
</view>
<view class="filter_item">
<view class="filter_label_wraper">
<span class="filter_label">点位</span>
</view>
<view class="filter_input_wraper">
<search-box
v-model="val2"
/>
</view>
</view>
<view class="filter_item">
<view class="filter_label">重量</view>
<view class="filter_input_wraper">
<input type="number" class="filter_input" v-model="val3">
</view>
</view>
</view>
</view>
<view class="submit-bar">
<button class="submit-button" :class="{'btn-disabled': !val1 || !val3 }" :disabled="disabled1" @tap="_mendCode">贴标</button>
<button class="submit-button" :class="{'btn-disabled': !val1 || !val2}" :disabled="disabled2" @tap="_stBale">捆扎</button>
</view>
</view>
</template>
<script>
import NavBar from '@/components/NavBar.vue'
import SearchBox from '@/components/SearchBox.vue'
import {mendCode, stBale} from '@/utils/getData2.js'
export default {
components: {
NavBar,
SearchBox
},
data() {
return {
val1: '',
val2: '',
val3: '',
disabled1: false,
disabled2: false
};
},
methods: {
async _mendCode () {
this.disabled1 = true
if (!this.val1 || !this.val3) {
this.disabled1 = false
return
}
try {
let res = await mendCode(this.val1, this.val3)
uni.showToast({
title: res.message,
icon: 'none'
})
this.val1 = ''
this.val3 = ''
this.disabled1 = false
} catch (e) {
this.disabled1 = false
}
},
async _stBale () {
this.disabled2 = true
if (!this.val1 || !this.val2) {
this.disabled2 = false
return
}
try {
let res = await stBale(this.val1, this.val2)
uni.showToast({
title: res.message,
icon: 'none'
})
this.val1 = ''
this.val2 = ''
this.disabled2 = false
} catch (e) {
this.disabled2 = false
}
}
}
}
</script>
<style lang="stylus">
</style>

View File

@@ -0,0 +1,132 @@
<template>
<view class="zd_container">
<nav-bar title="生产区发货"></nav-bar>
<view class="zd_content">
<view class="zd_wrapper">
<view class="filter_item">
<view class="filter_label_wraper">
<span class="filter_label">木箱</span>
</view>
<view class="filter_input_wraper">
<search-box v-model="val1" :focused="true" @handleChange="handleChange1"
/>
</view>
</view>
<view class="filter_item">
<view class="filter_label_wraper">
<span class="filter_label">单据号</span>
</view>
<view class="filter_input_wraper">
<search-box v-model="val2" @handleChange="handleChange2" />
</view>
</view>
</view>
<view class="zd_wrapper grid-wraper">
<view class="slide_new">
<table>
<thead>
<tr>
<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>确认时间</th>
</tr>
</thead>
<tbody>
<tr v-for="(e, i) in dataList" :key="i" @click="toCheck(e)" :class="{'checked': e.bill_code === pkId}">
<td>{{e.bill_code}}</td>
<td>{{e.bill_status}}</td>
<td>{{e.total_qty}}</td>
<td>{{e.net_weight_num}}</td>
<td>{{e.detail_count}}</td>
<td>{{e.cust_code}}</td>
<td>{{e.cust_name}}</td>
<td>{{e.source_id}}</td>
<td>{{e.remark}}</td>
<td>{{e.input_optname}}</td>
<td>{{e.input_time}}</td>
<td>{{e.dis_optname}}</td>
<td>{{e.dis_time}}</td>
<td>{{e.confirm_optname}}</td>
<td>{{e.confirm_time}}</td>
</tr>
</tbody>
</table>
</view>
</view>
</view>
<view class="submit-bar">
<button class="submit-button" :class="{'btn-disabled': !pkId}" :disabled="disabled1" @tap="toSure">确认</button>
<button class="submit-button" @tap="_stivtQuery(val1, val2)">查询</button>
</view>
</view>
</template>
<script>
import NavBar from '@/components/NavBar.vue'
import SearchBox from '@/components/SearchBox.vue'
import {stivtQuery} from '@/utils/getData1.js'
export default {
components: {
NavBar,
SearchBox
},
data() {
return {
val1: '',
val2: '',
dataList: [],
pkId: '',
pkObj: {},
disabled1: false
};
},
created () {
this._stivtQuery(this.val1, this.val2)
},
methods: {
handleChange1 (e) {
this._stivtQuery(e, this.val2)
},
handleChange2 (e) {
this._stivtQuery(this.val1, e)
},
/** 初始化查询 */
async _stivtQuery (val1, val2) {
let res = await stivtQuery(val1, val2)
this.dataList = [...res.data]
},
toSure () {
if (this.pkId) {
uni.navigateTo({
url: '/pages/WarehouseManage/ProdDeliveryConfirm?billcode=' + this.pkObj.bill_code
})
}
},
toCheck (e) {
this.pkId = this.pkId === e.bill_code ? '' : e.bill_code
this.pkObj = this.pkId === e.bill_code ? e : {}
}
}
}
</script>
<style lang="stylus">
.zd_content
padding-bottom 77rpx
.slide_new table td:nth-child(1), .slide_new table th:nth-child(1)
box-shadow 1px 0 2px rgba(0,0,0,.12)
.bgyellow td
background-color #E9B451
</style>

View File

@@ -0,0 +1,137 @@
<template>
<view class="zd_container">
<nav-bar :inner2="true" @goIn="goIn" title="生产区发货确认"></nav-bar>
<view class="zd_content">
<view class="zd_wrapper">
<view class="filter_item">
<view class="filter_label_wraper">
<span class="filter_label">木箱</span>
</view>
<view class="filter_input_wraper">
<search-box v-model="val1" :focused="focusedStatus" @handleChange="handleChange1"
/>
</view>
</view>
</view>
<view class="zd_wrapper grid-wraper">
<view class="slide_new">
<table>
<thead>
<tr>
<th>木箱号</th>
<th>木箱毛重</th>
<th>木箱净重</th>
<th>产品名称</th>
<!-- <th>序号</th> -->
<th>点位编码</th>
<th>点位名称</th>
<th>产品编码</th>
<th>订单号</th>
</tr>
</thead>
<tbody>
<tr v-for="(e, i) in dataList" :key="i">
<td style="text-decoration: underline;" @tap="toXq(e.package_box_sn)">{{e.package_box_sn}}</td>
<td>{{e.box_weight}}</td>
<td>{{e.net_weight_num}}</td>
<td>{{e.product_description}}</td>
<!-- <td>{{Number(i) + 1}}</td> -->
<td>{{e.point_code}}</td>
<td>{{e.point_name}}</td>
<td>{{e.product_name}}</td>
<td>{{e.sale_order_name}}</td>
</tr>
</tbody>
</table>
</view>
</view>
</view>
<view class="submit-bar">
<!-- <button class="submit-button" @tap="handleTest">Test</button> -->
<button class="submit-button" :class="{'btn-disabled': !val1}" :disabled="disabled1" @tap="_stoutConfirm">出库确认</button>
<button class="submit-button" @tap="_stivtDtlQuery">查询</button>
</view>
</view>
</template>
<script>
import NavBar from '@/components/NavBar.vue'
import SearchBox from '@/components/SearchBox.vue'
import {stivtDtlQuery, stoutConfirm} from '@/utils/getData1.js'
export default {
components: {
NavBar,
SearchBox
},
data() {
return {
focusedStatus: true,
val1: '',
billCode: '',
dataList: [],
disabled1: false
};
},
onLoad (option) {
this.billCode = option.billcode
this._stivtDtlQuery()
},
methods: {
handleChange1 (e) {
this._stivtDtlQuery()
},
goIn () {
uni.navigateTo({
url: `/pages/WarehouseManage/ProdDelivery`
})
},
toXq (code) {
uni.navigateTo({
url: '/pages/WarehouseManage/ProdDeliveryDtl?boxno=' + code + '&billcode=' + this.billCode
})
},
// handleTest () {
// this.focusedStatus = false
// this.val1 = ''
// setTimeout(()=>{
// uni.showToast({
// title: 'toast',
// icon: 'none'
// })
// this.focusedStatus = true
// },3000)
// },
/** 初始化查询 */
async _stivtDtlQuery () {
let res = await stivtDtlQuery(this.val1, this.billCode)
this.dataList = [...res.data]
},
async _stoutConfirm () {
this.focusedStatus = false
this.disabled1 = true
try {
let res = await stoutConfirm(this.val1)
this.disabled1 = false
this.val1 = ''
this._stivtDtlQuery()
uni.showToast({
title: res.message,
icon: 'none'
})
this.focusedStatus = true
} catch (e) {
this.disabled1 = false
}
}
}
}
</script>
<style lang="stylus">
.zd_content
padding-bottom 77rpx
.slide_new table td:nth-child(1), .slide_new table th:nth-child(1)
box-shadow 1px 0 2px rgba(0,0,0,.12)
.bgyellow td
background-color #E9B451
</style>

View File

@@ -0,0 +1,97 @@
<template>
<view class="zd_container">
<nav-bar :inner2="true" @goIn="goIn" title="木箱明细"></nav-bar>
<view class="zd_content">
<view class="zd_wrapper grid-wraper">
<view class="slide_new">
<table>
<thead>
<tr>
<th>木箱号</th>
<th>子卷号</th>
<th>sap批次</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, i) in dataList" :key="i">
<td>{{el.package_box_sn}}</td>
<td>{{el.container_name}}</td>
<td>{{el.sap_pcsn}}</td>
<td>{{el.net_weight}}</td>
<td>{{el.status}}</td>
<td>{{el.sale_order_name}}</td>
<td>{{el.customer_name}}</td>
<td>{{el.customer_description}}</td>
<td>{{el.width}}</td>
<td>{{el.thickness}}</td>
<td>{{el.length}}</td>
<td>{{el.width_standard}}</td>
<td>{{el.thickness_request}}</td>
<td>{{el.quality_guaran_period}}</td>
<td>{{el.date_of_production}}</td>
<td>{{el.date_of_fg_inbound}}</td>
</tr>
</tbody>
</table>
</view>
</view>
</view>
</view>
</template>
<script>
import NavBar from '@/components/NavBar.vue'
import {stivtbBoxDtlQuery} from '@/utils/getData1.js'
export default {
components: {
NavBar,
},
data() {
return {
boxno: '',
billCode: '',
dataList: [],
disabled1: false
};
},
onLoad (option) {
this.boxno = option.boxno
this.billCode = option.billcode
this._stivtbBoxDtlQuery()
},
methods: {
goIn () {
uni.navigateTo({
url: '/pages/WarehouseManage/ProdDeliveryConfirm?billcode=' + this.billCode
})
},
/** 初始化查询 */
async _stivtbBoxDtlQuery () {
let res = await stivtbBoxDtlQuery(this.boxno)
this.dataList = [...res.data]
}
}
}
</script>
<style lang="stylus">
.zd_content
padding-bottom 77rpx
.slide_new table td:nth-child(1), .slide_new table th:nth-child(1)
box-shadow 1px 0 2px rgba(0,0,0,.12)
.bgyellow td
background-color #E9B451
</style>

View File

@@ -0,0 +1,195 @@
<template>
<view class="zd_container">
<nav-bar title="退货入库"></nav-bar>
<view class="zd_content">
<view class="zd_wrapper">
<view class="filter_item">
<view class="filter_label_wraper">
<span class="filter_label">木箱</span>
</view>
<view class="filter_input_wraper">
<search-box-mx :focused="focused" @inputDel="inputDel" @inputScan="inputScan" @toPhone="toPhone">
<input type="text" class="filter_input search_input" v-model="val1" :focus="focused" @input="onKeyInput" @focus="onFocus" @blur="onBlur">
</search-box-mx>
</view>
</view>
<view class="filter_item">
<view class="filter_label_wraper">
<span class="filter_label">点位</span>
</view>
<view class="filter_input_wraper">
<search-box
v-model="val2"
/>
</view>
</view>
<view class="filter_item">
<view class="filter_label_wraper">
<span class="filter_label filter_label_1"></span>
</view>
<view class="filter_input_wraper filter_input_wraper_1">
<view class="iconfont icon_unchecked" :class="{'icon_checked': isV === '1'}" @tap="isVirtual">&#xe66b;</view>
<view class="filter_input_wraper_inn_text">虚拟库</view>
</view>
</view>
<!-- <view class="filter_item">
<view class="filter_label">木箱料号</view>
<view class="filter_input_wraper">
<input type="text" class="filter_input" v-model="val3">
</view>
</view> -->
<view v-show="isV === '1'" class="filter_item">
<view class="filter_label">库区</view>
<view class="filter_input_wraper">
<uni-data-select v-model="index1" :localdata="options1" @change="selectChange1"></uni-data-select>
</view>
</view>
</view>
<view class="zd_wrapper grid-wraper">
<view class="slide_new">
<table>
<thead>
<tr>
<th>木箱码</th>
<th>子卷号</th>
<th>物料编码</th>
<th>物料名称</th>
<th>重量KG</th>
</tr>
</thead>
<tbody>
<tr v-for="(e, i) in dataList" :key="i">
<td>{{e.package_box_sn}}</td>
<td>{{e.container_name}}</td>
<td>{{e.product_name}}</td>
<td>{{e.product_description}}</td>
<td>{{e.net_weight}}</td>
</tr>
</tbody>
</table>
</view>
</view>
</view>
<view class="submit-bar">
<button class="submit-button" :class="{'btn-disabled': !val1 || dataList.length === 0 || (isV === '1' && index1 === '')}" :disabled="disabled" @tap="_stConfirm">入库确认</button>
<button class="submit-button" @tap="_boxQuery(val1)">查询</button>
</view>
</view>
</template>
<script>
import NavBar from '@/components/NavBar.vue'
import SearchBox from '@/components/SearchBox.vue'
import SearchBoxMx from '@/components/SearchBoxMx.vue'
import {boxQuery, stConfirm, getStorSect} from '@/utils/getData2.js'
export default {
components: {
NavBar,
SearchBox,
SearchBoxMx
},
data() {
return {
val1: '',
val2: '',
val3: '',
isV: '0',
options1: [],
index1: '',
dataList: [],
disabled: false,
focused: true
};
},
created () {
this._getStorSect()
},
mounted () {
setTimeout(() => {
uni.hideKeyboard()
}, 500)
},
methods: {
/** 虚拟库 */
isVirtual () {
this.isV = this.isV === '0' ? '1' : '0'
},
/** 选择器1 */
selectChange1(e) {
this.index1 = e
},
/** 库区下拉框查询 */
async _getStorSect () {
let res = await getStorSect()
this.options1 = [...res.data]
},
/** 初始化查询 */
async _boxQuery (e) {
console.log(11)
let res = await boxQuery(e, '3')
this.dataList = [...res.data]
},
/** 确认 */
async _stConfirm () {
this.disabled = true
if (!this.val1 || this.dataList.length === 0 || (this.isV === '1' && this.index1 === '')) {
this.disabled = false
return
}
try {
let res = await stConfirm(this.dataList, this.val2, '3', this.isV, this.val3, this.val1, this.index1)
this.disabled = false
// this._boxQuery(this.val1)
this.val1 = ''
this.val2 = ''
this.isV = '0'
this.dataList = []
uni.showToast({
title: res.message,
icon: 'none'
})
} catch (e) {
this.disabled = false
}
},
onKeyInput (event) {
var value = event.detail.value
value=value.replace(/[^\w\.\/]/ig,'')
if (value.length !== 14) {
this.$nextTick(() => {
this.val1 = ''
})
uni.hideKeyboard()
return
}
uni.hideKeyboard()
this._boxQuery(this.val1)
},
onFocus () {
this.focused = true
setTimeout(() => {
uni.hideKeyboard()
}, 300)
},
onBlur () {
this.focused = false
},
inputDel () {
this.val1 = ''
},
inputScan () {
this.focused = true
setTimeout(() => {
uni.hideKeyboard()
}, 300)
},
toPhone (e) {
this.val1 = e
this._boxQuery(this.val1)
}
}
}
</script>
<style lang="stylus">
</style>

View File

@@ -0,0 +1,187 @@
<template>
<view class="zd_container">
<nav-bar title="报废入库"></nav-bar>
<view class="zd_content">
<view class="zd_wrapper">
<view class="filter_item">
<view class="filter_label_wraper">
<span class="filter_label">木箱</span>
</view>
<view class="filter_input_wraper">
<search-box-mx :focused="focused" @inputDel="inputDel" @inputScan="inputScan" @toPhone="toPhone">
<input type="text" class="filter_input search_input" v-model="val1" :focus="focused" @input="onKeyInput" @focus="onFocus" @blur="onBlur">
</search-box-mx>
</view>
</view>
<view class="filter_item">
<view class="filter_label_wraper">
<span class="filter_label">点位</span>
</view>
<view class="filter_input_wraper">
<search-box
v-model="val2"
/>
</view>
</view>
<view class="filter_item">
<view class="filter_label_wraper">
<span class="filter_label filter_label_1"></span>
</view>
<view class="filter_input_wraper filter_input_wraper_1">
<view class="iconfont icon_unchecked" :class="{'icon_checked': isV === '1'}" @tap="isVirtual">&#xe66b;</view>
<view class="filter_input_wraper_inn_text">虚拟库</view>
</view>
</view>
<view v-show="isV === '1'" class="filter_item">
<view class="filter_label">库区</view>
<view class="filter_input_wraper">
<uni-data-select v-model="index1" :localdata="options1" @change="selectChange1"></uni-data-select>
</view>
</view>
</view>
<view class="zd_wrapper grid-wraper">
<view class="slide_new">
<table>
<thead>
<tr>
<th>木箱码</th>
<th>子卷号</th>
<th>物料编码</th>
<th>物料名称</th>
<th>重量KG</th>
</tr>
</thead>
<tbody>
<tr v-for="(e, i) in dataList" :key="i">
<td>{{e.package_box_sn}}</td>
<td>{{e.container_name}}</td>
<td>{{e.product_name}}</td>
<td>{{e.product_description}}</td>
<td>{{e.net_weight}}</td>
</tr>
</tbody>
</table>
</view>
</view>
</view>
<view class="submit-bar">
<button class="submit-button" :class="{'btn-disabled': !val1 || dataList.length === 0 || (isV === '1' && index1 === '')}" :disabled="disabled" @tap="_stConfirm">入库确认</button>
<button class="submit-button" @tap="_boxQuery(val1)">查询</button>
</view>
</view>
</template>
<script>
import NavBar from '@/components/NavBar.vue'
import SearchBox from '@/components/SearchBox.vue'
import SearchBoxMx from '@/components/SearchBoxMx.vue'
import {boxQuery, stConfirm, getStorSect} from '@/utils/getData2.js'
export default {
components: {
NavBar,
SearchBox,
SearchBoxMx
},
data() {
return {
val1: '',
val2: '',
isV: '0',
options1: [],
index1: '',
dataList: [],
disabled: false,
focused: true
};
},
created () {
this._getStorSect()
},
mounted () {
setTimeout(() => {
uni.hideKeyboard()
}, 500)
},
methods: {
/** 虚拟库 */
isVirtual () {
this.isV = this.isV === '0' ? '1' : '0'
},
/** 选择器1 */
selectChange1(e) {
this.index1 = e
},
/** 库区下拉框查询 */
async _getStorSect () {
let res = await getStorSect()
this.options1 = [...res.data]
},
/** 初始化查询 */
async _boxQuery (e) {
let res = await boxQuery(e, '1')
this.dataList = [...res.data]
},
/** 确认 */
async _stConfirm () {
this.disabled = true
if (!this.val1 || this.dataList.length === 0 || (this.isV === '1' && this.index1 === '')) {
this.disabled = false
return
}
try {
let res = await stConfirm(this.dataList, this.val2, '1', this.isV, '', this.val1, this.index1)
this.disabled = false
// this._boxQuery(this.val1)
this.val1 = ''
this.val2 = ''
this.isV = '0'
this.dataList = []
uni.showToast({
title: res.message,
icon: 'none'
})
} catch (e) {
this.disabled = false
}
},
onKeyInput (event) {
var value = event.detail.value
value=value.replace(/[^\w\.\/]/ig,'')
if (value.length !== 14) {
this.$nextTick(() => {
this.val1 = ''
})
uni.hideKeyboard()
return
}
uni.hideKeyboard()
this._boxQuery(this.val1)
},
onFocus () {
this.focused = true
setTimeout(() => {
uni.hideKeyboard()
}, 300)
},
onBlur () {
this.focused = false
},
inputDel () {
this.val1 = ''
},
inputScan () {
this.focused = true
setTimeout(() => {
uni.hideKeyboard()
}, 300)
},
toPhone (e) {
this.val1 = e
this._boxQuery(this.val1)
}
}
}
</script>
<style lang="stylus">
</style>

View File

@@ -0,0 +1,187 @@
<template>
<view class="zd_container">
<nav-bar title="半成品入库"></nav-bar>
<view class="zd_content">
<view class="zd_wrapper">
<view class="filter_item">
<view class="filter_label_wraper">
<span class="filter_label">点位</span>
</view>
<view class="filter_input_wraper">
<search-box
v-model="val1"
/>
</view>
</view>
<view class="filter_item">
<view class="filter_label_wraper">
<span class="filter_label">母卷</span>
</view>
<view class="filter_input_wraper">
<search-box
v-model="val2"
/>
</view>
</view>
<view class="filter_item">
<view class="filter_label">状态</view>
<view class="filter_input_wraper">
<uni-data-select v-model="index" :localdata="options" @change="selectChange"></uni-data-select>
</view>
</view>
</view>
<view class="zd_wrapper grid-wraper">
<view class="slide_new">
<table>
<thead>
<tr>
<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="(e, i) in dataList" :key="i" @click="toCheck(e)" :class="{'checked': e.container_name === pkId}">
<td>{{e.status_name}}</td>
<td>{{e.mfg_order_name}}</td>
<td>{{e.container_name}}</td>
<td>{{e.point_code}}</td>
<td>{{e.product_name}}</td>
<td>{{e.theory_height}}</td>
<td>{{e.realstart_time}}</td>
<td>{{e.realend_time}}</td>
<td>{{e.productin_qty}}</td>
<td>{{e.agvno}}</td>
<td>{{e.product_area}}</td>
<td>{{e.update_time}}</td>
</tr>
</tbody>
</table>
</view>
</view>
<uni-load-more color="#007AFF" iconType="circle" :status="status" :icon-size="14" :content-text="contentText" v-if="dataList.length > 0"/>
</view>
<view class="submit-bar">
<button class="submit-button" :class="{'btn-disabled': !val1 || !pkId || !index}" :disabled="disabled" @tap="_confirmInstor">确认入库</button>
<button class="submit-button" @tap="searchList">查询</button>
</view>
</view>
</template>
<script>
import NavBar from '@/components/NavBar.vue'
import SearchBox from '@/components/SearchBox.vue'
import {coolIOQuery, confirmInstor, statusList} from '@/utils/getData2.js'
export default {
components: {
NavBar,
SearchBox
},
data() {
return {
val1: '',
val2: '',
options: [],
index: '',
dataList: [],
pkId: '',
pkObj: {},
disabled: false,
reload: false,
status: 'more',
contentText: {
contentdown: '查看更多',
contentrefresh: '加载中',
contentnomore: '没有更多'
},
totalCount: 0,
pageNum: 1,
pageSize: 10
};
},
created () {
this._statusList()
this._coolIOQuery()
},
methods: {
searchList () {
this.dataList = []
this.pageNum = 1
this._coolIOQuery()
},
/** 选择器 */
selectChange(e) {
this.index = e
},
/** 下拉框查询 */
async _statusList () {
let res = await statusList()
this.options = [...res.data]
},
/** 初始化查询 */
async _coolIOQuery () {
let res = await coolIOQuery(this.val2, this.pageNum + '', this.pageSize + '')
this.totalCount = res.size
if (res.size > 0) {
const dataMap = res.data
this.dataList = this.reload ? dataMap : this.dataList.concat(dataMap)
this.reload = false
} else {
this.dataList = []
}
if (this.totalCount == this.dataList.length) {
this.reload = false
this.status = 'noMore'
}
},
onReachBottom () {
if (this.totalCount > this.dataList.length) {
this.status = 'loading'
setTimeout(() => {
this.pageNum++
this._coolIOQuery()
}, 1000)
} else { //停止加载
this.status = 'noMore'
}
},
/** 确认 */
async _confirmInstor () {
this.disabled = true
if (!this.val1 || !this.pkId || !this.index) {
this.disabled = false
return
}
try {
let res = await confirmInstor(this.pkObj, this.val1, this.index)
this.disabled = false
this.pkId = ''
this.pkObj = {}
this.searchList()
uni.showToast({
title: res.message,
icon: 'none'
})
} catch (e) {
this.disabled = false
}
},
toCheck (e) {
this.pkId = this.pkId === e.container_name ? '' : e.container_name
this.pkObj = this.pkId === e.container_name ? e : {}
}
}
}
</script>
<style lang="stylus">
</style>

View File

@@ -0,0 +1,141 @@
<template>
<view class="zd_container">
<nav-bar title="半成品出库"></nav-bar>
<view class="zd_content">
<view class="zd_wrapper">
<view class="filter_item">
<view class="filter_label_wraper">
<span class="filter_label">点位</span>
</view>
<view class="filter_input_wraper">
<search-box
v-model="val1"
/>
</view>
</view>
<view class="filter_item">
<view class="filter_label_wraper">
<span class="filter_label">母卷</span>
</view>
<view class="filter_input_wraper">
<search-box
v-model="val2"
/>
</view>
</view>
<view class="filter_item">
<view class="filter_label">区域</view>
<view class="filter_input_wraper">
<uni-data-select v-model="index" :localdata="options" @change="selectChange"></uni-data-select>
</view>
</view>
</view>
<view class="zd_wrapper grid-wraper">
<view class="slide_new">
<table>
<thead>
<tr>
<th>点位</th>
<th>母卷号</th>
<th>产品编号</th>
<th>产品描述</th>
<th>总重量</th>
<th>入烘箱时间</th>
<th>出烘箱时间</th>
<th>是否烘烤</th>
</tr>
</thead>
<tbody>
<tr v-for="(e, i) in dataList" :key="i" @click="toCheck(e)" :class="{'checked': e.point_code === pkId}">
<td>{{e.point_code}}</td>
<td>{{e.container_name}}</td>
<td>{{e.product_name}}</td>
<td>{{e.description}}</td>
<td>{{e.productin_qty}}</td>
<td>{{e.in_time}}</td>
<td>{{e.out_time}}</td>
<td>{{e.is_bake}}</td>
</tr>
</tbody>
</table>
</view>
</view>
</view>
<view class="submit-bar">
<button class="submit-button" :class="{'btn-disabled': !pkId || !val1}" :disabled="disabled" @tap="_outconfirmInstor">确认出库</button>
<button class="submit-button" @tap="_outcoolIOQuery">查询</button>
</view>
</view>
</template>
<script>
import NavBar from '@/components/NavBar.vue'
import SearchBox from '@/components/SearchBox.vue'
import {queryProductArea, outcoolIOQuery, outconfirmInstor} from '@/utils/getData2.js'
export default {
components: {
NavBar,
SearchBox
},
data() {
return {
val1: '',
val2: '',
options: [],
index: '',
dataList: [],
pkId: '',
pkObj: {},
disabled: false
};
},
created () {
this._outcoolIOQuery()
this._queryProductArea()
},
methods: {
/** 选择器 */
selectChange(e) {
this.index = e
},
/** 生产区域下拉框查询 */
async _queryProductArea () {
let res = await queryProductArea()
this.options = [...res.data]
},
/** 初始化查询 */
async _outcoolIOQuery () {
let res = await outcoolIOQuery(this.val2, this.index)
this.dataList = [...res.data]
},
/** 确认 */
async _outconfirmInstor () {
this.disabled = true
if (!this.pkId || !this.val1) {
this.disabled = false
return
}
try {
let res = await outconfirmInstor(this.pkObj, this.val1)
this.disabled = false
this.pkId = ''
this.pkObj = {}
this._outcoolIOQuery()
uni.showToast({
title: res.message,
icon: 'none'
})
} catch (e) {
this.disabled = false
}
},
toCheck (e) {
this.pkId = this.pkId === e.point_code ? '' : e.point_code
this.pkObj = this.pkId === e.point_code ? e : {}
}
}
}
</script>
<style lang="stylus">
</style>

View File

@@ -0,0 +1,130 @@
<template>
<view class="zd_container">
<nav-bar title="虚拟区发货"></nav-bar>
<view class="zd_content">
<view class="zd_wrapper">
<view class="filter_item">
<view class="filter_label_wraper">
<span class="filter_label">木箱</span>
</view>
<view class="filter_input_wraper">
<search-box v-model="val1" :focused="true" @handleChange="handleChange1"
/>
</view>
</view>
<view class="filter_item">
<view class="filter_label_wraper">
<span class="filter_label">单据号</span>
</view>
<view class="filter_input_wraper">
<search-box v-model="val2" @handleChange="handleChange2"/>
</view>
</view>
<view class="filter_item">
<view class="filter_label">单据类型</view>
<view class="filter_input_wraper">
<uni-data-select v-model="index" :localdata="options" @change="selectChange"></uni-data-select>
</view>
</view>
</view>
<view class="zd_wrapper grid-wraper">
<view class="slide_new">
<table>
<thead>
<tr>
<th>单据编号</th>
<th>单据类型</th>
<th>源单号</th>
<th>日期</th>
<th>人员</th>
</tr>
</thead>
<tbody>
<tr v-for="(e, i) in dataList" :key="i" @click="toCheck(e)" :class="{'checked': e.bill_code === pkId, 'bgyellow': e.colro_flag === '1'}">
<td>{{e.bill_code}}</td>
<td>{{e.bill_type_name}}</td>
<td>{{e.source_bill_code}}</td>
<td>{{e.biz_date}}</td>
<td>{{e.person_name}}</td>
</tr>
</tbody>
</table>
</view>
</view>
</view>
<view class="submit-bar">
<button class="submit-button" :class="{'btn-disabled': !pkId}" :disabled="disabled1" @tap="toSure">确认</button>
<button class="submit-button" @tap="_virtualbillQuery(val1, val2)">查询</button>
</view>
</view>
</template>
<script>
import NavBar from '@/components/NavBar.vue'
import SearchBox from '@/components/SearchBox.vue'
import {virtualbillQuery, virtualbillType} from '@/utils/getData1.js'
export default {
components: {
NavBar,
SearchBox
},
data() {
return {
val1: '',
val2: '',
options: [],
index: '',
dataList: [],
pkId: '',
pkObj: {},
disabled1: false
};
},
created () {
this._virtualbillQuery(this.val1, this.val2)
this._virtualbillType()
},
methods: {
handleChange1 (e) {
this._virtualbillQuery(e, this.val2)
},
handleChange2 (e) {
this._virtualbillQuery(this.val1, e)
},
/** 选择器 */
selectChange(e) {
this.index = e
},
/** 下拉框查询 */
async _virtualbillType () {
let res = await virtualbillType()
this.options = [...res.data]
},
/** 初始化查询 */
async _virtualbillQuery (val1, val2) {
let res = await virtualbillQuery(val1, val2, this.index)
this.dataList = [...res.data]
},
toSure () {
if (this.pkId) {
uni.navigateTo({
url: '/pages/WarehouseManage/XuniDeliveryConfirm?billcode=' + this.pkObj.bill_code
})
}
},
toCheck (e) {
this.pkId = this.pkId === e.bill_code ? '' : e.bill_code
this.pkObj = this.pkId === e.bill_code ? e : {}
}
}
}
</script>
<style lang="stylus">
.zd_content
padding-bottom 77rpx
.slide_new table td:nth-child(1), .slide_new table th:nth-child(1)
box-shadow 1px 0 2px rgba(0,0,0,.12)
.bgyellow td
background-color #E9B451
</style>

View File

@@ -0,0 +1,143 @@
<template>
<view class="zd_container">
<nav-bar :inner2="true" @goIn="goIn" title="虚拟区发货确认"></nav-bar>
<view class="zd_content">
<view class="zd_wrapper">
<view class="filter_item">
<view class="filter_label_wraper">
<span class="filter_label">木箱</span>
</view>
<view class="filter_input_wraper">
<!-- <search-box v-model="val1" :focused="true" @handleChange="handleChange1" -->
<search-box v-model="val1" :focused="focusedStatus" @handleChange="handleChange1"
/>
</view>
</view>
<!-- <view class="filter_item">
<view class="filter_label_wraper">
<span class="filter_label">物料</span>
</view>
<view class="filter_input_wraper">
<search-box v-model="val2" />
</view>
</view> -->
<view class="filter_item">
<view class="filter_label_wraper">
<span class="filter_label">总净重</span>
</view>
<view class="filter_input_wraper">
<input type="number" class="filter_input filter_input_disabled" v-model="net_weight_num" disabled>
</view>
</view>
</view>
<view class="zd_wrapper grid-wraper">
<view class="slide_new">
<table>
<thead>
<tr>
<th>木箱码</th>
<th>子卷号</th>
<th>物料编码</th>
<th>物料名称</th>
<th>重量kg</th>
<th>更换外包</th>
<th>更换内包</th>
</tr>
</thead>
<tbody>
<tr v-for="(e, i) in dataList" :key="i" :class="{'bgyellow': e.colro_flag === '1'}">
<td>{{e.package_box_sn}}</td>
<td>{{e.container_name}}</td>
<td>{{e.product_name}}</td>
<td>{{e.product_description}}</td>
<td>{{e.net_weight}}</td>
<td>{{e.change_out}}</td>
<td>{{e.change_in}}</td>
</tr>
</tbody>
</table>
</view>
</view>
</view>
<view class="submit-bar">
<button class="submit-button" :class="{'btn-disabled': !dataList.length}" :disabled="disabled1" @tap="_virtualoutConfirm">出库确认</button>
<button class="submit-button" @tap="_virtualivtQuery">查询</button>
</view>
</view>
</template>
<script>
import NavBar from '@/components/NavBar.vue'
import SearchBox from '@/components/SearchBox.vue'
import {virtualivtQuery, virtualoutConfirm} from '@/utils/getData1.js'
export default {
components: {
NavBar,
SearchBox
},
data() {
return {
focusedStatus: true,
val1: '',
val2: '',
billCode: '',
dataList: [],
disabled1: false,
net_weight_num: ''
};
},
onLoad (option) {
this.billCode = option.billcode
this._virtualivtQuery()
},
methods: {
handleChange1 (e) {
this._virtualivtQuery()
},
goIn () {
uni.navigateTo({
url: `/pages/WarehouseManage/XuniDelivery`
})
},
handleChange (e) {
// console.log(e)
},
/** 初始化查询 */
async _virtualivtQuery () {
let res = await virtualivtQuery(this.val1, this.val2, this.billCode)
this.dataList = [...res.data]
this.net_weight_num = res.net_weight_num
},
async _virtualoutConfirm () {
this.focusedStatus = false
if (!this.dataList.length) {
return
}
this.disabled1 = true
try {
let res = await virtualoutConfirm(this.dataList, this.val1)
this.disabled1 = false
this.val1 = ''
this.val2 = ''
this._virtualivtQuery()
uni.showToast({
title: res.message,
icon: 'none'
})
this.focusedStatus = true
} catch (e) {
this.disabled1 = false
}
}
}
}
</script>
<style lang="stylus">
.zd_content
padding-bottom 77rpx
.slide_new table td:nth-child(1), .slide_new table th:nth-child(1)
box-shadow 1px 0 2px rgba(0,0,0,.12)
.bgyellow td
background-color #E9B451
</style>