Browse Source

Merge branch 'lwx_v27'

master
liwenxuan 2 days ago
parent
commit
1359d2ecfd
  1. 542
      src/components/DesignForm/formControlPropertiNew.vue

542
src/components/DesignForm/formControlPropertiNew.vue

@ -2828,6 +2828,508 @@ function getAssociatedFormsCurrentFieldTree1() {
} }
}); });
} }
// liwenxuan 20251209 start
let datapropsformList = JSON.parse(JSON.stringify(props.formList))
const glxxszTree = computed(()=>{
if(datapropsformList.length==0){
datapropsformList = JSON.parse(JSON.stringify(props.formList))
}
//console.log(datapropsformList)
if(associatedFormsCurrentFormFieldTreeForGlxxszExceptSelf && associatedFormsCurrentFormFieldTreeForGlxxszExceptSelf.value[0].children && associatedFormsCurrentFormFieldTreeForGlxxszExceptSelf.value[0].children.length>0){
let datab = JSON.parse(JSON.stringify(associatedFormsCurrentFormFieldTreeForGlxxszExceptSelf.value[0].children))
const treeC = mergeFormTrees(datapropsformList, datab);
return treeC
}else{
return null
}
})
/**
* 合并两个组件树以组件树a的结构为准填充组件树b的数据
* @param {Array} treeA - 组件树a包含表单结构信息
* @param {Array} treeB - 组件树b包含字段数据信息
* @returns {Array} - 合并后的组件树c
*/
function mergeFormTrees(treeA, treeB) {
// bkeynameidvalueb
const bMap = new Map();
// bparentIdparentId
let commonParentId = null;
// idnameformField:30540:upload1765154030446 -> upload1765154030446
treeB.forEach(node => {
const id = node.id;
if (id) {
const parts = id.split(':');
const name = parts[parts.length - 1]; // name
bMap.set(name, node);
// parentId
if (node.parentId && !commonParentId) {
commonParentId = node.parentId;
}
}
});
// parentId使
if (!commonParentId) {
commonParentId = "formField:30540"; // b
}
//
let gridCount = 0;
let tabsCount = 0;
let divCount = 0;
let cardCount = 0;
// a
function processANode(node, parentId = commonParentId) {
// name
const nodeName = node.name;
// flex
if (node.type === 'flex') {
// b
let bNode = null;
if (nodeName && bMap.has(nodeName)) {
bNode = bMap.get(nodeName);
bMap.delete(nodeName); // map使
}
let cNode;
let flexLabel = node.item?.label || nodeName || 'flex';
if (bNode) {
// b
cNode = { ...bNode };
// children
if (!cNode.children) {
cNode.children = [];
}
// labelname
const originalLabel = cNode.label || flexLabel;
// label""
cNode.label = `弹性布局${originalLabel}`;
// treeAttrs.show
if (cNode.treeAttrs && cNode.treeAttrs.show) {
cNode.treeAttrs.show = `弹性布局${cNode.treeAttrs.show}`;
} else if (cNode.treeAttrs) {
cNode.treeAttrs.show = `弹性布局${originalLabel}`;
}
// 使bparentId
cNode.parentId = bNode.parentId || parentId;
} else {
// b
cNode = {
id: nodeName ? `${commonParentId}:${nodeName}` : null,
label: `弹性布局${flexLabel}`,
parentId: parentId,
children: [],
value: nodeName ? `${commonParentId}:${nodeName}` : null,
treeAttrs: {
show: `弹性布局${flexLabel}`
},
disabled: false, // flex使false
type: 'flex'
};
}
//
let hasChildren = false;
if (node.list && Array.isArray(node.list)) {
const childNodes = [];
node.list.forEach(child => {
const processedChild = processANode(child, cNode.id);
if (processedChild) {
childNodes.push(processedChild);
hasChildren = true;
}
});
cNode.children = childNodes;
}
return cNode;
}
// table
if (node.type === 'table') {
// b
let bNode = null;
if (nodeName && bMap.has(nodeName)) {
bNode = bMap.get(nodeName);
bMap.delete(nodeName); // map使
}
let cNode;
let tableLabel = node.item?.label || nodeName || 'table';
if (bNode) {
// b
cNode = { ...bNode };
// children
if (!cNode.children) {
cNode.children = [];
}
// labelname
const originalLabel = cNode.label || tableLabel;
// label""
cNode.label = `子表${originalLabel}`;
// treeAttrs.show
if (cNode.treeAttrs && cNode.treeAttrs.show) {
cNode.treeAttrs.show = `子表${cNode.treeAttrs.show}`;
} else if (cNode.treeAttrs) {
cNode.treeAttrs.show = `子表${originalLabel}`;
}
// 使bparentId
cNode.parentId = bNode.parentId || parentId;
} else {
// b
cNode = {
id: nodeName ? `${commonParentId}:${nodeName}` : null,
label: `子表${tableLabel}`,
parentId: parentId,
children: [],
value: nodeName ? `${commonParentId}:${nodeName}` : null,
treeAttrs: {
show: `子表${tableLabel}`
},
disabled: false, // table使false
type: 'table'
};
}
//
let hasChildren = false;
if (node.list && Array.isArray(node.list)) {
const childNodes = [];
node.list.forEach(child => {
const processedChild = processANode(child, cNode.id);
if (processedChild) {
childNodes.push(processedChild);
hasChildren = true;
}
});
cNode.children = childNodes;
}
return cNode;
}
// grid
if (node.type === 'grid') {
gridCount++;
const gridId = `格栅布局${gridCount}`;
const gridFullId = `${commonParentId}:${gridId}`;
// grid
const cNode = {
id: gridFullId,
label: gridId,
parentId: parentId,
children: [],
value: gridFullId,
treeAttrs: {
show: gridId
},
disabled: null, // null
type: 'grid'
};
// columns.list
let hasChildren = false;
if (node.columns && Array.isArray(node.columns)) {
const childNodes = [];
node.columns.forEach(column => {
if (column.list && Array.isArray(column.list)) {
column.list.forEach(child => {
const processedChild = processANode(child, gridFullId);
if (processedChild) {
childNodes.push(processedChild);
hasChildren = true;
}
});
}
});
cNode.children = childNodes;
}
// disabledtrue
if (!hasChildren) {
cNode.disabled = true;
}
return cNode;
}
// tabs
if (node.type === 'tabs') {
tabsCount++;
const tabsId = `标签页${tabsCount}`;
const tabsFullId = `${commonParentId}:${tabsId}`;
// tabs
const cNode = {
id: tabsFullId,
label: tabsId,
parentId: parentId,
children: [],
value: tabsFullId,
treeAttrs: {
show: tabsId
},
disabled: null, // null
type: 'tabs'
};
// column
let hasChildren = false;
if (node.columns && Array.isArray(node.columns)) {
const columnNodes = [];
node.columns.forEach((column, index) => {
// column
const columnId = `${tabsFullId}:${column.label}`;
const columnNode = {
id: columnId,
label: column.label || `Tab${index + 1}`,
parentId: tabsFullId,
children: [],
value: columnId,
treeAttrs: {
show: column.label || `Tab${index + 1}`
},
disabled: null, // null
type: 'tab'
};
// column
let columnHasChildren = false;
if (column.list && Array.isArray(column.list)) {
const childNodes = [];
column.list.forEach(child => {
const processedChild = processANode(child, columnId);
if (processedChild) {
childNodes.push(processedChild);
columnHasChildren = true;
hasChildren = true;
}
});
columnNode.children = childNodes;
}
// columndisabledtrue
if (!columnHasChildren) {
columnNode.disabled = true;
}
columnNodes.push(columnNode);
});
cNode.children = columnNodes;
}
// tabsdisabledtrue
if (!hasChildren) {
cNode.disabled = true;
}
return cNode;
}
// div
if (node.type === 'div') {
divCount++;
const divId = `容器${divCount}`;
const divFullId = `${commonParentId}:${divId}`;
// div
const cNode = {
id: divFullId,
label: divId,
parentId: parentId,
children: [],
value: divFullId,
treeAttrs: {
show: divId
},
disabled: null, // null
type: 'div'
};
//
let hasChildren = false;
if (node.list && Array.isArray(node.list)) {
const childNodes = [];
node.list.forEach(child => {
const processedChild = processANode(child, divFullId);
if (processedChild) {
childNodes.push(processedChild);
hasChildren = true;
}
});
cNode.children = childNodes;
}
// disabledtrue
if (!hasChildren) {
cNode.disabled = true;
}
return cNode;
}
// card
if (node.type === 'card') {
cardCount++;
const cardId = `卡片${cardCount}`;
const cardFullId = `${commonParentId}:${cardId}`;
// card
const cNode = {
id: cardFullId,
label: cardId,
parentId: parentId,
children: [],
value: cardFullId,
treeAttrs: {
show: cardId
},
disabled: null, // null
type: 'card'
};
//
let hasChildren = false;
if (node.list && Array.isArray(node.list)) {
const childNodes = [];
node.list.forEach(child => {
const processedChild = processANode(child, cardFullId);
if (processedChild) {
childNodes.push(processedChild);
hasChildren = true;
}
});
cNode.children = childNodes;
}
// disabledtrue
if (!hasChildren) {
cNode.disabled = true;
}
return cNode;
}
//
// b
let bNode = null;
if (nodeName && bMap.has(nodeName)) {
bNode = bMap.get(nodeName);
bMap.delete(nodeName); // map使
}
// c
let cNode;
if (bNode) {
// b
cNode = { ...bNode };
// children
if (!cNode.children) {
cNode.children = [];
}
// 使bparentId
cNode.parentId = bNode.parentId || parentId;
} else {
return null; // b
}
//
let hasChildren = false;
//
// bchildren
hasChildren = cNode.children && cNode.children.length > 0;
// disabled
//
const containerTypes = ['card', 'div', 'grid', 'tabs'];
//
if (containerTypes.includes(node.type)) {
// nulltrue
cNode.disabled = hasChildren ? null : true;
} else {
// disabledfalse
cNode.disabled = false;
}
return cNode;
}
// a
const cTree = [];
treeA.forEach(rootNode => {
const processedNode = processANode(rootNode);
if (processedNode) {
cTree.push(processedNode);
}
});
// bac
bMap.forEach(bNode => {
// b
const newNode = { ...bNode };
// children
if (!newNode.children) {
newNode.children = [];
}
//
const hasChildren = newNode.children && newNode.children.length > 0;
// flextable
const containerTypes = ['card', 'div', 'grid', 'tabs', 'flex', 'table'];
//
const isContainer = containerTypes.includes(newNode.type);
// disabled
if (isContainer) {
// flextable使false
if (newNode.type === 'flex' || newNode.type === 'table') {
newNode.disabled = false;
} else {
// nulltrue
newNode.disabled = hasChildren ? null : true;
}
} else {
// false
newNode.disabled = false;
}
cTree.push(newNode);
});
return cTree;
}
// 使
// const treeC = mergeFormTrees(treeA, treeB);
// liwenxuan 20251209 end
function removeTreeNode(tree: any, targetId: any) { function removeTreeNode(tree: any, targetId: any) {
// //
const clonedTree = JSON.parse(JSON.stringify(tree)); const clonedTree = JSON.parse(JSON.stringify(tree));
@ -7151,8 +7653,14 @@ const formatTooltip = (val: number) => {
<el-tree-select <el-tree-select
v-model="controlData.control.glxxsz[fieldScope.$index].showFields" v-model="controlData.control.glxxsz[fieldScope.$index].showFields"
style="width: 100%" style="width: 100%"
:data="associatedFormsCurrentFormFieldTreeForGlxxszExceptSelf[0].children" :data="glxxszTree"
multiple multiple
show-checkbox
collapse-tags
collapse-tags-tooltip
:max-collapse-tags="2"
clearable
filterable
/> />
</template> </template>
</el-table-column> </el-table-column>
@ -7190,8 +7698,14 @@ const formatTooltip = (val: number) => {
<el-tree-select <el-tree-select
v-model="controlData.control.glxxsz[fieldScope.$index].showFields" v-model="controlData.control.glxxsz[fieldScope.$index].showFields"
style="width: 100%" style="width: 100%"
:data="associatedFormsCurrentFormFieldTreeForGlxxszExceptSelf[0].children" :data="glxxszTree"
multiple multiple
show-checkbox
collapse-tags
collapse-tags-tooltip
:max-collapse-tags="2"
clearable
filterable
/> />
</template> </template>
</el-table-column> </el-table-column>
@ -7262,8 +7776,14 @@ const formatTooltip = (val: number) => {
controlData.control.glxxszForCheckBox[fieldScope.$index].showFields controlData.control.glxxszForCheckBox[fieldScope.$index].showFields
" "
style="width: 100%" style="width: 100%"
:data="associatedFormsCurrentFormFieldTreeForGlxxszExceptSelf[0].children" :data="glxxszTree"
multiple multiple
show-checkbox
collapse-tags
collapse-tags-tooltip
:max-collapse-tags="2"
clearable
filterable
/> />
</template> </template>
</el-table-column> </el-table-column>
@ -7310,8 +7830,14 @@ const formatTooltip = (val: number) => {
<el-tree-select <el-tree-select
v-model="controlData.control.glxxszSwitch[0].showFields" v-model="controlData.control.glxxszSwitch[0].showFields"
style="width: 60%" style="width: 60%"
:data="associatedFormsCurrentFormFieldTreeForGlxxszExceptSelf[0].children" :data="glxxszTree"
multiple multiple
show-checkbox
collapse-tags
collapse-tags-tooltip
:max-collapse-tags="2"
clearable
filterable
/> />
</div> </div>
<div style="display: flex;width: 100%;"> <div style="display: flex;width: 100%;">
@ -7321,8 +7847,14 @@ const formatTooltip = (val: number) => {
<el-tree-select <el-tree-select
v-model="controlData.control.glxxszSwitch[1].showFields" v-model="controlData.control.glxxszSwitch[1].showFields"
style="width: 60%" style="width: 60%"
:data="associatedFormsCurrentFormFieldTreeForGlxxszExceptSelf[0].children" :data="glxxszTree"
multiple multiple
show-checkbox
collapse-tags
collapse-tags-tooltip
:max-collapse-tags="2"
clearable
filterable
/> />
</div> </div>
</template> </template>

Loading…
Cancel
Save