Commit a566d451 authored by xzj's avatar xzj

init

parents
.idea
node_modules
\ No newline at end of file
node_modules
.idea
\ No newline at end of file
# 系统开发sdk
提供了如下功能
1. 操作cookie
2. 操作localStorage
3. http请求
4. bus
### 发布方式
```
npm publish --registry http://172.16.3.15:4873
```
### http使用
```
// main.js中配置http实例
import {http} from './sys-sdk'
Object.assign(http._extend, {
loginUrl: `${config}/user/toLogin`, // token过期后的登录地址
notice: iView.Notice // 发生错误时提示信息的组件
})
// xxx.service.js
import {http as axios} from 'sys-sdk'
axios.get(`${apiHost}/userManage/authority`)
axios.post(`${apiHost}/user/info`, {token: token}
```
##### http默认拦截器
```
// 请求前
if (localStorage.get('token')) {
config.headers['x-auth-token'] = localStorage.get('token') || ''
}
config.headers['x-auth-system'] = Cookies.get('op.system') || ''
config.headers['X-Requested-With'] = 'XMLHttpRequest'
// 响应
if (response.status < 200 || response.status > 300 || response.data.code !== '0000') {
instance._extend.notice && instance._extend.notice.error({
desc: response.data && response.data.msg || '后端服务异常'
})
return Promise.reject(response)
}
return response.data
// 错误响应
if (error.response) {
switch (error.response.status && instance._extend.loginUrl) {
case 401:
let href = window.location.href.replace(/\?token=[a-z0-9\-A-Z]+/g, '')
window.location.href = instance._extend.loginUrl + '?url=' + window.btoa(href)
break
}
}
return Promise.reject(error)
```
##### http删除默认拦截器
```
// main.js
import {http} from 'sys-sdk'
// 不使用默认请求拦截器
http.interceptors.request.eject(0)
// 不使用默认响应拦截器
axios.interceptors.response.eject(0)
```
### bus 使用
```
// main.js
import {Bus} from 'sys-sdk'
// 会增加has-role指令,控制页面中具体元素的展示
Bus.mixinVue(Vue)
// Home.vue
// 获取用户信息后, 初始化
Bus.init(res)
init = function (user) {
bus.user = user
bus.roles = user.roles.map((role) => {
return role.key
})
}
```
\ No newline at end of file
'use strict';
import http from './lib/http'
import localStorage from './lib/localStorage'
import Cookies from './lib/cookie'
import Bus from './lib/bus'
export {
http,
localStorage,
Cookies,
Bus
}
import Vue from 'vue'
const bus = new Vue()
bus.init = function (user) {
bus.user = user
bus.roles = user.roles.map((role) => {
return role.key
})
}
bus.initCurNav = function (user) {
bus.curNav = user
}
/**
* @param role
* Example:
* roleA|roleB 有角色A或者角色B
* roleA&roleB 同时有角色A和角色B
*/
bus.hasRole = function (role) {
return bus.roles && bus.roles.includes(role)
}
// 扩展root vue
bus.mixinVue = function (anotherVue) {
anotherVue.directive('has-role', {
inserted: function (el, binding, vnode) {
console.log(el)
console.log(binding.value)
console.log(vnode)
//
el.style.display = bus.hasRole(binding.value) ? 'initial' : 'none'
}
})
}
export default bus
'use strict';
import Cookies from 'js-cookie'
export default Cookies
'use strict'
import axios from 'axios'
import localStorage from './localStorage'
import Cookies from './cookies'
const config = {
timeout: 5000
}
const instance = axios.create(Object.assign({}, config))
// 挂载扩展配置
instance._extend = {}
const requestInterceptor = function (config) {
if (localStorage.get('token')) {
config.headers['x-auth-token'] = localStorage.get('token') || ''
}
config.headers['x-auth-system'] = Cookies.get('op.system') || ''
config.headers['X-Requested-With'] = 'XMLHttpRequest'
return config
}
const responseInterceptor = function (response) {
if (response.status < 200 || response.status > 300 || response.data.code !== '0000') {
instance._extend.notice && instance._extend.notice.error({
desc: response.data && response.data.msg || '后端服务异常'
})
return Promise.reject(response)
}
return response.data
}
/**
* 不使用默认拦截器
* axios.interceptors.request.eject(0)
* axios.interceptors.response.eject(0)
*/
instance.interceptors.request.use(requestInterceptor, (error) => {
return Promise.reject(error)
})
instance.interceptors.response.use(responseInterceptor, error => {
if (error.response) {
switch (error.response.status && instance._extend.loginUrl) {
case 401:
let href = window.location.href.replace(/\?token=[a-z0-9\-A-Z]+/g, '')
window.location.href = instance._extend.loginUrl + '?url=' + window.btoa(href)
break
}
}
return Promise.reject(error)
})
export default instance
'use strict';
export default {
get (key) {
let result = window.localStorage.getItem(key)
try {
return JSON.parse(result)
} catch (e) {
return result
}
},
set (key, value) {
let toString = Object.prototype.toString
if (toString.call(value) === '[object Array]' || toString.call(value) === '[object Object]') {
value = JSON.stringify(value)
}
return window.localStorage.setItem(key, value)
},
remove (key) {
return window.localStorage.removeItem(key)
},
clear () {
return window.localStorage.clear()
}
}
{
"name": "sys-sdk",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"keywords": [],
"author": "",
"license": "ISC",
"dependencies": {
"axios": "^0.16.1",
"js-cookie": "^2.1.4"
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment