添加自定义系统菜单及获取项目信息

## 业务概述: > 该示例演示了如何获取当前登录用户token、如何使用js-sdk调用平台接口,并将前端界面添加到一个自定义系统菜单中。 ## 最终效果图: ![GIFCompanyRepair.gif](https://cos.easydoc.net/16860085/files/lfly2f1v.gif) ## 实现流程 0. 创建自定义系统菜单 0.1.创建自定义一级分类系统菜单 ![20220919100153.png](https://cos.easydoc.net/16860085/files/lfly30m8.png) 0.2.创建自定义二级嵌入类型系统菜单 ![20220919101228.png](https://cos.easydoc.net/16860085/files/lfly3lrp.png) 0.3.通过平台菜单访问扩展模块 ![20220917150913.png](https://cos.easydoc.net/16860085/files/lfly4616.png) 1. 修改vue页面,使用ElementPlus进行页面UI搭建。 ![20220922141514.png](https://cos.easydoc.net/16860085/files/lfly4oid.png) 2. 获取当前登录用户token。 2.1. 当自定义项目模块通过菜单嵌入到平台时,那么就会以URL参数的方式将当前登录用户的token传入。(具体格式为:```192.168.1.XX/demo/testDemo?token=XXX```) 获取方式: ```javaScript new URLSearchParams(window.location.search).get("token"); //获取URL,参数中的用户token信息 ``` 3. 引入SDK-API并将当前登录用户token加入全局。 注意:不同语法的SDK具有不同的目录结构以及不同的调用方式该方式为JavaScript语法 3.2. 将用户token加入到全局中。(sdk-js中将token加入全局语法/方法: ```javaScript //引入设置全局token import { ApiClient } from "XXX/src/ApiClient"; //将用户token加入全局,可在vue的onMounted方法中使用 ApiClient.instance.setAccessToken(new URLSearchParams(window.location.search).get("token")); ``` 4. 调用接口并渲染至前端UI。 4.1. 引入需要调用的平台接口API对象。 ```javaScript //引入需要调用的平台接口API对象 import {ProjectBoardFilterGroupApi} from 'XX/XXX/ProjectBoardFilterGroupApi'; ``` 4.2. 初始化API对象,在setup/方法内 中定义变量值为具体的Api对象 ```new XXXApi(); ``` ```javaScript //声明Api对象调用接口 const projectBoardFilterGroupApi = new ProjectBoardFilterGroupApi(); ``` ![](../developerPlatform/img/2022-09-19-14-00-15.png) 4.3. 调用API对象中的方法并将返回参数设置到vue属性中并进行渲染。 ```javaScript //查询地区方法。 queryAreaList(){ //传入必需参数。 projectBoardFilterGroupApi.getProjectBoardFilterValueList("0","0").then(res =>{ //res为返回参数。 //判断是否调用成功。 if(res?.code === "000000"){ //将返回数据赋值到定义的属性中,在渲染至页面。 state.treeData = res?.data; }else{ //接口调用不成功,使用 ElementUi的提示框将错误信息渲染。 ElMessage.error({message:res.msg}); } }); }, ``` 提示:报修模块为扩展模块因此平台提供的SDK-API中将不会存在报修接口以axios方式代替亦可将axios报修方法进行封装后调用 ```javaScript //通过传入的项目Id,查询对应的报修数据 axios.post("http://192.168.1.14/repairDemo/repair/queryList", projectIds).then(res => { //请求前缀为,代理配置路径 //判断是否调用成功 if (res?.data?.code === "000000") { //将查询出的报修数据,赋值给属性 tableData中 state.tableData = res?.data?.data; } else { ElMessage.error({ message: res?.data?.msg }); } }); ``` 5. 完善企业报修前端模块并打包部署。 最终效果展示: ![GIFCompanyRepair.gif](https://cos.easydoc.net/16860085/files/lfly516s.gif)