记录jeecg-boot及a-table前端问题

news2024/12/26 23:07:00

标签页重复

原因:

TabLayout中它有监听$route,是根据route.fullpath去判断的。这就会出现一种情况,我是同一个path比如/detail,但是我带了个参数/detail?id=132165151651/detail?id=256151561651这两个fullpath明显不同,所以会出现两个tab标签页

需求:

我希望的是根据path判断,虽然你参数不同,但属于同一个path,就应该属于同一个tab标签页

改进:

在监听$route的代码里去改,加多个判断,看新路由的path相不相等

$route: function (newRoute) {
      //console.log("新的路由",newRoute)
      this.activePage = newRoute.fullPath
      if (!this.multipage) {
        this.linkList = [newRoute.fullPath]
        this.pageList = [Object.assign({}, newRoute)]
        // update-begin-author:taoyan date:20200211 for: TASK #3368 【路由缓存】首页的缓存设置有问题,需要根据后台的路由配置来实现是否缓存
      } else if (indexKey == newRoute.fullPath) {
        //首页时 判断是否缓存 没有缓存 刷新之
        if (newRoute.meta.keepAlive === false) {
          this.routeReload()
        }
        // update-end-author:taoyan date:20200211 for: TASK #3368 【路由缓存】首页的缓存设置有问题,需要根据后台的路由配置来实现是否缓存
      } else if (this.linkList.indexOf(newRoute.fullPath) < 0) {
        // 开始新增判断:
        // 此处需增加一个path相等的比对, 因为存在一种情况是path相等, 但是由于path后面query参数的值不同, 导致fullPath不同
        // 这就会导致path相同的路由仅仅因为参数不同而打开了新的页签。这里需要让每一个path只对应一个页签
        const oldIndex = this.pageList.findIndex((item) => item.path === newRoute.path)
        if (oldIndex >= 0) {
          this.linkList.splice(oldIndex, 1)
          this.pageList.splice(oldIndex, 1)
        }
        // 结束新增判断
        this.linkList.push(newRoute.fullPath)
        this.pageList.push(Object.assign({}, newRoute))
         update-begin-author:sunjianlei date:20200103 for: 如果新增的页面配置了缓存路由,那么就强制刷新一遍 #842
        // if (newRoute.meta.keepAlive) {
        //   this.routeReload()
        // }
         update-end-author:sunjianlei date:20200103 for: 如果新增的页面配置了缓存路由,那么就强制刷新一遍 #842
      } else if (this.linkList.indexOf(newRoute.fullPath) >= 0) {
        let oldIndex = this.linkList.indexOf(newRoute.fullPath)
        let oldPositionRoute = this.pageList[oldIndex]
        this.pageList.splice(oldIndex, 1, Object.assign({}, newRoute, { meta: oldPositionRoute.meta }))
      }
    }

v-has与v-if冲突

原因:

v-hasjeecg-boot权限管理插件中注册的一个指令,使用该指令放到按钮上,即可以根据权限去控制按钮是否展示。有些情况下需要结合业务使用v-if="expression" v-has="'user:add'",假如你的expressiontrue但是你没有'user:add'的权限,按我们的思路来说,这个按钮就不该出现,但是由于v-ifv-has有冲突且v-if="expression"成立,所以按钮是显示的。

需求:

我们需要v-ifv-has是同时成立的。

改进:

两个方案:
  1. v-if改为v-show,这样v-showv-has是可以同时成立的
  2. 去掉v-has,统一用v-if,找到用户的权限自行判断
 isShowApply() {
 	  // 拿到存在localstorage的用户权限列表
      const authList = JSON.parse(sessionStorage.getItem(USER_AUTH)) || []
      // 循环判断有没有该权限
      const hasPermission = authList.some((el) => el.action === 'user:add')
      // 权限和其它表达式
      return (
        hasPermission &&
       	expression1 &&
        expression2 &&
       	expression3
      )
 }

单点登出失败

原因:

单点登录的退出方法需要将本地地址替换为单点登录退出的地址如 window.location.href = window._CONFIG['casPrefixUrl'] + '/logout?service=' + serviceUrl。我们执行这个过后呢,单点登录服务器就会重定向到serviceUrl就是我们系统的地址。但是由于退出回调中有window.location.reload(),他又重新刷新了跳转过去单点登录服务器,导致登出失败。

改进:

增加判断,单点登出时不进行刷新:

this.$confirm({
        title: '提示',
        content: '真的要注销登录吗 ?',
        onOk() {
          return that
            .Logout({})
            .then(() => {
              // update-begin author:scott date:20211223 for:【JTC-198】退出登录体验不好
              //that.$router.push({ path: '/user/login' });
              if (process.env.NODE_ENV === 'development' || process.env.VUE_APP_SSO === 'false') {
                window.location.reload()
              }
              // update-end author:scott date:20211223 for:【JTC-198】退出登录体验不好
            })
            .catch((err) => {
              that.$message.error({
                title: '错误',
                description: err.message
              })
            })
        },
        onCancel() {}
      })

a-table组件翻页后使用rowSelection onChange方法回调参数不准确

现象:

这个table比如在第1页选了4条数据,第2页选了3条数据。在onChange的回调里参数是不对的,onChange回调有两个参数selectedRowKeysselectionRows,这个keys返回的是7条数据的key,但是这个rows只返回第2页的3条数据。明显是不对的。这个issueGitHub上有提,但是官方未解决。
a-table翻页回调issue

改进:

我们自己解决,自己定义一个回调处理函数,判断返回的row的长度和key的长度相不相等,相等的话可以直接赋值,不相等就需要新建个之前选择的rows的副本,再concat当前的选择的rows,再根据唯一标识去重即可。

onSelectChange(selectedRowKeys, selectionRows, rowKey = 'id') {
      // update by hwt 解决a-table组件翻页后使用rowSelection onChange方法回调参数不准确的bug
      // https://github.com/vueComponent/ant-design-vue/issues/3555
      if (selectedRowKeys.length === selectionRows.length) {
        this.selectedRowKeys = selectedRowKeys
        this.selectionRows = selectionRows
      } else {
        let newArr = [...this.selectionRows]
        this.selectedRowKeys = selectedRowKeys
        this.selectionRows = [...newArr.concat(selectionRows)].reduce((uniqueArr, current) => {
          return uniqueArr.findIndex((item) => item[rowKey] === current[rowKey]) === -1 &&
            selectedRowKeys.includes(current[rowKey])
            ? [...uniqueArr, current]
            : uniqueArr
        }, [])
        if (!this.selectionRows.length) {
          try {
            throw new Error(`this error message invoked by methods onSelectChange of jeecgListMixin.js , you should transfer parameters
          "rowKey" , author: hwt `)
          } catch (error) {
            console.warn(error)
          }
        }
      }
    },

使用:

基本不用改代码,仅仅修改回调函数就行
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/749177.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ciscoNAT

静态NAT Router0 int f0/0 ip add 192.168.1.3 255.255.255.0 # 两个PC的网关 no shutdown int f0/1 ip add 202.103.224.1 255.255.255.0 no shutdown exit ip route 0.0.0.0 0.0.0.0 202.103.224.2 # 配置默认路由能够去往目标网络 # 将内部网络的IP地址(192.168.1.1)映射到…

Typora 免费版下载安装(超简单亲测适用于Windows)与入门

前言 Typora大家都知道&#xff0c; 是一款好用的编辑器和阅读器。鬼鬼为大家找了一个可使用版本&#xff0c;安装过程十分简单&#xff0c;亲测有效&#xff0c;不浪费大家时间&#xff0c;现在将Typora分享给大家免费使用。下载链接在文章最后。 目录 前言 一、Typora的介…

前端JavaScript入门-day06

(创作不易&#xff0c;感谢有你&#xff0c;你的支持&#xff0c;就是我前行的最大动力&#xff0c;如果看完对你有帮助&#xff0c;请留下您的足迹&#xff09; 目录 作用域 局部作用域 全局作用域 作用域链 JS垃圾回收机制 1. 什么是垃圾回收机制 2.内存的生命周…

链路传播(Propagate)机制及使用场景

服务间链路追踪传播机制是指在微服务架构中&#xff0c;通过记录和跟踪服务之间的请求和响应信息&#xff0c;来实现对服务间链路的追踪和监控。这种机制可以帮助开发人员快速定位服务间出现的问题&#xff0c;并进行优化和调整。 具体来说&#xff0c;服务间链路追踪传播机制…

nvm的简介、安装、使用

一、nvm是什么&#xff1f; .nvm是一个node的版本管理工具&#xff0c;可以简单操作node版本的切换、安装、查看。。。等等&#xff0c;与npm不同的是&#xff0c;npm是依赖包的管理工具。 二、nvm的安装。 点击如下文件进行安装&#xff1a; &#xff08;1&#xff09;安装…

超声波功率放大器工作原理是什么意思

超声波功率放大器是一种能够将低功率、小振幅的超声波信号放大至足够高功率和大振幅输出的电子设备。它通常被用于超声波清洗、焊接、切割、医疗等领域中。 超声波功率放大器的工作原理基于声学共振的原理。具体来说&#xff0c;超声波功率放大器由一个压电陶瓷换能器和一个功放…

增强型(RX651)R5F56514EDFP、R5F5651EHDFP、R5F5651CDDBP微控制器,强化工业物联网安全。

RX651 微控制器 (MCU)系列产品&#xff0c;以满足工业自动化、楼宇自动化和智能表计系统更高的安全需求。扩展的微控制器集成了Trusted SecureIP&#xff08;TSIP&#xff09;&#xff0c;以及用于工业和网络控制系统的增强型可靠闪存功能和人机界面&#xff08;HMI&#xff0…

C# HTTP Error 500.19

解决办法&#xff1a; .vs configapplicationhost.config 修改<section name"windowsAuthenticationnurununoverrideModeDefault"Allow”/>

QQ消息是如何到达接收方的?看完这个你就明白了

A通过QQ给异地的B发了条消息&#xff0c;直到B收到了消息&#xff0c;中间经历了怎样的过程? 北京的A通过QQ给深圳的B发了一条消息&#xff0c;B在QQ上接收到了消息&#xff0c;从A点击发送开始&#xff0c;到B看到消息结束&#xff0c;中间过程是如何实现的&#xff1f;中间…

.Net Core Restful Api 版本区分第一种

前言&#xff1a;在我们进行Web Api开发时&#xff0c;版本的区分&#xff0c;是必须要考虑的&#xff0c;涉及到我们的版本发布&#xff0c;切换等&#xff0c;如何从旧版本无缝的切换到新版本&#xff1f; 下面&#xff0c;我们通过使用[ApiVersion]特性&#xff0c;实现两个…

超详细的学习笔记:CSS定位装饰(附代码示例)

笔记参考b站网课&#xff1a;【前端开发入门教程&#xff0c;web前端零基础html5 css3前端项目视频教程】https://www.bilibili.com/video/BV1Kg411T7t9?p124&vd_source06e5549bf018e111f4275c259292d0da 目录 一、网页常见布局方式 1、标准流 2、浮动 3、定位 二、定…

软件鉴定测试报告需要哪些材料?

软件鉴定测试报告是对软件产品进行功能、性能和安全等方面的测试和评估后所生成的报告。软件鉴定测试报告作为软件质量的重要指标&#xff0c;为软件的发布和应用提供可靠的依据。以下是软件鉴定测试报告中常见的材料内容&#xff1a; 1. 软件测试计划&#xff1a;包括测试目的…

UncategorizedSQLException 报错

85、UncategorizedSQLException 报错 出现问题的原因&#xff1a; 本身是没有这个问题的&#xff0c;后来服务器上的一张表&#xff0c;被误删了&#xff0c;重新创建之后&#xff0c;就出现了这个问题 org.springframework.jdbc.UncategorizedSQLException: ### Error upd…

C++—类和对象

文章目录 1 类2 对象2.1 创建对象2.2 对象的操作2.3 构造函数2.4 析构函数 3 静态成员4 this指针5 友元 一切我们研究的事物&#xff0c;都可以叫做对象。对象具有状态&#xff0c;操作和行为。通常用一个数值来描述对象的状态。对象的操作用于改变对象的状态。对象和对象的操作…

BlueZ 开发学习指南(一) --- D-Bus介绍

BlueZ 开发学习指南&#xff08;一&#xff09; — D-Bus介绍 一、 BlueZ与D-Bus简介 Linux使用的蓝牙协议栈是Blue Z&#xff0c;不同于我们以往的开发方式&#xff0c;Blue Z提供的API 并不是通过头文件这样的形式&#xff0c; 而是通过D-Bus的方式来提供的。 Blue Z提供的是…

AutoDL 训练stable-diffusion lora模型

1.创建镜像实例 2. 启动实例 3.启动服务 4.配置参数 4.1 基础模型选择 4.2 文件路径设置 5.点击打印训练信息 6.训练模型&#xff08;点击Train model&#xff09;

C++ 迭代器的设计与使用

C 迭代器是一种用于访问容器&#xff08;例如数组、向量、列表等&#xff09;元素的工具。它们允许我们以一种统一的方式遍历和操作容器中的数据&#xff0c;而不用关心容器内部数据结构的细节 C 迭代器 std 重要函数 std::begin 和 std::endstd::advance(iter,n)向前移动…

从零开始,用Python编写EA实战指南

在外汇交易领域&#xff0c;EA&#xff08;Expert Advisor&#xff09;是一种基于计算机程序的交易策略&#xff0c;被广泛应用于机器人化交易和量化交易。Python作为一种高效、灵活的编程语言&#xff0c;被越来越多的投资者用于编写EA和数据分析。本文将提供一份从零开始&…

Postgresql在哪里使用列统计信息?

对pg_statistic表的查询都是走syscache的&#xff0c;要找到所有使用列统计信息地方&#xff0c;遍历系统表索引即可 enum SysCacheIdentifier {...STATEXTDATASTXOID,STATEXTNAMENSP,STATEXTOID,STATRELATTINH,... }下面是最常用的STATRELATTINH索引场景&#xff0c;即 Sear…

行业追踪,2023-07-13,新样式来了,更清晰地追踪行业趋势

自动复盘 2023-07-13 凡所有相&#xff0c;皆是虚妄。若见诸相非相&#xff0c;即见如来。 k 线图是最好的老师&#xff0c;每天持续发布板块的rps排名&#xff0c;追踪板块&#xff0c;板块来开仓&#xff0c;板块去清仓&#xff0c;丢弃自以为是的想法&#xff0c;板块去留让…