mirror of
				https://github.com/soybeanjs/soybean-admin.git
				synced 2025-11-04 15:53:43 +08:00 
			
		
		
		
	feat(projects): 新增BasicLayout布局
This commit is contained in:
		
							
								
								
									
										34
									
								
								README.md
									
									
									
									
									
								
							
							
						
						
									
										34
									
								
								README.md
									
									
									
									
									
								
							@@ -1,35 +1,3 @@
 | 
				
			|||||||
# soybean-admin-thin
 | 
					# soybean-admin-thin
 | 
				
			||||||
 | 
					
 | 
				
			||||||
This template should help get you started developing with Vue 3 in Vite.
 | 
					soybean-admin重构版,新添加动态权限路由
 | 
				
			||||||
 | 
					 | 
				
			||||||
## 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
 | 
					 | 
				
			||||||
```
 | 
					 | 
				
			||||||
 
 | 
				
			|||||||
@@ -37,7 +37,7 @@
 | 
				
			|||||||
  "devDependencies": {
 | 
					  "devDependencies": {
 | 
				
			||||||
    "@commitlint/cli": "^16.0.1",
 | 
					    "@commitlint/cli": "^16.0.1",
 | 
				
			||||||
    "@commitlint/config-conventional": "^16.0.0",
 | 
					    "@commitlint/config-conventional": "^16.0.0",
 | 
				
			||||||
    "@iconify/json": "^1.1.452",
 | 
					    "@iconify/json": "^1.1.453",
 | 
				
			||||||
    "@iconify/vue": "^3.1.1",
 | 
					    "@iconify/vue": "^3.1.1",
 | 
				
			||||||
    "@types/crypto-js": "^4.1.0",
 | 
					    "@types/crypto-js": "^4.1.0",
 | 
				
			||||||
    "@types/node": "^17.0.8",
 | 
					    "@types/node": "^17.0.8",
 | 
				
			||||||
@@ -64,7 +64,7 @@
 | 
				
			|||||||
    "postinstall-postinstall": "^2.1.0",
 | 
					    "postinstall-postinstall": "^2.1.0",
 | 
				
			||||||
    "prettier": "^2.5.1",
 | 
					    "prettier": "^2.5.1",
 | 
				
			||||||
    "rollup-plugin-visualizer": "^5.5.2",
 | 
					    "rollup-plugin-visualizer": "^5.5.2",
 | 
				
			||||||
    "sass": "^1.45.2",
 | 
					    "sass": "^1.46.0",
 | 
				
			||||||
    "typescript": "^4.5.4",
 | 
					    "typescript": "^4.5.4",
 | 
				
			||||||
    "unplugin-icons": "^0.13.0",
 | 
					    "unplugin-icons": "^0.13.0",
 | 
				
			||||||
    "unplugin-vue-components": "^0.17.11",
 | 
					    "unplugin-vue-components": "^0.17.11",
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										45
									
								
								pnpm-lock.yaml
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										45
									
								
								pnpm-lock.yaml
									
									
									
										generated
									
									
									
								
							@@ -3,7 +3,7 @@ lockfileVersion: 5.3
 | 
				
			|||||||
specifiers:
 | 
					specifiers:
 | 
				
			||||||
  '@commitlint/cli': ^16.0.1
 | 
					  '@commitlint/cli': ^16.0.1
 | 
				
			||||||
  '@commitlint/config-conventional': ^16.0.0
 | 
					  '@commitlint/config-conventional': ^16.0.0
 | 
				
			||||||
  '@iconify/json': ^1.1.452
 | 
					  '@iconify/json': ^1.1.453
 | 
				
			||||||
  '@iconify/vue': ^3.1.1
 | 
					  '@iconify/vue': ^3.1.1
 | 
				
			||||||
  '@types/crypto-js': ^4.1.0
 | 
					  '@types/crypto-js': ^4.1.0
 | 
				
			||||||
  '@types/node': ^17.0.8
 | 
					  '@types/node': ^17.0.8
 | 
				
			||||||
@@ -40,7 +40,7 @@ specifiers:
 | 
				
			|||||||
  prettier: ^2.5.1
 | 
					  prettier: ^2.5.1
 | 
				
			||||||
  qs: ^6.10.2
 | 
					  qs: ^6.10.2
 | 
				
			||||||
  rollup-plugin-visualizer: ^5.5.2
 | 
					  rollup-plugin-visualizer: ^5.5.2
 | 
				
			||||||
  sass: ^1.45.2
 | 
					  sass: ^1.46.0
 | 
				
			||||||
  typescript: ^4.5.4
 | 
					  typescript: ^4.5.4
 | 
				
			||||||
  unplugin-icons: ^0.13.0
 | 
					  unplugin-icons: ^0.13.0
 | 
				
			||||||
  unplugin-vue-components: ^0.17.11
 | 
					  unplugin-vue-components: ^0.17.11
 | 
				
			||||||
@@ -71,7 +71,7 @@ dependencies:
 | 
				
			|||||||
devDependencies:
 | 
					devDependencies:
 | 
				
			||||||
  '@commitlint/cli': registry.npmmirror.com/@commitlint/cli/16.0.1_@types+node@17.0.8
 | 
					  '@commitlint/cli': registry.npmmirror.com/@commitlint/cli/16.0.1_@types+node@17.0.8
 | 
				
			||||||
  '@commitlint/config-conventional': registry.npmmirror.com/@commitlint/config-conventional/16.0.0
 | 
					  '@commitlint/config-conventional': registry.npmmirror.com/@commitlint/config-conventional/16.0.0
 | 
				
			||||||
  '@iconify/json': registry.npmmirror.com/@iconify/json/1.1.452
 | 
					  '@iconify/json': registry.npmmirror.com/@iconify/json/1.1.453
 | 
				
			||||||
  '@iconify/vue': registry.npmmirror.com/@iconify/vue/3.1.1_vue@3.2.26
 | 
					  '@iconify/vue': registry.npmmirror.com/@iconify/vue/3.1.1_vue@3.2.26
 | 
				
			||||||
  '@types/crypto-js': registry.npmmirror.com/@types/crypto-js/4.1.0
 | 
					  '@types/crypto-js': registry.npmmirror.com/@types/crypto-js/4.1.0
 | 
				
			||||||
  '@types/node': registry.npmmirror.com/@types/node/17.0.8
 | 
					  '@types/node': registry.npmmirror.com/@types/node/17.0.8
 | 
				
			||||||
@@ -98,11 +98,11 @@ devDependencies:
 | 
				
			|||||||
  postinstall-postinstall: registry.npmmirror.com/postinstall-postinstall/2.1.0
 | 
					  postinstall-postinstall: registry.npmmirror.com/postinstall-postinstall/2.1.0
 | 
				
			||||||
  prettier: registry.npmmirror.com/prettier/2.5.1
 | 
					  prettier: registry.npmmirror.com/prettier/2.5.1
 | 
				
			||||||
  rollup-plugin-visualizer: registry.nlark.com/rollup-plugin-visualizer/5.5.2
 | 
					  rollup-plugin-visualizer: registry.nlark.com/rollup-plugin-visualizer/5.5.2
 | 
				
			||||||
  sass: registry.npmmirror.com/sass/1.45.2
 | 
					  sass: registry.npmmirror.com/sass/1.46.0
 | 
				
			||||||
  typescript: registry.npmmirror.com/typescript/4.5.4
 | 
					  typescript: registry.npmmirror.com/typescript/4.5.4
 | 
				
			||||||
  unplugin-icons: registry.npmmirror.com/unplugin-icons/0.13.0_vite@2.7.10
 | 
					  unplugin-icons: registry.npmmirror.com/unplugin-icons/0.13.0_vite@2.7.10
 | 
				
			||||||
  unplugin-vue-components: registry.npmmirror.com/unplugin-vue-components/0.17.11_vite@2.7.10+vue@3.2.26
 | 
					  unplugin-vue-components: registry.npmmirror.com/unplugin-vue-components/0.17.11_vite@2.7.10+vue@3.2.26
 | 
				
			||||||
  vite: registry.npmmirror.com/vite/2.7.10_sass@1.45.2
 | 
					  vite: registry.npmmirror.com/vite/2.7.10_sass@1.46.0
 | 
				
			||||||
  vite-plugin-html: registry.npmmirror.com/vite-plugin-html/2.1.2_vite@2.7.10
 | 
					  vite-plugin-html: registry.npmmirror.com/vite-plugin-html/2.1.2_vite@2.7.10
 | 
				
			||||||
  vite-plugin-mock: registry.npmmirror.com/vite-plugin-mock/2.9.6_mockjs@1.1.0+vite@2.7.10
 | 
					  vite-plugin-mock: registry.npmmirror.com/vite-plugin-mock/2.9.6_mockjs@1.1.0+vite@2.7.10
 | 
				
			||||||
  vite-plugin-windicss: registry.npmmirror.com/vite-plugin-windicss/1.6.1_vite@2.7.10
 | 
					  vite-plugin-windicss: registry.npmmirror.com/vite-plugin-windicss/1.6.1_vite@2.7.10
 | 
				
			||||||
@@ -2163,13 +2163,6 @@ packages:
 | 
				
			|||||||
    engines: {node: '>=8'}
 | 
					    engines: {node: '>=8'}
 | 
				
			||||||
    dev: true
 | 
					    dev: true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  registry.nlark.com/picomatch/2.3.0:
 | 
					 | 
				
			||||||
    resolution: {integrity: sha1-8fBh3o9qS/AiiS4tEoI0+5gwKXI=, registry: http://registry.npm.taobao.org/, tarball: https://registry.nlark.com/picomatch/download/picomatch-2.3.0.tgz}
 | 
					 | 
				
			||||||
    name: picomatch
 | 
					 | 
				
			||||||
    version: 2.3.0
 | 
					 | 
				
			||||||
    engines: {node: '>=8.6'}
 | 
					 | 
				
			||||||
    dev: true
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  registry.nlark.com/prelude-ls/1.2.1:
 | 
					  registry.nlark.com/prelude-ls/1.2.1:
 | 
				
			||||||
    resolution: {integrity: sha1-3rxkidem5rDnYRiIzsiAM30xY5Y=, registry: http://registry.npm.taobao.org/, tarball: https://registry.nlark.com/prelude-ls/download/prelude-ls-1.2.1.tgz}
 | 
					    resolution: {integrity: sha1-3rxkidem5rDnYRiIzsiAM30xY5Y=, registry: http://registry.npm.taobao.org/, tarball: https://registry.nlark.com/prelude-ls/download/prelude-ls-1.2.1.tgz}
 | 
				
			||||||
    name: prelude-ls
 | 
					    name: prelude-ls
 | 
				
			||||||
@@ -3363,10 +3356,10 @@ packages:
 | 
				
			|||||||
    version: 1.2.1
 | 
					    version: 1.2.1
 | 
				
			||||||
    dev: true
 | 
					    dev: true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  registry.npmmirror.com/@iconify/json/1.1.452:
 | 
					  registry.npmmirror.com/@iconify/json/1.1.453:
 | 
				
			||||||
    resolution: {integrity: sha512-3eUNfCvfap5dE4JUePnul+3wCuWMSqD1zC9oGHqob5FRbJ05tGQ/n0FsL7WthqO5C+dLaMUMNRRG5VRwMzyYfA==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@iconify/json/download/@iconify/json-1.1.452.tgz}
 | 
					    resolution: {integrity: sha512-ib+e1kwbIXGf2AuDYNN3HIgfq5q3ejAsgxdCAvhXMHmT0XZXUi2ZVAXVhOsTLmTvE8kydbSeJ1nDjPrl3KnXCw==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@iconify/json/download/@iconify/json-1.1.453.tgz}
 | 
				
			||||||
    name: '@iconify/json'
 | 
					    name: '@iconify/json'
 | 
				
			||||||
    version: 1.1.452
 | 
					    version: 1.1.453
 | 
				
			||||||
    dev: true
 | 
					    dev: true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  registry.npmmirror.com/@iconify/types/1.0.12:
 | 
					  registry.npmmirror.com/@iconify/types/1.0.12:
 | 
				
			||||||
@@ -3443,7 +3436,7 @@ packages:
 | 
				
			|||||||
    engines: {node: '>= 8.0.0'}
 | 
					    engines: {node: '>= 8.0.0'}
 | 
				
			||||||
    dependencies:
 | 
					    dependencies:
 | 
				
			||||||
      estree-walker: registry.npmmirror.com/estree-walker/2.0.2
 | 
					      estree-walker: registry.npmmirror.com/estree-walker/2.0.2
 | 
				
			||||||
      picomatch: registry.nlark.com/picomatch/2.3.0
 | 
					      picomatch: registry.npmmirror.com/picomatch/2.3.0
 | 
				
			||||||
    dev: true
 | 
					    dev: true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  registry.npmmirror.com/@types/crypto-js/4.1.0:
 | 
					  registry.npmmirror.com/@types/crypto-js/4.1.0:
 | 
				
			||||||
@@ -3756,7 +3749,7 @@ packages:
 | 
				
			|||||||
      vite: ^2.5.10
 | 
					      vite: ^2.5.10
 | 
				
			||||||
      vue: ^3.2.25
 | 
					      vue: ^3.2.25
 | 
				
			||||||
    dependencies:
 | 
					    dependencies:
 | 
				
			||||||
      vite: registry.npmmirror.com/vite/2.7.10_sass@1.45.2
 | 
					      vite: registry.npmmirror.com/vite/2.7.10_sass@1.46.0
 | 
				
			||||||
      vue: registry.npmmirror.com/vue/3.2.26
 | 
					      vue: registry.npmmirror.com/vue/3.2.26
 | 
				
			||||||
    dev: true
 | 
					    dev: true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -5931,10 +5924,10 @@ packages:
 | 
				
			|||||||
      tslib: registry.nlark.com/tslib/2.3.1
 | 
					      tslib: registry.nlark.com/tslib/2.3.1
 | 
				
			||||||
    dev: true
 | 
					    dev: true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  registry.npmmirror.com/sass/1.45.2:
 | 
					  registry.npmmirror.com/sass/1.46.0:
 | 
				
			||||||
    resolution: {integrity: sha512-cKfs+F9AMPAFlbbTXNsbGvg3y58nV0mXA3E94jqaySKcC8Kq3/8983zVKQ0TLMUrHw7hF9Tnd3Bz9z5Xgtrl9g==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/sass/download/sass-1.45.2.tgz}
 | 
					    resolution: {integrity: sha512-Z4BYTgioAOlMmo4LU3Ky2txR8KR0GRPLXxO38kklaYxgo7qMTgy+mpNN4eKsrXDTFlwS5vdruvazG4cihxHRVQ==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/sass/download/sass-1.46.0.tgz}
 | 
				
			||||||
    name: sass
 | 
					    name: sass
 | 
				
			||||||
    version: 1.45.2
 | 
					    version: 1.46.0
 | 
				
			||||||
    engines: {node: '>=8.9.0'}
 | 
					    engines: {node: '>=8.9.0'}
 | 
				
			||||||
    hasBin: true
 | 
					    hasBin: true
 | 
				
			||||||
    dependencies:
 | 
					    dependencies:
 | 
				
			||||||
@@ -6272,7 +6265,7 @@ packages:
 | 
				
			|||||||
      webpack:
 | 
					      webpack:
 | 
				
			||||||
        optional: true
 | 
					        optional: true
 | 
				
			||||||
    dependencies:
 | 
					    dependencies:
 | 
				
			||||||
      vite: registry.npmmirror.com/vite/2.7.10_sass@1.45.2
 | 
					      vite: registry.npmmirror.com/vite/2.7.10_sass@1.46.0
 | 
				
			||||||
      webpack-virtual-modules: registry.nlark.com/webpack-virtual-modules/0.4.3
 | 
					      webpack-virtual-modules: registry.nlark.com/webpack-virtual-modules/0.4.3
 | 
				
			||||||
    dev: true
 | 
					    dev: true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -6316,7 +6309,7 @@ packages:
 | 
				
			|||||||
      ejs: registry.npmmirror.com/ejs/3.1.6
 | 
					      ejs: registry.npmmirror.com/ejs/3.1.6
 | 
				
			||||||
      fs-extra: registry.nlark.com/fs-extra/10.0.0
 | 
					      fs-extra: registry.nlark.com/fs-extra/10.0.0
 | 
				
			||||||
      html-minifier-terser: registry.npmmirror.com/html-minifier-terser/6.1.0
 | 
					      html-minifier-terser: registry.npmmirror.com/html-minifier-terser/6.1.0
 | 
				
			||||||
      vite: registry.npmmirror.com/vite/2.7.10_sass@1.45.2
 | 
					      vite: registry.npmmirror.com/vite/2.7.10_sass@1.46.0
 | 
				
			||||||
    transitivePeerDependencies:
 | 
					    transitivePeerDependencies:
 | 
				
			||||||
      - acorn
 | 
					      - acorn
 | 
				
			||||||
    dev: true
 | 
					    dev: true
 | 
				
			||||||
@@ -6341,7 +6334,7 @@ packages:
 | 
				
			|||||||
      fast-glob: registry.nlark.com/fast-glob/3.2.7
 | 
					      fast-glob: registry.nlark.com/fast-glob/3.2.7
 | 
				
			||||||
      mockjs: registry.npmmirror.com/mockjs/1.1.0
 | 
					      mockjs: registry.npmmirror.com/mockjs/1.1.0
 | 
				
			||||||
      path-to-regexp: registry.nlark.com/path-to-regexp/6.2.0
 | 
					      path-to-regexp: registry.nlark.com/path-to-regexp/6.2.0
 | 
				
			||||||
      vite: registry.npmmirror.com/vite/2.7.10_sass@1.45.2
 | 
					      vite: registry.npmmirror.com/vite/2.7.10_sass@1.46.0
 | 
				
			||||||
    transitivePeerDependencies:
 | 
					    transitivePeerDependencies:
 | 
				
			||||||
      - rollup
 | 
					      - rollup
 | 
				
			||||||
      - supports-color
 | 
					      - supports-color
 | 
				
			||||||
@@ -6358,13 +6351,13 @@ packages:
 | 
				
			|||||||
      '@windicss/plugin-utils': registry.npmmirror.com/@windicss/plugin-utils/1.6.1
 | 
					      '@windicss/plugin-utils': registry.npmmirror.com/@windicss/plugin-utils/1.6.1
 | 
				
			||||||
      debug: registry.npmmirror.com/debug/4.3.3
 | 
					      debug: registry.npmmirror.com/debug/4.3.3
 | 
				
			||||||
      kolorist: registry.npmmirror.com/kolorist/1.5.1
 | 
					      kolorist: registry.npmmirror.com/kolorist/1.5.1
 | 
				
			||||||
      vite: registry.npmmirror.com/vite/2.7.10_sass@1.45.2
 | 
					      vite: registry.npmmirror.com/vite/2.7.10_sass@1.46.0
 | 
				
			||||||
      windicss: registry.npmmirror.com/windicss/3.4.2
 | 
					      windicss: registry.npmmirror.com/windicss/3.4.2
 | 
				
			||||||
    transitivePeerDependencies:
 | 
					    transitivePeerDependencies:
 | 
				
			||||||
      - supports-color
 | 
					      - supports-color
 | 
				
			||||||
    dev: true
 | 
					    dev: true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  registry.npmmirror.com/vite/2.7.10_sass@1.45.2:
 | 
					  registry.npmmirror.com/vite/2.7.10_sass@1.46.0:
 | 
				
			||||||
    resolution: {integrity: sha512-KEY96ntXUid1/xJihJbgmLZx7QSC2D4Tui0FdS0Old5OokYzFclcofhtxtjDdGOk/fFpPbHv9yw88+rB93Tb8w==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/vite/download/vite-2.7.10.tgz}
 | 
					    resolution: {integrity: sha512-KEY96ntXUid1/xJihJbgmLZx7QSC2D4Tui0FdS0Old5OokYzFclcofhtxtjDdGOk/fFpPbHv9yw88+rB93Tb8w==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/vite/download/vite-2.7.10.tgz}
 | 
				
			||||||
    id: registry.npmmirror.com/vite/2.7.10
 | 
					    id: registry.npmmirror.com/vite/2.7.10
 | 
				
			||||||
    name: vite
 | 
					    name: vite
 | 
				
			||||||
@@ -6387,7 +6380,7 @@ packages:
 | 
				
			|||||||
      postcss: registry.npmmirror.com/postcss/8.4.5
 | 
					      postcss: registry.npmmirror.com/postcss/8.4.5
 | 
				
			||||||
      resolve: registry.nlark.com/resolve/1.20.0
 | 
					      resolve: registry.nlark.com/resolve/1.20.0
 | 
				
			||||||
      rollup: registry.npmmirror.com/rollup/2.62.0
 | 
					      rollup: registry.npmmirror.com/rollup/2.62.0
 | 
				
			||||||
      sass: registry.npmmirror.com/sass/1.45.2
 | 
					      sass: registry.npmmirror.com/sass/1.46.0
 | 
				
			||||||
    optionalDependencies:
 | 
					    optionalDependencies:
 | 
				
			||||||
      fsevents: registry.npmmirror.com/fsevents/2.3.2
 | 
					      fsevents: registry.npmmirror.com/fsevents/2.3.2
 | 
				
			||||||
    dev: true
 | 
					    dev: true
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										92
									
								
								src/layouts/Layout/components/BasicLayout.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										92
									
								
								src/layouts/Layout/components/BasicLayout.vue
									
									
									
									
									
										Normal file
									
								
							@@ -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
									
								
								src/layouts/Layout/components/index.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								src/layouts/Layout/components/index.ts
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,3 @@
 | 
				
			|||||||
 | 
					import BasicLayout from './BasicLayout.vue';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export { BasicLayout };
 | 
				
			||||||
@@ -1,16 +1,11 @@
 | 
				
			|||||||
<template>
 | 
					<template>
 | 
				
			||||||
  <div class="h-full">
 | 
					  <basic-layout>
 | 
				
			||||||
    <router-view v-slot="{ Component }">
 | 
					    <global-content />
 | 
				
			||||||
      <transition name="fade-slide" mode="out-in" appear>
 | 
					  </basic-layout>
 | 
				
			||||||
        <component :is="Component" v-if="app.reloadFlag" />
 | 
					 | 
				
			||||||
      </transition>
 | 
					 | 
				
			||||||
    </router-view>
 | 
					 | 
				
			||||||
  </div>
 | 
					 | 
				
			||||||
</template>
 | 
					</template>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
<script setup lang="ts">
 | 
					<script setup lang="ts">
 | 
				
			||||||
import { useAppStore } from '@/store';
 | 
					import { GlobalContent } from '../common';
 | 
				
			||||||
 | 
					import { BasicLayout } from './components';
 | 
				
			||||||
const app = useAppStore();
 | 
					 | 
				
			||||||
</script>
 | 
					</script>
 | 
				
			||||||
<style scoped></style>
 | 
					<style scoped></style>
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										14
									
								
								src/layouts/common/GlobalContent/index.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										14
									
								
								src/layouts/common/GlobalContent/index.vue
									
									
									
									
									
										Normal file
									
								
							@@ -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
									
								
								src/layouts/common/index.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								src/layouts/common/index.ts
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,3 @@
 | 
				
			|||||||
 | 
					import GlobalContent from './GlobalContent/index.vue';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export { GlobalContent };
 | 
				
			||||||
@@ -6,7 +6,7 @@ import { handlePagePermission } from './permission';
 | 
				
			|||||||
 * 路由守卫函数
 | 
					 * 路由守卫函数
 | 
				
			||||||
 * @param router - 路由实例
 | 
					 * @param router - 路由实例
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
export function createRouterGuide(router: Router) {
 | 
					export function createRouterGuard(router: Router) {
 | 
				
			||||||
  router.beforeEach(async (to, from, next) => {
 | 
					  router.beforeEach(async (to, from, next) => {
 | 
				
			||||||
    // 开始 loadingBar
 | 
					    // 开始 loadingBar
 | 
				
			||||||
    window.$loadingBar?.start();
 | 
					    window.$loadingBar?.start();
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -2,7 +2,7 @@ import type { App } from 'vue';
 | 
				
			|||||||
import { createRouter, createWebHistory } from 'vue-router';
 | 
					import { createRouter, createWebHistory } from 'vue-router';
 | 
				
			||||||
import { transformAuthRoutesToVueRoutes } from '@/utils';
 | 
					import { transformAuthRoutesToVueRoutes } from '@/utils';
 | 
				
			||||||
import { constantRoutes } from './routes';
 | 
					import { constantRoutes } from './routes';
 | 
				
			||||||
import { createRouterGuide } from './guard';
 | 
					import { createRouterGuard } from './guard';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export const router = createRouter({
 | 
					export const router = createRouter({
 | 
				
			||||||
  history: createWebHistory(import.meta.env.BASE_URL),
 | 
					  history: createWebHistory(import.meta.env.BASE_URL),
 | 
				
			||||||
@@ -12,7 +12,7 @@ export const router = createRouter({
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
export async function setupRouter(app: App) {
 | 
					export async function setupRouter(app: App) {
 | 
				
			||||||
  app.use(router);
 | 
					  app.use(router);
 | 
				
			||||||
  createRouterGuide(router);
 | 
					  createRouterGuard(router);
 | 
				
			||||||
  await router.isReady();
 | 
					  await router.isReady();
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,4 +1,3 @@
 | 
				
			|||||||
@import './scrollbar.css';
 | 
					 | 
				
			||||||
@import './transition.css';
 | 
					@import './transition.css';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
html, body, #app {
 | 
					html, body, #app {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,7 +1,7 @@
 | 
				
			|||||||
/*---滚动条默认显示样式--*/
 | 
					/*---滚动条默认显示样式--*/
 | 
				
			||||||
::-webkit-scrollbar-thumb {
 | 
					::-webkit-scrollbar-thumb {
 | 
				
			||||||
  background-color: #d9d9d9;
 | 
					  background-color: #d9d9d9;
 | 
				
			||||||
  border-radius: 8px;
 | 
					  border-radius: 4px;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
/*---鼠标点击滚动条显示样式--*/
 | 
					/*---鼠标点击滚动条显示样式--*/
 | 
				
			||||||
::-webkit-scrollbar-thumb:hover {
 | 
					::-webkit-scrollbar-thumb:hover {
 | 
				
			||||||
@@ -10,9 +10,10 @@
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
/*---滚动条大小--*/
 | 
					/*---滚动条大小--*/
 | 
				
			||||||
::-webkit-scrollbar {
 | 
					::-webkit-scrollbar {
 | 
				
			||||||
  width: 8px;
 | 
					  width: 5px;
 | 
				
			||||||
  height: 10px;
 | 
					  height: 5px;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/*---滚动框背景样式--*/
 | 
					/*---滚动框背景样式--*/
 | 
				
			||||||
::-webkit-scrollbar-track-piece {
 | 
					::-webkit-scrollbar-track-piece {
 | 
				
			||||||
  background-color: rgba(0, 0, 0, 0);
 | 
					  background-color: rgba(0, 0, 0, 0);
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -15,8 +15,8 @@ export default defineConfig({
 | 
				
			|||||||
    'i-flex-center': 'inline-flex justify-center items-center',
 | 
					    'i-flex-center': 'inline-flex justify-center items-center',
 | 
				
			||||||
    'i-flex-x-center': 'inline-flex justify-center',
 | 
					    'i-flex-x-center': 'inline-flex justify-center',
 | 
				
			||||||
    'i-flex-y-center': 'inline-flex items-center',
 | 
					    'i-flex-y-center': 'inline-flex items-center',
 | 
				
			||||||
    'flex-col': 'flex flex-col',
 | 
					    'b-flex-col': 'flex flex-col',
 | 
				
			||||||
    'flex-col-stretch': 'flex-col items-stretch',
 | 
					    'flex-col-stretch': 'b-flex-col items-stretch',
 | 
				
			||||||
    'i-flex-col': 'inline-flex flex-col',
 | 
					    'i-flex-col': 'inline-flex flex-col',
 | 
				
			||||||
    'i-flex-col-stretch': 'i-flex-col items-stretch',
 | 
					    'i-flex-col-stretch': 'i-flex-col items-stretch',
 | 
				
			||||||
    'flex-1-hidden': 'flex-1 overflow-hidden',
 | 
					    'flex-1-hidden': 'flex-1 overflow-hidden',
 | 
				
			||||||
@@ -65,7 +65,8 @@ export default defineConfig({
 | 
				
			|||||||
        'error-hover': 'var(--error-color-hover)',
 | 
					        'error-hover': 'var(--error-color-hover)',
 | 
				
			||||||
        'error-pressed': 'var(--error-color-pressed)',
 | 
					        'error-pressed': 'var(--error-color-pressed)',
 | 
				
			||||||
        'error-active': 'var(--error-color-active)'
 | 
					        'error-active': 'var(--error-color-active)'
 | 
				
			||||||
      }
 | 
					      },
 | 
				
			||||||
 | 
					      transitionProperty: ['padding-left']
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
  variants: {},
 | 
					  variants: {},
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user