diff --git a/src/components/DesignForm/assembly/index.ts b/src/components/DesignForm/assembly/index.ts
index 43e56a0..16ca062 100644
--- a/src/components/DesignForm/assembly/index.ts
+++ b/src/components/DesignForm/assembly/index.ts
@@ -1071,6 +1071,7 @@ export default [
control: {
range:[],
multiple: '',
+ connectUserComponent: {},
},
config: {},
styles: {
diff --git a/src/components/DesignForm/formControlPropertiNew.vue b/src/components/DesignForm/formControlPropertiNew.vue
index 2320cf8..043f0fc 100644
--- a/src/components/DesignForm/formControlPropertiNew.vue
+++ b/src/components/DesignForm/formControlPropertiNew.vue
@@ -831,6 +831,14 @@ const attrList = computed(() => {
vIf: state.isSearch,
vShow: ["table"],
},
+ {
+ label: "关联用户",
+ value: config.orgCentent,
+ path: "config.orgCentent",
+ type: "orgCentent_ConnectUser",
+ vIf: state.isSearch,
+ vShow: ["orgCentent"],
+ },
{
label: "数据范围",
value: config.expandUser,
@@ -4090,6 +4098,245 @@ watch(
}
);
+//用户组织联动选择 showSelectOrgConnectUser start
+const selectOrgConnectUserDialogFlag = ref(false)
+function showSelectOrgConnectUser(){
+ selectOrgConnectUserDialogFlag.value = true
+}
+
+const expandUserNames = computed(()=>{
+ let data = JSON.parse(JSON.stringify(props.formList))
+ return findExpandUserNames(data)
+})
+const expandUserComponentsTree = computed(()=>{
+ let data = JSON.parse(JSON.stringify(associatedFormsCurrentFormFieldTree1.value))
+ let result = filterTreeByExpandUsers(data,expandUserNames.value)
+ result = result[0].children
+ return result
+})
+
+
+
+function findExpandUserNames(data) {
+ //console.log(data)
+ const result = [];
+
+ // 定义需要特殊处理的布局组件类型
+ const layoutTypes = ['tabs', 'grid', 'card', 'div']; // 注意:flex不在这里面
+
+ function traverse(node, ancestors = []) {
+ // 处理_custom包装的数据结构
+ if (node && node._custom && node._custom.value) {
+ node = node._custom.value;
+ }
+
+ // 检查当前节点是否有type属性
+ if (node && node.type) {
+ // 如果当前节点是expand-user类型
+ if (node.type === 'expand-user') {
+ // 创建当前元素的路径数组(祖先在前,自己在后)
+ const path = [...ancestors];
+
+ // 获取expand-user的label,如果没有则使用默认值
+ const label = (node.item && node.item.label) || '选择用户';
+
+ // 在最后一个元素(expand-user的name)后面拼接%^%和label
+ const lastElement = node.name + '%^%' + label;
+ path.push(lastElement);
+
+ result.push(path);
+ return; // 找到expand-user后不需要继续遍历其子节点
+ }
+
+ // 处理不同类型的组件
+ if (layoutTypes.includes(node.type)) {
+ // 对于特殊布局组件,使用类型标志
+ const newAncestors = [...ancestors, node.type];
+
+ switch (node.type) {
+ case 'tabs':
+ if (node.columns && Array.isArray(node.columns)) {
+ node.columns.forEach(tab => {
+ if (tab.list && Array.isArray(tab.list)) {
+ tab.list.forEach(item => {
+ traverse(item, newAncestors);
+ });
+ }
+ });
+ }
+ break;
+
+ case 'grid':
+ if (node.columns && Array.isArray(node.columns)) {
+ node.columns.forEach(column => {
+ if (column.list && Array.isArray(column.list)) {
+ column.list.forEach(item => {
+ traverse(item, newAncestors);
+ });
+ }
+ });
+ }
+ break;
+
+ case 'card':
+ case 'div':
+ if (node.list && Array.isArray(node.list)) {
+ node.list.forEach(item => {
+ traverse(item, newAncestors);
+ });
+ }
+ break;
+ }
+ } else if (node.type === 'flex') {
+ // 对于flex组件,使用name而不是类型标志
+ const newAncestors = node.name ? [...ancestors, node.name] : ancestors;
+
+ if (node.list && Array.isArray(node.list)) {
+ node.list.forEach(item => {
+ traverse(item, newAncestors);
+ });
+ }
+
+ // 对于flex类型,还需要检查tableData
+ if (node.tableData && Array.isArray(node.tableData)) {
+ node.tableData.forEach(item => {
+ traverse(item, newAncestors);
+ });
+ }
+ } else {
+ // 对于其他组件,使用name
+ const newAncestors = node.name ? [...ancestors, node.name] : ancestors;
+
+ // 检查是否有list属性并遍历
+ if (node.list && Array.isArray(node.list)) {
+ node.list.forEach(item => {
+ traverse(item, newAncestors);
+ });
+ }
+
+ // 对于table类型,还需要检查tableData
+ if (node.type === 'table' && node.tableData && Array.isArray(node.tableData)) {
+ node.tableData.forEach(item => {
+ traverse(item, newAncestors);
+ });
+ }
+ }
+ }
+ }
+
+ // 遍历输入数据
+ if (Array.isArray(data)) {
+ data.forEach(item => traverse(item));
+ } else {
+ traverse(data);
+ }
+ //console.log(result)
+ return result;
+}
+
+
+
+function filterTreeByExpandUsers(a, b) {
+ /* console.log(a)
+ console.log(b) */
+ // 从参数b中提取所有expand-user字段名(处理%^%格式)
+ const expandUserFields = new Set();
+ const pathMap = new Map(); // 用于存储字段名到完整路径的映射
+ const labelMap = new Map(); // 用于存储字段名到自定义label的映射
+
+ b.forEach(path => {
+ if (path.length > 0) {
+ // 获取最后一个元素,并提取%^%前面的字段名和后面的自定义label
+ const lastElement = path[path.length - 1];
+ if (lastElement.includes('%^%')) {
+ const [fieldName, customLabel] = lastElement.split('%^%');
+ expandUserFields.add(fieldName);
+ pathMap.set(fieldName, path);
+ labelMap.set(fieldName, customLabel);
+ } else {
+ // 如果没有%^%,直接使用
+ expandUserFields.add(lastElement);
+ pathMap.set(lastElement, path);
+ // 如果没有自定义label,使用默认的"选择用户"
+ labelMap.set(lastElement, "选择用户");
+ }
+ }
+ });
+
+ // 如果没有任何expand-user字段,返回空数组
+ if (expandUserFields.size === 0) {
+ return [];
+ }
+
+ // 递归过滤树,只保留需要的节点,并添加label前缀
+ function filterNodes(nodes) {
+ const result = [];
+
+ for (const node of nodes) {
+ // 检查当前节点是否是expand-user节点
+ const isTargetNode = node.treeAttrs &&
+ node.treeAttrs.field &&
+ expandUserFields.has(node.treeAttrs.field);
+
+ // 检查子节点中是否有需要保留的节点
+ let hasTargetChildren = false;
+ if (node.children && node.children.length > 0) {
+ const filteredChildren = filterNodes(node.children);
+ if (filteredChildren.length > 0) {
+ hasTargetChildren = true;
+ node.children = filteredChildren;
+ } else {
+ node.children = null;
+ }
+ }
+
+ // 如果当前节点是目标节点,或者有目标子节点,则保留
+ if (isTargetNode || hasTargetChildren) {
+ // 如果是expand-user节点,检查是否需要添加前缀
+ if (isTargetNode) {
+ const fieldName = node.treeAttrs.field;
+ const customLabel = labelMap.get(fieldName) || "选择用户";
+
+ // 查找该节点在b中的路径
+ const path = pathMap.get(fieldName);
+ if (path && path.length > 1) {
+ // 检查路径中是否包含布局组件
+ const layoutTypes = ['tabs', 'grid', 'card', 'div'];
+ for (let i = 0; i < path.length - 1; i++) {
+ if (layoutTypes.includes(path[i])) {
+ let str = ""
+ // 添加前缀到label
+ if(path[i]=="tabs"){
+ str = "标签页"
+ }else if(path[i]=="grid"){
+ str = "格栅布局"
+ }else if(path[i]=="card"){
+ str = "卡片布局"
+ }else if(path[i]=="div"){
+ str = "容器"
+ }
+ // 使用自定义label而不是节点的原始label
+ node.label = `${str}-${customLabel}(${fieldName})`;
+ break; // 只添加第一个遇到的布局组件前缀
+ }
+ }
+ }
+
+ // 如果没有布局组件前缀,直接使用自定义label和字段名
+ if (!node.label.includes('(')) {
+ node.label = `${customLabel}(${fieldName})`;
+ }
+ }
+
+ result.push(node);
+ }
+ }
+
+ return result;
+ }
+
+ return filterNodes(a);
+}
//选择用户数据范围 start
const tabsRef = ref(null);
const userRangeDialogFlag = ref(false)
@@ -4753,6 +5000,12 @@ const formatTooltip = (val: number) => {
+
+
+ 选择关联的用户组件
+
+
+
可选用户设置
@@ -6979,6 +7232,36 @@ const formatTooltip = (val: number) => {
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+