Skip to content

Commit

Permalink
feat(projects): 新增BasicLayout布局
Browse files Browse the repository at this point in the history
  • Loading branch information
honghuangdc committed Jan 6, 2022
1 parent 0c5770d commit 006467a
Show file tree
Hide file tree
Showing 13 changed files with 150 additions and 81 deletions.
34 changes: 1 addition & 33 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,35 +1,3 @@
# soybean-admin-thin

This template should help get you started developing with Vue 3 in Vite.

## Recommended IDE Setup

[VSCode](https://code.visualstudio.com/) + [Volar](https://marketplace.visualstudio.com/items?itemName=johnsoncodehk.volar) (and disable Vetur).

## Type Support for `.vue` Imports in TS

Since TypeScript cannot handle type information for `.vue` imports, they are shimmed to be a generic Vue component type by default. In most cases this is fine if you don't really care about component prop types outside of templates.

However, if you wish to get actual prop types in `.vue` imports (for example to get props validation when using manual `h(...)` calls), you can run `Volar: Switch TS Plugin on/off` from VSCode command palette.

## Customize configuration

See [Vite Configuration Reference](https://vitejs.dev/config/).

## Project Setup

```sh
npm install
```

### Compile and Hot-Reload for Development

```sh
npm run dev
```

### Type-Check, Compile and Minify for Production

```sh
npm run build
```
soybean-admin重构版,新添加动态权限路由
4 changes: 2 additions & 2 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@
"devDependencies": {
"@commitlint/cli": "^16.0.1",
"@commitlint/config-conventional": "^16.0.0",
"@iconify/json": "^1.1.452",
"@iconify/json": "^1.1.453",
"@iconify/vue": "^3.1.1",
"@types/crypto-js": "^4.1.0",
"@types/node": "^17.0.8",
Expand All @@ -64,7 +64,7 @@
"postinstall-postinstall": "^2.1.0",
"prettier": "^2.5.1",
"rollup-plugin-visualizer": "^5.5.2",
"sass": "^1.45.2",
"sass": "^1.46.0",
"typescript": "^4.5.4",
"unplugin-icons": "^0.13.0",
"unplugin-vue-components": "^0.17.11",
Expand Down
45 changes: 19 additions & 26 deletions pnpm-lock.yaml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

92 changes: 92 additions & 0 deletions src/layouts/Layout/components/BasicLayout.vue
Original file line number Diff line number Diff line change
@@ -0,0 +1,92 @@
<template>
<div class="flex flex-col h-full">
<header
:class="{ 'fixed-lt': topFixed }"
:style="{ height: headerHeight + 'px', paddingLeft: headerPaddingLeft }"
class="z-1001 flex-shrink-0 w-full bg-white border-b border-gray-200 transition-all duration-300 ease-in-out"
>
<slot name="header">
<h3>Header</h3>
</slot>
</header>
<div
:class="{ fixed: topFixed }"
:style="{ top: headerHeight + 'px', height: tabHeight + 'px', paddingLeft: siderWidth }"
class="left-0 z-999 flex-shrink-0 w-full bg-white border-b border-gray-200 transition-all duration-300 ease-in-out"
>
<slot name="tab">
<div>Tab</div>
</slot>
</div>
<aside
:style="{ width: siderWidth, paddingTop: siderPaddingTop }"
:class="[isVertical ? 'z-1002' : 'z-1000']"
class="fixed-lt h-full transition-all duration-300 ease-in-out bg-white border-r border-gray-200"
>
<slot name="sider">
<n-space :vertical="true" align="center" class="pt-24px">
<n-button type="primary" @click="toggle">折叠</n-button>
<div>
<span class="pr-12px">固定头部和标签</span>
<n-switch v-model:value="fixed" />
</div>
<div>
<span class="pr-12px">vertical布局</span>
<n-switch v-model:value="isVertical" />
</div>
</n-space>
</slot>
</aside>
<main
class="flex-1 transition-all duration-300 ease-in-out"
:style="{ paddingLeft: siderWidth, paddingTop: mainPaddingTop }"
>
<slot></slot>
</main>
</div>
</template>

<script setup lang="ts">
import { ref, computed } from 'vue';
import { NSpace, NButton, NSwitch } from 'naive-ui';
import { useBoolean } from '@/hooks';
interface Props {
/** 头部高度 */
headerHeight?: number;
/** 标签页高度 */
tabHeight?: number;
/** 固定头部和标签 */
fixdTop?: boolean;
/** 侧边栏高度 */
siderWidth?: number;
/** 侧边栏折叠状态的高度 */
siderCollapsedWidth?: number;
/** 侧边栏折叠状态 */
siderCollapse?: boolean;
}
const props = withDefaults(defineProps<Props>(), {
headerHeight: 56,
tabHeight: 44,
fixdTop: true,
topZIndex: 1000,
siderWidth: 200,
siderZIndex: 1001,
siderCollapsedWidth: 64,
siderCollapse: false
});
const { bool: collapse, toggle } = useBoolean();
const fixed = ref(true);
const isVertical = ref(true);
const topFixed = computed(() => fixed.value || !isVertical.value);
const siderWidth = computed(() => `${collapse.value ? props.siderCollapsedWidth : props.siderWidth}px`);
const headerPaddingLeft = computed(() => (isVertical.value ? siderWidth.value : '0px'));
const siderPaddingTop = computed(() => (isVertical.value ? '0px' : `${props.headerHeight}px`));
const mainPaddingTop = computed(() => `${fixed.value ? props.headerHeight + props.tabHeight : 0}px`);
</script>
<style scoped></style>
3 changes: 3 additions & 0 deletions src/layouts/Layout/components/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
import BasicLayout from './BasicLayout.vue';

export { BasicLayout };
15 changes: 5 additions & 10 deletions src/layouts/Layout/index.vue
Original file line number Diff line number Diff line change
@@ -1,16 +1,11 @@
<template>
<div class="h-full">
<router-view v-slot="{ Component }">
<transition name="fade-slide" mode="out-in" appear>
<component :is="Component" v-if="app.reloadFlag" />
</transition>
</router-view>
</div>
<basic-layout>
<global-content />
</basic-layout>
</template>

<script setup lang="ts">
import { useAppStore } from '@/store';
const app = useAppStore();
import { GlobalContent } from '../common';
import { BasicLayout } from './components';
</script>
<style scoped></style>
14 changes: 14 additions & 0 deletions src/layouts/common/GlobalContent/index.vue
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
<template>
<router-view v-slot="{ Component }">
<transition name="fade-slide" mode="out-in" appear>
<component :is="Component" v-if="app.reloadFlag" />
</transition>
</router-view>
</template>

<script setup lang="ts">
import { useAppStore } from '@/store';
const app = useAppStore();
</script>
<style scoped></style>
3 changes: 3 additions & 0 deletions src/layouts/common/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
import GlobalContent from './GlobalContent/index.vue';

export { GlobalContent };
2 changes: 1 addition & 1 deletion src/router/guard/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ import { handlePagePermission } from './permission';
* 路由守卫函数
* @param router - 路由实例
*/
export function createRouterGuide(router: Router) {
export function createRouterGuard(router: Router) {
router.beforeEach(async (to, from, next) => {
// 开始 loadingBar
window.$loadingBar?.start();
Expand Down
4 changes: 2 additions & 2 deletions src/router/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ import type { App } from 'vue';
import { createRouter, createWebHistory } from 'vue-router';
import { transformAuthRoutesToVueRoutes } from '@/utils';
import { constantRoutes } from './routes';
import { createRouterGuide } from './guard';
import { createRouterGuard } from './guard';

export const router = createRouter({
history: createWebHistory(import.meta.env.BASE_URL),
Expand All @@ -12,7 +12,7 @@ export const router = createRouter({

export async function setupRouter(app: App) {
app.use(router);
createRouterGuide(router);
createRouterGuard(router);
await router.isReady();
}

Expand Down
1 change: 0 additions & 1 deletion src/styles/css/global.css
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
@import './scrollbar.css';
@import './transition.css';

html, body, #app {
Expand Down
7 changes: 4 additions & 3 deletions src/styles/css/scrollbar.css
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
/*---滚动条默认显示样式--*/
::-webkit-scrollbar-thumb {
background-color: #d9d9d9;
border-radius: 8px;
border-radius: 4px;
}
/*---鼠标点击滚动条显示样式--*/
::-webkit-scrollbar-thumb:hover {
Expand All @@ -10,9 +10,10 @@
}
/*---滚动条大小--*/
::-webkit-scrollbar {
width: 8px;
height: 10px;
width: 5px;
height: 5px;
}

/*---滚动框背景样式--*/
::-webkit-scrollbar-track-piece {
background-color: rgba(0, 0, 0, 0);
Expand Down
Loading

0 comments on commit 006467a

Please sign in to comment.