ludc
2023-06-15 e14d495581896374cc4be7ec929feb95005e6563
修改系统管理、编码规则管理bug
已修改32个文件
341 ■■■■■ 文件已修改
Source/UBCS-WEB/src/api/system/menu.js 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS-WEB/src/api/system/role.js 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS-WEB/src/components/Crud/Crud.vue 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS-WEB/src/views/authority/apiscope.vue 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS-WEB/src/views/authority/datascope.vue 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS-WEB/src/views/authority/role.vue 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS-WEB/src/views/code/code.vue 94 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS-WEB/src/views/omd/enum.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS-WEB/src/views/system/tenant.vue 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS-WEB/src/views/system/user.vue 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/revision/model/BaseModel.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/util/UBCSSqlKeyword.java 43 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeBasicSecServiceImpl.java 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/controller/DeptController.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/controller/MenuController.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/controller/RoleController.java 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/controller/StrategyController.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/mapper/DeptMapper.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/mapper/MenuMapper.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/mapper/StrategyMapper.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/IDeptService.java 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/IMenuService.java 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/IStrategyService.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/impl/CombinationServiceImpl.java 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/impl/DeptServiceImpl.java 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/impl/MenuServiceImpl.java 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/impl/StrategyServiceImpl.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/wrapper/DeptWrapper.java 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/wrapper/MenuWrapper.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/wrapper/RoleWrapper.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-system/src/main/resources/mapper/MenuMapper.xml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-user/src/main/java/com/vci/ubcs/system/user/service/impl/UserServiceImpl.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS-WEB/src/api/system/menu.js
@@ -23,13 +23,15 @@
  })
}
export const getLazyMenuList = (parentId, params) => {
export const getLazyMenuList = (parentId, params, current, size) => {
  return request({
    url: '/api/ubcs-system/menu/lazy-menu-list',
    method: 'get',
    params: {
      ...params,
      parentId
      parentId,
      current,
      size,
    }
  })
}
Source/UBCS-WEB/src/api/system/role.js
@@ -1,8 +1,8 @@
import request from '@/router/axios';
export const getList = (current, size, params) => {
export const getPage = (current, size, params) => {
  return request({
    url: '/api/ubcs-system/role/list',
    url: '/api/ubcs-system/role/page',
    method: 'get',
    params: {
      ...params,
Source/UBCS-WEB/src/components/Crud/Crud.vue
@@ -36,7 +36,7 @@
                                :props="transferProps" @save="handelTransferSave"></integration-transfer>
        </el-button>
        <el-button size="small" type="primary" plain @click="findvisible=true">查询
        <advancedQuery  :visible.sync="findvisible" :options="this.options"></advancedQuery>
        <advanced-query  :visible.sync="findvisible" :options="options"></advanced-query>
        </el-button>
        <el-button size="small" type="primary" plain>相似项查询</el-button>
        <el-button size="small" type="primary" plain style="margin-left: 1px;margin-top:10px">刷新</el-button>
@@ -143,7 +143,7 @@
      editAttr:"",
      loading: false,
      data: [],
      options:{},
      options:[],
      option: {
        column: []
      },
Source/UBCS-WEB/src/views/authority/apiscope.vue
@@ -2,6 +2,7 @@
  <basic-container>
    <avue-crud :option="option"
               :table-loading="loading"
      :page.sync="page"
               :data="data"
               ref="crud"
               v-model="form"
@@ -114,7 +115,7 @@
        option: {
          lazy: true,
          tip: false,
          simplePage: true,
          //simplePage: true,
          searchShow: true,
          searchMenuSpan: 6,
          dialogWidth: "60%",
@@ -514,8 +515,10 @@
      },
      onLoad(page, params = {}) {
        this.loading = true;
        getLazyMenuList(this.parentId, Object.assign(params, this.query)).then(res => {
          this.data = res.data.data;
        getLazyMenuList(this.parentId, Object.assign(params, this.query), page.currentPage, page.pageSize).then(res => {
          const data = res.data.data;
          this.data = data.records;
          this.page.total = data.total;
          this.loading = false;
          this.selectionClear();
        });
@@ -523,7 +526,7 @@
      treeLoad(tree, treeNode, resolve) {
        const parentId = tree.id;
        getLazyMenuList(parentId).then(res => {
          resolve(res.data.data);
          resolve(res.data.data.records);
        });
      },
      // 数据权限模块
Source/UBCS-WEB/src/views/authority/datascope.vue
@@ -3,6 +3,7 @@
    <avue-crud :option="option"
               :table-loading="loading"
               :data="data"
               :page.sync="page"
               ref="crud"
               v-model="form"
               :permission="permissionList"
@@ -118,7 +119,7 @@
        option: {
          lazy: true,
          tip: false,
          simplePage: true,
          // simplePage: true,
          searchShow: true,
          searchMenuSpan: 6,
          dialogWidth: "60%",
@@ -598,8 +599,10 @@
      },
      onLoad(page, params = {}) {
        this.loading = true;
        getLazyMenuList(this.parentId, Object.assign(params, this.query)).then(res => {
          this.data = res.data.data;
        getLazyMenuList(this.parentId, Object.assign(params, this.query), page.currentPage, page.pageSize).then(res => {
          const data = res.data.data;
          this.data = data.records;
          this.page.total = data.total;
          this.loading = false;
          this.selectionClear();
        });
@@ -607,7 +610,7 @@
      treeLoad(tree, treeNode, resolve) {
        const parentId = tree.id;
        getLazyMenuList(parentId).then(res => {
          resolve(res.data.data);
          resolve(res.data.data.records);
        });
      },
      // 数据权限模块
Source/UBCS-WEB/src/views/authority/role.vue
@@ -4,6 +4,7 @@
               :table-loading="loading"
               :data="data"
               ref="crud"
      :page.sync="page"
               v-model="form"
               :permission="permissionList"
               :before-open="beforeOpen"
@@ -80,7 +81,7 @@
</template>
<script>
  import {add, getList, getRole, getRoleTreeById, grant, grantTree, remove, update} from "@/api/system/role";
  import {add, getPage, getRole, getRoleTreeById, grant, grantTree, remove, update} from "@/api/system/role";
  import {mapGetters} from "vuex";
  import website from '@/config/website';
@@ -111,7 +112,7 @@
        option: {
          height: "auto",
          tip: false,
          simplePage: true,
          // simplePage: true,
          searchShow: true,
          searchMenuSpan: 6,
          tree: true,
@@ -381,8 +382,10 @@
      },
      onLoad(page, params = {}) {
        this.loading = true;
        getList(page.currentPage, page.pageSize, Object.assign(params, this.query)).then(res => {
          this.data = res.data.data;
        getPage(page.currentPage, page.pageSize, Object.assign(params, this.query)).then(res => {
          const data = res.data.data;
          this.data = data.records;
          this.page.total = data.total;
          this.loading = false;
          this.selectionClear();
        });
Source/UBCS-WEB/src/views/code/code.vue
@@ -300,6 +300,7 @@
            size="small"
            icon="el-icon-search"
            plain
            :disabled="selectionList.length <= 0"
            @click="openAdvancedQuery('codeBasicSec')">
            高级查询
        </el-button>
@@ -527,7 +528,7 @@
                </el-select>
              </el-form-item>
              <el-form-item label="补位时的字符:" :label-width="rightFormLabelWidth">
                <el-select v-model="form.codeFillSeparatorSelect" @blur="inputSelectBlur" filterable placeholder="请选择" :disabled="basicSecOnlyRead">
                <el-select v-model="form.codeFillSeparator" @blur="inputSelectBlur" filterable placeholder="请选择" :disabled="basicSecOnlyRead">
                  <el-option
                    v-for="item in enumParam.codeFillSeparator"
                    :key="item.itemValue"
@@ -664,7 +665,7 @@
                </el-select>
              </el-form-item>
              <el-form-item label="补位时的字符:" :label-width="rightFormLabelWidth">
                <el-select v-model="form.codeFillSeparatorSelect" filterable @blur="inputSelectBlur" placeholder="请选择" :disabled="basicSecOnlyRead">
                <el-select v-model="form.codeFillSeparator" filterable @blur="inputSelectBlur" placeholder="请选择" :disabled="basicSecOnlyRead">
                  <el-option
                    v-for="item in enumParam.codeFillSeparator"
                    :key="item.itemValue"
@@ -1104,7 +1105,6 @@
            //console.log(conditionMaps);
          }
        },
        /* 公式编辑框内容改变,子组件编辑完公式之后内容回显时调用 */
        updateFormulaContent(content){
          this.form.getValueClass = content;
@@ -1177,7 +1177,8 @@
          let parentClsParam = this.parentClsfyParams;
          parentClsParam.classifyDialogLoading = true;
          let oid = this.selectionList.length==0 ? this.form.pkCodeRule:this.selectionList[0].oid;
          let conditionMaps = this.paramsToConditionMa({"pkCodeRule":oid});
          let conditionMaps = {};
          conditionMaps['conditionMap[pkCodeRule]'] = oid;
          refDataGridClassifySec(
            page.currentPage, 
            page.pageSize, 
@@ -1667,7 +1668,8 @@
              // 关闭对话框
              this.addBasicCodeSettingBox = false
            }
            // 点击新增基础码段,关闭窗口之后触发重新加载
            this.loadBasic(this.selectionList[0]);
          }else{
            editSave(this.form).then(() => {
               // 关闭对话框
@@ -1679,9 +1681,8 @@
              }, error => {
                window.console.log(error);
            });
          }
          // 点击新增基础码段,关闭窗口之后触发重新加载
          this.loadBasic(this.selectionList[0]);
          }
        },
        // 因为elementui的表单校验设置不上所以采用判断的方式来做表单检验方式
        checkForm(){
@@ -1755,7 +1756,7 @@
              this.$message.warning('(编码补位方式)'+tipsMsg);
              return false;
            }
            if(form.codeFillType != '不补位' && form.codeFillSeparatorSelect == ''){
            if(form.codeFillType != '不补位' && form.codeFillSeparator == ''){
              this.$message.warning('当补位方式为左补位或者右补位的时候,补位字符不能为空');
              return false;
            }
@@ -1779,11 +1780,10 @@
              this.$refs.codeFillLimit.$el.querySelector('input').focus();
              return false;
            }
            if(form.codeFillFlag == ''){
              this.$message.warning('(流水是否补码)'+tipsMsg);
              this.$refs.switch.$el.querySelector('input').focus();
              return false;
            }
            // if(form.codeFillFlag == '' || ){
            //   this.$message.warning('(流水是否补码)'+tipsMsg);
            //   return false;
            // }
          }else if(this.form.secType==='codelevelsec'){
            //层级码段
            if(form.codeLevelType == ''){
@@ -1851,7 +1851,8 @@
              this.$message.warning('(编码补位方式)'+tipsMsg);
              return false;
            }
            if(form.codeFillType != '不补位' && form.codeFillSeparatorSelect == ''){
            // console.log(form);
            if(form.codeFillType != 'code_fill_none' && form.codeFillSeparator == ''){
              this.$message.warning('当补位方式为左补位或者右补位的时候,补位字符不能为空');
              return false;
            }
@@ -1899,9 +1900,11 @@
          }
          // console.log(row.oid);
          //存储当前关联的编码规则相关信息
          if(row!='' || row!=null){
          this.currentCodeRuleOid = row.oid;
          this.currentRuleLcStatus = row.lcStatus;
          this.sendGridCodeBasicSec({"pkCodeRule":row.oid},false);
          }
        },
        // 发送加载基础码段的请求
        sendGridCodeBasicSec(condition,isAdancedQuery/** 是否高级查询 */){
@@ -1912,11 +1915,11 @@
          let conditionMaps = {};
          if(condition && !isAdancedQuery){
            Object.keys(condition).forEach(key=>{
              conditionMaps['conditionMap[pl_code_basicsec.'+key+']'] = condition[key].trim();
              conditionMaps['conditionMap['+key+']'] = condition[key].trim();
            });
          }
          if(isAdancedQuery){
            condition['conditionMap[pl_code_basicsec.pkCodeRule]'] = this.currentCodeRuleOid == null || this.currentCodeRuleOid == ''
            condition['conditionMap[pkCodeRule]'] = this.currentCodeRuleOid == null || this.currentCodeRuleOid == ''
            ? this.selectionList[0].oid:this.currentCodeRuleOid;
          }
          gridCodeBasicSec(1, -1,isAdancedQuery ? condition:conditionMaps).then(res => {
@@ -2001,7 +2004,7 @@
        },
        // 基础码段刷新时查询
        refreshChangeBasicSec(){
          this.loadBasic({"oid":this.currentCodeRuleOid == null || this.currentCodeRuleOid == '' ? this.selectionList[0].oid:this.currentCodeRuleOid});
          this.loadBasic(this.selectionList.at(-1));
        },
        // 操作基础码段中搜索清空等按钮的显示/隐藏
        hideBasicTable(hideBoolean){
@@ -2009,18 +2012,16 @@
          this.$refs.crudBasic.option.columnBtn = hideBoolean;
          this.$refs.crudBasic.option.column[0].search = hideBoolean;
          this.$refs.crudBasic.option.column[1].search = hideBoolean;
          if(!hideBoolean){
            this.selectionList = [];
            this.basicData = [];
          }
        },
        /** 编码规则相关方法 */
        // 打开高级查询窗口
        openAdvancedQuery(condition){
          // MasterTable({
          //   codeClassifyOid: "D9CF223F-317D-71EB-BD11-433A94CAD9F3",
          //   functionId: 5,
          // }).then(res=>{
          //   console.log(res.data.tableDefineVO.seniorQueryColumns);
          // })
          if(condition=='codeRule'){
            this.advancedQueryParam.options = [
              {
@@ -2065,22 +2066,22 @@
                data: [],
                title: '码段编号',
                fieldType: 'text',
                queryField: 'pl_code_basicsec.id',
                queryField: 'id',
              },{
                data: [],
                title: '码段名称',
                fieldType: 'text',
                queryField: 'pl_code_basicsec.name',
                queryField: 'name',
              },{
                data: [],
                title: '描述',
                fieldType: 'text',
                queryField: 'pl_code_basicsec.description',
                queryField: 'description',
              },{
                data: [],
                title: '码段类型',
                fieldType: 'combox',
                queryField: 'pl_code_basicsec.secType',
                queryField: 'secType',
                comboxKey: 'codeSecType',
              }
            ]
@@ -2112,17 +2113,6 @@
        // 刷新使用范围列表
        refreshUseRangeChange(){
          this.getRangeCodeList();
        },
        // 单击编码规则实现行选择
        codeRuleRowClick (row) {
          // 这儿应该可以不要,因为toggleRowSelection也会触发行选择时间
          this.selectionList = row;
          this.$refs.crud.toggleSelection();
          this.$refs.crud.setCurrentRow(row);
          this.$refs.crud.toggleRowSelection(row); //选中当前行
          if(row!=''){
            this.loadBasic(row);
          }
        },
        // 启用与停用
        enableOrDeactivatse(oId,update){
@@ -2238,7 +2228,7 @@
          //console.log(res);
          let oidArr = [];
          fromDialogPkCodebasic.forEach(ele => {
            oidArr.push(ele.id);
            oidArr.push(ele.oid);
          });
          let data = {
            "pkCodeRule": oid,
@@ -2360,7 +2350,7 @@
          let requestData = {};
          if(params){
            Object.keys(params).forEach(key=>{
              requestData["conditionMap"+'['+key+']'] = params[key].trim();
              requestData["conditionMap"+'['+key+'_like]'] = params[key].trim();
            });
          }
          this.query = requestData;
@@ -2370,17 +2360,23 @@
        // 编码规则当前选中行变化的时候触发
        selectionChange(list) {
          this.selectionList = list;
          this.$refs.crud.setCurrentRow(this.selectionList[list.length-1]);
          //当前选中行为空的时候就将码段管理表格数据置空,并禁用相关功能
          if(list == ''){
            this.basicData = [];
          if(this.selectionList.length <= 0){
            this.hideBasicTable(false);
          }
          if(this.selectionList.length > 0){
            this.$refs.crud.setCurrentRow(this.selectionList[list.length-1]);
            this.currentCodeRuleOid = this.selectionList[list.length-1].oid;
            this.currentRuleLcStatus = this.selectionList[list.length-1].lcStatus;
            this.loadBasic(this.selectionList[list.length-1]);
          }
        },
        // 单击编码规则实现行选择
        codeRuleRowClick (row) {
          // console.log(this.currentRuleLcStatus);
          this.$refs.crud.toggleSelection();
          this.$refs.crud.toggleRowSelection(row); //选中当前行
        },
        selectionClear() {
          this.selectionList = [];
@@ -2410,8 +2406,6 @@
            // 查询的值为空时,要将码段管理相关的内容禁用
            if(data.records.length <= 0) {
              this.hideBasicTable(false);
              this.selectionList = [];
              this.basicData = [];
              return;
            }
            this.loadBasic(this.data[0])
@@ -2507,7 +2501,7 @@
        // 补位时的字符,实现可输可选
        inputSelectBlur(e){
          if (e.target.value) {  
            this.form.codeFillSeparatorSelect = e.target.value;
            this.form.codeFillSeparator = e.target.value;
          }
        },
        // 码段类型改变时,增加对应的form表单中的属性
@@ -2568,8 +2562,8 @@
              serialStart: row!=null&&row.serialStart != '' ? row.serialStart:1,  //流水号起始值
              serialStep: row!=null&&row.serialStep != '' ? row.serialStep:1,   //流水的步长
              codeFillType: row!=null&&row.codeFillType != '' ? row.codeFillType:'code_fill_left', //编码补位方式
              codeFillSeparatorSelect: row!=null&&row.codeFillSeparator != '' ? row.codeFillSeparatorSelect:0,    //补位时的字符,选中的下拉框的下标
              codeFillSeparator: row!=null&&row.codeFillSeparator != '' ? row.codeFillSeparator:0,          //补位时的字符
              // codeFillSeparatorSelect: row!=null&&row.codeFillSeparatorSelect != '' ? row.codeFillSeparatorSelect:0,    //补位时的字符,选中的下拉框的下标
              codeFillSeparator: row!=null&&row.codeFillSeparator != '' ? row.codeFillSeparator:'0',          //补位时的字符
              codeFillLength: row!=null&&row.codeFillLength != '' ? row.codeFillLength:'',              //填充长度
              codeFillLimit: row!=null&&row.codeFillLimit != '' ? row.codeFillLimit:'',               //流水上限
              codeFillFlag: row!=null&&row.codeFillFlag != '' ? row.codeFillFlag=='true' ?  true:false :false,      //流水是否补码
@@ -2617,8 +2611,8 @@
            this.form = Object.assign({}, this.form,{
              codeSecLength: row!=null&&row.codeSecLength != '' ? row.codeSecLength:'',             //码段的长度
              codeFillType: row!=null&&row.codeFillType != '' ? row.codeFillType:'code_fill_left', //编码部位方式,枚举查询
              codeFillSeparatorSelect: row!=null&&row.codeFillSeparatorSelect != '' ? row.codeFillSeparatorSelect:0,  //选中的补位时的字符的下标
              codeFillSeparator: row!=null&&row.codeFillSeparator != '' ? row.codeFillSeparator:'', //补位时的字符,可输可选查询
              // codeFillSeparatorSelect: row!=null&&row.codeFillSeparatorSelect != '' ? row.codeFillSeparatorSelect:0,  //选中的补位时的字符的下标
              codeFillSeparator: row!=null&&row.codeFillSeparator != '' ? row.codeFillSeparator:'0', //补位时的字符,可输可选查询
            });
            this.loadCodeFillType();
            this.loadCodeFillSeparator();
Source/UBCS-WEB/src/views/omd/enum.vue
@@ -4,7 +4,7 @@
      :option="optionParent"
      :table-loading="loading"
      :data="dataParent"
      :page="pageParent"
      :page.sync="pageParent"
      ref="crud"
      v-model="formParent"
      :permission="permissionList"
Source/UBCS-WEB/src/views/system/tenant.vue
@@ -27,14 +27,6 @@
                   plain
                   @click="handleDelete">删 除
        </el-button>
        <el-tooltip class="item" effect="dark" content="给租户配置账号额度、过期时间等授权信息" placement="top">
          <el-button size="small"
                     plain
                     v-if="userInfo.role_name.includes('administrator')"
                     icon="el-icon-setting"
                     @click="handleSetting">授权配置
          </el-button>
        </el-tooltip>
        <el-tooltip class="item" effect="dark" content="给租户配置独立数据源以实现数据库隔离" placement="top">
          <el-button size="small"
                     plain
@@ -361,7 +353,7 @@
          message: "操作成功!"
        });
        done();
        console.log(done)
        // console.log(done)
      }, error => {
        window.console.log(error);
        loading();
Source/UBCS-WEB/src/views/system/user.vue
@@ -152,7 +152,6 @@
              :value="item.id"
              class="seloption"
              >
            </el-option>
          </el-select>
            <span slot="footer" class="dialog-footer">
@@ -1136,8 +1135,7 @@
  overflow: scroll;
}
.selects{
  width: 400px;
  margin-left: 92px;
  width: 100%;
}
.seloption{
  margin-left: 10px;
Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/revision/model/BaseModel.java
@@ -32,7 +32,7 @@
     * 租户ID
     * @TableField(value = "tenant_id")这里必须要写,并且必须是要小写的
     */
    @TableField(value = "tenant_id",exist = false)
    @TableField(value = "tenant_id")
    private String tenantId;
    private String description;
Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/util/UBCSSqlKeyword.java
@@ -84,44 +84,52 @@
        }
    }
    public static void buildConditionByAs(Map<String, Object> query, MPJLambdaWrapper<?> qw, String tableAlias){
        buildConditionMPJ(query,qw,tableAlias);
    }
    public static void buildCondition(Map<String, Object> query, MPJLambdaWrapper<?> qw) {
        buildConditionMPJ(query,qw,null);
    }
    private static void buildConditionMPJ(Map<String, Object> query, MPJLambdaWrapper<?> qw, String tableAlias){
        if (!Func.isEmpty(query)) {
            query.forEach((k, v) -> {
                if (!Func.hasEmpty(new Object[]{k, v}) && !k.endsWith("_ignore")) {
                    if (k.endsWith("_like")) {
                        qw.like(getColumn(k, "_like"), v);
                        qw.like(tableAlias+"."+getColumn(k, "_like"), v);
                    } else if (k.endsWith("_notequal")) {
                        qw.ne(getColumn(k, "_notequal"), v);
                        qw.ne(tableAlias+"."+getColumn(k, "_notequal"), v);
                    } else if (k.endsWith("_likeleft")) {
                        qw.likeLeft(getColumn(k, "_likeleft"), v);
                        qw.likeLeft(tableAlias+"."+getColumn(k, "_likeleft"), v);
                    } else if (k.endsWith("_likeright")) {
                        qw.likeRight(getColumn(k, "_likeright"), v);
                        qw.likeRight(tableAlias+"."+getColumn(k, "_likeright"), v);
                    } else if (k.endsWith("_notlike")) {
                        qw.notLike(getColumn(k, "_notlike"), v);
                        qw.notLike(tableAlias+"."+getColumn(k, "_notlike"), v);
                    } else if (k.endsWith("_ge")) {
                        qw.ge(getColumn(k, "_ge"), v);
                        qw.ge(tableAlias+"."+getColumn(k, "_ge"), v);
                    } else if (k.endsWith("_le")) {
                        qw.le(getColumn(k, "_le"), v);
                        qw.le(tableAlias+"."+getColumn(k, "_le"), v);
                    } else if (k.endsWith("_gt")) {
                        qw.gt(getColumn(k, "_gt"), v);
                        qw.gt(tableAlias+"."+getColumn(k, "_gt"), v);
                    } else if (k.endsWith("_lt")) {
                        qw.lt(getColumn(k, "_lt"), v);
                        qw.lt(tableAlias+"."+getColumn(k, "_lt"), v);
                    } else if (k.endsWith("_datege")) {
                        qw.ge(getColumn(k, "_datege"), DateUtil.parse(String.valueOf(v), "yyyy-MM-dd HH:mm:ss"));
                        qw.ge(tableAlias+"."+getColumn(k, "_datege"), DateUtil.parse(String.valueOf(v), "yyyy-MM-dd HH:mm:ss"));
                    } else if (k.endsWith("_dategt")) {
                        qw.gt(getColumn(k, "_dategt"), DateUtil.parse(String.valueOf(v), "yyyy-MM-dd HH:mm:ss"));
                        qw.gt(tableAlias+"."+getColumn(k, "_dategt"), DateUtil.parse(String.valueOf(v), "yyyy-MM-dd HH:mm:ss"));
                    } else if (k.endsWith("_dateequal")) {
                        qw.eq(getColumn(k, "_dateequal"), DateUtil.parse(String.valueOf(v), "yyyy-MM-dd HH:mm:ss"));
                        qw.eq(tableAlias+"."+getColumn(k, "_dateequal"), DateUtil.parse(String.valueOf(v), "yyyy-MM-dd HH:mm:ss"));
                    } else if (k.endsWith("_datele")) {
                        qw.le(getColumn(k, "_datele"), DateUtil.parse(String.valueOf(v), "yyyy-MM-dd HH:mm:ss"));
                        qw.le(tableAlias+"."+getColumn(k, "_datele"), DateUtil.parse(String.valueOf(v), "yyyy-MM-dd HH:mm:ss"));
                    } else if (k.endsWith("_datelt")) {
                        qw.lt(getColumn(k, "_datelt"), DateUtil.parse(String.valueOf(v), "yyyy-MM-dd HH:mm:ss"));
                        qw.lt(tableAlias+"."+getColumn(k, "_datelt"), DateUtil.parse(String.valueOf(v), "yyyy-MM-dd HH:mm:ss"));
                    } else if (k.endsWith("_null")) {
                        qw.isNull(getColumn(k, "_null"));
                        qw.isNull(tableAlias+"."+getColumn(k, "_null"));
                    } else if (k.endsWith("_notnull")) {
                        qw.isNotNull(getColumn(k, "_notnull"));
                        qw.isNotNull(tableAlias+"."+getColumn(k, "_notnull"));
                    } else {
                        qw.eq(getColumn(k, "_equal"), v);
                        qw.eq(tableAlias+"."+getColumn(k, "_equal"), v);
                    }
                }
@@ -129,6 +137,7 @@
        }
    }
    public static void buildConditionByMapString(Map<String, String> query, MPJLambdaWrapper<?> qw) {
        if (!Func.isEmpty(query)) {
            query.forEach((k, v) -> {
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeBasicSecServiceImpl.java
@@ -131,9 +131,11 @@
        MPJLambdaWrapper<CodeBasicSec> mpjLambdaWrapper = new MPJLambdaWrapper<>(CodeBasicSec.class, CodeTableNameEnum.PL_CODE_BASICSEC.getText())
            .selectAll(CodeBasicSec.class)
            .selectAs(CodeClassify::getName, CodeBasicSec::getReferCodeClassifyOidName)
            .leftJoin(CodeClassify.class,CodeTableNameEnum.PL_CODE_CLASSIFY.getText(), CodeClassify::getOid, CodeBasicSec::getReferCodeClassifyOid);
            .leftJoin(CodeClassify.class, CodeTableNameEnum.PL_CODE_CLASSIFY.getText(), CodeClassify::getOid, CodeBasicSec::getReferCodeClassifyOid)
            .leftJoin(CodeBasicSec.class,CodeTableNameEnum.PL_CODE_BASICSEC.getText()+1,CodeBasicSec::getOid,CodeBasicSec::getParentClassifySecOid
                ,ext->ext.selectAs(CodeBasicSec::getName,CodeBasicSec::getParentClassifySecText));
        // 添加where条件
        UBCSSqlKeyword.buildCondition(conditionMap,mpjLambdaWrapper);
        UBCSSqlKeyword.buildConditionByAs(conditionMap,mpjLambdaWrapper,CodeTableNameEnum.PL_CODE_BASICSEC.getText());
        IPage<CodeBasicSec> codeBasicSecIPage = codeBasicSecMapper.selectPage(UBCSCondition.getPage(query), mpjLambdaWrapper);
        return CodeBasicSecWrapper.build().pageVO(codeBasicSecIPage);
    }
@@ -508,20 +510,23 @@
        }
        List<CodeBasicSec> createList = new ArrayList<>();
        List<CodeBasicSec> basicSecDOS = codeBasicSecMapper.selectBatchIds(oidList);
        if(basicSecDOS.isEmpty()){
            return R.fail("克隆的码段信息不存在!");
        }
        basicSecDOS.forEach(sec -> {
            CodeBasicSec newSecDO = new CodeBasicSec();
            BeanUtilForVCI.copyPropertiesIgnoreCase(sec,newSecDO);
            newSecDO.setOid("");
            newSecDO.setNameOid("");
            newSecDO.setRevisionOid("");
            newSecDO.setOid(VciBaseUtil.getPk());
            newSecDO.setNameOid(VciBaseUtil.getPk());
            newSecDO.setRevisionOid(VciBaseUtil.getPk());
            newSecDO.setId(newSecDO.getId() + "_copy");
            newSecDO.setName(newSecDO.getName() + "_copy");
            newSecDO.setPkCodeRule(pkCodeRule);
            createList.add(newSecDO);
        });
        boolean b = saveBatch(createList);
        boolean resBoolean = saveBatch(createList);
        //codeBasicSecMapper.insertBatch(createList);
        return R.data(b,"克隆码段信息成功");
        return resBoolean ? R.data(resBoolean,"克隆码段信息成功"):R.fail("克隆码段信息失败!");
    }
    /**
Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/controller/DeptController.java
@@ -17,6 +17,7 @@
package com.vci.ubcs.system.controller;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
import com.vci.ubcs.system.cache.DictCache;
@@ -32,6 +33,7 @@
import org.springblade.core.cache.utils.CacheUtil;
import org.springblade.core.boot.ctrl.BladeController;
import org.springblade.core.mp.support.Condition;
import org.springblade.core.mp.support.Query;
import org.springblade.core.secure.BladeUser;
import org.springblade.core.tenant.annotation.NonDS;
import org.springblade.core.tool.api.R;
@@ -99,9 +101,9 @@
    })
    @ApiOperationSupport(order = 3)
    @ApiOperation(value = "懒加载列表", notes = "传入dept")
    public R<List<DeptVO>> lazyList(@ApiIgnore @RequestParam Map<String, Object> dept, Long parentId, BladeUser bladeUser) {
        List<DeptVO> list = deptService.lazyList(bladeUser.getTenantId(), parentId, dept);
        return R.data(DeptWrapper.build().listNodeLazyVO(list));
    public R<IPage<DeptVO>> lazyList(@ApiIgnore @RequestParam Map<String, Object> dept, Query query, Long parentId, BladeUser bladeUser) {
        IPage<DeptVO> list = deptService.lazyList(bladeUser.getTenantId(), parentId, dept, query);
        return R.data(DeptWrapper.build().pageNodeLazyVO(list));
    }
    /**
Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/controller/MenuController.java
@@ -16,7 +16,9 @@
 */
package com.vci.ubcs.system.controller;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
import com.vci.ubcs.system.entity.Menu;
import com.vci.ubcs.system.entity.TopMenu;
@@ -31,6 +33,7 @@
import org.springblade.core.cache.utils.CacheUtil;
import org.springblade.core.boot.ctrl.BladeController;
import org.springblade.core.mp.support.Condition;
import org.springblade.core.mp.support.Query;
import org.springblade.core.secure.BladeUser;
import org.springblade.core.tenant.annotation.NonDS;
import org.springblade.core.tool.api.R;
@@ -133,9 +136,9 @@
    //@PreAuth(RoleConstant.HAS_ROLE_ADMINISTRATOR)
    @ApiOperationSupport(order = 5)
    @ApiOperation(value = "懒加载菜单列表", notes = "传入menu")
    public R<List<MenuVO>> lazyMenuList(Long parentId, @ApiIgnore @RequestParam Map<String, Object> menu) {
        List<MenuVO> list = menuService.lazyMenuList(parentId, menu);
        return R.data(MenuWrapper.build().listNodeLazyVO(list));
    public R<IPage<MenuVO>> lazyMenuList(Long parentId, @ApiIgnore @RequestParam Map<String, Object> menu, Query query) {
        IPage<MenuVO> menuVOIPage = menuService.lazyMenuPage(parentId, menu,query);
        return R.data(MenuWrapper.build().pageNodeLazyVO(menuVOIPage));
    }
    /**
Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/controller/RoleController.java
@@ -17,6 +17,7 @@
package com.vci.ubcs.system.controller;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
import com.vci.ubcs.system.cache.SysCache;
@@ -32,6 +33,7 @@
import org.springblade.core.boot.ctrl.BladeController;
import org.springblade.core.cache.utils.CacheUtil;
import org.springblade.core.mp.support.Condition;
import org.springblade.core.mp.support.Query;
import org.springblade.core.secure.BladeUser;
import org.springblade.core.tenant.annotation.NonDS;
import org.springblade.core.tool.api.R;
@@ -73,19 +75,20 @@
    }
    /**
     * 列表
     * 分页列表
     */
    @GetMapping("/list")
    @GetMapping("/page")
    @ApiImplicitParams({
        @ApiImplicitParam(name = "roleName", value = "参数名称", paramType = "query", dataType = "string"),
        @ApiImplicitParam(name = "roleAlias", value = "角色别名", paramType = "query", dataType = "string")
    })
    @ApiOperationSupport(order = 2)
    @ApiOperation(value = "列表", notes = "传入role")
    public R<List<RoleVO>> list(@ApiIgnore @RequestParam Map<String, Object> role, BladeUser bladeUser) {
    public R<IPage<RoleVO>> list(@ApiIgnore @RequestParam Map<String, Object> role, BladeUser bladeUser, Query query) {
        QueryWrapper<Role> queryWrapper = Condition.getQueryWrapper(role, Role.class);
        List<Role> list = roleService.list((!bladeUser.getTenantId().equals(BladeConstant.ADMIN_TENANT_ID)) ? queryWrapper.lambda().eq(Role::getTenantId, bladeUser.getTenantId()) : queryWrapper);
        return R.data(RoleWrapper.build().listNodeVO(list));
        IPage<Role> page = roleService.page(Condition.getPage(query),
            (!bladeUser.getTenantId().equals(BladeConstant.ADMIN_TENANT_ID)) ? queryWrapper.lambda().eq(Role::getTenantId, bladeUser.getTenantId()) : queryWrapper);
        return R.data(RoleWrapper.build().pageNodeVO(page));
    }
    /**
Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/controller/StrategyController.java
@@ -1,5 +1,6 @@
package com.vci.ubcs.system.controller;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
import com.vci.ubcs.system.service.IStrategyService;
import io.swagger.annotations.Api;
@@ -48,8 +49,8 @@
    @GetMapping("/page")
    @ApiOperationSupport(order = 1)
    @ApiOperation(value = "分页查询", notes = "传入分页参数query")
    public R<Page<Strategy>> queryByPage(Query query) {
        Page<Strategy> strategyPage = strategyService.queryAllByPage(query);
    public R<IPage<Strategy>> queryByPage(Query query) {
        IPage<Strategy> strategyPage = strategyService.queryAllByPage(query);
        return R.data(strategyPage);
    }
Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/mapper/DeptMapper.java
@@ -17,6 +17,7 @@
package com.vci.ubcs.system.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.vci.ubcs.system.entity.Dept;
import com.vci.ubcs.system.vo.DeptVO;
@@ -38,7 +39,7 @@
     * @param param
     * @return
     */
    List<DeptVO> lazyList(String tenantId, Long parentId, Map<String, Object> param);
    IPage<DeptVO> lazyList(String tenantId, Long parentId, Map<String, Object> param,IPage page);
    /**
     * 获取树形节点
Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/mapper/MenuMapper.java
@@ -17,6 +17,7 @@
package com.vci.ubcs.system.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import org.springblade.core.tool.node.TreeNode;
import com.vci.ubcs.system.dto.MenuDTO;
import com.vci.ubcs.system.entity.Menu;
@@ -49,7 +50,7 @@
     * @param param
     * @return
     */
    List<MenuVO> lazyMenuList(Long parentId, Map<String, Object> param);
    IPage<MenuVO> lazyMenuPage(Long parentId, Map<String, Object> param, IPage page);
    /**
     * 树形结构
Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/mapper/StrategyMapper.java
@@ -3,6 +3,7 @@
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.apache.ibatis.annotations.Param;
import com.vci.ubcs.system.entity.Strategy;
@@ -22,7 +23,7 @@
     * @param page 分页对象
     * @return 对象列表
     */
    List<Strategy> queryAllByPage(IPage page);
    IPage<Strategy> queryAllByPage(IPage page);
    /**
     * 统计总行数
Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/IDeptService.java
@@ -16,9 +16,11 @@
 */
package com.vci.ubcs.system.service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import com.vci.ubcs.system.entity.Dept;
import com.vci.ubcs.system.vo.DeptVO;
import org.springblade.core.mp.support.Query;
import java.util.List;
import java.util.Map;
@@ -38,7 +40,7 @@
     * @param param
     * @return
     */
    List<DeptVO> lazyList(String tenantId, Long parentId, Map<String, Object> param);
    IPage<DeptVO> lazyList(String tenantId, Long parentId, Map<String, Object> param, Query query);
    /**
     * 树形结构
Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/IMenuService.java
@@ -16,7 +16,9 @@
 */
package com.vci.ubcs.system.service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import org.springblade.core.mp.support.Query;
import org.springblade.core.secure.BladeUser;
import org.springblade.core.tool.api.R;
import org.springblade.core.tool.node.TreeNode;
@@ -50,7 +52,7 @@
     * @param param
     * @return
     */
    List<MenuVO> lazyMenuList(Long parentId, Map<String, Object> param);
    IPage<MenuVO> lazyMenuPage(Long parentId, Map<String, Object> param, Query query);
    /**
     * 菜单树形结构
Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/IStrategyService.java
@@ -1,5 +1,6 @@
package com.vci.ubcs.system.service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import org.springblade.core.mp.support.Query;
import com.vci.ubcs.system.entity.Strategy;
@@ -36,7 +37,7 @@
     * @param query 分页对象
     * @return 查询结果
     */
    PageImpl<Strategy> queryAllByPage(Query query);
    IPage<Strategy> queryAllByPage(Query query);
    /**
     * 新增数据或修改数据
Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/impl/CombinationServiceImpl.java
@@ -110,7 +110,9 @@
     */
    @Override
    public List<Map<String, Object>> selectMaps() {
        List<Map<String, Object>> maps = listMaps(new QueryWrapper<Combination>().select("ID", "NAME"));
        List<Map<String, Object>> maps = listMaps(
            new QueryWrapper<Combination>().lambda().select(Combination::getId, Combination::getName)
        );
        return maps;
    }
Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/impl/DeptServiceImpl.java
@@ -17,6 +17,7 @@
package com.vci.ubcs.system.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springblade.core.log.exception.ServiceException;
@@ -26,6 +27,8 @@
import com.vci.ubcs.system.service.IDeptService;
import com.vci.ubcs.system.vo.DeptVO;
import com.vci.ubcs.system.wrapper.DeptWrapper;
import org.springblade.core.mp.support.Condition;
import org.springblade.core.mp.support.Query;
import org.springblade.core.secure.utils.AuthUtil;
import org.springblade.core.tool.constant.BladeConstant;
import org.springblade.core.tool.node.ForestNodeMerger;
@@ -49,7 +52,7 @@
    private static final String PARENT_ID = "parentId";
    @Override
    public List<DeptVO> lazyList(String tenantId, Long parentId, Map<String, Object> param) {
    public IPage<DeptVO> lazyList(String tenantId, Long parentId, Map<String, Object> param, Query query) {
        // 设置租户ID
        if (AuthUtil.isAdministrator()) {
            tenantId = StringPool.EMPTY;
@@ -74,7 +77,7 @@
        if (Func.isEmpty(param.get(PARENT_ID)) && param.size() > 1 && Func.toLong(parentId) == 0L) {
            parentId = null;
        }
        return baseMapper.lazyList(tenantId, parentId, param);
        return baseMapper.lazyList(tenantId, parentId, param, Condition.getPage(query));
    }
Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/impl/MenuServiceImpl.java
@@ -17,6 +17,7 @@
package com.vci.ubcs.system.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.vci.ubcs.system.cache.SysCache;
@@ -31,6 +32,8 @@
import com.vci.ubcs.system.wrapper.MenuWrapper;
import lombok.AllArgsConstructor;
import org.springblade.core.log.exception.ServiceException;
import org.springblade.core.mp.support.Condition;
import org.springblade.core.mp.support.Query;
import org.springblade.core.secure.BladeUser;
import org.springblade.core.secure.utils.AuthUtil;
import org.springblade.core.tool.api.R;
@@ -74,11 +77,11 @@
    }
    @Override
    public List<MenuVO> lazyMenuList(Long parentId, Map<String, Object> param) {
    public IPage<MenuVO> lazyMenuPage(Long parentId, Map<String, Object> param, Query query) {
        if (Func.isEmpty(Func.toStr(param.get(PARENT_ID)))) {
            parentId = null;
        }
        return baseMapper.lazyMenuList(parentId, param);
        return baseMapper.lazyMenuPage(parentId, param, Condition.getPage(query));
    }
Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/impl/StrategyServiceImpl.java
@@ -1,5 +1,6 @@
package com.vci.ubcs.system.service.impl;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@@ -67,9 +68,9 @@
     * @return 查询结果
     */
    @Override
    public PageImpl<Strategy> queryAllByPage(Query query) {
    public IPage<Strategy> queryAllByPage(Query query) {
        Page<Strategy> strategyPage = new Page<>(query.getCurrent(), query.getSize());
        return new PageImpl<>(this.strategyMapper.queryAllByPage(strategyPage));
        return this.strategyMapper.queryAllByPage(strategyPage);
    }
    /**
Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/wrapper/DeptWrapper.java
@@ -16,6 +16,9 @@
 */
package com.vci.ubcs.system.wrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.vci.ubcs.common.utils.PageDO2PageVO;
import org.springblade.core.mp.support.BaseEntityWrapper;
import org.springblade.core.tool.constant.BladeConstant;
import org.springblade.core.tool.node.ForestNodeMerger;
@@ -75,4 +78,14 @@
        return ForestNodeMerger.merge(collect);
    }
    public IPage<DeptVO> pageNodeLazyVO(IPage<DeptVO> page) {
        List<DeptVO> deptVOS = page.getRecords().stream().peek(dept -> {
            String category = DictCache.getValue(DictEnum.ORG_CATEGORY, dept.getDeptCategory());
            Objects.requireNonNull(dept).setDeptCategoryName(category);
        }).collect(Collectors.toList());
        List<DeptVO> list = ForestNodeMerger.merge(deptVOS);
        page.setRecords(list);
        return page;
    }
}
Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/wrapper/MenuWrapper.java
@@ -16,6 +16,7 @@
 */
package com.vci.ubcs.system.wrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import org.springblade.core.mp.support.BaseEntityWrapper;
import org.springblade.core.tool.constant.BladeConstant;
import org.springblade.core.tool.node.ForestNodeMerger;
@@ -69,4 +70,10 @@
        return ForestNodeMerger.merge(list);
    }
    public IPage<MenuVO> pageNodeLazyVO(IPage<MenuVO> page) {
        List<MenuVO> merge = ForestNodeMerger.merge(page.getRecords());
        page.setRecords(merge);
        return page;
    }
}
Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/wrapper/RoleWrapper.java
@@ -16,6 +16,9 @@
 */
package com.vci.ubcs.system.wrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.vci.ubcs.common.utils.PageDO2PageVO;
import org.springblade.core.mp.support.BaseEntityWrapper;
import org.springblade.core.tool.constant.BladeConstant;
import org.springblade.core.tool.node.ForestNodeMerger;
@@ -52,10 +55,17 @@
        return roleVO;
    }
    public List<RoleVO> listNodeVO(List<Role> list) {
        List<RoleVO> collect = list.stream().map(this::entityVO).collect(Collectors.toList());
        return ForestNodeMerger.merge(collect);
    }
    public IPage<RoleVO> pageNodeVO(IPage<Role> page) {
        List<RoleVO> collect = page.getRecords().stream().map(this::entityVO).collect(Collectors.toList());
        List<RoleVO> mergeList = ForestNodeMerger.merge(collect);
        IPage<RoleVO> roleVOIPage = new Page<>();
        roleVOIPage.setRecords(mergeList);
        return PageDO2PageVO.pageDO2PageVO(page,roleVOIPage);
    }
}
Source/UBCS/ubcs-service/ubcs-system/src/main/resources/mapper/MenuMapper.xml
@@ -73,7 +73,7 @@
        ORDER BY menu.sort
    </select>
    <select id="lazyMenuList" resultMap="menuVOResultMap">
    <select id="lazyMenuPage" resultMap="menuVOResultMap">
        SELECT
            menu.*,
            (
Source/UBCS/ubcs-service/ubcs-user/src/main/java/com/vci/ubcs/system/user/service/impl/UserServiceImpl.java
@@ -309,6 +309,7 @@
        }
        //获取用户采用的密码策略
        Strategy strategy = sysClient.getByUserId(userId).getData();
        // 几乎不会出现这种情况
        if(ObjectUtil.isEmpty(strategy)) {
            throw new ServiceException("当前用户未应用密码策略!");
        }
@@ -323,7 +324,7 @@
            if(reqType>=strategy.getRequiredType()){
                break;
            }
            if(!Func.isEmpty(RegexUtil.findResult(regexs.get(i),newPassword1))){
            if(RegexUtil.find(regexs.get(i),newPassword1)){
                reqType++;
            }
        }
@@ -331,12 +332,12 @@
        if(reqType<strategy.getRequiredType()){
            throw new ServiceException(resException);
        }
        // 是否属于组合方式中的类型
        // 是否属于组合方式中的类型,以前是密码必须是包含在组合方式中的类型
        String regex = sysClient.getRegex(Arrays.asList(strategy.getCombinationIds().split(","))).getData();
        regex = "^"+regex+"{"+strategy.getRequiredType()+",}$";
        boolean result = RegexUtil.find(regex, newPassword1);
        if(!result){
            throw new ServiceException(resException);
            throw new ServiceException("密码中只能存在【"+strategy.getCombinationNames()+"】中包含的字符!");
        }
        //修改密码同时,改变用户信息中的密码修改状态字段,密码修改时间
        return this.update(Wrappers.<User>update().lambda()
@@ -422,6 +423,7 @@
        boolean oauthTemp = userOauthService.updateById(userOauth);
        return (userTemp && oauthTemp);
    }
    @Override
    public boolean updatePlatform(Long userId, Integer userType, String userExt) {
        if (userType.equals(UserEnum.WEB.getCategory())) {