田源
2024-10-10 cc80ef9656d4144ca6255d2a7dcbb19816888166
ui定义克隆功能
已修改4个文件
240 ■■■■■ 文件已修改
Source/plt-web/plt-web-ui/src/api/UI/uiDefine.js 65 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/plt-web/plt-web-ui/src/views/modelingMenu/ui/uiDefine/rightRegion/bottomTable/index.vue 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/plt-web/plt-web-ui/src/views/modelingMenu/ui/uiDefine/rightRegion/cloneDialog.vue 155 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/plt-web/plt-web-ui/src/views/modelingMenu/ui/uiDefine/rightRegion/plShow.vue 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/plt-web/plt-web-ui/src/api/UI/uiDefine.js
@@ -8,6 +8,7 @@
    params
  });
}
// 列表查询
export function gridUIContextData(page, limit, params) {
  return request({
@@ -20,6 +21,7 @@
    }
  });
}
export const saveUIContextData = (row) => {
  return request({
    url: '/api/uiManagerController/saveUIContextData',
@@ -35,6 +37,7 @@
    data: row
  })
}
// 通过oid删除
export function delUIContextData(params) {
  return request({
@@ -43,6 +46,7 @@
    params
  })
}
//克隆
export const cloneUIContextData = (params) => {
  return request({
@@ -60,26 +64,28 @@
    params: params
  });
}
// 导出
export function expUIContextData (params) {
export function expUIContextData(params) {
  return request({
    url: '/api/uiManagerController/expUIContextData',
    method: 'post',
    responseType: 'blob',
    data:{
    data: {
      params
    }
  })
}
//上下文各区域列表数据
export function getTabByContextIdAndType(params){
export function getTabByContextIdAndType(params) {
  return request({
    url: "/api/uiManagerController/getTabByContextIdAndType",
    method: "get",
    params
  });
}
export const addTabData = (row) => {
  return request({
    url: '/api/uiManagerController/addTabData',
@@ -95,6 +101,7 @@
    data: row
  })
}
// 通过oid删除
export function deleteTabData(params) {
  return request({
@@ -103,8 +110,9 @@
    params
  })
}
//下方表格数据
export function getPLPageDefinations(params){
export function getPLPageDefinations(params) {
  return request({
    url: "/api/uiManagerController/getPLPageDefinations",
    method: "get",
@@ -200,7 +208,7 @@
  return request({
    url: "/api/uiManagerController/addTabButton",
    method: "post",
    data:params
    data: params
  });
}
@@ -209,7 +217,7 @@
  return request({
    url: "/api/uiManagerController/updateTabButton",
    method: "put",
    data:params
    data: params
  });
}
@@ -218,7 +226,7 @@
  return request({
    url: "/api/uiManagerController/deleteTabButton",
    method: "delete",
    data:params
    data: params
  });
}
@@ -227,7 +235,7 @@
  return request({
    url: "/api/uiManagerController/joinBtn",
    method: "put",
    data:params
    data: params
  });
}
@@ -236,7 +244,7 @@
  return request({
    url: "/api/uiManagerController/exitBtn",
    method: "put",
    data:params
    data: params
  });
}
@@ -245,7 +253,44 @@
  return request({
    url: "/api/uiManagerController/addPageDefination",
    method: "post",
    data:params
    data: params
  });
}
// 克隆树查询接口
export function getAllLevelTreeByBtm(params) {
  return request({
    url: "/api/uiManagerController/getAllLevelTreeByBtm",
    method: "get",
    params
  });
}
// 页面定义克隆
export function clonePageDef(params) {
  return request({
    url: "/api/uiManagerController/clonePageDef",
    method: "post",
    data: params
  });
}
// 页签定义克隆
export function clonetabPage(params) {
  return request({
    url: "/api/uiManagerController/clonetabPage",
    method: "post",
    data: params
  });
}
// 按钮定义克隆
export function cloneTabButton(params) {
  return request({
    url: "/api/uiManagerController/cloneTabButton",
    method: "post",
    data: params
  });
}
Source/plt-web/plt-web-ui/src/views/modelingMenu/ui/uiDefine/rightRegion/bottomTable/index.vue
@@ -198,7 +198,8 @@
      </el-container>
    </el-dialog>
    <action-dialog ref="actionDialog" @updataAction="actionSaveHandler"></action-dialog>
    <clone-dialog ref="cloneDialog"></clone-dialog>
    <clone-dialog ref="cloneDialog" :fromOid="fromOid" :sourceOId="sourceOId" type="pageDef" paramsType="tab"></clone-dialog>
    <clone-dialog ref="cloneBtnDialog" :fromOid="formBtnOid" :sourceOId="sourceBtnOid" type="tabButton" paramsType="pageDef"></clone-dialog>
  </div>
</template>
@@ -242,6 +243,10 @@
  name: "index",
  data() {
    return {
      formBtnOid:'',
      sourceBtnOid:'',
      sourceOId:'',
      fromOid:'',
      paramsForm: {},
      eventOption: {
        ...basicOption,
@@ -993,6 +998,7 @@
        return;
      }
      this.btnDesignVisible = true;
      this.formBtnOid = this.selectList[0].id;
      this.getTabBtnTree();
    },
@@ -1180,7 +1186,8 @@
        this.$message.error('顶层节点不允许复制');
        return;
      }
      this.$refs.cloneDialog.openDialog(this.nodeTreeRow);
      this.sourceBtnOid = this.nodeTreeRow.oId;
      this.$refs.cloneBtnDialog.openDialog(this.nodeTreeRow);
    },
    // 选择action
@@ -1196,6 +1203,9 @@
    // 打开克隆对话框
    rowCloneHandler(row) {
      console.log(row);
      this.fromOid = this.sourceData.plOId;
      this.sourceOId = row.id;
      this.$refs.cloneDialog.openDialog(row);
    },
Source/plt-web/plt-web-ui/src/views/modelingMenu/ui/uiDefine/rightRegion/cloneDialog.vue
@@ -1,16 +1,16 @@
<template>
  <el-dialog v-dialogDrag
             :append-to-body="true"
             :close-on-click-modal="false"
             :destroy-on-close="true"
             :title="dialog.title"
             :visible.sync="dialog.showDialog"
             width="1200px"
             :append-to-body="true"
             class="avue-dialog"
             :destroy-on-close="true"
             :close-on-click-modal="false"
             width="1200px"
             @close="cancelDialog">
    <el-container style="height: 580px">
      <el-aside style="width: 380px">
        <basic-container style="height: 530px">
        <basic-container v-loading="leftLoading" style="height: 530px">
          <h3 style="margin: 0 0 10px 0">业务类型</h3>
          <div style="height: 435px">
            <avue-tree ref="tree" :data="treeData" :option="treeOption" @node-click="nodeClick">
@@ -25,9 +25,9 @@
      </el-aside>
      <el-main>
        <basic-container style="height: 530px">
          <div style="height: 520px;">
            <avue-tree ref="uiTree" :data="uiTreeData" :option="uiTreeOption">
        <basic-container v-loading="rightLoading" style="height: 530px">
          <div style="height: 490px;">
            <avue-tree ref="uiTree" :data="uiTreeData" :option="uiTreeOption" @check-change="checkChange">
              <span slot-scope="{ node, data }" class="el-tree-node__label">
                <span style="font-size: 15px">
                  <i :class="data.icon"></i>
@@ -40,7 +40,7 @@
      </el-main>
    </el-container>
    <div class="dialog-footer avue-dialog__footer">
      <el-button type="primary" plain size="small" @click="submitDialog" >保 存</el-button>
      <el-button plain size="small" type="primary" @click="submitDialog">保 存</el-button>
      <el-button size="small" @click="cancelDialog">取 消</el-button>
    </div>
  </el-dialog>
@@ -48,12 +48,15 @@
<script>
import {getUIAuthor} from "@/api/authority/ui/uiAuthor";
import {getBizTree} from "@/api/UI/uiDefine";
import {getBizTree, getAllLevelTreeByBtm, clonePageDef, clonetabPage, cloneTabButton} from "@/api/UI/uiDefine";
export default {
name: "cloneDialog",
  data(){
  name: "cloneDialog",
  props: ['fromOid', 'type', 'sourceOId','paramsType'],
  data() {
    return {
      leftLoading: false,
      rightLoading: false,
      dialog: {
        showDialog: false,
        title: "克隆目标",
@@ -71,17 +74,17 @@
      },
      nodeRow: {},
      treeData: [],
      defaultExpandKeys:[],
      defaultExpandKeys: [],
      uiTreeOption: {
        nodeKey:'oid',
        checkOnClickNode:true,
        defaultExpandedKeys:this.defaultExpandKeys,
        multiple: true,
        nodeKey: 'oid',
        checkOnClickNode: true,
        defaultExpandedKeys: [],
        multiple: false,
        menu: false,
        addBtn: false,
        filter:false,
        filter: false,
        props: {
          label: 'label',
          label: 'text',
          value: 'oid',
          children: 'children'
        }
@@ -90,84 +93,96 @@
    };
  },
  methods: {
    openDialog( data) {
    openDialog(data) {
      this.dialog.showDialog = true;
      this.getTreeList()
      this.uiTreeData=[];
      this.uiTreeData = [];
    },
    cancelDialog() {
      this.dialog.loading = false;
      this.dialog.showDialog = false;
    },
    submitDialog() {
      linkSave({}).then(res => {
        if (res.data.success) {
          this.$message.success("克隆成功");
          this.cancelDialog();
          this.$emit("refresh");
      const node = this.$refs.uiTree.getCurrentNode();
      console.log(node);
      if (!node.leaf) {
        this.$message.error('请选择最下层子节点进行克隆');
        return;
      }
      let params = {};
      if (node) {
        params = {
          fromOid: this.fromOid,
          toOid: node.oid,
          cloneParam: {
            sourceOId: this.sourceOId
          }
        }
      });
      }
      console.log(params);
      const saveFunction = {
        'pageDef': clonePageDef,
        'tabPage': clonetabPage,
        'tabButton': cloneTabButton
      };
      saveFunction[this.type](params).then(res => {
        if(res.data.code == 200){
          this.$message.success(res.data.obj);
          this.cancelDialog();
        }
      })
    },
    getTreeList() {
      const loading = this.$loading({});
      this.leftLoading = true;
      getBizTree().then(res => {
        this.treeData =res.data.obj.children;
        loading.close();
      }).catch(error=>{
        loading.close();
        this.treeData = res.data.obj.children;
        this.leftLoading = false;
      }).catch(error => {
        this.leftLoading = false;
      })
    },
    // 角色点击
    nodeClick(row,node) {
    nodeClick(row, node) {
      this.nodeRow = row;
      const loading = this.$loading({});
      this.rightLoading = true;
      const params = {
        'conditionMap[roleId]': this.nodeRow.oid,
        'conditionMap[type]': this.type,
        'conditionMap[context]': this.context
        btmName: this.nodeRow.attributes.name,
        level: this.paramsType
      }
      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: 'UI上下文选项',
          children: res.data.data[0].children
        }];
        loading.close();
      this.defaultExpandKeys = ['root'];
      console.log(row);
      getAllLevelTreeByBtm(params).then(res => {
        this.uiTreeOption.defaultExpandedKeys = [res.data.obj.oid];
        this.uiTreeData = [res.data.obj];
        console.log(res);
        this.rightLoading = false;
      }).catch(error => {
        loading.close();
        this.rightLoading = false;
      })
    },
    //处理树
    processChildren(item) {
      if (item.children && item.children.length > 0) {
        item.children = item.children.map(child => {
          if(child.level<4){
          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
          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
Source/plt-web/plt-web-ui/src/views/modelingMenu/ui/uiDefine/rightRegion/plShow.vue
@@ -98,7 +98,7 @@
            <el-button type="primary" @click="saveHandler">确 定</el-button>
          </span>
    </el-dialog>
    <clone-dialog ref="cloneDialog"></clone-dialog>
    <clone-dialog ref="cloneDialog" :fromOid="fromOid" :sourceOId="sourceOId" type="tabPage" paramsType="ui"></clone-dialog>
  </div>
</template>
@@ -125,6 +125,8 @@
  components:{bottomTable,cloneDialog},
  data() {
    return {
      fromOid:'',
      sourceOId:'',
      uiDefineOid:'',
      areaType: '',
      tableLoading: false,
@@ -377,6 +379,8 @@
      });
    },
    rowCloneHandler(row) {
      this.fromOid = this.uiDefineData.plOId;
      this.sourceOId = row.plOId;
      this.$refs.cloneDialog.openDialog(row);
    },
  }