6.13提交

This commit is contained in:
zoujiandong 2023-06-13 16:04:55 +08:00
parent fa1ecdafbc
commit 0f0240bc45
15 changed files with 119 additions and 73 deletions

View File

@ -1,2 +1,2 @@
BASE_URL= "https://vue3.go-admin.dev" BASE_URL= "https://vue3.go-admin.dev"
VITE_BASE_URL= "http://dev.hospital.admin.igandanyiyuan.com" VITE_BASE_URL= "http://dev.hospital.admin.api.igandanyiyuan.com"

View File

@ -24,7 +24,7 @@ export function getAppConfig() {
// 根据角色获取菜单 // 根据角色获取菜单
export function getUserMenuRole() { export function getUserMenuRole() {
return request({ return request({
url:'/api/v1/menurole', url:'https://www.fastmock.site/mock/ebb1956b65d6078940cacb295a06be27/mock/menu',//'https://www.fastmock.site/mock/ebb1956b65d6078940cacb295a06be27/mock/menu',
method: 'get' method: 'get'
}) })
} }

View File

@ -5,7 +5,7 @@
<img alt="avatar" :src="userInfo.avatar" /> <img alt="avatar" :src="userInfo.avatar" />
</a-avatar> </a-avatar>
<div class="user-info"> <div class="user-info">
<div class="user-info-name">{{ userInfo.name }}</div> <div class="user-info-name">{{ userInfo.nick_name }}</div>
<!-- <div class="user-info-desc">{{ userInfo.introduction }}</div> --> <!-- <div class="user-info-desc">{{ userInfo.introduction }}</div> -->
</div> </div>
</div> </div>

View File

@ -45,6 +45,8 @@ const keepDefaultSelect = () => {
}; };
const handleMenuClick = (key) => { const handleMenuClick = (key) => {
console.log(key)
console.log(router.getRoutes())
router.push(key); router.push(key);
}; };

View File

@ -1,22 +1,21 @@
<template> <template>
<template v-for="menu in props.menuList" :key="menu.menuId"> <template v-for="menu in props.menuList" :key="menu.menu_id">
<a-sub-menu <a-sub-menu
v-if="menu.children && menu.menuType == 'M' && menu.visible == 0" v-if="menu.parent_id==0"
:key="menu.path" :key="menu.path"
> >
<!-- <template #icon> <template #icon>
<component :is="menu.icon" /> <component :is="menu.icon" v-if="menu.icon"/>
</template> --> </template>
<template #title>{{ menu.title }}</template> <template #title>{{ menu.title }}1</template>
<sub-menu :menuList="menu.children" /> <sub-menu :menuList="menu.children" />
</a-sub-menu> </a-sub-menu>
<a-menu-item <a-menu-item
v-if="menu.menuType == 'C' && menu.visible && isRouteParams(menu.path)" v-if="menu.parent_id!=0 && isRouteParams(menu.path)"
:key="menu.path" :key="menu.path"
>{{ menu.title }}</a-menu-item> >{{ menu.title }}2</a-menu-item>
</template> </template>
</template> </template>
<script setup> <script setup>
import { computed } from 'vue' import { computed } from 'vue'

View File

@ -8,7 +8,7 @@ import router from './router/';
import { parseTime } from '@/utils/parseTime'; import { parseTime } from '@/utils/parseTime';
// Directive // Directive
import permission from '@/directive/permission/permission'; //import permission from '@/directive/permission/permission';
// 引入 Arco 图标库 // 引入 Arco 图标库
import * as ArcoIconModules from '@arco-design/web-vue/es/icon'; import * as ArcoIconModules from '@arco-design/web-vue/es/icon';
@ -19,7 +19,7 @@ console.log(import.meta.env);
const pinia = createPinia(); const pinia = createPinia();
const app = createApp(App); const app = createApp(App);
app.directive('has', permission.checkPermission); // app.directive('has', permission.checkPermission);
// 挂载全局变量 // 挂载全局变量
app.config.globalProperties.message = Message; app.config.globalProperties.message = Message;

View File

@ -3,7 +3,6 @@ import Layout from '../layout/index.vue';
import { useUserStore } from '../store/userInfo'; import { useUserStore } from '../store/userInfo';
import { usePermissionStore } from '../store/permission'; import { usePermissionStore } from '../store/permission';
import Watermark from '@/utils/watermark.js'; import Watermark from '@/utils/watermark.js';
const routes = [ const routes = [
{ {
path: '/', path: '/',
@ -67,22 +66,23 @@ router.beforeEach(async (to, from, next) => {
// 获取系统配置信息 // 获取系统配置信息
await store.getSysConfig(); await store.getSysConfig();
console.log(permissionStore.addRouters.length)
// 判断用户Token是否获取 // 判断用户Token是否获取
if (to.name !== 'login' && !store.token) { if (to.name !== 'login' && !store.token) {
next({ name: 'login' }); next({ name: 'login' });
} else { } else {
// 判断判断权限有无获取 // 判断判断权限有无获取
if (store.token && store.roles.length === 0) { console.log(store.token,permissionStore.addRouters.length)
store.getUserInfo(); if (store.token && permissionStore.addRouters.length==0) {
//store.getUserInfo();
await permissionStore.getMenuRole(); await permissionStore.getMenuRole();
permissionStore.addRouters.forEach((route) => {
permissionStore.addRouters.forEach((route) => {
router.addRoute('/', route); router.addRoute('/', route);
}); });
// next(to.fullPath); // next(to.fullPath);
// 如果 addRoute 并未完成,路由守卫会一层一层的执行执行,直到 addRoute 完成,找到对应的路由 // 如果 addRoute 并未完成,路由守卫会一层一层的执行执行,直到 addRoute 完成,找到对应的路由
next({ ...to, replace: true }) next({ ...to, replace: true });
} else { } else {
next(); next();
} }

View File

@ -23,20 +23,18 @@ export const usePermissionStore = defineStore('permisson', {
routeList.forEach((item) => { routeList.forEach((item) => {
const route = {}; const route = {};
// if (item.visible == 0) {
if (item.menuType === 'M' || item.menuType === 'C') {
route.path = item.path; route.path = item.path;
route.name = item.menuName; route.name = item.menu_name;
if (item.menuType === 'M') { if (item.parent_id==0) {
route.component = modules[`../views/index.vue`]; route.component = modules[`../views/index.vue`];
} else if (item.menuType === 'C') { } else{
route.component = modules[`../views${item.component}.vue`] || modules['../views/error-page/888.vue']; route.component = modules[`../views${item.component}.vue`] || modules['../views/error-page/888.vue'];
} }
route.meta = { route.meta = {
title: item.title, title: item.title,
permission: item.permission, permission: item.permission,
}; };
}
if (item.children) { if (item.children) {
route.children = this.GenerateRoutes(item.children); route.children = this.GenerateRoutes(item.children);
@ -44,7 +42,7 @@ export const usePermissionStore = defineStore('permisson', {
routes.push(route); routes.push(route);
// } // }
}); });
return routes; return routes;
}, },
async getMenuRole() { async getMenuRole() {
@ -52,6 +50,9 @@ export const usePermissionStore = defineStore('permisson', {
console.log(res.data); console.log(res.data);
this.setMenuList(res.data); this.setMenuList(res.data);
this.addRouters = await this.GenerateRoutes(res.data); this.addRouters = await this.GenerateRoutes(res.data);
console.log("--------this.addRouters");
console.log(this.addRouters);
}, },
ClearMenuList() { ClearMenuList() {
this.menuList = []; this.menuList = [];

View File

@ -9,33 +9,40 @@ export const useUserStore = defineStore('user', {
token: window.sessionStorage.getItem('token') || '', token: window.sessionStorage.getItem('token') || '',
uid: window.sessionStorage.getItem('uid') || '', uid: window.sessionStorage.getItem('uid') || '',
sysConfig: getLocalStorage('sysConfig'), sysConfig: getLocalStorage('sysConfig'),
userInfo: '', userInfo:window.sessionStorage.getItem('manage-userInfo')?JSON.parse(window.sessionStorage.getItem('manage-userInfo')):''
} }
}, },
getters: { // getters: {
roles: (state) => state.userInfo.roles || [], // roles: (state) => state.userInfo.roles || [],
}, // },
actions: { actions: {
setToken(token) { setInfo(token,user) {
this.token = token; this.token = token;
this.userInfo=user;
window.sessionStorage.setItem('token', token); window.sessionStorage.setItem('token', token);
window.localStorage.setItem('uid',user.user_id);
window.sessionStorage.setItem('manage-userInfo',JSON.stringify(user));
}, },
async getUserInfo() { // async getUserInfo() {
try { // try {
const res = await getInfo(); // const res = await getInfo();
// window.sessionStorage.setItem('uid', res.data.userId); // // window.sessionStorage.setItem('uid', res.data.userId);
window.localStorage.setItem('uid', res.data.userId); // this.userInfo = res.data;
this.userInfo = res.data;
} catch (err) {
console.error(err);
} // } catch (err) {
}, // console.error(err);
// }
// },
async getSysConfig() { async getSysConfig() {
try { try {
// const res = await getAppConfig(); // const res = await getAppConfig();
// setLocalStorage('sysConfig', res.data); // setLocalStorage('sysConfig', res.data);
this.sysConfig ={sys_app_logo: "https://doc-image.zhangwj.com/img/go-admin.png", sys_app_name: "go-admin管理系统"} //res.data; //res.data;
let data={sys_app_logo: "https://doc-image.zhangwj.com/img/go-admin.png", sys_app_name: "go-admin管理系统"};
setLocalStorage('sysConfig', data);
this.sysConfig =data
} catch (err) { } catch (err) {
console.error(err); console.error(err);
} }

View File

@ -8,7 +8,7 @@ const service = axios.create({
baseURL:import.meta.env.VITE_BASE_URL, baseURL:import.meta.env.VITE_BASE_URL,
timeout: 8000, timeout: 8000,
headers:{ headers:{
'Content-Type':'application/json', 'Content-Type':'application/x-www-form-urlencoded',
'Authorization':'' 'Authorization':''
} }
}); });

View File

@ -0,0 +1,18 @@
<template>
<div>我是菜单ye</div>
</template>
<script setup>
import { onMounted } from 'vue'
import { useRouter } from 'vue-router'
onMounted(() => {
const Router = useRouter()
console.log( "22")
console.log(Router.options.routes)
})
</script>
<style lang='scss' scoped>
</style>

View File

@ -0,0 +1,12 @@
<template>
<div>我是角色ye</div>
</template>
<script>
</script>
<style lang='scss' scoped>
</style>

View File

@ -246,8 +246,8 @@ onMounted(() => {
display: flex; display: flex;
justify-content: flex-end; justify-content: flex-end;
} }
/*
// Table Table 操作列样式 */
.arco-table-th:last-child > span { .arco-table-th:last-child > span {
margin-left: 15px; margin-left: 15px;
} }

View File

@ -26,9 +26,9 @@
layout="vertical" layout="vertical"
@keyup.enter="handleLogin" @keyup.enter="handleLogin"
> >
<a-form-item field="userName" hide-asterisk> <a-form-item field="access" hide-asterisk>
<a-input <a-input
v-model="loginForm.userName" v-model="loginForm.access"
placeholder="请输入用户名" placeholder="请输入用户名"
> >
<template #prefix> <template #prefix>
@ -36,9 +36,9 @@
</template> </template>
</a-input> </a-input>
</a-form-item> </a-form-item>
<a-form-item field="passWord" hide-asterisk> <a-form-item field="password" hide-asterisk>
<a-input-password <a-input-password
v-model="loginForm.passWord" v-model="loginForm.password"
placeholder="请输入密码" placeholder="请输入密码"
> >
<template #prefix> <template #prefix>
@ -48,9 +48,9 @@
</a-form-item> </a-form-item>
<div style="display: flex"> <div style="display: flex">
<div style="width: 65%"> <div style="width: 65%">
<a-form-item field="code" hide-asterisk> <a-form-item field="captcha" hide-asterisk>
<a-input <a-input
v-model="loginForm.code" v-model="loginForm.captcha"
placeholder="请输入验证码" placeholder="请输入验证码"
> >
<template #prefix> <template #prefix>
@ -106,16 +106,16 @@ const loading = ref(false);
// rules // rules
const loginRules = { const loginRules = {
userName: [{ required: true, message: '请输入用户名' }], access: [{ required: true, message: '请输入用户名' }],
passWord: [{ required: true, message: '请输入密码' }], password: [{ required: true, message: '请输入密码' }],
code: [{ required: true, message: '请输入验证码' }], captcha: [{ required: true, message: '请输入验证码' }],
}; };
// //
const loadCaptcha = async () => { const loadCaptcha = async () => {
const res = await getCaptcha(); const res = await getCaptcha();
captchUrl.value = res.data; captchUrl.value = res.data.b64s;
loginForm.uuid = res.id; loginForm.captchaId = res.data.id;
}; };
// //
@ -125,19 +125,25 @@ const handleLogin = () => {
proxy.$refs.loginFormRef.validate(async (valid) => { proxy.$refs.loginFormRef.validate(async (valid) => {
if (!valid) { if (!valid) {
try { try {
const { code, token, msg } = await login(loginForm); const { code, data, msg } = await login(loginForm);
if ( code == 200 ) { if ( code == 200 ) {
await store.setToken(token); const {avatar,nick_name,token,user_id}=data;
const userInfo={
nick_name,
avatar,
user_id
}
await store.setInfo(token,userInfo);
proxy.$message.success({ proxy.$message.success({
content: '登陆成功', content: '登陆成功',
duration: 2000, duration: 2000,
}); });
setTimeout(() => { setTimeout(() => {
proxy.$router.push('/admin/sys-api'); proxy.$router.push('/admin/role');
loading.value = false; loading.value = false;
}, 500); }, 500);
} else { } else {
proxy.$message.error(`登陆失败:${msg}`); proxy.$message.error(`登陆失败:${message}`);
} }
} catch (err) { } catch (err) {
// //
@ -170,14 +176,14 @@ onMounted(async () => {
border-color: #e5e7eb; border-color: #e5e7eb;
} }
//
.arco-input-wrapper { .arco-input-wrapper {
border-radius: 20px; border-radius: 20px;
height: 40px; height: 40px;
border: 1px solid #ddd; border: 1px solid #ddd;
background: #fff; background: #fff;
} }
//
.arco-input-wrapper:hover { .arco-input-wrapper:hover {
background: #fff; background: #fff;
border: 1px solid #1e6fff; border: 1px solid #1e6fff;
@ -201,13 +207,13 @@ onMounted(async () => {
.account-wrap-login { .account-wrap-login {
width: 960px; width: 960px;
height: 554px; height: 554px;
// background: #fff; /* background: #fff; */
border-radius: 10px; border-radius: 10px;
overflow: hidden; overflow: hidden;
display: flex; display: flex;
flex-wrap: wrap; flex-wrap: wrap;
// justify-content:space-between; /* justify-content:space-between;
// padding:30px 95px 33px padding:30px 95px 33px */
} }
.account-wrap-login .login-pic { .account-wrap-login .login-pic {
background-color: #0259e6 !important; background-color: #0259e6 !important;
@ -283,7 +289,7 @@ onMounted(async () => {
} }
} }
// 20230105 /* 20230105 自动填充背景色问题 */
:deep(.arco-input-wrapper .arco-input.arco-input-size-medium) { :deep(.arco-input-wrapper .arco-input.arco-input-size-medium) {
box-shadow: 0 0 0px 1000px #fff inset; box-shadow: 0 0 0px 1000px #fff inset;
} }

View File

@ -28,7 +28,8 @@ export default defineConfig({
} }
}, },
server: { server: {
host: true,
port: 1798,
//secure: false, //secure: false,
proxy: { proxy: {
// '/api': { // '/api': {