Browse Source

选择用户树懒加载

lwx_v12
liwenxuan 4 weeks ago
parent
commit
cea3271ec9
  1. 189
      src/components/lowCode/assistant/rangedUserTree.vue

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

@ -1,14 +1,12 @@
<script lang='ts' setup> <script lang='ts' setup>
import { computed, ref, watch, onBeforeMount } from 'vue'
import { computed,ref,watch,onBeforeMount} from 'vue'
const props = withDefaults( const props = withDefaults(
defineProps<{ defineProps<{
modelValue?: string modelValue?: string
disabled?: boolean disabled?: boolean
types?:number types?: number
control?:any control?: any
orgAndManTree?: any; orgAndManTree?: any;
data?: any; data?: any;
}>(), }>(),
@ -20,150 +18,169 @@ const emits = defineEmits<{
}>() }>()
const value = ref([]) const value = ref([])
watch(value,(newValue)=>{ const treeData = ref([]) //
if(newValue.length > 0){ const isDataLoaded = ref(false) //
let str = ""
watch(value, (newValue) => {
let userAry = new Array if (newValue.length > 0) {
let str = ""
newValue.forEach(item =>{ let userAry = new Array
//console.log(item)
userAry.push(item) newValue.forEach(item => {
userAry.push(item)
}) })
str = userAry.join(',') str = userAry.join(',')
//console.log(str) emits('update:modelValue', str)
emits('update:modelValue', str) } else {
// userlist.value = userAry.join(',') let str = ""
// emits('update:modelValue', str)
}else{ }
let str = "" }, { deep: true })
//console.log(str)
emits('update:modelValue', str) function parseStringToArray(str: string) {
}
},{ deep: true })
function parseStringToArray(str:string) {
try { try {
// JSON
const result = JSON.parse(str); const result = JSON.parse(str);
//
if (Array.isArray(result)) { if (Array.isArray(result)) {
return result; return result;
} else { } else {
//console.error("");
return []; return [];
} }
} catch (error) { } catch (error) {
//console.error("", error.message);
return []; return [];
} }
} }
onBeforeMount(() => { onBeforeMount(() => {
setTimeout(()=>{ setTimeout(() => {
value.value = parseStringToArray(props.modelValue) value.value = parseStringToArray(props.modelValue)
},500 ) }, 500)
}) })
//
const loadFullData = async () => {
if (isDataLoaded.value) return treeData.value;
try {
const result = checkorgAndManTree1();
treeData.value = result;
isDataLoaded.value = true;
return result;
} catch (error) {
console.error('加载组织数据失败:', error);
return [];
}
}
//
const handleTreeSelectClick = async () => {
if (!isDataLoaded.value) {
await loadFullData();
}
}
//
const handleVisibleChange = async (visible: boolean) => {
if (visible && !isDataLoaded.value) {
await loadFullData();
}
}
const resData = computed(()=>{ const resData = computed(() => {
return checkorgAndManTree1() return treeData.value;
}) })
function checkorgAndManTree1(){ function checkorgAndManTree1() {
let result = [] let result = []
let i = 0 let i = 0
props.orgAndManTree.forEach((element : any) => { props.orgAndManTree.forEach((element: any) => {
if(element.hasOwnProperty('tree')&&hasNodesInTree(element.tree)){ if (element.hasOwnProperty('tree') && hasNodesInTree(element.tree)) {
i++ i++
} }
}); });
if(i==props.orgAndManTree.length){ if (i == props.orgAndManTree.length) {
props.orgAndManTree.forEach((item : any) => { props.orgAndManTree.forEach((item: any) => {
if (props.data.name == item.name) {
if(props.data.name==item.name){
console.log(item.tree) console.log(item.tree)
result = item.tree result = item.tree
} }
}); });
return result return result
}else{ } else {
setTimeout(()=>{ setTimeout(() => {
checkorgAndManTree1() checkorgAndManTree1()
},100) }, 100)
} }
} }
/** /**
* 判断树形结构是否存在节点 * 判断树形结构是否存在节点
* @param {Array} tree 树形结构数组最外层为数组每个节点可能包含children属性
* @returns {boolean} 存在节点返回true否则返回false
*/ */
function hasNodesInTree(tree) { function hasNodesInTree(tree) {
// false
if (!Array.isArray(tree)) { if (!Array.isArray(tree)) {
return false; return false;
} }
//
function checkNode(node) { function checkNode(node) {
// null/undefined
if (node == null) { if (node == null) {
return false; return false;
} }
// true
return true; return true;
} }
// true
for (const node of tree) { for (const node of tree) {
if (checkNode(node)) { if (checkNode(node)) {
// 使
return true; return true;
} }
//
if (Array.isArray(node?.children) && hasNodesInTree(node.children)) { if (Array.isArray(node?.children) && hasNodesInTree(node.children)) {
return true; return true;
} }
} }
//
return false; return false;
} }
const valPrint = (val: any) => {
if (Array.isArray(val)) {
return val.join("、")
const valPrint = (val:any) => { }
if(Array.isArray(val)){
return val.join("、")
}
} }
</script> </script>
<template> <template>
<div></div> <div></div>
<el-tree-select v-if="props.types!=3" node-key="number" v-model="value" :data="resData" multiple :render-after-expand="false" <div class="tree-select-wrapper" v-if="props.types != 3">
show-checkbox clearable collapse-tags collapse-tags-tooltip :max-collapse-tags="1" filterable /> <el-tree-select
<el-text v-else class="wordColor">{{valPrint(value)}}</el-text> node-key="number"
v-model="value"
:data="resData"
multiple
:render-after-expand="false"
show-checkbox
clearable
collapse-tags
collapse-tags-tooltip
:max-collapse-tags="1"
filterable
@click="handleTreeSelectClick"
@visible-change="handleVisibleChange"
:disabled="props.disabled"
:popper-append-to-body="false"
/>
</div>
<el-text v-else class="wordColor">{{ valPrint(value) }}</el-text>
</template> </template>
<style lang='scss' >
.wordColor{
color:#000000;
}
<style lang='scss'>
.tree-select-wrapper {
position: relative;
min-height: 40px;
width: 100%;
}
.wordColor {
color: #000000;
}
.el-tree-node__expand-icon { .el-tree-node__expand-icon {
color: var(--el-tree-expand-icon-color); color: var(--el-tree-expand-icon-color);

Loading…
Cancel
Save