@@ -41,6 +41,8 @@ | |||||
"element-ui": "2.13.0", | "element-ui": "2.13.0", | ||||
"ezuikit-js": "^0.6.1", | "ezuikit-js": "^0.6.1", | ||||
"jquery": "3.4.1", | "jquery": "3.4.1", | ||||
"js-cookie": "^2.2.1", | |||||
"jsencrypt": "^3.0.0-rc.1", | |||||
"ol": "6.1.1", | "ol": "6.1.1", | ||||
"proj4": "2.5.0", | "proj4": "2.5.0", | ||||
"v-scale-screen": "^1.0.2", | "v-scale-screen": "^1.0.2", | ||||
@@ -1,10 +1,40 @@ | |||||
import request from '@/utils/request'; | import request from '@/utils/request'; | ||||
import { encrypt } from '@/utils/jsencrypt' // 公钥,私钥都声明在里面 | |||||
// 获取用户详细信息 | // 获取用户详细信息 | ||||
export function getInfo () { | export function getInfo () { | ||||
return request({ | return request({ | ||||
url: 'api/getInfo', | |||||
url: '/api/getInfo', | |||||
method: 'get' | method: 'get' | ||||
}) | }) | ||||
} | |||||
// 登录方法 | |||||
export function login (username, password, code, uuid) { | |||||
const data = { | |||||
username, | |||||
password, | |||||
code, | |||||
uuid | |||||
} | |||||
data.username = encrypt(username); | |||||
data.password = encrypt(password); | |||||
return request({ | |||||
url: 'api/login', | |||||
method: 'post', | |||||
data: data | |||||
}) | |||||
} | |||||
export function getCodeImg () { | |||||
return request({ | |||||
url: '/api/gkyzm', | |||||
method: 'get' | |||||
}) | |||||
} | |||||
// 退出方法 | |||||
export function logout () { | |||||
return request({ | |||||
url: '/api/logout', | |||||
method: 'post' | |||||
}) | |||||
} | } |
@@ -1,18 +1,193 @@ | |||||
import router from './router'; | |||||
import store from './store'; | |||||
const whiteList = ['/login']; // 不重定向白名单 | |||||
import router from './router' | |||||
import store from './store' | |||||
import { Message } from 'element-ui' | |||||
import NProgress from 'nprogress' | |||||
import 'nprogress/nprogress.css' | |||||
import { getToken } from '@/utils/auth' | |||||
import { getDicts } from "@/api/system/dict/data"; | |||||
import Cookies from "js-cookie"; | |||||
NProgress.configure({ showSpinner: false }) | |||||
const whiteList = [ | |||||
'/login', | |||||
'/login_index', | |||||
'/auth-redirect', | |||||
'/bind', | |||||
'/register', | |||||
'/login_deposit', | |||||
'/loginSingle', | |||||
'/login_enforce', | |||||
'/login_house', | |||||
'/login_trans', | |||||
'/login_finance', | |||||
'/login_society', | |||||
'/login_three', | |||||
'/login_land', | |||||
'/login_item', | |||||
'/login_company', | |||||
'/login_entity', | |||||
'/login_yinnong', | |||||
'/login_chungeng', | |||||
// '/login_test', | |||||
] | |||||
router.beforeEach((to, from, next) => { | router.beforeEach((to, from, next) => { | ||||
if (store.getters.loginInfo) { | |||||
NProgress.start() | |||||
if (store.getters.systemConfigList.length == 0) { | |||||
store.dispatch('systemTitle').then(() => { | |||||
document.title = store.getters.browserName == '' ? '农经综合信息管理平台' : store.getters.browserName | |||||
}) | |||||
} | |||||
if (getToken()) { | |||||
/* has token*/ | |||||
if (to.path === '/login') { | if (to.path === '/login') { | ||||
next({ path: '/login' }); | |||||
next({ path: '/' }) | |||||
NProgress.done() | |||||
} else { | } else { | ||||
next(); | |||||
if (store.getters.roles.length === 0) { | |||||
// 判断当前用户是否已拉取完user_info信息 | |||||
store.dispatch('GetInfo').then(res => { | |||||
if (res && res.code && res.code == 200) { | |||||
// 拉取user_info | |||||
let businessOwnerList = res.user.businessOwnership; | |||||
if (businessOwnerList != null) { | |||||
getDicts("business_ownership").then((response) => { | |||||
let businessOwnerArr = businessOwnerList.split(',') | |||||
let businessOwnerArrSort = businessOwnerArr.sort((a, b) => {//升序 | |||||
return a - b | |||||
}); | |||||
let arrLable = [] | |||||
response.data.forEach((v, i) => { | |||||
businessOwnerArr.forEach((data, length) => { | |||||
if (v.dictValue == data) { | |||||
arrLable.push({ | |||||
dictValue: v.dictValue, | |||||
dictLabel: v.dictLabel, | |||||
remark: v.remark, | |||||
dictSort: v.dictSort | |||||
}) | |||||
} | |||||
}) | |||||
}) | |||||
let routerId = window.localStorage.getItem("routerId"); | |||||
let bookType = res.user.bookType; | |||||
let endDictValue; | |||||
const viewPagesProfileId = Cookies.get("viewPagesProfileId"); | |||||
if ( | |||||
viewPagesProfileId == undefined || | |||||
viewPagesProfileId == "" || | |||||
viewPagesProfileId == null | |||||
) { | |||||
if (routerId == null || businessOwnerArrSort.includes(routerId) == false) { | |||||
if (businessOwnerArrSort.includes("1") || businessOwnerArrSort.includes("2") || businessOwnerArrSort.includes("3")) { | |||||
if (bookType == 1) { | |||||
endDictValue = 1; | |||||
} else if (bookType == 2) { | |||||
endDictValue = 2; | |||||
} else if (bookType == 3) { | |||||
endDictValue = 3; | |||||
} else if (bookType == 8) { | |||||
endDictValue = 8; | |||||
} else { | |||||
endDictValue = arrLable[0].dictValue | |||||
} | |||||
} else { | |||||
endDictValue = arrLable[0].dictValue | |||||
} | |||||
} else { | |||||
if (businessOwnerArrSort.includes("1") || businessOwnerArrSort.includes("2") || businessOwnerArrSort.includes("3") || businessOwnerArrSort.includes("8")) { | |||||
if (bookType == 1) { | |||||
if (routerId == 2 || routerId == 3 || routerId == 8) { | |||||
endDictValue = 1; | |||||
} else { | |||||
endDictValue = routerId; | |||||
} | |||||
} else if (bookType == 2) { | |||||
if (routerId == 1 || routerId == 3 || routerId == 8) { | |||||
endDictValue = 2; | |||||
} else { | |||||
endDictValue = routerId; | |||||
} | |||||
} else if (bookType == 3) { | |||||
if (routerId == 2 || routerId == 1 || routerId == 8) { | |||||
endDictValue = 3; | |||||
} else { | |||||
endDictValue = routerId; | |||||
} | |||||
} else if (bookType == 8) { | |||||
if (routerId == 1 || routerId == 2 || routerId == 3) { | |||||
endDictValue = 8; | |||||
} else { | |||||
endDictValue = routerId; | |||||
} | |||||
} else { | |||||
endDictValue = routerId; | |||||
} | |||||
} else { | |||||
if (routerId) { | |||||
endDictValue = routerId; | |||||
} else { | |||||
endDictValue = arrLable[0].dictValue | |||||
} | |||||
} | |||||
} | |||||
} else { | |||||
endDictValue = viewPagesProfileId; | |||||
} | |||||
store.dispatch('GenerateRoutes', endDictValue).then(accessRoutes => { | |||||
// 根据roles权限生成可访问的路由表 | |||||
router.addRoutes(accessRoutes) // 动态添加可访问路由表 | |||||
next({ ...to, replace: true }) // hack方法 确保addRoutes已完成 | |||||
}) | |||||
}) | |||||
} else { | |||||
store.dispatch('GenerateRoutes', 'no-router').then(accessRoutes => { | |||||
// 根据roles权限生成可访问的路由表 | |||||
router.addRoutes(accessRoutes) // 动态添加可访问路由表 | |||||
next({ ...to, replace: true }) // hack方法 确保addRoutes已完成 | |||||
}) | |||||
} | |||||
} | |||||
}).catch(err => { | |||||
store.dispatch('LogOut').then(() => { | |||||
Message.error(err) | |||||
next({ path: '/' }) | |||||
}) | |||||
}) | |||||
} else { | |||||
next() | |||||
} | |||||
} | } | ||||
} else { | } else { | ||||
// 没有token | |||||
if (whiteList.indexOf(to.path) !== -1) { | if (whiteList.indexOf(to.path) !== -1) { | ||||
next(); | |||||
// 在免登录白名单,直接进入 | |||||
next() | |||||
} else if (to.path.indexOf('dataScreen') != -1) { | |||||
next() | |||||
} else if (to.path.indexOf('subcontract') != -1) { | |||||
next() | |||||
} else { | } else { | ||||
next(`/login?redirect=${to.path}`); // 否则全部重定向到登录页 | |||||
if (to.query && to.query.code && to.query.exiturl) { | |||||
next(`/login?code=${to.query.code}&exiturl=${to.query.exiturl}`) | |||||
} else { | |||||
next(`/login?redirect=${to.fullPath}`) // 否则全部重定向到登录页 | |||||
} | |||||
//next(`/zjdLogin?redirect=${to.fullPath}`) // 否则全部重定向到登录页 | |||||
NProgress.done() | |||||
} | } | ||||
} | } | ||||
}); | |||||
}) | |||||
router.afterEach(() => { | |||||
NProgress.done() | |||||
}) |
@@ -6,7 +6,13 @@ const routes = [ | |||||
{ | { | ||||
path: '/', | path: '/', | ||||
name: 'root', | name: 'root', | ||||
redirect: '/capital' | |||||
redirect: '/login' | |||||
}, | |||||
// 资金 | |||||
{ | |||||
path: '/nav', | |||||
name: 'nav', | |||||
component: () => import('@/views/nav/index.vue') | |||||
}, | }, | ||||
// 资金 | // 资金 | ||||
{ | { | ||||
@@ -14,6 +20,11 @@ const routes = [ | |||||
name: 'capital', | name: 'capital', | ||||
component: () => import('@/views/capital/index.vue') | component: () => import('@/views/capital/index.vue') | ||||
}, | }, | ||||
{ | |||||
path: '/login', | |||||
name: 'login', | |||||
component: () => import('@/views/login/index.vue') | |||||
}, | |||||
// 资源 | // 资源 | ||||
{ | { | ||||
path: '/resources', | path: '/resources', | ||||
@@ -1,27 +0,0 @@ | |||||
import { login } from '@/api/login.js'; | |||||
import { setToken } from '@/utils/auth'; | |||||
import { Message } from 'element-ui'; | |||||
export const actions = { | |||||
// 登录 | |||||
Login ({ commit }, params) { | |||||
return new Promise((resolve, reject) => { | |||||
login(params).then(response => { | |||||
if (response.code !== '0') { | |||||
Message({ | |||||
message: response.reason, | |||||
type: 'error', | |||||
duration: 2000 | |||||
}); | |||||
resolve(); | |||||
}; | |||||
const data = response.data; | |||||
commit('SET_LOGIN_INFO', data); | |||||
setToken(data.token); | |||||
resolve(); | |||||
}).catch(error => { | |||||
reject(error); | |||||
}); | |||||
}); | |||||
} | |||||
}; |
@@ -1,6 +0,0 @@ | |||||
export const getters = { | |||||
areaCode: state => state.areaCode, | |||||
loginInfo: state => state.loginInfo, | |||||
industrialSubjectOccupancy: state => state.industrialSubjectOccupancy, | |||||
currentLayerName: state => state.currentLayerName | |||||
}; |
@@ -1,11 +0,0 @@ | |||||
import { state } from './state'; | |||||
import { mutations } from './mutations'; | |||||
import { actions } from './actions'; | |||||
import { getters } from './getters'; | |||||
export default { | |||||
state, | |||||
mutations, | |||||
actions, | |||||
getters | |||||
}; |
@@ -1,14 +0,0 @@ | |||||
export const mutations = { | |||||
SET_CURRENT_AREACODE: (state, areaCode) => { // 当前地图层级信息 | |||||
state.areaCode = areaCode; | |||||
}, | |||||
SET_LOGIN_INFO: (state, item) => { | |||||
state.loginInfo = item; | |||||
}, | |||||
RESET_LOGIN_INFO: (state) => { | |||||
state.loginInfo = null; | |||||
}, | |||||
SET_CURRENT_LAYERNAME: (state, currentLayerName) => { | |||||
state.currentLayerName = currentLayerName; | |||||
}, | |||||
}; |
@@ -1,5 +0,0 @@ | |||||
export const state = { | |||||
areaCode: '', | |||||
loginInfo: null, | |||||
currentLayerName: '' // 当前操作的图层名 | |||||
}; |
@@ -0,0 +1,39 @@ | |||||
const getters = { | |||||
sidebar: state => state.app.sidebar, | |||||
size: state => state.app.size, | |||||
device: state => state.app.device, | |||||
visitedViews: state => state.tagsView.visitedViews, | |||||
cachedViews: state => state.tagsView.cachedViews, | |||||
token: state => state.user.token, | |||||
avatar: state => state.user.avatar, | |||||
name: state => state.user.name, | |||||
introduction: state => state.user.introduction, | |||||
roles: state => state.user.roles, | |||||
userRoles:state => state.user.userRoles, | |||||
permissions: state => state.user.permissions, | |||||
setUpModuleId: state => state.user.setUpModuleId, | |||||
permission_routes: state => state.permission.routes, | |||||
bookName: state => state.user.bookName, | |||||
sidebarRouters: state => state.permission.sidebarRouters, | |||||
nickName: state => state.user.nickName, | |||||
businessOwnership: state => state.user.businessOwnership, | |||||
deptLevel: state => state.user.deptLevel, | |||||
businessLevel: state => state.user.businessLevel, | |||||
bookType: state => state.user.bookType, | |||||
deptname: state => state.user.deptname, | |||||
leader: state => state.user.leader, | |||||
parentDeptName: state => state.user.parentDeptName, | |||||
deptName: state => state.user.deptName, | |||||
userType: state => state.user.userType, | |||||
allDeptName: state => state.user.allDeptName, | |||||
systemConfigList: state => state.user.systemConfigList, //获取登录页标题 | |||||
loginSystemName: state => state.user.loginSystemName, //系统名称 | |||||
browserName: state => state.user.browserName, //浏览器页签名称 | |||||
technicalSupport: state => state.user.technicalSupport, //技术支持 | |||||
noticeThree: state => state.user.noticeThree, //阅读须知 0 未阅读 | |||||
baseRoutingUrl: state => state.user.baseRoutingUrl, //资源文件访问前缀 | |||||
bigscreenUrl: state => state.user.bigscreenUrl, //大数据指挥舱 | |||||
globalLogo: state => state.user.globalLogo, //全局logo | |||||
screenLogo: state => state.user.screenLogo, //大屏logo | |||||
} | |||||
export default getters |
@@ -1,19 +1,23 @@ | |||||
import Vue from 'vue'; | |||||
import Vuex from 'vuex'; | |||||
import VuexPersistence from 'vuex-persist'; | |||||
import Vue from 'vue' | |||||
import Vuex from 'vuex' | |||||
import app from './modules/app' | |||||
import user from './modules/user' | |||||
import tagsView from './modules/tagsView' | |||||
import permission from './modules/permission' | |||||
import settings from './modules/settings' | |||||
import getters from './getters' | |||||
import app from '@/store/app/index.js'; | |||||
Vue.use(Vuex) | |||||
Vue.use(Vuex); | |||||
const vuexLocal = new VuexPersistence({ | |||||
key: 'rongxin.nongjing.expo', | |||||
modules: ['app'] | |||||
}); | |||||
export default new Vuex.Store({ | |||||
const store = new Vuex.Store({ | |||||
modules: { | modules: { | ||||
app | |||||
app, | |||||
user, | |||||
tagsView, | |||||
permission, | |||||
settings | |||||
}, | }, | ||||
plugins: [vuexLocal.plugin] | |||||
}); | |||||
getters | |||||
}) | |||||
export default store |
@@ -0,0 +1,54 @@ | |||||
const state = { | |||||
sidebar: { | |||||
withoutAnimation: false | |||||
}, | |||||
device: 'desktop', | |||||
} | |||||
const mutations = { | |||||
TOGGLE_SIDEBAR: state => { | |||||
state.sidebar.opened = !state.sidebar.opened | |||||
state.sidebar.withoutAnimation = false | |||||
}, | |||||
CLOSE_SIDEBAR: (state, withoutAnimation) => { | |||||
state.sidebar.opened = false | |||||
state.sidebar.withoutAnimation = withoutAnimation | |||||
}, | |||||
OPEN_SIDEBAR: state => { | |||||
state.sidebar.opened = true; | |||||
state.sidebar.withoutAnimation = false; | |||||
}, | |||||
TOGGLE_DEVICE: (state, device) => { | |||||
state.device = device | |||||
}, | |||||
SET_SIZE: (state, size) => { | |||||
state.size = size | |||||
} | |||||
} | |||||
const actions = { | |||||
toggleSideBar ({ commit }) { | |||||
commit('TOGGLE_SIDEBAR') | |||||
}, | |||||
closeSideBar ({ commit }, { withoutAnimation }) { | |||||
commit('CLOSE_SIDEBAR', withoutAnimation) | |||||
}, | |||||
openSideBar ({ commit }) { | |||||
commit('OPEN_SIDEBAR') | |||||
}, | |||||
toggleDevice ({ commit }, device) { | |||||
commit('TOGGLE_DEVICE', device) | |||||
}, | |||||
setSize ({ commit }, size) { | |||||
commit('SET_SIZE', size) | |||||
} | |||||
} | |||||
export default { | |||||
namespaced: true, | |||||
state, | |||||
mutations, | |||||
actions | |||||
} |
@@ -0,0 +1,51 @@ | |||||
import { constantRoutes } from '@/router' | |||||
const permission = { | |||||
state: { | |||||
routes: [], | |||||
addRoutes: [], | |||||
sidebarRouters: [] | |||||
}, | |||||
mutations: { | |||||
SET_ROUTES: (state, routes) => { | |||||
state.addRoutes = routes | |||||
state.routes = constantRoutes.concat(routes) | |||||
}, | |||||
SET_SIDEBAR_ROUTERS: (state, routers) => { | |||||
state.sidebarRouters = constantRoutes.concat(routers) | |||||
}, | |||||
}, | |||||
actions: { | |||||
} | |||||
} | |||||
function filterChildren (childrenMap) { | |||||
var children = [] | |||||
childrenMap.forEach((el, index) => { | |||||
if (el.children && el.children.length) { | |||||
if (el.component === 'ParentView') { | |||||
el.children.forEach(c => { | |||||
c.path = el.path + '/' + c.path | |||||
if (c.children && c.children.length) { | |||||
children = children.concat(filterChildren(c.children, c)) | |||||
return | |||||
} | |||||
children.push(c) | |||||
}) | |||||
return | |||||
} | |||||
} | |||||
children = children.concat(el) | |||||
}) | |||||
return children | |||||
} | |||||
export const loadView = (view) => { | |||||
if (process.env.NODE_ENV === 'development') { | |||||
return (resolve) => require([`@/views/${view}`], resolve) | |||||
} else { | |||||
// 使用 import 实现生产环境的路由懒加载 | |||||
return () => import(`@/views/${view}`) | |||||
} | |||||
} | |||||
export default permission |
@@ -0,0 +1,18 @@ | |||||
const state = { | |||||
} | |||||
const mutations = { | |||||
} | |||||
const actions = { | |||||
} | |||||
export default { | |||||
namespaced: true, | |||||
state, | |||||
mutations, | |||||
actions | |||||
} | |||||
@@ -0,0 +1,159 @@ | |||||
const state = { | |||||
visitedViews: [], | |||||
cachedViews: [] | |||||
} | |||||
const mutations = { | |||||
ADD_VISITED_VIEW: (state, view) => { | |||||
if (state.visitedViews.some(v => v.path === view.path)) return | |||||
state.visitedViews.push( | |||||
Object.assign({}, view, { | |||||
title: view.meta.title || 'no-name' | |||||
}) | |||||
) | |||||
}, | |||||
ADD_CACHED_VIEW: (state, view) => { | |||||
if (state.cachedViews.includes(view.name)) return | |||||
if (!view.meta.noCache) { | |||||
state.cachedViews.push(view.name) | |||||
} | |||||
}, | |||||
DEL_VISITED_VIEW: (state, view) => { | |||||
for (const [i, v] of state.visitedViews.entries()) { | |||||
if (v.path === view.path) { | |||||
state.visitedViews.splice(i, 1) | |||||
break | |||||
} | |||||
} | |||||
}, | |||||
DEL_CACHED_VIEW: (state, view) => { | |||||
const index = state.cachedViews.indexOf(view.name) | |||||
index > -1 && state.cachedViews.splice(index, 1) | |||||
}, | |||||
DEL_OTHERS_VISITED_VIEWS: (state, view) => { | |||||
state.visitedViews = state.visitedViews.filter(v => { | |||||
return v.meta.affix || v.path === view.path | |||||
}) | |||||
}, | |||||
DEL_OTHERS_CACHED_VIEWS: (state, view) => { | |||||
const index = state.cachedViews.indexOf(view.name) | |||||
if (index > -1) { | |||||
state.cachedViews = state.cachedViews.slice(index, index + 1) | |||||
} else { | |||||
state.cachedViews = [] | |||||
} | |||||
}, | |||||
DEL_ALL_VISITED_VIEWS: state => { | |||||
// keep affix tags | |||||
const affixTags = state.visitedViews.filter(tag => tag.meta.affix) | |||||
state.visitedViews = affixTags | |||||
}, | |||||
DEL_ALL_CACHED_VIEWS: state => { | |||||
state.cachedViews = [] | |||||
}, | |||||
UPDATE_VISITED_VIEW: (state, view) => { | |||||
for (let v of state.visitedViews) { | |||||
if (v.path === view.path) { | |||||
v = Object.assign(v, view) | |||||
break | |||||
} | |||||
} | |||||
} | |||||
} | |||||
const actions = { | |||||
addView({ dispatch }, view) { | |||||
dispatch('addVisitedView', view) | |||||
dispatch('addCachedView', view) | |||||
}, | |||||
addVisitedView({ commit }, view) { | |||||
commit('ADD_VISITED_VIEW', view) | |||||
}, | |||||
addCachedView({ commit }, view) { | |||||
commit('ADD_CACHED_VIEW', view) | |||||
}, | |||||
delView({ dispatch, state }, view) { | |||||
return new Promise(resolve => { | |||||
dispatch('delVisitedView', view) | |||||
dispatch('delCachedView', view) | |||||
resolve({ | |||||
visitedViews: [...state.visitedViews], | |||||
cachedViews: [...state.cachedViews] | |||||
}) | |||||
}) | |||||
}, | |||||
delVisitedView({ commit, state }, view) { | |||||
return new Promise(resolve => { | |||||
commit('DEL_VISITED_VIEW', view) | |||||
resolve([...state.visitedViews]) | |||||
}) | |||||
}, | |||||
delCachedView({ commit, state }, view) { | |||||
return new Promise(resolve => { | |||||
commit('DEL_CACHED_VIEW', view) | |||||
resolve([...state.cachedViews]) | |||||
}) | |||||
}, | |||||
delOthersViews({ dispatch, state }, view) { | |||||
return new Promise(resolve => { | |||||
dispatch('delOthersVisitedViews', view) | |||||
dispatch('delOthersCachedViews', view) | |||||
resolve({ | |||||
visitedViews: [...state.visitedViews], | |||||
cachedViews: [...state.cachedViews] | |||||
}) | |||||
}) | |||||
}, | |||||
delOthersVisitedViews({ commit, state }, view) { | |||||
return new Promise(resolve => { | |||||
commit('DEL_OTHERS_VISITED_VIEWS', view) | |||||
resolve([...state.visitedViews]) | |||||
}) | |||||
}, | |||||
delOthersCachedViews({ commit, state }, view) { | |||||
return new Promise(resolve => { | |||||
commit('DEL_OTHERS_CACHED_VIEWS', view) | |||||
resolve([...state.cachedViews]) | |||||
}) | |||||
}, | |||||
delAllViews({ dispatch, state }, view) { | |||||
return new Promise(resolve => { | |||||
dispatch('delAllVisitedViews', view) | |||||
dispatch('delAllCachedViews', view) | |||||
resolve({ | |||||
visitedViews: [...state.visitedViews], | |||||
cachedViews: [...state.cachedViews] | |||||
}) | |||||
}) | |||||
}, | |||||
delAllVisitedViews({ commit, state }) { | |||||
return new Promise(resolve => { | |||||
commit('DEL_ALL_VISITED_VIEWS') | |||||
resolve([...state.visitedViews]) | |||||
}) | |||||
}, | |||||
delAllCachedViews({ commit, state }) { | |||||
return new Promise(resolve => { | |||||
commit('DEL_ALL_CACHED_VIEWS') | |||||
resolve([...state.cachedViews]) | |||||
}) | |||||
}, | |||||
updateVisitedView({ commit }, view) { | |||||
commit('UPDATE_VISITED_VIEW', view) | |||||
} | |||||
} | |||||
export default { | |||||
namespaced: true, | |||||
state, | |||||
mutations, | |||||
actions | |||||
} |
@@ -0,0 +1,341 @@ | |||||
import { login, singleLogin, logout, getInfo, smsLogin, getConfig, systemConfig, chungengUserLogin } from '@/api/login' | |||||
import { getToken, setToken, removeToken } from '@/utils/auth' | |||||
const user = { | |||||
state: { | |||||
token: getToken(), | |||||
name: '', | |||||
avatar: '', | |||||
roles: [], | |||||
userRoles: [], | |||||
permissions: [], | |||||
bookName: '', | |||||
setUpModuleId: '', | |||||
//获取登录页相关标题 | |||||
systemConfigList: [], | |||||
//系统名称 | |||||
loginSystemName: '', | |||||
//浏览器页签名称 | |||||
browserName: '', | |||||
//技术支持 | |||||
technicalSupport: '', | |||||
//是否阅读须知 | |||||
noticeThree: '', | |||||
//界面logo | |||||
globalLogo: '', | |||||
//系统大屏logo | |||||
screenLogo: '' | |||||
}, | |||||
mutations: { | |||||
SET_TOKEN: (state, token) => { | |||||
state.token = token | |||||
}, | |||||
SET_SETUPMODULE: (state, setUpModuleId) => { | |||||
state.setUpModuleId = setUpModuleId | |||||
}, | |||||
SET_NAME: (state, name) => { | |||||
state.name = name | |||||
}, | |||||
SET_USERID: (state, userId) => { | |||||
state.userId = userId | |||||
}, | |||||
SET_NICKNAME: (state, nickName) => { | |||||
state.nickName = nickName | |||||
}, | |||||
SET_AVATAR: (state, avatar) => { | |||||
state.avatar = avatar | |||||
}, | |||||
SET_ROLES: (state, roles) => { | |||||
state.roles = roles | |||||
}, | |||||
SET_USERROLES: (state, roles) => { | |||||
state.userRoles = roles | |||||
}, | |||||
SET_PERMISSIONS: (state, permissions) => { | |||||
state.permissions = permissions | |||||
}, | |||||
SET_LOGINDEPTID: (state, loginDeptId) => { | |||||
state.loginDeptId = loginDeptId | |||||
}, | |||||
SET_LOGINBOOKID: (state, loginBookId) => { | |||||
state.loginBookId = loginBookId | |||||
}, | |||||
SET_DEPTNAME: (state, deptName) => { | |||||
state.deptName = deptName | |||||
}, | |||||
SET_DEPT_NAME: (state, deptname) => { | |||||
state.deptname = deptname | |||||
}, | |||||
SET_LEADER: (state, leader) => { | |||||
state.leader = leader | |||||
}, | |||||
SET_DEPTID: (state, deptId) => { | |||||
state.deptId = deptId | |||||
}, | |||||
SET_BOOKNAME: (state, bookName) => { | |||||
state.bookName = bookName | |||||
}, | |||||
SET_BUSINESSOWNERSHIP: (state, businessOwnership) => { | |||||
state.businessOwnership = businessOwnership | |||||
}, | |||||
SET_OFFICIALSEAL: (state, officialSeal) => { | |||||
state.officialSeal = officialSeal | |||||
}, | |||||
SET_DEPTLEVEL: (state, deptLevel) => { | |||||
state.deptLevel = deptLevel | |||||
}, | |||||
SET_BASEROUTINGURL: (state, baseRoutingUrl) => { | |||||
state.baseRoutingUrl = baseRoutingUrl | |||||
}, | |||||
SET_BUSINESSLEVEL: (state, businessLevel) => { | |||||
state.businessLevel = businessLevel | |||||
}, | |||||
SET_BOOKTYPE: (state, bookType) => { | |||||
state.bookType = bookType | |||||
}, | |||||
SET_PARENTDEPTNAME: (state, parentDeptName) => { | |||||
state.parentDeptName = parentDeptName | |||||
}, | |||||
SET_USERTYPE: (state, userType) => { | |||||
state.userType = userType | |||||
}, | |||||
SET_ALLDEPTNAME: (state, allDeptName) => { | |||||
state.allDeptName = allDeptName | |||||
}, | |||||
SET_STSTEMCONFIGlIST: (state, systemConfigList) => { | |||||
state.systemConfigList = systemConfigList | |||||
}, | |||||
SET_LOGINSYSTEMNAME: (state, loginSystemName) => { | |||||
state.loginSystemName = loginSystemName | |||||
}, | |||||
SET_BORWSERNAME: (state, browserName) => { | |||||
state.browserName = browserName | |||||
}, | |||||
SET_TECHNICALSUPPORT: (state, technicalSupport) => { | |||||
state.technicalSupport = technicalSupport | |||||
}, | |||||
SET_BIGSCREENURL: (state, bigscreenUrl) => { | |||||
state.bigscreenUrl = bigscreenUrl | |||||
}, | |||||
SET_NOTICETHREE: (state, noticeThree) => { | |||||
state.noticeThree = noticeThree | |||||
}, | |||||
SET_GLOBALLOGO: (state, globalLogo) => { | |||||
state.globalLogo = globalLogo | |||||
}, | |||||
SET_SCREENLOGO: (state, screenLogo) => { | |||||
state.screenLogo = screenLogo | |||||
}, | |||||
}, | |||||
actions: { | |||||
// 登录 | |||||
Login ({ commit }, userInfo) { | |||||
const username = userInfo.username.trim() | |||||
const password = userInfo.password | |||||
const code = userInfo.code | |||||
const uuid = userInfo.uuid | |||||
return new Promise((resolve, reject) => { | |||||
login(username, password, code, uuid).then(res => { | |||||
setToken(res.token) | |||||
commit('SET_TOKEN', res.token) | |||||
resolve(res) | |||||
}).catch(error => { | |||||
reject(error) | |||||
}) | |||||
}) | |||||
}, | |||||
SingleLogin ({ commit }, userInfo) { | |||||
const code = userInfo.code | |||||
return new Promise((resolve, reject) => { | |||||
singleLogin(code).then(res => { | |||||
setToken(res.token) | |||||
commit('SET_TOKEN', res.token) | |||||
resolve() | |||||
}).catch(error => { | |||||
reject(error) | |||||
}) | |||||
}) | |||||
}, | |||||
//设置用户当前模块系统 | |||||
setUpModule ({ commit }, setUpModuleId) { | |||||
commit('SET_SETUPMODULE', setUpModuleId) | |||||
}, | |||||
//短信验证码登录 | |||||
SmsLogin ({ commit }, userInfo) { | |||||
const mobile = userInfo.mobile.trim() | |||||
const smsCode = userInfo.smsCode | |||||
const uuid = userInfo.uuid | |||||
return new Promise((resolve, reject) => { | |||||
smsLogin(mobile, smsCode, uuid).then(res => { | |||||
setToken(res.token) | |||||
commit('SET_TOKEN', res.token) | |||||
resolve() | |||||
}).catch(error => { | |||||
reject(error) | |||||
}) | |||||
}) | |||||
}, | |||||
// 获取用户信息 | |||||
GetInfo ({ commit, state }) { | |||||
return new Promise((resolve, reject) => { | |||||
getInfo(state.token).then(res => { | |||||
if (res && res.code && res.code == 200) { | |||||
const user = res.user | |||||
// const avatar = user.avatar == "" ? require("@/assets/images/profile.jpg") : process.env.VUE_APP_BASE_API + user.avatar; | |||||
const avatar = user.avatar == "" ? "" : process.env.VUE_APP_BASE_API + user.avatar; | |||||
if (res.roles && res.roles.length > 0) { // 验证返回的roles是否是一个非空数组 | |||||
commit('SET_ROLES', res.roles) | |||||
commit('SET_PERMISSIONS', res.permissions) | |||||
} else { | |||||
commit('SET_ROLES', ['ROLE_DEFAULT']) | |||||
} | |||||
commit('SET_USERROLES', user.roles) | |||||
commit('SET_BOOKNAME', user.bookName) | |||||
commit('SET_NAME', user.userName) | |||||
commit('SET_USERID', user.userId) | |||||
commit('SET_NICKNAME', user.nickName) | |||||
commit('SET_LOGINDEPTID', user.loginDeptId) | |||||
commit('SET_LOGINBOOKID', user.loginBookId) | |||||
commit('SET_DEPTNAME', user.deptName) | |||||
commit('SET_DEPT_NAME', user.dept.deptName) | |||||
commit('SET_LEADER', user.dept.leader) | |||||
commit('SET_DEPTID', user.deptId) | |||||
commit('SET_AVATAR', avatar) | |||||
commit('SET_BUSINESSOWNERSHIP', user.businessOwnership) | |||||
commit('SET_BUSINESSLEVEL', user.businessLevel) | |||||
commit('SET_BOOKTYPE', user.bookType) | |||||
commit('SET_PARENTDEPTNAME', user.parentDeptName) | |||||
commit('SET_USERTYPE', user.userType) | |||||
commit('SET_ALLDEPTNAME', user.allDeptName) | |||||
commit('SET_NOTICETHREE', user.noticeThree) | |||||
commit('SET_OFFICIALSEAL', user.officialSeal) | |||||
} | |||||
getConfig().then((num) => { | |||||
// console.log(res) | |||||
if (num && num.code == 200) { | |||||
let content = num.data; | |||||
commit('SET_DEPTLEVEL', content.deptLevel) | |||||
} | |||||
}) | |||||
systemConfig({ configKey: 'system.attachment' }).then((data) => { | |||||
if (data.code == 200) { | |||||
let content = data.rows; | |||||
if (content.length != 0) { | |||||
let baseRoutingUrl = content[0].configValue; | |||||
commit('SET_BASEROUTINGURL', baseRoutingUrl) | |||||
} | |||||
} | |||||
}) | |||||
resolve(res) | |||||
}).catch(error => { | |||||
reject(error) | |||||
}) | |||||
}) | |||||
}, | |||||
//获取登录页相关标题 | |||||
systemTitle ({ commit, state }) { | |||||
return new Promise((resolve, reject) => { | |||||
systemConfig({ configKey: 'system' }).then((data) => { | |||||
let content = data.rows; | |||||
commit('SET_STSTEMCONFIGlIST', content) | |||||
//系统名称 | |||||
let loginSystemName = ''; | |||||
//浏览器页签名称 | |||||
let browserName = ''; | |||||
//技术支持 | |||||
let technicalSupport = ''; | |||||
//大数据指挥舱 | |||||
let bigscreenUrl = ''; | |||||
//界面logo | |||||
let globalLogo = ''; | |||||
//系统大屏logo | |||||
let screenLogo = ''; | |||||
content.forEach((v, i) => { | |||||
if (v.configKey == 'system.login.name') { | |||||
loginSystemName = v.configValue | |||||
} else if (v.configKey == 'system.browser.name') { | |||||
browserName = v.configValue | |||||
} else if (v.configKey == 'system.company.name') { | |||||
technicalSupport = v.configValue | |||||
} else if (v.configKey == 'system.bigscreen.url') { | |||||
bigscreenUrl = v.configValue | |||||
} else if (v.configKey == 'system.logo.pic') { | |||||
globalLogo = v.configValue | |||||
} else if (v.configKey == 'system.logo5.pic') { | |||||
screenLogo = v.configValue | |||||
} | |||||
}) | |||||
commit('SET_LOGINSYSTEMNAME', loginSystemName) | |||||
commit('SET_BORWSERNAME', browserName) | |||||
commit('SET_TECHNICALSUPPORT', technicalSupport) | |||||
commit('SET_BIGSCREENURL', bigscreenUrl) | |||||
commit('SET_GLOBALLOGO', globalLogo) | |||||
commit('SET_SCREENLOGO', screenLogo) | |||||
resolve() | |||||
}).catch(error => { | |||||
reject(error) | |||||
}) | |||||
}) | |||||
}, | |||||
// 退出系统 | |||||
LogOut ({ commit, state }) { | |||||
return new Promise((resolve, reject) => { | |||||
logout(state.token).then(() => { | |||||
commit('SET_TOKEN', '') | |||||
commit('SET_ROLES', []) | |||||
commit('SET_PERMISSIONS', []) | |||||
removeToken() | |||||
resolve() | |||||
}).catch(error => { | |||||
reject(error) | |||||
}) | |||||
}) | |||||
}, | |||||
// 前端 登出 | |||||
FedLogOut ({ commit }) { | |||||
return new Promise(resolve => { | |||||
commit('SET_TOKEN', '') | |||||
commit('SET_ROLES', []) | |||||
commit('SET_PERMISSIONS', []) | |||||
removeToken() | |||||
resolve() | |||||
}) | |||||
}, | |||||
// 更新用户信息 | |||||
// 春耕App用户登录 | |||||
ChungengLogin ({ commit }, userInfo) { | |||||
const code = userInfo.code; | |||||
return new Promise((resolve, reject) => { | |||||
chungengUserLogin(code).then(res => { | |||||
setToken(res.token) | |||||
commit('SET_TOKEN', res.token) | |||||
resolve(res.data) | |||||
}).catch(error => { | |||||
reject(error) | |||||
}) | |||||
}) | |||||
}, | |||||
} | |||||
} | |||||
export default user |
@@ -9,11 +9,11 @@ $border_color: rgba(30, 56, 92, 1); | |||||
display: block; | display: block; | ||||
.el-input__inner { | .el-input__inner { | ||||
height: 60px; | |||||
line-height: 60px; | |||||
background: $bg_color; | |||||
border: 1px solid $border_color; | |||||
color: #FFFFFF; | |||||
// height: 60px; | |||||
// line-height: 60px; | |||||
// background: $bg_color; | |||||
// border: 1px solid $border_color; | |||||
// color: #FFFFFF; | |||||
} | } | ||||
.el-input__inner::-webkit-input-placeholder { | .el-input__inner::-webkit-input-placeholder { | ||||
@@ -84,11 +84,11 @@ $border_color: rgba(30, 56, 92, 1); | |||||
} | } | ||||
.el-input__inner { | .el-input__inner { | ||||
width: 100% !important; | |||||
color: #DFF2FF; | |||||
border: 0; | |||||
border-radius: 0; | |||||
background: $bg_color; | |||||
// width: 100% !important; | |||||
// color: #DFF2FF; | |||||
// border: 0; | |||||
// border-radius: 0; | |||||
// background: $bg_color; | |||||
} | } | ||||
.el-range-input { | .el-range-input { | ||||
@@ -2,7 +2,7 @@ const TokenKey = 'Admin-Token'; | |||||
// 获取token | // 获取token | ||||
export function getToken () { | export function getToken () { | ||||
return 'eyJhbGciOiJIUzUxMiJ9.eyJsb2dpbl91c2VyX2tleSI6IjNlMjYwNzA2LTQzZWEtNGJlMS1hZDBiLTQ1YTIzMzk1MmNiOSJ9._B3v74EZpYO8WspNmKtQU1t7AoxrFdRWuhUNojKDrk5gTakfdfS8rcD5USwwvRwDgRaR1DvmP6E2fhspkB-8kg'; // 将token保存在本地 | |||||
return localStorage.getItem(TokenKey); | |||||
} | } | ||||
// 保存token | // 保存token | ||||
export function setToken (token) { | export function setToken (token) { | ||||
@@ -0,0 +1,30 @@ | |||||
import JSEncrypt from 'jsencrypt/bin/jsencrypt.min.js' | |||||
// 密钥对生成 http://web.chacuo.net/netrsakeypair | |||||
const publicKey = 'MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAKoR8mX0rGKLqzcWmOzbfj64K8ZIgOdH\n' + | |||||
'nzkXSOVOZbFu/TJhZ7rFAN+eaGkl3C4buccQd/EjEsj9ir7ijT7h96MCAwEAAQ==' | |||||
const privateKey = 'MIIBVAIBADANBgkqhkiG9w0BAQEFAASCAT4wggE6AgEAAkEAqhHyZfSsYourNxaY\n' + | |||||
'7Nt+PrgrxkiA50efORdI5U5lsW79MmFnusUA355oaSXcLhu5xxB38SMSyP2KvuKN\n' + | |||||
'PuH3owIDAQABAkAfoiLyL+Z4lf4Myxk6xUDgLaWGximj20CUf+5BKKnlrK+Ed8gA\n' + | |||||
'kM0HqoTt2UZwA5E2MzS4EI2gjfQhz5X28uqxAiEA3wNFxfrCZlSZHb0gn2zDpWow\n' + | |||||
'cSxQAgiCstxGUoOqlW8CIQDDOerGKH5OmCJ4Z21v+F25WaHYPxCFMvwxpcw99Ecv\n' + | |||||
'DQIgIdhDTIqD2jfYjPTY8Jj3EDGPbH2HHuffvflECt3Ek60CIQCFRlCkHpi7hthh\n' + | |||||
'YhovyloRYsM+IS9h/0BzlEAuO0ktMQIgSPT3aFAgJYwKpqRYKlLDVcflZFCKY7u3\n' + | |||||
'UP8iWi1Qw0Y=' | |||||
// 加密 | |||||
export function encrypt (txt) { | |||||
const encryptor = new JSEncrypt() | |||||
encryptor.setPublicKey(publicKey) // 设置公钥 | |||||
return encryptor.encrypt(txt) // 对数据进行加密 | |||||
} | |||||
// 解密 | |||||
export function decrypt (txt) { | |||||
const encryptor = new JSEncrypt() | |||||
encryptor.setPrivateKey(privateKey) // 设置私钥 | |||||
return encryptor.decrypt(txt) // 对数据进行解密 | |||||
} | |||||
@@ -0,0 +1,50 @@ | |||||
<div class="page bk"> | |||||
<h1 class="text">西峡县集体资产监管一张图</h1> | |||||
<div class="login"> | |||||
<el-form ref="loginForm" :model="loginForm" :rules="loginRules" class="login-form" label-position="right" | |||||
label-width="100px"> | |||||
<el-form-item prop="username" label="用户名"> | |||||
<el-input v-model="loginForm.username" class="loginInput" type="text" auto-complete="off" placeholder="账号"> | |||||
</el-input> | |||||
</el-form-item> | |||||
<el-form-item prop="password" label="密码"> | |||||
<el-input v-model="loginForm.password" type="password" class="loginInput" auto-complete="off" placeholder="密码" | |||||
@keyup.enter.native="handleLogin" show-password> | |||||
</el-input> | |||||
</el-form-item> | |||||
<el-row :gutter="20" :span="24"> | |||||
<el-col :span="16"> | |||||
<el-form-item prop="code" label="验证码"> | |||||
<el-input v-model="loginForm.code" auto-complete="off" class="loginInput" placeholder="验证码" | |||||
@keyup.enter.native="handleLogin"> | |||||
</el-input> | |||||
</el-form-item> | |||||
</el-col> | |||||
<el-col :span="6"> | |||||
<div class="img"> | |||||
<img :src="codeUrl" @click="getCode" class="login_code_img" /> | |||||
</div> | |||||
</el-col> | |||||
</el-row> | |||||
<el-row> | |||||
<div class="auxiliary"> | |||||
<el-checkbox class="keepMind" v-model="loginForm.rememberMe">记住密码 </el-checkbox> | |||||
<div class="sms-login"> | |||||
<el-button size="mini" type="text" @click.native.prevent="loginMethod"> | |||||
<span>忘记密码</span> | |||||
</el-button> | |||||
</div> | |||||
</div> | |||||
</el-row> | |||||
<el-form-item style="width: 100%"> | |||||
<el-button :loading="loading" size="medium" type="primary" class="submitForm" | |||||
@click.native.prevent="handleLogin"> | |||||
<span v-if="!loading">立即登录</span> | |||||
<span v-else>登 录 中...</span> | |||||
</el-button> | |||||
</el-form-item> | |||||
</el-form> | |||||
</div> | |||||
<p class="tip">Copyright @ 2022 中农融信 (北京)科技股份有限公司 京ICP备06068185号-8</p> | |||||
</div> |
@@ -0,0 +1,162 @@ | |||||
import { getCodeImg } from "@/api/login"; | |||||
import Cookies from "js-cookie"; | |||||
import { encrypt } from '@/utils/jsencrypt' // 公钥,私钥都声明在里面 | |||||
export default { | |||||
components: { | |||||
}, | |||||
data () { | |||||
return { | |||||
isSmsLogin: false, | |||||
loginForm: { | |||||
username: "", | |||||
password: "", | |||||
rememberMe: false, | |||||
code: "", | |||||
uuid: "", | |||||
mobile: "", | |||||
smsCode: "", | |||||
}, | |||||
loading: false, | |||||
codeUrl: "", | |||||
loginRules: { | |||||
username: [ | |||||
{ required: true, trigger: "blur", message: "账号不能为空" }, | |||||
], | |||||
mobile: [ | |||||
{ required: true, trigger: "blur", message: "手机号不能为空" }, | |||||
], | |||||
password: [ | |||||
{ required: true, trigger: "blur", message: "口令不能为空" }, | |||||
], | |||||
code: [{ required: true, trigger: "blur", message: "验证码不能为空" }], | |||||
// smsCode: [{ required: true, trigger: "blur", message: "验证码不能为空" }] | |||||
}, | |||||
}; | |||||
}, | |||||
computed: { | |||||
}, | |||||
created () { | |||||
this.getCode(); | |||||
}, | |||||
mounted () { | |||||
}, | |||||
methods: { | |||||
getCode () { | |||||
getCodeImg().then((res) => { | |||||
this.codeUrl = "data:image/gif;base64," + res.img; | |||||
this.loginForm.uuid = res.uuid; | |||||
}); | |||||
}, | |||||
handleLogin () { | |||||
this.$refs.loginForm.validate((valid) => { | |||||
if (valid) { | |||||
if (this.isSmsLogin) { | |||||
this.loading = true; | |||||
if (this.loginForm.rememberMe) { | |||||
Cookies.set("mobile", this.loginForm.mobile, { expires: 30 }); | |||||
Cookies.set("rememberMe", this.loginForm.rememberMe, { | |||||
expires: 30, | |||||
}); | |||||
} else { | |||||
Cookies.remove("mobile"); | |||||
Cookies.remove("rememberMe"); | |||||
} | |||||
if (this.viewChecked == true) { | |||||
Cookies.set("cookieViewChecked", this.viewChecked, { | |||||
expires: 30, | |||||
}); | |||||
} else { | |||||
Cookies.remove("cookieViewChecked"); | |||||
} | |||||
this.$store | |||||
.dispatch("SmsLogin", this.loginForm) | |||||
.then((res) => { | |||||
Cookies.remove("viewPagesMonophylyId"); | |||||
Cookies.remove("viewPagesMonophyly"); | |||||
if (this.viewChecked == true) { | |||||
this.$router.push({ path: "/nav" }); | |||||
} else { | |||||
if (res && res.code && res.code == 200) { | |||||
let requireUpdatePassword = res.requireUpdatePassword; | |||||
if (requireUpdatePassword) { | |||||
//重置密码 | |||||
this.$set(this.resetPwd, "open", true); | |||||
} else { | |||||
this.$router | |||||
.push({ path: this.redirect || "/" }) | |||||
.catch(() => { }); | |||||
} | |||||
} | |||||
} | |||||
}) | |||||
.catch((error) => { | |||||
const errorString = error + ""; | |||||
this.loading = false; | |||||
if (errorString.indexOf("证书无效") > -1) { | |||||
loginError().then((res) => { | |||||
this.upload.open = true; | |||||
this.upload.loginJson = res.msg; | |||||
}); | |||||
} | |||||
this.getCode(); | |||||
}); | |||||
} else { | |||||
this.loading = true; | |||||
if (this.loginForm.rememberMe) { | |||||
Cookies.set("username", this.loginForm.username, { expires: 30 }); | |||||
Cookies.set("password", encrypt(this.loginForm.password), { | |||||
expires: 30, | |||||
}); | |||||
Cookies.set("rememberMe", this.loginForm.rememberMe, { | |||||
expires: 30, | |||||
}); | |||||
} else { | |||||
Cookies.remove("username"); | |||||
Cookies.remove("password"); | |||||
Cookies.remove("rememberMe"); | |||||
} | |||||
if (this.viewChecked == true) { | |||||
Cookies.set("cookieViewChecked", this.viewChecked, { | |||||
expires: 30, | |||||
}); | |||||
} else { | |||||
Cookies.remove("cookieViewChecked"); | |||||
} | |||||
this.$store | |||||
.dispatch("Login", this.loginForm) | |||||
.then((res) => { | |||||
Cookies.remove("viewPagesMonophylyId"); | |||||
Cookies.remove("viewPagesMonophyly"); | |||||
if (this.viewChecked == true) { | |||||
this.$router.push({ path: "/nav" }); | |||||
} else { | |||||
if (res && res.code && res.code == 200) { | |||||
let requireUpdatePassword = res.requireUpdatePassword; | |||||
if (requireUpdatePassword) { | |||||
//重置密码 | |||||
this.$set(this.resetPwd, "open", true); | |||||
} else { | |||||
this.$router | |||||
.push({ path: this.redirect || "/nav" }) | |||||
} | |||||
} | |||||
} | |||||
}) | |||||
.catch((error) => { | |||||
console.log(error); | |||||
const errorString = error + ""; | |||||
this.loading = false; | |||||
if (errorString.indexOf("证书无效") > -1) { | |||||
loginError().then((res) => { | |||||
this.upload.open = true; | |||||
this.upload.loginJson = res.msg; | |||||
}); | |||||
} | |||||
this.getCode(); | |||||
}); | |||||
} | |||||
} | |||||
}); | |||||
}, | |||||
} | |||||
}; |
@@ -0,0 +1,82 @@ | |||||
.bk { | |||||
background: url('./bk.png'); | |||||
background-size: 100% 100%; | |||||
.text { | |||||
top: 110px; | |||||
position: absolute; | |||||
left: 50%; | |||||
transform: translateX(-50%); | |||||
font-family: Source Han Sans SC; | |||||
font-weight: bold; | |||||
font-size: 72px; | |||||
color: #FEFEFE; | |||||
line-height: 111px; | |||||
// text-shadow: 0px 3px 3px rgba(30, 63, 112, 0.1); | |||||
background: linear-gradient(180deg, #FEFFFF 17.4072265625%, #a0b9e5 99.6337890625%); | |||||
-webkit-background-clip: text; | |||||
-webkit-text-fill-color: transparent; | |||||
} | |||||
.tip { | |||||
font-size: 16px; | |||||
bottom: 110px; | |||||
position: absolute; | |||||
left: 50%; | |||||
transform: translateX(-50%); | |||||
} | |||||
.login { | |||||
padding: 50px 50px; | |||||
padding-top: 80px; | |||||
position: relative; | |||||
left: 50%; | |||||
top: 50%; | |||||
transform: translate(-50%, -50%); | |||||
height: 543px; | |||||
width: 660px; | |||||
background: url('./login.png'); | |||||
background-size: 100% 100%; | |||||
padding-right: 100px; | |||||
} | |||||
} | |||||
/deep/ .el-form-item__label { | |||||
color: white; | |||||
} | |||||
/deep/ .el-input__inner { | |||||
height: 60px !important; | |||||
} | |||||
.loginInput { | |||||
height: 60px !important; | |||||
} | |||||
.img { | |||||
width: 160px; | |||||
max-height: 60px !important; | |||||
.login_code_img { | |||||
// border: 1px solid red; | |||||
width: 100%; | |||||
height: 100%; | |||||
} | |||||
} | |||||
.auxiliary { | |||||
display: flex; | |||||
align-items: center; | |||||
justify-content: space-between; | |||||
padding-left: 100px; | |||||
} | |||||
.submitForm { | |||||
margin-top: 20px; | |||||
background: linear-gradient(90deg, #1097FF 0%, #1233FF 97%); | |||||
border-radius: 4px; | |||||
height: 60px; | |||||
width: 100%; | |||||
} |
@@ -0,0 +1,4 @@ | |||||
<template src='./index.html'/> | |||||
<script lang='js' src='./index.js'></script> | |||||
<style lang='scss' src='./index.scss' scoped> | |||||
</style> |
@@ -0,0 +1,3 @@ | |||||
<div class="page bk"> | |||||
导航 | |||||
</div> |
@@ -0,0 +1,17 @@ | |||||
export default { | |||||
components: { | |||||
}, | |||||
data () { | |||||
return { | |||||
}; | |||||
}, | |||||
computed: { | |||||
}, | |||||
created () { | |||||
}, | |||||
mounted () { | |||||
}, | |||||
methods: { | |||||
} | |||||
}; |
@@ -0,0 +1,4 @@ | |||||
<template src='./index.html'/> | |||||
<script lang='js' src='./index.js'></script> | |||||
<style lang='scss' src='./index.scss' scoped> | |||||
</style> |