ludc
2024-10-08 4659799564fd6b85a7e59372c1827b1d1484c73c
Merge remote-tracking branch 'origin/master'
已修改5个文件
已添加2个文件
659 ■■■■ 文件已修改
Source/plt-web/plt-web-ui/src/api/UI/uiDefine.js 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/plt-web/plt-web-ui/src/api/authority/ui/uiAuthor.js 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/plt-web/plt-web-ui/src/views/authority/ui/uiAuthorization/UIDialog.vue 201 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/plt-web/plt-web-ui/src/views/authority/ui/uiAuthorization/index.vue 225 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/plt-web/plt-web-ui/src/views/modelingMenu/queryTemplate/linkTypeQuery/formDialog.vue 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/plt-web/plt-web-ui/src/views/modelingMenu/ui/uiDefine/index.vue 16 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/plt-web/plt-web-ui/src/views/modelingMenu/ui/uiDefine/rightRegion/bottomTable/index.vue 172 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/plt-web/plt-web-ui/src/api/UI/uiDefine.js
@@ -138,6 +138,19 @@
  });
}
// é“¾æŽ¥ç±»åž‹ä¸‹æ‹‰æŸ¥è¯¢
export function getLinkDatasByPage(page, limit, params) {
  return request({
    url: "/api/uiManagerController/getLinkDatasByPage",
    method: "get",
    params: {
      page,
      limit,
      ...params
    }
  });
}
// æŸ¥è¯¢æ¨¡æ¿ä¸‹æ‹‰æŸ¥è¯¢
export function getQTInfoDatasByPage(page, limit, params) {
  return request({
@@ -178,3 +191,12 @@
  });
}
// ä¿å­˜æŽ¥å£
export function addPageDefination(params) {
  return request({
    url: "/api/uiManagerController/addPageDefination",
    method: "post",
    data:params
  });
}
Source/plt-web/plt-web-ui/src/api/authority/ui/uiAuthor.js
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,19 @@
import request from '@/router/axios';
// åŠŸèƒ½æ¨¡å—æŸ¥è¯¢
export function getUIAuthor(params) {
  return request({
    url: "/api/uiManagerController/getUIAuthor",
    method: "get",
    params
  });
}
//授权
export const authorizedUI = (params) => {
  return request({
    url: '/api/uiManagerController/authorizedUI',
    method: 'post',
    data: params
  })
}
Source/plt-web/plt-web-ui/src/views/authority/ui/uiAuthorization/UIDialog.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,201 @@
<template>
  <el-dialog v-dialogDrag
             :title="dialog.title"
             :visible.sync="dialog.showDialog"
             width="1000px"
             :append-to-body="true"
             class="avue-dialog"
             :destroy-on-close="true"
             :close-on-click-modal="false"
             @close="cancelDialog">
    <el-container style="height: 550px">
    <el-aside>
      <basic-container style="height: 500px">
        <avue-tree ref="tree" :data="treeData" :option="treeOption" @node-click="nodeClick">
          <span slot-scope="{ node, data }" class="el-tree-node__label">
           <span style="font-size: 15px">
              <i class="el-icon-user-solid"></i>
                {{ (node || {}).label }}
            </span>
          </span>
        </avue-tree>
      </basic-container>
    </el-aside>
    <el-main>
      <basic-container style="height: 500px">
        <h3 style="margin: 0">模块权限配置</h3>
        <div style="height: 445px;">
          <avue-tree ref="uiTree" :data="uiTreeData" :option="uiTreeOption">
          <span slot-scope="{ node, data }" class="el-tree-node__label">
            <span style="font-size: 15px">
              <i :class="data.icon"></i>
                {{ (node || {}).label }}
            </span>
          </span>
          </avue-tree>
        </div>
      </basic-container>
    </el-main>
    </el-container>
    <div class="dialog-footer avue-dialog__footer">
      <el-button type="primary" plain size="small" @click="submitDialog" >授权</el-button>
      <el-button type="primary" plain size="small" @click="clearValue" >重置</el-button>
      <el-button size="small" @click="cancelDialog">取 æ¶ˆ</el-button>
    </div>
  </el-dialog>
</template>
<script>
import {gridRoles} from '@/api/system/role/api'
import {getUIAuthor,authorizedUI} from "@/api/authority/ui/uiAuthor";
export default {
name: "UIDialog",
  data() {
    return {
      dialog: {
        showDialog: false,
        title: "UI授权",
        loading: false,
        type: "add",
      },
      type:'',//业务类型
      context:'',//UI上下文code
      treeOption: {
        menu: false,
        addBtn: false,
        props: {
          label: 'name',
          value: 'oid',
          children: 'children'
        }
      },
      nodeRow: {},
      treeData: [],
      defaultExpandKeys:[],
      uiTreeOption: {
        nodeKey:'oid',
        checkOnClickNode:true,
        defaultExpandedKeys:this.defaultExpandKeys,
        multiple: true,
        menu: false,
        addBtn: false,
        filter:false,
        props: {
          label: 'label',
          value: 'oid',
          children: 'children'
        }
      },
      uiTreeData: [],
    }
  },
  methods:{
    openDialog(type,context) {
      this.type=type;
      this.context=context;
      this.dialog.showDialog = true;
      this.getTreeList()
      this.uiTreeData=[];
    },
    cancelDialog() {
      this.dialog.loading = false;
      this.dialog.showDialog = false;
    },
    getTreeList() {
      const loading = this.$loading({});
      gridRoles().then(res => {
        this.treeData = res.data.data;
        loading.close();
      }).catch(error=>{
        loading.close();
      })
    },
    // è§’色点击
    nodeClick(row,node) {
      this.nodeRow = row;
      const loading = this.$loading({});
      const params = {
        'conditionMap[roleId]': this.nodeRow.oid,
        'conditionMap[type]': this.type,
        'conditionMap[context]': this.context
      }
      this.defaultExpandKeys=['root'];
      getUIAuthor(params).then(res => {
        this.processChildren(res.data.data[0]); // å¤„理每个节点
        this.uiTreeOption.defaultExpandedKeys=this.defaultExpandKeys;
        this.uiTreeData = [{
          attributes: {},
          checked: false,
          expanded: true,
          data: "root",
          level: 0,
          icon: 'el-icon-s-home',
          oid: res.data.data[0].oid,
          label: res.data.data[0].text,
          children: res.data.data[0].children
        }];
        loading.close();
      }).catch(error => {
        loading.close();
      })
    },
    //处理树
    processChildren(item) {
      if (item.children && item.children.length > 0) {
        item.children = item.children.map(child => {
          if(child.level<4){
            this.defaultExpandKeys.push(child.oid)
          }
          if(child.level==1){
            child.icon='el-icon-s-promotion';
            child.label=child.data.label+'('+child.data.name+')'
          }else if(child.level==2){
            child.icon='el-icon-s-order';
            child.label=child.text
          }else if(child.level==3){
            child.icon='el-icon-office-building';
            child.label=child.text
          }else if(child.level==4){
            child.icon='el-icon-document';
            child.label=child.text
          }else if(child.level==5){
            child.icon='el-icon-s-tools';
            child.label=child.text
          }
          this.processChildren(child); // é€’归处理每个子节点
          return child; // åªè¿”回子节点的 attributes
        });
      }
    },
    submitDialog() {
      const selectTreeList = this.$refs.uiTree.getCheckedNodes();
      if (selectTreeList.length == 0) {
        this.$message.error("请选择功能模块");
        return;
      }
      const formData = {
        roleId: this.nodeRow.oid,
        type: this.type,
        context: this.context,
        selectTreeList: selectTreeList
      }
      authorizedUI(formData).then(res => {
        if (res.data.success) {
          this.$message.success("授权成功");
          this.cancelDialog();
        }
      });
    },
    clearValue(){
      this.$refs.uiTree.setCheckedNodes([])
    }
  }
}
</script>
<style scoped>
</style>
Source/plt-web/plt-web-ui/src/views/authority/ui/uiAuthorization/index.vue
@@ -1,33 +1,17 @@
<template>
  <el-container>
    <el-aside>
      <basic-container>
        <div ref="TreeBox" style="height: calc(100vh - 144px);!important;">
          <div class="headerCon">
            <el-button icon="el-icon-plus" plain size="small" type="primary" @click="addClickHandler">创建
            </el-button>
            <el-button icon="el-icon-edit" plain size="small" type="primary" @click="editClickHandler">修改
            </el-button>
            <el-button icon="el-icon-delete" plain size="small" type="danger" @click="delClickHandler">删除
            </el-button>
            <el-button icon="el-icon-download" plain size="small" type="primary" @click="exportClickHandler">导出
            </el-button>
            <el-button icon="el-icon-upload2" plain size="small" type="primary" @click="uploadClickHandler">导入
            </el-button>
            <el-button class="smallBtn" plain size="small" type="primary"
                       @click="checkViewClickHandler">查看使用范围
            </el-button>
          </div>
        <div ref="TreeBox" style="height: calc(100vh - 154px);!important;">
          <!-- å·¦ä¾§æ ‘         -->
          <div style="height:  calc(100vh - 280px);">
          <div style="height:  calc(100vh - 195px);">
            <avue-tree :data="treeData" :option="treeOption" @node-click="nodeClick">
          <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>
              <span slot-scope="{ node, data }" class="el-tree-node__label">
               <span style="font-size: 15px">
                  <i class="el-icon-user-solid"></i>
                    {{ (node || {}).label }}
                </span>
              </span>
            </avue-tree>
          </div>
        </div>
@@ -36,6 +20,37 @@
    <el-main>
      <basic-container>
        <h3 style="margin: 0 0 10px 0">UI权限配置</h3>
        <div>
          <el-button icon="el-icon-place" plain size="small" type="primary" @click="saveHandler">授权</el-button>
          <el-button icon="el-icon-close" plain size="small" type="primary" @click="clearValue" style="margin-right: 40px;">重置</el-button>
          ä¸šåŠ¡ç±»åž‹ï¼š<el-select v-model="type" placeholder="请选择" size="small" :clearable="true" @change="typeChange" style="width: 300px;margin-right: 20px;">
            <el-option
              v-for="item in typeData"
              :key="item.oid"
              :label="item.text"
              :value="item.attributes.name">
            </el-option>
          </el-select>
          UI上下文:<el-select v-model="context" placeholder="请选择" size="small" :clearable="true" @change="contextChange" style="width: 350px;">
          <el-option
            v-for="item in contextData"
            :key="item.oid"
            :label="item.plCode+' '+item.plName"
            :value="item.plCode">
          </el-option>
        </el-select>
        </div>
        <div style="height:  calc(100vh - 232px);margin-top: 10px;">
          <avue-tree ref="uiTree" :data="uiTreeData" :option="uiTreeOption">
            <span slot-scope="{ node, data }" class="el-tree-node__label">
               <span style="font-size: 15px">
                  <i :class="data.icon"></i>
                    {{ (node || {}).label }}
                </span>
            </span>
          </avue-tree>
        </div>
      </basic-container>
    </el-main>
@@ -43,8 +58,168 @@
</template>
<script>
import {gridRoles} from "@/api/system/role/api";
import {getUIAuthor,authorizedUI} from "@/api/authority/ui/uiAuthor";
import {getBizTree, gridUIContextData} from "@/api/UI/uiDefine";
export default {
  name: "index"
  name: "index",
  data() {
    return {
      type:'',//业务类型
      context:'',//UI上下文code
      treeOption: {
        menu: false,
        addBtn: false,
        props: {
          label: 'name',
          value: 'oid',
          children: 'children'
        }
      },
      nodeRow: {},
      treeData: [],
      defaultExpandKeys:[],
      uiTreeOption: {
        defaultExpandedKeys:this.defaultExpandKeys,
        multiple: true,
        menu: false,
        addBtn: false,
        filter:false,
        props: {
          label: 'label',
          value: 'oid',
          children: 'children'
        }
      },
      uiTreeData: [],
      typeData:[],
      contextData:[]
    }
  },
  created() {
    this.getTreeList();
    this.getTypeList()
  },
  methods:{
    getTreeList() {
      const loading = this.$loading({});
      gridRoles().then(res => {
        this.treeData = res.data.data;
        loading.close();
      }).catch(error=>{
        loading.close();
      })
    },
    // è§’色点击
    nodeClick(row) {
      this.nodeRow = row;
      this.getUITree();
    },
    getUITree() {
      if (this.nodeRow && this.nodeRow.oid) {
        const loading = this.$loading({});
        const params = {
          'conditionMap[roleId]': this.nodeRow.oid,
          'conditionMap[type]': this.type,
          'conditionMap[context]': this.context
        }
        this.defaultExpandKeys=['root'];
        getUIAuthor(params).then(res => {
          this.processChildren(res.data.data[0]); // å¤„理每个节点
          this.uiTreeOption.defaultExpandedKeys=this.defaultExpandKeys;
          this.uiTreeData = [{
            attributes: {},
            checked: false,
            expanded: true,
            data: "root",
            level: 0,
            icon: 'el-icon-s-home',
            oid: res.data.data[0].oid,
            label: res.data.data[0].text,
            children: res.data.data[0].children
          }];
          loading.close();
        }).catch(error => {
          loading.close();
        })
      }
    },
    //处理树
    processChildren(item) {
      if (item.children && item.children.length > 0) {
        item.children = item.children.map(child => {
          if(child.level<4){
            this.defaultExpandKeys.push(child.oid)
          }
          if(child.level==1){
            child.icon='el-icon-s-promotion';
            child.label=child.data.label+'('+child.data.name+')'
          }else if(child.level==2){
            child.icon='el-icon-s-order';
            child.label=child.text
          }else if(child.level==3){
            child.icon='el-icon-office-building';
            child.label=child.text
          }else if(child.level==4){
            child.icon='el-icon-document';
            child.label=child.text
          }else if(child.level==5){
            child.icon='el-icon-s-tools';
            child.label=child.text
          }
          this.processChildren(child); // é€’归处理每个子节点
          return child; // åªè¿”回子节点的 attributes
        });
      }
    },
    getTypeList() {
      getBizTree().then(res => {
        this.typeData=res.data.obj.children;
      })
    },
    typeChange(data){
      this.contextData=[];
      this.type=data;
      if(data){
        const params = {
          'conditionMap[btmName]': data,
        }
        gridUIContextData(1, 500, params).then(res => {
          this.contextData = res.data.data;
        })
      }else {
        this.contextData = [];
      }
      this.getUITree();
    },
    contextChange(data){
      this.context=data;
      this.getUITree();
    },
    saveHandler() {
      const selectTreeList = this.$refs.uiTree.getCheckedNodes();
      if (selectTreeList.length == 0) {
        this.$message.error("请选择功能模块");
        return;
      }
      const formData = {
        roleId: this.nodeRow.oid,
        type: this.type,
        context: this.context,
        selectTreeList: selectTreeList
      }
      authorizedUI(formData).then(res => {
        if (res.data.success) {
          this.$message.success("授权成功");
          this.cancelDialog();
        }
      });
    },
    clearValue(){
      this.$refs.uiTree.setCheckedNodes([])
    }
  }
}
</script>
Source/plt-web/plt-web-ui/src/views/modelingMenu/queryTemplate/linkTypeQuery/formDialog.vue
@@ -98,15 +98,11 @@
      dialog: {
        showDialog: false,
        title: "创建",
        submitTxt: "保存",
        submitIcon: "el-icon-check",
        loading: false,
        type: "add",
      },
      crudDialog: {
        showDialog: false,
        submitTxt: "保存",
        submitIcon: "el-icon-check",
      },
      formItems:[{
        label: '查询模板名称',
Source/plt-web/plt-web-ui/src/views/modelingMenu/ui/uiDefine/index.vue
@@ -38,7 +38,7 @@
            <el-button icon="el-icon-delete" plain size="small" type="danger" @click="delHandler">删除</el-button>-->
            <el-button icon="el-icon-download" plain size="small" type="primary" @click="exportClickHandler">导出</el-button>
            <el-button icon="el-icon-upload2" plain size="small" type="primary" @click="upLoadClickHandler">导入</el-button>
            <el-button icon="el-icon-place" plain size="small" type="primary" @click="">授权</el-button>
            <el-button icon="el-icon-place" plain size="small" type="primary" @click="uiAuthorHandler">授权</el-button>
          </template>
          <template slot="menu" slot-scope="scope">
            <el-button icon="el-icon-edit" size="small" type="text" @click="rowEditBtnClick(scope.row)">编辑
@@ -126,6 +126,7 @@
      <!-- å¯¼å…¥ -->
      <upload-file ref="upload" :fileType="upFileType" :fileUrl="fileUrl" :tipList="tipList" :fileData="fileData" title="导入"
                   @updata="getTableList" @upfaildata="upFail"></upload-file>
      <!--页签窗口-->
      <el-dialog v-dialogDrag
                 :title="dialog.title"
                 :visible.sync="dialog.showDialog"
@@ -137,6 +138,8 @@
                 @close="dialog.showDialog=false">
          <pl-show :uiDefineData="dialog.uiDefineData"></pl-show>
      </el-dialog>
      <!--ui授权-->
      <ui-author ref="uiAuthor"></ui-author>
    </el-main>
  </el-container>
@@ -147,9 +150,10 @@
import basicOption from "@/util/basic-option";
import func from "@/util/func";
import plShow from "@/views/modelingMenu/ui/uiDefine/rightRegion/plShow";
import uiAuthor from "@/views/authority/ui/uiAuthorization/UIDialog"
export default {
  name: "index",
  components:{plShow},
  components:{plShow,uiAuthor},
  data() {
    return {
      dialog: {
@@ -581,6 +585,14 @@
    upFail(response){
    },
    //ui授权
    uiAuthorHandler(){
      if (this.selectList.length!=1) {
        this.$message.error('请选择一条数据');
        return;
      }
      this.$refs.uiAuthor.openDialog(this.nodeRow.attributes.name,this.selectList[0].plCode);
    },
    // ç¼–辑按钮
    rowEditBtnClick(row) {
      this.form={
Source/plt-web/plt-web-ui/src/views/modelingMenu/ui/uiDefine/rightRegion/bottomTable/index.vue
@@ -21,6 +21,13 @@
        </el-button>
      </template>
      <template slot="menu" slot-scope="scope">
        <el-button icon="el-icon-edit" size="small" type="text" @click="editBtnClick(scope.row)">编辑
        </el-button>
        <el-button icon="el-icon-delete" size="small" type="text" @click="rowDeleteHandler(scope.row)">删除
        </el-button>
      </template>
      <!-- eventKey以及eventValue显示区域 -->
      <template slot="bottomValueForm" slot-scope="scope">
        <avue-crud
@@ -201,7 +208,9 @@
  getQTInfoDatasByPage,
  getTabButtons,
  addTapButton,
  updateTapButton, getTabByContextIdAndType
  updateTapButton,
  getLinkDatasByPage,
  addPageDefination
} from "@/api/UI/uiDefine";
import actionDialog from '@/views/modelingMenu/ui/uiDefine/rightRegion/bottomTable/components/action';
@@ -223,7 +232,7 @@
  name: "index",
  data() {
    return {
      paramsForm:{},
      paramsForm: {},
      eventOption: {
        ...basicOption,
        addBtn: false,
@@ -344,6 +353,8 @@
        addBtn: false,
        index: true,
        calcHeight: -30,
        editBtn: false,
        delBtn: false,
        column: [
          {
            label: '名称',
@@ -415,7 +426,10 @@
              return val;
            },
            change: (val) => {
              console.log(val);
              const list = ['showType' ,'linkType' ,'templateId', 'SubUILayout' , 'searchObjType' ,'queryTemplateName', 'controlPath' ,'expandCols', 'rootContent', 'showAbs' ,'showLinkAbs' ,'separator']
              list.forEach(item => {
                this.form[item] = "";
              })
              const searchTarger = this.option.column.find(item => item.prop === 'searchTarger');  // èŽ·å–æœç´¢ç±»åž‹é…ç½®é¡¹
              searchTarger.display = true; // åˆ‡æ¢é»˜è®¤å±•示搜索类型
              // æ¨¡æ¿ç±»åž‹ä¸ºè¡¨æ ¼
@@ -442,7 +456,7 @@
            dicData: [
              {
                label: '不显示',
                value: '1'
                value: '3'
              },
              {
                label: '显示角色',
@@ -450,7 +464,7 @@
              },
              {
                label: '显示Folder',
                value: '3',
                value: '1',
              },
            ],
          },
@@ -480,6 +494,11 @@
                const obj = this.option.group[0].column.find(item => item.prop === 'linkType');
                obj.display = val.value !== '1';
              }
              // åˆ‡æ¢æ¸…空模板类型
              const list = ['showType', 'linkType', 'templateId', 'SubUILayout', 'queryTemplateName', 'searchObjType'];
              list.forEach(item => {
                this.form[item] = '';
              })
            }
          },
          {
@@ -504,6 +523,13 @@
                  label: 'name',
                  value: 'name'
                },
                rules: [
                  {
                    required: true,
                    message: '请选择内容',
                    trigger: 'change'
                  }
                ],
                children: {
                  border: true,
                  column: [{
@@ -516,12 +542,18 @@
                    prop: 'label'
                  }],
                },
                change: (val) => {
                  const list = ['linkType', 'templateId', 'SubUILayout', 'queryTemplateName', 'searchObjType'];
                  list.forEach(item => {
                    this.form[item] = '';
                  })
                },
                onLoad: ({page, value, data}, callback) => {
                  //page分页
                  // ä¸ç®¡æ˜¯æœç´¢ è¿˜æ˜¯é¦–次加载都会触发page æ‰€ä»¥åªéœ€è¦æ‹¿page存在与否进行请求就可以 å¦‚果再去判断data搜索 æˆ–者value初次加载就会重复请求
                  if (page) {
                    const params = {
                      "conditionMap[filterInputValue]": value ? value.name : ''
                      "conditionMap[filterInputValue]": data ? data.name : ''
                    };
                    getBtmDatasByPage(page.currentPage, page.pageSize, params).then(res => {
                      callback({
@@ -538,8 +570,8 @@
                type: 'table',
                display: false,
                props: {
                  label: 'viName',
                  value: 'viName'
                  label: 'name',
                  value: 'name'
                },
                children: {
                  border: true,
@@ -547,19 +579,18 @@
                    label: '名称',
                    search: true,
                    searchSpan: 24,
                    prop: 'viName'
                    prop: 'name'
                  }, {
                    label: '类型',
                    prop: 'viType'
                    label: '标签',
                    prop: 'tag'
                  }],
                },
                onLoad: ({page, value, data}, callback) => {
                  if (page) {
                    const params = {
                      "conditionMap[selectBtmType]": this.form.showType,
                      "conditionMap[filterInputValue]": data ? data.viName : '',
                    };
                    getPortalVIDatasByPage(page.currentPage, page.pageSize, params).then(res => {
                    getLinkDatasByPage(page.currentPage, page.pageSize, params).then(res => {
                      console.log(res);
                      callback({
                        total: res.data.total,
@@ -571,9 +602,16 @@
              },
              {
                label: '选择模板',
                prop: 'showTypea',
                prop: 'templateId',
                display: false,
                type: 'table',
                rules: [
                  {
                    required: true,
                    message: '请选择模板',
                    trigger: 'submit'
                  }
                ],
                props: {
                  label: 'viName',
                  value: 'viName'
@@ -608,7 +646,7 @@
              },
              {
                label: 'UI定义',
                prop: 'UI',
                prop: 'SubUILayout',
                type: 'table',
                display: false,
                props: {
@@ -646,6 +684,7 @@
                label: '查询类型',
                prop: 'searchType',
                display: false,
                value: '1',
                type: 'radio',
                span: 24,
                dicData: [
@@ -684,10 +723,10 @@
                onLoad: ({page, value, data}, callback) => {
                  if (page) {
                    const params = {
                      "conditionMap[selectBtmType]": this.form.showType,
                      "conditionMap[filterInputValue]": data ? data.qtName : '',
                      "conditionMap[selectBtmType]": null, // cs端有问题 æš‚时不展示内容
                    };
                    getQTInfoDatasByPage(page.currentPage, page.pageSize, params).then(res => {
                    getLinkDatasByPage(page.currentPage, page.pageSize, params).then(res => {
                      console.log(res);
                      callback({
                        total: res.data.total,
                        data: res.data.data
@@ -698,7 +737,7 @@
              },
              {
                label: '查询模板',
                prop: 'showTypes',
                prop: 'queryTemplateName',
                type: 'table',
                display: false,
                props: {
@@ -734,40 +773,35 @@
              },
              {
                label: '控制路径',
                prop: 'kzlj',
                prop: 'controlPath',
                display: false,
                type: 'textarea',
                span: 24,
                rows: 3
              },
              {
                label: '根节点显示表达式',
                prop: 'genjiedian',
                label: '树结构展开列',
                prop: 'expandCols',
                labelWidth: 110,
                display: false,
                labelWidth: 135,
                span: 24
              },
              {
                label: '树节点显示表达式',
                prop: 'shujiedian',
                display: false,
                labelWidth: 135,
                span: 24
                span: 12
              },
              {
                label: '参照树设置',
                prop: 'canzhaoshu',
                prop: 'showLinkAbs',
                display: false,
              },
              {
                label: '分隔符',
                prop: 'fgf',
                prop: 'separator',
                display: false,
              },
              {
                label: '展开方式',
                prop: 'zkfs',
                prop: 'expandMode',
                display: false,
                type: 'radio',
                value:'1',
                dicData: [
                  {
                    label: '逐级展开',
@@ -775,9 +809,23 @@
                  },
                  {
                    label: '全部展开',
                    value: '2'
                    value: '0'
                  }
                ]
              },
              {
                label: '根节点显示表达式',
                prop: 'rootContent',
                display: false,
                labelWidth: 135,
                span: 12
              },
              {
                label: '树节点显示表达式',
                prop: 'showAbs',
                display: false,
                labelWidth: 135,
                span: 12
              },
            ]
          },
@@ -873,6 +921,48 @@
      this.$refs.crud.rowAdd();
    },
    // ä¿®æ”¹
    editBtnClick(row) {
      console.log(row);
      this.eventData = [];
      if (row.eventKey && row.eventValue) {
        let keys = row.eventKey.split(',');
        let values = row.eventValue.split(',');
        this.eventData = keys.map((key, index) => {
          return {
            index: this.eventData.length,
            eventKey: key.trim(),
            eventValue: values[index],
            $cellEdit: true
          };
        });
      }
      this.$refs.crud.rowEdit(row);
    },
    // ä¿å­˜
    rowSaveHandler(row,done,loading){
      if(row.templateType === '6'){
        row.SubUIObjType = row.showType;
        row.showType = "";
      }
      console.log(this.sourceData);
      const params = {
        ...row,
        tabPageOId:this.sourceData.plOId
      }
      addPageDefination(params).then(res => {
        console.log(res);
        if(res.data.code === 200){
          this.$message.success(res.data.obj);
          done()
        }
      }).catch(err=> {
        loading();
      })
    },
    // å¯¹è¯æ¡†è¡¨æ ¼è¡Œç‚¹å‡»
    formDataRowClick(row) {
      this.formDataRow = row;
@@ -924,7 +1014,7 @@
    // æ¨¡æ¿ç±»åž‹ä¸ºè¡¨æ ¼
    templateTypeTable(val) {
      if (!val) return;
      this.updateDisplay(val, ['showType', 'showTypea', 'showTypes']);
      this.updateDisplay(val, ['showType', 'templateId', 'queryTemplateName']);
    },
    // æ¨¡æ¿ç±»åž‹ä¸ºè‡ªå®šä¹‰æ¨¡æ¿
@@ -932,19 +1022,19 @@
      if (!val) return;
      const searchTarger = this.option.column.find(item => item.prop === 'searchTarger');  // èŽ·å–æœç´¢ç±»åž‹é…ç½®é¡¹
      searchTarger.display = false; // ä¸å±•示搜索类型
      this.updateDisplay(val, ['kzlj']);
      this.updateDisplay(val, ['controlPath']);
    },
    // æ¨¡æ¿ç±»åž‹ä¸ºæ ‘表
    templateTypeTreeTable(val) {
      if (!val) return;
      this.updateDisplay(val, ['showType', 'showTypea', 'showTypes', 'zkl', 'zkfs']);
      this.updateDisplay(val, ['showType', 'templateId', 'queryTemplateName', 'expandCols', 'zkfs']);
    },
    // æ¨¡æ¿ç±»åž‹ä¸ºè¡¨å•
    templateTypeForm(val) {
      if (!val) return;
      this.updateDisplay(val, ['showType', 'showTypea', 'showTypes']);
      this.updateDisplay(val, ['showType', 'templateId', 'queryTemplateName']);
    },
    // æ¨¡æ¿ç±»åž‹ä¸ºæ ‘
@@ -952,7 +1042,7 @@
      if (!val) return;
      const searchTarger = this.option.column.find(item => item.prop === 'searchTarger');  // èŽ·å–æœç´¢ç±»åž‹é…ç½®é¡¹
      searchTarger.display = false; // ä¸å±•示搜索类型
      this.updateDisplay(val, ['showType', 'showTypes', 'genjiedian', 'shujiedian', 'canzhaoshu', 'fgf', 'zkfs', 'linkType']);
      this.updateDisplay(val, ['showType', 'queryTemplateName', 'rootContent', 'showAbs', 'showLinkAbs', 'separator', 'expandMode', 'linkType']);
    },
    // æ¨¡æ¿ç±»åž‹ä¸ºUI定义
@@ -960,7 +1050,7 @@
      if (!val) return;
      const searchTarger = this.option.column.find(item => item.prop === 'searchTarger');  // èŽ·å–æœç´¢ç±»åž‹é…ç½®é¡¹
      searchTarger.display = false; // ä¸å±•示搜索类型
      this.updateDisplay(val, ['showType', 'UI', 'searchType', 'searchObjType', 'showTypes']);
      this.updateDisplay(val, ['showType', 'SubUILayout', 'searchType', 'searchObjType', 'queryTemplateName']);
    },
    // æŸ¥æ‰¾æ•°ç»„中对象索引