Browse Source

Merge branch 'lwx_v27'

lwx_v27
liwenxuan 2 weeks ago
parent
commit
7a1a6a75b6
  1. 2
      src/components/DesignForm/formControlPropertiNew.vue
  2. 146
      src/components/DesignForm/public/expand/rangedUserTree.vue
  3. 158
      src/components/DesignForm/public/form/form.vue

2
src/components/DesignForm/formControlPropertiNew.vue

@ -2135,7 +2135,7 @@ watch(
i--; //
}
}
console.log(resDataForGlxxszExceptself1);
//console.log(resDataForGlxxszExceptself1);
if (
getAssociatedFormsCurrentFieldTreeData &&
getAssociatedFormsCurrentFieldTreeData.treeAttrs &&

146
src/components/DesignForm/public/expand/rangedUserTree.vue

@ -24,6 +24,8 @@ const emits = defineEmits<{
const value = ref([])
const treeData = ref([]) //
const isDataLoaded = ref(false) //
const loading = ref(false) //
const treeSelectRef = ref() //
watch(value, (newValue) => {
if (newValue.length > 0) {
@ -64,27 +66,34 @@ onBeforeMount(() => {
const loadFullData = async () => {
if (isDataLoaded.value) return treeData.value;
loading.value = true;
try {
const result = checkorgAndManTree1();
//
await new Promise(resolve => setTimeout(resolve, 800));
const result = await checkorgAndManTree1();
treeData.value = result;
isDataLoaded.value = true;
return result;
} catch (error) {
console.error('加载组织数据失败:', error);
return [];
} finally {
loading.value = false;
}
}
//
const handleTreeSelectClick = async () => {
if (!isDataLoaded.value) {
if (!isDataLoaded.value && !loading.value) {
await loadFullData();
}
}
//
const handleVisibleChange = async (visible: boolean) => {
if (visible && !isDataLoaded.value) {
if (visible && !isDataLoaded.value && !loading.value) {
await loadFullData();
}
}
@ -94,27 +103,29 @@ const resData = computed(() => {
})
function checkorgAndManTree1() {
let result = []
let i = 0
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) {
//console.log(item.tree)
result = item.tree
return new Promise((resolve) => {
const check = () => {
let result = []
let i = 0
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) {
console.log(item.tree)
result = item.tree
}
});
resolve(result)
} else {
setTimeout(check, 100)
}
});
return result
} else {
setTimeout(() => {
checkorgAndManTree1()
}, 100)
}
}
check()
})
}
/**
@ -148,24 +159,77 @@ function hasNodesInTree(tree) {
<template>
<div style="width:100%">
<div class="tree-select-wrapper" v-if="props.types != 3">
<el-tree-select
node-key="number"
v-model="value"
:data="resData"
multiple
:render-after-expand="false"
show-checkbox
clearable
collapse-tags
collapse-tags-tooltip
:max-collapse-tags="4"
filterable
@click="handleTreeSelectClick"
@visible-change="handleVisibleChange"
:disabled="props.disabled"
:popper-append-to-body="false"
/>
ref="treeSelectRef"
node-key="number"
v-model="value"
:data="resData"
multiple
:render-after-expand="false"
show-checkbox
clearable
collapse-tags
collapse-tags-tooltip
:max-collapse-tags="4"
filterable
@click="handleTreeSelectClick"
@visible-change="handleVisibleChange"
:disabled="props.disabled"
:popper-append-to-body="false"
>
<!-- 自定义空状态 -->
<template #empty>
<div class="custom-empty">
{{ loading ? '正在加载' : '无数据' }}
</div>
</template>
</el-tree-select>
</div>
</template>
<style lang='scss' scoped></style>
<style lang='scss' scoped>
.tree-select-wrapper {
position: relative;
min-height: 40px;
width: 100%;
}
.wordColor {
color: #000000;
}
.el-tree-node__expand-icon {
color: var(--el-tree-expand-icon-color);
cursor: pointer;
font-size: 18px;
transform: rotate(0deg);
transition: transform var(--el-transition-duration) ease-in-out;
}
.el-tree {
--el-tree-node-content-height: 30px;
--el-tree-node-hover-bg-color: var(--el-fill-color-light);
--el-tree-text-color: var(--el-text-color-regular);
--el-tree-expand-icon-color: var(--el-text-color-placeholder);
background: var(--el-fill-color-blank);
color: var(--el-tree-text-color);
cursor: default;
font-size: var(--el-font-size-base);
position: relative;
}
.el-tree-select__popper .el-tree-node__expand-icon {
margin-left: 7px;
margin-right: 7px;
}
/* 自定义空状态样式 */
.custom-empty {
padding: 10px;
text-align: center;
color: #909399;
font-size: 14px;
}
</style>

158
src/components/DesignForm/public/form/form.vue

@ -1732,17 +1732,18 @@ function getTree1() {
orgAndManTree.value = data
}).finally(()=>{
console.log(rangedUsers)
//console.log(rangedUsers)
// 使
const configArray = rangedUsers;
const groupedNames = groupExpandUserConfigs(configArray);
console.log(groupedNames);
//console.log(groupedNames);
groupedNames.forEach((element:any) => {
let keys = element.keys
let arr = []
arr.push(modifyTreeData(orgAndManTree.value,keys))
element.tree = arr
console.log(arr)
rangedUsers.forEach((item:any) => {
let i = 0
@ -1759,17 +1760,26 @@ function getTree1() {
rangedUserTrees1.value = rangedUsers
})
}
function modifyTreeData(treeData, idList) {
console.log("modifyTreeDataMinimal 执行了");
//console.log("modifyTreeDataMinimal ");
let gkFlag = true
const idArray = Array.isArray(idList) ? idList : [idList];
if (idArray.length === 0 || !treeData) {
// gkFlag true idList treeData
if (gkFlag && idArray.length === 0) {
const targetNode = findTargetNode(treeData);
if (targetNode) {
// 使 treeData
treeData = targetNode;
}
}
// idList 使
if (idArray.length === 0) {
return processTreeWithAllNodes(treeData);
}
if (!treeData) {
return Array.isArray(treeData) ? [] : null;
}
@ -1786,13 +1796,16 @@ function modifyTreeData(treeData, idList) {
const node = stack.pop();
if (!node?.id) continue;
nodeMap.set(node.id, node);
if (node.children) {
for (const child of node.children) {
if (child?.id) {
parentMap.set(child.id, node.id);
stack.push(child);
// ID
if (!nodeMap.has(node.id)) {
nodeMap.set(node.id, node);
if (node.children) {
for (const child of node.children) {
if (child?.id) {
parentMap.set(child.id, node.id);
stack.push(child);
}
}
}
}
@ -1831,6 +1844,29 @@ function modifyTreeData(treeData, idList) {
return Array.isArray(treeData) ? result : result[0] || null;
}
//
function findTargetNode(treeData) {
if (!treeData) return null;
const stack = Array.isArray(treeData) ? [...treeData] : [treeData];
while (stack.length > 0) {
const node = stack.pop();
//
if (node.id === "309" && node.label === "山东恒信高科能源有限公司") {
return node;
}
//
if (node.children && node.children.length > 0) {
stack.push(...node.children);
}
}
return null;
}
//
function buildNodeTree(node, keepIds, idArray, processedIds) {
const newNode = {
@ -1848,9 +1884,11 @@ function buildNodeTree(node, keepIds, idArray, processedIds) {
//
if (node.children && node.children.length > 0) {
const children = [];
const childProcessedIds = new Set(); //
for (const child of node.children) {
if (child?.id && keepIds.has(child.id) && !processedIds.has(child.id)) {
processedIds.add(child.id);
if (child?.id && keepIds.has(child.id) && !childProcessedIds.has(child.id)) {
childProcessedIds.add(child.id);
children.push(buildNodeTree(child, keepIds, idArray, processedIds));
}
}
@ -1862,8 +1900,84 @@ function buildNodeTree(node, keepIds, idArray, processedIds) {
return newNode;
}
// idList 使
function processTreeWithAllNodes(treeData) {
if (!treeData) {
return Array.isArray(treeData) ? [] : null;
}
const roots = Array.isArray(treeData) ? treeData : [treeData];
// - 使
const result = [];
const processedIds = new Set();
//
for (const root of roots) {
if (!root?.id || processedIds.has(root.id)) {
continue;
}
processedIds.add(root.id);
// 使
const formattedNode = formatAllNodes(root, processedIds);
if (formattedNode) {
result.push(formattedNode);
}
}
//
processedIds.clear();
return Array.isArray(treeData) ? result : result[0] || null;
}
//
function formatAllNodes(node, processedIds) {
// ID5
const isOrganization = node.id && node.id.length < 5;
//
let children = [];
const childProcessedIds = new Set();
if (node.children && node.children.length > 0) {
for (const child of node.children) {
if (child?.id && !childProcessedIds.has(child.id)) {
childProcessedIds.add(child.id);
const formattedChild = formatAllNodes(child, processedIds);
if (formattedChild) {
children.push(formattedChild);
}
}
}
}
//
if (isOrganization && children.length === 0) {
return null;
}
//
const newNode = {
id: node.id,
label: node.label,
value: node.value
};
//
if (node.value !== null && node.value !== undefined) {
newNode.label = `${node.label}(${node.value})`;
newNode.number = newNode.label;
}
//
if (children.length > 0) {
newNode.children = children;
}
return newNode;
}
function groupExpandUserConfigs(configs) {
// Map
@ -2023,7 +2137,7 @@ const resetFields = () => {
function checkAndGetTree(){
console.log("checkAndGetTree")
//console.log("checkAndGetTree")
if(rangedUsers.length>0){
getTree1();
}else{

Loading…
Cancel
Save