<template>
|
<el-dialog v-dialogDrag ref="uploadRef" :visible.sync="currentDialogVisible" :title="positionTitle" class="position-dialog-container" width="780px">
|
<el-alert :closable="false" title="提示:请认真填写下面库区各项参数,然后点击确定按钮生成库存货位布局。" type="success" class="alert-msg">
|
</el-alert>
|
<el-form ref="form" :model="formData" :rules="rules" label-width="140px" class="form-wrap" size="mini">
|
<el-form-item required label="仓库名称" class="margin-bottom-10">
|
<span>{{ formData.storageName }}</span>
|
</el-form-item>
|
<el-form-item required label="库区名称" prop="areaCode">
|
<input-select v-model="formData.areaCode" :options="areaCodeList" :click-hidden="true" label="库区名称" input-width="200px" trigger="focus">
|
</input-select>
|
</el-form-item>
|
<el-form-item required label="温层类型" prop="thermoclineType">
|
<el-select v-model="formData.thermoclineType" placeholder="请选择活动区域">
|
<el-option label="常温层" value="常温层"></el-option>
|
</el-select>
|
</el-form-item>
|
<el-form-item required label="编码规则" prop="positionRegular">
|
<el-input v-model="formData.positionRegular" placeholder="请输入货位编码规则" class="w-200">
|
</el-input> 标准编码规则:{库区}-{通道}{货架}{层}{列}
|
</el-form-item>
|
<el-form-item required label="货位类型" prop="positionType">
|
<el-select v-model.number="formData.positionType" placeholder="请选择货位类型" class="w-200">
|
<el-option v-for="(item, index) in positionTypeList" :key="index" :label="item.label" :value="item.value"></el-option>
|
</el-select>
|
</el-form-item>
|
<el-form-item required label="货位最大重量" prop="maxWeight">
|
<el-input-number v-model.number="formData.maxWeight" controls-position="right" class="w-200"></el-input-number>
|
</el-form-item>
|
<el-form-item required label="货位最大拍数" prop="maxBeatNumber">
|
<el-input-number v-model.number="formData.maxBeatNumber" controls-position="right" class="w-200"></el-input-number>
|
</el-form-item>
|
<el-form-item required label="货位最大数量" prop="maxCapacity">
|
<el-input-number v-model.number="formData.maxCapacity" controls-position="right" class="w-200"></el-input-number>
|
</el-form-item>
|
<el-form-item required label="存货率计算" prop="inventoryRate">
|
<el-radio-group v-model="formData.inventoryRate">
|
<el-radio label="按数量">按数量</el-radio>
|
<el-radio label="按重量">按重量</el-radio>
|
<el-radio label="按拍数">按拍数</el-radio>
|
</el-radio-group>
|
</el-form-item>
|
<el-form-item required label="摆放模式" prop="shelveMode">
|
<el-radio-group v-model="formData.shelveMode">
|
<el-radio label="立体货架">立体货架</el-radio>
|
<el-radio label="地堆">地堆</el-radio>
|
</el-radio-group>
|
</el-form-item>
|
<template v-if="formData.shelveMode==='立体货架'">
|
<el-form-item required label="拣货模式" prop="pickMode">
|
<el-radio-group v-model="formData.pickMode" @change="onChangePickMode">
|
<el-radio label="U型">U型</el-radio>
|
<el-radio label="Z型">Z型</el-radio>
|
<el-radio label="AB面奇偶型">AB面奇偶型</el-radio>
|
</el-radio-group>
|
</el-form-item>
|
<el-form-item required label="库区通道数" prop="channelNum">
|
<el-input-number v-model.number="formData.channelNum" controls-position="right" class="w-100"></el-input-number>
|
<span class="tip">当前库区总共有多少个通道</span>
|
</el-form-item>
|
<el-form-item required label="货架层数" prop="rowNum">
|
<el-input-number v-model.number="formData.rowNum" controls-position="right" class="w-100"></el-input-number>
|
<span class="tip">每个货架有多少层</span>
|
</el-form-item>
|
<el-form-item required label="货架列数" prop="columnNum">
|
<el-input-number v-model.number="formData.columnNum" controls-position="right" class="w-100"></el-input-number>
|
<span class="tip">每个货架每层分多少列(格)</span>
|
</el-form-item>
|
<template v-if="formData.pickMode=='U型'">
|
<el-form-item required label="A面货架编号范围" prop="shelveNumA_1">
|
<el-input-number v-model.number="formData.shelveNumA_1" :disabled="true" controls-position="right" class="w-100"></el-input-number> ~
|
<el-input-number v-model.number="formData.shelveNumA_2" controls-position="right" class="w-100"></el-input-number>
|
<span class="tip">库区一般每个通道中存在A面、B面</span>
|
</el-form-item>
|
<el-form-item required label="B面货架编号范围" prop="shelveNumB_1">
|
<el-input-number v-model.number="formData.shelveNumB_1" controls-position="right" class="w-100"></el-input-number> ~
|
<el-input-number v-model.number="formData.shelveNumB_2" controls-position="right" class="w-100"></el-input-number>
|
<span class="tip">库区开头可能只有A面,结尾只有B面</span>
|
</el-form-item>
|
</template>
|
<template v-else-if="formData.pickMode=='Z型'">
|
<el-form-item required label="货架编号范围" prop="shelveNumA_1">
|
<el-input-number v-model.number="formData.shelveNumZ_1" :disabled="true" controls-position="right" class="w-100"></el-input-number> ~
|
<el-input-number v-model.number="formData.shelveNumZ_2" controls-position="right" class="w-100"></el-input-number>
|
</el-form-item>
|
</template>
|
</template>
|
<template v-if="formData.shelveMode==='地堆'">
|
<el-form-item required label="库区通道数" prop="channelNum_didui">
|
<el-input-number v-model.number="formData.channelNum_didui" controls-position="right" class="w-100"></el-input-number>
|
<span class="tip">当前地堆库区总共有多少个通道</span>
|
</el-form-item>
|
<el-form-item required label="地堆行数" prop="rowNum_didui">
|
<el-input-number v-model.number="formData.rowNum_didui" controls-position="right" class="w-100"></el-input-number>
|
<span class="tip">每个货架有多少层</span>
|
</el-form-item>
|
<el-form-item required label="地堆列数" prop="columnNum_didui">
|
<el-input-number v-model.number="formData.columnNum_didui" controls-position="right" class="w-100"></el-input-number>
|
<span class="tip">每个地堆区分多少列(格)</span>
|
</el-form-item>
|
</template>
|
</el-form>
|
|
<span slot="footer" class="dialog-footer">
|
<el-button icon="el-icon-yrt-guanbi1" @click="currentDialogVisible = false">取 消</el-button>
|
<el-button icon="el-icon-yrt-save" @click="resetForm">重置</el-button>
|
<el-button :loading="isLoading" type="primary" icon="el-icon-yrt-save" @click="submitForm">确定</el-button>
|
</span>
|
</el-dialog>
|
</template>
|
|
<script>
|
import InputSelect from "@/components/base/InputSelect";
|
|
export default {
|
components: {
|
InputSelect
|
},
|
props: {
|
visible: {
|
type: Boolean,
|
default: false
|
},
|
label: {
|
type: String,
|
default: null
|
},
|
options: {
|
type: Object,
|
default: () => {
|
return {};
|
}
|
},
|
// 表单数据
|
areaData: {
|
type: Object,
|
default: () => {
|
return {
|
// 摆放模式
|
shelveMode: "立体货架",
|
// 拣货模式
|
pickMode: "U型"
|
};
|
}
|
},
|
importData: {
|
type: Function,
|
default: () => {
|
return () => {};
|
}
|
},
|
// 标题
|
positionTitle: {
|
type: String,
|
default: null
|
}
|
},
|
data() {
|
return {
|
isLoading: false,
|
// 库区候选项
|
areaCodeList: "A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z".split(",").map(item => {
|
return {
|
label: item,
|
value: item
|
};
|
}),
|
// 货位类型
|
positionTypeList: [
|
{
|
label: "常规货位",
|
value: 1
|
},
|
{
|
label: "残品货位",
|
value: 2
|
},
|
{
|
label: "借入货位",
|
value: 3
|
},
|
{
|
label: "收货位",
|
value: 4
|
},
|
{
|
label: "下架理货位",
|
value: 5
|
},
|
{
|
label: "暂存货位",
|
value: 6
|
},
|
{
|
label: "虚拟货位",
|
value: 7
|
},
|
{
|
label: "次品货位",
|
value: 8
|
},
|
{
|
label: "拣货车",
|
value: 9
|
},
|
{
|
label: "灯光分拣位",
|
value: 11
|
},
|
{
|
label: "高架货位",
|
value: 12
|
},
|
{
|
label: "存储货位",
|
value: 13
|
},
|
{
|
label: "临期货位",
|
value: 14
|
}
|
],
|
// 验证规则
|
rules: {
|
areaCode: [{ required: true, message: "请选择库区名称", trigger: "blur" }],
|
positionType: [{ required: true, message: "请选择货位类型", trigger: "blur" }],
|
maxCapacity: [
|
{ required: true, message: "请输入最大库位量", trigger: "blur" },
|
{ type: "number", min: 1, message: "最小值为1", trigger: "blur" }
|
],
|
shelveMode: [{ required: true, message: "请选择摆放模式", trigger: "blur" }],
|
pickMode: [{ required: true, message: "请选择拣货模式", trigger: "blur" }],
|
channelNum: [
|
{ required: true, message: "请输入库区通道数", trigger: "blur" },
|
{ type: "number", min: 1, message: "最小值为1", trigger: "blur" }
|
],
|
rowNum: [{ required: true, message: "请输入货架层数", trigger: "blur" }, { type: "number", min: 1, message: "最小值为1", trigger: "blur" }],
|
columnNum: [
|
{ required: true, message: "请输入货架列数", trigger: "blur" },
|
{ type: "number", min: 1, message: "最小值为1", trigger: "blur" }
|
],
|
shelveNumA_1: [
|
{ required: true, message: "请输入A面货架编号范围", trigger: "blur" },
|
{ type: "number", min: 1, message: "最小值为1", trigger: "blur" }
|
],
|
shelveNumB_1: [
|
{ required: true, message: "请输入B面货架编号范围", trigger: "blur" },
|
{ type: "number", min: 1, message: "最小值为1", trigger: "blur" }
|
],
|
channelNum_didui: [
|
{ required: true, message: "请输入库区通道数", trigger: "blur" },
|
{ type: "number", min: 1, message: "最小值为1", trigger: "blur" }
|
],
|
rowNum_didui: [
|
{ required: true, message: "请输入地堆行数", trigger: "blur" },
|
{ type: "number", min: 1, message: "最小值为1", trigger: "blur" }
|
],
|
columnNum_didui: [
|
{ required: true, message: "请输入地堆列数", trigger: "blur" },
|
{ type: "number", min: 1, message: "最小值为1", trigger: "blur" }
|
],
|
shelveNumZ_1: [
|
{ required: true, message: "货架编号范围", trigger: "blur" },
|
{ type: "number", min: 1, message: "最小值为1", trigger: "blur" }
|
]
|
},
|
// 当前表单数据
|
formData: {
|
maxCapacity: 0,
|
rowNum_didui: 0,
|
columnNum_didui: 0
|
}
|
};
|
},
|
computed: {
|
// 显示窗口
|
currentDialogVisible: {
|
get: function() {
|
return this.visible;
|
},
|
set: function(val) {
|
this.$emit("update:visible", val);
|
}
|
}
|
},
|
watch: {
|
areaData: {
|
handler: function() {
|
this.formData = JSON.parse(JSON.stringify(this.areaData));
|
},
|
deep: true
|
}
|
},
|
created() {
|
this.getareaCodeList();
|
},
|
methods: {
|
// 获得库区下拉框
|
getareaCodeList() {
|
const url = "/api/sys/param/getValueList";
|
const params = {
|
type_Id: 735
|
};
|
this.common.ajax(url, params, res => {
|
this.common.showMsg(res);
|
if (res.result) {
|
this.areaCodeList = res.data.map(item => {
|
return {
|
value: item.value02,
|
label: item.value02
|
};
|
});
|
}
|
});
|
},
|
// 保存数据
|
submitForm() {
|
if (this.formData.action === "modify" && this.formData.channelNum > this.areaData.channelNum) {
|
this.$message.error("新输入通道数不能小于原通道数!");
|
return;
|
}
|
if (this.formData.action === "modify" && this.formData.rowNum > this.areaData.rowNum) {
|
this.$message.error("新输入货架层数不能小于原货架层数!");
|
return;
|
}
|
if (this.formData.action === "modify" && this.formData.channelNum > this.areaData.channelNum) {
|
this.$message.error("新输入货架列数不能小于原货架列数!");
|
return;
|
}
|
if (this.formData.shelveMode === "地堆") {
|
this.formData.channelNum = this.formData.channelNum_didui;
|
this.formData.rowNum = this.formData.rowNum_didui;
|
this.formData.columnNum = this.formData.columnNum_didui;
|
} else {
|
if (this.formData.pickMode === "U型") {
|
if (this.formData.action === "modify" && this.formData.shelveNumA_2 > this.areaData.shelveNumA_2) {
|
this.$message.error("新输入A面货架数不能小于原A面货架数!");
|
return;
|
}
|
if (this.formData.action === "modify" && this.formData.shelveNumB_2 > this.areaData.shelveNumB_2) {
|
this.$message.error("新输入B面货架数不能小于原B面货架数!");
|
return;
|
}
|
if (this.formData.action === "modify" && this.formData.shelveNumA_2 > this.areaData.shelveNumA_2) {
|
this.$message.error("新输入货架数不能小于原货架数!");
|
return;
|
}
|
} else if (this.formData.pickMode === "Z型") {
|
this.formData.shelveNumA_1 = this.formData.shelveNumZ_1;
|
this.formData.shelveNumA_2 = this.formData.shelveNumZ_2;
|
|
if (this.formData.action === "modify" && this.formData.shelveNumA_2 > this.areaData.shelveNumA_2) {
|
this.$message.error("新输入货架数不能小于原货架数!");
|
return;
|
}
|
if (this.formData.shelveNumA_1 > this.formData.shelveNumA_2) {
|
this.$message.error("请输入货架编号范围,开始值不能大于结束值!");
|
return;
|
}
|
this.formData.shelveNumB_1 = null;
|
this.formData.shelveNumB_2 = null;
|
} else if (this.formData.pickMode === "AB面奇偶型") {
|
if (this.formData.action === "modify" && this.formData.shelveNumA_2 > this.areaData.shelveNumA_2) {
|
this.$message.error("新输入货架数不能小于原货架数!");
|
return;
|
}
|
if (this.formData.shelveNumA_1 > this.formData.shelveNumA_2) {
|
this.$message.error("请输入货架编号范围,开始值不能大于结束值!");
|
return;
|
}
|
this.formData.shelveNumB_1 = null;
|
this.formData.shelveNumB_2 = null;
|
}
|
}
|
|
this.$refs["form"].validate((valid, result) => {
|
if (valid) {
|
this.$emit("on-confirm", this.formData);
|
this.currentDialogVisible = false;
|
} else {
|
Object.keys(result).forEach(key => {
|
this.$message.error(result[key][0].message);
|
});
|
return false;
|
}
|
});
|
},
|
// 重置
|
resetForm() {
|
this.$refs["form"].resetFields();
|
},
|
// 设置AB
|
onChangePickMode(val) {
|
if (val === "AB面奇偶型") {
|
this.formData.shelveNumA_1 = 1;
|
this.formData.shelveNumA_2 = 2;
|
}
|
}
|
}
|
};
|
</script>
|
|
<style lang="scss" scoped>
|
.position-dialog-container {
|
/deep/ .el-dialog__body {
|
padding-top: 0px;
|
}
|
/deep/ .scrollbar-wrap {
|
max-height: 400px;
|
overflow-x: hidden;
|
padding: 0px;
|
}
|
.form-wrap {
|
margin-top: 20px;
|
}
|
}
|
</style>
|