Commit 76aaac5b authored by 罗超's avatar 罗超

处理部分功能

parent 8f091636
...@@ -47,7 +47,7 @@ module.exports = function(ctx) { ...@@ -47,7 +47,7 @@ module.exports = function(ctx) {
build: { build: {
vueRouterMode: 'hash', // available values: 'hash', 'history' vueRouterMode: 'hash', // available values: 'hash', 'history'
env: ctx.dev ? { env: ctx.dev ? {
API: 'http://192.168.1.214:8300/api' API: 'https://localhost:5001/api'
} : { } : {
API: 'https://prod.api.com' API: 'https://prod.api.com'
}, },
......
...@@ -12,7 +12,7 @@ export default { ...@@ -12,7 +12,7 @@ export default {
<style> <style>
@import url('~assets/css/font.css'); @import url('~assets/css/font.css');
@import url('//at.alicdn.com/t/font_2077629_9oybkwrr9es.css'); @import url('//at.alicdn.com/t/font_2077629_t78k31ibux.css');
html, html,
body, body,
......
...@@ -4,10 +4,10 @@ import request from '../../utils/request' ...@@ -4,10 +4,10 @@ import request from '../../utils/request'
* 查询个人详情 * 查询个人详情
* *
*/ */
export function adminUsersRead(data) { export function adminUsersRead() {
return request({ return request({
url: 'system/user/queryLoginUser', url: 'login/GetUserInfo',
method: 'post', method: 'post',
data: data data: {}
}) })
} }
\ No newline at end of file
...@@ -25,6 +25,7 @@ router.beforeEach((to, from, next) => { ...@@ -25,6 +25,7 @@ router.beforeEach((to, from, next) => {
if (!loadAsyncRouter) { if (!loadAsyncRouter) {
// 判断当前用户是否获取权限 // 判断当前用户是否获取权限
loadAsyncRouter = true; loadAsyncRouter = true;
console.log(store.getters.allAuth)
if (store.getters.allAuth) { if (store.getters.allAuth) {
store.dispatch("GenerateRoutes", store.getters.allAuth).then(() => { store.dispatch("GenerateRoutes", store.getters.allAuth).then(() => {
// 根据auths权限生成可访问的路由表 // 根据auths权限生成可访问的路由表
...@@ -39,6 +40,7 @@ router.beforeEach((to, from, next) => { ...@@ -39,6 +40,7 @@ router.beforeEach((to, from, next) => {
...to, ...to,
replace: true replace: true
}); });
LoadingBar.stop();
} }
}); });
} else { } else {
...@@ -54,11 +56,13 @@ router.beforeEach((to, from, next) => { ...@@ -54,11 +56,13 @@ router.beforeEach((to, from, next) => {
path: to.redirectedFrom || "/", path: to.redirectedFrom || "/",
replace: true replace: true
}); });
LoadingBar.stop();
} else { } else {
next({ next({
...to, ...to,
replace: true replace: true
}); });
LoadingBar.stop();
} }
}); });
}) })
......
...@@ -3,18 +3,13 @@ ...@@ -3,18 +3,13 @@
<q-header bordered reveal height-hint="98"> <q-header bordered reveal height-hint="98">
<q-toolbar style="height:60px;" class="q-pr-lg q-pl-lg"> <q-toolbar style="height:60px;" class="q-pr-lg q-pl-lg">
<q-avatar> <q-avatar>
<img src="~assets/images/logo.png"> <img :src="logo">
</q-avatar> </q-avatar>
<q-toolbar-title style="font-family:perfectFont"> <q-toolbar-title style="font-family:perfectFont">
甲鹤日语学院 {{name}}
</q-toolbar-title> </q-toolbar-title>
<q-tabs inline-label style="margin:0 auto; font-family:perfectFont;height:60px" class="text-white" shrink stretch> <q-tabs inline-label style="margin:0 auto; font-family:perfectFont;height:60px" class="text-white" shrink stretch v-if="userInfo">
<q-route-tab name="navs_1" to="/home" label="首页" icon="iconfont icon-shangdian-copy" /> <q-route-tab v-for="(x, i) in userInfo.MenuList" :key="i" :name="`navs_${i}`" :to="x.MenuUrl" :label="x.MenuName" :icon="x.MenuIcon" />
<q-route-tab name="navs_2" to="" label="校园" icon="iconfont icon-xiaoyuan" />
<q-route-tab name="navs_3" to="" label="课程" icon="iconfont icon-kecheng" />
<q-route-tab name="navs_4" to="" label="教务" icon="iconfont icon-jiaowuguanli" />
<q-route-tab name="navs_5" to="" label="网课" icon="iconfont icon-yunying" />
<q-route-tab name="navs_6" to="" label="设置" icon="iconfont icon-shezhi" />
</q-tabs> </q-tabs>
<div class="q-pl-lg"> <div class="q-pl-lg">
<q-btn-dropdown flat color="primary"> <q-btn-dropdown flat color="primary">
...@@ -120,7 +115,7 @@ ...@@ -120,7 +115,7 @@
</q-item> </q-item>
</q-list> </q-list>
</q-btn-dropdown> </q-btn-dropdown>
<q-btn-dropdown flat color="primary" @click="onMainClick"> <q-btn-dropdown flat color="primary">
<template v-slot:label> <template v-slot:label>
<q-avatar size="28px"> <q-avatar size="28px">
<img src="https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1600423326738&di=ec1433b0230f5e4d56273271e8bcaa0b&imgtype=0&src=http%3A%2F%2Fp0.ifengimg.com%2Fpmop%2F2017%2F0907%2F1507748D95DA5B2BE480B783227F8A153CEF1BF3_size38_w867_h533.jpeg"> <img src="https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1600423326738&di=ec1433b0230f5e4d56273271e8bcaa0b&imgtype=0&src=http%3A%2F%2Fp0.ifengimg.com%2Fpmop%2F2017%2F0907%2F1507748D95DA5B2BE480B783227F8A153CEF1BF3_size38_w867_h533.jpeg">
...@@ -129,8 +124,8 @@ ...@@ -129,8 +124,8 @@
<div class="row no-wrap q-pa-md"> <div class="row no-wrap q-pa-md">
<div class="column"> <div class="column">
<div class="text-h6 q-mb-md">Settings</div> <div class="text-h6 q-mb-md">Settings</div>
<q-toggle v-model="mobileData" label="Use Mobile Data" /> <q-toggle label="Use Mobile Data" />
<q-toggle v-model="bluetooth" label="Bluetooth" /> <q-toggle label="Bluetooth" />
</div> </div>
<q-separator vertical inset class="q-mx-lg" /> <q-separator vertical inset class="q-mx-lg" />
...@@ -142,88 +137,83 @@ ...@@ -142,88 +137,83 @@
<div class="text-subtitle1 q-mt-md q-mb-xs">John Doe</div> <div class="text-subtitle1 q-mt-md q-mb-xs">John Doe</div>
<q-btn color="primary" label="Logout" push size="sm" v-close-popup /> <q-btn color="primary" label="Logout" push size="sm" v-close-popup @click="logout" />
</div> </div>
</div> </div>
</q-btn-dropdown> </q-btn-dropdown>
</div> </div>
</q-toolbar> </q-toolbar>
</q-header> </q-header>
<q-page-container class="window-height">
<!-- <q-drawer <div class="row items-stretch full-height">
v-model="leftDrawerOpen" <div style="width:242px;border-right:1px solid #e6e6e6;font-family:perfectFont" class="text-subtitle2">
show-if-above
bordered
content-class="bg-grey-1"
>
<q-list> <q-list>
<q-item-label <q-item to="/school/manager" clickable v-ripple :active="currentPath=='/school/manager'">
header <q-item-section avatar>
class="text-grey-8" <q-icon name="iconfont icon-xuexiaoxiaoquguanli" size="20px" />
> </q-item-section>
Essential Links <q-item-section>校区管理</q-item-section>
</q-item-label> </q-item>
<EssentialLink <q-expansion-item expand-separator icon="iconfont icon-jiangshi" label="讲师管理">
v-for="link in essentialLinks" <q-item clickable v-ripple>
:key="link.title" <q-item-section avatar>
v-bind="link" <q-icon name="iconfont icon-xuexiaoxiaoquguanli" size="20px" />
/> </q-item-section>
<q-item-section>校区管理</q-item-section>
</q-item>
<q-item clickable v-ripple>
<q-item-section avatar>
<q-icon name="iconfont icon-xuexiaoxiaoquguanli" size="20px" />
</q-item-section>
<q-item-section>校区管理</q-item-section>
</q-item>
</q-expansion-item>
<q-item to="/home" clickable v-ripple :active="currentPath=='/home'">
<q-item-section avatar>
<q-icon name="iconfont icon-jiedujiaoyu-fuzhujiaoyu" size="20px" />
</q-item-section>
<q-item-section>助教管理</q-item-section>
</q-item>
<q-item clickable v-ripple>
<q-item-section avatar>
<q-icon name="iconfont icon-banji" size="20px" />
</q-item-section>
<q-item-section>班级管理</q-item-section>
</q-item>
<q-item clickable v-ripple>
<q-item-section avatar>
<q-icon name="iconfont icon-xueyuan" size="20px" />
</q-item-section>
<q-item-section>学员管理</q-item-section>
</q-item>
<q-item clickable v-ripple>
<q-item-section avatar>
<q-icon name="iconfont icon-yiyuanguanliyuan" size="20px" />
</q-item-section>
<q-item-section>后台用户管理</q-item-section>
</q-item>
<q-item clickable v-ripple>
<q-item-section avatar>
<q-icon name="iconfont icon-jiaoseguanli" size="20px" />
</q-item-section>
<q-item-section>角色管理</q-item-section>
</q-item>
</q-list> </q-list>
</q-drawer> --> </div>
<div class="col">
<q-page-container>
<router-view /> <router-view />
</div>
</div>
</q-page-container> </q-page-container>
</q-layout> </q-layout>
</template> </template>
<script> <script>
import EssentialLink from 'components/EssentialLink.vue' import EssentialLink from 'components/EssentialLink.vue'
import {
// const linksData = [{ mapGetters
// title: 'Docs', } from 'vuex'
// caption: 'quasar.dev',
// icon: 'school',
// link: 'https://quasar.dev'
// },
// {
// title: 'Github',
// caption: 'github.com/quasarframework',
// icon: 'code',
// link: 'https://github.com/quasarframework'
// },
// {
// title: 'Discord Chat Channel',
// caption: 'chat.quasar.dev',
// icon: 'chat',
// link: 'https://chat.quasar.dev'
// },
// {
// title: 'Forum',
// caption: 'forum.quasar.dev',
// icon: 'record_voice_over',
// link: 'https://forum.quasar.dev'
// },
// {
// title: 'Twitter',
// caption: '@quasarframework',
// icon: 'rss_feed',
// link: 'https://twitter.quasar.dev'
// },
// {
// title: 'Facebook',
// caption: '@QuasarFramework',
// icon: 'public',
// link: 'https://facebook.quasar.dev'
// },
// {
// title: 'Quasar Awesome',
// caption: 'Community Quasar projects',
// icon: 'favorite',
// link: 'https://awesome.quasar.dev'
// }
// ]
export default { export default {
name: 'MainLayout', name: 'MainLayout',
components: { components: {
...@@ -233,8 +223,34 @@ export default { ...@@ -233,8 +223,34 @@ export default {
return { return {
leftDrawerOpen: false, leftDrawerOpen: false,
//essentialLinks: linksData //essentialLinks: linksData
tab: "navs_1" tab: "navs_1",
currentPath: ""
} }
},
watch: {
$route: {
handler: function (route) {
this.currentPath = route.path
},
immediate: true
} }
},
computed: {
...mapGetters([
'userInfo',
'logo',
'name'
]),
},
methods: {
logout() {
this.$store
.dispatch('LogOut')
.then(() => {
this.$router.push('/login')
})
.catch(() => {})
}
},
} }
</script> </script>
<template>
<div>
This is school {{currentUrl}}
</div>
</template>
<script>
export default {
data() {
return {
currentUrl: ""
}
},
mounted() {
this.currentUrl = this.$route.path
},
}
</script>
<style>
</style>
...@@ -16,7 +16,13 @@ const routes = [{ ...@@ -16,7 +16,13 @@ const routes = [{
path: '', path: '',
component: () => component: () =>
import ('pages/Index.vue') import ('pages/Index.vue')
}] },
{
path: '/school/manager',
component: () =>
import ('pages/school/manager.vue')
}
]
}, },
// Always leave this as last one, // Always leave this as last one,
......
const getters = { const getters = {
userInfo: state => state.user.userInfo, userInfo: state => state.user.userInfo,
logo: state => { logo: state => {
//TODO 根据登录信息返回 if (state.app.name) {
return '' //require('@/assets/img/logo.png') return state.app.name
}
return require('../assets/images/logo.png')
}, },
name: state => { name: state => {
// if (state.app.name) { if (state.app.name) {
// return state.app.name return state.app.name
// } }
//TODO 根据登录信息返回 return '羚羊教育系统'
return '悟空CRM系统'
}, },
// 权限 // 权限
allAuth: state => state.user.allAuth, allAuth: state => state.user.allAuth,
......
...@@ -2,6 +2,7 @@ import Vue from 'vue' ...@@ -2,6 +2,7 @@ import Vue from 'vue'
import Vuex from 'vuex' import Vuex from 'vuex'
import user from './modules/user' import user from './modules/user'
import permission from './modules/permission' import permission from './modules/permission'
import app from './modules/app'
import getters from './getters' import getters from './getters'
Vue.use(Vuex) Vue.use(Vuex)
...@@ -23,7 +24,8 @@ Vue.use(Vuex) ...@@ -23,7 +24,8 @@ Vue.use(Vuex)
const store = new Vuex.Store({ const store = new Vuex.Store({
modules: { modules: {
user, user,
permission permission,
app
}, },
getters, getters,
strict: process.env.DEV strict: process.env.DEV
......
import Lockr from 'lockr'
/** 记录 侧边索引 */
const app = {
state: {
logo: '',
name: ''
},
mutations: {
SET_APPLOGO: (state, logo) => {
state.logo = logo
},
SET_APPNAME: (state, name) => {
state.name = name
}
},
actions: {
// 登录
SystemLogoAndName({
commit
}, { GroupName, GroupLogo }) {
commit('SET_APPNAME', GroupName)
commit('SET_APPLOGO', GroupLogo)
Lockr.set('systemLogo', GroupName)
Lockr.set('systemName', GroupLogo)
}
}
}
export default app
\ No newline at end of file
...@@ -72,6 +72,7 @@ const permission = { ...@@ -72,6 +72,7 @@ const permission = {
}, data) { }, data) {
return new Promise(resolve => { return new Promise(resolve => {
// TODO 实现权限验证 // TODO 实现权限验证
console.log('测试进入')
resolve() resolve()
}) })
} }
......
...@@ -7,7 +7,7 @@ const user = { ...@@ -7,7 +7,7 @@ const user = {
state: { state: {
userInfo: null, // 用户信息 userInfo: null, // 用户信息
//TODO 用户权限 //TODO 用户权限
allAuth: ['/home'], allAuth: ['/home', '/school/manager'],
}, },
mutations: { mutations: {
...@@ -36,7 +36,7 @@ const user = { ...@@ -36,7 +36,7 @@ const user = {
//Lockr.set("authList", data.auth); //Lockr.set("authList", data.auth);
addAuth(token); addAuth(token);
// commit("SET_USERINFO", data.user); commit("SET_USERINFO", r);
// commit('SET_ALLAUTH', data.auth) // commit('SET_ALLAUTH', data.auth)
// TODO 完成登录 读取权限 // TODO 完成登录 读取权限
resolve(data); resolve(data);
...@@ -60,27 +60,32 @@ const user = { ...@@ -60,27 +60,32 @@ const user = {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
adminUsersRead() adminUsersRead()
.then(response => { .then(response => {
commit("SET_USERINFO", response.data); let r = response.Data
delete r.Token
commit("SET_USERINFO", r);
resolve(response); resolve(response);
}) })
.catch(error => { .catch(error => {
reject(error); reject(error);
}); });
}); });
}, },
// 登出 // 登出
LogOut({ commit }) { LogOut({ commit }) {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
logout() // logout()
.then(() => { // .then(() => {
/** flush 清空localStorage .rm('authKey') 按照key清除 */ // /** flush 清空localStorage .rm('authKey') 按照key清除 */
// })
// .catch(error => {
// reject(error);
// });
removeAuth(); removeAuth();
resolve(); resolve();
})
.catch(error => {
reject(error);
});
}); });
} }
} }
......
...@@ -7,7 +7,7 @@ import store from '../store' ...@@ -7,7 +7,7 @@ import store from '../store'
export function removeAuth() { export function removeAuth() {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
cache.rmAxiosCache() cache.rmAxiosCache()
store.commit('SET_ALLAUTH', null) //store.commit('SET_ALLAUTH', null)
delete axios.defaults.headers['Token'] delete axios.defaults.headers['Token']
resolve(true) resolve(true)
}) })
......
...@@ -24,7 +24,7 @@ const cache = { ...@@ -24,7 +24,7 @@ const cache = {
updateAxiosCache: function() { updateAxiosCache: function() {
axios.defaults.headers['Token'] = Lockr.get('Token') axios.defaults.headers['Token'] = Lockr.get('Token')
//TODO 更新用户信息 //TODO 更新用户信息
//store.dispatch('GetUserInfo') store.dispatch('GetUserInfo')
}, },
/** /**
* 移除登录信息 * 移除登录信息
...@@ -32,6 +32,7 @@ const cache = { ...@@ -32,6 +32,7 @@ const cache = {
*/ */
rmAxiosCache: function() { rmAxiosCache: function() {
Lockr.rm('Token') Lockr.rm('Token')
Lockr.rm('loginUserInfo')
} }
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment