nalinv-ui/src/views/wms/inventory-group-bind/index.vue
2024-11-20 10:37:52 +08:00

235 lines
7.7 KiB
Vue

<template>
<div class="execution">
<basic-container>
<el-form ref="formObj" :model="formObj" label-width="auto">
<el-row>
<el-col :span="24">
<el-form-item label="站点:" prop="site">
<el-input placeHolder="站点" v-model="site" :disabled="true"></el-input>
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="条码扫描:" prop="code" class="inputRequired">
<el-input v-model="formObj.code" placeholder="条码扫描" autofocus
@keyup.enter.native="scanCode">
<i slot="suffix" class="el-input__icon el-icon-full-screen"></i>
</el-input>
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="组条码:" prop="group" class="inputRequired">
<el-input placeHolder="组条码" v-model="formObj.groupId" :disabled="true"></el-input>
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="物料号:" prop="item" class="inputRequired">
<el-input placeHolder="物料号" v-model="formObj.item" :disabled="true"></el-input>
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="货格号:" prop="storageBin" class="inputRequired">
<el-input placeHolder="货格号" v-model="formObj.storageBin" :disabled="true"></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="已绑数量:" prop="bindQty" class="inputRequired">
<el-input placeHolder="已绑数量" v-model="formObj.bindQty" :disabled="true"></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="已扫数量:" prop="scanQty" class="inputRequired">
<el-input placeHolder="已扫数量" v-model="formObj.scanQty" :disabled="true"></el-input>
</el-form-item>
</el-col>
</el-row>
</el-form>
<el-table :data="inventoryList" border :row-style="tableRowClassName">
<el-table-column label="序号" align="center">
<template slot-scope="scope">
{{scope.$index+1}}
</template>
</el-table-column>
<el-table-column label="库存条码" prop="inventoryId"></el-table-column>
</el-table>
<div style="margin-top: 10px;">
<el-button type="primary" @click="bind">合组</el-button>
<el-button type="warning" @click="doClear">清除</el-button>
</div>
</basic-container>
</div>
</template>
<script>
import {scanCode, bindGroup} from '@/api/wms/inventory-group';
import {isBlank} from "@/util/string";
import {getStore} from '@/util/store';
import {add} from '@/util/bigNumber';
import {showLoading, hideLoading} from '@/const/loading';
import {listByActivityId} from "@/api/admin/activity-option";
import {
mapGetters
} from 'vuex';
export default {
data() {
return {
lableWidth: {
'width': '150px'
},
site: getStore({name: 'tenantId'}),
formObj: {},
initData: {
bindQty: 0,
scanQty: 0
},
inventoryList: []
};
},
created() {
this.doClear();
},
beforeRouteEnter(to, from, next) {
next(vm => {
try {
//获取作业规则
let me = vm;
let activityId = me.$route.query.ACTIVITY_ID;
listByActivityId(activityId).then(response => {
if (response.data.code != 0) {
return me.$message.error(response.data.msg);
}
let data = response.data.data;
if (data && data.length > 0) {
for (let i = 0; i < data.length; i++) {
if (data[i].optionName && data[i].optionName.toUpperCase() === "PRINTER_X") {
me.printer = data[i].optionValue;
}
}
}
}).catch(e => {
console.log(e);
});
} catch (e) {
console.log(e);
}
});
},
computed: {
...mapGetters(["permissions"]),
permissionList() {
return {};
}
},
methods: {
//清除页面信息
doClear() {
this.formObj = Object.assign({}, this.initData);
this.inventoryList = [];
},
scanCode() {
let me = this;
let code = me.formObj.code;
if (isBlank(code)) {
me.$message.error("不可扫描空条码");
return;
} else if (me.inventoryList.findIndex(o => o.inventoryId === code) >= 0) {
me.formObj.code = '';
return me.$message.error('条码已扫描');
} else {
showLoading();
scanCode({
code: code
}).then(res => {
hideLoading();
if (res.data.code !== 0) {
return me.$message.error(res.data.msg);
}
me.formObj.code = '';
let data = res.data.data;
let firstData = data[0];
if (firstData.groupId) {
if (me.formObj.groupId) {
return me.$message.error('已存在组号,请拆组后再进行合组');
} else {
me.formObj.groupId = firstData.groupId;
}
}
if (!(isBlank(me.formObj.item) || isBlank(me.formObj.storageBin)) && (me.formObj.item !== firstData.item || me.formObj.storageBin !== firstData.storageBin)) {
if (firstData.scanType === 'GROUP') {
return me.$message.error('组条码' + code + '的物料或货格与界面信息不符');
} else {
return me.$message.error('库存条码' + code + '的物料或货格与界面信息不符');
}
}
if (me.inventoryList.length > 0 && !me.inventoryList.some(o => o.status === firstData.status)) {
return me.$message.error('库存条码' + code + '状态与已有条码不同');
}
me.formObj.item = firstData.item;
me.formObj.storageBin = firstData.storageBin;
me.formObj.bindQty = data.length;
me.formObj.scanQty = add(me.formObj.scanQty, isBlank(firstData.groupId) ? 1 : 0);
me.inventoryList = me.inventoryList.concat(data);
}).catch(e => hideLoading());
}
},
bind() {
let me = this;
let bindList = me.inventoryList.filter(o => isBlank(o.groupId));
if (bindList.length <= 0) {
return me.$message.error('无需合组的信息,请确认');
} else {
showLoading();
bindGroup({
printer: me.printer,
groupId: me.formObj.groupId,
list: bindList
}).then(res => {
hideLoading();
if (res.data.code !== 0) {
return me.$message.error(res.data.msg);
}
me.doClear();
return me.$message.success("合组成功");
}).catch(e => hideLoading());
}
},
tableRowClassName({row, rowIndex}) {
if (isBlank(row.groupId)) {
return {backgroundColor: "#00f916"};
}
return '';
},
},
};
</script>
<style scoped lang="scss">
.inputRequired ::v-deep .el-form-item__label::before {
content: "*";
width: 10px;
height: 20px;
display: inline-block;
vertical-align: middle;
text-align: center;
line-height: 26px;
font-size: large;
color: #f00;
}
// 去掉hover效果
::v-deep .el-table tbody tr:hover > td {
background-color: transparent !important;
}
</style>