1.4.7 • Published 3 years ago
@langge-data/avanger-sdk v1.4.7
朗歌前端基座sdk
sdk初始化
在主应用中会初始化sdk,挂载在window中,微应用可通过window.avanger判断是否已经初始化sdk
在微应用中调用
avangerSdk.init({
  appId: 1,            // 应用ID,默认 0
  loginHost: SSO_URL,  // SSO登录域名
  authHost: AUTH_URL,  // 权限平台域名
})可在本地开发时不报错,并调用部分sdk可用功能,包裹登录,登出等
版本
- v1.2.0
- v1.3.0 更新:修复获取页面权限获取错误问题
- v1.4.0 新增:接入权限平台,新增获取权限,用户信息功能
- v1.4.1 更新:支持自定义本地存储前缀
- v1.4.2 修复:解决登出token问题
- v1.4.6 更新:登录失败新增Toast提示错误信息
- v1.4.7 fix: 处理版本号不一致问题
功能概括
1. 引入SDK
// 安装依赖
npm install @langge-data/avanger-sdk --save
// 文件引入
import avangerSdk from '@langge-data/avanger-sdk';2. 初始化
// app.js 文件入口处初始化
avangerSdk.init({
  appId: 1,  // 应用ID,默认 0
  loginHost: SSO_URL,  // SSO登录域名
  authHost: AUTH_URL,  // 权限平台域名
  refreshTokenName: 'refresh'  // 自定义Token名称, 不配置默认为 refresh,
  authTreeType: 'array', // 权限树返回格式 array | object, 不配置默认为 array
})appId: 用以区分不同平台, 取值: 0: 不获取权限 999: 获取所有平台权限 1: 获取onemap生管平台权限 2:获取HD管理后台权限
3. 获取权限、用户信息
avangerSdk.getAuthInfo()
  .then(({ code, msg, data }) => {
    if (code === 0) {
      // 获取全部权限
      // 方式1  const auth = avangerSdk.getRole()  
      // 方式2  const auth = data.permission_entities 
      
      // 获取用户信息
      // 方式1  const userInfo = avangerSdk.getUserInfo() 
      // 方式2  const userInfo = data.user_info 
      
      // todo: 业务代码
    } else {
      // todo: 获取权限信息失败提示  msg
    }
  })
  .catch(() => {
      // todo: 获取权限信息失败提示
  })接口返回数据格式: https://www.yuque.com/docs/share/c162cf85-df2a-48e0-abda-20217f2ba61b?#zjw8z
4. 添加 refresh-token 请求头
// 在请求拦截器中
http.interceptors.request.use(
  (config) => {
    const token = avangerSdk.getToken()
    if (token) {
      config.headers['refresh-token'] = token 
     }
    ...
    return config
  }
)5. 修改无权访问和登录过期逻辑
接口返回code码: 401,403: token有效,但相应接口无权限访问 406: token失效,登录过期 接口无权限或登录过期时,http 响应状态码 status 会为401/403/406, 同时返回 response.data.code 为相应code码
权限平台文档:https://www.yuque.com/docs/share/c162cf85-df2a-48e0-abda-20217f2ba61b?#zjw8z
http.interceptors.response.use(
  (response) => {
    const { code } = response.data
    if (code === 0) {
        return response
    } else if (code === 401 || code === 403 {
        // todo: 无权访问提示
        
    } else if (code === 406) {
       // todo: 登录过期提示 + 登出跳转
       console.log('登录过期, 请退出重新登录')
       avangerSdk.logout()
    } else {
        // todo: 其他业务提示
    }
    return Promise.reject(res)
  },
  (error) => {
    const { status } = error.response
    if (status === 401 || status === 403 {
        // todo: 无权访问提示
        
    } else if (status === 406) {
       // todo: 登录过期提示 + 登出跳转
       console.log('登录过期, 请退出重新登录')
       avangerSdk.logout()
    } else {
       // todo: 其他业务提示
    }
    return Promise.reject(err)
  }
)相关API
获取权限
// 获取全部权限
avangerSdk.getRole() 
// 获取路由权限
avangerSdk.getRole('route') 
// 获取页面按钮权限
avangerSdk.getRole('page') 
// 设置页面内按钮权限, code: 页面code
avangerSdk.setPagePermission(code)
// 获取用户信息
avangerSdk.getUserInfo()获取 Token
// 获取 refresh-token, 参数默认为 config.refreshTokenName 即 ‘refresh’
avangerSdk.getToken()  或  avangerSdk.getToken('refresh') 
// 获取 sso-token (正常情况下,不需要再获取ssoToken)
avangerSdk.getToken('sso') 登录登出跳转
// 登录
avangerSdk.login() 
// 登出
avangerSdk.logout()