Browse Source

用户组织联动选择 设置 界面开发

lwx_v27
liwenxuan 2 weeks ago
parent
commit
3517a3eda9
  1. 1
      src/components/DesignForm/assembly/index.ts
  2. 283
      src/components/DesignForm/formControlPropertiNew.vue

1
src/components/DesignForm/assembly/index.ts

@ -1071,6 +1071,7 @@ export default [
control: { control: {
range:[], range:[],
multiple: '', multiple: '',
connectUserComponent: {},
}, },
config: {}, config: {},
styles: { styles: {

283
src/components/DesignForm/formControlPropertiNew.vue

@ -831,6 +831,14 @@ const attrList = computed(() => {
vIf: state.isSearch, vIf: state.isSearch,
vShow: ["table"], vShow: ["table"],
}, },
{
label: "关联用户",
value: config.orgCentent,
path: "config.orgCentent",
type: "orgCentent_ConnectUser",
vIf: state.isSearch,
vShow: ["orgCentent"],
},
{ {
label: "数据范围", label: "数据范围",
value: config.expandUser, 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-userlabel使
const label = (node.item && node.item.label) || '选择用户';
// expand-username%^%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);
});
}
// flextableData
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);
});
}
// tabletableData
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) */
// bexpand-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 = "容器"
}
// 使labellabel
node.label = `${str}-${customLabel}(${fieldName})`;
break; //
}
}
}
// 使label
if (!node.label.includes('(')) {
node.label = `${customLabel}(${fieldName})`;
}
}
result.push(node);
}
}
return result;
}
return filterNodes(a);
}
// start // start
const tabsRef = ref(null); const tabsRef = ref(null);
const userRangeDialogFlag = ref(false) const userRangeDialogFlag = ref(false)
@ -4753,6 +5000,12 @@ const formatTooltip = (val: number) => {
</el-row> </el-row>
<el-row v-else-if="item.type === 'orgCentent_ConnectUser'">
<el-button @click="showSelectOrgConnectUser">选择关联的用户组件</el-button>
</el-row>
<el-row v-else-if="item.type === 'expand-user'"> <el-row v-else-if="item.type === 'expand-user'">
<el-button @click="handleUserRangeDialogFlag">可选用户设置</el-button> <el-button @click="handleUserRangeDialogFlag">可选用户设置</el-button>
@ -6979,6 +7232,36 @@ const formatTooltip = (val: number) => {
<!-- 关联选项设置弹窗 liwenxuan 20240426 end --> <!-- 关联选项设置弹窗 liwenxuan 20240426 end -->
<!-- 用户组织联动选择 start-->
<!-- -->
<el-dialog
v-model="selectOrgConnectUserDialogFlag"
title="选择关联的用户组件"
top="150px"
style="margin-top: 70px"
>
<!-- {{ expandUserComponentsTree }} -->
<el-tree-select
v-if="controlData.type == 'orgCentent'"
v-model="controlData.control.connectUserComponent"
style="width: 100%;"
:data="expandUserComponentsTree"
/>
</el-dialog>
<!-- 用户组织联动选择 end -->
<!-- 单选下拉多选选项来源value3--系统表单字段 start--> <!-- 单选下拉多选选项来源value3--系统表单字段 start-->
<el-dialog <el-dialog

Loading…
Cancel
Save