Files
klp-oa/klp-ui/src/components/KLPService/WarehouseTree/index.vue

83 lines
2.1 KiB
Vue
Raw Normal View History

2025-08-02 13:38:04 +08:00
<template>
<div>
<el-tree key="warehouseTree" v-loading="loading" :data="treeData" :props="treeProps" node-key="actualWarehouseId" highlight-current
@node-click="handleNodeClick" :expand-on-click-node="false" class="stock-tree" />
</div>
2025-08-02 13:38:04 +08:00
</template>
<script>
import { listWarehouse } from '@/api/wms/warehouse';
import { treeActualWarehouseTwoLevel } from '@/api/wms/actualWarehouse';
2025-08-02 13:38:04 +08:00
export default {
name: "WarehouseTree",
props: {
warehouseType: {
type: String,
default: 'real'
},
showEmpty: {
type: Boolean,
default: false
}
2025-08-02 13:38:04 +08:00
},
data() {
return {
treeData: [],
loading: true,
treeProps: {
children: 'children',
label: 'actualWarehouseName',
isLeaf: 'isLeaf'
}
2025-08-02 13:38:04 +08:00
};
},
watch: {
warehouseType: {
handler(newVal, oldVal) {
this.getWarehouseTree()
},
immediate: true
}
2025-08-02 13:38:04 +08:00
},
methods: {
getWarehouseTree() {
this.loading = true;
if (this.warehouseType === 'real') {
treeActualWarehouseTwoLevel().then(response => {
const data = response.data;
if (this.showEmpty) {
data.unshift({
actualWarehouseId: '-1',
actualWarehouseName: '空置库',
isLeaf: true
})
}
this.treeData = data;
this.loading = false;
});
} else {
listWarehouse().then(response => {
this.treeData = response.data.map(item => ({
...item,
actualWarehouseId: item.warehouseId,
actualWarehouseName: item.warehouseName
}))
this.loading = false;
});
}
2025-08-02 13:38:04 +08:00
},
handleTree(data, id, parentId) {
const cloneData = JSON.parse(JSON.stringify(data));
return cloneData.filter(father => {
const branchArr = cloneData.filter(child => father[id] === child[parentId]);
if (branchArr.length > 0) father.children = branchArr;
return father[parentId] === 0 || father[parentId] === null;
});
},
handleNodeClick(node) {
this.$emit('node-click', node);
}
}
};
</script>