Browse Source

选择用户树懒加载,显示效果优化

lwx_v12
liwenxuan 4 weeks ago
parent
commit
160199f2a9
  1. 76
      src/components/lowCode/assistant/rangedUserTree.vue

76
src/components/lowCode/assistant/rangedUserTree.vue

@ -1,5 +1,5 @@
<script lang='ts' setup> <script lang='ts' setup>
import { computed, ref, watch, onBeforeMount } from 'vue' import { computed, ref, watch, onBeforeMount, nextTick } from 'vue'
const props = withDefaults( const props = withDefaults(
defineProps<{ defineProps<{
@ -20,6 +20,8 @@ const emits = defineEmits<{
const value = ref([]) const value = ref([])
const treeData = ref([]) // const treeData = ref([]) //
const isDataLoaded = ref(false) // const isDataLoaded = ref(false) //
const loading = ref(false) //
const treeSelectRef = ref() //
watch(value, (newValue) => { watch(value, (newValue) => {
if (newValue.length > 0) { if (newValue.length > 0) {
@ -60,27 +62,34 @@ onBeforeMount(() => {
const loadFullData = async () => { const loadFullData = async () => {
if (isDataLoaded.value) return treeData.value; if (isDataLoaded.value) return treeData.value;
loading.value = true;
try { try {
const result = checkorgAndManTree1(); //
await new Promise(resolve => setTimeout(resolve, 800));
const result = await checkorgAndManTree1();
treeData.value = result; treeData.value = result;
isDataLoaded.value = true; isDataLoaded.value = true;
return result; return result;
} catch (error) { } catch (error) {
console.error('加载组织数据失败:', error); console.error('加载组织数据失败:', error);
return []; return [];
} finally {
loading.value = false;
} }
} }
// //
const handleTreeSelectClick = async () => { const handleTreeSelectClick = async () => {
if (!isDataLoaded.value) { if (!isDataLoaded.value && !loading.value) {
await loadFullData(); await loadFullData();
} }
} }
// //
const handleVisibleChange = async (visible: boolean) => { const handleVisibleChange = async (visible: boolean) => {
if (visible && !isDataLoaded.value) { if (visible && !isDataLoaded.value && !loading.value) {
await loadFullData(); await loadFullData();
} }
} }
@ -90,26 +99,29 @@ const resData = computed(() => {
}) })
function checkorgAndManTree1() { function checkorgAndManTree1() {
let result = [] return new Promise((resolve) => {
let i = 0 const check = () => {
props.orgAndManTree.forEach((element: any) => { let result = []
if (element.hasOwnProperty('tree') && hasNodesInTree(element.tree)) { let i = 0
i++ props.orgAndManTree.forEach((element: any) => {
} if (element.hasOwnProperty('tree') && hasNodesInTree(element.tree)) {
}); i++
if (i == props.orgAndManTree.length) { }
props.orgAndManTree.forEach((item: any) => { });
if (props.data.name == item.name) { if (i == props.orgAndManTree.length) {
console.log(item.tree) props.orgAndManTree.forEach((item: any) => {
result = item.tree if (props.data.name == item.name) {
console.log(item.tree)
result = item.tree
}
});
resolve(result)
} else {
setTimeout(check, 100)
} }
}); }
return result check()
} else { })
setTimeout(() => {
checkorgAndManTree1()
}, 100)
}
} }
/** /**
@ -151,6 +163,7 @@ const valPrint = (val: any) => {
<div class="tree-select-wrapper" v-if="props.types != 3"> <div class="tree-select-wrapper" v-if="props.types != 3">
<el-tree-select <el-tree-select
ref="treeSelectRef"
node-key="number" node-key="number"
v-model="value" v-model="value"
:data="resData" :data="resData"
@ -166,7 +179,14 @@ const valPrint = (val: any) => {
@visible-change="handleVisibleChange" @visible-change="handleVisibleChange"
:disabled="props.disabled" :disabled="props.disabled"
:popper-append-to-body="false" :popper-append-to-body="false"
/> >
<!-- 自定义空状态 -->
<template #empty>
<div class="custom-empty">
{{ loading ? '正在加载' : '无数据' }}
</div>
</template>
</el-tree-select>
</div> </div>
<el-text v-else class="wordColor">{{ valPrint(value) }}</el-text> <el-text v-else class="wordColor">{{ valPrint(value) }}</el-text>
</template> </template>
@ -206,4 +226,12 @@ const valPrint = (val: any) => {
margin-left: 7px; margin-left: 7px;
margin-right: 7px; margin-right: 7px;
} }
/* 自定义空状态样式 */
.custom-empty {
padding: 10px;
text-align: center;
color: #909399;
font-size: 14px;
}
</style> </style>
Loading…
Cancel
Save