半成品盘点

This commit is contained in:
2023-07-03 20:28:43 +08:00
parent 9f0996824c
commit 05d682abb6
5 changed files with 264 additions and 145 deletions

View File

@@ -253,3 +253,22 @@ export const checkConfirmOffer = (row) => post('api/pda/bcp/check/confirmOffer',
export const checkConfirmFinance = (row) => post('api/pda/bcp/check/confirmFinance', {
row: row
})
/**
* 半成品拼盘
*/
// 1.1仓库下拉框
export const bcpShutGetBcpStor = () => post('api/pda/bcp/shut/getBcpStor', {})
// 1.2单据类型下拉框
export const bcpShutGetBillType = () => post('api/pda/bcp/shut/getBillType', {})
// 1.3半成品拼盘页面
export const bcpShutGetdtl = (id, btime, etime, code, scode, stcode) => post('api/pda/bcp/shut/getdtl', {
stor_id: id,
begin_time: btime,
end_time: etime,
material_code: code,
bill_type: scode,
storagevehicle_id_in: stcode
})
// 1.4拼盘完成(按钮)
export const bcpShutConfirm = () => post('api/pda/bcp/shut/confirm', {})

View File

@@ -6,11 +6,11 @@
<div class="search-label">仓库</div>
<div class="filter_input_wraper">
<el-select v-model="value1" filterable clearable placeholder="请选择">
<el-option
<el-option
v-for="item in options1"
:key="item.device_code"
:label="item.device_name"
:value="item.device_code">
:key="item.stor_id"
:label="item.stor_name"
:value="item.stor_id">
</el-option>
</el-select>
</div>
@@ -27,56 +27,43 @@
</el-date-picker>
</div>
</div>
<div class="search-item">
<div class="search-label">业务类型</div>
<div class="filter_input_wraper">
<el-select v-model="value2" filterable clearable placeholder="请选择">
<el-option
v-for="item in options2"
:key="item.device_code"
:label="item.device_name"
:value="item.device_code">
</el-option>
</el-select>
</div>
</div>
<div class="search-item">
<div class="search-label">物料</div>
<div class="filter_input_wraper">
<input type="text" class="filter-input">
<input type="text" class="filter-input" v-model="material_code">
</div>
</div>
<div class="search-item">
<div class="search-label">载具号</div>
<div class="filter_input_wraper">
<input type="text" class="filter-input">
<input type="text" class="filter-input" v-model="storagevehicle_code">
</div>
</div>
<div class="search-item">
<div class="search-label">货位号</div>
<div class="filter_input_wraper">
<input type="text" class="filter-input">
<input type="text" class="filter-input" v-model="struct_code">
</div>
</div>
<div class="search-item">
<div class="search-label">盘点位</div>
<div class="filter_input_wraper">
<el-select v-model="value3" filterable clearable placeholder="请选择">
<el-select v-model="value2" filterable clearable placeholder="请选择">
<el-option
v-for="item in options3"
:key="item.device_code"
:label="item.device_name"
:value="item.device_code">
v-for="item in options2"
:key="item.point_code"
:label="item.point_name"
:value="item.point_code">
</el-option>
</el-select>
</div>
</div>
<div class="search-item_2 flexend">
<button class="button button--primary">查询</button>
<button class="button button--primary">下发</button>
<button class="button button--primary">盘点确认</button>
<button class="button button--primary">实盘为准</button>
<button class="button button--primary">账务为准</button>
<div class="search-item_3">
<button class="button button--primary" @click="_checkGetDtlAll">查询</button>
<button class="button button--primary" :disabled="disabled1" :class="{'button--defalut': pkId === '' || value2 === ''}" @click="_checkSendTask">下发</button>
<button class="button button--primary" :disabled="disabled2" :class="{'button--defalut': dataList.length === 0}" @click="_checkConfirm">盘点确认</button>
<button class="button button--primary" :disabled="disabled3" :class="{'button--defalut': pkId === ''}" @click="_checkConfirmOffer">实盘为准</button>
<button class="button button--primary" :disabled="disabled4" :class="{'button--defalut': pkId === ''}" @click="_checkConfirmFinance">账务为准</button>
</div>
</div>
</div>
@@ -95,7 +82,6 @@
<th>重量(kg)</th>
<th>盘点重量(kg)</th>
<th>盘点数量</th>
<th>单重(g)</th>
<th>是否异常</th>
<th>盘点状态</th>
<th>盘点站台</th>
@@ -107,25 +93,29 @@
</tr>
</thead>
<tbody>
<tr v-for="(e, i) in [1, 2, 3, 4, 5, 6, 7, 1, 2, 3, 4, 5, 6, 7, 1, 2, 3, 4, 5, 6, 7]" :key="i">
<td>序号</td>
<td>序号</td>
<td>序号</td>
<td>序号</td>
<td>序号</td>
<td>序号</td>
<td>序号</td>
<td>序号</td>
<td>序号</td>
<td>序号</td>
<td>序号</td>
<td>序号</td>
<td>序号</td>
<td>序号</td>
<td>序号</td>
<td>序号</td>
<td>序号</td>
<td>序号</td>
<tr v-for="(e, i) in dataList" :key="i" :class="{'selected_icon': pkId === e.bill_code}" @click="toRadio(e)">
<td>{{ i + 1 }}</td>
<td>{{e.struct_name}}</td>
<td>{{e.storagevehicle_code}}</td>
<td>{{e.material_code}}</td>
<td>{{e.material_spec}}</td>
<td>{{e.qty | numeric(3)}}</td>
<td>{{e.base_qty | numeric(3)}}</td>
<td><input type="number" v-model="e.fac_qty"></td>
<td>{{ ['正常', '盘亏', '盘盈'][Number(e.check_resultI)] }}</td>
<td v-if="e.status === '01'">生成</td>
<td v-if="e.status === '04'">盘点中</td>
<td v-if="e.status === '05'">已盘点</td>
<td v-if="e.status === '06'">异常处理中</td>
<td v-if="e.status === '07'">异常处理完成</td>
<td v-if="e.status === '99'">确认完成</td>
<td>{{ e.checkpoint_id }}</td>
<td>{{ e.is_down }}</td>
<td>{{e.check_code}}</td>
<td v-if="e.check_type === '31'">计划盘点</td>
<td v-if="e.check_type === '32'">临时盘点</td>
<td>{{ e.create_name }}</td>
<td>{{ e.create_time }}</td>
</tr>
</tbody>
</table>
@@ -136,16 +126,122 @@
</template>
<script>
import { checkGetBcpStor, checkGetDtlAll, checkGetPoint, checkSendTask, checkConfirm, checkConfirmOffer, checkConfirmFinance } from '@config/getData2.js'
import {dateTimeFtt} from '@config/utils.js'
export default {
data () {
return {
options1: [],
value1: '',
date: [new Date((new Date().getTime() - 24 * 60 * 60 * 1000)), new Date((new Date().getTime() + 24 * 60 * 60 * 1000))],
date: [new Date((new Date().getTime() - 6 * 24 * 60 * 60 * 1000)), new Date((new Date().getTime()))],
options2: [],
value2: '',
options3: [],
value3: ''
material_code: '',
storagevehicle_code: '',
struct_code: '',
dataList: [],
pkId: '',
pkObj: {},
disabled1: false,
disabled2: false,
disabled3: false,
disabled4: false
}
},
created () {
this._checkGetBcpStor()
this._checkGetDtlAll()
this._checkGetPoint()
},
methods: {
// 仓库下拉框
async _checkGetBcpStor () {
let res = await checkGetBcpStor()
this.options1 = [...res.data]
},
// grid
async _checkGetDtlAll () {
let res = await checkGetDtlAll(this.value1, this.date !== null ? dateTimeFtt(this.date[0]) : '', this.date !== null ? dateTimeFtt(this.date[1]) : '', this.material_code, this.storagevehicle_code, this.struct_code)
this.dataList = [...res.data]
},
// 盘点位下拉框
async _checkGetPoint () {
let res = await checkGetPoint()
this.options2 = [...res.data]
},
toRadio (e) {
this.pkId = this.pkId === e.struct_name ? '' : e.struct_name
this.pkObj = this.pkId === e.struct_name ? e : {}
},
// 下发(按钮)
async _checkSendTask () {
this.disabled1 = true
if (!this.pkId || !this.value2) {
this.disabled1 = false
return
}
try {
let res = await checkSendTask(this.pkObj, this.value2)
this.toast(res.message)
this._checkGetDtlAll()
this.disabled1 = false
} catch (e) {
this.disabled1 = false
}
},
// 盘点确认
async _checkConfirm () {
this.disabled2 = true
let flag = false
this.dataList.map(el => {
if (el.fac_qty === '' || Number(el.fac_qty) < 0) {
flag = true
}
})
if (flag) {
this.disabled2 = false
return
}
try {
let res = await checkConfirm(this.dataList)
this.toast(res.message)
this._checkGetDtlAll()
this.disabled2 = false
} catch (e) {
this.disabled2 = false
}
},
// 实盘为准
async _checkConfirmOffer () {
this.disabled3 = true
if (!this.pkId) {
this.disabled3 = false
return
}
try {
let res = await checkConfirmOffer(this.pkObj)
this.toast(res.message)
this._checkGetDtlAll()
this.disabled3 = false
} catch (e) {
this.disabled3 = false
}
},
// 财务为准
async _checkConfirmFinance () {
this.disabled4 = true
if (!this.pkId) {
this.disabled4 = false
return
}
try {
let res = await checkConfirmFinance(this.pkObj)
this.toast(res.message)
this._checkGetDtlAll()
this.disabled4 = false
} catch (e) {
this.disabled4 = false
}
}
}
}

View File

@@ -18,7 +18,7 @@
<div class="search-item">
<div class="search-label">单据类型</div>
<div class="filter_input_wraper">
<el-select v-model="value2" filterable clearable placeholder="请选择">
<el-select v-model="value2" filterable clearable disabled placeholder="请选择">
<el-option
v-for="item in options2"
:key="item.device_code"
@@ -28,30 +28,17 @@
</el-select>
</div>
</div>
<div class="search-item">
<div class="search-label">盘点站点</div>
<div class="filter_input_wraper">
<el-select v-model="value3" filterable clearable placeholder="请选择">
<el-option
v-for="item in options3"
:key="item.device_code"
:label="item.device_name"
:value="item.device_code">
</el-option>
</el-select>
</div>
</div>
<div class="search-item">
<div class="search-label">备注</div>
<div class="filter_input_wraper">
<input type="text" class="filter-input">
<input type="text" class="filter-input" v-model="remark">
</div>
</div>
<div class="search-item_2 flexend">
<div class="search-item_3">
<button class="button button--primary" @click="searchMater">添加盘点物料</button>
<button class="button button--primary">删除一行</button>
<button class="button button--primary">生产盘点单</button>
<button class="button button--primary">盘点作业</button>
<button class="button button--primary" :class="{'button--defalut': pkId === ''}" @click="delRow">删除一行</button>
<button class="button button--primary" :disabled="disabled1" :class="{'button--defalut': value1 === '' || dataList.length === 0}" @click="_checkCreate">生产盘点单</button>
<button class="button button--primary" @click="toJumpSearch">盘点作业</button>
</div>
</div>
</div>
@@ -90,17 +77,20 @@
<script>
import {accMul, accDiv} from '@config/utils.js'
import {checkGetBcpStor} from '@config/getData2.js'
import {checkGetBcpStor, checkCreate} from '@config/getData2.js'
export default {
name: 'semifinishedcheck',
data () {
return {
options1: [],
value1: '',
options2: [],
value2: '',
options3: [],
value3: ''
options2: [{device_code: '32', device_name: '临时盘点'}],
value2: '32',
remark: '',
dataList: [],
pkId: '',
pkObj: {},
disabled1: false
}
},
beforeRouteLeave (to, from, next) {
@@ -119,15 +109,58 @@ export default {
})
}
},
created () {
this._checkGetBcpStor()
},
methods: {
// 仓库下拉框
async _checkGetBcpStor () {
let res = await checkGetBcpStor()
this.options1 = [...res.data]
},
// 生产盘点单
async _checkCreate () {
this.disabled1 = true
if (this.value1 === '' || this.dataList.length === 0) {
this.disabled1 = false
return
}
try {
let from = {
stor_id: this.value1,
check_type: '32',
remark: this.remark,
rows: this.dataList
}
let res = await checkCreate(from)
this.toast(res.message)
this.valu1 = ''
this.remark = ''
this.$store.dispatch('setMaterArr', [])
this.dataList = []
this.disabled1 = false
} catch (e) {
this.disabled1 = false
}
},
searchMater () {
this.$store.dispatch('setMaterObj', '')
this.$store.dispatch('setMaterArr', [])
this.$router.push('/structmatersearch')
},
toJumpSearch () {
this.$router.push('/semifinishedchecksearch')
},
toRadio (e) {
this.pkId = this.pkId === e.struct_name ? '' : e.struct_name
this.pkObj = this.pkId === e.struct_name ? e : {}
},
delRow () {
if (!this.pkId) {
return
}
this.dataList = this.dataList.filter(el => el.struct_name !== this.pkId)
this.$store.dispatch('setMaterArr', this.dataList)
}
}
}

View File

@@ -31,43 +31,43 @@
<div class="search-item">
<div class="search-label">物料</div>
<div class="filter_input_wraper pointer" @click="searchMater">
<input type="text" class="filter-input" v-model="material_code" disabled>
<input type="text" class="filter-input" v-model="materObj.material_code" disabled>
</div>
</div>
<div class="search-item">
<div class="search-label">规格</div>
<div class="filter_input_wraper">
<input type="text" class="filter-input" v-model="material_spec" disabled>
</div>
</div>
<div class="search-item">
<div class="search-label">数量</div>
<div class="filter_input_wraper">
<input type="number" class="filter-input" v-model="qty" disabled>
</div>
</div>
<div class="search-item">
<div class="search-label">单重(g)</div>
<div class="filter_input_wraper">
<input type="number" class="filter-input" v-model="unit_weight" disabled>
<input type="text" class="filter-input" v-model="materObj.material_spec" disabled>
</div>
</div>
<div class="search-item">
<div class="search-label">重量(kg)</div>
<div class="filter_input_wraper">
<input type="number" class="filter-input" v-model="total_qty" disabled>
<input type="number" class="filter-input" v-model="materObj.fix_total_qty" disabled>
</div>
</div>
<div class="search-item">
<div class="search-label">单重(g)</div>
<div class="filter_input_wraper">
<input type="number" class="filter-input" v-model="materObj.fix_unit_weight" disabled>
</div>
</div>
<div class="search-item">
<div class="search-label">数量</div>
<div class="filter_input_wraper">
<input type="number" class="filter-input" v-model="materObj.fix_qty" disabled>
</div>
</div>
<div class="search-item">
<div class="search-label">货位</div>
<div class="filter_input_wraper">
<input type="text" class="filter-input" v-model="struct_code" disabled>
<input type="text" class="filter-input" v-model="materObj.struct_name" disabled>
</div>
</div>
<div class="search-item">
<div class="search-label">载具号</div>
<div class="filter_input_wraper">
<input type="text" class="filter-input" v-model="storagevehicle_code" disabled>
<input type="text" class="filter-input" v-model="materObj.storagevehicle_code" disabled>
</div>
</div>
<div class="search-item">
@@ -90,7 +90,7 @@
</div>
</div>
<div class="search-item_2">
<button class="button button--primary" :disabled="disabled2" :class="{'button--defalut': value1 === '' || value2 === '' || value3 === ''}" @click="toSure">确认出库</button>
<button class="button button--primary" :disabled="disabled2" :class="{'button--defalut': value1 === '' || value2 === '' || value3 === '' || JSON.stringify(materObj) === '{}'}" @click="toSure">确认出库</button>
<button class="button button--primary" @click="toJumpSearch">作业查询</button>
</div>
</div>
@@ -100,7 +100,6 @@
<script>
import {outgetBcpStor, outgetBillType, outgetPoint, outcreateIn} from '@config/getData2.js'
import {accMul, accDiv} from '@config/utils.js'
export default {
name: 'semifinishedoutstore',
data () {
@@ -111,29 +110,12 @@ export default {
value2: '',
options3: [],
value3: '',
material_id: '',
material_code: '',
material_spec: '',
unit_weight: '',
qty: '',
struct_code: '',
storagevehicle_code: '',
materObj: {},
remark: '',
disabled1: false,
disabled2: false
}
},
computed: {
total_qty () {
let res = ''
if (this.unit_weight !== '') {
let res1 = accMul(this.unit_weight, this.qty)
res = accDiv(res1, 1000)
res = Number(res).toFixed(3)
}
return res
}
},
beforeRouteLeave (to, from, next) {
if (to.path === '/home' || to.path === '/login') {
this.$store.dispatch('setKeepAlive', [])
@@ -142,13 +124,10 @@ export default {
},
activated () {
if (this.$store.getters.materObj !== '') {
this.material_id = JSON.parse(this.$store.getters.materObj).material_id
this.material_code = JSON.parse(this.$store.getters.materObj).material_code
this.material_spec = JSON.parse(this.$store.getters.materObj).material_spec
this.unit_weight = Number(JSON.parse(this.$store.getters.materObj).unit_weight).toFixed(3)
this.qty = Number(JSON.parse(this.$store.getters.materObj).canuse_qty).toFixed(3)
this.struct_code = JSON.parse(this.$store.getters.materObj).struct_name
this.storagevehicle_code = JSON.parse(this.$store.getters.materObj).storagevehicle_code
this.materObj = JSON.parse(this.$store.getters.materObj)
this.$set(this.materObj, 'fix_total_qty', Number(JSON.parse(this.$store.getters.materObj).total_qty).toFixed(3))
this.$set(this.materObj, 'fix_unit_weight', Number(JSON.parse(this.$store.getters.materObj).unit_weight).toFixed(3))
this.$set(this.materObj, 'fix_qty', Number(JSON.parse(this.$store.getters.materObj).qty).toFixed(3))
}
},
created () {
@@ -175,37 +154,22 @@ export default {
// 确认出库
async toSure () {
this.disabled2 = true
if (this.value1 === '' || this.value2 === '' || this.value3 === '') {
if (this.value1 === '' || this.value2 === '' || this.value3 === '' || JSON.stringify(this.materObj) === '{}') {
this.disabled2 = false
return
}
let from = this.materObj
this.$set(from, 'stor_id', this.value1)
this.$set(from, 'bill_type', this.value2)
this.$set(from, 'point_code', this.value3)
this.$set(from, 'remark', this.remark)
try {
let from = {
stor_id: this.value1,
bill_type: this.value2,
material_id: this.material_id,
material_code: this.material_code,
material_spec: this.material_spec,
total_qty: this.total_qty,
unit_weight: this.unit_weight,
qty: this.qty,
point_code: this.value3,
struct_code: this.struct_code,
storagevehicle_code: this.storagevehicle_code,
remark: this.remark
}
let res = await outcreateIn(from)
this.toast(res.message)
this.value1 = ''
this.value2 = ''
this.value3 = ''
this.material_id = ''
this.material_code = ''
this.material_spec = ''
this.total_qty = ''
this.unit_weight = ''
this.struct_code = ''
this.storagevehicle_code = ''
this.materObj = {}
this.remark = ''
this.disabled2 = false
this.$store.dispatch('setMaterObj', '')

View File

@@ -432,6 +432,13 @@ input::-webkit-input-placeholder
margin-left 4%
.button+.button
margin-left 5px
.search-item_3
_fj(flex-end)
width 100%
margin-top 10px
margin-left 0
.button+.button
margin-left 5px
.flexend
justify-content flex-end
.loading-tips