我们使用的ruoyi vie.js+elementui 的后台系统的前端工程 现在有一个需求 每一次页面提交请求时要将菜单ID提交到后端服务 做列权限管理需要 请我有知道怎样能实现吗
ID丢请求头,然后拦截事件里处理下
不知道你这个问题是否已经解决, 如果还没有解决的话:由于Ruoyi后台系统前端是基于vue.js和elementui构建的,因此我们可以在Vue组件中实现将菜单ID提交到后端服务的功能。具体实现步骤如下:
export default {
data () {
return {
menuId: ''
}
},
// ...
}
<el-menu-item index="1" @click="selectMenu(1)">
<i class="el-icon-menu"></i>
<span>菜单1</span>
</el-menu-item>
methods: {
selectMenu(menuId) {
this.menuId = menuId;
// ...
}
// ...
}
import axios from 'axios';
import store from '@/store';
axios.interceptors.request.use(config => {
const token = store.getters.token;
if (token) {
config.headers['Authorization'] = 'Bearer ' + token;
}
if (this.menuId) {
config.headers['menuId'] = this.menuId;
}
return config;
}, error => {
return Promise.reject(error);
});
@Controller
public class MenuController {
@Autowired
private IMenuService menuService;
@PostMapping("/menu")
public void addMenu(@RequestBody Menu menu, HttpServletRequest request) {
String menuId = request.getHeader("menuId");
// ...
}
// ...
}
注意:以上代码仅为示例,具体实现需要根据实际情况进行调整。
另外,如果不是每个页面都需要提交菜单ID,可以考虑在路由钩子函数中添加一个处理函数,根据路由信息判断是否需要提交菜单ID。例如:
router.beforeEach((to, from, next) => {
if (to.meta.requireAuth) {
if (store.getters.token) {
if (to.meta.menuId) {
Vue.prototype.$menuId = to.meta.menuId;
}
next();
} else {
next('/login');
}
} else {
next();
}
});
上述代码中,我们通过to.meta.menuId获取路由信息中的menuId值,并将其添加到Vue.prototype中,这样在组件中就可以直接使用this.$menuId获取menuId值了。在后台服务中的处理函数中,可以通过request.getHeader("menuId")获取到menuId值。