Source/plt-web/plt-web-ui/src/views/modelingMenu/ui/formDefine/components/formDialog.vue
@@ -244,7 +244,9 @@
                    <el-form-item label="权限控制">
                      <div style="display: flex;align-items: center">
                        <el-input v-model="form.itemRight" placeholder="请输入内容" size="mini"></el-input>
                        <el-button plain size="mini" style="margin-left: 3px" type="success">选择</el-button>
                        <el-button plain size="mini" style="margin-left: 3px" type="success" @click="authClickHandler">
                          选择
                        </el-button>
                      </div>
                    </el-form-item>
                  </el-col>
@@ -517,10 +519,12 @@
          </el-col>
          <el-col :span="24">
            <el-form-item label="权限控制">
            <el-form-item label="属性权限">
              <div style="display: flex;align-items: center">
                <el-input v-model="customForm.itemRight" placeholder="请输入内容" size="mini"></el-input>
                <el-button plain size="mini" style="margin-left: 3px" type="success">选择</el-button>
                <el-button plain size="mini" style="margin-left: 3px" type="success" @click="customAuthClickHandler">
                  选择
                </el-button>
              </div>
            </el-form-item>
          </el-col>
@@ -771,14 +775,42 @@
        </el-row>
      </el-form>
    </el-dialog>
    <el-dialog
      v-dialogDrag
      :visible.sync="authVisible"
      append-to-body="true"
      class="avue-dialog"
      title="权限控制-人员列表"
      width="60%"
      @close="authDialogClose">
      <div style="height: 650px">
        <div style="height: 600px;">
          <avue-tree :key="refresh" ref="authTree" v-model="treeAuthForm" :data="treeAuthData" :option="treeAuthOption"
                     @check-change="treeAuthCheckChange">
              <span slot-scope="{ node, data }" class="el-tree-node__label">
           <span style="font-size: 15px">
              <i class="el-icon-s-promotion"></i>
                {{ (node || {}).label }}
            </span>
          </span>
          </avue-tree>
        </div>
      </div>
      <span slot="footer" class="dialog-footer">
         <el-button @click="authDialogClose">取 消</el-button>
         <el-button type="primary" @click="authDialogSaveHandler">确 定</el-button>
    </span>
    </el-dialog>
  </el-dialog>
</template>
<script>
import {getObjTypeQTs, getTreeAttributes, savePortalVI} from "@/api/UI/formDefine/api";
import {getObjTypeQTs, getTreeAttributes, savePortalVI, refPersonOrgTree} from "@/api/UI/formDefine/api";
import func from "@/util/func";
import basicOption from "@/util/basic-option";
import {gridAttribute} from "@/api/modeling/attributePool/api";
import {getSysModelTreeMenuByPID} from "@/api/systemModel/mangeModel/api";
export default {
  name: "formDialog",
@@ -800,6 +832,42 @@
  },
  data() {
    return {
      authType: 'default',
      refresh: Math.random(),
      treeAuthOption: {
        multiple: true,
        height: 'auto',
        menu: false,
        addBtn: false,
        defaultExpandAll: true,
        lazy: true,
        props: {
          label: 'text',
          value: 'oid',
          children: 'childNodes',
        },
        treeLoad: (node, resolve) => {
          // console.log(node);
          const params = {
            'conditionMap[dataType]': node.data.data,
            'conditionMap[parentId]': node.data.data,
            'conditionMap[orgType]': 'all'
          }
          refPersonOrgTree(node.level === 0 ? {} : params).then(res => {
            resolve(res.data.treeData.map(item => {
              return {
                ...item,
                id: item.id,
                name: item.name,
                leaf: item.leaf
              }
            }))
          })
        }
      },
      treeAuthData: [],
      treeAuthForm: {},
      authVisible: false,
      searchQtNameList: [],
      customAttrRow: {},
      customAttrOption: {
@@ -1045,7 +1113,7 @@
        text: data.text,
        oid: data.oid,
        itemType: 'text',
        itemName:data.data.name
        itemName: data.data.name
      }
      console.log(data);
      const isDuplicate = this.formList.some(item => item.text === data.text);
@@ -1370,6 +1438,57 @@
      })
    },
    // 权限选择按钮
    authClickHandler() {
      this.authVisible = true;
    },
    // 自定义表单选择权限
    customAuthClickHandler() {
      this.authVisible = true;
      this.authType = 'attr';
    },
    // 权限树对话框关闭
    authDialogClose() {
      this.authVisible = false;
      this.refresh = Math.random(); // 刷新左侧树
    },
    // 权限控制保存
    authDialogSaveHandler() {
      const filterList = ['root', 'user', 'role', 'department']
      const data = this.$refs.authTree.getCheckedNodes().filter(item => !filterList.includes(item.oid));
      if (!data || data.length <= 0) {
        this.$message.error('请检查是否勾选子节点');
        return;
      }
      const resultMap = {};
      data.forEach(item => {
        const key = item.parentBtmName;
        if (!resultMap[key]) {
          resultMap[key] = []; // 初始化数组
        }
        resultMap[key].push(item.parentBtmName === 'user' ? item.data.userName : item.data.name);
      });
      // 组装字符串
      const resultString = Object.entries(resultMap).map(([key, oids]) => {
        return `${key}=${oids.join(',')}`; // 用 , 连接同一类型的 oid
      }).join('&&'); // 最后用 && 连接不同类型
      // console.log(resultString);
      if (this.authType === 'attr') {
        this.customForm.itemRight = resultString;
      } else {
        this.form.itemRight = resultString;
      }
      // this.form.itemRight = resultString;
      this.authDialogClose();
    }
  }
}
</script>