13 Commits
v1.5 ... v1.0.0

Author SHA1 Message Date
Ah jung
9d9cac8064 Fixes bug add Project Docs 2021-07-30 20:00:38 +08:00
Ah jung
b8f8334539 Merge remote-tracking branch 'origin/main' 2021-07-30 19:55:54 +08:00
Ah jung
361a2a14c7 Merge pull request #15 from Chika99/feat/loadingBar
Feat/loading bar
2021-07-30 19:55:09 +08:00
chika
dd4e6c1670 feat(loadingBar): 增加加载条与主题颜色适配 2021-07-30 19:32:59 +08:00
chika
85d39add87 feat(loadingBar): 增加加载条与主题颜色适配 2021-07-30 19:26:41 +08:00
Ah jung
20da92aeab Fixes bug 2021-07-30 17:27:58 +08:00
Ah jung
57245d21ee Merge pull request #12 from it-fork/fix/naming-conv
fix(命名规范):修复store中重构之后遗留的命名错误
2021-07-30 14:57:02 +08:00
Ah jung
f97a94e74c 版本号规范 2021-07-30 14:45:26 +08:00
liujunzheng
fd6fd723d7 fix(命名规范):修复store中重构之后遗留的命名错误 2021-07-30 14:39:52 +08:00
Ah jung
da5231b384 Merge pull request #9 from Chika99/fix/basicForm
fix(basicForm): 修复基础表单在宽度小于640px显示问题
2021-07-30 13:39:14 +08:00
chika
97ae37efd0 fix(basicForm): 修复基础表单在宽度小于640px显示问题 2021-07-30 13:18:01 +08:00
Ah jung
b19430170f fix Bug 2021-07-30 11:37:09 +08:00
Ah jung
b642d28815 fix Bug 2021-07-30 10:33:24 +08:00
16 changed files with 71 additions and 31 deletions

View File

@@ -1,6 +1,6 @@
{ {
"name": "naive-ui-admin", "name": "naive-ui-admin",
"version": "1.5", "version": "1.5.0",
"author": { "author": {
"name": "Ahjung", "name": "Ahjung",
"email": "735878602@qq.com", "email": "735878602@qq.com",

View File

@@ -41,6 +41,9 @@
primaryColor: designStore.appTheme, primaryColor: designStore.appTheme,
primaryColorHover: '#57a3f3', primaryColorHover: '#57a3f3',
}, },
LoadingBar: {
colorLoading: designStore.appTheme,
},
}; };
}); });

View File

@@ -1,6 +1,5 @@
<template> <template>
<n-loading-bar-provider> <n-loading-bar-provider>
<LoadingContent />
<n-dialog-provider> <n-dialog-provider>
<DialogContent /> <DialogContent />
<n-notification-provider> <n-notification-provider>
@@ -21,7 +20,6 @@
NMessageProvider, NMessageProvider,
NLoadingBarProvider, NLoadingBarProvider,
} from 'naive-ui'; } from 'naive-ui';
import { LoadingContent } from '@/components/LoadingContent';
import { MessageContent } from '@/components/MessageContent'; import { MessageContent } from '@/components/MessageContent';
import { DialogContent } from '@/components/DialogContent'; import { DialogContent } from '@/components/DialogContent';
@@ -32,7 +30,6 @@
NNotificationProvider, NNotificationProvider,
NMessageProvider, NMessageProvider,
NLoadingBarProvider, NLoadingBarProvider,
LoadingContent,
MessageContent, MessageContent,
DialogContent, DialogContent,
}, },

View File

@@ -226,7 +226,7 @@
function togNavTheme(theme) { function togNavTheme(theme) {
settingStore.navTheme = theme; settingStore.navTheme = theme;
if (settingStore.navMode === 'horizontal' && theme === 'light') { if (settingStore.navMode === 'horizontal' && ['light'].includes(theme)) {
settingStore.navTheme = 'dark'; settingStore.navTheme = 'dark';
} }
} }
@@ -237,11 +237,11 @@
function togNavMode(mode) { function togNavMode(mode) {
settingStore.navMode = mode; settingStore.navMode = mode;
if (mode === 'horizontal') { // if (mode === 'header-dark') {
settingStore.setNavTheme('light'); // settingStore.setNavTheme('dark');
} else { // } else {
settingStore.setNavTheme('dark'); // settingStore.setNavTheme('light');
} // }
} }
return { return {

View File

@@ -1,8 +1,8 @@
<template> <template>
<div class="layout-header" :class="{ 'layout-header-light': !(navTheme == 'header-dark') }"> <div class="layout-header">
<!--顶部菜单--> <!--顶部菜单-->
<div class="layout-header-left" v-if="navMode === 'horizontal'"> <div class="layout-header-left" v-if="navMode === 'horizontal'">
<AsideMenu v-model:collapsed="collapsed" mode="horizontal" class="n-menu-horizontal-light" /> <AsideMenu v-model:collapsed="collapsed" :inverted="getInverted" mode="horizontal" />
</div> </div>
<!--左侧菜单--> <!--左侧菜单-->
<div class="layout-header-left" v-else> <div class="layout-header-left" v-else>
@@ -131,6 +131,9 @@
collapsed: { collapsed: {
type: Boolean, type: Boolean,
}, },
inverted: {
type: Boolean,
},
}, },
setup(props) { setup(props) {
const userStore = useUserStore(); const userStore = useUserStore();
@@ -153,6 +156,11 @@
crumbsSetting: getCrumbsSetting, crumbsSetting: getCrumbsSetting,
}); });
const getInverted = computed(() => {
const navTheme = unref(getNavTheme);
return ['light', 'header-dark'].includes(navTheme) ? props.inverted : !props.inverted;
});
const getChangeStyle = computed(() => { const getChangeStyle = computed(() => {
const { collapsed } = props; const { collapsed } = props;
const { minMenuWidth, menuWidth }: any = unref(getMenuSetting); const { minMenuWidth, menuWidth }: any = unref(getMenuSetting);
@@ -305,6 +313,7 @@
reloadPage, reloadPage,
drawerSetting, drawerSetting,
openSetting, openSetting,
getInverted,
}; };
}, },
}); });
@@ -342,6 +351,10 @@
.n-breadcrumb { .n-breadcrumb {
display: inline-block; display: inline-block;
} }
&-menu {
color: var(--text-color);
}
} }
&-right { &-right {

View File

@@ -557,6 +557,7 @@
cursor: pointer; cursor: pointer;
display: inline-block; display: inline-block;
position: relative; position: relative;
flex: 0 0 auto;
span { span {
float: left; float: left;

View File

@@ -19,8 +19,8 @@
</NLayoutSider> </NLayoutSider>
<NLayout :inverted="inverted"> <NLayout :inverted="inverted">
<NLayoutHeader :inverted="inverted" :position="fixedHeader"> <NLayoutHeader :inverted="getHeaderInverted" :position="fixedHeader">
<PageHeader v-model:collapsed="collapsed" /> <PageHeader v-model:collapsed="collapsed" :inverted="inverted" />
</NLayoutHeader> </NLayoutHeader>
<NLayoutContent <NLayoutContent
@@ -62,9 +62,9 @@
import { MainView } from './components/Main'; import { MainView } from './components/Main';
import { AsideMenu } from './components/Menu'; import { AsideMenu } from './components/Menu';
import { PageHeader } from './components/Header'; import { PageHeader } from './components/Header';
import { PageFooter } from './components/Footer';
import { useProjectSetting } from '@/hooks/setting/useProjectSetting'; import { useProjectSetting } from '@/hooks/setting/useProjectSetting';
import { useDesignSetting } from '@/hooks/setting/useDesignSetting'; import { useDesignSetting } from '@/hooks/setting/useDesignSetting';
import { useLoadingBar } from "naive-ui";
export default defineComponent({ export default defineComponent({
name: 'Layout', name: 'Layout',
@@ -74,7 +74,6 @@
PageHeader, PageHeader,
AsideMenu, AsideMenu,
Logo, Logo,
PageFooter,
}, },
setup() { setup() {
const { getDarkTheme } = useDesignSetting(); const { getDarkTheme } = useDesignSetting();
@@ -114,6 +113,11 @@
return ['dark', 'header-dark'].includes(unref(getNavTheme)); return ['dark', 'header-dark'].includes(unref(getNavTheme));
}); });
const getHeaderInverted = computed(() => {
const navTheme = unref(getNavTheme);
return ['light', 'header-dark'].includes(navTheme) ? unref(inverted) : !unref(inverted);
});
const leftMenuWidth = computed(() => { const leftMenuWidth = computed(() => {
const { minMenuWidth, menuWidth } = unref(getMenuSetting); const { minMenuWidth, menuWidth } = unref(getMenuSetting);
return collapsed.value ? minMenuWidth : menuWidth; return collapsed.value ? minMenuWidth : menuWidth;
@@ -135,6 +139,9 @@
onMounted(() => { onMounted(() => {
window.addEventListener('resize', watchWidth); window.addEventListener('resize', watchWidth);
//挂载在 window 方便与在js中使用
window['$loading'] = useLoadingBar();
window['$loading'].finish();
}); });
return { return {
@@ -149,6 +156,7 @@
navMode, navMode,
getShowFooter, getShowFooter,
getDarkTheme, getDarkTheme,
getHeaderInverted,
}; };
}, },
}); });

View File

@@ -3,7 +3,6 @@ import { createRouter, createWebHashHistory, RouteRecordRaw } from 'vue-router';
import { ErrorPageRoute, RedirectRoute } from '@/router/base'; import { ErrorPageRoute, RedirectRoute } from '@/router/base';
import { PageEnum } from '@/enums/pageEnum'; import { PageEnum } from '@/enums/pageEnum';
import { createRouterGuards } from './router-guards'; import { createRouterGuards } from './router-guards';
import 'nprogress/css/nprogress.css'; // 进度条样式
// @ts-ignore // @ts-ignore
const modules = import.meta.globEager('./modules/**/*.ts'); const modules = import.meta.globEager('./modules/**/*.ts');

View File

@@ -0,0 +1,19 @@
import { RouteRecordRaw } from 'vue-router';
import { Layout } from '@/router/constant';
import { DocumentTextOutline } from '@vicons/ionicons5';
import { renderIcon } from '@/utils/index';
const routes: Array<RouteRecordRaw> = [
{
path: '/external',
name: 'https://jekip.github.io/docs/',
component: Layout,
meta: {
title: '项目文档',
icon: renderIcon(DocumentTextOutline),
sort: 8,
},
},
];
export default routes;

View File

@@ -12,8 +12,8 @@ const whitePathList = [LOGIN_PATH]; // no redirect whitelist
export function createRouterGuards(router: Router) { export function createRouterGuards(router: Router) {
const userStore = useUserStoreWidthOut(); const userStore = useUserStoreWidthOut();
const asyncRouteStore = useAsyncRouteStoreWidthOut(); const asyncRouteStore = useAsyncRouteStoreWidthOut();
const Loading = window['$loading'] || null;
router.beforeEach(async (to, from, next) => { router.beforeEach(async (to, from, next) => {
const Loading = window['$loading'] || null;
Loading && Loading.start(); Loading && Loading.start();
if (from.path === LOGIN_PATH && to.name === 'errorPage') { if (from.path === LOGIN_PATH && to.name === 'errorPage') {
next(PageEnum.BASE_HOME); next(PageEnum.BASE_HOME);
@@ -91,6 +91,7 @@ export function createRouterGuards(router: Router) {
} }
} }
asyncRouteStore.setKeepAliveComponents(keepAliveComponents); asyncRouteStore.setKeepAliveComponents(keepAliveComponents);
const Loading = window['$loading'] || null;
Loading && Loading.finish(); Loading && Loading.finish();
}); });

View File

@@ -20,7 +20,7 @@ const DEFAULT_CONFIG: TreeHelperConfig = {
const getConfig = (config: Partial<TreeHelperConfig>) => Object.assign({}, DEFAULT_CONFIG, config); const getConfig = (config: Partial<TreeHelperConfig>) => Object.assign({}, DEFAULT_CONFIG, config);
interface AsyncRouteState { export interface IAsyncRouteState {
menus: RouteRecordRaw[]; menus: RouteRecordRaw[];
routers: any[]; routers: any[];
addRouters: any[]; addRouters: any[];
@@ -50,7 +50,7 @@ function filter<T = any>(
export const useAsyncRouteStore = defineStore({ export const useAsyncRouteStore = defineStore({
id: 'app-async-route', id: 'app-async-route',
state: (): AsyncRouteState => ({ state: (): IAsyncRouteState => ({
menus: [], menus: [],
routers: constantRouter, routers: constantRouter,
addRouters: [], addRouters: [],

View File

@@ -8,7 +8,7 @@ const Storage = createStorage({ storage: localStorage });
import { getUserInfo, login } from '@/api/system/user'; import { getUserInfo, login } from '@/api/system/user';
import { storage } from '@/utils/Storage'; import { storage } from '@/utils/Storage';
interface UserState { export interface IUserState {
token: string; token: string;
username: string; username: string;
welcome: string; welcome: string;
@@ -19,7 +19,7 @@ interface UserState {
export const useUserStore = defineStore({ export const useUserStore = defineStore({
id: 'app-user', id: 'app-user',
state: (): UserState => ({ state: (): IUserState => ({
token: Storage.get(ACCESS_TOKEN, ''), token: Storage.get(ACCESS_TOKEN, ''),
username: '', username: '',
welcome: '', welcome: '',

View File

@@ -1,7 +1,7 @@
import { IAsyncRouteState } from '@/store/modules/async-route'; import { IAsyncRouteState } from '@/store/modules/asyncRoute';
import { IUserState } from '@/store/modules/user/state'; import { IUserState } from '@/store/modules/user';
import { ILockscreenState } from '@/store/modules/lockscreen'; import { ILockscreenState } from '@/store/modules/lockscreen';
import { ITabsViewState } from '@/store/modules/tabs-view'; import { ITabsViewState } from '@/store/modules/tabsView';
export interface IStore { export interface IStore {
asyncRoute: IAsyncRouteState; asyncRoute: IAsyncRouteState;

4
src/styles/var.less Normal file
View File

@@ -0,0 +1,4 @@
@primaryColor: #2d8cf0;
@primaryColorHover: #57a3f3;
@header-height: 64px;
@footer-height: 70px;

View File

@@ -6,7 +6,7 @@
</n-card> </n-card>
</div> </div>
<n-card :bordered="false" class="mt-4 proCard"> <n-card :bordered="false" class="mt-4 proCard">
<n-grid cols="2 s:1 m:3 l:3 xl:3 2xl:3" responsive="screen"> <n-grid cols="1 s:1 m:3 l:3 xl:3 2xl:3" responsive="screen">
<n-grid-item offset="0 s:0 m:1 l:1 xl:1 2xl:1"> <n-grid-item offset="0 s:0 m:1 l:1 xl:1 2xl:1">
<n-form <n-form
:label-width="80" :label-width="80"

View File

@@ -5123,11 +5123,6 @@ npm-run-path@^4.0.0, npm-run-path@^4.0.1:
dependencies: dependencies:
path-key "^3.0.0" path-key "^3.0.0"
nprogress@^1.0.0-1:
version "1.0.0-1"
resolved "https://registry.npmjs.org/nprogress/-/nprogress-1.0.0-1.tgz#dd4cce2b951f9359028facd6c51cc9c49ecfa1a2"
integrity sha512-Gr/Km0nIMbR7hOB0fjGx7nR0oRjTy9M61dXiQL5bfTBq0cQ+hNgt6gxE062j7Bxm+L/IjNVOr41iu2hrDeuedw==
num2fraction@^1.2.2: num2fraction@^1.2.2:
version "1.2.2" version "1.2.2"
resolved "https://registry.npmjs.org/num2fraction/-/num2fraction-1.2.2.tgz#6f682b6a027a4e9ddfa4564cd2589d1d4e669ede" resolved "https://registry.npmjs.org/num2fraction/-/num2fraction-1.2.2.tgz#6f682b6a027a4e9ddfa4564cd2589d1d4e669ede"