前后端分离版:RuoYi-Vue 介绍 | RuoYi
运行:环境部署 | RuoYi
原理:带页码参数打开表单带,关闭时带参数打开已被缓存的路由,通过生命周期函数activated
刷新列表
- 当列表页组件被缓存时,关闭表单 tab 会回到原状态
- 当列表页组件没有被缓存时,关闭表单 tab 会重新打开列表页组件(视觉上回到第一页)
而关闭表单时,我们希望刷新当前页,更新数据。
可以参考系统工具 - 代码生成 - 修改
,此处就是在新 tab 中打开表单,保存/关闭后刷新列表。
export default {
name: 'Info',
activated() {
console.log(this.$route.query, this.uniqueId)
const time = this.$route.query.t;
if (time != null && time != this.uniqueId) {
this.uniqueId = time;
this.queryParams.pageNum = Number(this.$route.query.pageNum);
this.getList();
}
},
...
}
Note
此处最为关键,组件name
需要需菜单配置的路由地址
一致,列表页组件才会被缓存,参看下表。
即组件要被缓存,name
必须与路由地址完全一致(除了一个字母大写),而只有组件被缓存,回到列表时才不会重刷页面、activated
方法才会被调用以刷新数据
name | 路由地址 | 被缓存 |
---|---|---|
Info | info | 是 |
Info | mine/info | 否 |
Mineinfo | mine/mineinfo | 是 |
MineInfo | mine/mineinfo | 否 |
// 动态路由,基于用户权限动态去加载
export const dynamicRoutes = [
...
{
path: '/info/info-edit',
component: Layout,
hidden: true,
permissions: ['mine:info:add', 'mine:info:edit'],
children: [
{
path: 'index/:id(\\d+)',
component: () => import('@/views/mine/info/edit'),
name: 'MineInfoEdit',
meta: { title: '上传信息', activeMenu: '/info' }
}
]
}
]
调用此方法关闭表单,同时将页码参数传回列表页,实现刷新当前页。
/** 关闭按钮 */
close() {
const obj = { path: "/info", query: { t: Date.now(), pageNum: this.$route.query.pageNum } };
this.$tab.closeOpenPage(obj);
}
若依没有集成 mybatis plus,查询、更新方法使用代码生成器生成 sql,所以增加字段要在表单、列表生效需要在 xml 查询、更新、列表等 sql 中加上字段
路由配置:ruoyi-ui/src/router/index.js
export const constantRoutes = [
// 添加首页路由
{
path: '/portal',
component: () => import('@/views/portal'),
hidden: true
},
// 修改原来的默认路由
{
path: '',
redirect: '/portal',
hidden: true
},
}
在路由拦截中添加首页路由白名单:ruoyi-ui/src/permission.js
const whiteList = ['/login', '/register', '/portal']
通常 war 部署主要为了方便修改配置文件。
启动类com.ruoyi.RuoYiApplication
和配置文件都在ruoyi-admin
模块,说明这个模块就是 spring boot 后台服务。
修改ruoyi-admin
的 pom.xml
<packaging>war</packaging>
测试发现启动报错:org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): com.ruoyi.system.mapper.SysConfigMapper.selectConfigList
这个报错是 mapper 层的接口找不到 xml,难道是 xml 在ruoyi-system
的 jar 中无法扫描到,尝试手动拷贝 mapper 文件夹到WEB-INF/classes
目录,可以正常启动。
<build>
<plugins>
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<version>3.3.1</version>
<executions>
<execution>
<id>copy-xmls</id>
<phase>process-sources</phase>
<goals>
<goal>copy-resources</goal>
</goals>
<configuration>
<outputDirectory>${basedir}/target/classes</outputDirectory>
<resources>
<resource>
<!-- <directory>${basedir}/src/main/java</directory>-->
<directory>../ruoyi-system/src/main/resources</directory>
<includes>
<include>**/*.xml</include>
</includes>
</resource>
</resources>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>