<template>
|
<div class="tab-container">
|
<split-pane :max-width="500" :default-width="260" split="vertical">
|
<div slot="paneL" class="left-container">
|
<el-form class="form-tool">
|
<el-form-item>
|
<el-input v-model="filterText" placeholder="搜索名称" prefix-icon="el-icon-search" class="search-input">
|
</el-input>
|
<el-button title="刷新" class="btn-refresh" icon="el-icon-yrt-shuaxin" @click.native="treeRefresh"></el-button>
|
</el-form-item>
|
<el-form-item>
|
<!--数据tree-->
|
<el-tree ref="tree" :data="dataTree" :load="(node, resolve) => {loadTreeNode(node, resolve);}" :expand-on-click-node="false" :filter-node-method="filterTreeNode" :default-expand-all="false" :props="props" node-key="treeKey" highlight-current lazy @node-click="nodeClick">
|
<span slot-scope="{ node, data }" class="custom-tree-node" @mouseover="() => treeNodeOver(node, data)" @mouseout="() => treeNodeOut(node, data)">
|
<span>
|
<i v-if="data.hasChild" class="el-icon-menu"></i>
|
<i v-else class="el-icon-tickets"></i>
|
{{ node.label }}
|
</span>
|
</span>
|
</el-tree>
|
</el-form-item>
|
</el-form>
|
</div>
|
|
<!--右侧主区-->
|
<div slot="paneR" class="right-container">
|
<!--数据Table-->
|
<yrt-data-list :ref="dataListRef" :editor-ref="editorRef" :data-options="dataOptions" :fields.sync="dataListOptions.fields" :buttons="dataListOptions.buttons" :data-list-selections.sync="dataListSelections" :auth-nodes="authNodes" :button-click="buttonClick" :fixed-where="fixedWhere">
|
</yrt-data-list>
|
<el-dialog :visible.sync="dialogFormVisible" title="修改" width="500px" append-to-body>
|
<el-form :label-width="formLabelWidth">
|
<el-form-item label="长">
|
<el-col :span="11">
|
<el-input v-model="taskForm.length"></el-input>
|
</el-col>
|
</el-form-item>
|
<el-form-item label="宽">
|
<el-col :span="11">
|
<el-input v-model="taskForm.width"></el-input>
|
</el-col>
|
</el-form-item>
|
<el-form-item label="高">
|
<el-col :span="11">
|
<el-input v-model="taskForm.height"></el-input>
|
</el-col>
|
</el-form-item>
|
</el-form>
|
<div slot="footer" class="dialog-footer">
|
<el-button @click="dialogFormVisible=false">取 消</el-button>
|
<el-button type="primary" @click="updateAll()">确 定</el-button>
|
</div>
|
</el-dialog>
|
|
<!--数据编辑器Editor-->
|
<yrt-editor :ref="editorRef" :data-list-ref="dataListRef" v-bind="editorOptions" :data-options="dataOptions" :action.sync="editorOptions.action" :top.sync="editorOptions.top" :visible.sync="editorOptions.config.visible" :auth-nodes="authNodes" :default-value="defaultValue" @on-change="onChange" @on-save-after="onSaveAfter"></yrt-editor>
|
<!-- 主表批量导入 -->
|
<import-dialog :visible.sync="orderImportConfig.isShowDialog" :import-config="orderImportConfig" @on-close="onImportClose">
|
</import-dialog>
|
</div>
|
</split-pane>
|
</div>
|
</template>
|
|
<script>
|
import splitPane from "@/components/splitPane";
|
import yrtDataList from "@/components/common/yrtDataList";
|
import yrtEditor from "@/components/common/yrtEditor";
|
import baseLayout from "@/components/common/base-layout.vue";
|
import ImportDialog from "@/components/common/components/import-common-dialog";
|
import yrtSelector from "@/components/common/yrtSelector.vue";
|
|
export default {
|
name: "Position-tab",
|
// 自定义JSON路由地址
|
custoJsonmRoute: "/storage/setting/position",
|
|
components: {
|
splitPane, // 分割器
|
yrtDataList, // 数据管理器
|
yrtEditor, // 数据编辑器
|
yrtSelector,
|
ImportDialog
|
},
|
mixins: [baseLayout],
|
data() {
|
return {
|
taskForm: {},
|
formLabelWidth: "120px",
|
dialogFormVisible: false,
|
filterText: "",
|
dataTree: [],
|
treeNodeOverId: 0, // 鼠标滑过的ID
|
props: {
|
label: "label",
|
children: "children",
|
isLeaf: "isLeaf"
|
},
|
// 固定查询条件
|
fixedWhere: null,
|
// 编辑新建时表单默认值
|
defaultValue: {
|
statusID: 1,
|
statusText: "新建",
|
parentId: 0
|
},
|
orderImportConfig: {
|
// 显示导入对话框
|
isShowDialog: false,
|
title: "货位信息导入",
|
// 导入地址
|
url: "/api/setting/position/import",
|
// 模板地址
|
templateUrl: this.common.templateDomain + "/node-wms/template/得盛库位管理批量导入模板.xlsx"
|
}
|
};
|
},
|
watch: {
|
filterText(val) {
|
this.$refs.tree.filter(val);
|
}
|
},
|
created() {},
|
methods: {
|
UpdateField() {
|
// var ids = [];
|
// debugger;
|
// this.dataListSelections.forEach(item => {
|
// ids.push(item[this.dataOptions.idField]);
|
// });
|
// if (!ids.length) {
|
// this.$message.error("至少选择一项!");
|
// return;
|
// }
|
this.dialogFormVisible = true;
|
},
|
// 批量修改
|
updateAll() {
|
var ids = [];
|
var fix = this.fixedWhere;
|
if (fix) {
|
const url = "api/storage/position/updateAll";
|
|
debugger;
|
this.dataListSelections.forEach(item => {
|
ids.push(item[this.dataOptions.idField]);
|
});
|
const params = {
|
ids: ids,
|
taskForm: this.taskForm,
|
areaCode: this.fixedWhere.areaCode,
|
shelveCode: this.fixedWhere.shelveCode,
|
storage_Id: this.fixedWhere.storage_Id,
|
channelCode: this.fixedWhere.channelCode
|
};
|
debugger;
|
var callback = res => {
|
this.common.showMsg(res);
|
if (res.result) {
|
this.dialogFormVisible = false;
|
this.treeRefresh();
|
this.dataList.loadData();
|
}
|
};
|
this.common.ajax(url, params, callback, true);
|
} else {
|
const url = "api/storage/position/updateAll";
|
debugger;
|
this.dataListSelections.forEach(item => {
|
ids.push(item[this.dataOptions.idField]);
|
});
|
const params = {
|
ids: ids,
|
taskForm: this.taskForm
|
// areaCode: this.fixedWhere.areaCode,
|
// shelveCode: this.fixedWhere.shelveCode,
|
// storage_Id: this.fixedWhere.storage_Id,
|
// channelCode: this.fixedWhere.channelCode
|
};
|
debugger;
|
var callbacks = res => {
|
this.common.showMsg(res);
|
if (res.result) {
|
this.dialogFormVisible = false;
|
this.treeRefresh();
|
this.dataList.loadData();
|
}
|
};
|
this.common.ajax(url, params, callbacks, true);
|
}
|
},
|
// 列表页面按钮点击事件
|
buttonClick(authNode) {
|
switch (authNode) {
|
case "print":
|
// 打印条码
|
return this.printBarcode();
|
case "allImport":
|
this.orderImportConfig.isShowDialog = true;
|
return true;
|
// 批量修改
|
case "allupdate":
|
// 重新获取运单号
|
this.UpdateField();
|
|
return true;
|
}
|
},
|
// 导入窗口关闭时事件
|
onImportClose() {
|
this.dataList.reload();
|
},
|
// 获得左侧类目导航节点数据
|
loadTreeNode(node, resolve) {
|
this.$nextTick(() => {
|
var userInfo = this.common.getUserInfo();
|
var where = "";
|
var url = "/api/common/loadTreeNodeByAuth";
|
var params = {
|
openNodeApi: true
|
};
|
if (node.level === 0) {
|
// 仓库
|
where = {
|
parentId: 0,
|
userProduct_Id: userInfo.userProduct_Id
|
};
|
if (this.filterText) {
|
where.storageName = {
|
operator: "like",
|
value: this.filterText
|
};
|
}
|
params = {
|
openNodeApi: true,
|
folder: "basicInfo/base",
|
dbServer: "Sys",
|
tableName: "Base_Storage",
|
tableView: "Base_Storage",
|
keyName: "storage_Id",
|
nodeName: "storageName",
|
fixHasChild: true,
|
isBreakWay: false,
|
displayBreakWay: false,
|
parentName: "parentId",
|
orderBy: { orderNo: "DESC", storage_Id: "ASC" },
|
where: where,
|
extendColumns: ""
|
};
|
} else if (node.level === 1) {
|
// 库区
|
where = {
|
storage_Id: node.data.storage_Id
|
};
|
params = {
|
openNodeApi: true,
|
folder: "basicInfo/base",
|
dbServer: "Sys",
|
tableName: "vBase_StorageArea_All",
|
tableView: "vBase_StorageArea_All",
|
keyName: "storageArea_Id",
|
nodeName: "areaCode",
|
fixHasChild: true,
|
isBreakWay: false,
|
displayBreakWay: false,
|
parentName: "",
|
orderBy: "orderNo desc, areaCode, shelveMode",
|
where: where,
|
extendColumns: "storage_Id"
|
};
|
} else if (node.level === 2) {
|
if (node.data.areaCode === "非标准库区") {
|
// 非标准库区
|
where = {
|
parentId: 0,
|
storage_Id: node.data.storage_Id,
|
areaCode: null
|
};
|
params = {
|
openNodeApi: true,
|
folder: "basicInfo/base",
|
dbServer: "Sys",
|
tableName: "Base_Position",
|
tableView: "Base_Position",
|
keyName: "position_Id",
|
nodeName: "positionName",
|
fixHasChild: false,
|
isBreakWay: false,
|
displayBreakWay: false,
|
parentName: "",
|
orderBy: "orderNo desc, positionName",
|
where: where,
|
extendColumns: "storage_Id,areaCode"
|
};
|
} else {
|
// 通道
|
where = {
|
storage_Id: node.data.storage_Id,
|
areaCode: node.data.areaCode
|
};
|
params = {
|
openNodeApi: true,
|
folder: "basicInfo/base",
|
dbServer: "Sys",
|
tableName: "vBase_PositionChannel",
|
tableView: "vBase_PositionChannel",
|
keyName: "Channel_Id",
|
nodeName: "channelCode",
|
fixHasChild: true,
|
isBreakWay: false,
|
displayBreakWay: false,
|
parentName: "",
|
orderBy: "channelCode,areaCode",
|
where: where,
|
extendColumns: "storage_Id,areaCode,shelveMode"
|
};
|
}
|
} else if (node.level === 3) {
|
if (node.data.shelveMode === "地堆") {
|
// 地堆没有货架直接显示货位
|
where = {
|
storage_Id: node.data.storage_Id,
|
areaCode: node.data.areaCode,
|
channelCode: node.data.channelCode
|
};
|
params = {
|
openNodeApi: true,
|
folder: "basicInfo/base",
|
dbServer: "Sys",
|
tableName: "Base_Position",
|
tableView: "Base_Position",
|
keyName: "position_Id",
|
nodeName: "positionName",
|
fixHasChild: false,
|
isBreakWay: false,
|
displayBreakWay: false,
|
parentName: "parentId",
|
orderBy: "orderNo desc, positionName",
|
where: where,
|
extendColumns: "storage_Id,areaCode,shelveMode"
|
};
|
} else {
|
where = {
|
storage_Id: node.data.storage_Id,
|
areaCode: node.data.areaCode,
|
channelCode: node.data.channelCode
|
};
|
params = {
|
openNodeApi: true,
|
folder: "basicInfo/base",
|
dbServer: "Sys",
|
tableName: "vBase_PositionShelve",
|
tableView: "vBase_PositionShelve",
|
keyName: "Shelve_Id",
|
nodeName: "shelveCode",
|
fixHasChild: true,
|
isBreakWay: false,
|
displayBreakWay: false,
|
parentName: "",
|
orderBy: "shelveCode",
|
where: where,
|
extendColumns: "storage_Id,areaCode,channelCode"
|
};
|
}
|
} else if (node.level === 4) {
|
// 货位
|
if (!node.data.areaCode) {
|
// 非标准,直接加载货位
|
where = { parentId: node.data.storage_Id };
|
params = {
|
openNodeApi: true,
|
folder: "basicInfo/base",
|
dbServer: "Sys",
|
tableName: "Base_Position",
|
tableView: "Base_Position",
|
keyName: "position_Id",
|
nodeName: "positionName",
|
fixHasChild: false,
|
isBreakWay: false,
|
displayBreakWay: false,
|
parentName: "parentId",
|
orderBy: "orderNo desc, positionName",
|
where: where,
|
extendColumns: "storage_Id,areaCode,channelCode,shelveMode"
|
};
|
} else {
|
where = {
|
storage_Id: node.data.storage_Id,
|
areaCode: node.data.areaCode,
|
channelCode: node.data.channelCode,
|
shelveCode: node.data.shelveCode
|
};
|
params = {
|
openNodeApi: true,
|
folder: "basicInfo/base",
|
dbServer: "Sys",
|
tableName: "Base_Position",
|
tableView: "Base_Position",
|
keyName: "position_Id",
|
nodeName: "positionName",
|
fixHasChild: false,
|
isBreakWay: false,
|
displayBreakWay: false,
|
parentName: "parentId",
|
orderBy: "orderNo desc, positionName",
|
where: where,
|
extendColumns: "storage_Id,areaCode,channelCode,shelveMode"
|
};
|
}
|
} else {
|
where = {
|
storage_Id: node.data.storage_Id,
|
parentId: node.data.position_Id
|
};
|
params = {
|
openNodeApi: true,
|
folder: "basicInfo/base",
|
dbServer: "Sys",
|
tableName: "Base_Position",
|
tableView: "Base_Position",
|
keyName: "position_Id",
|
nodeName: "positionName",
|
fixHasChild: false,
|
isBreakWay: false,
|
displayBreakWay: false,
|
parentName: "parentId",
|
orderBy: "orderNo desc, positionName",
|
where: where,
|
extendColumns: ""
|
};
|
}
|
|
this.common.ajax(
|
url,
|
params,
|
res => {
|
if (res.result) {
|
res.data.forEach(element => {
|
element.isLeaf = !element.hasChild;
|
if (element.storageArea_Id !== -1 && node.level === 1) {
|
element.label = element.label + "区";
|
} else if (element.areaCode && node.level === 2) {
|
element.label = element.label + "通道";
|
} else if (element.shelveCode && node.level === 3) {
|
element.label = element.label + "货架";
|
}
|
});
|
resolve(res.data);
|
} else {
|
this.$message.error(res.msg);
|
}
|
},
|
true
|
);
|
});
|
},
|
// 搜索导航
|
filterTreeNode(value, data) {
|
if (!value) return true;
|
return data.label.indexOf(value) !== -1;
|
},
|
// 点击tree导航节点
|
nodeClick(data, node, el) {
|
var where = {};
|
switch (node.level) {
|
case 1: // 仓库
|
debugger;
|
where.storage_Id = node.data.storage_Id;
|
break;
|
case 2: // 库区
|
if (node.data.areaCode === "非标准库区") {
|
// 非标准库区
|
where.parentId = 0;
|
where.storage_Id = node.data.storage_Id;
|
where.channelCode = null;
|
} else {
|
where.storage_Id = node.data.storage_Id;
|
where.areaCode = node.data.areaCode;
|
}
|
break;
|
case 3: // 通道
|
if (!node.data.channelCode) {
|
// 非标准库区
|
where.parentId = 0;
|
where.storage_Id = node.data.storage_Id;
|
where.positionName = node.data.positionName;
|
} else {
|
where.storage_Id = node.data.storage_Id;
|
where.areaCode = node.data.areaCode;
|
where.channelCode = node.data.channelCode;
|
}
|
break;
|
case 4: // 货架
|
if (!node.data.shelveCode) {
|
if (node.data.shelveMode === "地堆") {
|
// 地堆
|
where.position_Id = node.data.position_Id;
|
} else {
|
// 非标准库区
|
where.parentId = 0;
|
where.storage_Id = node.data.storage_Id;
|
where.shelveCode = null;
|
}
|
} else {
|
where.storage_Id = node.data.storage_Id;
|
where.areaCode = node.data.areaCode;
|
where.shelveCode = node.data.shelveCode;
|
}
|
break;
|
default:
|
where.position_Id = node.data.position_Id;
|
break;
|
}
|
|
this.fixedWhere = where;
|
this.$nextTick(() => {
|
this.dataList.reload();
|
});
|
},
|
|
// 刷新tree
|
treeRefresh() {
|
this.filterText = "";
|
var root = this.$refs.tree.store.root;
|
while (root.childNodes.length) {
|
this.$refs.tree.remove(root.childNodes[0]);
|
}
|
this.loadTreeNode(root, data => {
|
root.doCreateChildren(data);
|
});
|
},
|
// 新建节点
|
treeNodeAppend(node, data) {
|
this.editor.addData();
|
},
|
// 编辑节点
|
treeNodeEdit(node, data) {
|
this.editor.editData(data.position_Id);
|
},
|
// 删除
|
treeNodeRemove(node, data) {
|
this.dataList.delete(data.position_Id);
|
},
|
treeNodeOver(node, data) {
|
this.treeNodeOverId = data.value;
|
},
|
treeNodeOut(node, data) {
|
this.treeNodeOverId = -1;
|
},
|
// 级联改变数据
|
onChange(ref, val, field) {
|
var editor = this.editor;
|
// 设置表单数据
|
if (field.options.prop === "FullPathId") {
|
editor.formData.parentId = val[val.length - 1];
|
setTimeout(() => {
|
editor.formData.FullPathName = ref.inputValue;
|
}, 500);
|
}
|
},
|
// 级联加载子集数据
|
cascaderLoadNode(ref, val, field) {
|
var where = "parentId=0";
|
var url = "/api/common/loadTreeNodeAll";
|
var params = {
|
dbServer: "Sys",
|
tableName: "Base_Position",
|
tableView: "Base_Position",
|
keyName: "position_Id",
|
nodeName: "positionName",
|
fixHasChild: false,
|
isBreakWay: false,
|
displayBreakWay: false,
|
parentName: "parentId",
|
orderBy: "orderNo desc, position_Id",
|
where: where,
|
extendColumns: ""
|
};
|
this.common.ajax(
|
url,
|
params,
|
res => {
|
if (res.result) {
|
var items = [
|
{
|
value: 0,
|
label: "根",
|
children: res.data
|
}
|
];
|
|
field.options.options = items;
|
} else {
|
this.$message.error(res.msg);
|
}
|
},
|
true
|
);
|
},
|
// 保存后
|
onSaveAfter() {
|
this.treeRefresh();
|
},
|
// 打印条码
|
printBarcode() {
|
const positionNames = this.dataListSelections
|
.map((item, index, Array) => {
|
return item.positionName;
|
})
|
.join(",");
|
if (!positionNames) {
|
this.$message.error("执行选择一项");
|
return;
|
}
|
localStorage.setItem("printType", "货位条码打印");
|
localStorage.setItem("positionNames", positionNames);
|
|
var url = "/#/inbound/purchase/print-barcode";
|
window.open(url);
|
return false;
|
}
|
}
|
};
|
</script>
|
|
<style lang="scss" scoped>
|
.tab-container {
|
position: relative;
|
margin: 0px;
|
min-height: calc(100vh - 165px);
|
overflow-x: hidden;
|
|
.left-container {
|
width: 100%;
|
height: 100%;
|
background-color: white;
|
border-radius: 4px;
|
.form-tool {
|
padding-top: 10px;
|
.el-form-item {
|
padding: 0 10px;
|
}
|
.search-input {
|
width: calc(100% - 40px);
|
}
|
.btn-search,
|
.btn-refresh {
|
padding: 10px;
|
}
|
.btn-refresh {
|
margin-left: 0px;
|
}
|
}
|
/deep/ .el-tree-node.is-current > .el-tree-node__content {
|
background-color: #a7ccf7;
|
color: white;
|
.el-button--text {
|
color: white;
|
}
|
}
|
.custom-tree-node {
|
flex: 1;
|
display: flex;
|
align-items: center;
|
justify-content: space-between;
|
font-size: 14px;
|
padding-right: 8px;
|
}
|
}
|
|
.right-container {
|
border-radius: 4px;
|
min-height: 100%;
|
background-color: white;
|
padding: 0 10px;
|
}
|
}
|
</style>
|