wangting
2024-10-23 dbcbde4397e0d0d28cf77a1cfafbe9a801d32182
日志、类型Action、修改细节
已修改12个文件
已添加1个文件
874 ■■■■ 文件已修改
Source/plt-web/plt-web-ui/src/App.vue 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/plt-web/plt-web-ui/src/api/system/log/logBasic.js 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/plt-web/plt-web-ui/src/components/PLT-basic-component/transfer.vue 34 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/plt-web/plt-web-ui/src/views/authority/ui/typeAction/index.vue 263 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/plt-web/plt-web-ui/src/views/modelingMenu/ui/Aciton/dialog.vue 293 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/plt-web/plt-web-ui/src/views/modelingMenu/ui/Aciton/index.vue 22 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/plt-web/plt-web-ui/src/views/modelingMenu/ui/uiDefine/index.vue 36 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/plt-web/plt-web-ui/src/views/modelingMenu/ui/uiDefine/rightRegion/cloneDialog.vue 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/plt-web/plt-web-ui/src/views/modelingMenu/ui/uiDefine/rightRegion/plShow.vue 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/plt-web/plt-web-ui/src/views/system/fileCab/index.vue 191 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/plt-web/plt-web-ui/src/views/system/log/index.vue 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/plt-web/plt-web-ui/src/views/system/role/index.vue 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/plt-web/plt-web-ui/src/views/system/user/index.vue 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/plt-web/plt-web-ui/src/App.vue
@@ -138,6 +138,12 @@
    margin-bottom: 5px;
  }
}
.smallBtn {
  width: 82px;
  text-align: center;
  padding-left: 4.5px;
}
/***隐藏树懒加载时节点上的loading,防止节点抖动*****/
.el-tree .el-tree-node__loading-icon{
  display: none !important;
Source/plt-web/plt-web-ui/src/api/system/log/logBasic.js
@@ -48,7 +48,7 @@
// å¯¼å‡º
export const exportLog = (params) => {
  return request({
    url: '/api/loginBasicController/exportLog',
    url: '/api/loginBasicController/exportLogs',
    method: 'get',
    headers: {'Content-Type': 'application/x-www-form-urlencoded;charset=UTF-8'},
    responseType: 'blob',
Source/plt-web/plt-web-ui/src/components/PLT-basic-component/transfer.vue
@@ -6,10 +6,9 @@
    :visible.sync="visible"
    append-to-body="true"
    class="avue-dialog"
    style="text-align: center"
    width="50%"
    width="830px"
    @close="dialogClose">
    <div style="margin-bottom: 20px;" v-if="topMethodsObj !== {} && topMethodsObj">
    <div style="height: 42px;line-height: 30px;margin-top: -5px;" v-if="topMethodsObj !== {} && topMethodsObj">
      <div>
        <span>导出方式:</span>
        <el-radio-group v-model="radio">
@@ -18,24 +17,27 @@
          <el-radio :label="2" v-if="topMethodsObj.page">页码</el-radio>
        </el-radio-group>
        <span v-if="radio === 2" style="margin-left: 20px;color: #F56C6C; ">
          <el-input v-model="pageExport" style="width: 150px"></el-input> ï¼ˆè¾“入页码或者页面范围,如:1-10)</span>
          <el-input v-model="pageExport" style="width: 150px" size="mini"></el-input> ï¼ˆè¾“入页码或者页面范围,如:1-10)</span>
      </div>
    </div>
    <el-transfer
      v-model="rightRoleData"
      v-loading="loading"
      :data="data"
      :filter-method="filterMethod"
      :render-content="renderFunc"
      :titles="transferTitle"
      filter-placeholder="关键词搜索"
      filterable
      style="text-align: left; display: inline-block;">
    </el-transfer>
    <div style="text-align: center">
      <el-transfer
        v-model="rightRoleData"
        v-loading="loading"
        :data="data"
        :filter-method="filterMethod"
        :render-content="renderFunc"
        :titles="transferTitle"
        filter-placeholder="关键词搜索"
        filterable
        style="text-align:left;display: inline-block;">
      </el-transfer>
    </div>
    <div slot="footer" class="dialog-footer">
      <div v-if="bottomValue" class="valueInfo">已设置的值为:[{{ bottomValue }}]</div>
      <el-button size="small" @click="visible = false">取 æ¶ˆ</el-button>
      <el-button size="small" type="primary" @click="sendHandler">ç¡® å®š</el-button>
      <el-button size="small" @click="visible = false">取 æ¶ˆ</el-button>
    </div>
  </el-dialog>
</template>
Source/plt-web/plt-web-ui/src/views/authority/ui/typeAction/index.vue
@@ -1,33 +1,18 @@
<template>
  <!--类型Action-->
  <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 - 190px);">
            <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-s-promotion"></i>
                    {{ (node || {}).label }}
                </span>
              </span>
            </avue-tree>
          </div>
        </div>
@@ -36,6 +21,19 @@
    <el-main>
      <basic-container>
        <avue-crud
          ref="crud"
          :data="data"
          :option="option"
          :table-loading="tableLoading"
          @selection-change="selectChangeHandler"
          @row-click="rowClickHandler">
          <template slot="menuLeft">
            <el-button icon="el-icon-plus" size="small" type="primary" @click="addHandler">添加</el-button>
            <el-button icon="el-icon-delete" plain size="small" type="danger" @click="delHandler">移除</el-button>
          </template>
        </avue-crud>
        <action-dialog ref="actionDialog"></action-dialog>
      </basic-container>
    </el-main>
@@ -43,8 +41,188 @@
</template>
<script>
import basicOption from "@/util/basic-option";
import {
  cloneUIContextData,
  delUIContextData, expUIContextData,
  getBizTree, getExpContextTree,
  gridUIContextData,
  saveUIContextData,
  updateUIContextData
} from "@/api/UI/uiDefine";
import func from "@/util/func";
import actionDialog from "@/views/modelingMenu/ui/Aciton/dialog"
export default {
  name: "index"
  name: "index",
  components:{actionDialog},
  data() {
    return {
      treeOption: {
        height: 'auto',
        defaultExpandAll: true,
        menu: false,
        addBtn: false,
        props: {
          label: 'text',
          value: 'oid',
          children: 'children'
        }
      },
      nodeRow: {},
      treeData: [],
      searchParams: {
      },
      tableLoading: false,
      selectList: [],
      option: {
        ...basicOption,
        calcHeight: -50,
        addBtn: false,
        editBtn: false,
        delBtn: false,
        tip: false,
        searchMenuSpan: 6,
        align: 'left',
        menu:false,
        column: [
          {
            label: '编号',
            prop: 'plCode',
            overHidden: true,
            search: true
          },
          {
            label: '名称',
            prop: 'plName',
            overHidden: true,
            search: true
          },
          {
            label: 'C/S类路径',
            prop: 'plCSClass',
            search: true,
            searchLabelWidth:120,
            overHidden: true,
          },
          {
            label: 'B/S链接地址',
            prop: 'plBSUrl',
            search: true,
            searchLabelWidth:120,
            overHidden: true,
          },
          {
            label: '类型',
            prop: 'plTypeType',
            search: true,
            type: 'select',
            width:100,
            dicData: [{
              label: '业务类型',
              value: 'business'
            }, {
              label: '链接类型',
              value: 'link'
            }]
          },
          {
            label: '描述',
            prop: 'plDesc',
            search: true,
            overHidden: true,
          },
        ]
      },
      data: [],
    }
  },
  created() {
    this.getTreeList();
  },
  methods: {
    //树表查询
    getTreeList() {
      const loading = this.$loading({});
      getBizTree().then(res => {
        this.treeData = [res.data.obj];
        loading.close();
      }).catch(error => {
        loading.close();
      })
    },
    // æ ‘点击
    nodeClick(row) {
      if (row.oid) {
        this.nodeRow = row;
        this.tableLoading = true;
        this.getTableList();
      }
    },
    getTableList() {
      const params = Object.assign(this.searchParams, {
        'conditionMap[btmName]': this.nodeRow.attributes.name,
      })
      gridUIContextData(1, 50, params).then(res => {
        this.data = res.data.data;
        this.$refs.crud.clearSelection();
        this.tableLoading = false;
      })
    },
    // å¤šé€‰
    selectChangeHandler(row) {
      this.selectList = row;
    },
    // è¡Œç‚¹å‡»
    rowClickHandler(row) {
      func.rowClickHandler(
        row,
        this.$refs.crud,
        this.lastIndex,
        (newIndex) => {
          this.lastIndex = newIndex;
        },
        () => {
          this.selectList = [];
        }
      );
    },
    //创建
    addHandler() {
      if (this.nodeRow && this.nodeRow.oid && this.nodeRow.oid!='') {
        this.$refs.actionDialog.openDialog(this.nodeRow);
      } else {
        this.$message.error('请选择业务类型');
      }
    },
    delHandler() {
      if (this.selectList.length <= 0) {
        this.$message.error('请至少选择一条数据');
        return;
      }
      const params = {
        oids: this.selectList.map(item => item.plOId).join(',')
      }
      this.$confirm('是否移除选中的Action?', '提示', {
        confirmButtonText: '确定',
        cancelButtonText: '取消',
        type: 'warning'
      }).then(() => {
        delUIContextData(params).then(res => {
          if (res.data.code === 200) {
            this.$message.success('删除成功');
            this.getTableList();
          }
        })
      }).catch(() => {
        this.$message({
          type: 'info',
          message: '已取消删除'
        });
      });
    },
  }
}
</script>
@@ -53,40 +231,5 @@
  .el-scrollbar__wrap {
    overflow: auto !important;
  }
  .headerCon{
    .el-button{
      width: 82px;
    }
  }
}
.headerCon {
  display: flex;
  flex-wrap: wrap;
  margin-bottom: 5px;
  .el-button + .el-button {
    margin-left: 5px;
  }
  .el-button {
    margin-top: 5px;
  }
}
.headerCon > .el-button:nth-child(4) {
  margin-left: 0;
}
.headerCon > .el-button:nth-child(7) {
  margin-left: 0;
}
.smallBtn {
  width: 82px;
  text-align: center;
  padding-left: 4.5px;
}
</style>
Source/plt-web/plt-web-ui/src/views/modelingMenu/ui/Aciton/dialog.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,293 @@
<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"
             class="avue-dialog"
             width="1400px"
             @close="cancelDialog">
    <el-container>
      <el-aside>
        <basic-container>
          <!-- å·¦ä¾§æ ‘ -->
          <div style="height: 200px;">
            <avue-tree
              ref="tree"
              v-model="treeForm"
              :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>
            </avue-tree>
          </div>
        </basic-container>
      </el-aside>
      <el-main>
        <basic-container>
          <div>
            <avue-crud
              ref="crud"
              :data="data"
              :option="option"
              :page.sync="page"
              :table-loading="tableLoading"
              @search-change="handleSearch"
              @search-reset="handleReset"
              @refresh-change="handleRefresh"
              @selection-change="selectChangeHandler"
              @row-click="rowClickHandler">
              <template slot="plTypeType" slot-scope="{row}">
                <el-tag :type="row.plTypeType === 'business' ? '' : 'success'">
                  {{ row.plTypeType === 'business' ? '业务类型' : '链接类型' }}
                </el-tag>
              </template>
            </avue-crud>
          </div>
        </basic-container>
      </el-main>
    </el-container>
    <div slot="footer" class="dialog-footer avue-dialog__footer">
      <el-button size="small" type="primary" @click="submitDialog">ç¡® å®š</el-button>
      <el-button size="small" @click="cancelDialog">取 æ¶ˆ</el-button>
    </div>
  </el-dialog>
</template>
<script>
import {
  getActionTree,
  getActionTableData,
  saveAction,
  updateAction,
  exportAction,
  deleteAction,
  getPLActionParam,
  savePLActionParam,
  updatePLActionParam,
  deletePLActionParam,
  saveActionCls,
  updateActionCls,
  deleteActionCls
} from '@/api/UI/Action/api'
import func from "@/util/func";
import basicOption from "@/util/basic-option";
import {clonePageDef, cloneTabButton, clonetabPage} from "@/api/UI/uiDefine";
export default {
  name: "index",
  data() {
    return {
      dialog: {
        showDialog: false,
        title: "选择Action",
        loading: false,
        type: "add",
      },
      currenRow: {}, // action当前行信息
      tableLoading: false,
      lastIndex: null,
      selectList: [],
      data: [],
      option: {
        ...basicOption,
        addBtn: false,
        height: 200,
        highlightCurrentRow: true,
        menu:false,
        column: [
          {
            label: '编号',
            prop: 'plCode',
            overHidden: true,
            search: true
          },
          {
            label: '名称',
            prop: 'plName',
            overHidden: true,
            search: true
          },
          {
            label: 'C/S类路径',
            prop: 'plCSClass',
            search: true,
            searchLabelWidth:120,
            overHidden: true,
          },
          {
            label: 'B/S链接地址',
            prop: 'plBSUrl',
            search: true,
            searchLabelWidth:120,
            overHidden: true,
          },
          {
            label: '类型',
            prop: 'plTypeType',
            search: true,
            type: 'select',
            width:100,
            dicData: [{
              label: '业务类型',
              value: 'business'
            }, {
              label: '链接类型',
              value: 'link'
            }]
          },
          {
            label: '描述',
            prop: 'plDesc',
            search: true,
            overHidden: true,
          },
        ]
      },
      treeNodeRow: {},
      treeForm: {},
      treeOption: {
        addBtn: false,
        defaultExpandedKeys: ['root'],
        props: {
          label: 'name',
          value: 'id',
          children: 'childs'
        }
      },
      treeData: [],
    }
  },
  created() {
  },
  methods: {
    openDialog(data) {
      this.dialog.showDialog = true;
      this.getTreeList()
      this.data = [];
    },
    cancelDialog() {
      this.dialog.loading = false;
      this.dialog.showDialog = false;
    },
    submitDialog() {
      if (this.selectList.length==0) {
        this.$message.error('请选择Action');
        return;
      }
      const saveFunction = {
        'pageDef': ''
      };
      saveFunction[this.type](params).then(res => {
        if(res.data.code == 200){
          this.$message.success(res.data.obj);
          this.cancelDialog();
        }
      })
    },
    // å·¦ä¾§æ ‘请求
    getTreeList(status) {
      const params = {
        isExp: status ? true : false
      }
      getActionTree(params).then(res => {
        const data = res.data.obj;
        this.treeData = [data];
      })
    },
    // å·¦ä¾§æ ‘行点击
    nodeClick(row) {
      this.treeNodeRow = row;
      this.getRightTableList(row);
      this.bottomData = [];
    },
    // å¤´éƒ¨åˆ·æ–°æŒ‰é’®
    handleRefresh() {
      if (func.isEmptyObject(this.treeNodeRow)) {
        return;
      }
      this.getRightTableList(this.treeNodeRow);
    },
    // å³ä¾§è¡¨æ ¼ä¿¡æ¯
    getRightTableList(row) {
      this.tableLoading = true;
      const params = {
        plactioncls: row.id
      }
      getActionTableData(params).then(res => {
        const data = res.data.data;
        this.data = data;
        this.tableLoading = false;
      })
    },
    // è¡¨æ ¼å¤šé€‰
    selectChangeHandler(row) {
      this.selectList = row;
    },
    // è¡Œç‚¹å‡»
    rowClickHandler(row) {
      this.currenRow = row;
      func.rowClickHandler(
        row,
        this.$refs.crud,
        this.lastIndex,
        (newIndex) => {
          this.lastIndex = newIndex;
        },
        () => {
          this.selectList = [];
        }
      );
    },
    // æœç´¢
    handleSearch(params, done) {
      if (func.isEmptyObject(this.treeNodeRow)) {
        this.$message.error('请先在左侧选择节点后操作');
        return done();
      }
      this.tableLoading = true;
      const apiParams = {
        plactioncls: this.treeNodeRow.id === 'root' ? '' : this.treeNodeRow.id,
        ...params
      }
      getActionTableData(apiParams).then(res => {
        const data = res.data.data;
        this.data = data;
        this.tableLoading = false;
      })
      done();
    },
    // é‡ç½®æœç´¢æ¡ä»¶
    handleReset() {
      if (func.isEmptyObject(this.treeNodeRow)) {
        this.$message.error('请先在左侧选择节点后操作');
        return;
      }
      this.getRightTableList(this.treeNodeRow);
    },
  }
}
</script>
<style lang="scss" scoped>
::v-deep {
  .el-scrollbar__wrap {
    overflow: auto !important;
  }
}
</style>
Source/plt-web/plt-web-ui/src/views/modelingMenu/ui/Aciton/index.vue
@@ -180,10 +180,12 @@
        addBtn: false,
        height: 350,
        highlightCurrentRow: true,
        menuWidth:160,
        column: [
          {
            label: '编号',
            prop: 'plCode',
            overHidden: true,
            search: true,
            rules: [
              {
@@ -196,6 +198,7 @@
          {
            label: '名称',
            prop: 'plName',
            overHidden: true,
            search: true,
            rules: [
              {
@@ -206,9 +209,10 @@
            ]
          },
          {
            label: '类路径',
            label: 'C/S类路径',
            prop: 'plCSClass',
            search: true,
            searchLabelWidth:120,
            overHidden: true,
          },
          {
@@ -231,15 +235,18 @@
            dicData: []
          },
          {
            label: '链接地址',
            label: 'B/S链接地址',
            prop: 'plBSUrl',
            search: true,
            searchLabelWidth:120,
            overHidden: true,
          },
          {
            label: '类型',
            prop: 'plTypeType',
            search: true,
            type: 'select',
            width:100,
            dicData: [{
              label: '业务类型',
              value: 'business'
@@ -335,7 +342,9 @@
        const data = res.data.obj;
        this.treeData = [data];
        const selectTreeData = this.option.column.find(item => item.prop === 'plActionCls'); // æ‰¾åˆ°action添加分类树
        selectTreeData.dicData = [data];
        const dicData=[data];
        dicData[0].disabled=true;//根节点不能选
        selectTreeData.dicData = dicData;
      })
    },
@@ -719,11 +728,4 @@
    overflow: auto !important;
  }
}
.smallBtn {
  width: 82px;
  text-align: center;
  padding-left: 4.5px;
}
</style>
Source/plt-web/plt-web-ui/src/views/modelingMenu/ui/uiDefine/index.vue
@@ -689,41 +689,5 @@
  .el-scrollbar__wrap {
    overflow: auto !important;
  }
  .headerCon {
    .el-button {
      width: 82px;
    }
  }
}
.headerCon {
  display: flex;
  flex-wrap: wrap;
  margin-bottom: 5px;
  .el-button + .el-button {
    margin-left: 5px;
  }
  .el-button {
    margin-top: 5px;
  }
}
.headerCon > .el-button:nth-child(4) {
  margin-left: 0;
}
.headerCon > .el-button:nth-child(7) {
  margin-left: 0;
}
.smallBtn {
  width: 82px;
  text-align: center;
  padding-left: 4.5px;
}
</style>
Source/plt-web/plt-web-ui/src/views/modelingMenu/ui/uiDefine/rightRegion/cloneDialog.vue
@@ -40,14 +40,13 @@
      </el-main>
    </el-container>
    <div class="dialog-footer avue-dialog__footer">
      <el-button plain size="small" type="primary" @click="submitDialog">保 å­˜</el-button>
      <el-button size="small" type="primary" @click="submitDialog">保 å­˜</el-button>
      <el-button size="small" @click="cancelDialog">取 æ¶ˆ</el-button>
    </div>
  </el-dialog>
</template>
<script>
import {getUIAuthor} from "@/api/authority/ui/uiAuthor";
import {getBizTree, getAllLevelTreeByBtm, clonePageDef, clonetabPage, cloneTabButton} from "@/api/UI/uiDefine";
export default {
Source/plt-web/plt-web-ui/src/views/modelingMenu/ui/uiDefine/rightRegion/plShow.vue
@@ -40,7 +40,7 @@
      width="800px"
      @close="dialogClose"
    >
      <el-form ref="form" :model="form" :rules="rules" label-width="100px" size="small">
      <el-form ref="form" :model="form" :rules="rules" label-width="100px" size="small" style="margin-bottom: 30px;">
        <el-row>
          <el-col :span="12">
            <el-form-item label="页面编码:" prop="plCode">
@@ -93,9 +93,9 @@
          <div>4、输入时,不要敲回车换行。</div>
        </div>
      </el-form>
      <span slot="footer" class="dialog-footer">
            <el-button @click="dialogClose">取 æ¶ˆ</el-button>
            <el-button type="primary" @click="saveHandler">ç¡® å®š</el-button>
      <span slot="footer" class="dialog-footer avue-dialog__footer">
            <el-button  size="small" type="primary" @click="saveHandler">保 å­˜</el-button>
            <el-button  size="small" @click="dialogClose">取 æ¶ˆ</el-button>
          </span>
    </el-dialog>
    <clone-dialog ref="cloneDialog" :fromOid="fromOid" :sourceOId="sourceOId" type="tabPage" paramsType="ui"></clone-dialog>
Source/plt-web/plt-web-ui/src/views/system/fileCab/index.vue
@@ -5,19 +5,24 @@
      ref="logCrud"
      :data="tableData"
      :option="option"
      :page.sync="page"
      :table-loading="tableLoading"
      @on-load="getTableList"
      @refresh-change="handleRefresh"
      @search-change="handleSearch"
      @search-reset="handleReset"
      @size-change="sizeChange"
      @current-change="currentChange"
      @row-save="rowSaveHandler"
      @row-update="rowUpdateHandler"
      @row-del="rowDeleteHandler"
    >
      <template slot="menuLeft" slot-scope="scope">
        <el-button icon="el-icon-download" plain size="small" type="primary" @click="exportClickHandler">导出</el-button>
      </template>
      <template #menu="{row,index,size}">
        <el-button icon="el-icon-user" type="text" size="small" @click="userHandler(row,index)">分配成员</el-button>
      </template>
    </avue-crud>
    <!-- åˆ†é…æˆå‘˜ç©¿æ¢­æ¡†   -->
    <transfer ref="transfer" :left-role-data="leftRoleData" :right-role-data="rightRoleData"
              :transferTitle="transferTitle" title="文件柜添加成员"
              @transferSend="roleSendHandler">
    </transfer>
  </basic-container>
</template>
@@ -25,6 +30,8 @@
import {exportLog, getLogListByContion} from "@/api/system/log/logBasic";
import func from "@/util/func";
import basicOption from "@/util/basic-option";
import {addUser, deleteUser, updateUser} from "@/api/system/user/api";
import {listUserByRoleOid, listUserUnInRoleOid, saveRight} from "@/api/system/role/api";
export default {
  name: "index",
@@ -34,90 +41,123 @@
      tableData: [],
      option: {
        ...basicOption,
        addBtn:false,
        editBtn: false,
        delBtn: false,
        calcHeight: -60,
        align:'left',
        headerAlign:'center',
        menu:false,
        searchMenuSpan: 6,
        searchIcon:false,
        menuWidth:260,
        dialogMenuPosition: 'right',
        dialogWidth:600,
        column: [
          {
            label: '卷名',
            prop: 'truename',
            width: 300
          }, {
            label: '机器类型',
            prop: 'username',
            width: 150
          },{
            label: '路径名称',
            prop: 'userIp'
          },{
            label: '首选路径',
            prop: 'moduleName',
            width: 200,
            span: 24,
            rules: [{ required: true, message: '请输入卷名', trigger: 'blur' }]
          },{
            label: '服务器',
            prop: 'type',
            width: 150
            span: 24,
            rules: [{ required: true, message: '请输入服务器', trigger: 'blur' }]
          },{
            label: '卷服务',
            prop: 'date',
            span: 24,
            rules: [{ required: true, message: '请输入卷服务', trigger: 'blur' }]
          }, {
            label: '机器类型',
            prop: 'username',
            width: 120,
            span: 24,
            type:'radio',
            dicData:[{
              label:'Unix',
              value:'Unix'
            },{
              label:'Win NT',
              value:'Win NT'
            }],
            value:'Win NT'
          },{
            label: '路径名称',
            prop: 'userIp',
            span: 24,
            overHidden: true,
            rules: [{ required: true, message: '请输入路径名称', trigger: 'blur' }]
          },{
            label: '首选路径',
            prop: 'loc',
            width: 120,
            span: 24,
            type: 'switch',
            value:false
          }]
      },
      page: {
        currentPage: 1,
        pageSize: 50,
        total: 0,
        pageSizes: [10, 30, 50, 100],
      },
      searchParams: {}
      currentRow:null,
      leftRoleData: [],  // åˆ†é…æˆå‘˜ç©¿æ¢­æ¡†å·¦ä¾§åˆå§‹æ•°æ®
      rightRoleData: [], // åˆ†é…æˆå‘˜ç©¿æ¢­æ¡†å³ä¾§åˆå§‹æ•°æ®
      transferTitle: ['文件柜外成员', '文件柜内成员'],
    }
  },
  methods: {
    // è¡¨æ ¼è¯·æ±‚
    getTableList() {
      this.tableLoading = true;
      getLogListByContion(this.page.currentPage, this.page.pageSize, {'logType':this.$route.query.logType,...this.searchParams}).then(res => {
      getLogListByContion(1, 50, {}).then(res => {
        this.tableData = res.data.data;
        this.page.total = res.data.total;
        this.tableLoading = false;
      })
    },
    // æœç´¢æŸ¥è¯¢
    handleSearch(params, done) {
      this.searchParams = {
        userName:params.truename,
        ipText:params.userIp,
        startDate:params.date[0],
        endDate:params.date[1]
      };
      this.getTableList();
      done();
    // æ–°å¢ž
    rowSaveHandler(row, done,loading) {
      addUser(row).then(res => {
        if (res.data.code === 200) {
          this.$message.success(res.data.obj);
          this.getTableList();
          done();
        }
      }).catch(err => {
        loading()
      });
    },
    // é‡ç½®æœç´¢æ¡ä»¶
    handleReset() {
      this.searchParams = {};
      this.getTableList();
    // ç¼–辑
    rowUpdateHandler(row, index, done,loading) {
      updateUser(row).then(res => {
        if (res.data.code === 200) {
          this.$message.success(res.data.obj);
          this.getTableList();
          done()
        }
      }).catch(err => {
        loading()
      });
    },
    // æ¡æ•°
    sizeChange(val) {
      this.page.pageSize = val;
    },
    // åˆ é™¤
    rowDeleteHandler(row) {
      let params = {
        ids: row.id
      }
    // é¡µç 
    currentChange(val) {
      this.page.currentPage = val;
    },
    handleRefresh(){
      this.getTableList();
      this.$confirm('您确定要删除当前的卷节点吗?', '提示', {
        confirmButtonText: '确定',
        cancelButtonText: '取消',
        type: 'warning'
      }).then(() => {
        deleteUser(params).then(res => {
          if (res.data.code === 200) {
            this.$message.success(res.data.obj);
            this.getTableList();
          }
        });
      }).catch(() => {
        this.$message({
          type: 'info',
          message: '已取消删除'
        });
      });
    },
    // å¯¼å‡º
    exportClickHandler() {
@@ -129,6 +169,39 @@
        loading.close();
      })
    },
    //分配成员
    userHandler(row,index){
      this.currentRow=row;
      Promise.all([
        listUserUnInRoleOid({pkRole: row.id}),
        listUserByRoleOid({pkRole: row.id})
      ]).then(([unInRoleRes, byRoleRes]) => {
        if (unInRoleRes.data.code === 200 && byRoleRes.data.code === 200) {
          const leftData = [...unInRoleRes.data.data, ...byRoleRes.data.data];
          // ç»„装好穿梭框可用数据
          this.leftRoleData = leftData.map(item => {
            return {
              name: item.name + `(${item.id})`,
              oid: item.oid
            }
          })
          this.rightRoleData = byRoleRes.data.data.map(item => item.oid);
          this.$refs.transfer.visible = true;
        }
      });
    },
    // åˆ†é…æˆå‘˜ç©¿æ¢­æ¡†å›žå¡«
    roleSendHandler(row) {
      let params = {
        userOids: row.join(','),
        roleId: this.currentRow.id
      }
      saveRight(params).then(res => {
        this.$message.success(res.data.obj);
        this.getTableList();
      })
    },
  }
}
</script>
Source/plt-web/plt-web-ui/src/views/system/log/index.vue
@@ -112,7 +112,7 @@
    // è¡¨æ ¼è¯·æ±‚
    getTableList() {
      this.tableLoading = true;
      getLogListByContion(this.page.currentPage, this.page.pageSize, {'logType': this.$route.query.logType, ...this.searchParams}).then(res => {
      getLogListByContion(this.page.currentPage, this.page.pageSize, {'logType': this.$route.query.logType,'roleType':this.$route.query.roleType, ...this.searchParams}).then(res => {
        this.tableData = res.data.data;
        this.page.total = res.data.total;
        this.tableLoading = false;
@@ -154,7 +154,7 @@
    // å¯¼å‡º
    exportClickHandler() {
      const loading = this.$loading({});
      exportLog().then(res => {
      exportLog({'pageNo':1,'pageSize':-1,'logType': this.$route.query.logType,'roleType':this.$route.query.roleType, ...this.searchParams}).then(res => {
        func.downloadFileByBlobHandler(res);
        this.createdLoading = false
        this.$message.success('导出成功');
Source/plt-web/plt-web-ui/src/views/system/role/index.vue
@@ -30,7 +30,7 @@
      </template>
    </avue-crud>
    <!-- åˆ†é…è§’色穿梭框   -->
    <!-- åˆ†é…æˆå‘˜ç©¿æ¢­æ¡†   -->
    <transfer ref="transfer" :left-role-data="leftRoleData" :right-role-data="rightRoleData"
              :transferTitle="transferTitle" title="角色添加成员"
              @transferSend="roleSendHandler">
@@ -296,8 +296,6 @@
          this.rightRoleData = byRoleRes.data.data.map(item => item.oid);
          this.$refs.transfer.visible = true;
        }
      }).catch(err => {
        console.error(err);
      });
    },
@@ -311,8 +309,6 @@
      saveRight(params).then(res => {
        this.$message.success(res.data.obj);
        this.getTableList();
      }).catch(err => {
        this.$message.error(err)
      })
    },
Source/plt-web/plt-web-ui/src/views/system/user/index.vue
@@ -93,8 +93,8 @@
      </div>
      <div slot="footer" class="dialog-footer">
        <el-button size="small" @click="pwdVisible = false">取 æ¶ˆ</el-button>
        <el-button size="small" type="primary" @click="savePwdHandler">ç¡® å®š</el-button>
        <el-button size="small" @click="pwdVisible = false">取 æ¶ˆ</el-button>
      </div>
    </el-dialog>
@@ -119,8 +119,8 @@
      >
      </avue-crud>
      <div slot="footer" class="dialog-footer">
        <el-button size="small" @click="departVisible = false">取 æ¶ˆ</el-button>
        <el-button size="small" type="primary" @click="saveDepartHandler">ç¡® å®š</el-button>
        <el-button size="small" @click="departVisible = false">取 æ¶ˆ</el-button>
      </div>
    </el-dialog>
  </basic-container>
@@ -408,7 +408,6 @@
        }
      }).catch(err => {
        loading()
        console.log(err);
      })
    },
@@ -439,7 +438,6 @@
        }
      }).catch(err => {
        loading()
        console.log(err);
      });
    },