mirror of
https://gitee.com/log4j/pig-ui.git
synced 2024-12-22 12:58:55 +08:00
merge origin master,菜单界面可缓存之前点击过的树节点状态(展开与否),增加moment时间插件,实现动态路由功能。
This commit is contained in:
parent
9d4d0272dc
commit
fbbfb8f8b0
@ -30,6 +30,7 @@
|
||||
"vue": "2.5.2",
|
||||
"vue-axios": "^2.0.2",
|
||||
"vue-image-crop-upload": "^2.2.3",
|
||||
"vue-moment": "^3.2.0",
|
||||
"vue-router": "^3.0.0",
|
||||
"vue-server-renderer": "2.5.2",
|
||||
"vue-template-compiler": "2.5.2",
|
||||
|
@ -3,16 +3,16 @@ import request from '@/router/axios'
|
||||
import { userInfo, tableData } from '@/mock/user'
|
||||
import { menu, menuAll } from '@/mock/menu'
|
||||
export const loginByUsername = (username, password, code, randomStr) => {
|
||||
var grant_type = 'password'
|
||||
var scope = 'server'
|
||||
return request({
|
||||
url: '/auth/oauth/token',
|
||||
headers: {
|
||||
'Authorization': 'Basic cGlnOnBpZw=='
|
||||
},
|
||||
method: 'post',
|
||||
params: { username, password, randomStr, code, grant_type, scope }
|
||||
})
|
||||
var grant_type = 'password'
|
||||
var scope = 'server'
|
||||
return request({
|
||||
url: '/auth/oauth/token',
|
||||
headers: {
|
||||
'Authorization': 'Basic cGlnOnBpZw=='
|
||||
},
|
||||
method: 'post',
|
||||
params: { username, password, randomStr, code, grant_type, scope }
|
||||
})
|
||||
}
|
||||
|
||||
export function mobileLogin(mobile, code) {
|
||||
@ -29,19 +29,16 @@ export function mobileLogin(mobile, code) {
|
||||
}
|
||||
|
||||
export const getUserInfo = () => {
|
||||
return request({
|
||||
url: '/admin/user/info',
|
||||
method: 'get'
|
||||
})
|
||||
return request({
|
||||
url: '/admin/user/info',
|
||||
method: 'get'
|
||||
})
|
||||
}
|
||||
|
||||
export const logout = (accesstoken, refreshToken) => {
|
||||
return request({
|
||||
url: '/auth/authentication/removeToken',
|
||||
method: 'post',
|
||||
params: { accesstoken, refreshToken }
|
||||
})
|
||||
return request({
|
||||
url: '/auth/authentication/removeToken',
|
||||
method: 'post',
|
||||
params: { accesstoken, refreshToken }
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
@ -1,58 +1,58 @@
|
||||
import request from '@/router/axios'
|
||||
export function GetMenu() {
|
||||
return request({
|
||||
url: '/admin/menu/userMenu',
|
||||
method: 'get'
|
||||
})
|
||||
return request({
|
||||
url: '/admin/menu/userMenu',
|
||||
method: 'get'
|
||||
})
|
||||
}
|
||||
export function fetchTree(query) {
|
||||
return request({
|
||||
url: '/admin/menu/allTree',
|
||||
method: 'get',
|
||||
params: query
|
||||
})
|
||||
return request({
|
||||
url: '/admin/menu/allTree',
|
||||
method: 'get',
|
||||
params: query
|
||||
})
|
||||
}
|
||||
|
||||
export function fetchAll() {
|
||||
return request({
|
||||
url: '/admin/menu/navMenu',
|
||||
method: 'get'
|
||||
})
|
||||
return request({
|
||||
url: '/admin/menu/navMenu',
|
||||
method: 'get'
|
||||
})
|
||||
}
|
||||
|
||||
export function fetchUserTree() {
|
||||
return request({
|
||||
url: '/admin/menu/userTree',
|
||||
method: 'get'
|
||||
})
|
||||
return request({
|
||||
url: '/admin/menu/userTree',
|
||||
method: 'get'
|
||||
})
|
||||
}
|
||||
|
||||
export function addObj(obj) {
|
||||
return request({
|
||||
url: '/admin/menu/',
|
||||
method: 'post',
|
||||
data: obj
|
||||
})
|
||||
return request({
|
||||
url: '/admin/menu/',
|
||||
method: 'post',
|
||||
data: obj
|
||||
})
|
||||
}
|
||||
|
||||
export function getObj(id) {
|
||||
return request({
|
||||
url: '/admin/menu/' + id,
|
||||
method: 'get'
|
||||
})
|
||||
return request({
|
||||
url: '/admin/menu/' + id,
|
||||
method: 'get'
|
||||
})
|
||||
}
|
||||
|
||||
export function delObj(id) {
|
||||
return request({
|
||||
url: '/admin/menu/' + id,
|
||||
method: 'delete'
|
||||
})
|
||||
return request({
|
||||
url: '/admin/menu/' + id,
|
||||
method: 'delete'
|
||||
})
|
||||
}
|
||||
|
||||
export function putObj(obj) {
|
||||
return request({
|
||||
url: '/admin/menu/',
|
||||
method: 'put',
|
||||
data: obj
|
||||
})
|
||||
return request({
|
||||
url: '/admin/menu/',
|
||||
method: 'put',
|
||||
data: obj
|
||||
})
|
||||
}
|
||||
|
@ -72,6 +72,9 @@ export default {
|
||||
//iframe窗口初始化
|
||||
iframeInit() {
|
||||
const iframe = this.$refs.iframe;
|
||||
if (!iframe) {
|
||||
return
|
||||
}
|
||||
const clientHeight = document.documentElement.clientHeight - 120;
|
||||
iframe.style.height = `${clientHeight}px`;
|
||||
if (iframe.attachEvent) {
|
||||
|
45
src/main.js
45
src/main.js
@ -1,39 +1,46 @@
|
||||
import Vue from 'vue';
|
||||
import axios from './router/axios';
|
||||
import VueAxios from 'vue-axios';
|
||||
import App from './App';
|
||||
import Vue from 'vue'
|
||||
import VueAxios from 'vue-axios'
|
||||
import ElementUI from 'element-ui'
|
||||
import VueMoment from 'vue-moment'
|
||||
import axios from './router/axios'
|
||||
import './permission' // 权限
|
||||
import './errorLog' // 错误日志
|
||||
import router from './router/router';
|
||||
import store from './store';
|
||||
import ELEMENT from 'element-ui';
|
||||
import AVUE from 'avue-cli/packages/index.js';
|
||||
import {
|
||||
loadStyle
|
||||
} from './util/util'
|
||||
import * as urls from '@/config/env';
|
||||
import router from './router/router'
|
||||
import store from './store'
|
||||
import AVUE from 'avue-cli/packages/index.js'
|
||||
import { loadStyle } from './util/util'
|
||||
import * as urls from '@/config/env'
|
||||
import {
|
||||
iconfontUrl,
|
||||
iconfontVersion
|
||||
} from '@/config/env';
|
||||
} from '@/config/env'
|
||||
import * as filters from './filters' // 全局filter
|
||||
import './styles/common.scss';
|
||||
import './styles/common.scss'
|
||||
|
||||
Vue.config.productionTip = false
|
||||
Vue.use(ElementUI)
|
||||
Vue.use(VueMoment)
|
||||
Vue.use(VueAxios, axios)
|
||||
|
||||
Object.keys(urls).forEach(key => {
|
||||
Vue.prototype[key] = urls[key];
|
||||
Vue.prototype[key] = urls[key]
|
||||
})
|
||||
|
||||
Object.keys(filters).forEach(key => {
|
||||
Vue.filter(key, filters[key])
|
||||
})
|
||||
|
||||
iconfontVersion.forEach(ele => {
|
||||
loadStyle(iconfontUrl.replace('$key', ele));
|
||||
loadStyle(iconfontUrl.replace('$key', ele))
|
||||
})
|
||||
|
||||
|
||||
Vue.config.productionTip = false;
|
||||
|
||||
// 默认加载根路径下的所有vue
|
||||
const name = 'App.vue'
|
||||
const App = (resolve) => {
|
||||
require.ensure([], (require) => {
|
||||
resolve(require.context('.', false, /\.vue$/)(`./${name}`))
|
||||
}, 'app')
|
||||
}
|
||||
|
||||
export function createApp() {
|
||||
const app = new Vue({
|
||||
|
@ -13,6 +13,7 @@ import { setUrlPath } from "@/util/util";
|
||||
import { mapGetters } from "vuex";
|
||||
import SidebarItem from "./sidebarItem";
|
||||
import logo from "./logo";
|
||||
import { initMenu } from '@/util/util'
|
||||
export default {
|
||||
name: "sidebar",
|
||||
components: { SidebarItem, logo },
|
||||
@ -20,7 +21,12 @@ export default {
|
||||
return {};
|
||||
},
|
||||
created() {
|
||||
this.$store.dispatch("GetMenu").then(data => {});
|
||||
if (! this.$store.state.user.isInitMenu) {
|
||||
this.$store.dispatch("GetMenu").then((data) => {
|
||||
initMenu(this.$router, data)
|
||||
this.$store.commit('IS_INIT_MENU', true)
|
||||
});
|
||||
}
|
||||
},
|
||||
computed: {
|
||||
...mapGetters(["menu", "tag", "isCollapse"]),
|
||||
|
@ -1,108 +1,121 @@
|
||||
import router from './router/router'
|
||||
import store from './store'
|
||||
import NProgress from 'nprogress' // progress bar
|
||||
import 'nprogress/nprogress.css'// progress bar style
|
||||
import 'nprogress/nprogress.css' // progress bar style
|
||||
import { getToken } from '@/util/auth'
|
||||
import { setTitle } from '@/util/util';
|
||||
import { validatenull } from '@/util/validate';
|
||||
import { asyncRouterMap } from '@/router/router'
|
||||
NProgress.configure({ showSpinner: false })// NProgress Configuration
|
||||
import { setTitle } from '@/util/util'
|
||||
import { validatenull } from '@/util/validate'
|
||||
|
||||
// NProgress Configuration
|
||||
NProgress.configure({
|
||||
showSpinner: false
|
||||
})
|
||||
|
||||
function hasPermission(roles, permissionRoles) {
|
||||
if (!permissionRoles) return true
|
||||
return roles.some(role => permissionRoles.indexOf(role) >= 0)
|
||||
if (!permissionRoles) return true
|
||||
return roles.some(role => permissionRoles.indexOf(role) >= 0)
|
||||
}
|
||||
const whiteList = ['/login', '/404', '/401', '/lock']
|
||||
const lockPage = '/lock'
|
||||
router.addRoutes(asyncRouterMap); // 动态添加可访问路由表
|
||||
|
||||
router.beforeEach((to, from, next) => {
|
||||
NProgress.start() // start progress bar
|
||||
const value = to.query.src ? to.query.src : to.path;
|
||||
const label = to.query.name ? to.query.name : to.name;
|
||||
if (whiteList.indexOf(value) == -1) {
|
||||
store.commit('ADD_TAG', {
|
||||
label: label,
|
||||
value: value,
|
||||
query: to.query
|
||||
});
|
||||
}
|
||||
if (store.getters.access_token) { // determine if there has token
|
||||
/* has token*/
|
||||
if (store.getters.isLock && to.path != lockPage) {
|
||||
next({ path: lockPage })
|
||||
NProgress.done();
|
||||
} else if (to.path === '/login') {
|
||||
next({ path: '/' })
|
||||
NProgress.done();
|
||||
} else {
|
||||
if (store.getters.roles.length === 0) {
|
||||
store.dispatch('GetUserInfo').then(res => {
|
||||
const roles = res.roles
|
||||
next({ ...to, replace: true })
|
||||
}).catch(() => {
|
||||
store.dispatch('FedLogOut').then(() => {
|
||||
next({ path: '/login' })
|
||||
NProgress.done();
|
||||
})
|
||||
})
|
||||
} else {
|
||||
next()
|
||||
}
|
||||
}
|
||||
// start progress bar
|
||||
NProgress.start()
|
||||
const value = to.query.src ? to.query.src : to.path
|
||||
const label = to.query.name ? to.query.name : to.name
|
||||
if (whiteList.indexOf(value) === -1) {
|
||||
store.commit('ADD_TAG', {
|
||||
label: label,
|
||||
value: value,
|
||||
query: to.query
|
||||
})
|
||||
}
|
||||
if (store.getters.access_token) { // determine if there has token
|
||||
/* has token*/
|
||||
if (store.getters.isLock && to.path !== lockPage) {
|
||||
next({
|
||||
path: lockPage
|
||||
})
|
||||
NProgress.done()
|
||||
} else if (to.path === '/login') {
|
||||
next({
|
||||
path: '/'
|
||||
})
|
||||
NProgress.done()
|
||||
} else {
|
||||
/* has no token*/
|
||||
if (whiteList.indexOf(to.path) !== -1) {
|
||||
next()
|
||||
} else {
|
||||
next('/login')
|
||||
NProgress.done();
|
||||
}
|
||||
if (store.getters.roles.length === 0) {
|
||||
store.dispatch('GetUserInfo').then(res => {
|
||||
const roles = res.roles
|
||||
next({ ...to,
|
||||
replace: true
|
||||
})
|
||||
}).catch(() => {
|
||||
store.dispatch('FedLogOut').then(() => {
|
||||
next({
|
||||
path: '/login'
|
||||
})
|
||||
NProgress.done()
|
||||
})
|
||||
})
|
||||
} else {
|
||||
next()
|
||||
}
|
||||
}
|
||||
} else {
|
||||
/* has no token*/
|
||||
if (whiteList.indexOf(to.path) !== -1) {
|
||||
next()
|
||||
} else {
|
||||
next('/login')
|
||||
NProgress.done()
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
//寻找子菜单的父类
|
||||
// 寻找子菜单的父类
|
||||
function findMenuParent(tag) {
|
||||
let tagCurrent = [];
|
||||
const menu = store.getters.menu;
|
||||
tagCurrent.push(tag);
|
||||
return tagCurrent;
|
||||
// //如果是一级菜单直接返回
|
||||
// for (let i = 0, j = menu.length; i < j; i++) {
|
||||
// if (menu[i].href == tag.value) {
|
||||
// tagCurrent.push(tag);
|
||||
// return tagCurrent;
|
||||
// }
|
||||
// }
|
||||
|
||||
// let currentPathObj = menu.filter(item => {
|
||||
// if (item.children.length == 1) {
|
||||
// return item.children[0].href === tag.value;
|
||||
// } else {
|
||||
// let i = 0;
|
||||
// let childArr = item.children;
|
||||
// let len = childArr.length;
|
||||
// while (i < len) {
|
||||
// if (childArr[i].href === tag.value) {
|
||||
// return true;
|
||||
// break;
|
||||
// }
|
||||
// i++;
|
||||
// }
|
||||
// return false;
|
||||
// }
|
||||
// })[0];
|
||||
// tagCurrent.push({
|
||||
// label: currentPathObj.label,
|
||||
// value: currentPathObj.href
|
||||
// });
|
||||
// tagCurrent.push(tag);
|
||||
// return tagCurrent;
|
||||
let tagCurrent = []
|
||||
const menu = store.getters.menu
|
||||
tagCurrent.push(tag)
|
||||
return tagCurrent
|
||||
// //如果是一级菜单直接返回
|
||||
// for (let i = 0, j = menu.length; i < j; i++) {
|
||||
// if (menu[i].href == tag.value) {
|
||||
// tagCurrent.push(tag);
|
||||
// return tagCurrent;
|
||||
// }
|
||||
// }
|
||||
|
||||
// let currentPathObj = menu.filter(item => {
|
||||
// if (item.children.length == 1) {
|
||||
// return item.children[0].href === tag.value;
|
||||
// } else {
|
||||
// let i = 0;
|
||||
// let childArr = item.children;
|
||||
// let len = childArr.length;
|
||||
// while (i < len) {
|
||||
// if (childArr[i].href === tag.value) {
|
||||
// return true;
|
||||
// break;
|
||||
// }
|
||||
// i++;
|
||||
// }
|
||||
// return false;
|
||||
// }
|
||||
// })[0];
|
||||
// tagCurrent.push({
|
||||
// label: currentPathObj.label,
|
||||
// value: currentPathObj.href
|
||||
// });
|
||||
// tagCurrent.push(tag);
|
||||
// return tagCurrent;
|
||||
}
|
||||
|
||||
router.afterEach((to, from) => {
|
||||
NProgress.done();
|
||||
setTimeout(() => {
|
||||
const tag = store.getters.tag;
|
||||
setTitle(tag.label);
|
||||
store.commit('SET_TAG_CURRENT', findMenuParent(tag));
|
||||
}, 0);
|
||||
NProgress.done()
|
||||
setTimeout(() => {
|
||||
const tag = store.getters.tag
|
||||
setTitle(tag.label)
|
||||
store.commit('SET_TAG_CURRENT', findMenuParent(tag))
|
||||
}, 0)
|
||||
})
|
||||
|
@ -1,4 +1,4 @@
|
||||
module.exports = (file, path) => {
|
||||
if (!path) path = 'page'
|
||||
return require(`../${path}/${file}.vue`)
|
||||
}
|
||||
if (!path) path = 'page'
|
||||
return require(`../${path}/${file}.vue`)
|
||||
}
|
||||
|
@ -6,44 +6,41 @@
|
||||
|
||||
import axios from 'axios'
|
||||
import store from '../store'
|
||||
import router from '../router/router';
|
||||
import { getToken, setToken, removeToken } from '@/util/auth';
|
||||
import router from '../router/router'
|
||||
import { getToken, setToken, removeToken } from '@/util/auth'
|
||||
import { Message } from 'element-ui'
|
||||
import errorCode from '@/const/errorCode'
|
||||
import NProgress from 'nprogress' // progress bar
|
||||
import 'nprogress/nprogress.css'// progress bar style
|
||||
//超时时间
|
||||
axios.defaults.timeout = 30000;
|
||||
//跨域请求,允许保存cookie
|
||||
axios.defaults.withCredentials = true;
|
||||
// 超时时间
|
||||
axios.defaults.timeout = 30000
|
||||
// 跨域请求,允许保存cookie
|
||||
axios.defaults.withCredentials = true
|
||||
NProgress.configure({ showSpinner: false })// NProgress Configuration
|
||||
|
||||
let msg;
|
||||
|
||||
//HTTPrequest拦截
|
||||
let msg
|
||||
// HTTPrequest拦截
|
||||
axios.interceptors.request.use(config => {
|
||||
NProgress.start() // start progress bar
|
||||
if (store.getters.access_token) {
|
||||
config.headers['Authorization'] = 'Bearer ' + getToken() // 让每个请求携带token--['X-Token']为自定义key 请根据实际情况自行修改
|
||||
}
|
||||
return config
|
||||
NProgress.start() // start progress bar
|
||||
if (store.getters.access_token) {
|
||||
config.headers['Authorization'] = 'Bearer ' + getToken() // 让每个请求携带token--['X-Token']为自定义key 请根据实际情况自行修改
|
||||
}
|
||||
return config
|
||||
}, error => {
|
||||
return Promise.reject(error)
|
||||
return Promise.reject(error)
|
||||
})
|
||||
//HTTPresponse拦截
|
||||
// HTTPresponse拦截
|
||||
axios.interceptors.response.use(data => {
|
||||
NProgress.done();
|
||||
return data
|
||||
NProgress.done()
|
||||
return data
|
||||
}, error => {
|
||||
NProgress.done();
|
||||
let errMsg = error.toString();
|
||||
let code = errMsg.substr(errMsg.indexOf('code') + 5);
|
||||
Message({
|
||||
message: errorCode[code] || errorCode['default'],
|
||||
type: 'error'
|
||||
});
|
||||
return Promise.reject(new Error(error));
|
||||
|
||||
NProgress.done()
|
||||
let errMsg = error.toString()
|
||||
let code = errMsg.substr(errMsg.indexOf('code') + 5)
|
||||
Message({
|
||||
message: errorCode[code] || errorCode['default'],
|
||||
type: 'error'
|
||||
})
|
||||
return Promise.reject(new Error(error))
|
||||
})
|
||||
|
||||
export default axios
|
||||
|
@ -1,49 +1,99 @@
|
||||
import Vue from 'vue';
|
||||
import VueRouter from 'vue-router';
|
||||
import { routerMode } from '@/config/env';
|
||||
import Vue from 'vue'
|
||||
import VueRouter from 'vue-router'
|
||||
import { routerMode } from '@/config/env'
|
||||
import store from '@/store'
|
||||
|
||||
import { formatRoutes } from '@/util/util'
|
||||
import Layout from '@/page/index/'
|
||||
import viewRouter from './_router'
|
||||
const _import = require('./_import');
|
||||
Vue.use(VueRouter);
|
||||
export default new VueRouter({
|
||||
// mode: 'history',
|
||||
strict: process.env.NODE_ENV !== 'production',
|
||||
scrollBehavior(to, from, savedPosition) {
|
||||
if (savedPosition) {
|
||||
return savedPosition
|
||||
} else {
|
||||
if (from.meta.keepAlive) {
|
||||
from.meta.savedPosition = document.body.scrollTop;
|
||||
}
|
||||
return {
|
||||
x: 0,
|
||||
y: to.meta.savedPosition || 0
|
||||
}
|
||||
}
|
||||
},
|
||||
});
|
||||
export const asyncRouterMap = [
|
||||
{ path: '/login', name: '登录页', component: _import('login/index') },
|
||||
{ path: '/lock', name: '锁屏页', component: _import('lock/index') },
|
||||
{ path: '*', redirect: '/404', hidden: true },
|
||||
{ path: '/404', component: _import('error-page/404', 'components'), name: '404' },
|
||||
{ path: '/403', component: _import('error-page/403', 'components'), name: '403' },
|
||||
{ path: '/500', component: _import('error-page/500', 'components'), name: '500' },
|
||||
{
|
||||
path: '/myiframe',
|
||||
component: Layout,
|
||||
redirect: '/myiframe',
|
||||
meta: { keepAlive: true },
|
||||
children: [
|
||||
{
|
||||
path: ":routerPath",
|
||||
name: 'iframe',
|
||||
component: _import('iframe/main', 'components'),
|
||||
props: true
|
||||
}
|
||||
]
|
||||
const _import = require('./_import')
|
||||
|
||||
}
|
||||
].concat(viewRouter)
|
||||
Vue.use(VueRouter)
|
||||
|
||||
export default new VueRouter({
|
||||
// mode: 'history',
|
||||
strict: process.env.NODE_ENV !== 'production',
|
||||
scrollBehavior(to, from, savedPosition) {
|
||||
if (savedPosition) {
|
||||
return savedPosition
|
||||
} else {
|
||||
if (from.meta.keepAlive) {
|
||||
from.meta.savedPosition = document.body.scrollTop
|
||||
}
|
||||
return {
|
||||
x: 0,
|
||||
y: to.meta.savedPosition || 0
|
||||
}
|
||||
}
|
||||
},
|
||||
routes: [
|
||||
{
|
||||
path: '/',
|
||||
name: '主页',
|
||||
redirect: '/wel'
|
||||
}, {
|
||||
path: '/wel',
|
||||
component: Layout,
|
||||
redirect: '/wel/index',
|
||||
children: [{
|
||||
path: 'index',
|
||||
name: '首页',
|
||||
component: _import('wel')
|
||||
}]
|
||||
}, {
|
||||
path: '*',
|
||||
redirect: '/404',
|
||||
hidden: true
|
||||
}, {
|
||||
path: '/login',
|
||||
name: '登录页',
|
||||
component: _import('login/index')
|
||||
}, {
|
||||
path: '/lock',
|
||||
name: '锁屏页',
|
||||
component: _import('lock/index')
|
||||
}, {
|
||||
path: '/crud',
|
||||
component: Layout,
|
||||
redirect: '/crud/index',
|
||||
children: [{
|
||||
path: 'index',
|
||||
name: 'crud实例',
|
||||
component: _import('crud/index', 'views')
|
||||
}]
|
||||
}, {
|
||||
path: '/info',
|
||||
component: Layout,
|
||||
redirect: '/info/index',
|
||||
children: [{
|
||||
path: 'index',
|
||||
name: '修改信息',
|
||||
component: _import('admin/user/info', 'views')
|
||||
}]
|
||||
}, {
|
||||
path: '/404',
|
||||
component: _import('error-page/404', 'components'),
|
||||
name: '404'
|
||||
}, {
|
||||
path: '/403',
|
||||
component: _import('error-page/403', 'components'),
|
||||
name: '403'
|
||||
}, {
|
||||
path: '/500',
|
||||
component: _import('error-page/500', 'components'),
|
||||
name: '500'
|
||||
}, {
|
||||
path: '/myiframe',
|
||||
component: Layout,
|
||||
redirect: '/myiframe',
|
||||
meta: {
|
||||
keepAlive: true
|
||||
},
|
||||
children: [{
|
||||
path: ':routerPath',
|
||||
name: 'iframe',
|
||||
component: _import('iframe/main', 'components'),
|
||||
props: true
|
||||
}]
|
||||
}
|
||||
// 防止F5刷新页面,app重新加载,动态新增路由消失
|
||||
].concat(...formatRoutes(store.state.user.menu))
|
||||
})
|
||||
|
@ -25,10 +25,10 @@ const common = {
|
||||
}) || '#409EFF',
|
||||
lockPasswd: getStore({
|
||||
name: 'lockPasswd'
|
||||
}) || '',
|
||||
}) || ''
|
||||
},
|
||||
actions: {
|
||||
//获取字典公用类
|
||||
// 获取字典公用类
|
||||
GetDic({
|
||||
commit,
|
||||
state,
|
||||
@ -37,9 +37,9 @@ const common = {
|
||||
return new Promise((resolve, reject) => {
|
||||
if (dic instanceof Array) {
|
||||
Promise.all(dic.map(ele => getDic(ele))).then(data => {
|
||||
let result = {};
|
||||
const result = {}
|
||||
dic.forEach((ele, index) => {
|
||||
result[ele] = data[index].data;
|
||||
result[ele] = data[index].data
|
||||
})
|
||||
resolve(result)
|
||||
})
|
||||
@ -49,13 +49,13 @@ const common = {
|
||||
},
|
||||
mutations: {
|
||||
SET_COLLAPSE: (state, action) => {
|
||||
state.isCollapse = !state.isCollapse;
|
||||
state.isCollapse = !state.isCollapse
|
||||
},
|
||||
SET_FULLSCREN: (state, action) => {
|
||||
state.isFullScren = !state.isFullScren;
|
||||
state.isFullScren = !state.isFullScren
|
||||
},
|
||||
SET_LOCK: (state, action) => {
|
||||
state.isLock = true;
|
||||
state.isLock = true
|
||||
setStore({
|
||||
name: 'isLock',
|
||||
content: state.isLock,
|
||||
@ -63,14 +63,14 @@ const common = {
|
||||
})
|
||||
},
|
||||
SET_THEME: (state, color) => {
|
||||
state.theme = color;
|
||||
state.theme = color
|
||||
setStore({
|
||||
name: 'theme',
|
||||
content: state.theme,
|
||||
content: state.theme
|
||||
})
|
||||
},
|
||||
SET_LOCK_PASSWD: (state, lockPasswd) => {
|
||||
state.lockPasswd = lockPasswd;
|
||||
state.lockPasswd = lockPasswd
|
||||
setStore({
|
||||
name: 'lockPasswd',
|
||||
content: state.lockPasswd,
|
||||
@ -78,15 +78,15 @@ const common = {
|
||||
})
|
||||
},
|
||||
CLEAR_LOCK: (state, action) => {
|
||||
state.isLock = false;
|
||||
state.lockPasswd = '';
|
||||
state.isLock = false
|
||||
state.lockPasswd = ''
|
||||
removeStore({
|
||||
name: 'lockPasswd'
|
||||
});
|
||||
})
|
||||
removeStore({
|
||||
name: 'isLock'
|
||||
});
|
||||
},
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
export default common
|
||||
|
@ -4,133 +4,208 @@ import { validatenull } from '@/util/validate'
|
||||
import { loginByUsername, mobileLogin, getUserInfo, logout } from '@/api/login'
|
||||
import { GetMenu } from '@/api/menu'
|
||||
const user = {
|
||||
state: {
|
||||
userInfo: getStore({ name: 'userInfo' }) || {},
|
||||
permissions: getStore({ name: 'permissions' }) || {},
|
||||
roles: getStore({ name: 'roles' }) || [],
|
||||
menu: [],
|
||||
access_token: getStore({ name: 'access_token' }) || '',
|
||||
refresh_token: getStore({ name: 'refresh_token' }) || '',
|
||||
state: {
|
||||
userInfo: getStore({ name: 'userInfo' }) || {},
|
||||
permissions: getStore({ name: 'permissions' }) || {},
|
||||
roles: getStore({ name: 'roles' }) || [],
|
||||
menu: getStore({ name: 'menu' }) || [],
|
||||
isInitMenu: getStore({ name: 'isInitMenu' }) || false,
|
||||
access_token: getStore({ name: 'access_token' }) || '',
|
||||
refresh_token: getStore({ name: 'refresh_token' }) || ''
|
||||
},
|
||||
actions: {
|
||||
// 根据用户名登录
|
||||
LoginByUsername({
|
||||
commit,
|
||||
state,
|
||||
dispatch
|
||||
}, userInfo) {
|
||||
return new Promise((resolve, reject) => {
|
||||
loginByUsername(userInfo.username, userInfo.password, userInfo.code, userInfo.randomStr).then(response => {
|
||||
const data = response.data
|
||||
setToken(data.access_token)
|
||||
commit('SET_ACCESS_TOKEN', data.access_token)
|
||||
commit('SET_REFRESH_TOKEN', data.refresh_token)
|
||||
commit('CLEAR_LOCK')
|
||||
resolve()
|
||||
}).catch(error => {
|
||||
reject(error)
|
||||
})
|
||||
})
|
||||
},
|
||||
actions: {
|
||||
//根据用户名登录
|
||||
LoginByUsername({ commit, state, dispatch }, userInfo) {
|
||||
return new Promise((resolve, reject) => {
|
||||
loginByUsername(userInfo.username, userInfo.password, userInfo.code, userInfo.randomStr).then(response => {
|
||||
const data = response.data
|
||||
setToken(data.access_token)
|
||||
commit('SET_ACCESS_TOKEN', data.access_token)
|
||||
commit('SET_REFRESH_TOKEN', data.refresh_token)
|
||||
commit('CLEAR_LOCK');
|
||||
resolve();
|
||||
}, error => {
|
||||
reject();
|
||||
})
|
||||
})
|
||||
},
|
||||
//根据手机号登录
|
||||
LoginByPhone({ commit, state, dispatch }, userInfo) {
|
||||
const mobile = userInfo.mobile.trim()
|
||||
return new Promise((resolve, reject) => {
|
||||
mobileLogin(mobile, userInfo.code).then(response => {
|
||||
const data = response.data
|
||||
setToken(data.access_token)
|
||||
commit('SET_ACCESS_TOKEN', data.access_token)
|
||||
commit('SET_REFRESH_TOKEN', data.refresh_token)
|
||||
commit('CLEAR_LOCK');
|
||||
resolve()
|
||||
}).catch(error => {
|
||||
reject(error)
|
||||
})
|
||||
})
|
||||
},
|
||||
GetTableData({ commit, state, dispatch }, page) {
|
||||
return new Promise((resolve, reject) => {
|
||||
getTableData(page).then(res => {
|
||||
const data = res.data;
|
||||
resolve(data);
|
||||
})
|
||||
})
|
||||
},
|
||||
GetUserInfo({ commit, state, dispatch }) {
|
||||
return new Promise((resolve, reject) => {
|
||||
getUserInfo(state.token).then(response => {
|
||||
const data = response.data.data
|
||||
commit('SET_ROLES', data.roles)
|
||||
commit('SET_USER_INFO', data.sysUser)
|
||||
commit('SET_PERMISSIONS', data.permissions)
|
||||
resolve(response)
|
||||
}).catch(error => {
|
||||
reject(error)
|
||||
})
|
||||
})
|
||||
},
|
||||
// 登出
|
||||
LogOut({ commit, state }) {
|
||||
return new Promise((resolve, reject) => {
|
||||
logout(state.access_token, state.refresh_token).then(() => {
|
||||
commit('SET_ACCESS_TOKEN', '')
|
||||
commit('SET_REFRESH_TOKEN', '')
|
||||
commit('SET_ROLES', [])
|
||||
commit('DEL_ALL_TAG');
|
||||
removeToken()
|
||||
resolve()
|
||||
}).catch(error => {
|
||||
reject(error)
|
||||
})
|
||||
})
|
||||
},
|
||||
//注销session
|
||||
FedLogOut({ commit }) {
|
||||
return new Promise(resolve => {
|
||||
commit('SET_ACCESS_TOKEN', '')
|
||||
commit('SET_REFRESH_TOKEN', '')
|
||||
commit('SET_ROLES', [])
|
||||
commit('DEL_ALL_TAG');
|
||||
removeToken()
|
||||
resolve()
|
||||
})
|
||||
},
|
||||
//获取系统菜单
|
||||
GetMenu({ commit }) {
|
||||
return new Promise(resolve => {
|
||||
GetMenu().then((res) => {
|
||||
const data = res.data;
|
||||
commit('SET_MENU', data);
|
||||
resolve(data);
|
||||
})
|
||||
})
|
||||
},
|
||||
|
||||
// 根据手机号登录
|
||||
LoginByPhone({
|
||||
commit,
|
||||
state,
|
||||
dispatch
|
||||
}, userInfo) {
|
||||
const mobile = userInfo.mobile.trim()
|
||||
return new Promise((resolve, reject) => {
|
||||
mobileLogin(mobile, userInfo.code).then(response => {
|
||||
const data = response.data
|
||||
setToken(data.access_token)
|
||||
commit('SET_ACCESS_TOKEN', data.access_token)
|
||||
commit('SET_REFRESH_TOKEN', data.refresh_token)
|
||||
commit('CLEAR_LOCK')
|
||||
resolve()
|
||||
}).catch(error => {
|
||||
reject(error)
|
||||
})
|
||||
})
|
||||
},
|
||||
mutations: {
|
||||
SET_ACCESS_TOKEN: (state, access_token) => {
|
||||
state.access_token = access_token;
|
||||
setStore({ name: 'access_token', content: state.access_token, type: 'session' })
|
||||
},
|
||||
SET_MENU: (state, menu) => {
|
||||
state.menu = menu;
|
||||
},
|
||||
SET_USER_INFO: (state, userInfo) => {
|
||||
state.userInfo = userInfo
|
||||
setStore({ name: 'userInfo', content: state.userInfo, type: 'session' })
|
||||
},
|
||||
SET_REFRESH_TOKEN: (state, rfToken) => {
|
||||
state.refresh_token = rfToken
|
||||
setStore({ name: 'refresh_token', content: state.refresh_token, type: 'session' })
|
||||
},
|
||||
SET_ROLES: (state, roles) => {
|
||||
state.roles = roles
|
||||
setStore({ name: 'roles', content: state.roles, type: 'session' })
|
||||
},
|
||||
SET_PERMISSIONS: (state, permissions) => {
|
||||
let list = {}
|
||||
for (let i = 0; i < permissions.length; i++) {
|
||||
list[permissions[i]] = true
|
||||
}
|
||||
state.permissions = list
|
||||
setStore({ name: 'permissions', content: state.permissions, type: 'session' })
|
||||
}
|
||||
GetTableData({
|
||||
commit,
|
||||
state,
|
||||
dispatch
|
||||
}, page) {
|
||||
return new Promise((resolve, reject) => {
|
||||
// 未定义
|
||||
// getTableData(page).then(res => {
|
||||
// const data = res.data
|
||||
// resolve(data)
|
||||
// })
|
||||
})
|
||||
},
|
||||
GetUserInfo({
|
||||
commit,
|
||||
state,
|
||||
dispatch
|
||||
}) {
|
||||
return new Promise((resolve, reject) => {
|
||||
getUserInfo(state.token).then(response => {
|
||||
const data = response.data.data
|
||||
commit('SET_ROLES', data.roles)
|
||||
commit('SET_USER_INFO', data.sysUser)
|
||||
commit('SET_PERMISSIONS', data.permissions)
|
||||
resolve(response)
|
||||
}).catch(error => {
|
||||
reject(error)
|
||||
})
|
||||
})
|
||||
},
|
||||
// 登出
|
||||
LogOut({
|
||||
commit,
|
||||
state
|
||||
}) {
|
||||
return new Promise((resolve, reject) => {
|
||||
logout(state.access_token, state.refresh_token).then(() => {
|
||||
// 清除菜单
|
||||
commit('SET_MENU', [])
|
||||
// 清除权限
|
||||
commit('SET_PERMISSIONS', [])
|
||||
// 清除用户信息
|
||||
commit('SET_USER_INFO', {})
|
||||
commit('SET_ACCESS_TOKEN', '')
|
||||
commit('SET_REFRESH_TOKEN', '')
|
||||
commit('SET_ROLES', [])
|
||||
commit('DEL_ALL_TAG')
|
||||
removeToken()
|
||||
resolve()
|
||||
}).catch(error => {
|
||||
reject(error)
|
||||
})
|
||||
})
|
||||
},
|
||||
// 注销session
|
||||
FedLogOut({
|
||||
commit
|
||||
}) {
|
||||
return new Promise(resolve => {
|
||||
// 清除菜单
|
||||
commit('SET_MENU', [])
|
||||
// 清除权限
|
||||
commit('SET_PERMISSIONS', [])
|
||||
// 清除用户信息
|
||||
commit('SET_USER_INFO', {})
|
||||
commit('SET_ACCESS_TOKEN', '')
|
||||
commit('SET_REFRESH_TOKEN', '')
|
||||
commit('SET_ROLES', [])
|
||||
commit('DEL_ALL_TAG')
|
||||
removeToken()
|
||||
resolve()
|
||||
})
|
||||
},
|
||||
// 获取系统菜单
|
||||
GetMenu({
|
||||
commit
|
||||
}) {
|
||||
return new Promise(resolve => {
|
||||
GetMenu().then((res) => {
|
||||
const data = res.data
|
||||
commit('SET_MENU', data)
|
||||
resolve(data)
|
||||
})
|
||||
})
|
||||
}
|
||||
},
|
||||
mutations: {
|
||||
SET_ACCESS_TOKEN: (state, access_token) => {
|
||||
state.access_token = access_token
|
||||
setStore({
|
||||
name: 'access_token',
|
||||
content: state.access_token,
|
||||
type: 'session'
|
||||
})
|
||||
},
|
||||
SET_MENU: (state, menu) => {
|
||||
state.menu = menu || []
|
||||
setStore({
|
||||
name: 'menu',
|
||||
content: state.menu,
|
||||
type: 'session'
|
||||
})
|
||||
state.isInitMenu = false
|
||||
setStore({
|
||||
name: 'isInitMenu',
|
||||
content: state.isInitMenu,
|
||||
type: 'session'
|
||||
})
|
||||
},
|
||||
IS_INIT_MENU: (state, isInitMenu) => {
|
||||
state.isInitMenu = isInitMenu
|
||||
setStore({
|
||||
name: 'isInitMenu',
|
||||
content: state.isInitMenu,
|
||||
type: 'session'
|
||||
})
|
||||
},
|
||||
SET_USER_INFO: (state, userInfo) => {
|
||||
state.userInfo = userInfo
|
||||
setStore({
|
||||
name: 'userInfo',
|
||||
content: state.userInfo,
|
||||
type: 'session'
|
||||
})
|
||||
},
|
||||
SET_REFRESH_TOKEN: (state, rfToken) => {
|
||||
state.refresh_token = rfToken
|
||||
setStore({
|
||||
name: 'refresh_token',
|
||||
content: state.refresh_token,
|
||||
type: 'session'
|
||||
})
|
||||
},
|
||||
SET_ROLES: (state, roles) => {
|
||||
state.roles = roles
|
||||
setStore({
|
||||
name: 'roles',
|
||||
content: state.roles,
|
||||
type: 'session'
|
||||
})
|
||||
},
|
||||
SET_PERMISSIONS: (state, permissions) => {
|
||||
const list = {}
|
||||
for (let i = 0; i < permissions.length; i++) {
|
||||
list[permissions[i]] = true
|
||||
}
|
||||
state.permissions = list
|
||||
setStore({
|
||||
name: 'permissions',
|
||||
content: state.permissions,
|
||||
type: 'session'
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
export default user
|
||||
|
@ -1,44 +1,55 @@
|
||||
import { validatenull } from '@/util/validate';
|
||||
import { validatenull } from '@/util/validate'
|
||||
/**
|
||||
* 存储localStorage
|
||||
*/
|
||||
export const setStore = (params) => {
|
||||
let { name, content, type, datetime } = params;
|
||||
let obj = {
|
||||
dataType: typeof (content),
|
||||
content: content,
|
||||
type: type,
|
||||
datetime: new Date().getTime()
|
||||
}
|
||||
if (type) window.sessionStorage.setItem(name, JSON.stringify(obj));
|
||||
else window.localStorage.setItem(name, JSON.stringify(obj));
|
||||
const {
|
||||
name,
|
||||
content,
|
||||
type,
|
||||
datetime
|
||||
} = params
|
||||
const obj = {
|
||||
dataType: typeof (content),
|
||||
content: content,
|
||||
type: type,
|
||||
datetime: new Date().getTime()
|
||||
}
|
||||
if (type) window.sessionStorage.setItem(name, JSON.stringify(obj))
|
||||
else window.localStorage.setItem(name, JSON.stringify(obj))
|
||||
}
|
||||
/**
|
||||
* 获取localStorage
|
||||
*/
|
||||
export const getStore = (params) => {
|
||||
let { name, type } = params;
|
||||
let obj = {}, content;
|
||||
obj = window.localStorage.getItem(name);
|
||||
if (validatenull(obj)) obj = window.sessionStorage.getItem(name);
|
||||
if (validatenull(obj)) return;
|
||||
obj = JSON.parse(obj);
|
||||
if (obj.dataType == 'string') {
|
||||
content = obj.content;
|
||||
} else if (obj.dataType == 'number') {
|
||||
content = Number(obj.content);
|
||||
} else if (obj.dataType == 'boolean') {
|
||||
content = eval(obj.content);
|
||||
} else if (obj.dataType == 'object') {
|
||||
content = obj.content;
|
||||
}
|
||||
return content;
|
||||
const {
|
||||
name,
|
||||
type
|
||||
} = params
|
||||
let obj = {}
|
||||
let content
|
||||
obj = window.localStorage.getItem(name)
|
||||
if (validatenull(obj)) obj = window.sessionStorage.getItem(name)
|
||||
if (validatenull(obj)) return
|
||||
obj = JSON.parse(obj)
|
||||
if (obj.dataType === 'string') {
|
||||
content = obj.content
|
||||
} else if (obj.dataType === 'number') {
|
||||
content = Number(obj.content)
|
||||
} else if (obj.dataType === 'boolean') {
|
||||
content = eval(obj.content)
|
||||
} else if (obj.dataType === 'object') {
|
||||
content = obj.content
|
||||
}
|
||||
return content
|
||||
}
|
||||
/**
|
||||
* 删除localStorage
|
||||
*/
|
||||
export const removeStore = params => {
|
||||
let { name } = params;
|
||||
window.localStorage.removeItem(name);
|
||||
window.sessionStorage.removeItem(name);
|
||||
}
|
||||
let {
|
||||
name
|
||||
} = params
|
||||
window.localStorage.removeItem(name)
|
||||
window.sessionStorage.removeItem(name)
|
||||
}
|
||||
|
311
src/util/util.js
311
src/util/util.js
@ -1,207 +1,260 @@
|
||||
import { validatenull } from './validate'
|
||||
import { baseUrl } from '@/config/env'
|
||||
|
||||
export const initMenu = (router, menu) => {
|
||||
if (menu.length === 0) {
|
||||
return
|
||||
}
|
||||
router.addRoutes(formatRoutes(menu))
|
||||
}
|
||||
|
||||
export const formatRoutes = (aMenu) => {
|
||||
const aRouter = []
|
||||
aMenu.forEach(oMenu => {
|
||||
const {
|
||||
path,
|
||||
component,
|
||||
name,
|
||||
icon,
|
||||
hidden,
|
||||
redirect,
|
||||
meta,
|
||||
children
|
||||
} = oMenu
|
||||
const oRouter = {
|
||||
path: path,
|
||||
component(resolve) {
|
||||
let componentPath = ''
|
||||
if (component === 'Layout') {
|
||||
require(['../page/index'], resolve)
|
||||
return
|
||||
} else if (component.indexOf('/') !== 0) {
|
||||
componentPath = '/' + component
|
||||
} else {
|
||||
componentPath = component
|
||||
}
|
||||
require(['../views' + componentPath + '.vue'], resolve)
|
||||
},
|
||||
name: name,
|
||||
icon: icon,
|
||||
hidden: hidden,
|
||||
meta: meta,
|
||||
children: (children && children instanceof Array) ? formatRoutes(children) : []
|
||||
}
|
||||
if (redirect) {
|
||||
oRouter.redirect = redirect
|
||||
}
|
||||
aRouter.push(oRouter)
|
||||
})
|
||||
return aRouter
|
||||
}
|
||||
|
||||
/**
|
||||
* 加密处理
|
||||
*/
|
||||
export const encryption = (params) => {
|
||||
let { data, type, param, key } = params;
|
||||
let result = JSON.parse(JSON.stringify(data));
|
||||
if (type == 'Base64') {
|
||||
param.forEach(ele => {
|
||||
result[ele] = btoa(result[ele]);
|
||||
})
|
||||
} else if (type == 'Aes') {
|
||||
param.forEach(ele => {
|
||||
result[ele] = CryptoJS.AES.encrypt(result[ele], key).toString();
|
||||
})
|
||||
|
||||
}
|
||||
return result;
|
||||
};
|
||||
let {
|
||||
data,
|
||||
type,
|
||||
param,
|
||||
key
|
||||
} = params
|
||||
let result = JSON.parse(JSON.stringify(data))
|
||||
if (type === 'Base64') {
|
||||
param.forEach(ele => {
|
||||
result[ele] = btoa(result[ele])
|
||||
})
|
||||
} else if (type === 'Aes') {
|
||||
param.forEach(ele => {
|
||||
result[ele] = CryptoJS.AES.encrypt(result[ele], key).toString()
|
||||
})
|
||||
}
|
||||
return result
|
||||
}
|
||||
|
||||
/**
|
||||
* 设置浏览器头部标题
|
||||
*/
|
||||
export const setTitle = function (title) {
|
||||
title = title ? `${title}——Pig 微服务快速开发框架` : 'Pig 微服务快速开发框架';
|
||||
window.document.title = title;
|
||||
};
|
||||
title = title ? `${title}——Pig 微服务快速开发框架` : 'Pig 微服务快速开发框架';
|
||||
window.document.title = title
|
||||
}
|
||||
/**
|
||||
* 浏览器判断是否全屏
|
||||
*/
|
||||
export const fullscreenToggel = () => {
|
||||
if (fullscreenEnable()) {
|
||||
exitFullScreen();
|
||||
} else {
|
||||
reqFullScreen();
|
||||
}
|
||||
if (fullscreenEnable()) {
|
||||
exitFullScreen()
|
||||
} else {
|
||||
reqFullScreen()
|
||||
}
|
||||
}
|
||||
/**
|
||||
* esc监听全屏
|
||||
*/
|
||||
export const listenfullscreen = (callback) => {
|
||||
function listen() {
|
||||
callback()
|
||||
}
|
||||
document.addEventListener("fullscreenchange", function (e) {
|
||||
listen();
|
||||
});
|
||||
document.addEventListener("mozfullscreenchange", function (e) {
|
||||
listen();
|
||||
});
|
||||
document.addEventListener("webkitfullscreenchange", function (e) {
|
||||
listen();
|
||||
});
|
||||
document.addEventListener("msfullscreenchange", function (e) {
|
||||
listen();
|
||||
});
|
||||
function listen() {
|
||||
callback()
|
||||
}
|
||||
document.addEventListener('fullscreenchange', function (e) {
|
||||
listen()
|
||||
})
|
||||
document.addEventListener('mozfullscreenchange', function (e) {
|
||||
listen()
|
||||
})
|
||||
document.addEventListener('webkitfullscreenchange', function (e) {
|
||||
listen()
|
||||
})
|
||||
document.addEventListener('msfullscreenchange', function (e) {
|
||||
listen()
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 浏览器判断是否全屏
|
||||
*/
|
||||
export const fullscreenEnable = () => {
|
||||
var isFullscreen = document.fullscreenEnabled ||
|
||||
window.fullScreen ||
|
||||
document.mozFullscreenEnabled ||
|
||||
document.webkitIsFullScreen;
|
||||
return isFullscreen;
|
||||
var isFullscreen = document.fullscreenEnabled ||
|
||||
window.fullScreen ||
|
||||
document.mozFullscreenEnabled ||
|
||||
document.webkitIsFullScreen
|
||||
return isFullscreen
|
||||
}
|
||||
|
||||
/**
|
||||
* 浏览器全屏
|
||||
*/
|
||||
export const reqFullScreen = () => {
|
||||
if (document.documentElement.requestFullScreen) {
|
||||
document.documentElement.requestFullScreen();
|
||||
} else if (document.documentElement.webkitRequestFullScreen) {
|
||||
document.documentElement.webkitRequestFullScreen();
|
||||
} else if (document.documentElement.mozRequestFullScreen) {
|
||||
document.documentElement.mozRequestFullScreen();
|
||||
}
|
||||
if (document.documentElement.requestFullScreen) {
|
||||
document.documentElement.requestFullScreen()
|
||||
} else if (document.documentElement.webkitRequestFullScreen) {
|
||||
document.documentElement.webkitRequestFullScreen()
|
||||
} else if (document.documentElement.mozRequestFullScreen) {
|
||||
document.documentElement.mozRequestFullScreen()
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 浏览器退出全屏
|
||||
*/
|
||||
export const exitFullScreen = () => {
|
||||
if (document.documentElement.requestFullScreen) {
|
||||
document.exitFullScreen();
|
||||
} else if (document.documentElement.webkitRequestFullScreen) {
|
||||
document.webkitCancelFullScreen();
|
||||
} else if (document.documentElement.mozRequestFullScreen) {
|
||||
document.mozCancelFullScreen();
|
||||
}
|
||||
if (document.documentElement.requestFullScreen) {
|
||||
document.exitFullScreen()
|
||||
} else if (document.documentElement.webkitRequestFullScreen) {
|
||||
document.webkitCancelFullScreen()
|
||||
} else if (document.documentElement.mozRequestFullScreen) {
|
||||
document.mozCancelFullScreen()
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 递归寻找子类的父类
|
||||
*/
|
||||
|
||||
export const findParent = (menu, id) => {
|
||||
for (let i = 0; i < menu.length; i++) {
|
||||
if (menu[i].children.length != 0) {
|
||||
for (let j = 0; j < menu[i].children.length; j++) {
|
||||
if (menu[i].children[j].id == id) {
|
||||
return menu[i];
|
||||
} else {
|
||||
if (menu[i].children[j].children.length != 0) {
|
||||
return findParent(menu[i].children[j].children, id);
|
||||
}
|
||||
}
|
||||
}
|
||||
for (let i = 0; i < menu.length; i++) {
|
||||
if (menu[i].children.length !== 0) {
|
||||
for (let j = 0; j < menu[i].children.length; j++) {
|
||||
if (menu[i].children[j].id === id) {
|
||||
return menu[i]
|
||||
} else {
|
||||
if (menu[i].children[j].children.length !== 0) {
|
||||
return findParent(menu[i].children[j].children, id)
|
||||
}
|
||||
}
|
||||
};
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 总体路由处理器
|
||||
*/
|
||||
export const resolveUrlPath = (url, name) => {
|
||||
|
||||
let reqUrl = url;
|
||||
if (url.indexOf("#") != -1 && url.indexOf("http") == -1) {
|
||||
const port = reqUrl.substr(reqUrl.indexOf(':'));
|
||||
reqUrl = `/myiframe/urlPath?src=${baseUrl}${port}${reqUrl.replace('#', '').replace(port, '')}}&name=${name}`;
|
||||
} else if (url.indexOf("http") != -1) {
|
||||
reqUrl = `/myiframe/urlPath?src=${reqUrl}&name=${name}`;
|
||||
} else {
|
||||
reqUrl = `${reqUrl}`;
|
||||
}
|
||||
return reqUrl;
|
||||
let reqUrl = url
|
||||
if (url.indexOf('#') !== -1 && url.indexOf('http') === -1) {
|
||||
const port = reqUrl.substr(reqUrl.indexOf(':'))
|
||||
reqUrl = `/myiframe/urlPath?src=${baseUrl}${port}${reqUrl.replace('#', '').replace(port, '')}}&name=${name}`
|
||||
} else if (url.indexOf('http') !== -1) {
|
||||
reqUrl = `/myiframe/urlPath?src=${reqUrl}&name=${name}`
|
||||
} else {
|
||||
reqUrl = `${reqUrl}`
|
||||
}
|
||||
return reqUrl
|
||||
}
|
||||
|
||||
/**
|
||||
* 总体路由设置器
|
||||
*/
|
||||
export const setUrlPath = ($route) => {
|
||||
let value = "";
|
||||
if ($route.query.src) {
|
||||
value = $route.query.src;
|
||||
} else {
|
||||
value = $route.path;
|
||||
}
|
||||
return value;
|
||||
let value = ''
|
||||
if ($route.query.src) {
|
||||
value = $route.query.src
|
||||
} else {
|
||||
value = $route.path
|
||||
}
|
||||
return value
|
||||
}
|
||||
|
||||
/**
|
||||
* 动态插入css
|
||||
*/
|
||||
|
||||
export const loadStyle = url => {
|
||||
const link = document.createElement('link');
|
||||
link.type = 'text/css';
|
||||
link.rel = 'stylesheet';
|
||||
link.href = url;
|
||||
const head = document.getElementsByTagName('head')[0];
|
||||
head.appendChild(link);
|
||||
const link = document.createElement('link')
|
||||
link.type = 'text/css'
|
||||
link.rel = 'stylesheet'
|
||||
link.href = url
|
||||
const head = document.getElementsByTagName('head')[0]
|
||||
head.appendChild(link)
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据字典的value显示label
|
||||
*/
|
||||
export const findByvalue = (dic, value) => {
|
||||
let result = '';
|
||||
if (validatenull(dic)) return value;
|
||||
if (typeof (value) == 'string' || typeof (value) == 'number') {
|
||||
let index = 0;
|
||||
index = findArray(dic, value);
|
||||
if (index != -1) {
|
||||
result = dic[index].label;
|
||||
} else {
|
||||
result = value;
|
||||
}
|
||||
} else if (value instanceof Array) {
|
||||
result = [];
|
||||
let index = 0;
|
||||
value.forEach(ele => {
|
||||
index = findArray(dic, ele);
|
||||
if (index != -1) {
|
||||
result.push(dic[index].label);
|
||||
} else {
|
||||
result.push(value);
|
||||
}
|
||||
});
|
||||
result = result.toString();
|
||||
let result = ''
|
||||
if (validatenull(dic)) return value
|
||||
if (typeof (value) === 'string' || typeof (value) === 'number') {
|
||||
let index = 0
|
||||
index = findArray(dic, value)
|
||||
if (index !== -1) {
|
||||
result = dic[index].label
|
||||
} else {
|
||||
result = value
|
||||
}
|
||||
return result;
|
||||
} else if (value instanceof Array) {
|
||||
result = []
|
||||
let index = 0
|
||||
value.forEach(ele => {
|
||||
index = findArray(dic, ele)
|
||||
if (index !== -1) {
|
||||
result.push(dic[index].label)
|
||||
} else {
|
||||
result.push(value)
|
||||
}
|
||||
})
|
||||
result = result.toString()
|
||||
}
|
||||
return result
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据字典的value查找对应的index
|
||||
*/
|
||||
export const findArray = (dic, value) => {
|
||||
for (let i = 0; i < dic.length; i++) {
|
||||
if (dic[i].value == value) {
|
||||
return i;
|
||||
break;
|
||||
}
|
||||
for (let i = 0; i < dic.length; i++) {
|
||||
if (dic[i].value === value) {
|
||||
return i
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
return -1
|
||||
}
|
||||
|
||||
/**
|
||||
* 生成随机len位数字
|
||||
*/
|
||||
export const randomLenNum = (len, date) => {
|
||||
let random = '';
|
||||
random = Math.ceil(Math.random() * 100000000000000).toString().substr(0, len ? len : 4);
|
||||
if (date) random = random + Date.now();
|
||||
return random;
|
||||
let random = ''
|
||||
random = Math.ceil(Math.random() * 100000000000000).toString().substr(0, typeof len === 'number' ? len : 4)
|
||||
if (date) random = random + Date.now()
|
||||
return random
|
||||
}
|
||||
|
||||
|
||||
|
@ -8,14 +8,13 @@
|
||||
<el-button class="filter-item" type="primary" v-waves icon="search" @click="handleFilter">搜索</el-button>
|
||||
</div>
|
||||
<el-table :key='tableKey' :data="list" v-loading="listLoading" element-loading-text="给我一点时间" border fit highlight-current-row style="width: 99%">
|
||||
|
||||
<el-table-column align="center" label="序号">
|
||||
<template slot-scope="scope">
|
||||
<span>{{Number(scope.row.id).toFixed()}}</span>
|
||||
<span>{{ getSerialNumber(scope.$index) }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column label="类型" align="center">
|
||||
<el-table-column align="center" label="类型">
|
||||
<template slot-scope="scope">
|
||||
<span>
|
||||
<el-button type="success" v-if="scope.row.type == 0">{{ scope.row.type | typeFilter }}</el-button>
|
||||
@ -26,41 +25,41 @@
|
||||
|
||||
<el-table-column label="请求接口" show-overflow-tooltip>
|
||||
<template slot-scope="scope">
|
||||
<span>{{ scope.row.requestUri}}</span>
|
||||
<span>{{ scope.row.requestUri }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column align="center" label="IP地址">
|
||||
<template slot-scope="scope">
|
||||
<span>{{scope.row.remoteAddr}}</span>
|
||||
<span>{{ scope.row.remoteAddr }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column align="center" label="请求方式">
|
||||
<template slot-scope="scope">
|
||||
<span>{{scope.row.method}}</span>
|
||||
<span>{{ scope.row.method }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column align="center" label="传入参数" show-overflow-tooltip>
|
||||
<template slot-scope="scope">
|
||||
<span>{{scope.row.params}}</span>
|
||||
<span>{{ scope.row.params }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column align="center" label="请求时间">
|
||||
<template slot-scope="scope">
|
||||
<span>{{scope.row.time}}</span>
|
||||
<span>{{ scope.row.time}}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column align="center" label="创建时间">
|
||||
<template slot-scope="scope">
|
||||
<span>{{scope.row.createTime | parseTime('{y}-{m}-{d} {h}:{i}')}}</span>
|
||||
<span>{{ scope.row.createTime | moment('YYYY-MM-DD HH:mm') }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column label="操作">
|
||||
<el-table-column align="center" label="操作">
|
||||
<template slot-scope="scope">
|
||||
<el-button size="mini" type="danger" v-if="sys_log_del" @click="handleDelete(scope.row)">删除
|
||||
</el-button>
|
||||
@ -120,6 +119,9 @@ export default {
|
||||
});
|
||||
},
|
||||
methods: {
|
||||
getSerialNumber(index) {
|
||||
return index + 1 + (this.listQuery.page - 1) * this.listQuery.limit;
|
||||
},
|
||||
getList() {
|
||||
this.listLoading = true;
|
||||
this.listQuery.orderByField = "create_time";
|
||||
|
@ -12,13 +12,15 @@
|
||||
<el-col :span="8" style='margin-top:15px;'>
|
||||
<el-tree
|
||||
class="filter-tree"
|
||||
:data="treeData"
|
||||
node-key="id"
|
||||
highlight-current
|
||||
:props="defaultProps"
|
||||
:data="treeData"
|
||||
:default-expanded-keys="aExpandedKeys"
|
||||
:filter-node-method="filterNode"
|
||||
:props="defaultProps"
|
||||
@node-click="getNodeData"
|
||||
default-expand-all
|
||||
@node-expand="nodeExpand"
|
||||
@node-collapse="nodeCollapse"
|
||||
>
|
||||
</el-tree>
|
||||
</el-col>
|
||||
@ -96,6 +98,14 @@
|
||||
name: undefined
|
||||
},
|
||||
treeData: [],
|
||||
oExpandedKey: {
|
||||
// key (from tree id) : expandedOrNot boolean
|
||||
},
|
||||
oTreeNodeChildren: {
|
||||
// id1 : [children] (from tree node id1)
|
||||
// id2 : [children] (from tree node id2)
|
||||
},
|
||||
aExpandedKeys: [],
|
||||
defaultProps: {
|
||||
children: 'children',
|
||||
label: 'name'
|
||||
@ -148,9 +158,46 @@
|
||||
})
|
||||
},
|
||||
filterNode(value, data) {
|
||||
// console.log(value);
|
||||
if (!value) return true
|
||||
return data.label.indexOf(value) !== -1
|
||||
},
|
||||
|
||||
nodeExpand(data) {
|
||||
let aChildren = data.children
|
||||
if (aChildren.length > 0) {
|
||||
this.oExpandedKey[data.id] = true
|
||||
this.oTreeNodeChildren[data.id] = aChildren
|
||||
}
|
||||
this.setExpandedKeys()
|
||||
},
|
||||
nodeCollapse(data) {
|
||||
this.oExpandedKey[data.id] = false
|
||||
// 如果有子节点
|
||||
this.treeRecursion(this.oTreeNodeChildren[data.id], (oNode) => {
|
||||
this.oExpandedKey[oNode.id] = false
|
||||
});
|
||||
this.setExpandedKeys()
|
||||
},
|
||||
setExpandedKeys() {
|
||||
let oTemp = this.oExpandedKey
|
||||
this.aExpandedKeys = []
|
||||
for (let sKey in oTemp) {
|
||||
if (oTemp[sKey]) {
|
||||
this.aExpandedKeys.push(parseInt(sKey));
|
||||
}
|
||||
}
|
||||
},
|
||||
treeRecursion(aChildren, fnCallback) {
|
||||
if (aChildren) {
|
||||
for (let i = 0; i < aChildren.length; ++i) {
|
||||
let oNode = aChildren[i]
|
||||
fnCallback && fnCallback(oNode)
|
||||
this.treeRecursion(oNode.children, fnCallback)
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
getNodeData(data) {
|
||||
if (!this.formEdit) {
|
||||
this.formStatus = 'update'
|
||||
|
105
static/aes.js
Normal file
105
static/aes.js
Normal file
@ -0,0 +1,105 @@
|
||||
/*
|
||||
CryptoJS v3.1.2
|
||||
code.google.com/p/crypto-js
|
||||
(c) 2009-2013 by Jeff Mott. All rights reserved.
|
||||
code.google.com/p/crypto-js/wiki/License
|
||||
*/
|
||||
var CryptoJS = CryptoJS || function (u, p) {
|
||||
var d = {}, l = d.lib = {}, s = function () { }, t = l.Base = { extend: function (a) { s.prototype = this; var c = new s; a && c.mixIn(a); c.hasOwnProperty("init") || (c.init = function () { c.$super.init.apply(this, arguments) }); c.init.prototype = c; c.$super = this; return c }, create: function () { var a = this.extend(); a.init.apply(a, arguments); return a }, init: function () { }, mixIn: function (a) { for (var c in a) a.hasOwnProperty(c) && (this[c] = a[c]); a.hasOwnProperty("toString") && (this.toString = a.toString) }, clone: function () { return this.init.prototype.extend(this) } },
|
||||
r = l.WordArray = t.extend({
|
||||
init: function (a, c) { a = this.words = a || []; this.sigBytes = c != p ? c : 4 * a.length }, toString: function (a) { return (a || v).stringify(this) }, concat: function (a) { var c = this.words, e = a.words, j = this.sigBytes; a = a.sigBytes; this.clamp(); if (j % 4) for (var k = 0; k < a; k++)c[j + k >>> 2] |= (e[k >>> 2] >>> 24 - 8 * (k % 4) & 255) << 24 - 8 * ((j + k) % 4); else if (65535 < e.length) for (k = 0; k < a; k += 4)c[j + k >>> 2] = e[k >>> 2]; else c.push.apply(c, e); this.sigBytes += a; return this }, clamp: function () {
|
||||
var a = this.words, c = this.sigBytes; a[c >>> 2] &= 4294967295 <<
|
||||
32 - 8 * (c % 4); a.length = u.ceil(c / 4)
|
||||
}, clone: function () { var a = t.clone.call(this); a.words = this.words.slice(0); return a }, random: function (a) { for (var c = [], e = 0; e < a; e += 4)c.push(4294967296 * u.random() | 0); return new r.init(c, a) }
|
||||
}), w = d.enc = {}, v = w.Hex = {
|
||||
stringify: function (a) { var c = a.words; a = a.sigBytes; for (var e = [], j = 0; j < a; j++) { var k = c[j >>> 2] >>> 24 - 8 * (j % 4) & 255; e.push((k >>> 4).toString(16)); e.push((k & 15).toString(16)) } return e.join("") }, parse: function (a) {
|
||||
for (var c = a.length, e = [], j = 0; j < c; j += 2)e[j >>> 3] |= parseInt(a.substr(j,
|
||||
2), 16) << 24 - 4 * (j % 8); return new r.init(e, c / 2)
|
||||
}
|
||||
}, b = w.Latin1 = { stringify: function (a) { var c = a.words; a = a.sigBytes; for (var e = [], j = 0; j < a; j++)e.push(String.fromCharCode(c[j >>> 2] >>> 24 - 8 * (j % 4) & 255)); return e.join("") }, parse: function (a) { for (var c = a.length, e = [], j = 0; j < c; j++)e[j >>> 2] |= (a.charCodeAt(j) & 255) << 24 - 8 * (j % 4); return new r.init(e, c) } }, x = w.Utf8 = { stringify: function (a) { try { return decodeURIComponent(escape(b.stringify(a))) } catch (c) { throw Error("Malformed UTF-8 data"); } }, parse: function (a) { return b.parse(unescape(encodeURIComponent(a))) } },
|
||||
q = l.BufferedBlockAlgorithm = t.extend({
|
||||
reset: function () { this._data = new r.init; this._nDataBytes = 0 }, _append: function (a) { "string" == typeof a && (a = x.parse(a)); this._data.concat(a); this._nDataBytes += a.sigBytes }, _process: function (a) { var c = this._data, e = c.words, j = c.sigBytes, k = this.blockSize, b = j / (4 * k), b = a ? u.ceil(b) : u.max((b | 0) - this._minBufferSize, 0); a = b * k; j = u.min(4 * a, j); if (a) { for (var q = 0; q < a; q += k)this._doProcessBlock(e, q); q = e.splice(0, a); c.sigBytes -= j } return new r.init(q, j) }, clone: function () {
|
||||
var a = t.clone.call(this);
|
||||
a._data = this._data.clone(); return a
|
||||
}, _minBufferSize: 0
|
||||
}); l.Hasher = q.extend({
|
||||
cfg: t.extend(), init: function (a) { this.cfg = this.cfg.extend(a); this.reset() }, reset: function () { q.reset.call(this); this._doReset() }, update: function (a) { this._append(a); this._process(); return this }, finalize: function (a) { a && this._append(a); return this._doFinalize() }, blockSize: 16, _createHelper: function (a) { return function (b, e) { return (new a.init(e)).finalize(b) } }, _createHmacHelper: function (a) {
|
||||
return function (b, e) {
|
||||
return (new n.HMAC.init(a,
|
||||
e)).finalize(b)
|
||||
}
|
||||
}
|
||||
}); var n = d.algo = {}; return d
|
||||
}(Math);
|
||||
(function () {
|
||||
var u = CryptoJS, p = u.lib.WordArray; u.enc.Base64 = {
|
||||
stringify: function (d) { var l = d.words, p = d.sigBytes, t = this._map; d.clamp(); d = []; for (var r = 0; r < p; r += 3)for (var w = (l[r >>> 2] >>> 24 - 8 * (r % 4) & 255) << 16 | (l[r + 1 >>> 2] >>> 24 - 8 * ((r + 1) % 4) & 255) << 8 | l[r + 2 >>> 2] >>> 24 - 8 * ((r + 2) % 4) & 255, v = 0; 4 > v && r + 0.75 * v < p; v++)d.push(t.charAt(w >>> 6 * (3 - v) & 63)); if (l = t.charAt(64)) for (; d.length % 4;)d.push(l); return d.join("") }, parse: function (d) {
|
||||
var l = d.length, s = this._map, t = s.charAt(64); t && (t = d.indexOf(t), -1 != t && (l = t)); for (var t = [], r = 0, w = 0; w <
|
||||
l; w++)if (w % 4) { var v = s.indexOf(d.charAt(w - 1)) << 2 * (w % 4), b = s.indexOf(d.charAt(w)) >>> 6 - 2 * (w % 4); t[r >>> 2] |= (v | b) << 24 - 8 * (r % 4); r++ } return p.create(t, r)
|
||||
}, _map: "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="
|
||||
}
|
||||
})();
|
||||
(function (u) {
|
||||
function p(b, n, a, c, e, j, k) { b = b + (n & a | ~n & c) + e + k; return (b << j | b >>> 32 - j) + n } function d(b, n, a, c, e, j, k) { b = b + (n & c | a & ~c) + e + k; return (b << j | b >>> 32 - j) + n } function l(b, n, a, c, e, j, k) { b = b + (n ^ a ^ c) + e + k; return (b << j | b >>> 32 - j) + n } function s(b, n, a, c, e, j, k) { b = b + (a ^ (n | ~c)) + e + k; return (b << j | b >>> 32 - j) + n } for (var t = CryptoJS, r = t.lib, w = r.WordArray, v = r.Hasher, r = t.algo, b = [], x = 0; 64 > x; x++)b[x] = 4294967296 * u.abs(u.sin(x + 1)) | 0; r = r.MD5 = v.extend({
|
||||
_doReset: function () { this._hash = new w.init([1732584193, 4023233417, 2562383102, 271733878]) },
|
||||
_doProcessBlock: function (q, n) {
|
||||
for (var a = 0; 16 > a; a++) { var c = n + a, e = q[c]; q[c] = (e << 8 | e >>> 24) & 16711935 | (e << 24 | e >>> 8) & 4278255360 } var a = this._hash.words, c = q[n + 0], e = q[n + 1], j = q[n + 2], k = q[n + 3], z = q[n + 4], r = q[n + 5], t = q[n + 6], w = q[n + 7], v = q[n + 8], A = q[n + 9], B = q[n + 10], C = q[n + 11], u = q[n + 12], D = q[n + 13], E = q[n + 14], x = q[n + 15], f = a[0], m = a[1], g = a[2], h = a[3], f = p(f, m, g, h, c, 7, b[0]), h = p(h, f, m, g, e, 12, b[1]), g = p(g, h, f, m, j, 17, b[2]), m = p(m, g, h, f, k, 22, b[3]), f = p(f, m, g, h, z, 7, b[4]), h = p(h, f, m, g, r, 12, b[5]), g = p(g, h, f, m, t, 17, b[6]), m = p(m, g, h, f, w, 22, b[7]),
|
||||
f = p(f, m, g, h, v, 7, b[8]), h = p(h, f, m, g, A, 12, b[9]), g = p(g, h, f, m, B, 17, b[10]), m = p(m, g, h, f, C, 22, b[11]), f = p(f, m, g, h, u, 7, b[12]), h = p(h, f, m, g, D, 12, b[13]), g = p(g, h, f, m, E, 17, b[14]), m = p(m, g, h, f, x, 22, b[15]), f = d(f, m, g, h, e, 5, b[16]), h = d(h, f, m, g, t, 9, b[17]), g = d(g, h, f, m, C, 14, b[18]), m = d(m, g, h, f, c, 20, b[19]), f = d(f, m, g, h, r, 5, b[20]), h = d(h, f, m, g, B, 9, b[21]), g = d(g, h, f, m, x, 14, b[22]), m = d(m, g, h, f, z, 20, b[23]), f = d(f, m, g, h, A, 5, b[24]), h = d(h, f, m, g, E, 9, b[25]), g = d(g, h, f, m, k, 14, b[26]), m = d(m, g, h, f, v, 20, b[27]), f = d(f, m, g, h, D, 5, b[28]), h = d(h, f,
|
||||
m, g, j, 9, b[29]), g = d(g, h, f, m, w, 14, b[30]), m = d(m, g, h, f, u, 20, b[31]), f = l(f, m, g, h, r, 4, b[32]), h = l(h, f, m, g, v, 11, b[33]), g = l(g, h, f, m, C, 16, b[34]), m = l(m, g, h, f, E, 23, b[35]), f = l(f, m, g, h, e, 4, b[36]), h = l(h, f, m, g, z, 11, b[37]), g = l(g, h, f, m, w, 16, b[38]), m = l(m, g, h, f, B, 23, b[39]), f = l(f, m, g, h, D, 4, b[40]), h = l(h, f, m, g, c, 11, b[41]), g = l(g, h, f, m, k, 16, b[42]), m = l(m, g, h, f, t, 23, b[43]), f = l(f, m, g, h, A, 4, b[44]), h = l(h, f, m, g, u, 11, b[45]), g = l(g, h, f, m, x, 16, b[46]), m = l(m, g, h, f, j, 23, b[47]), f = s(f, m, g, h, c, 6, b[48]), h = s(h, f, m, g, w, 10, b[49]), g = s(g, h, f, m,
|
||||
E, 15, b[50]), m = s(m, g, h, f, r, 21, b[51]), f = s(f, m, g, h, u, 6, b[52]), h = s(h, f, m, g, k, 10, b[53]), g = s(g, h, f, m, B, 15, b[54]), m = s(m, g, h, f, e, 21, b[55]), f = s(f, m, g, h, v, 6, b[56]), h = s(h, f, m, g, x, 10, b[57]), g = s(g, h, f, m, t, 15, b[58]), m = s(m, g, h, f, D, 21, b[59]), f = s(f, m, g, h, z, 6, b[60]), h = s(h, f, m, g, C, 10, b[61]), g = s(g, h, f, m, j, 15, b[62]), m = s(m, g, h, f, A, 21, b[63]); a[0] = a[0] + f | 0; a[1] = a[1] + m | 0; a[2] = a[2] + g | 0; a[3] = a[3] + h | 0
|
||||
}, _doFinalize: function () {
|
||||
var b = this._data, n = b.words, a = 8 * this._nDataBytes, c = 8 * b.sigBytes; n[c >>> 5] |= 128 << 24 - c % 32; var e = u.floor(a /
|
||||
4294967296); n[(c + 64 >>> 9 << 4) + 15] = (e << 8 | e >>> 24) & 16711935 | (e << 24 | e >>> 8) & 4278255360; n[(c + 64 >>> 9 << 4) + 14] = (a << 8 | a >>> 24) & 16711935 | (a << 24 | a >>> 8) & 4278255360; b.sigBytes = 4 * (n.length + 1); this._process(); b = this._hash; n = b.words; for (a = 0; 4 > a; a++)c = n[a], n[a] = (c << 8 | c >>> 24) & 16711935 | (c << 24 | c >>> 8) & 4278255360; return b
|
||||
}, clone: function () { var b = v.clone.call(this); b._hash = this._hash.clone(); return b }
|
||||
}); t.MD5 = v._createHelper(r); t.HmacMD5 = v._createHmacHelper(r)
|
||||
})(Math);
|
||||
(function () {
|
||||
var u = CryptoJS, p = u.lib, d = p.Base, l = p.WordArray, p = u.algo, s = p.EvpKDF = d.extend({ cfg: d.extend({ keySize: 4, hasher: p.MD5, iterations: 1 }), init: function (d) { this.cfg = this.cfg.extend(d) }, compute: function (d, r) { for (var p = this.cfg, s = p.hasher.create(), b = l.create(), u = b.words, q = p.keySize, p = p.iterations; u.length < q;) { n && s.update(n); var n = s.update(d).finalize(r); s.reset(); for (var a = 1; a < p; a++)n = s.finalize(n), s.reset(); b.concat(n) } b.sigBytes = 4 * q; return b } }); u.EvpKDF = function (d, l, p) {
|
||||
return s.create(p).compute(d,
|
||||
l)
|
||||
}
|
||||
})();
|
||||
CryptoJS.lib.Cipher || function (u) {
|
||||
var p = CryptoJS, d = p.lib, l = d.Base, s = d.WordArray, t = d.BufferedBlockAlgorithm, r = p.enc.Base64, w = p.algo.EvpKDF, v = d.Cipher = t.extend({
|
||||
cfg: l.extend(), createEncryptor: function (e, a) { return this.create(this._ENC_XFORM_MODE, e, a) }, createDecryptor: function (e, a) { return this.create(this._DEC_XFORM_MODE, e, a) }, init: function (e, a, b) { this.cfg = this.cfg.extend(b); this._xformMode = e; this._key = a; this.reset() }, reset: function () { t.reset.call(this); this._doReset() }, process: function (e) { this._append(e); return this._process() },
|
||||
finalize: function (e) { e && this._append(e); return this._doFinalize() }, keySize: 4, ivSize: 4, _ENC_XFORM_MODE: 1, _DEC_XFORM_MODE: 2, _createHelper: function (e) { return { encrypt: function (b, k, d) { return ("string" == typeof k ? c : a).encrypt(e, b, k, d) }, decrypt: function (b, k, d) { return ("string" == typeof k ? c : a).decrypt(e, b, k, d) } } }
|
||||
}); d.StreamCipher = v.extend({ _doFinalize: function () { return this._process(!0) }, blockSize: 1 }); var b = p.mode = {}, x = function (e, a, b) {
|
||||
var c = this._iv; c ? this._iv = u : c = this._prevBlock; for (var d = 0; d < b; d++)e[a + d] ^=
|
||||
c[d]
|
||||
}, q = (d.BlockCipherMode = l.extend({ createEncryptor: function (e, a) { return this.Encryptor.create(e, a) }, createDecryptor: function (e, a) { return this.Decryptor.create(e, a) }, init: function (e, a) { this._cipher = e; this._iv = a } })).extend(); q.Encryptor = q.extend({ processBlock: function (e, a) { var b = this._cipher, c = b.blockSize; x.call(this, e, a, c); b.encryptBlock(e, a); this._prevBlock = e.slice(a, a + c) } }); q.Decryptor = q.extend({
|
||||
processBlock: function (e, a) {
|
||||
var b = this._cipher, c = b.blockSize, d = e.slice(a, a + c); b.decryptBlock(e, a); x.call(this,
|
||||
e, a, c); this._prevBlock = d
|
||||
}
|
||||
}); b = b.CBC = q; q = (p.pad = {}).Pkcs7 = { pad: function (a, b) { for (var c = 4 * b, c = c - a.sigBytes % c, d = c << 24 | c << 16 | c << 8 | c, l = [], n = 0; n < c; n += 4)l.push(d); c = s.create(l, c); a.concat(c) }, unpad: function (a) { a.sigBytes -= a.words[a.sigBytes - 1 >>> 2] & 255 } }; d.BlockCipher = v.extend({
|
||||
cfg: v.cfg.extend({ mode: b, padding: q }), reset: function () {
|
||||
v.reset.call(this); var a = this.cfg, b = a.iv, a = a.mode; if (this._xformMode == this._ENC_XFORM_MODE) var c = a.createEncryptor; else c = a.createDecryptor, this._minBufferSize = 1; this._mode = c.call(a,
|
||||
this, b && b.words)
|
||||
}, _doProcessBlock: function (a, b) { this._mode.processBlock(a, b) }, _doFinalize: function () { var a = this.cfg.padding; if (this._xformMode == this._ENC_XFORM_MODE) { a.pad(this._data, this.blockSize); var b = this._process(!0) } else b = this._process(!0), a.unpad(b); return b }, blockSize: 4
|
||||
}); var n = d.CipherParams = l.extend({ init: function (a) { this.mixIn(a) }, toString: function (a) { return (a || this.formatter).stringify(this) } }), b = (p.format = {}).OpenSSL = {
|
||||
stringify: function (a) {
|
||||
var b = a.ciphertext; a = a.salt; return (a ? s.create([1398893684,
|
||||
1701076831]).concat(a).concat(b) : b).toString(r)
|
||||
}, parse: function (a) { a = r.parse(a); var b = a.words; if (1398893684 == b[0] && 1701076831 == b[1]) { var c = s.create(b.slice(2, 4)); b.splice(0, 4); a.sigBytes -= 16 } return n.create({ ciphertext: a, salt: c }) }
|
||||
}, a = d.SerializableCipher = l.extend({
|
||||
cfg: l.extend({ format: b }), encrypt: function (a, b, c, d) { d = this.cfg.extend(d); var l = a.createEncryptor(c, d); b = l.finalize(b); l = l.cfg; return n.create({ ciphertext: b, key: c, iv: l.iv, algorithm: a, mode: l.mode, padding: l.padding, blockSize: a.blockSize, formatter: d.format }) },
|
||||
decrypt: function (a, b, c, d) { d = this.cfg.extend(d); b = this._parse(b, d.format); return a.createDecryptor(c, d).finalize(b.ciphertext) }, _parse: function (a, b) { return "string" == typeof a ? b.parse(a, this) : a }
|
||||
}), p = (p.kdf = {}).OpenSSL = { execute: function (a, b, c, d) { d || (d = s.random(8)); a = w.create({ keySize: b + c }).compute(a, d); c = s.create(a.words.slice(b), 4 * c); a.sigBytes = 4 * b; return n.create({ key: a, iv: c, salt: d }) } }, c = d.PasswordBasedCipher = a.extend({
|
||||
cfg: a.cfg.extend({ kdf: p }), encrypt: function (b, c, d, l) {
|
||||
l = this.cfg.extend(l); d = l.kdf.execute(d,
|
||||
b.keySize, b.ivSize); l.iv = d.iv; b = a.encrypt.call(this, b, c, d.key, l); b.mixIn(d); return b
|
||||
}, decrypt: function (b, c, d, l) { l = this.cfg.extend(l); c = this._parse(c, l.format); d = l.kdf.execute(d, b.keySize, b.ivSize, c.salt); l.iv = d.iv; return a.decrypt.call(this, b, c, d.key, l) }
|
||||
})
|
||||
}();
|
||||
(function () {
|
||||
for (var u = CryptoJS, p = u.lib.BlockCipher, d = u.algo, l = [], s = [], t = [], r = [], w = [], v = [], b = [], x = [], q = [], n = [], a = [], c = 0; 256 > c; c++)a[c] = 128 > c ? c << 1 : c << 1 ^ 283; for (var e = 0, j = 0, c = 0; 256 > c; c++) { var k = j ^ j << 1 ^ j << 2 ^ j << 3 ^ j << 4, k = k >>> 8 ^ k & 255 ^ 99; l[e] = k; s[k] = e; var z = a[e], F = a[z], G = a[F], y = 257 * a[k] ^ 16843008 * k; t[e] = y << 24 | y >>> 8; r[e] = y << 16 | y >>> 16; w[e] = y << 8 | y >>> 24; v[e] = y; y = 16843009 * G ^ 65537 * F ^ 257 * z ^ 16843008 * e; b[k] = y << 24 | y >>> 8; x[k] = y << 16 | y >>> 16; q[k] = y << 8 | y >>> 24; n[k] = y; e ? (e = z ^ a[a[a[G ^ z]]], j ^= a[a[j]]) : e = j = 1 } var H = [0, 1, 2, 4, 8,
|
||||
16, 32, 64, 128, 27, 54], d = d.AES = p.extend({
|
||||
_doReset: function () {
|
||||
for (var a = this._key, c = a.words, d = a.sigBytes / 4, a = 4 * ((this._nRounds = d + 6) + 1), e = this._keySchedule = [], j = 0; j < a; j++)if (j < d) e[j] = c[j]; else { var k = e[j - 1]; j % d ? 6 < d && 4 == j % d && (k = l[k >>> 24] << 24 | l[k >>> 16 & 255] << 16 | l[k >>> 8 & 255] << 8 | l[k & 255]) : (k = k << 8 | k >>> 24, k = l[k >>> 24] << 24 | l[k >>> 16 & 255] << 16 | l[k >>> 8 & 255] << 8 | l[k & 255], k ^= H[j / d | 0] << 24); e[j] = e[j - d] ^ k } c = this._invKeySchedule = []; for (d = 0; d < a; d++)j = a - d, k = d % 4 ? e[j] : e[j - 4], c[d] = 4 > d || 4 >= j ? k : b[l[k >>> 24]] ^ x[l[k >>> 16 & 255]] ^ q[l[k >>>
|
||||
8 & 255]] ^ n[l[k & 255]]
|
||||
}, encryptBlock: function (a, b) { this._doCryptBlock(a, b, this._keySchedule, t, r, w, v, l) }, decryptBlock: function (a, c) { var d = a[c + 1]; a[c + 1] = a[c + 3]; a[c + 3] = d; this._doCryptBlock(a, c, this._invKeySchedule, b, x, q, n, s); d = a[c + 1]; a[c + 1] = a[c + 3]; a[c + 3] = d }, _doCryptBlock: function (a, b, c, d, e, j, l, f) {
|
||||
for (var m = this._nRounds, g = a[b] ^ c[0], h = a[b + 1] ^ c[1], k = a[b + 2] ^ c[2], n = a[b + 3] ^ c[3], p = 4, r = 1; r < m; r++)var q = d[g >>> 24] ^ e[h >>> 16 & 255] ^ j[k >>> 8 & 255] ^ l[n & 255] ^ c[p++], s = d[h >>> 24] ^ e[k >>> 16 & 255] ^ j[n >>> 8 & 255] ^ l[g & 255] ^ c[p++], t =
|
||||
d[k >>> 24] ^ e[n >>> 16 & 255] ^ j[g >>> 8 & 255] ^ l[h & 255] ^ c[p++], n = d[n >>> 24] ^ e[g >>> 16 & 255] ^ j[h >>> 8 & 255] ^ l[k & 255] ^ c[p++], g = q, h = s, k = t; q = (f[g >>> 24] << 24 | f[h >>> 16 & 255] << 16 | f[k >>> 8 & 255] << 8 | f[n & 255]) ^ c[p++]; s = (f[h >>> 24] << 24 | f[k >>> 16 & 255] << 16 | f[n >>> 8 & 255] << 8 | f[g & 255]) ^ c[p++]; t = (f[k >>> 24] << 24 | f[n >>> 16 & 255] << 16 | f[g >>> 8 & 255] << 8 | f[h & 255]) ^ c[p++]; n = (f[n >>> 24] << 24 | f[g >>> 16 & 255] << 16 | f[h >>> 8 & 255] << 8 | f[k & 255]) ^ c[p++]; a[b] = q; a[b + 1] = s; a[b + 2] = t; a[b + 3] = n
|
||||
}, keySize: 8
|
||||
}); u.AES = p._createHelper(d)
|
||||
})();
|
Loading…
Reference in New Issue
Block a user