Compare commits
	
		
			501 Commits
		
	
	
		
			old-versio
			...
			v0.10.2
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
|  | 1f6d079644 | ||
|  | 5c085a1986 | ||
|  | 9a23817473 | ||
|  | 56ea8937f6 | ||
|  | 4f51263501 | ||
|  | bb2eab60f4 | ||
|  | 44e4c04811 | ||
|  | b5839eab26 | ||
|  | 780ac75bf6 | ||
|  | a252138594 | ||
|  | 270a055072 | ||
|  | 08e194efe9 | ||
|  | 5f6caab338 | ||
|  | 5aaa318142 | ||
|  | cebbef680f | ||
|  | 0abde46ef4 | ||
|  | f2b518ed26 | ||
|  | c6207f35e1 | ||
|  | ee8fa04814 | ||
|  | 7b746fa053 | ||
|  | b7fea53107 | ||
|  | f89f3e6a38 | ||
|  | a0da2f6e16 | ||
|  | 3b5380e0d1 | ||
|  | 35276bfe41 | ||
|  | 215c1ecbd9 | ||
|  | 1698b21d7a | ||
|  | ca1e66be47 | ||
|  | 22bf2823e8 | ||
|  | 32e98f1b3a | ||
|  | c1c4335ce7 | ||
|  | 6c50662280 | ||
|  | f3a1707b94 | ||
|  | 6ea755f2a8 | ||
|  | a989b44a15 | ||
|  | 40f8587fd6 | ||
|  | 9f5638f16d | ||
|  | 9b19f96ff6 | ||
|  | 15da557892 | ||
|  | 2d23c9a2e6 | ||
|  | ab49afd3db | ||
|  | 86a370fd69 | ||
|  | 36fc74ce07 | ||
|  | 8da8843fd0 | ||
|  | f68285fbe5 | ||
|  | 85b8ef8f88 | ||
|  | 3d48aa8bbe | ||
|  | a765da6e28 | ||
|  | c57640acd0 | ||
|  | c264216053 | ||
|  | 9d3c732993 | ||
|  | 34f023c4b1 | ||
|  | 5a4f842774 | ||
|  | bae1767141 | ||
|  | 5957833a4f | ||
|  | 397092c21f | ||
|  | f309003e67 | ||
|  | eaf3678758 | ||
|  | f2e82da7c8 | ||
|  | 211ae1f905 | ||
|  | db629593c6 | ||
|  | 80d58cce2b | ||
|  | a0f55aca69 | ||
|  | d203a3586c | ||
|  | f74a6424d0 | ||
|  | 209ef3d890 | ||
|  | b549b32cbb | ||
|  | 54e2cb51cf | ||
|  | 42e6de395f | ||
|  | c0066b22b0 | ||
|  | aaef0bec27 | ||
|  | 912c3531c5 | ||
|  | 488e6e3204 | ||
|  | f73e3f648d | ||
|  | 36e5feac98 | ||
|  | cc13fcc8aa | ||
|  | 7f748f2a61 | ||
|  | 4a6fec8af0 | ||
|  | e2b320ad27 | ||
|  | 21d5214247 | ||
|  | 44b544745d | ||
|  | 5499a559c8 | ||
|  | ebe2c56348 | ||
|  | 8debfe7e95 | ||
|  | 1ef1b6bda9 | ||
|  | fb46d7ec7c | ||
|  | cea600f12c | ||
|  | bf2f617255 | ||
|  | cf8c7cb258 | ||
|  | 4e87f0b665 | ||
|  | d8baba586b | ||
|  | 3cff2eb4ce | ||
|  | f355a698ad | ||
|  | c3d0b74c75 | ||
|  | b0f98e4bfa | ||
|  | 506ffb8adf | ||
|  | e1afc10b80 | ||
|  | 960b436c79 | ||
|  | 6059891556 | ||
|  | 3503dff663 | ||
|  | 61998886ac | ||
|  | 608d7fb34d | ||
|  | 6bb6d9f71e | ||
|  | 918894147a | ||
|  | 0b5afda287 | ||
|  | a8a6ed97b9 | ||
|  | 919376b77c | ||
|  | 7e505f9b96 | ||
|  | de517be613 | ||
|  | bd5dd2cf28 | ||
|  | da521b35e6 | ||
|  | 34ffd9c1f3 | ||
|  | 3131e00f0f | ||
|  | f71812d622 | ||
|  | 0c12665fda | ||
|  | 458b7adb29 | ||
|  | 264da00e5d | ||
|  | 0882c25034 | ||
|  | a3562d9212 | ||
|  | b08c389e4a | ||
|  | 91bc1519f1 | ||
|  | 58b27c9693 | ||
|  | 25daa23606 | ||
|  | 9110d87580 | ||
|  | c097b5681d | ||
|  | beb705f8a9 | ||
|  | fd9488673c | ||
|  | 70aeefea02 | ||
|  | 1b3d2a6168 | ||
|  | fcb7ad965d | ||
|  | 828a2f5b60 | ||
|  | be6d431485 | ||
|  | 61a43b8efd | ||
|  | e3a9c77fd1 | ||
|  | e772ff05fb | ||
|  | d064f6285a | ||
|  | 091ca1a4fe | ||
|  | 9cec6a31a5 | ||
|  | bb8af263e1 | ||
|  | 7211a17a81 | ||
|  | 810398abb8 | ||
|  | f2b580fc06 | ||
|  | 3bd8858121 | ||
|  | 5efd1dbec4 | ||
|  | 971915948b | ||
|  | a9a37036d5 | ||
|  | 7a58035514 | ||
|  | 57bfe27819 | ||
|  | fcc65c3751 | ||
|  | f2d8dfc3ef | ||
|  | b5c570adf5 | ||
|  | 94098d02e8 | ||
|  | 436b15f010 | ||
|  | 0282feb173 | ||
|  | 8456750901 | ||
|  | 1a02cab97c | ||
|  | 1bdd81a1d8 | ||
|  | a9d58f88aa | ||
|  | 6a344ff2c7 | ||
|  | cc00c8f03a | ||
|  | c7b6a3fbec | ||
|  | 40c1e13b50 | ||
|  | 288d586dbc | ||
|  | 7d69992694 | ||
|  | 6c14bfe6a9 | ||
|  | 6773659e89 | ||
|  | 9455ad9a4f | ||
|  | 428d41b485 | ||
|  | 74772a1f03 | ||
|  | 1f3e6e4fac | ||
|  | 41b3bcb445 | ||
|  | 8e801dd790 | ||
|  | d6b1530720 | ||
|  | b632b7ffed | ||
|  | 1b45b71f20 | ||
|  | 149d22a4a4 | ||
|  | 83a2e01070 | ||
|  | 11d615f807 | ||
|  | 853745587d | ||
|  | f29108aa14 | ||
|  | abd02d1990 | ||
|  | 65ac69ef71 | ||
|  | 8998581b99 | ||
|  | 468b4bb0e1 | ||
|  | 88e535f63c | ||
|  | 13d0c4153a | ||
|  | 331b14e74d | ||
|  | c29b887eb2 | ||
|  | 8a1ec938e7 | ||
|  | c045e3fe4e | ||
|  | 811f820644 | ||
|  | fe8cab3d1c | ||
|  | 78efd7793a | ||
|  | 82c4b09b94 | ||
|  | a539112a0f | ||
|  | 22c05674f8 | ||
|  | 7dd7c71d01 | ||
|  | 22c90257de | ||
|  | 3d03d6ddb5 | ||
|  | 6fbde1eb57 | ||
|  | 0ee16e0228 | ||
|  | af74046124 | ||
|  | d823ee5684 | ||
|  | f7ca2782b0 | ||
|  | af8c133914 | ||
|  | 21b6fb697e | ||
|  | 3e0cc8c2c1 | ||
|  | 3540b75557 | ||
|  | 73ce53a388 | ||
|  | f408ea017c | ||
|  | c5ba63182e | ||
|  | 07325a4236 | ||
|  | 7240be8495 | ||
|  | 71a753f323 | ||
|  | 639c4458be | ||
|  | 1ad92a2d1b | ||
|  | 49f95c4e45 | ||
|  | 44ab07779e | ||
|  | 40ecc320a5 | ||
|  | 695ec7e50d | ||
|  | 85901d2d5e | ||
|  | 97e2ffddf4 | ||
|  | 907cf44cc1 | ||
|  | d9324f07b5 | ||
|  | d7f5bf3373 | ||
|  | 36f06bc899 | ||
|  | 182dac0d2e | ||
|  | f4d37cf7f0 | ||
|  | 16dce9a4ce | ||
|  | 0f0cd0b759 | ||
|  | 472f93bfc1 | ||
|  | 77572855c3 | ||
|  | 19942625d5 | ||
|  | dbd676095b | ||
|  | ed9cd6ce39 | ||
|  | ee434b465a | ||
|  | 2aba58c973 | ||
|  | 2c56233155 | ||
|  | 8d11a6affc | ||
|  | f6b61418e5 | ||
|  | 7f9c98ab8d | ||
|  | 02992dc02d | ||
|  | b32bca4984 | ||
|  | c37d0ac788 | ||
|  | 35aeedf320 | ||
|  | 94ff787053 | ||
|  | d0823b030b | ||
|  | 2d722db243 | ||
|  | 6143605297 | ||
|  | e2d6554313 | ||
|  | 872bb84502 | ||
|  | ee7eb3ac0d | ||
|  | dd1132482e | ||
|  | c33b5ebfef | ||
|  | 711a4ae34f | ||
|  | d9cfeabb47 | ||
|  | 296b154be5 | ||
|  | cec0f25c6b | ||
|  | b18c49e9d2 | ||
|  | f64bc91ce2 | ||
|  | b60db89801 | ||
|  | da407b6653 | ||
|  | 6a9a362caa | ||
|  | aa2f78a86f | ||
|  | a444731e9e | ||
|  | 1523c7b075 | ||
|  | 896e6f2eac | ||
|  | 8dcfbb29f9 | ||
|  | 750000ec66 | ||
|  | a792bb5cb3 | ||
|  | 973ab14442 | ||
|  | 3fe4e92f4a | ||
|  | 9ce58073dd | ||
|  | e2727e6fa1 | ||
|  | 73fa3d14c5 | ||
|  | ea1a336535 | ||
|  | 69e39c142e | ||
|  | 718c36263e | ||
|  | 5c1b086cb4 | ||
|  | 414ccbe360 | ||
|  | 41147b34fa | ||
|  | 894b0f1c18 | ||
|  | d214bb2f2a | ||
|  | 9518372fe0 | ||
|  | afa0134fdd | ||
|  | c6ed9b1558 | ||
|  | 0523f08382 | ||
|  | 8237adb9c0 | ||
|  | 65c21812bb | ||
|  | c3c975ee11 | ||
|  | 833018a831 | ||
|  | 3eb7f6f593 | ||
|  | efcfa576d5 | ||
|  | 487213b648 | ||
|  | 4ee0d94f1b | ||
|  | 5fa822f4d4 | ||
|  | 8e6e787543 | ||
|  | 9917b5e53c | ||
|  | 8f3e855f41 | ||
|  | 808051b29d | ||
|  | 906aed5e75 | ||
|  | 2d64a2e57c | ||
|  | 0c70a9e083 | ||
|  | 08d83ecbea | ||
|  | 4122685803 | ||
|  | 434ab1c560 | ||
|  | ae99e57c52 | ||
|  | e3c4a6ece6 | ||
|  | c8717c25b8 | ||
|  | e9656c6e76 | ||
|  | fd78791229 | ||
|  | de09f82586 | ||
|  | c7762490de | ||
|  | 4558c24d1c | ||
|  | d9ac7e4de0 | ||
|  | 6a5a357f50 | ||
|  | 44b022aefd | ||
|  | 0a46ea0844 | ||
|  | 39854a492b | ||
|  | 4c2f535a9b | ||
|  | be45d83766 | ||
|  | d28b9039bb | ||
|  | 8f6d6ce3cb | ||
|  | 07baac7cf8 | ||
|  | 7487ab79b3 | ||
|  | a70e4161be | ||
|  | 095c432363 | ||
|  | 028096e53f | ||
|  | 44ab55d594 | ||
|  | 4b80a66114 | ||
|  | cc0bb088ec | ||
|  | 3e4f9e2824 | ||
|  | ebd16a4d1a | ||
|  | 84cb07baec | ||
|  | 0811ffa5ae | ||
|  | 3f822a7d76 | ||
|  | a1c7e10574 | ||
|  | 50d7ccd82d | ||
|  | e0233061d3 | ||
|  | a0c405dadd | ||
|  | 60f912508b | ||
|  | 3590b65e22 | ||
|  | 92b8406444 | ||
|  | e7ad08685e | ||
|  | 14c145eef1 | ||
|  | 518f7eed28 | ||
|  | 21e63998d0 | ||
|  | 38ee2a62cd | ||
|  | 716528206e | ||
|  | b81143e55e | ||
|  | 0243b27505 | ||
|  | 909c12d3c6 | ||
|  | 01d0bcbfd0 | ||
|  | ba07b695dd | ||
|  | 3d8befa376 | ||
|  | 97c92626cc | ||
|  | 55ddc9cab0 | ||
|  | 401f0c748d | ||
|  | d5c751153c | ||
|  | 69d51318ff | ||
|  | de5fb84215 | ||
|  | c275f2632c | ||
|  | e899914426 | ||
|  | 861c8b9852 | ||
|  | a782461453 | ||
|  | e8488e4d52 | ||
|  | 889c859865 | ||
|  | 3c8dd772f8 | ||
|  | 251b5b9664 | ||
|  | 41e46a5d80 | ||
|  | 5c75e9d958 | ||
|  | 7f4350aeb6 | ||
|  | 807448aec5 | ||
|  | b9c5c34979 | ||
|  | 20347b7d65 | ||
|  | dbeb595c0b | ||
|  | c9d3e5a3fd | ||
|  | 5e276421ad | ||
|  | 219f87f467 | ||
|  | b35ed8960d | ||
|  | 24010d05fb | ||
|  | ec0776e268 | ||
|  | cecce83bc3 | ||
|  | 4eb46ea3dd | ||
|  | e8b534b84e | ||
|  | 46e1ae7825 | ||
|  | 60a55a776e | ||
|  | bed4292ed3 | ||
|  | 6bed9ead38 | ||
|  | 3fb13ca9e7 | ||
|  | 2d6d179d66 | ||
|  | eebb753884 | ||
|  | bb1bbf2724 | ||
|  | df56abe18d | ||
|  | ca2dfa6185 | ||
|  | bbfdcc8276 | ||
|  | 1715504789 | ||
|  | 9a90f18e77 | ||
|  | 21645537d5 | ||
|  | e6c26fcb4a | ||
|  | 20911dd882 | ||
|  | cd7ca8f4c7 | ||
|  | ca707a456b | ||
|  | d0522ce514 | ||
|  | f83c7b59b8 | ||
|  | f5a043b11a | ||
|  | 094dca961f | ||
|  | 8191490f39 | ||
|  | 75de2b0604 | ||
|  | 4093dcd6dc | ||
|  | d00643c9f5 | ||
|  | b8db2116df | ||
|  | a0dfa3d30d | ||
|  | 4e31abd446 | ||
|  | f42ee9dbe5 | ||
|  | f5c56c355c | ||
|  | a1a57a185c | ||
|  | b298af1ddb | ||
|  | 43d685ccd3 | ||
|  | 72d7dcfa5e | ||
|  | 1e2fdda090 | ||
|  | 8d00b238f7 | ||
|  | 8cdad54236 | ||
|  | 6298e61328 | ||
|  | 9d4ed617fb | ||
|  | f92d7ecfbe | ||
|  | ce4e039f48 | ||
|  | 1a9efee591 | ||
|  | 378d55ac0e | ||
|  | 50c8b9daa1 | ||
|  | c4546bdfa3 | ||
|  | 5b401a79ba | ||
|  | 7add5c2edf | ||
|  | 811b15e672 | ||
|  | c1182fef0a | ||
|  | 7ba332cd6a | ||
|  | a810ef85b1 | ||
|  | 225e7128b6 | ||
|  | 3aded40461 | ||
|  | 57c692be74 | ||
|  | 284af63cfe | ||
|  | e856cdb7b2 | ||
|  | 114072277f | ||
|  | e65034d946 | ||
|  | a7a269d6a6 | ||
|  | 2c9660fdbf | ||
|  | e93b94cb24 | ||
|  | 3befb22903 | ||
|  | 7ed5d0de2d | ||
|  | 47f2871cb5 | ||
|  | 852ddb64ad | ||
|  | 7e1f9f1138 | ||
|  | 554d7fd611 | ||
|  | 1797f29a79 | ||
|  | 50063187ec | ||
|  | b16721b2b7 | ||
|  | facc00e8b4 | ||
|  | 02c51e6fb9 | ||
|  | be374089ba | ||
|  | 68b42304d5 | ||
|  | 32a7cc408e | ||
|  | 651e58dcb6 | ||
|  | b61b0ce25f | ||
|  | 21bab1f7c3 | ||
|  | 4f9d544d43 | ||
|  | db75c91400 | ||
|  | 37092974d3 | ||
|  | 1d63a83822 | ||
|  | db3c25ea14 | ||
|  | 5eddb4910c | ||
|  | ce531ce5dd | ||
|  | 28efbdbc70 | ||
|  | cc290accc2 | ||
|  | 579e07400e | ||
|  | b2a4ddf5e3 | ||
|  | 28b5d22401 | ||
|  | 839b82ba8b | ||
|  | 09c7658c21 | ||
|  | e25afe2fad | ||
|  | 371fad4f26 | ||
|  | a090d398fc | ||
|  | 6d132c5977 | ||
|  | 912bfdf439 | ||
|  | bf020a8258 | ||
|  | 10e4d81bd6 | ||
|  | 0653fb144f | ||
|  | 006467a062 | ||
|  | 0c5770dfd2 | ||
|  | 0e783bcf7b | ||
|  | e5793e1c8d | ||
|  | 85b55bb37a | ||
|  | b36a62b150 | ||
|  | c804b21ceb | ||
|  | 5bfb8199b4 | ||
|  | ab9a6a2f39 | ||
|  | b93b80cb4b | ||
|  | f5a36a05cb | ||
|  | 035fa114c9 | ||
|  | 2c196841bd | ||
|  | 0d2a5629e8 | ||
|  | de2057f141 | 
| @@ -1,45 +0,0 @@ | ||||
| module.exports = { | ||||
|   types: [ | ||||
|     { value: 'feat', name: 'feat:     新增功能' }, | ||||
|     { value: 'fix', name: 'fix:      修复bug' }, | ||||
|     { value: 'docs', name: 'docs:     文档变更' }, | ||||
|     { value: 'style', name: 'style:    代码格式(不影响功能,例如空格、分号等格式修正)' }, | ||||
|     { value: 'refactor', name: 'refactor: 代码重构(不包括 bug 修复、功能新增)' }, | ||||
|     { value: 'perf', name: 'perf:     性能优化' }, | ||||
|     { value: 'test', name: 'test:     添加、修改测试用例' }, | ||||
|     { value: 'build', name: 'build:    构建流程、外部依赖变更(如升级 npm 包、修改 脚手架 配置等)' }, | ||||
|     { value: 'ci', name: 'ci:       修改 CI 配置、脚本' }, | ||||
|     { value: 'chore', name: 'chore:    对构建过程或辅助工具和库的更改(不影响源文件、测试用例)' }, | ||||
|     { value: 'revert', name: 'revert:   回滚 commit' } | ||||
|   ], | ||||
|   scopes: [ | ||||
| 		['projects', '项目搭建'], | ||||
|     ['components', '组件相关'], | ||||
|     ['hooks', 'hook 相关'], | ||||
|     ['utils', 'utils 相关'], | ||||
|     ['types', 'ts类型相关'], | ||||
|     ['styles', '样式相关'], | ||||
|     ['deps', '项目依赖'], | ||||
|     ['auth', '对 auth 修改'], | ||||
|     ['other', '其他修改'], | ||||
|     ['custom', '以上都不是?我要自定义'] | ||||
|   ].map(([value, description]) => { | ||||
|     return { | ||||
|       value, | ||||
|       name: `${value.padEnd(30)} (${description})` | ||||
|     } | ||||
|   }), | ||||
|   messages: { | ||||
|     type: '确保本次提交遵循 Angular 规范!\n选择你要提交的类型:', | ||||
|     scope: '\n选择一个 scope(可选):', | ||||
|     customScope: '请输入自定义的 scope:', | ||||
|     subject: '填写简短精炼的变更描述:\n', | ||||
|     body: '填写更加详细的变更描述(可选)。使用 "|" 换行:\n', | ||||
|     breaking: '列举非兼容性重大的变更(可选):\n', | ||||
|     footer: '列举出所有变更的 ISSUES CLOSED(可选)。 例如: #31, #34:\n', | ||||
|     confirmCommit: '确认提交?' | ||||
|   }, | ||||
|   allowBreakingChanges: ['feat', 'fix'], | ||||
|   subjectLimit: 100, | ||||
|   breaklineChar: '|' | ||||
| } | ||||
| @@ -1,12 +1,11 @@ | ||||
| # Editor configuration, see http://editorconfig.org | ||||
|  | ||||
| # 表示是最顶层的 EditorConfig 配置文件 | ||||
| root = true | ||||
|  | ||||
| [*] # 表示所有文件适用 | ||||
| charset = utf-8 # 设置文件字符集为 utf-8 | ||||
| indent_style = tab # 缩进风格(tab | space) | ||||
| indent_size = 2 # 缩进大小 | ||||
| end_of_line = lf # 控制换行类型(lf | cr | crlf) | ||||
| trim_trailing_whitespace = true # 去除行首的任意空白字符 | ||||
| insert_final_newline = true # 始终在文件末尾插入一个新行 | ||||
| [*] | ||||
| charset = utf-8 | ||||
| indent_style = tab | ||||
| indent_size = 2 | ||||
| end_of_line = lf | ||||
| trim_trailing_whitespace = true | ||||
| insert_final_newline = true | ||||
|   | ||||
							
								
								
									
										19
									
								
								.env
									
									
									
									
									
								
							
							
						
						| @@ -1,9 +1,20 @@ | ||||
| # 变量需要以VITE开头 | ||||
|  | ||||
| VITE_BASE_URL=/ | ||||
|  | ||||
| VITE_APP_NAME=SoybeanAdmin | ||||
|  | ||||
| VITE_APP_TITLE=SoybeanAdmin | ||||
| VITE_APP_TITLE=Soybean管理系统 | ||||
|  | ||||
| VITE_APP_DESC=中后台管理系统模版 | ||||
| VITE_APP_DESC=SoybeanAdmin是一个中后台管理系统模版 | ||||
|  | ||||
| # 权限路由模式: static | dynamic | ||||
| VITE_AUTH_ROUTE_MODE=static | ||||
|  | ||||
| # 路由首页(根路由重定向), 用于static模式的权限路由,dynamic模式取决于后端返回的路由首页 | ||||
| VITE_ROUTE_HOME_PATH=/dashboard/analysis | ||||
|  | ||||
| # iconify图标作为组件的前缀 | ||||
| VITE_ICON_PREFFIX=icon | ||||
|  | ||||
| # 本地SVG图标作为组件的前缀, 请注意一定要包含 VITE_ICON_PREFFIX | ||||
| # 格式 {VITE_ICON_PREFFIX}-{本地图标集合名称} | ||||
| VITE_ICON_LOCAL_PREFFIX=icon-local | ||||
|   | ||||
							
								
								
									
										30
									
								
								.env-config.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,30 @@ | ||||
| /** 请求服务的环境配置 */ | ||||
| type ServiceEnv = Record<ServiceEnvType, ServiceEnvConfig>; | ||||
|  | ||||
| /** 不同请求服务的环境配置 */ | ||||
| const serviceEnv: ServiceEnv = { | ||||
|   dev: { | ||||
|     url: 'http://localhost:8080' | ||||
|   }, | ||||
|   test: { | ||||
|     url: 'http://localhost:8080' | ||||
|   }, | ||||
|   prod: { | ||||
|     url: 'http://localhost:8080' | ||||
|   } | ||||
| }; | ||||
|  | ||||
| /** | ||||
|  * 获取当前环境模式下的请求服务的配置 | ||||
|  * @param env 环境 | ||||
|  */ | ||||
| export function getServiceEnvConfig(env: ImportMetaEnv): ServiceEnvConfigWithProxyPattern { | ||||
|   const { VITE_SERVICE_ENV = 'dev' } = env; | ||||
|  | ||||
|   const config = serviceEnv[VITE_SERVICE_ENV]; | ||||
|  | ||||
|   return { | ||||
|     ...config, | ||||
|     proxyPattern: '/proxy-pattern' | ||||
|   }; | ||||
| } | ||||
| @@ -1,5 +1,2 @@ | ||||
| #请求的环境 | ||||
| VITE_HTTP_ENV=DEV | ||||
|  | ||||
| #请求地址 | ||||
| VITE_HTTP_URL=https://test.aisuit.com.cn | ||||
| VITE_HTTP_PROXY=Y | ||||
| VITE_SOYBEAN_ROUTE_PLUGIN=Y | ||||
|   | ||||
| @@ -1,5 +1,10 @@ | ||||
| #请求的环境 正式环境 | ||||
| VITE_HTTP_ENV=PROD | ||||
| VITE_VISUALIZER=N | ||||
|  | ||||
| #请求地址 | ||||
| VITE_HTTP_URL=http://192.168.100.43:8201 | ||||
| VITE_COMPRESS=N | ||||
|  | ||||
| # gzip | brotliCompress | deflate | deflateRaw | ||||
| VITE_COMPRESS_TYPE=gzip | ||||
|  | ||||
| VITE_PWA=N | ||||
|  | ||||
| VITE_PROD_MOCK=Y | ||||
|   | ||||
| @@ -1,4 +0,0 @@ | ||||
| VITE_HTTP_ENV=STAGING | ||||
|  | ||||
| #请求地址 | ||||
| VITE_HTTP_URL=http://192.168.100.43:8201 | ||||
| @@ -1,14 +1,4 @@ | ||||
| *.sh | ||||
| node_modules | ||||
| lib | ||||
| *.md | ||||
| *.woff | ||||
| *.ttf | ||||
| .vscode | ||||
| .idea | ||||
| /dist/ | ||||
| /public | ||||
| /docs | ||||
| .vscode | ||||
| .local | ||||
| index.html | ||||
| !.env-config.ts | ||||
| components.d.ts | ||||
| router-page.d.ts | ||||
| *.svg | ||||
|   | ||||
							
								
								
									
										168
									
								
								.eslintrc.js
									
									
									
									
									
								
							
							
						
						| @@ -1,46 +1,132 @@ | ||||
| module.exports = { | ||||
|   env: { | ||||
|     browser: true, | ||||
|     es2021: true | ||||
|   extends: ['soybeanjs/vue'], | ||||
|   overrides: [ | ||||
|     { | ||||
|       files: ['./scripts/*.ts'], | ||||
|       rules: { | ||||
|         'no-unused-expressions': 'off' | ||||
|       } | ||||
|     }, | ||||
|     { | ||||
|       files: ['*.vue'], | ||||
|       rules: { | ||||
|         'no-undef': 'off' // use tsc to check the ts code of the vue | ||||
|       } | ||||
|     } | ||||
|   ], | ||||
|   settings: { | ||||
|     'import/core-modules': ['uno.css', '~icons/*', 'virtual:svg-icons-register'] | ||||
|   }, | ||||
|   globals: { | ||||
|     defineProps: 'readonly', | ||||
|     defineEmits: 'readonly', | ||||
|     defineExpose: 'readonly', | ||||
|     withDefaults: 'readonly', | ||||
|     PROJECT_BUILD_TIME: 'readonly', | ||||
|     AMap: 'readonly', | ||||
|     BMap: 'readonly', | ||||
|     TMap: 'readonly' | ||||
|   }, | ||||
|   parser: 'vue-eslint-parser', | ||||
|   parserOptions: { | ||||
|     ecmaVersion: 12, | ||||
|     parser: '@typescript-eslint/parser', | ||||
|     sourceType: 'module' | ||||
|   }, | ||||
|   plugins: ['vue', '@typescript-eslint'], | ||||
|   extends: ['plugin:vue/vue3-recommended', 'airbnb-base', '@vue/typescript/recommended', 'plugin:prettier/recommended'], | ||||
|   rules: { | ||||
|     'no-unused-vars': 'off', | ||||
|     'import/extensions': 'off', | ||||
|     'import/no-extraneous-dependencies': 'off', | ||||
|     'import/no-unresolved': 0, | ||||
|     'no-shadow': 0, | ||||
|     'import/prefer-default-export': 0, | ||||
|     'no-use-before-define': 'off', | ||||
|     'vue/multi-word-component-names': 0, | ||||
|     'max-classes-per-file': 0, | ||||
|     '@typescript-eslint/no-explicit-any': 0, | ||||
|     '@typescript-eslint/no-inferrable-types': 0, | ||||
|     '@typescript-eslint/ban-ts-ignore': 'off', | ||||
|     '@typescript-eslint/ban-types': 'off', | ||||
|     '@typescript-eslint/no-var-requires': 'off', | ||||
|     '@typescript-eslint/explicit-module-boundary-types': 'off', | ||||
|     '@typescript-eslint/explicit-function-return-type': 'off', | ||||
|     '@typescript-eslint/no-empty-function': 'off', | ||||
|     '@typescript-eslint/no-non-null-assertion': 'off', | ||||
|     '@typescript-eslint/no-unused-vars': ['warn', { ignoreRestSiblings: true }], | ||||
|     '@typescript-eslint/no-use-before-define': ['error', { classes: true, functions: false, typedefs: false }] | ||||
|     'import/order': [ | ||||
|       'error', | ||||
|       { | ||||
|         'newlines-between': 'never', | ||||
|         groups: ['builtin', 'external', 'internal', 'parent', 'sibling', 'index'], | ||||
|         pathGroups: [ | ||||
|           { | ||||
|             pattern: 'vue', | ||||
|             group: 'external', | ||||
|             position: 'before' | ||||
|           }, | ||||
|           { | ||||
|             pattern: 'vue-router', | ||||
|             group: 'external', | ||||
|             position: 'before' | ||||
|           }, | ||||
|           { | ||||
|             pattern: 'pinia', | ||||
|             group: 'external', | ||||
|             position: 'before' | ||||
|           }, | ||||
|           { | ||||
|             pattern: 'naive-ui', | ||||
|             group: 'external', | ||||
|             position: 'before' | ||||
|           }, | ||||
|           { | ||||
|             pattern: '@/constants', | ||||
|             group: 'internal', | ||||
|             position: 'before' | ||||
|           }, | ||||
|           { | ||||
|             pattern: '@/config', | ||||
|             group: 'internal', | ||||
|             position: 'before' | ||||
|           }, | ||||
|           { | ||||
|             pattern: '@/settings', | ||||
|             group: 'internal', | ||||
|             position: 'before' | ||||
|           }, | ||||
|           { | ||||
|             pattern: '@/plugins', | ||||
|             group: 'internal', | ||||
|             position: 'before' | ||||
|           }, | ||||
|           { | ||||
|             pattern: '@/layouts', | ||||
|             group: 'internal', | ||||
|             position: 'before' | ||||
|           }, | ||||
|           { | ||||
|             pattern: '@/views', | ||||
|             group: 'internal', | ||||
|             position: 'before' | ||||
|           }, | ||||
|           { | ||||
|             pattern: '@/components', | ||||
|             group: 'internal', | ||||
|             position: 'before' | ||||
|           }, | ||||
|           { | ||||
|             pattern: '@/router', | ||||
|             group: 'internal', | ||||
|             position: 'before' | ||||
|           }, | ||||
|           { | ||||
|             pattern: '@/service', | ||||
|             group: 'internal', | ||||
|             position: 'before' | ||||
|           }, | ||||
|           { | ||||
|             pattern: '@/store', | ||||
|             group: 'internal', | ||||
|             position: 'before' | ||||
|           }, | ||||
|           { | ||||
|             pattern: '@/context', | ||||
|             group: 'internal', | ||||
|             position: 'before' | ||||
|           }, | ||||
|           { | ||||
|             pattern: '@/composables', | ||||
|             group: 'internal', | ||||
|             position: 'before' | ||||
|           }, | ||||
|           { | ||||
|             pattern: '@/hooks', | ||||
|             group: 'internal', | ||||
|             position: 'before' | ||||
|           }, | ||||
|           { | ||||
|             pattern: '@/utils', | ||||
|             group: 'internal', | ||||
|             position: 'before' | ||||
|           }, | ||||
|           { | ||||
|             pattern: '@/assets', | ||||
|             group: 'internal', | ||||
|             position: 'before' | ||||
|           }, | ||||
|           { | ||||
|             pattern: '@/**', | ||||
|             group: 'internal', | ||||
|             position: 'before' | ||||
|           } | ||||
|         ], | ||||
|         pathGroupsExcludedImportTypes: ['vue', 'vue-router', 'pinia', 'naive-ui'] | ||||
|       } | ||||
|     ] | ||||
|   } | ||||
| }; | ||||
|   | ||||
							
								
								
									
										17
									
								
								.gitattributes
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,17 @@ | ||||
| "*.vue"    eol=lf | ||||
| "*.js"     eol=lf | ||||
| "*.ts"     eol=lf | ||||
| "*.jsx"    eol=lf | ||||
| "*.tsx"    eol=lf | ||||
| "*.cjs"    eol=lf | ||||
| "*.cts"    eol=lf | ||||
| "*.mjs"    eol=lf | ||||
| "*.mts"    eol=lf | ||||
| "*.json"   eol=lf | ||||
| "*.html"   eol=lf | ||||
| "*.css"    eol=lf | ||||
| "*.less"   eol=lf | ||||
| "*.scss"   eol=lf | ||||
| "*.sass"   eol=lf | ||||
| "*.styl"   eol=lf | ||||
| "*.md"   eol=lf | ||||
							
								
								
									
										90
									
								
								.github/ISSUE_TEMPLATE/bug-report.yaml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,90 @@ | ||||
| name: Bug提交 | ||||
| description: 在使用软件或功能的过程中遇到了错误 | ||||
| title: '[Bug]: ' | ||||
| labels: [ "bug?" ] | ||||
|  | ||||
| body: | ||||
|   - type: markdown | ||||
|     attributes: | ||||
|       value: | | ||||
|         ## 请按照以下要求进行提交 | ||||
|         ### 1. 提交后需要指定标签和截止时间。 | ||||
|         --- | ||||
|  | ||||
|   - type: markdown | ||||
|     attributes: | ||||
|       value: | | ||||
|         ## 环境信息 | ||||
|         请根据实际使用环境修改以下信息。 | ||||
|  | ||||
|   - type: input | ||||
|     id: env-program-ver | ||||
|     attributes: | ||||
|       label: 软件版本 | ||||
|     validations: | ||||
|       required: true | ||||
|  | ||||
|   - type: dropdown | ||||
|     id: env-vm-ver | ||||
|     attributes: | ||||
|       label: 运行环境 | ||||
|       description: 选择运行软件的系统版本 | ||||
|       options: | ||||
|         - Windows (64) | ||||
|         - Windows (32/x84) | ||||
|         - MacOS | ||||
|         - Linux | ||||
|         - Ubuntu | ||||
|         - CentOS | ||||
|         - ArchLinux | ||||
|         - UNIX (Android) | ||||
|         - 其它(请在下方说明) | ||||
|     validations: | ||||
|       required: true | ||||
|  | ||||
|   - type: dropdown | ||||
|     id: env-vm-arch | ||||
|     attributes: | ||||
|       label: 运行架构 | ||||
|       description: (可选) 选择运行软件的系统架构 | ||||
|       options: | ||||
|         - AMD64 | ||||
|         - x86 | ||||
|         - ARM [32] (别名:AArch32 / ARMv7) | ||||
|         - ARM [64] (别名:AArch64 / ARMv8) | ||||
|         - 其它 | ||||
|  | ||||
|   - type: textarea | ||||
|     id: reproduce-steps | ||||
|     attributes: | ||||
|       label: 重现步骤 | ||||
|       description: | | ||||
|         我们需要执行哪些操作才能让 bug 出现? | ||||
|         简洁清晰的重现步骤能够帮助我们更迅速地定位问题所在。 | ||||
|     validations: | ||||
|       required: true | ||||
|  | ||||
|   - type: textarea | ||||
|     id: expected | ||||
|     attributes: | ||||
|       label: 期望的结果是什么? | ||||
|     validations: | ||||
|       required: true | ||||
|  | ||||
|   - type: textarea | ||||
|     id: actual | ||||
|     attributes: | ||||
|       label: 实际的结果是什么? | ||||
|     validations: | ||||
|       required: true | ||||
|  | ||||
|   - type: textarea | ||||
|     id: logging | ||||
|     attributes: | ||||
|       label: 日志记录(可选) | ||||
|       render: golang | ||||
|  | ||||
|   - type: textarea | ||||
|     id: extra-desc | ||||
|     attributes: | ||||
|       label: 补充说明(可选) | ||||
							
								
								
									
										11
									
								
								.github/PULL_REQUEST_TEMPLATE.md
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,11 @@ | ||||
| ## Pull Request 详情 | ||||
|  | ||||
| 请根据实际使用情况修改以下信息。 | ||||
|  | ||||
| ## 版本信息 | ||||
|  | ||||
| ## 解决了哪些问题 | ||||
|  | ||||
| ## 是否关闭了某个 Issue | ||||
|  | ||||
| Closes # | ||||
							
								
								
									
										30
									
								
								.github/workflows/linter.yml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,30 @@ | ||||
| --- | ||||
| name: Lint Code | ||||
|  | ||||
| permissions: | ||||
|   contents: write | ||||
|  | ||||
| on: | ||||
|   pull_request: | ||||
|     branches: [main] | ||||
|  | ||||
| jobs: | ||||
|   lint: | ||||
|     name: Lint All Code | ||||
|     runs-on: ubuntu-latest | ||||
|  | ||||
|     steps: | ||||
|       - name: Checkout Code | ||||
|         uses: actions/checkout@v3 | ||||
|         with: | ||||
|           fetch-depth: 0 | ||||
|  | ||||
|       - name: Lint Code Base | ||||
|         uses: github/super-linter@v4 | ||||
|         env: | ||||
|           VALIDATE_ALL_CODEBASE: false | ||||
|           DEFAULT_BRANCH: main | ||||
|           # To change branch master or main | ||||
|           GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | ||||
|           FILTER_REGEX_EXCLUDE: (docs|.github) | ||||
|           VALIDATE_MARKDOWN: false | ||||
							
								
								
									
										25
									
								
								.github/workflows/release.yml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,25 @@ | ||||
| name: Release | ||||
|  | ||||
| permissions: | ||||
|   contents: write | ||||
|  | ||||
| on: | ||||
|   push: | ||||
|     tags: | ||||
|       - "v*" | ||||
|  | ||||
| jobs: | ||||
|   release: | ||||
|     runs-on: ubuntu-latest | ||||
|     steps: | ||||
|       - uses: actions/checkout@v3 | ||||
|         with: | ||||
|           fetch-depth: 0 | ||||
|  | ||||
|       - uses: actions/setup-node@v3 | ||||
|         with: | ||||
|           node-version: 16.x | ||||
|  | ||||
|       - run: npx githublogen | ||||
|         env: | ||||
|           GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN}} | ||||
							
								
								
									
										31
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						| @@ -1,7 +1,36 @@ | ||||
| # Logs | ||||
| logs | ||||
| *.log | ||||
| npm-debug.log* | ||||
| yarn-debug.log* | ||||
| yarn-error.log* | ||||
| pnpm-debug.log* | ||||
| lerna-debug.log* | ||||
|  | ||||
| node_modules | ||||
| .DS_Store | ||||
| dist | ||||
| dist-ssr | ||||
| dist.zip | ||||
| coverage | ||||
| *.local | ||||
| .idea | ||||
| stats.html | ||||
|  | ||||
| /cypress/videos/ | ||||
| /cypress/screenshots/ | ||||
|  | ||||
| # Editor directories and files | ||||
| .vscode/* | ||||
| !.vscode/extensions.json | ||||
| !.vscode/launch.json | ||||
| !.vscode/settings.json | ||||
| .idea | ||||
| *.suo | ||||
| *.ntvs* | ||||
| *.njsproj | ||||
| *.sln | ||||
| *.sw? | ||||
|  | ||||
| /src/typings/components.d.ts | ||||
| package-lock.json | ||||
| yarn.lock | ||||
|   | ||||
							
								
								
									
										1
									
								
								.husky/.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						| @@ -1 +0,0 @@ | ||||
| _ | ||||
| @@ -1,4 +0,0 @@ | ||||
| #!/bin/sh | ||||
| . "$(dirname "$0")/_/husky.sh" | ||||
|  | ||||
| npx --no-install commitlint --edit | ||||
| @@ -1,4 +0,0 @@ | ||||
| #!/bin/sh | ||||
| . "$(dirname "$0")/_/husky.sh" | ||||
|  | ||||
| pnpm lint:fix && pnpm vtsc | ||||
							
								
								
									
										2
									
								
								.npmrc
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,2 @@ | ||||
| registry=https://registry.npmmirror.com/ | ||||
| shamefully-hoist=true | ||||
| @@ -1,19 +0,0 @@ | ||||
| module.exports = { | ||||
|   printWidth: 120, // 超过最大值换行 | ||||
|   tabWidth: 2, // 缩进字节数 | ||||
|   useTabs: false, // 缩进使用tab,不使用空格 | ||||
|   semi: true, // 句尾添加分号 | ||||
|   singleQuote: true, // 使用单引号代替双引号 | ||||
|   proseWrap: 'preserve', // 默认值。因为使用了一些折行敏感型的渲染器(如GitHub comment)而按照markdown文本样式进行折行 | ||||
|   arrowParens: 'avoid', //  (x) => {} 箭头函数参数只有一个时是否要有小括号。avoid:省略括号 | ||||
|   bracketSpacing: true, // 在对象,数组括号与文字之间加空格 "{ foo: bar }" | ||||
|   endOfLine: 'auto', // 结尾是 \n \r \n\r auto | ||||
|   eslintIntegration: false, //不让prettier使用eslint的代码格式进行校验 | ||||
|   htmlWhitespaceSensitivity: 'ignore', // 指定HTML文件的全局空白区域敏感度 有效选项:"css"- 遵守CSS display属性的默认值。"strict" - 空格被认为是敏感的。"ignore" - 空格被认为是不敏感的。html 中空格也会占位,影响布局,prettier 格式化的时候可能会将文本换行,造成布局错乱 | ||||
|   ignorePath: '.prettierignore', // 不使用prettier格式化的文件填写在项目的.prettierignore文件中 | ||||
|   jsxSingleQuote: false, // 在jsx中使用单引号代替双引号 | ||||
|   requireConfig: false, // Require a 'prettierconfig' to format prettier | ||||
|   stylelintIntegration: false, //不让prettier使用stylelint的代码格式进行校验 | ||||
|   trailingComma: 'none', // 在对象或数组最后一个元素后面是否加逗号(在ES5中加尾逗号) | ||||
|   tslintIntegration: false // 不让prettier使用tslint的代码格式进行校验 | ||||
| } | ||||
							
								
								
									
										57
									
								
								.vscode/extensions.json
									
									
									
									
										vendored
									
									
								
							
							
						
						| @@ -1,34 +1,27 @@ | ||||
| { | ||||
| 	"recommendations": [ | ||||
| 		"formulahendry.auto-close-tag", | ||||
| 		"formulahendry.auto-complete-tag", | ||||
| 		"steoates.autoimport", | ||||
| 		"formulahendry.auto-rename-tag", | ||||
| 		"coenraads.bracket-pair-colorizer", | ||||
| 		"pranaygp.vscode-css-peek", | ||||
| 		"mikestead.dotenv", | ||||
| 		"editorconfig.editorconfig", | ||||
| 		"dsznajder.es7-react-js-snippets", | ||||
| 		"dbaeumer.vscode-eslint", | ||||
| 		"miguelsolorio.fluent-icons", | ||||
| 		"mhutchie.git-graph", | ||||
| 		"eamodio.gitlens", | ||||
| 		"lokalise.i18n-ally", | ||||
| 		"afzalsayed96.icones", | ||||
| 		"antfu.iconify", | ||||
| 		"kisstkondoros.vscode-gutter-preview", | ||||
| 		"xabikos.javascriptsnippets", | ||||
| 		"whtouche.vscode-js-console-utils", | ||||
| 		"ritwickdey.liveserver", | ||||
| 		"yzhang.markdown-all-in-one", | ||||
| 		"pkief.material-icon-theme", | ||||
| 		"zhuangtongfa.material-theme", | ||||
| 		"christian-kohler.path-intellisense", | ||||
| 		"esbenp.prettier-vscode", | ||||
| 		"johnsoncodehk.volar", | ||||
| 		"johnsoncodehk.vscode-typescript-vue-plugin", | ||||
| 		"dariofuzinato.vue-peek", | ||||
| 		"wscats.vue", | ||||
| 		"voorjaar.windicss-intellisense" | ||||
| 	] | ||||
|   "recommendations": [ | ||||
|     "afzalsayed96.icones", | ||||
|     "antfu.iconify", | ||||
|     "antfu.unocss", | ||||
|     "christian-kohler.path-intellisense", | ||||
|     "dbaeumer.vscode-eslint", | ||||
|     "eamodio.gitlens", | ||||
|     "editorconfig.editorconfig", | ||||
|     "esbenp.prettier-vscode", | ||||
|     "formulahendry.auto-close-tag", | ||||
|     "formulahendry.auto-complete-tag", | ||||
|     "formulahendry.auto-rename-tag", | ||||
|     "kisstkondoros.vscode-gutter-preview", | ||||
|     "lokalise.i18n-ally", | ||||
|     "mariusalchimavicius.json-to-ts", | ||||
|     "mhutchie.git-graph", | ||||
|     "mikestead.dotenv", | ||||
|     "naumovs.color-highlight", | ||||
|     "pkief.material-icon-theme", | ||||
|     "sdras.vue-vscode-snippets", | ||||
|     "vue.volar", | ||||
|     "vue.vscode-typescript-vue-plugin", | ||||
|     "whtouche.vscode-js-console-utils", | ||||
|     "zhuangtongfa.material-theme" | ||||
|   ] | ||||
| } | ||||
|   | ||||
							
								
								
									
										12
									
								
								.vscode/launch.json
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,12 @@ | ||||
| { | ||||
|   "version": "0.2.0", | ||||
|   "configurations": [ | ||||
|     { | ||||
|       "type": "chrome", | ||||
|       "request": "launch", | ||||
|       "name": "Vue debugger", | ||||
|       "url": "http://localhost:3200", | ||||
|       "webRoot": "${workspaceFolder}" | ||||
|     } | ||||
|   ] | ||||
| } | ||||
							
								
								
									
										142
									
								
								.vscode/settings.json
									
									
									
									
										vendored
									
									
								
							
							
						
						| @@ -1,71 +1,75 @@ | ||||
| { | ||||
| 	"editor.quickSuggestions": { | ||||
| 		"strings": true | ||||
| 	}, | ||||
| 	"workbench.iconTheme": "material-icon-theme", | ||||
| 	"workbench.colorTheme": "One Dark Pro", | ||||
| 	"editor.tabSize": 2, | ||||
| 	"editor.fontLigatures": true, | ||||
| 	"editor.codeActionsOnSave": { | ||||
| 		"source.fixAll.eslint": true | ||||
| 	}, | ||||
| 	"git.enableSmartCommit": true, | ||||
| 	"path-intellisense.mappings": { | ||||
| 		"@": "${workspaceFolder}/src", | ||||
| 		"~@": "${workspaceFolder}/src", | ||||
| 	}, | ||||
| 	"gutterpreview.paths": { | ||||
| 		"@": "/src", | ||||
| 		"~@": "/src" | ||||
| 	}, | ||||
| 	"terminal.integrated.cursorStyle": "line", | ||||
| 	"files.associations": { | ||||
| 		"*.env.*": "dotenv" | ||||
| 	}, | ||||
| 	"[jsonc]": { | ||||
| 		"editor.defaultFormatter": "vscode.json-language-features" | ||||
| 	}, | ||||
| 	"[json]": { | ||||
| 		"editor.defaultFormatter": "vscode.json-language-features" | ||||
| 	}, | ||||
| 	"[javascript]": { | ||||
| 		"editor.defaultFormatter": "esbenp.prettier-vscode" | ||||
| 	}, | ||||
| 	"javascript.updateImportsOnFileMove.enabled": "always", | ||||
| 	"[javascriptreact]": { | ||||
| 		"editor.defaultFormatter": "esbenp.prettier-vscode" | ||||
| 	}, | ||||
| 	"terminal.integrated.fontSize": 14, | ||||
| 	"terminal.integrated.fontWeight": 500, | ||||
| 	"i18n-ally.displayLanguage": "zh", | ||||
| 	"[html]": { | ||||
| 		"editor.defaultFormatter": "esbenp.prettier-vscode" | ||||
| 	}, | ||||
| 	"[typescript]": { | ||||
| 		"editor.defaultFormatter": "esbenp.prettier-vscode" | ||||
| 	}, | ||||
| 	"[vue]": { | ||||
| 		"editor.defaultFormatter": "johnsoncodehk.volar" | ||||
| 	}, | ||||
| 	"terminal.integrated.tabs.enabled": true, | ||||
| 	"[typescriptreact]": { | ||||
| 		"editor.defaultFormatter": "esbenp.prettier-vscode" | ||||
| 	}, | ||||
| 	"[markdown]": { | ||||
| 		"editor.defaultFormatter": "yzhang.markdown-all-in-one" | ||||
| 	}, | ||||
| 	"workbench.productIconTheme": "fluent-icons", | ||||
| 	"vue3snippets.enable-compile-vue-file-on-did-save-code": false, | ||||
| 	"editor.formatOnSave": false, | ||||
| 	"material-icon-theme.activeIconPack": "angular", | ||||
| 	"material-icon-theme.files.associations": {}, | ||||
| 	"material-icon-theme.folders.associations": { | ||||
| 		"enum": "typescript", | ||||
| 		"store": "context", | ||||
| 		"composable": "hook", | ||||
| 		"composables": "hook", | ||||
| 		"directive": "tools", | ||||
| 		"directives": "tools", | ||||
| 		"business": "core" | ||||
| 	} | ||||
|   "editor.codeActionsOnSave": { | ||||
|     "source.fixAll.eslint": true | ||||
|   }, | ||||
|   "editor.fontLigatures": true, | ||||
|   "editor.formatOnSave": false, | ||||
|   "editor.guides.bracketPairs": "active", | ||||
|   "editor.quickSuggestions": { | ||||
|     "strings": true | ||||
|   }, | ||||
|   "editor.tabSize": 2, | ||||
|   "eslint.validate": ["javascript", "javascriptreact", "typescript", "typescriptreact", "vue", "json"], | ||||
|   "files.associations": { | ||||
|     "*.env.*": "dotenv" | ||||
|   }, | ||||
|   "files.eol": "\n", | ||||
|   "git.enableSmartCommit": true, | ||||
|   "gutterpreview.paths": { | ||||
|     "@": "/src", | ||||
|     "~@": "/src" | ||||
|   }, | ||||
|   "material-icon-theme.activeIconPack": "angular", | ||||
|   "material-icon-theme.files.associations": {}, | ||||
|   "material-icon-theme.folders.associations": { | ||||
|     "src-tauri": "src", | ||||
|     "enum": "typescript", | ||||
|     "enums": "typescript", | ||||
|     "store": "context", | ||||
|     "stores": "context", | ||||
|     "composable": "hook", | ||||
|     "composables": "hook", | ||||
|     "directive": "tools", | ||||
|     "directives": "tools", | ||||
|     "business": "core", | ||||
|     "request": "api", | ||||
|     "adapter": "middleware" | ||||
|   }, | ||||
|   "path-intellisense.mappings": { | ||||
|     "@": "${workspaceFolder}/src", | ||||
|     "~@": "${workspaceFolder}/src" | ||||
|   }, | ||||
|   "terminal.integrated.fontSize": 14, | ||||
|   "terminal.integrated.fontWeight": 500, | ||||
|   "terminal.integrated.tabs.enabled": true, | ||||
|   "workbench.iconTheme": "material-icon-theme", | ||||
|   "workbench.colorTheme": "One Dark Pro", | ||||
|   "[html]": { | ||||
|     "editor.defaultFormatter": "esbenp.prettier-vscode" | ||||
|   }, | ||||
|   "[json]": { | ||||
|     "editor.defaultFormatter": "esbenp.prettier-vscode" | ||||
|   }, | ||||
|   "[jsonc]": { | ||||
|     "editor.defaultFormatter": "esbenp.prettier-vscode" | ||||
|   }, | ||||
|   "[javascript]": { | ||||
|     "editor.defaultFormatter": "esbenp.prettier-vscode" | ||||
|   }, | ||||
|   "[javascriptreact]": { | ||||
|     "editor.defaultFormatter": "esbenp.prettier-vscode" | ||||
|   }, | ||||
|   "[markdown]": { | ||||
|     "editor.defaultFormatter": "yzhang.markdown-all-in-one" | ||||
|   }, | ||||
|   "[typescript]": { | ||||
|     "editor.defaultFormatter": "esbenp.prettier-vscode" | ||||
|   }, | ||||
|   "[typescriptreact]": { | ||||
|     "editor.defaultFormatter": "esbenp.prettier-vscode" | ||||
|   }, | ||||
|   "[vue]": { | ||||
|     "editor.defaultFormatter": "Vue.volar" | ||||
|   }, | ||||
|   "i18n-ally.localesPaths": ["src/locales", "src/locales/lang"] | ||||
| } | ||||
|   | ||||
							
								
								
									
										443
									
								
								CHANGELOG.md
									
									
									
									
									
								
							
							
						
						| @@ -1,141 +1,366 @@ | ||||
| # Changelog | ||||
|  | ||||
| All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines. | ||||
| ## v0.10.0...v0.10.1 | ||||
|  | ||||
| ### [0.0.5](https://github.com/honghuangdc/soybean-admin/compare/v0.0.4...v0.0.5) (2021-11-28) | ||||
| [compare changes](https://github.com/honghuangdc/soybean-admin/compare/v0.10.0...v0.10.1) | ||||
|  | ||||
| ### 📖 Documentation | ||||
|  | ||||
| - **projects:** CHANGELOG.md ([a252138](https://github.com/honghuangdc/soybean-admin/commit/a252138)) | ||||
| - **projects:** Update README.md ([b5839ea](https://github.com/honghuangdc/soybean-admin/commit/b5839ea)) | ||||
|  | ||||
| ### 🏡 Chore | ||||
|  | ||||
| - **projects:** Add switch for pageRoute plugin [添加自动生成路由的插件的开关] ([780ac75](https://github.com/honghuangdc/soybean-admin/commit/780ac75)) | ||||
| - Release v0.10.1 ([44e4c04](https://github.com/honghuangdc/soybean-admin/commit/44e4c04)) | ||||
|  | ||||
| ### ❤️ Contributors | ||||
|  | ||||
| - Soybean ([@soybeanjs](http://github.com/soybeanjs)) | ||||
|  | ||||
| ## v0.9.9...v0.10.0 | ||||
|  | ||||
| [compare changes](https://github.com/honghuangdc/soybean-admin/compare/v0.9.9...v0.10.0) | ||||
|  | ||||
| ### 🚀 Features | ||||
|  | ||||
| - **projects:** 返回顶部功能适配新布局 ([54e2cb5](https://github.com/honghuangdc/soybean-admin/commit/54e2cb5)) | ||||
| - **components:** Add tree related component instances ([d203a35](https://github.com/honghuangdc/soybean-admin/commit/d203a35)) | ||||
| - **components:** Add routing data related to tree components and page display optimization ([a0f55ac](https://github.com/honghuangdc/soybean-admin/commit/a0f55ac)) | ||||
| - **projects:** 增加i18n支持翻译菜单,tab,title ([3d48aa8](https://github.com/honghuangdc/soybean-admin/commit/3d48aa8)) | ||||
| - **projects:** Add menu translate [翻译菜单] ([f68285f](https://github.com/honghuangdc/soybean-admin/commit/f68285f)) | ||||
| - **projects:** 增加主题切换过渡效果 ([8da8843](https://github.com/honghuangdc/soybean-admin/commit/8da8843)) | ||||
| - **projects:** Support mobile layout [支持移动端布局] ([f2b518e](https://github.com/honghuangdc/soybean-admin/commit/f2b518e)) | ||||
|  | ||||
| ### 🐞 Bug Fixes | ||||
|  | ||||
| - **projects:** Fix router guide [修复路由跳转异常] fixed #216 ([#216](https://github.com/honghuangdc/soybean-admin/issues/216)) | ||||
| - **projects:** Fix better-mock usage [修复better-mock用法] ([c57640a](https://github.com/honghuangdc/soybean-admin/commit/c57640a)) | ||||
| - **projects:** Tsconfig missing isolatedModules ([ab49afd](https://github.com/honghuangdc/soybean-admin/commit/ab49afd)) | ||||
| - **projects:** Fix mockjs [修复mockjs] ([9b19f96](https://github.com/honghuangdc/soybean-admin/commit/9b19f96)) | ||||
| - **projects:** Add prod mockjs switch [添加生产模式的mockjs的开关] ([9f5638f](https://github.com/honghuangdc/soybean-admin/commit/9f5638f)) | ||||
| - **projects:** 修复面包屑导航下拉菜单语言显示问题 ([ee8fa04](https://github.com/honghuangdc/soybean-admin/commit/ee8fa04)) | ||||
| - **projects:** Hide the drawer when it is initial mobile mode [初始化时为移动端布局则隐藏侧边栏] fixed #238 ([#238](https://github.com/honghuangdc/soybean-admin/issues/238)) | ||||
|  | ||||
| ### 🔥 Performance | ||||
|  | ||||
| - **projects:** Complete dynamic route translate [补充动态路由的翻译] ([7b746fa](https://github.com/honghuangdc/soybean-admin/commit/7b746fa)) | ||||
| - **projects:** Move changing document title by locale to global event of composables & add appLoading unmount ([08e194e](https://github.com/honghuangdc/soybean-admin/commit/08e194e)) | ||||
|  | ||||
| ### 💅 Refactors | ||||
|  | ||||
| - **projects:** Update useTable ([211ae1f](https://github.com/honghuangdc/soybean-admin/commit/211ae1f)) | ||||
| - **projects:** Remove page examples: tree [去除tree相关示例页面] ([f309003](https://github.com/honghuangdc/soybean-admin/commit/f309003)) | ||||
| - **projects:** Use better-mock replace mockjs [用better-mock替换mockjs] ([9d3c732](https://github.com/honghuangdc/soybean-admin/commit/9d3c732)) | ||||
| - **projects:** Upgrade vue3.3, official support defineOptions ([86a370f](https://github.com/honghuangdc/soybean-admin/commit/86a370f)) | ||||
|  | ||||
| ### 📖 Documentation | ||||
|  | ||||
| - **projects:** Add qq to README.md [文档添加QQ群] ([f74a642](https://github.com/honghuangdc/soybean-admin/commit/f74a642)) | ||||
| - **projects:** Update README.md [更新README.md] ([397092c](https://github.com/honghuangdc/soybean-admin/commit/397092c)) | ||||
| - **projects:** Update README.md [更新README.md] ([5a4f842](https://github.com/honghuangdc/soybean-admin/commit/5a4f842)) | ||||
| - **projects:** Update README.md [更新README.md] ([a765da6](https://github.com/honghuangdc/soybean-admin/commit/a765da6)) | ||||
| - **projects:** Update README.md [更新README.md] ([a989b44](https://github.com/honghuangdc/soybean-admin/commit/a989b44)) | ||||
| - **projects:** 优化README.md ([6ea755f](https://github.com/honghuangdc/soybean-admin/commit/6ea755f)) | ||||
| - **projects:** Readme.md 二次开发的项目内容换行 ([f3a1707](https://github.com/honghuangdc/soybean-admin/commit/f3a1707)) | ||||
| - **projects:** Update CHANGELOG.md ([5f6caab](https://github.com/honghuangdc/soybean-admin/commit/5f6caab)) | ||||
|  | ||||
| ### 📦 Build | ||||
|  | ||||
| - **projects:** Remove old layout,tab package [去除旧的布局和页签依赖] ([42e6de3](https://github.com/honghuangdc/soybean-admin/commit/42e6de3)) | ||||
| - **deps:** Update deps ([db62959](https://github.com/honghuangdc/soybean-admin/commit/db62959)) | ||||
| - **deps:** Update deps [升级依赖] ([f2e82da](https://github.com/honghuangdc/soybean-admin/commit/f2e82da)) | ||||
| - **deps:** Update deps and remove vite-plugin-html [升级依赖,去除vite-plugin-html] ([eaf3678](https://github.com/honghuangdc/soybean-admin/commit/eaf3678)) | ||||
| - **deps:** Update deps [升级依赖] ([bae1767](https://github.com/honghuangdc/soybean-admin/commit/bae1767)) | ||||
| - **projects:** Update deps and fix type error [升级依赖并修复类型问题] ([34f023c](https://github.com/honghuangdc/soybean-admin/commit/34f023c)) | ||||
| - **deps:** Update deps [升级依赖] ([c264216](https://github.com/honghuangdc/soybean-admin/commit/c264216)) | ||||
| - **deps:** Update deps [升级依赖] ([40f8587](https://github.com/honghuangdc/soybean-admin/commit/40f8587)) | ||||
| - **projects:** Update deps and fix style [升级依赖&修复代码格式] ([c1c4335](https://github.com/honghuangdc/soybean-admin/commit/c1c4335)) | ||||
|  | ||||
| ### 🏡 Chore | ||||
|  | ||||
| - **deps:** Update deps ([cebbef6](https://github.com/honghuangdc/soybean-admin/commit/cebbef6)) | ||||
| - **projects:** Remove useless packages, update lint-staged config, add githublogen ([5aaa318](https://github.com/honghuangdc/soybean-admin/commit/5aaa318)) | ||||
| - Release v0.10.0 ([270a055](https://github.com/honghuangdc/soybean-admin/commit/270a055)) | ||||
|  | ||||
| ### 🎨 Styles | ||||
|  | ||||
| - **projects:** Per style [完善样式] ([209ef3d](https://github.com/honghuangdc/soybean-admin/commit/209ef3d)) | ||||
|  | ||||
| ### ❤️ Contributors | ||||
|  | ||||
| - Soybean ([@soybeanjs](http://github.com/soybeanjs)) | ||||
| - Cc <cc@qq.com> | ||||
| - Xiaojunnuo ([@greper](http://github.com/greper)) | ||||
| - Kirk Lin ([@kirklin](http://github.com/kirklin)) | ||||
| - Small_happy <5304122+small_happy@user.noreply.gitee.com> | ||||
| - 燕博文 <349952469@qq.com> | ||||
|  | ||||
| ### [0.9.9](https://github.com/honghuangdc/soybean-admin/compare/v0.9.8...v0.9.9) (2023-03-13) | ||||
|  | ||||
|  | ||||
| ### Features | ||||
|  | ||||
| * **projects:** 新增组件页面:按钮、卡片示例 ([bdc39af](https://github.com/honghuangdc/soybean-admin/commit/bdc39aff1b05845cbcfcab8d40620d7b8ba52d13)) | ||||
| * **hooks:** add useNaiveTable ([cc13fcc](https://github.com/honghuangdc/soybean-admin/commit/cc13fcc8aaaf667902d69350ad0de3cc16c261ab)) | ||||
| * **projects:** custom unocss colors support opacity ([488e6e3](https://github.com/honghuangdc/soybean-admin/commit/488e6e32045d995361b898ef3d384dafcb069008)) | ||||
| * **projects:** new layout,tab and add update theme settings ([912c353](https://github.com/honghuangdc/soybean-admin/commit/912c3531c5d7a3ab30e15d39bed98ca9b20131ab)) | ||||
|  | ||||
|  | ||||
| ### Bug Fixes | ||||
|  | ||||
| * **components:** 修复HorizontalLayout布局 ([9fb641f](https://github.com/honghuangdc/soybean-admin/commit/9fb641f71e74e054c84cda8e18969d1168ef2903)) | ||||
| * **components:** 修复iconSelect选择器点击事件失效 ([7e505f9](https://github.com/honghuangdc/soybean-admin/commit/7e505f9b96f5380b6c27b4c2ee2ab0698c4eedc4)) | ||||
| * **components:** 页面跳转被拦截, 则会出现 tab 页签与页面不一致的问题 ([bd5dd2c](https://github.com/honghuangdc/soybean-admin/commit/bd5dd2cf28a0943721c397d70c53fe3988a4f81a)) | ||||
| * **components:** refresh cached routes ([b0f98e4](https://github.com/honghuangdc/soybean-admin/commit/b0f98e4bfac31751dd39a7dec203277db813694b)) | ||||
| * **projects:** fix eslint svg cause incorrect icon render ([0b5afda](https://github.com/honghuangdc/soybean-admin/commit/0b5afda287a0eea57daa8d35409297e2cbf6d578)) | ||||
| * **projects:** fix github bug-report ([f73e3f6](https://github.com/honghuangdc/soybean-admin/commit/f73e3f648decf5632fe5193e825b1f912c5f6153)) | ||||
| * **projects:** fix pwa logo ([bf2f617](https://github.com/honghuangdc/soybean-admin/commit/bf2f6172554337450c4a300b8bdb580d3e25ad45)) | ||||
| * **projects:** not only `/login` claim dynamic path scenario , but also others , eg:/user/1 ([6059891](https://github.com/honghuangdc/soybean-admin/commit/60598915561f1bad6ffba0dc102f0a776be52f0d)) | ||||
| * **projects:** sortRoutes recursively ([9188941](https://github.com/honghuangdc/soybean-admin/commit/918894147ab739b4592e8c76378246e28c46491a)) | ||||
| * **projects:** the length of routes children list should greater than 0 ([e1afc10](https://github.com/honghuangdc/soybean-admin/commit/e1afc10b80243a5d8d270a351a37a0a2d159f167)) | ||||
| * **utils:** make AxiosRequestConfig optional for request.handleDelete() ([4a6fec8](https://github.com/honghuangdc/soybean-admin/commit/4a6fec8af0b44b546f81ec41d7a5947371e189b2)) | ||||
|  | ||||
| ### [0.0.4](https://github.com/honghuangdc/soybean-admin/compare/v0.0.3...v0.0.4) (2021-11-25) | ||||
| ### [0.9.8](https://github.com/honghuangdc/soybean-admin/compare/v0.9.7...v0.9.8) (2023-01-15) | ||||
|  | ||||
|  | ||||
| ### Features | ||||
|  | ||||
| * **components:** 添加多页签Tab点击后自动往中间滚动 ([8ce627a](https://github.com/honghuangdc/soybean-admin/commit/8ce627a397ee2605d967e7f9c8aa558b99fca22d)) | ||||
| * **projects:** 新增网址导航页面 ([32aa5ee](https://github.com/honghuangdc/soybean-admin/commit/32aa5ee75af80c2f959b74573d5c44c452d2715c)) | ||||
| * **storage:** local存储增加有效期 ([e6c9b35](https://github.com/honghuangdc/soybean-admin/commit/e6c9b35ab402df7d9ebb82306131fc30d0a8b893)) | ||||
| * 新增 affix 属性,用于将其固定在tab卡 ([e772ff0](https://github.com/honghuangdc/soybean-admin/commit/e772ff05fb6ef513bd37cd9b1e245ea72f0ad6d2)) | ||||
| * **projects:** add compress script [添加压缩命令] ([be6d431](https://github.com/honghuangdc/soybean-admin/commit/be6d431485a5688bd1ed567e11c1ca35ab9259b0)) | ||||
| * **projects:** add generate logo script ([25daa23](https://github.com/honghuangdc/soybean-admin/commit/25daa236064c9a76677dbf16bc6d9717b1e0040f)) | ||||
| * **projects:** add new route plugin @soybeanjs/vite-plugin-vue-page-route [集成新的路由插件] ([3131e00](https://github.com/honghuangdc/soybean-admin/commit/3131e00f0f4a66756f547892a8d312cde3aaf868)) | ||||
| * **projects:** add script about generating png logo from [添加根据svg生成png图标的命令] ([70aeefe](https://github.com/honghuangdc/soybean-admin/commit/70aeefea02fcc13c152ee9d7a1197381bac724b9)) | ||||
| * setting 页面新增 是否显示footer的开关 ([d064f62](https://github.com/honghuangdc/soybean-admin/commit/d064f6285a6d1616d7606f1390d5f01819b258bb)) | ||||
|  | ||||
|  | ||||
| ### Bug Fixes | ||||
|  | ||||
| * **components:** 修复多页签按钮风格的tab滚动问题 ([c429cd0](https://github.com/honghuangdc/soybean-admin/commit/c429cd0293dbfbf6b6df539857c276d3218de754)) | ||||
| * **components:** 修复多页签Tab自动滚动问题 ([20aa39f](https://github.com/honghuangdc/soybean-admin/commit/20aa39f14ed0239f02118b62a6aa4706b1f9dd21)) | ||||
| * **projects:** 添加西瓜视频实例在onUnMounted的销毁,多页签居中距离精确 ([738964a](https://github.com/honghuangdc/soybean-admin/commit/738964a76975dc3cb1f3206eb13a7612b92f1aed)) | ||||
| * **projects:** 修复打包构建时图标错误 ([93f9aa9](https://github.com/honghuangdc/soybean-admin/commit/93f9aa9584be803704cf0ff54c8da0f84b71c408)) | ||||
| * **types:** 添加dotEnv类型的非空判断 ([cff11d9](https://github.com/honghuangdc/soybean-admin/commit/cff11d91758a470ad6ff33888ed24747b2cc0c03)) | ||||
| * **components:** 修复路由在path中包含重复路单词径菜单时,被激活会错误展开 ([264da00](https://github.com/honghuangdc/soybean-admin/commit/264da00e5d2cd8139907c2ac11a046649d942f4b)) | ||||
| * count can't display when endValue is 0. ([0282feb](https://github.com/honghuangdc/soybean-admin/commit/0282feb1730724ba66c2e57ab354099afa074e81)) | ||||
| * **projects:** 修复动态路由模式下路由不排序的问题 ([58b27c9](https://github.com/honghuangdc/soybean-admin/commit/58b27c96932ba89b362138a6056a82c25a7be282)) | ||||
| * **projects:** 修复tabs在static路由模式下可以关闭首页 ([7211a17](https://github.com/honghuangdc/soybean-admin/commit/7211a17a8158b01a1f6dd6c83591f86d76633de0)) | ||||
| * **projects:** add router-page.d.ts to git [将router-page.d.ts添加git提交] ([7a58035](https://github.com/honghuangdc/soybean-admin/commit/7a5803551419f65ca55ba797b49273b3a0dc6067)) | ||||
| * **projects:** fix login success message [修复登录成功的消息提示] ([810398a](https://github.com/honghuangdc/soybean-admin/commit/810398abb882613f82ba385e8a7666cf8b86d92d)) | ||||
| * **projects:** fix router when the dynamic routes api was failed [修复当动态路由接口失败后路由异常问题] ([f2b580f](https://github.com/honghuangdc/soybean-admin/commit/f2b580fc067e81202238bf8079a13ff014b0b329)) | ||||
| * **projects:** fix vite-pwa plugin config ([94098d0](https://github.com/honghuangdc/soybean-admin/commit/94098d02e8cec12e3c9f9331ece154b65d1c9150)) | ||||
| * remove height limit h-360px ([b5c570a](https://github.com/honghuangdc/soybean-admin/commit/b5c570adf55fd235dcec49bc20837623b1d5d3c4)) | ||||
| * set password attributes ([a9a3703](https://github.com/honghuangdc/soybean-admin/commit/a9a37036d58274385a779e6460f7be281dafdcaf)) | ||||
|  | ||||
| ### [0.0.3](https://github.com/honghuangdc/soybean-admin/compare/v0.0.2...v0.0.3) (2021-11-23) | ||||
|  | ||||
| ### 0.0.2 (2021-11-21) | ||||
| ### [0.9.7](https://github.com/honghuangdc/soybean-admin/compare/v0.9.6...v0.9.7) (2022-11-07) | ||||
|  | ||||
|  | ||||
| ### Features | ||||
|  | ||||
| * **component:** 增加剪贴板示例 ([f1cd995](https://github.com/honghuangdc/soybean-admin/commit/f1cd9955d9ef0dd06e6eb0ab88ab6be80db789a3)) | ||||
| * **components:** 添加面包屑 ([c1cdc3a](https://github.com/honghuangdc/soybean-admin/commit/c1cdc3a9ed673d0fd84aa1eaa9fc72468bd5aaf9)) | ||||
| * **components:** 添加图片验证码 ([336c776](https://github.com/honghuangdc/soybean-admin/commit/336c7766f9130619b7076e832d7ade7cbc3049f2)) | ||||
| * **components:** 添加主题配置抽屉,添加暗黑主题 ([a87593f](https://github.com/honghuangdc/soybean-admin/commit/a87593f58a1185d6360b8e49ffe1c9fff768770e)) | ||||
| * **components:** 添加vertical-mix的导航模式下的菜单 ([f24ec1c](https://github.com/honghuangdc/soybean-admin/commit/f24ec1c5326c117e618aed8b3e1867c24fcd84f4)) | ||||
| * **projects:** 布局调整 ([eda87f0](https://github.com/honghuangdc/soybean-admin/commit/eda87f041d5d87ae9612f369608e486a8e563f17)) | ||||
| * **projects:** 菜单数据及组件接入 ([3226a72](https://github.com/honghuangdc/soybean-admin/commit/3226a724be65935ce89fe6ae67f49a20d255c6ac)) | ||||
| * **projects:** 导航栏模式配置:界面实现及主题配置布局调整 ([f002124](https://github.com/honghuangdc/soybean-admin/commit/f002124ee11bc93e6b9955549143b695417e7f8d)) | ||||
| * **projects:** 登录页面实现 ([f1e7cf6](https://github.com/honghuangdc/soybean-admin/commit/f1e7cf608ea7d61dcd24f8780cde9cc4c59658ce)) | ||||
| * **projects:** 多页签绑定路由 ([f29bc05](https://github.com/honghuangdc/soybean-admin/commit/f29bc05dd9f53144ef56440033a6f747c112e83d)) | ||||
| * **projects:** 分析页更新,添加关于页面 ([8e18218](https://github.com/honghuangdc/soybean-admin/commit/8e18218196c52e6a34b96bc313044b6e47886f85)) | ||||
| * **projects:** 工作台页面:添加技术栈官网链接 ([364c64b](https://github.com/honghuangdc/soybean-admin/commit/364c64b4641e48bcf8cc8600680bcaa39a1a9413)) | ||||
| * **projects:** 工作台页面布局 ([4c85569](https://github.com/honghuangdc/soybean-admin/commit/4c85569b764b176c9c3a7f9ba3092ff3567e5512)) | ||||
| * **projects:** 首页更新 ([5c01006](https://github.com/honghuangdc/soybean-admin/commit/5c01006306873944671a4f1d863ced6ba23f6245)) | ||||
| * **projects:** 四种基本布局完成 ([86d4a20](https://github.com/honghuangdc/soybean-admin/commit/86d4a207eef8daf01c6336e8aaedf3aebb90e7a7)) | ||||
| * **projects:** 添加百度地图插件 ([6abe094](https://github.com/honghuangdc/soybean-admin/commit/6abe094ff23f52fdd62c025bce17debd9ea2f907)) | ||||
| * **projects:** 添加多级菜单页面 ([3f49d6d](https://github.com/honghuangdc/soybean-admin/commit/3f49d6db30aee0a6c1007cb00069835b102deb70)) | ||||
| * **projects:** 添加多页签风格:按钮和浏览器两种风格 ([3cfa0f1](https://github.com/honghuangdc/soybean-admin/commit/3cfa0f103cf788e57ee26743e89bf5fe33a09660)) | ||||
| * **projects:** 添加多页签右键菜单 ([d6f5237](https://github.com/honghuangdc/soybean-admin/commit/d6f5237c8c167314d578312dcad7505737f0b4c8)) | ||||
| * **projects:** 添加富文本和markdown编辑器插件及示例页面 ([60c2064](https://github.com/honghuangdc/soybean-admin/commit/60c20647a0d8e6d877a0f23a6e7da05ff09d14a0)) | ||||
| * **projects:** 添加固定路由 ([ff4a09c](https://github.com/honghuangdc/soybean-admin/commit/ff4a09c452c98791f7d67ba5f135e9cf5099c29c)) | ||||
| * **projects:** 添加环境文件env对应的类型 ([4f05095](https://github.com/honghuangdc/soybean-admin/commit/4f050953363b364815a08103047df3fe377d8f56)) | ||||
| * **projects:** 添加判断是否是移动端的hooks ([0a9fba9](https://github.com/honghuangdc/soybean-admin/commit/0a9fba90b5e51fd2d39c47490f49dac7599a9742)) | ||||
| * **projects:** 添加全屏显示 ([0a1711d](https://github.com/honghuangdc/soybean-admin/commit/0a1711d5b1d8e863d24a55690fa8696c79acaaf9)) | ||||
| * **projects:** 添加项目配置拷贝 ([2d9d5c0](https://github.com/honghuangdc/soybean-admin/commit/2d9d5c0353ca6d2dc86965fe383bf2925a47d239)) | ||||
| * **projects:** 添加exception页面:403,404,500 ([d012c4e](https://github.com/honghuangdc/soybean-admin/commit/d012c4ecf2cd325567d419684153955560ce90da)) | ||||
| * **projects:** 添加multiTab标签页 ([eec0b36](https://github.com/honghuangdc/soybean-admin/commit/eec0b36f594e0d337f13d3d0ce30b1f768614f5c)) | ||||
| * **projects:** 添加reload context ([03ebd49](https://github.com/honghuangdc/soybean-admin/commit/03ebd49c8639bf7f4f88b1a0523d2caec2d248ee)) | ||||
| * **projects:** 添加svg logo自适应主题颜色 ([e1e5579](https://github.com/honghuangdc/soybean-admin/commit/e1e5579e8fe71ed97e2ce11d907705157874bd71)) | ||||
| * **projects:** 添加swiper插件 ([27f600c](https://github.com/honghuangdc/soybean-admin/commit/27f600c4677afeacd3e67f189df139db5cde0aa3)) | ||||
| * **projects:** 头部添加菜单折叠按钮和github地址 ([3ec1fc8](https://github.com/honghuangdc/soybean-admin/commit/3ec1fc8f0c23fcba56d4bffb20028948f985659c)) | ||||
| * **projects:** 项目初始化搭建,集成eslint规范,集成代码提交规范 ([6754da4](https://github.com/honghuangdc/soybean-admin/commit/6754da4d83976a02eced801220320d8c9aa1da85)) | ||||
| * **projects:** 新增导航模式配置 ([49c2dc4](https://github.com/honghuangdc/soybean-admin/commit/49c2dc4f23913c9ef86ee046c6ae53d4406cbca7)) | ||||
| * **projects:** 新增顶部菜单 ([221d2cc](https://github.com/honghuangdc/soybean-admin/commit/221d2cc02dfdf3f78cb415f26c88f1f274942222)) | ||||
| * **projects:** 新增多页签缓存功能 ([d86f891](https://github.com/honghuangdc/soybean-admin/commit/d86f891c64f802bbca50e31e3e4f7ccdad65eed1)) | ||||
| * **projects:** 新增高德地图插件 ([ea82edc](https://github.com/honghuangdc/soybean-admin/commit/ea82edc1146fefa208bb9e6f985dfb000d197d16)) | ||||
| * **projects:** 新增视频插件 ([6a692d4](https://github.com/honghuangdc/soybean-admin/commit/6a692d4f99942389cd2a5e72ebc852a92e80f742)) | ||||
| * **projects:** 新增腾讯地图插件 ([3f02c21](https://github.com/honghuangdc/soybean-admin/commit/3f02c215c54fde4c85bf13e92c2620553d5a1840)) | ||||
| * **projects:** 新增文档页面 ([7654b2a](https://github.com/honghuangdc/soybean-admin/commit/7654b2adf3d0bf051d13b401dfa3534ca7ee3e0c)) | ||||
| * **projects:** 新增主题配置 ([ed67b79](https://github.com/honghuangdc/soybean-admin/commit/ed67b797c215fe165808505f4b0b9400f3182383)) | ||||
| * **projects:** 新增主题配置:页面功能 ([8601ce2](https://github.com/honghuangdc/soybean-admin/commit/8601ce2ea184455fcba1d17d759cd4b933b31d96)) | ||||
| * **projects:** 新增主题颜色配置 ([d93493b](https://github.com/honghuangdc/soybean-admin/commit/d93493b91ca856573c306e890e8c6f6a46b5bda3)) | ||||
| * **projects:** 增加Icon以及打印功能示例 ([d5bce26](https://github.com/honghuangdc/soybean-admin/commit/d5bce26454c7d7c9da29e01675624f985755779f)) | ||||
| * **projects:** 主题配置:页面功能和页面显示 ([a0392b3](https://github.com/honghuangdc/soybean-admin/commit/a0392b3d28f89f2b5fcf5b4d2b82ab7a068a23b8)) | ||||
| * **projects:** vertical-mix的导航模式的二级菜单显示 ([736f314](https://github.com/honghuangdc/soybean-admin/commit/736f3146cb7cb3f56e06a8185ec8532f25c40b13)) | ||||
| * **route:** 增加功能示例模块 ([efd29bc](https://github.com/honghuangdc/soybean-admin/commit/efd29bc331f630b57eab800bba08b22c53115d76)) | ||||
| * **projects:** 全局搜索菜单及消息通知适配移动端 ([97e2ffd](https://github.com/honghuangdc/soybean-admin/commit/97e2ffddf4ac047133dc016a91ac07556e562d29)) | ||||
| * **projects:** 实现用户管理页面 ([472f93b](https://github.com/honghuangdc/soybean-admin/commit/472f93bfc111e8ca94adef823b8cc12e4f8cd2c6)) | ||||
| * **projects:** 适配移动端,修复Tab关闭图标的bug ([296b154](https://github.com/honghuangdc/soybean-admin/commit/296b154be5dfe410b3cfca9afaeeaf9c47de3e0c)), closes [#87](https://github.com/honghuangdc/soybean-admin/issues/87) [#106](https://github.com/honghuangdc/soybean-admin/issues/106) [#109](https://github.com/honghuangdc/soybean-admin/issues/109) [#111](https://github.com/honghuangdc/soybean-admin/issues/111) | ||||
| * **projects:** 添加请求适配adapter层应用的示例页面 ([8d11a6a](https://github.com/honghuangdc/soybean-admin/commit/8d11a6affcfa37344011a6aaf3d6e005546f0e61)) | ||||
| * **projects:** 添加生产的主题配置缓存 ([718c362](https://github.com/honghuangdc/soybean-admin/commit/718c36263e451a39bca6da6c33657a09515ffbcc)) | ||||
| * **projects:** 添加系统管理的页面 ([c33b5eb](https://github.com/honghuangdc/soybean-admin/commit/c33b5ebfefbb3ae507141bd2e9414231fd1512d4)) | ||||
| * **projects:** 添加组件名称,调整vue文件里面的类型声明位置 ([f64bc91](https://github.com/honghuangdc/soybean-admin/commit/f64bc91ce285c7a9806ed0f6ae970d9b598fd0cb)) | ||||
| * **projects:** 添加provide、inject上下文示例 ([a444731](https://github.com/honghuangdc/soybean-admin/commit/a444731e9eef43022930c3550dcfc058e70a2941)) | ||||
| * **projects:** 系统消息组件代码优化 ([9518372](https://github.com/honghuangdc/soybean-admin/commit/9518372fe0431d4e08a5f40d1b2982691fbb4107)) | ||||
| * **projects:** 增加返回顶部功能 ([894b0f1](https://github.com/honghuangdc/soybean-admin/commit/894b0f1c182a36ad1774a8144bf50dd4e0b62a46)) | ||||
| * **projects:** 增加系统消息组件 ([afa0134](https://github.com/honghuangdc/soybean-admin/commit/afa0134fdd63c253e102bc129e275d16ca25508e)) | ||||
| * **projects:** add constant route page without login status[添加未登录可访问的固定路由示例页面] ([78efd77](https://github.com/honghuangdc/soybean-admin/commit/78efd7793a241811065caf56edf7e68aea58bc8c)) | ||||
| * **projects:** add pinia setup syntax example: setup-store[添加setup syntax的pinia示例setup-store] ([82c4b09](https://github.com/honghuangdc/soybean-admin/commit/82c4b09b9411390f97c2d10bb211c66ed9656b63)) | ||||
| * **projects:** import i18n [引入i18n] ([b632b7f](https://github.com/honghuangdc/soybean-admin/commit/b632b7ffed5c6d6ec15c23c8cce030bf669c554f)) | ||||
| * **projects:** new router system [新的路由系统] ([c7b6a3f](https://github.com/honghuangdc/soybean-admin/commit/c7b6a3fbecd1ba051833e4e47b75a06935f212c8)) | ||||
| * **projects:** refactor icon system, unify icon usage [重构图标系统,统一图标用法] ([811f820](https://github.com/honghuangdc/soybean-admin/commit/811f820644053606e50624c2f184f9669f3eff7e)) | ||||
| * **projects:** support constant route without login status[支持未登录状态下访问自定义的固定路由] ([a539112](https://github.com/honghuangdc/soybean-admin/commit/a539112a0f53183ee073d4eb9034ef48209fe30c)) | ||||
| * **projects:** useNaiveTable函数:类型部分 ([02992dc](https://github.com/honghuangdc/soybean-admin/commit/02992dc02d105cbfcebbea397438c68db1fa8177)) | ||||
| * **tabs:** 多页签增加关闭所有 ([8237adb](https://github.com/honghuangdc/soybean-admin/commit/8237adb9c0b187911df37d6d99fd84718bc3ea8f)) | ||||
|  | ||||
|  | ||||
| ### Bug Fixes | ||||
|  | ||||
| * **多页签:** 在pc模式下右键某个多页签会切换路由 ([a4394dc](https://github.com/honghuangdc/soybean-admin/commit/a4394dc3ee81ea2abc9a9fd243714309a1b4e6ab)) | ||||
| * **components:** 修复按钮Tab自适应主题颜色 ([3d1f419](https://github.com/honghuangdc/soybean-admin/commit/3d1f41925d54ebe89f1bbbdfe916be59bb97c9cf)) | ||||
| * **components:** 修复BaseLayout的HorizontalLayout ([0344f46](https://github.com/honghuangdc/soybean-admin/commit/0344f46c9377acfb52c28cf373a5416845d1aa1b)) | ||||
| * **components:** 修复tab组件适应暗黑主题模式 ([2fe3d27](https://github.com/honghuangdc/soybean-admin/commit/2fe3d27a36b641339fd87eaa7acad8c3424b97b4)) | ||||
| * **components:** tab组件在黑暗模式下泛白的颜色问题以及chromeTab的重叠问题 ([6797dbf](https://github.com/honghuangdc/soybean-admin/commit/6797dbf1b0617dcca662a25cf663d93dc4ad5807)) | ||||
| * **deps:** 降低vite版本,新版本有些许问题 ([b429c8b](https://github.com/honghuangdc/soybean-admin/commit/b429c8b8ca61191c6bed1c52742ddd5fcf9ddc3a)) | ||||
| * **deps:** 去除图片验证码依赖 ([76a1afa](https://github.com/honghuangdc/soybean-admin/commit/76a1afae4e87c3c08f7fd31b20323c0456565f64)) | ||||
| * **deps:** vite依赖放入devDependencies ([7527b1f](https://github.com/honghuangdc/soybean-admin/commit/7527b1f07cdc2d82ec0104ed7317c7ff731da0b7)) | ||||
| * **hooks:** 修复登录页切换登录页参数丢失问题 ([789855a](https://github.com/honghuangdc/soybean-admin/commit/789855a3786623893aa55a2f6c977155394a8a44)) | ||||
| * **hooks:** 修复toLogin函数导致登录重定向地址过多 ([b4adf67](https://github.com/honghuangdc/soybean-admin/commit/b4adf678a4f96f670f9cbdcaebe21378fa94c77c)) | ||||
| * **projects:** 布局修复:从填充屏幕高的页面切换至滚动页面导致布局坍塌 ([2fdb5f5](https://github.com/honghuangdc/soybean-admin/commit/2fdb5f563f7d9fa00d8e5343d992342ff34e3a5a)) | ||||
| * **projects:** 更正dashboard的布局文件 ([31fda0c](https://github.com/honghuangdc/soybean-admin/commit/31fda0ce992457972205db3a39e4c7327d21c087)) | ||||
| * **projects:** 关于页面:开发环境依赖更正 ([3b3baf9](https://github.com/honghuangdc/soybean-admin/commit/3b3baf93ee36423bfe4fc0ab24eda0f99ce92363)) | ||||
| * **projects:** 腾讯地图容器高自适应 ([d7054c5](https://github.com/honghuangdc/soybean-admin/commit/d7054c599b1ce59a123667443863a8054ba19a90)) | ||||
| * **projects:** 头部logo链接更正 ([5d8c3f5](https://github.com/honghuangdc/soybean-admin/commit/5d8c3f54a3e414cdeff35bf5ddb2a1e13d7d703a)) | ||||
| * **projects:** 完善侧边菜单展开逻辑 ([b5f0512](https://github.com/honghuangdc/soybean-admin/commit/b5f05128abcf2403181b7cc7800d9e6593844657)) | ||||
| * **projects:** 修复百度地图sdk地址 ([9a97d23](https://github.com/honghuangdc/soybean-admin/commit/9a97d23c755b7fa7c3166d783e99cac10a0a9753)) | ||||
| * **projects:** 修复登录的重定向地址 ([f97f226](https://github.com/honghuangdc/soybean-admin/commit/f97f2266566164cad912e7ffcdebee1c1b2f4324)) | ||||
| * **projects:** 修复登录页刷新跳404 ([358d4e8](https://github.com/honghuangdc/soybean-admin/commit/358d4e8a1992aa040b909ae580470a0fd2142f5f)) | ||||
| * **projects:** 修复顶部加载条主题 ([ea5917d](https://github.com/honghuangdc/soybean-admin/commit/ea5917d2258356bbcb296420ea1d017f5ad05b7a)) | ||||
| * **projects:** 修复多级菜单页面multitab显示问题 ([f0474bd](https://github.com/honghuangdc/soybean-admin/commit/f0474bd96104dcca332d35d8202eedc3df00eb10)) | ||||
| * **projects:** 修复多页签删除功能 ([99adbc5](https://github.com/honghuangdc/soybean-admin/commit/99adbc5a30c9128d005dc8096d58c5b320f67fef)) | ||||
| * **projects:** 修复分析页折线图表布局问题 ([43b832b](https://github.com/honghuangdc/soybean-admin/commit/43b832bee0dc1d852f3e435f16eaa37f27b0f66c)) | ||||
| * **projects:** 修复富文本编辑器在亮色主题下全屏后背景色丢失 ([4ab7702](https://github.com/honghuangdc/soybean-admin/commit/4ab7702186e1121e50f1d4725b73f28498aba312)) | ||||
| * **projects:** 修复没有子页面的路由写法问题 ([b80c224](https://github.com/honghuangdc/soybean-admin/commit/b80c2246641d44b9ad35dfbfb3d17500cfcb6e43)) | ||||
| * **projects:** 修复同时显示两种multiTab ([5be2e2a](https://github.com/honghuangdc/soybean-admin/commit/5be2e2a2e5658e09c47a4dc1331129e14ed6d761)) | ||||
| * **projects:** 修复页面滚动和页面100%视高占比 ([fa2cc78](https://github.com/honghuangdc/soybean-admin/commit/fa2cc789371999de6b2f698ba7ed87a4d740ad37)) | ||||
| * **projects:** 修复页面滚动行为 ([57e00e6](https://github.com/honghuangdc/soybean-admin/commit/57e00e64177bc9925ca95785335786836571766a)) | ||||
| * **projects:** 修复页面缓存 ([fa0a907](https://github.com/honghuangdc/soybean-admin/commit/fa0a907941a90ed72288205fef14b0923a0ffd8e)) | ||||
| * **projects:** 修复页面缓存,添加多页签删除 ([2489374](https://github.com/honghuangdc/soybean-admin/commit/248937479cc9ccb936116300d628dfa734014b37)) | ||||
| * **projects:** 修复在暗黑模式下第一次进入网页不会触发暗黑模式监听 ([c4a652e](https://github.com/honghuangdc/soybean-admin/commit/c4a652e21e4c3e2ee6e86e04e46d5dccd579d584)) | ||||
| * **projects:** 修复主题配置 ([ff24fda](https://github.com/honghuangdc/soybean-admin/commit/ff24fda5ee12074e7130122ca311d0ce174cc184)) | ||||
| * **projects:** 修复主题相关,自适应操作系统暗黑模式 ([bfa42d7](https://github.com/honghuangdc/soybean-admin/commit/bfa42d769d464dbc8d51689c5fc8c59a348941fb)) | ||||
| * **projects:** 修复globalFooter适应暗黑模式 ([93f08d9](https://github.com/honghuangdc/soybean-admin/commit/93f08d90671b3ddfbdb969d5b13f4a3fa9903a19)) | ||||
| * **projects:** 修复multiTab关闭逻辑,添加关闭左边和右边的标签右键操作 ([ed90cb8](https://github.com/honghuangdc/soybean-admin/commit/ed90cb8f8e8d3bbf594757caa950f8521869ece4)) | ||||
| * **projects:** 修复tab过多时样式坍塌,添加tab横向滚动 ([0ec4d21](https://github.com/honghuangdc/soybean-admin/commit/0ec4d218e365f54ab0c138a955dcd990cbf2d9bc)) | ||||
| * **projects:** 修复tab在移动端无法点击 ([1a76de0](https://github.com/honghuangdc/soybean-admin/commit/1a76de04463b0344b39c09df0e0762825d66653b)) | ||||
| * **projects:** 修复vertical sider自适应主题 ([9097fa3](https://github.com/honghuangdc/soybean-admin/commit/9097fa386687d077a480033d9978cfbd59e0e3a0)) | ||||
| * **projects:** 修复vertical-mix导航模式的二级菜单显示问题 ([6f286e6](https://github.com/honghuangdc/soybean-admin/commit/6f286e674724db12d6c5a4339ba6f3db720b781d)) | ||||
| * **projects:** 页面各部分背景颜色添加自然过渡 ([1c5fdca](https://github.com/honghuangdc/soybean-admin/commit/1c5fdca59637c141ae1f0b47d9bcf05788a631c2)) | ||||
| * **projects:** wangEditor在暗黑模式下的背景色问题 ([a7de314](https://github.com/honghuangdc/soybean-admin/commit/a7de31404508a2d4436435d06cdb63f851a86029)) | ||||
| * **types:** 数据类型 EnumDataType.boolean 为 [object Boolean] ([e9b5560](https://github.com/honghuangdc/soybean-admin/commit/e9b55608f960c0d3cdeca91af6f2777a23fd20dd)) | ||||
| * **types:** 修复naive组件回调函数参数类型错误 ([667282f](https://github.com/honghuangdc/soybean-admin/commit/667282f81a8822006242d612a08ac59571e3508e)) | ||||
| * **types:** 修复TS类型错误 ([45d31a0](https://github.com/honghuangdc/soybean-admin/commit/45d31a0f5625784423bea463b2373b0cd35b37f5)) | ||||
| * **utils:** utils函数名称更正 ([68f4d01](https://github.com/honghuangdc/soybean-admin/commit/68f4d012cc3cce1df5cb61dfa0212126ea0b202e)) | ||||
| * **deps:** decrease @types/node version to fix TS type error [降低@types/node版本修复TS的类型错误] ([149d22a](https://github.com/honghuangdc/soybean-admin/commit/149d22a4a491ca5fc6c52375046e9f1cb86ee76d)) | ||||
| * **projects:** 修复多个后端服务时的本地代理 ([2aba58c](https://github.com/honghuangdc/soybean-admin/commit/2aba58c973e5d0ea975443a8b22c9d94283d4fb9)) | ||||
| * **projects:** 修复构建后mockjs对xhr的影响问题 ([7757285](https://github.com/honghuangdc/soybean-admin/commit/77572855c3f7161697f42e6da36771c15707f0ab)) | ||||
| * **projects:** 修复图标的TS类型 ([dbd6760](https://github.com/honghuangdc/soybean-admin/commit/dbd676095b42aaebc783d5c89478306a453195a5)) | ||||
| * **projects:** 修复eslint规则 ([d7f5bf3](https://github.com/honghuangdc/soybean-admin/commit/d7f5bf3373e7884b8dc2c696a2c36e9cf27ad64b)) | ||||
| * **projects:** 修复import.meta.env的TS类型 ([1994262](https://github.com/honghuangdc/soybean-admin/commit/19942625d58e673126db5249488555de71d18457)) | ||||
| * **projects:** 修复tab不显示路由首页的问题 ([a792bb5](https://github.com/honghuangdc/soybean-admin/commit/a792bb5cb3c388ba3b93e17bab8f42d23cd5df4a)) | ||||
| * **projects:** 修复TS类型问题 ([16dce9a](https://github.com/honghuangdc/soybean-admin/commit/16dce9a4ce4d3aa822d70f6e5199eb9c86e33ad9)) | ||||
| * **projects:** add iconify json ([8a1ec93](https://github.com/honghuangdc/soybean-admin/commit/8a1ec938e7a26728919024e9f5b7b0af2b270aba)) | ||||
| * **svg-icon:** 自定义图标在Dropdown组件下hover状态无法显示图标 ([0523f08](https://github.com/honghuangdc/soybean-admin/commit/0523f0838246041bfc09130e21369bd777f63682)) | ||||
| * **utils:** 修复iconifyRender ([c37d0ac](https://github.com/honghuangdc/soybean-admin/commit/c37d0ac7887a3451b8558fc4aa6c05ed3b0ef74f)) | ||||
|  | ||||
| ### [0.9.6](https://github.com/honghuangdc/soybean-admin/compare/v0.9.5...v0.9.6) (2022-06-15) | ||||
|  | ||||
|  | ||||
| ### Performance Improvements | ||||
| ### Features | ||||
|  | ||||
| * **projects:** 添加windicss指定的扫描目录,提升构建性能 ([8e6b0b2](https://github.com/honghuangdc/soybean-admin/commit/8e6b0b299d2ef50f2b85e67b7a1aa7fd2ac1bce1)) | ||||
| * **projects:** 本地svg动态渲染图标 ([c3c975e](https://github.com/honghuangdc/soybean-admin/commit/c3c975ee1142987b7ded0107bf91d0080d5651fe)), closes [#61](https://github.com/honghuangdc/soybean-admin/issues/61) | ||||
| * **projects:** 上下结构,菜单支持横向滚动 ([808051b](https://github.com/honghuangdc/soybean-admin/commit/808051b29dd682e1cbcf0e211774efb9cc12713a)) | ||||
| * **projects:** 新增Antv G2图表示例 ([2d64a2e](https://github.com/honghuangdc/soybean-admin/commit/2d64a2e57c8d83c8d06f210eeefef8f31b3abeb9)) | ||||
| * **projects:** 增加设置当前Tab页签名称功能 ([487213b](https://github.com/honghuangdc/soybean-admin/commit/487213b64853765e2bd186474e4607572624a33e)) | ||||
|  | ||||
|  | ||||
| ### Bug Fixes | ||||
|  | ||||
| * **projects:** 设置tab标题导致meta属性丢失 ([efcfa57](https://github.com/honghuangdc/soybean-admin/commit/efcfa576d52a7eab644f3b4c65af153442887fab)) | ||||
| * **projects:** 修复顶部菜单的位置失效问题 ([4ee0d94](https://github.com/honghuangdc/soybean-admin/commit/4ee0d94f1bde83c788fc0dcb084402359c04fb1b)) | ||||
|  | ||||
| ### [0.9.5](https://github.com/honghuangdc/soybean-admin/compare/v0.9.4...v0.9.5) (2022-06-06) | ||||
|  | ||||
|  | ||||
| ### Features | ||||
|  | ||||
| * **projects:** 支持同一路由根据不同query和hash同时显示不同Tab ([4122685](https://github.com/honghuangdc/soybean-admin/commit/4122685803f8a0a485682d16cec74e27945adc47)), closes [#64](https://github.com/honghuangdc/soybean-admin/issues/64) | ||||
| * **projects:** 动态路由根路由重定向只需取决于后端返回的路由首页 ([434ab1c](https://github.com/honghuangdc/soybean-admin/commit/434ab1c560b260f8a19895405eb1d3c3313052d7)) | ||||
| * **projects:** 补充更多的ECharts示例 ([c776249](https://github.com/honghuangdc/soybean-admin/commit/c7762490def77695bedf179ffc63e3e95d15e14d)) | ||||
| * **projects:** 添加百度地图、升级依赖 ([39854a4](https://github.com/honghuangdc/soybean-admin/commit/39854a492b9cce71e0c7ed52af9985cb4abd6a97)) | ||||
| * **projects:** 添加插件页面:图表 ([0a46ea0](https://github.com/honghuangdc/soybean-admin/commit/0a46ea08443f6b879434e925d440cf07e9494fcb)) | ||||
| * **projects:** 添加自动跟随系统主题设置 ([ba07b69](https://github.com/honghuangdc/soybean-admin/commit/ba07b695dd9dc5d3f8ebf57d0f2e69d624994962)) | ||||
| * **projects:** 添加antv g2图表示例 ([44b022a](https://github.com/honghuangdc/soybean-admin/commit/44b022aefd7dbb4c34886814cf04767450dec026)) | ||||
| * **projects:** 引入echarts替换antvG2plot ([e7ad086](https://github.com/honghuangdc/soybean-admin/commit/e7ad08685e8ac52a8906fc94e656192275f9764c)) | ||||
| * **route:** 路由meta新增activeMenu属性 ([ebd16a4](https://github.com/honghuangdc/soybean-admin/commit/ebd16a4d1ab1a95a27838a2d4f20cc1d1e7309ae)) | ||||
|  | ||||
|  | ||||
| ### Bug Fixes | ||||
|  | ||||
| * **projects:** 修复@antv/g2生产环境报错 ([4558c24](https://github.com/honghuangdc/soybean-admin/commit/4558c24d1c1e1faa3326650fc16e6baf384509ac)) | ||||
| * **projects:** 修复插件不存在的错误提示 ([7165282](https://github.com/honghuangdc/soybean-admin/commit/716528206e9f63e873607d0afd59d83f6984e3fe)) | ||||
| * **projects:** 修复权限切换路由数据未更新的问题 ([60f9125](https://github.com/honghuangdc/soybean-admin/commit/60f912508b0e685957fb22ef0ed1f83272847263)) | ||||
| * **projects:** 修复页面切换时导致的溢出滚动条 ([e023306](https://github.com/honghuangdc/soybean-admin/commit/e0233061d3bca236b4c4bb462ce00f7ca186b9fa)) | ||||
| * **route:** 当为左侧混合菜单时activeMenu无效情况 ([3e4f9e2](https://github.com/honghuangdc/soybean-admin/commit/3e4f9e282442073447c5c24c33d65bc6130978ee)) | ||||
|  | ||||
| ### [0.9.4](https://github.com/honghuangdc/soybean-admin/compare/v0.9.3...v0.9.4) (2022-04-28) | ||||
|  | ||||
|  | ||||
| ### Features | ||||
|  | ||||
| * **layouts:** 添加侧边栏/头部的反转模式来增加对比度 ([861c8b9](https://github.com/honghuangdc/soybean-admin/commit/861c8b9852e0097a1f6b79ac2c10d19add123bde)) | ||||
| * **layouts:** 添加侧边栏/头部的反转模式来增加对比度 ([3c8dd77](https://github.com/honghuangdc/soybean-admin/commit/3c8dd772f89d2b656a42c4f7164e581acdb2b1a5)) | ||||
| * **projects:** 插件方式按需引入naiveUI ([6bed9ea](https://github.com/honghuangdc/soybean-admin/commit/6bed9ead38af6d58f6cd9e520db848ae5cbfa4db)) | ||||
| * **projects:** 登录页背景图片位置适配移动端 ([24010d0](https://github.com/honghuangdc/soybean-admin/commit/24010d05fb1ff51cb5e5d94ffe310206a9638711)) | ||||
| * **projects:** 登录页面适配移动端 ([ec0776e](https://github.com/honghuangdc/soybean-admin/commit/ec0776e268cd3d1031e9ecd794abce271a675793)) | ||||
| * **projects:** 权限完善及权限示例页面 ([807448a](https://github.com/honghuangdc/soybean-admin/commit/807448aec5b041535fe4fbac90eca1138b2f439c)) | ||||
| * **projects:** 添加请求适配器的请求示例 ([bed4292](https://github.com/honghuangdc/soybean-admin/commit/bed4292ed380e77ac428ab057abc42eceb72af53)) | ||||
| * **projects:** 新增静态路由 ([ca2dfa6](https://github.com/honghuangdc/soybean-admin/commit/ca2dfa6185aa7a4e58184bcfef2a1246a52f88fd)) | ||||
| * **projects:** 引入unocss替换windicss ([c9d3e5a](https://github.com/honghuangdc/soybean-admin/commit/c9d3e5a3fdf59179dcfc122ab8369c492ea7832e)) | ||||
| * **projects:** HTML lang 修改为 zh-cmn-Hans ([b9c5c34](https://github.com/honghuangdc/soybean-admin/commit/b9c5c349790b1e83a7acd1f2c53a86c9221944ff)) | ||||
| * **projects:** HTML lang 修改为 zh-cmn-Hans ([dbeb595](https://github.com/honghuangdc/soybean-admin/commit/dbeb595c0b9fc11e7d166a7684af37cc971f1a11)) | ||||
| * **projects:** mock添加权限过滤 ([7f4350a](https://github.com/honghuangdc/soybean-admin/commit/7f4350aeb673dab59192584177a897aacebe4b28)) | ||||
|  | ||||
|  | ||||
| ### Bug Fixes | ||||
|  | ||||
| * **projects:** 去除从环境文件引入端口号导致的错误 ([2d6d179](https://github.com/honghuangdc/soybean-admin/commit/2d6d179d669ea71cca3fe97ac840e4856bff4051)) | ||||
| * **projects:** 全局搜索弹窗弹出时动画闪屏问题 ([bb1bbf2](https://github.com/honghuangdc/soybean-admin/commit/bb1bbf272438f4ed440735118c6a9ec04c7d109f)) | ||||
| * **projects:** 添加.npmrc修复无法获取自动引入的全局组件声明类型 ([e8488e4](https://github.com/honghuangdc/soybean-admin/commit/e8488e4d5237e5e03ec07ff07d03115389d5b1ef)) | ||||
| * **projects:** 添加获取路由组件文件未找到时的错误提示 ([219f87f](https://github.com/honghuangdc/soybean-admin/commit/219f87f46758f328f26697f66d8583f49c0d41de)) | ||||
| * **projects:** 修复获取vite环境变量的方式 ([46e1ae7](https://github.com/honghuangdc/soybean-admin/commit/46e1ae7825b2b204ce3cdd63b3c64f39bff096d0)) | ||||
| * **projects:** 修复路由守卫的动态路由逻辑 ([e6c26fc](https://github.com/honghuangdc/soybean-admin/commit/e6c26fcb4ae085f9fd7d7eb9183ddba020d0b5da)) | ||||
| * **projects:** 修复样式 ([e899914](https://github.com/honghuangdc/soybean-admin/commit/e8999144266761b3b701442975c3c00251240d53)) | ||||
| * **projects:** 修复在新版vite下环境变量获取不到的问题 ([3fb13ca](https://github.com/honghuangdc/soybean-admin/commit/3fb13ca9e710549d2ddeb774fe08fabd27d5ae11)) | ||||
| * **projects:** 修复vite alias ([cd7ca8f](https://github.com/honghuangdc/soybean-admin/commit/cd7ca8f4c77ac8c753b753ba698a9573d6c37bf9)) | ||||
|  | ||||
| ### [0.9.3](https://github.com/honghuangdc/soybean-admin/compare/v0.9.2...v0.9.3) (2022-03-12) | ||||
|  | ||||
|  | ||||
| ### Features | ||||
|  | ||||
| * **components:** svgIcon,添加type,调整size方案 ([ce4e039](https://github.com/honghuangdc/soybean-admin/commit/ce4e039f48001b47a2933e807f5410a9573781b9)) | ||||
| * **projects:** 引入soybean-admin-tab、去除vite-plugin-svg-icons,用unplugin-icons实现自定义svg的iconify写法、代码优化 ([a1a57a1](https://github.com/honghuangdc/soybean-admin/commit/a1a57a185ce5004888ca4e1611973665ee46980b)) | ||||
| * **projects:** 新增子菜单图标和多页签图标 ([f5c56c3](https://github.com/honghuangdc/soybean-admin/commit/f5c56c355ce41157b20ed0a10272a28e6d8b2b49)) | ||||
| * **projects:** 新增自定义svg图标动态渲染 ([f83c7b5](https://github.com/honghuangdc/soybean-admin/commit/f83c7b59b893ab6e210188e92c4177b3d01392ce)) | ||||
| * **projects:** 添加naiveUI按需引入 ([a810ef8](https://github.com/honghuangdc/soybean-admin/commit/a810ef85b19e4b74f3ddb3c69d17c050e556ee90)) | ||||
| * **projects:** 添加SvgIcon,配置vite plugin ([378d55a](https://github.com/honghuangdc/soybean-admin/commit/378d55ac0e11cdf115ce3cb8e281d60f7fc4ff7a)) | ||||
| * **projects:** 添加全局组件自动引入注册 ([f5a043b](https://github.com/honghuangdc/soybean-admin/commit/f5a043b11a403927828ae922bdae411a4e5ae3c6)) | ||||
| * **projects:** 添加网络代理 ([094dca9](https://github.com/honghuangdc/soybean-admin/commit/094dca961f608404352ac360f44496423d88dae8)) | ||||
| * **projects:** 重构项目的TS类型架构,去除interface文件夹 ([8191490](https://github.com/honghuangdc/soybean-admin/commit/8191490f39fc011096edd77c3156eb4fe33d4e1c)) | ||||
|  | ||||
|  | ||||
| ### Bug Fixes | ||||
|  | ||||
| * **components:** 修复组件LoadingEmptyWrapper适应暗黑模式 ([811b15e](https://github.com/honghuangdc/soybean-admin/commit/811b15e672c9d69e9c5789eb11ab2db7bd729f37)) | ||||
| * **components:** 组件LoadingEmptyWrapper添加背景颜色动画过渡 ([7add5c2](https://github.com/honghuangdc/soybean-admin/commit/7add5c2edfcabadb77084179d464b849d880d5e6)) | ||||
| * **projects:** 修复 BASE_URL 没有生效的问题 ([72d7dcf](https://github.com/honghuangdc/soybean-admin/commit/72d7dcfa5ee8dc6f3601f4d65c6aca9ad2cc5d5c)) | ||||
| * **projects:** 修复页面切换动画开关不生效 ([9d4ed61](https://github.com/honghuangdc/soybean-admin/commit/9d4ed617fb80095e521d8063718283459711118f)) | ||||
| * **projects:** 修复页面切换动画无变化 ([c4546bd](https://github.com/honghuangdc/soybean-admin/commit/c4546bdfa303f1e89c0d7ddd46b54e4ec5170096)) | ||||
|  | ||||
| ### [0.9.2](https://github.com/honghuangdc/soybean-admin/compare/v0.9.1...v0.9.2) (2022-02-11) | ||||
|  | ||||
|  | ||||
| ### Features | ||||
|  | ||||
| * **projects:** 迁移全局搜索菜单功能 ([554d7fd](https://github.com/honghuangdc/soybean-admin/commit/554d7fd6114b9cf6df571c3cb02f4cb0cc6dcfd4)) | ||||
|  | ||||
|  | ||||
| ### Bug Fixes | ||||
|  | ||||
| * **components:** 修复Tab在移动端设备无法点击的问题 ([2c9660f](https://github.com/honghuangdc/soybean-admin/commit/2c9660fdbf9a84e980db0aff5cd0aed0f75963ca)) | ||||
| * **projects:** 修复分析页和工作台的布局问题 ([e93b94c](https://github.com/honghuangdc/soybean-admin/commit/e93b94cb2435a130bb1d94a703328af342cd24c9)) | ||||
| * **projects:** 修复项目配置拷贝功能 ([a7a269d](https://github.com/honghuangdc/soybean-admin/commit/a7a269d6a61ccd25883e6bb69639d39e0260587d)) | ||||
| * **projects:** vite配置修复 ([facc00e](https://github.com/honghuangdc/soybean-admin/commit/facc00e8b4998dc8bd338e3b63a652b4bfe2ed3e)) | ||||
|  | ||||
| ### [0.9.1](https://github.com/honghuangdc/soybean-admin/compare/v0.1.3...v0.9.1) (2022-01-23) | ||||
|  | ||||
|  | ||||
| ### Features | ||||
|  | ||||
| * **projects:** 新版重构完成 ([68b4230](https://github.com/honghuangdc/soybean-admin/commit/68b42304d5964246775c7a82dcc1406c5db7a4e4)) | ||||
|  | ||||
| ### [0.1.3](https://github.com/honghuangdc/soybean-admin/compare/v0.1.2...v0.1.3) (2022-01-23) | ||||
|  | ||||
|  | ||||
| ### Bug Fixes | ||||
|  | ||||
| * **projects:** 修复未登录时会调用获取用户路由的接口 ([21bab1f](https://github.com/honghuangdc/soybean-admin/commit/21bab1f7c30611fe59dc91c7a73050ccb49a4658)) | ||||
| * **projects:** 修复路由守卫的动态路由逻辑 ([b61b0ce](https://github.com/honghuangdc/soybean-admin/commit/b61b0ce25fdcbaf29ca64cbcc467e12faa947625)) | ||||
|  | ||||
| ### [0.1.2](https://github.com/honghuangdc/soybean-admin/compare/v0.1.1...v0.1.2) (2022-01-21) | ||||
|  | ||||
|  | ||||
| ### Features | ||||
|  | ||||
| * **projects:** 添加缓存主题色 ([3709297](https://github.com/honghuangdc/soybean-admin/commit/37092974d37b2e661d4cbf9d27c89b5e99119cd7)) | ||||
| * **projects:** 添加页面缓存、记录在tab中的缓存页面的滚动条位置 ([1d63a83](https://github.com/honghuangdc/soybean-admin/commit/1d63a838226df4f48e7f2a15b5a05d4b496d3c69)) | ||||
|  | ||||
| ### [0.1.1](https://github.com/honghuangdc/soybean-admin/compare/v0.0.5...v0.1.1) (2022-01-20) | ||||
|  | ||||
|  | ||||
| ### Features | ||||
|  | ||||
| * **projects:** theme store完成 ([bf020a8](https://github.com/honghuangdc/soybean-admin/commit/bf020a82580e6b1fbda1cc1e0bd6176770434884)) | ||||
| * **projects:** 主题配置抽屉: 迁移其他功能 ([6d132c5](https://github.com/honghuangdc/soybean-admin/commit/6d132c59770e925cfc61217dcefa5b4d937604df)) | ||||
| * **projects:** 主题配置抽屉:迁移暗黑模式、布局模式、添加颜色选择面板 ([912bfdf](https://github.com/honghuangdc/soybean-admin/commit/912bfdf4390ab624d3f8e343be88e8c1cf7ab5b6)) | ||||
| * **projects:** 创建自定义布局组件SoybeanLayout ([0653fb1](https://github.com/honghuangdc/soybean-admin/commit/0653fb144fe9d49f24ef4fe6e4a58de6de342b78)) | ||||
| * **projects:** 初始化加载效果:应用主题颜色 ([035fa11](https://github.com/honghuangdc/soybean-admin/commit/035fa114c9fd638cf467e6a73a8e4c558f503deb)) | ||||
| * **projects:** 图标选择器增加扩展树形 ([041012b](https://github.com/honghuangdc/soybean-admin/commit/041012b3ee04d960c1e38895839225613f7af377)) | ||||
| * **projects:** 增加Icon选择器组件 ([9472b51](https://github.com/honghuangdc/soybean-admin/commit/9472b51811f419e9139de81c73f2c71d170700c2)) | ||||
| * **projects:** 增加全局搜索菜单功能 ([b9ce691](https://github.com/honghuangdc/soybean-admin/commit/b9ce69130b12712013228326f883e2d973e4e46a)) | ||||
| * **projects:** 增加项目文档外链 ([1901a0b](https://github.com/honghuangdc/soybean-admin/commit/1901a0bfb7bfa516dfda552675397ddec96b8d4b)) | ||||
| * **projects:** 多级路由的所有子路由转换成二级路由 ([85b55bb](https://github.com/honghuangdc/soybean-admin/commit/85b55bb37a0a06e2645b96ed81aefe463127121a)) | ||||
| * **projects:** 引入mockjs ([9bc682d](https://github.com/honghuangdc/soybean-admin/commit/9bc682dae878c084e38a0e2c9a4a2de171023c48)) | ||||
| * **projects:** 新增BasicLayout布局 ([006467a](https://github.com/honghuangdc/soybean-admin/commit/006467a0626f427da3f516d90c15bf1e1eef0e55)) | ||||
| * **projects:** 添加cryptojs,对本地缓存数据进行加密 ([7a0648d](https://github.com/honghuangdc/soybean-admin/commit/7a0648dba55a98f61f4d81696307d86c82a1d34d)) | ||||
| * **projects:** 添加NaiveProvider组件 ([c804b21](https://github.com/honghuangdc/soybean-admin/commit/c804b21ceb92133c6ea7cc64c87521cc164e40ce)) | ||||
| * **projects:** 添加侧边菜单 ([e25afe2](https://github.com/honghuangdc/soybean-admin/commit/e25afe2fadfe86b9330ee02190a4e40b8321714c)) | ||||
| * **projects:** 添加头部折叠按钮 ([a090d39](https://github.com/honghuangdc/soybean-admin/commit/a090d398fc071e246b92d0da80883cf5cbedba0e)) | ||||
| * **projects:** 添加常用组件、composables函数 ([230a50a](https://github.com/honghuangdc/soybean-admin/commit/230a50a4cf4d2ebb62b19d6324234243cf6b2f0d)) | ||||
| * **projects:** 添加抽屉 ([10e4d81](https://github.com/honghuangdc/soybean-admin/commit/10e4d81bd6a0b35d8cfb4f7a1e981f8ef6ab87cc)) | ||||
| * **projects:** 添加表格页面示例 ([51c744c](https://github.com/honghuangdc/soybean-admin/commit/51c744c8e2c8ed9691e92e35b6a88582f22c30d8)) | ||||
| * **projects:** 添加路由跳转浏览器新标签 ([987cef3](https://github.com/honghuangdc/soybean-admin/commit/987cef336338987f2e6f0d5aba8f6d4602b297ca)) | ||||
| * **projects:** 登录页面开始迁移 ([f5a36a0](https://github.com/honghuangdc/soybean-admin/commit/f5a36a05cb626ec62115283f1d2c534b2a787bdd)) | ||||
| * **projects:** 细节完善 ([cc290ac](https://github.com/honghuangdc/soybean-admin/commit/cc290accc29282e9ba655356e2695b6ca4b23605)) | ||||
| * **projects:** 细节完善、迁移页面 ([ce531ce](https://github.com/honghuangdc/soybean-admin/commit/ce531ce5dda0b4a1024aa6bd3d68835b59760d57)) | ||||
| * **projects:** 菜单搜索增加大小写转换 ([2907868](https://github.com/honghuangdc/soybean-admin/commit/29078689b0652cf4ae852c93d8601a157579adcc)) | ||||
| * **projects:** 请求拦截器添加刷新token ([839b82b](https://github.com/honghuangdc/soybean-admin/commit/839b82ba8b052b02e24bcfe6da54160609a4fd4b)) | ||||
| * **projects:** 路由页面跳转权限完成 ([0d2a562](https://github.com/honghuangdc/soybean-admin/commit/0d2a5629e89c73a32d6c79f04b51543e1513e006)) | ||||
| * **projects:** 迁移多页签 ([28efbdb](https://github.com/honghuangdc/soybean-admin/commit/28efbdbc70733d22011a0eee084d35711429d188)) | ||||
| * **projects:** 迁移登录完成 ([b93b80c](https://github.com/honghuangdc/soybean-admin/commit/b93b80cb4b35268dfb6a09517a2494af24748dac)) | ||||
| * **projects:** 集成naiveUI主题配置,将css vars添加至html ([2c19684](https://github.com/honghuangdc/soybean-admin/commit/2c196841bd8527d7acccefe6a7545e0a49d532f7)) | ||||
| * **projects:** 面包屑 ([09c7658](https://github.com/honghuangdc/soybean-admin/commit/09c7658c21c7dda461dbb528e85b638b5a7dfacd)) | ||||
|  | ||||
|  | ||||
| ### Bug Fixes | ||||
|  | ||||
| * **deps:** 降低vite版本 ([c9c5ca9](https://github.com/honghuangdc/soybean-admin/commit/c9c5ca9989eddb084f2706155473123c5dcfc334)) | ||||
| * **projects:** 修复redirect-not-found子路由 ([5bfb819](https://github.com/honghuangdc/soybean-admin/commit/5bfb8199b463d9ca6430577b5c493c0b78967aa9)) | ||||
| * **projects:** 修复vertical-mix布局、重构初始化的loading ([579e074](https://github.com/honghuangdc/soybean-admin/commit/579e07400e1b9a52934ed808a37c8579a41e8e74)) | ||||
| * **projects:** 修复网络请求错误空信息的提示 ([ff9216b](https://github.com/honghuangdc/soybean-admin/commit/ff9216b621aaef0a8203386fa1c3ca5477a2edea)) | ||||
| * **projects:** 修复面包屑数据 ([28b5d22](https://github.com/honghuangdc/soybean-admin/commit/28b5d224010a28669ad3a1919fc49f6e2dc808cd)) | ||||
| * **projects:** 去除Layout组件冗余代码 ([0e783bc](https://github.com/honghuangdc/soybean-admin/commit/0e783bcf7be0b3a083fe950adfb0afc72b510f97)) | ||||
| * **projects:** 请求相关细节修复 ([2ad1ad3](https://github.com/honghuangdc/soybean-admin/commit/2ad1ad32b8410d84902a33d825032c282ca6df86)) | ||||
|   | ||||
							
								
								
									
										16
									
								
								Makefile
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,16 @@ | ||||
| ImageTag ?=v0.9.6 | ||||
| SoybeanAdminImg ?= soybeanjs/soybean-admin:$(ImageTag) | ||||
|  | ||||
| VERSION=$(shell git rev-parse --short HEAD) | ||||
|  | ||||
| soybean-admin: soybean-admin-build soybean-admin-push | ||||
|  | ||||
| soybean-admin-build: | ||||
| 	docker build --build-arg version=$(VERSION) -t ${SoybeanAdminImg} -f docker/Dockerfile . | ||||
|  | ||||
| soybean-admin-push: | ||||
| 	docker push ${SoybeanAdminImg} | ||||
|  | ||||
| # run tauri app: | ||||
| run: | ||||
| 	pnpm tauri dev | ||||
							
								
								
									
										113
									
								
								README.md
									
									
									
									
									
								
							
							
						
						| @@ -1,55 +1,79 @@ | ||||
| <div align="center"> | ||||
| 	<img src="https://i.loli.net/2021/11/24/x5lLfuSnEawBAgi.png"/> | ||||
| 	<img src="https://soybeanjs-1300612522.cos.ap-guangzhou.myqcloud.com/uPic/soybean.svg" style="width: 160px;"/> | ||||
| 	<h1>Soybean Admin</h1> | ||||
| </div> | ||||
|  | ||||
| [](./LICENSE) | ||||
| [](./LICENSE)   | ||||
|  | ||||
| ## 简介 | ||||
|  | ||||
| Soybean Admin 是一个基于 Vue3、Vite、Naive UI、TypeScript 的免费中后台模版,它使用了最新的前端技术栈,内置丰富的插件,有着极高的代码规范,开箱即用的中后台前端解决方案,也可用于学习参考。 | ||||
| [Soybean Admin](https://github.com/honghuangdc/soybean-admin) 是一个基于 Vue3、Vite3、TypeScript、NaiveUI、Pinia 和 UnoCSS 的清新优雅的中后台模版,它使用了最新流行的前端技术栈,内置丰富的主题配置,有着极高的代码规范,基于文件的路由系统以及基于 Mock 的动态权限路由,开箱即用的中后台前端解决方案,也可用于学习参考。 | ||||
|  | ||||
| ## 特性 | ||||
|  | ||||
| - **最新技术栈**:使用 Vue3/vite2 等前端前沿技术开发, 使用高效率的npm包管理器pnpm | ||||
| - **最新流行技术栈**:使用 Vue3/Vite 等前端前沿技术开发, 使用高效率的 npm 包管理器 pnpm | ||||
| - **TypeScript**: 应用程序级 JavaScript 的语言 | ||||
| - **主题**:丰富可配置的主题 | ||||
| - **主题**:丰富可配置的主题、暗黑模式,基于原子 css 框架 - UnoCss 的动态主题颜色 | ||||
| - **代码规范**:丰富的规范插件及极高的代码规范 | ||||
| - **路由配置**:简易的路由配置 | ||||
| - **文件路由系统**:基于文件的路由系统,根据页面文件自动生成路由声明、路由导入和路由模块 | ||||
| - **权限路由**:提供前端静态和后端动态两种路由模式,基于 mock 的动态路由能快速实现后端动态路由 | ||||
| - **请求函数**:基于 axios 的完善的请求函数封装,提供 Promise 和 hooks 两种请求函数,加入请求结果数据转换的适配器 | ||||
|  | ||||
| ## 预览 | ||||
| ## 在线预览 | ||||
|  | ||||
| - [soybean-admin](https://soybean.pro/) | ||||
| - [Soybean Admin 预览地址](https://soybean.pro/) | ||||
|  | ||||
| ## 文档 | ||||
|  | ||||
| - [项目文档](https://docs.soybean.pro) | ||||
| - [项目文档预览地址](https://docs.soybean.pro) | ||||
|  | ||||
| ### 代码仓库 | ||||
| ## 代码仓库 | ||||
|  | ||||
| - [github](https://github.com/honghuangdc/soybean-admin) | ||||
| | 仓库           | github 地址                                                                   | gitee 镜像                                                                   | 预览                                                      | | ||||
| | -------------- | ----------------------------------------------------------------------------- | ---------------------------------------------------------------------------- | --------------------------------------------------------- | | ||||
| | soybean-admin  | [github](https://github.com/honghuangdc/soybean-admin)                        | [gitee](https://gitee.com/honghuangdc/soybean-admin)                         | [预览](https://soybean.pro/)                              | | ||||
| | tauri 版       | [tauri 版](https://github.com/honghuangdc/soybean-admin/tree/tauri)           | [tauri 版](https://gitee.com/honghuangdc/soybean-admin/tree/tauri)           |                                                           | | ||||
| | 精简版         | [精简版](https://github.com/honghuangdc/soybean-admin/tree/thin)              | [精简版](https://gitee.com/honghuangdc/soybean-admin/tree/thin)              |                                                           | | ||||
| | 集成 fast-crud | [集成 fast-crud](https://github.com/honghuangdc/soybean-admin/tree/fast-crud) | [集成 fast-crud](https://gitee.com/honghuangdc/soybean-admin/tree/fast-crud) | [预览](http://fast-crud.docmirror.cn/soybean/#/crud/demo) | | ||||
|  | ||||
| - [gitee](https://gitee.com/honghuangdc/soybean-admin) | ||||
| ## 更新日志 | ||||
|  | ||||
| [CHANGELOG](./CHANGELOG.md) | ||||
|  | ||||
| ## 后端服务 | ||||
|  | ||||
| - [soybean-admin-java](https://github.com/honghuangdc/soybean-admin-java) | ||||
|  | ||||
| ## 项目示例图 | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
| ### 使用 Gitpod | ||||
|  | ||||
|  | ||||
| 在 Gitpod(适用于 GitHub 的免费在线开发环境)中打开项目,并立即开始编码. | ||||
|  | ||||
|  | ||||
| [](https://gitpod.io/#https://github.com/honghuangdc/soybean-admin) | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
| <div align="center"> | ||||
| 	<img style="width:380px;margin-right:18px;border:1px solid #dedede;" src="https://soybeanjs-1300612522.cos.ap-guangzhou.myqcloud.com/uPic/soybean-admin10-v2.png" /> | ||||
| 	<img style="width:380px;border:1px solid #dedede;" src="https://soybeanjs-1300612522.cos.ap-guangzhou.myqcloud.com/uPic/soybean-admin11-v2.png" /> | ||||
| </div> | ||||
|  | ||||
| ## 安装使用 | ||||
|  | ||||
| - 环境配置 | ||||
|   **本地环境需要安装 pnpm 7.x 、Node.js 14.18+ 和 Git** | ||||
|  | ||||
| - 克隆代码 | ||||
|  | ||||
| ```bash | ||||
| @@ -74,19 +98,32 @@ pnpm dev | ||||
| pnpm build | ||||
| ``` | ||||
|  | ||||
| ## Docker 部署 | ||||
|  | ||||
| - Docker 部署 Soybean | ||||
|  | ||||
| ```bash | ||||
| docker run --name soybean -p 80:80 -d soybeanjs/soybean-admin:v0.9.6 | ||||
| ``` | ||||
|  | ||||
| - 访问 SoybeanAdmin | ||||
|  | ||||
| 打开本地浏览器访问`http://localhost` | ||||
|  | ||||
| ## 如何贡献 | ||||
|  | ||||
| 非常欢迎您的加入 或者提交一个 Pull Request。 | ||||
|  | ||||
| ## Git 贡献提交规范 | ||||
|  | ||||
| 项目已经内置angular提交规范,通过git cz 代替git commit 命令即可。 | ||||
| 项目已经内置 Angular 提交规范,直接执行 commit 命令即可生成符合 Angular 提交规范的 commit。 | ||||
|  | ||||
| git cz命令需要全局安装 commitizen | ||||
| 项目已用 simple-git-hooks 代替了 husky, 旧版本用了 husky,执行 pnpm soy init-git-hooks 进行初始化配置 | ||||
|  | ||||
| ```bash | ||||
| pnpm i -g commitizen | ||||
| ``` | ||||
| ## 基于 SoybeanAdmin 二次开发的项目 | ||||
|  | ||||
| - [electron-mock-admin](https://github.com/lixin59/electron-mock-api): 一个 Mock Api 管理系统,帮助前端开发伙伴快速实现接口的 mock。 | ||||
| - [T-Shell](https://github.com/TheBlindM/T-Shell): 是一个可配置命令提示的终端模拟器和 SSH 客户端。 | ||||
|  | ||||
| ## 浏览器支持 | ||||
|  | ||||
| @@ -95,8 +132,8 @@ pnpm i -g commitizen | ||||
| 支持现代浏览器, 不支持 IE | ||||
|  | ||||
| | [<img src="https://raw.githubusercontent.com/alrra/browser-logos/master/src/archive/internet-explorer_9-11/internet-explorer_9-11_48x48.png" alt="IE" width="24px" height="24px"  />](http://godban.github.io/browsers-support-badges/)IE | [<img src="https://raw.githubusercontent.com/alrra/browser-logos/master/src/edge/edge_48x48.png" alt=" Edge" width="24px" height="24px" />](http://godban.github.io/browsers-support-badges/)Edge | [<img src="https://raw.githubusercontent.com/alrra/browser-logos/master/src/firefox/firefox_48x48.png" alt="Firefox" width="24px" height="24px" />](http://godban.github.io/browsers-support-badges/)Firefox | [<img src="https://raw.githubusercontent.com/alrra/browser-logos/master/src/chrome/chrome_48x48.png" alt="Chrome" width="24px" height="24px" />](http://godban.github.io/browsers-support-badges/)Chrome | [<img src="https://raw.githubusercontent.com/alrra/browser-logos/master/src/safari/safari_48x48.png" alt="Safari" width="24px" height="24px" />](http://godban.github.io/browsers-support-badges/)Safari | | ||||
| | :-: | :-: | :-: | :-: | :-: | | ||||
| | not support | last 2 versions | last 2 versions | last 2 versions | last 2 versions | | ||||
| | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | | ||||
| |                                                                                                                not support                                                                                                                |                                                                                          last 2 versions                                                                                          |                                                                                               last 2 versions                                                                                                |                                                                                             last 2 versions                                                                                              |                                                                                             last 2 versions                                                                                              | | ||||
|  | ||||
| ## 开源作者 | ||||
|  | ||||
| @@ -104,20 +141,24 @@ pnpm i -g commitizen | ||||
|  | ||||
| ## 交流 | ||||
|  | ||||
| `Soybean Admin` 是完全开源免费的项目,在帮助开发者更方便地进行中大型管理系统开发,同时也提供 QQ 交流群使用问题欢迎在群内提问。 | ||||
| `Soybean Admin` 是完全开源免费的项目,在帮助开发者更方便地进行中大型管理系统开发,同时也提供微信和 QQ 交流群,使用问题欢迎在群内提问。 | ||||
|  | ||||
| - 微信交流群: | ||||
|   <div style="text-align:left"> | ||||
|     <img src="https://s2.loli.net/2021/12/29/m65oExs7yHcPbKZ.jpg" style="width:200px" /> | ||||
|   <div style="display:flex;"> | ||||
|   	<div style="padding-right:24px;"> | ||||
|   		<p>QQ交流群</p> | ||||
|       <img src="https://soybeanjs-1300612522.cos.ap-guangzhou.myqcloud.com/uPic/qq-soybean-admin.jpg" style="width:200px" /> | ||||
|   	</div> | ||||
| 		<div> | ||||
| 			<p>添加本人微信,欢迎来技术交流,业务咨询</p> | ||||
| 			<img src="https://soybeanjs-1300612522.cos.ap-guangzhou.myqcloud.com/uPic/soybeanjs.jpeg" style="width:180px" /> | ||||
| 		</div> | ||||
|   </div> | ||||
|  | ||||
| - QQ 群 `711301266` | ||||
| ## 捐赠 | ||||
|  | ||||
|   <div style="text-align:left"> | ||||
|     <img src="https://i.loli.net/2021/11/24/1J6REWXiHomU2kM.jpg" style="width:200px" /> | ||||
|   </div> | ||||
| 如果你觉得这个项目对你有帮助,可以请 Soybean 喝杯饮料表示支持,Soybean 开源的动力离不开各位的支持和鼓励。 | ||||
|  | ||||
| - 本人微信号:honghuangdc,欢迎来技术交流,业务咨询。 | ||||
|  | ||||
|  | ||||
| ## License | ||||
|  | ||||
|   | ||||
| @@ -3,6 +3,6 @@ import dayjs from 'dayjs'; | ||||
| /** 项目构建时间 */ | ||||
| const PROJECT_BUILD_TIME = JSON.stringify(dayjs().format('YYYY-MM-DD HH:mm:ss')); | ||||
| 
 | ||||
| export default { | ||||
| export const viteDefine = { | ||||
|   PROJECT_BUILD_TIME | ||||
| }; | ||||
							
								
								
									
										2
									
								
								build/config/index.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,2 @@ | ||||
| export * from './define'; | ||||
| export * from './proxy'; | ||||
							
								
								
									
										20
									
								
								build/config/proxy.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,20 @@ | ||||
| import type { ProxyOptions } from 'vite'; | ||||
|  | ||||
| /** | ||||
|  * 设置网络代理 | ||||
|  * @param isOpenProxy - 是否开启代理 | ||||
|  * @param envConfig - env环境配置 | ||||
|  */ | ||||
| export function createViteProxy(isOpenProxy: boolean, envConfig: ServiceEnvConfigWithProxyPattern) { | ||||
|   if (!isOpenProxy) return undefined; | ||||
|  | ||||
|   const proxy: Record<string, string | ProxyOptions> = { | ||||
|     [envConfig.proxyPattern]: { | ||||
|       target: envConfig.url, | ||||
|       changeOrigin: true, | ||||
|       rewrite: path => path.replace(new RegExp(`^${envConfig.proxyPattern}`), '') | ||||
|     } | ||||
|   }; | ||||
|  | ||||
|   return proxy; | ||||
| } | ||||
							
								
								
									
										5
									
								
								build/env/index.ts
									
									
									
									
										vendored
									
									
								
							
							
						
						| @@ -1,5 +0,0 @@ | ||||
| import dotenv from 'dotenv'; | ||||
|  | ||||
| const { parsed: viteEnv } = dotenv.config(); // 加载环境 | ||||
|  | ||||
| export default viteEnv!; | ||||
| @@ -1,5 +1,3 @@ | ||||
| import viteEnv from './env'; | ||||
| import plugins from './plugins'; | ||||
| import define from './define'; | ||||
|  | ||||
| export { viteEnv, plugins, define }; | ||||
| export * from './plugins'; | ||||
| export * from './config'; | ||||
| export * from './utils'; | ||||
|   | ||||
							
								
								
									
										6
									
								
								build/plugins/compress.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,6 @@ | ||||
| import ViteCompression from 'vite-plugin-compression'; | ||||
|  | ||||
| export default (viteEnv: ImportMetaEnv) => { | ||||
|   const { VITE_COMPRESS_TYPE = 'gzip' } = viteEnv; | ||||
|   return ViteCompression({ algorithm: VITE_COMPRESS_TYPE }); | ||||
| }; | ||||
| @@ -1,12 +0,0 @@ | ||||
| import { minifyHtml, injectHtml } from 'vite-plugin-html'; // html插件(使用变量、压缩) | ||||
| import viteEnv from '../env'; | ||||
|  | ||||
| export default [ | ||||
|   minifyHtml(), | ||||
|   injectHtml({ | ||||
|     injectData: { | ||||
|       appName: viteEnv.VITE_APP_NAME, | ||||
|       appTitle: viteEnv.VITE_APP_TITLE | ||||
|     } | ||||
|   }) | ||||
| ]; | ||||
| @@ -1,10 +0,0 @@ | ||||
| import Icons from 'unplugin-icons/vite'; // iconify图标 | ||||
| import IconsResolver from 'unplugin-icons/resolver'; | ||||
| import Components from 'unplugin-vue-components/vite'; // 从指定目录自动导入组件 | ||||
|  | ||||
| export default [ | ||||
|   Components({ | ||||
|     resolvers: [IconsResolver({ componentPrefix: 'icon' })] | ||||
|   }), | ||||
|   Icons({ scale: 1, defaultClass: 'inline-block' }) | ||||
| ]; | ||||
| @@ -1,10 +1,45 @@ | ||||
| import vue from './vue'; | ||||
| import html from './html'; | ||||
| import iconify from './iconify'; | ||||
| import windicss from './windicss'; | ||||
| import visualizer from './visualizer'; | ||||
| import type { PluginOption } from 'vite'; | ||||
| import vue from '@vitejs/plugin-vue'; | ||||
| import vueJsx from '@vitejs/plugin-vue-jsx'; | ||||
| import unocss from '@unocss/vite'; | ||||
| import progress from 'vite-plugin-progress'; | ||||
| import pageRoute from '@soybeanjs/vite-plugin-vue-page-route'; | ||||
| import unplugin from './unplugin'; | ||||
| import mock from './mock'; | ||||
| import visualizer from './visualizer'; | ||||
| import compress from './compress'; | ||||
| import pwa from './pwa'; | ||||
|  | ||||
| const plugins = [vue, ...html, ...iconify, windicss, visualizer, mock]; | ||||
| /** | ||||
|  * vite插件 | ||||
|  * @param viteEnv - 环境变量配置 | ||||
|  */ | ||||
| export function setupVitePlugins(viteEnv: ImportMetaEnv): (PluginOption | PluginOption[])[] { | ||||
|   const plugins = [ | ||||
|     vue({ | ||||
|       script: { | ||||
|         defineModel: true | ||||
|       } | ||||
|     }), | ||||
|     vueJsx(), | ||||
|     ...unplugin(viteEnv), | ||||
|     unocss(), | ||||
|     mock(viteEnv), | ||||
|     progress() | ||||
|   ]; | ||||
|  | ||||
| export default plugins; | ||||
|   if (viteEnv.VITE_VISUALIZER === 'Y') { | ||||
|     plugins.push(visualizer as PluginOption); | ||||
|   } | ||||
|   if (viteEnv.VITE_COMPRESS === 'Y') { | ||||
|     plugins.push(compress(viteEnv)); | ||||
|   } | ||||
|   if (viteEnv.VITE_PWA === 'Y' || viteEnv.VITE_VERCEL === 'Y') { | ||||
|     plugins.push(pwa()); | ||||
|   } | ||||
|   if (viteEnv.VITE_SOYBEAN_ROUTE_PLUGIN === 'Y') { | ||||
|     plugins.push(pageRoute()); | ||||
|   } | ||||
|  | ||||
|   return plugins; | ||||
| } | ||||
|   | ||||
| @@ -1,9 +1,14 @@ | ||||
| import { viteMockServe } from 'vite-plugin-mock'; | ||||
|  | ||||
| export default viteMockServe({ | ||||
|   mockPath: 'mock', | ||||
|   injectCode: ` | ||||
| 		import { setupMockServer } from '../mock'; | ||||
| 		setupMockServer(); | ||||
| 	` | ||||
| }); | ||||
| export default (viteEnv: ImportMetaEnv) => { | ||||
|   const prodMock = viteEnv.VITE_PROD_MOCK === 'Y'; | ||||
|  | ||||
|   return viteMockServe({ | ||||
|     mockPath: 'mock', | ||||
|     prodEnabled: prodMock, | ||||
|     injectCode: ` | ||||
| 			import { setupMockServer } from '../mock'; | ||||
| 			setupMockServer(); | ||||
| 		` | ||||
|   }); | ||||
| }; | ||||
|   | ||||
							
								
								
									
										31
									
								
								build/plugins/pwa.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,31 @@ | ||||
| import { VitePWA } from 'vite-plugin-pwa'; | ||||
|  | ||||
| export default function setupVitePwa() { | ||||
|   return VitePWA({ | ||||
|     registerType: 'autoUpdate', | ||||
|     includeAssets: ['favicon.ico'], | ||||
|     manifest: { | ||||
|       name: 'SoybeanAdmin', | ||||
|       short_name: 'SoybeanAdmin', | ||||
|       theme_color: '#fff', | ||||
|       icons: [ | ||||
|         { | ||||
|           src: '/logo.png', | ||||
|           sizes: '192x192', | ||||
|           type: 'image/png' | ||||
|         }, | ||||
|         { | ||||
|           src: '/logo.png', | ||||
|           sizes: '512x512', | ||||
|           type: 'image/png' | ||||
|         }, | ||||
|         { | ||||
|           src: '/logo.png', | ||||
|           sizes: '512x512', | ||||
|           type: 'image/png', | ||||
|           purpose: 'any maskable' | ||||
|         } | ||||
|       ] | ||||
|     } | ||||
|   }); | ||||
| } | ||||
							
								
								
									
										44
									
								
								build/plugins/unplugin.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,44 @@ | ||||
| import Icons from 'unplugin-icons/vite'; | ||||
| import IconsResolver from 'unplugin-icons/resolver'; | ||||
| import Components from 'unplugin-vue-components/vite'; | ||||
| import { NaiveUiResolver } from 'unplugin-vue-components/resolvers'; | ||||
| import { FileSystemIconLoader } from 'unplugin-icons/loaders'; | ||||
| import { createSvgIconsPlugin } from 'vite-plugin-svg-icons'; | ||||
| import { getSrcPath } from '../utils'; | ||||
|  | ||||
| export default function unplugin(viteEnv: ImportMetaEnv) { | ||||
|   const { VITE_ICON_PREFFIX, VITE_ICON_LOCAL_PREFFIX } = viteEnv; | ||||
|  | ||||
|   const srcPath = getSrcPath(); | ||||
|   const localIconPath = `${srcPath}/assets/svg-icon`; | ||||
|  | ||||
|   /** 本地svg图标集合名称 */ | ||||
|   const collectionName = VITE_ICON_LOCAL_PREFFIX.replace(`${VITE_ICON_PREFFIX}-`, ''); | ||||
|  | ||||
|   return [ | ||||
|     Icons({ | ||||
|       compiler: 'vue3', | ||||
|       customCollections: { | ||||
|         [collectionName]: FileSystemIconLoader(localIconPath, svg => | ||||
|           svg.replace(/^<svg\s/, '<svg width="1em" height="1em" ') | ||||
|         ) | ||||
|       }, | ||||
|       scale: 1, | ||||
|       defaultClass: 'inline-block' | ||||
|     }), | ||||
|     Components({ | ||||
|       dts: 'src/typings/components.d.ts', | ||||
|       types: [{ from: 'vue-router', names: ['RouterLink', 'RouterView'] }], | ||||
|       resolvers: [ | ||||
|         NaiveUiResolver(), | ||||
|         IconsResolver({ customCollections: [collectionName], componentPrefix: VITE_ICON_PREFFIX }) | ||||
|       ] | ||||
|     }), | ||||
|     createSvgIconsPlugin({ | ||||
|       iconDirs: [localIconPath], | ||||
|       symbolId: `${VITE_ICON_LOCAL_PREFFIX}-[dir]-[name]`, | ||||
|       inject: 'body-last', | ||||
|       customDomId: '__SVG_ICON_LOCAL__' | ||||
|     }) | ||||
|   ]; | ||||
| } | ||||
| @@ -2,5 +2,6 @@ import { visualizer } from 'rollup-plugin-visualizer'; | ||||
|  | ||||
| export default visualizer({ | ||||
|   gzipSize: true, | ||||
|   brotliSize: true | ||||
|   brotliSize: true, | ||||
|   open: true | ||||
| }); | ||||
|   | ||||
| @@ -1,3 +0,0 @@ | ||||
| import vue from '@vitejs/plugin-vue'; | ||||
|  | ||||
| export default vue({}); | ||||
| @@ -1,3 +0,0 @@ | ||||
| import windiCSS from 'vite-plugin-windicss'; | ||||
|  | ||||
| export default windiCSS(); | ||||
							
								
								
									
										20
									
								
								build/utils/index.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,20 @@ | ||||
| import path from 'path'; | ||||
|  | ||||
| /** | ||||
|  * 获取项目根路径 | ||||
|  * @descrition 末尾不带斜杠 | ||||
|  */ | ||||
| export function getRootPath() { | ||||
|   return path.resolve(process.cwd()); | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * 获取项目src路径 | ||||
|  * @param srcName - src目录名称(默认: "src") | ||||
|  * @descrition 末尾不带斜杠 | ||||
|  */ | ||||
| export function getSrcPath(srcName = 'src') { | ||||
|   const rootPath = getRootPath(); | ||||
|  | ||||
|   return `${rootPath}/${srcName}`; | ||||
| } | ||||
| @@ -1 +0,0 @@ | ||||
| module.exports = { extends: ['@commitlint/config-conventional'] }; | ||||
							
								
								
									
										32
									
								
								docker/.dockerignore
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,32 @@ | ||||
| node_modules | ||||
| .DS_Store | ||||
| dist | ||||
| .npmrc | ||||
| .cache | ||||
|  | ||||
| tests/server/static | ||||
| tests/server/static/upload | ||||
|  | ||||
| .local | ||||
| # local env files | ||||
| .env.local | ||||
| .env.*.local | ||||
| .eslintcache | ||||
|  | ||||
| # Log files | ||||
| npm-debug.log* | ||||
| yarn-debug.log* | ||||
| yarn-error.log* | ||||
| pnpm-debug.log* | ||||
|  | ||||
| # Editor directories and files | ||||
| .idea | ||||
| # .vscode | ||||
| *.suo | ||||
| *.ntvs* | ||||
| *.njsproj | ||||
| *.sln | ||||
| *.sw? | ||||
| yarn.lock | ||||
| pnpm-lock.yaml | ||||
| /vite-profile.cpuprofile | ||||
							
								
								
									
										24
									
								
								docker/Dockerfile
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,24 @@ | ||||
| FROM node:16.17.0 as builder | ||||
|  | ||||
| ENV WORKDIR=/soybean-admin | ||||
|  | ||||
| WORKDIR $WORKDIR | ||||
|  | ||||
| COPY ./ $WORKDIR/ | ||||
|  | ||||
| ARG version | ||||
| ENV COMMITID=$version | ||||
|  | ||||
| RUN npm i -g pnpm | ||||
|  | ||||
| RUN pnpm install | ||||
| RUN pnpm build | ||||
|  | ||||
| FROM nginx:alpine as prod | ||||
|  | ||||
| RUN mkdir /soybean | ||||
|  | ||||
| COPY --from=builder /soybean-admin/dist /soybean-admin | ||||
| COPY --from=builder /soybean-admin/docker/nginx.conf /etc/nginx/nginx.conf | ||||
|  | ||||
| EXPOSE 80 | ||||
							
								
								
									
										54
									
								
								docker/nginx.conf
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,54 @@ | ||||
| user  nginx; | ||||
| worker_processes  1; | ||||
| error_log  /var/log/nginx/error.log warn; | ||||
| pid        /var/run/nginx.pid; | ||||
|  | ||||
| events { | ||||
|   worker_connections  1024; | ||||
| } | ||||
|  | ||||
| http { | ||||
|   include       /etc/nginx/mime.types; | ||||
|   default_type  application/octet-stream; | ||||
|   log_format  main  '$remote_addr - $remote_user [$time_local] "$request" ' | ||||
|                     '$status $body_bytes_sent "$http_referer" ' | ||||
|                     '"$http_user_agent" "$http_x_forwarded_for"'; | ||||
|   access_log  /var/log/nginx/access.log  main; | ||||
|   sendfile        on; | ||||
|   keepalive_timeout  65; | ||||
|  | ||||
|   server { | ||||
|     listen       80; | ||||
|     server_name  localhost; | ||||
|  | ||||
|     location / { | ||||
|       # 不缓存html,防止程序更新后缓存继续生效 | ||||
|       if ($request_filename ~* .*\.(?:htm|html)$) { | ||||
|         add_header Cache-Control "private, no-store, no-cache, must-revalidate, proxy-revalidate"; | ||||
|         access_log on; | ||||
|       } | ||||
|       root   /soybean-admin/; | ||||
|       index  index.html index.htm; | ||||
|       try_files $uri $uri/ /index.html; | ||||
|     } | ||||
|  | ||||
|     # location /soybean/soybean-webserver/v1 { | ||||
|     #     proxy_set_header Host $host; | ||||
|     #     proxy_set_header X-Real-IP $remote_addr; | ||||
|     #     proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; | ||||
|     #     proxy_set_header REMOTE-HOST $remote_addr; | ||||
|  | ||||
|     #     # 后台接口地址 | ||||
|     #     proxy_pass http://192.168.1.99:30597/v1; | ||||
|     #     proxy_redirect default; | ||||
|     #     add_header Access-Control-Allow-Origin *; | ||||
|     #     add_header Access-Control-Allow-Headers X-Requested-With; | ||||
|     #     add_header Access-Control-Allow-Methods GET,POST,OPTIONS; | ||||
|     # } | ||||
|  | ||||
|     error_page   500 502 503 504  /50x.html; | ||||
|     location = /50x.html { | ||||
|       root   /usr/share/nginx/html; | ||||
|     } | ||||
|   } | ||||
| } | ||||
							
								
								
									
										41
									
								
								index.html
									
									
									
									
									
								
							
							
						
						| @@ -1,32 +1,15 @@ | ||||
| <!DOCTYPE html> | ||||
| <html lang="en"> | ||||
|   <head> | ||||
|     <meta charset="UTF-8" /> | ||||
|     <link rel="icon" href="/favicon.ico" /> | ||||
|     <meta name="viewport" content="width=device-width, initial-scale=1.0" /> | ||||
|     <title><%= appName %></title> | ||||
|   </head> | ||||
|   <body> | ||||
| 		<div id="appProvider" style="display: none"></div> | ||||
|     <div id="app"> | ||||
| 			<!-- 页面渲染之前加载动画 --> | ||||
|       <div class="app-loading"> | ||||
|         <img class="app-loading_logo" src="/resource/logo.png" /> | ||||
|         <div class="app-loading__dot-wrapper"> | ||||
|           <div class="app-loading__dot"> | ||||
|             <i class="left top"></i> | ||||
|             <i class="left bottom delay-400"></i> | ||||
|             <i class="right top delay-800"></i> | ||||
|             <i class="right bottom delay-1200"></i> | ||||
|           </div> | ||||
|         </div> | ||||
|         <h2 class="app-loading_title"><%= appTitle %></h2> | ||||
|         <style> | ||||
|           @import '/resource/loading.css'; | ||||
|         </style> | ||||
|       </div> | ||||
|       <!-- End --> | ||||
| <html lang="zh-cmn-Hans"> | ||||
| 	<head> | ||||
| 		<meta charset="UTF-8" /> | ||||
| 		<link rel="icon" href="/favicon.svg" /> | ||||
| 		<meta name="viewport" content="width=device-width, initial-scale=1.0" /> | ||||
| 		<title>%VITE_APP_NAME%</title> | ||||
| 	</head> | ||||
| 	<body> | ||||
| 		<div id="app"> | ||||
| 			<div id="appLoading"></div> | ||||
| 		</div> | ||||
|     <script type="module" src="/src/main.ts"></script> | ||||
|   </body> | ||||
| 		<script type="module" src="/src/main.ts"></script> | ||||
| 	</body> | ||||
| </html> | ||||
|   | ||||
							
								
								
									
										126
									
								
								mock/api/auth.ts
									
									
									
									
									
								
							
							
						
						| @@ -1,16 +1,128 @@ | ||||
| import type { MockMethod } from 'vite-plugin-mock'; | ||||
| import type { BackendServiceResult } from '@/interface'; | ||||
| import { userModel } from '../model'; | ||||
|  | ||||
| export default [ | ||||
| /** 参数错误的状态码 */ | ||||
| const ERROR_PARAM_CODE = 10000; | ||||
|  | ||||
| const ERROR_PARAM_MSG = '参数校验失败!'; | ||||
|  | ||||
| const apis: MockMethod[] = [ | ||||
|   // 获取验证码 | ||||
|   { | ||||
|     url: '/api/getUser', | ||||
|     method: 'get', | ||||
|     response: (): BackendServiceResult => { | ||||
|     url: '/mock/getSmsCode', | ||||
|     method: 'post', | ||||
|     response: (): Service.MockServiceResult<boolean> => { | ||||
|       return { | ||||
|         code: 200, | ||||
|         message: 'ok', | ||||
|         data: '测试mock数据' | ||||
|         data: true | ||||
|       }; | ||||
|     } | ||||
|   }, | ||||
|   // 用户+密码 登录 | ||||
|   { | ||||
|     url: '/mock/login', | ||||
|     method: 'post', | ||||
|     response: (options: Service.MockOption): Service.MockServiceResult<ApiAuth.Token | null> => { | ||||
|       const { userName = undefined, password = undefined } = options.body; | ||||
|  | ||||
|       if (!userName || !password) { | ||||
|         return { | ||||
|           code: ERROR_PARAM_CODE, | ||||
|           message: ERROR_PARAM_MSG, | ||||
|           data: null | ||||
|         }; | ||||
|       } | ||||
|  | ||||
|       const findItem = userModel.find(item => item.userName === userName && item.password === password); | ||||
|  | ||||
|       if (findItem) { | ||||
|         return { | ||||
|           code: 200, | ||||
|           message: 'ok', | ||||
|           data: { | ||||
|             token: findItem.token, | ||||
|             refreshToken: findItem.refreshToken | ||||
|           } | ||||
|         }; | ||||
|       } | ||||
|       return { | ||||
|         code: 1000, | ||||
|         message: '用户名或密码错误!', | ||||
|         data: null | ||||
|       }; | ||||
|     } | ||||
|   }, | ||||
|   // 获取用户信息(请求头携带token, 根据token获取用户信息) | ||||
|   { | ||||
|     url: '/mock/getUserInfo', | ||||
|     method: 'get', | ||||
|     response: (options: Service.MockOption): Service.MockServiceResult<ApiAuth.UserInfo | null> => { | ||||
|       // 这里的mock插件得到的字段是authorization, 前端传递的是Authorization字段 | ||||
|       const { authorization = '' } = options.headers; | ||||
|       const REFRESH_TOKEN_CODE = 66666; | ||||
|  | ||||
|       if (!authorization) { | ||||
|         return { | ||||
|           code: REFRESH_TOKEN_CODE, | ||||
|           message: '用户已失效或不存在!', | ||||
|           data: null | ||||
|         }; | ||||
|       } | ||||
|       const userInfo: Auth.UserInfo = { | ||||
|         userId: '', | ||||
|         userName: '', | ||||
|         userRole: 'user' | ||||
|       }; | ||||
|       const isInUser = userModel.some(item => { | ||||
|         const flag = item.token === authorization; | ||||
|         if (flag) { | ||||
|           const { userId: itemUserId, userName, userRole } = item; | ||||
|           Object.assign(userInfo, { userId: itemUserId, userName, userRole }); | ||||
|         } | ||||
|         return flag; | ||||
|       }); | ||||
|  | ||||
|       if (isInUser) { | ||||
|         return { | ||||
|           code: 200, | ||||
|           message: 'ok', | ||||
|           data: userInfo | ||||
|         }; | ||||
|       } | ||||
|  | ||||
|       return { | ||||
|         code: REFRESH_TOKEN_CODE, | ||||
|         message: '用户信息异常!', | ||||
|         data: null | ||||
|       }; | ||||
|     } | ||||
|   }, | ||||
|   { | ||||
|     url: '/mock/updateToken', | ||||
|     method: 'post', | ||||
|     response: (options: Service.MockOption): Service.MockServiceResult<ApiAuth.Token | null> => { | ||||
|       const { refreshToken = '' } = options.body; | ||||
|  | ||||
|       const findItem = userModel.find(item => item.refreshToken === refreshToken); | ||||
|  | ||||
|       if (findItem) { | ||||
|         return { | ||||
|           code: 200, | ||||
|           message: 'ok', | ||||
|           data: { | ||||
|             token: findItem.token, | ||||
|             refreshToken: findItem.refreshToken | ||||
|           } | ||||
|         }; | ||||
|       } | ||||
|       return { | ||||
|         code: 3000, | ||||
|         message: '用户已失效或不存在!', | ||||
|         data: null | ||||
|       }; | ||||
|     } | ||||
|   } | ||||
| ] as MockMethod[]; | ||||
| ]; | ||||
|  | ||||
| export default apis; | ||||
|   | ||||
| @@ -1,3 +1,5 @@ | ||||
| import auth from './auth'; | ||||
| import route from './route'; | ||||
| import management from './management'; | ||||
|  | ||||
| export default [...auth]; | ||||
| export default [...auth, ...route, ...management]; | ||||
|   | ||||
							
								
								
									
										33
									
								
								mock/api/management.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,33 @@ | ||||
| import { mock } from 'mockjs'; | ||||
| import type { MockMethod } from 'vite-plugin-mock'; | ||||
|  | ||||
| const apis: MockMethod[] = [ | ||||
|   { | ||||
|     url: '/mock/getAllUserList', | ||||
|     method: 'post', | ||||
|     response: (): Service.MockServiceResult<ApiUserManagement.User[]> => { | ||||
|       const data = mock({ | ||||
|         'list|1000': [ | ||||
|           { | ||||
|             id: '@id', | ||||
|             userName: '@cname', | ||||
|             'age|18-56': 56, | ||||
|             'gender|1': ['0', '1', null], | ||||
|             phone: | ||||
|               /^[1](([3][0-9])|([4][01456789])|([5][012356789])|([6][2567])|([7][0-8])|([8][0-9])|([9][012356789]))[0-9]{8}$/, | ||||
|             'email|1': ['@email("qq.com")', null], | ||||
|             'userStatus|1': ['1', '2', '3', '4', null] | ||||
|           } | ||||
|         ] | ||||
|       }); | ||||
|  | ||||
|       return { | ||||
|         code: 200, | ||||
|         message: 'ok', | ||||
|         data: data.list | ||||
|       }; | ||||
|     } | ||||
|   } | ||||
| ]; | ||||
|  | ||||
| export default apis; | ||||
							
								
								
									
										29
									
								
								mock/api/route.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,29 @@ | ||||
| import type { MockMethod } from 'vite-plugin-mock'; | ||||
| import { routeModel, userModel } from '../model'; | ||||
|  | ||||
| const apis: MockMethod[] = [ | ||||
|   { | ||||
|     url: '/mock/getUserRoutes', | ||||
|     method: 'post', | ||||
|     response: (options: Service.MockOption): Service.MockServiceResult => { | ||||
|       const { userId = undefined } = options.body; | ||||
|  | ||||
|       const routeHomeName: AuthRoute.LastDegreeRouteKey = 'dashboard_analysis'; | ||||
|  | ||||
|       const role = userModel.find(item => item.userId === userId)?.userRole || 'user'; | ||||
|  | ||||
|       const filterRoutes = routeModel[role]; | ||||
|  | ||||
|       return { | ||||
|         code: 200, | ||||
|         message: 'ok', | ||||
|         data: { | ||||
|           routes: filterRoutes, | ||||
|           home: routeHomeName | ||||
|         } | ||||
|       }; | ||||
|     } | ||||
|   } | ||||
| ]; | ||||
|  | ||||
| export default apis; | ||||
							
								
								
									
										40
									
								
								mock/model/auth.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,40 @@ | ||||
| interface UserModel extends Auth.UserInfo { | ||||
|   token: string; | ||||
|   refreshToken: string; | ||||
|   password: string; | ||||
| } | ||||
|  | ||||
| export const userModel: UserModel[] = [ | ||||
|   { | ||||
|     token: '__TOKEN_SOYBEAN__', | ||||
|     refreshToken: '__REFRESH_TOKEN_SOYBEAN__', | ||||
|     userId: '0', | ||||
|     userName: 'Soybean', | ||||
|     userRole: 'super', | ||||
|     password: 'soybean123' | ||||
|   }, | ||||
|   { | ||||
|     token: '__TOKEN_SUPER__', | ||||
|     refreshToken: '__REFRESH_TOKEN_SUPER__', | ||||
|     userId: '1', | ||||
|     userName: 'Super', | ||||
|     userRole: 'super', | ||||
|     password: 'super123' | ||||
|   }, | ||||
|   { | ||||
|     token: '__TOKEN_ADMIN__', | ||||
|     refreshToken: '__REFRESH_TOKEN_ADMIN__', | ||||
|     userId: '2', | ||||
|     userName: 'Admin', | ||||
|     userRole: 'admin', | ||||
|     password: 'admin123' | ||||
|   }, | ||||
|   { | ||||
|     token: '__TOKEN_USER01__', | ||||
|     refreshToken: '__REFRESH_TOKEN_USER01__', | ||||
|     userId: '3', | ||||
|     userName: 'User01', | ||||
|     userRole: 'user', | ||||
|     password: 'user01123' | ||||
|   } | ||||
| ]; | ||||
							
								
								
									
										2
									
								
								mock/model/index.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,2 @@ | ||||
| export * from './auth'; | ||||
| export * from './route'; | ||||
							
								
								
									
										1263
									
								
								mock/model/route.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										209
									
								
								package.json
									
									
									
									
									
								
							
							
						
						| @@ -1,107 +1,130 @@ | ||||
| { | ||||
|   "name": "soybean-admin", | ||||
|   "version": "0.0.5", | ||||
|   "version": "0.10.2", | ||||
|   "description": "A fresh and elegant admin template, based on Vue3、Vite3、TypeScript、NaiveUI and UnoCSS. 一个基于Vue3、Vite3、TypeScript、NaiveUI and UnoCSS的清新优雅的中后台模版。", | ||||
|   "author": { | ||||
|     "name": "Soybean", | ||||
|     "email": "honghuangdc@gmail.com", | ||||
|     "url": "https://github.com/honghuangdc" | ||||
|   }, | ||||
|   "scripts": { | ||||
|     "release": "standard-version", | ||||
|     "changelog": "conventional-changelog -p angular -i CHANGELOG.md -s -r 0 && git add CHANGELOG.md", | ||||
|     "dev": "vite", | ||||
|     "dev:prod": "vite --mode production", | ||||
|     "dev:staging": "vite --mode staging", | ||||
|     "vtsc": "vue-tsc --noEmit --skipLibCheck", | ||||
|     "build": "npm run vtsc && vite build", | ||||
|     "build:dev": "npm run vtsc && vite build --mode development", | ||||
|     "build:staging": "npm run vtsc && vite build --mode staging", | ||||
|     "serve": "vite preview", | ||||
|     "lint": "eslint ./src --ext .vue,.js,jsx,.ts,tsx", | ||||
|     "lint:fix": "eslint --fix ./src --ext .vue,.js,jsx,.ts,tsx", | ||||
|     "prepare": "husky install", | ||||
|     "postinstall": "patch-package" | ||||
|   }, | ||||
|   "lint-staged": { | ||||
|     "*.{vue,js,jsx,ts,tsx}": "eslint --fix" | ||||
|   }, | ||||
|   "config": { | ||||
|     "commitizen": { | ||||
|       "path": "./node_modules/cz-customizable" | ||||
|     } | ||||
|   }, | ||||
|   "dependencies": { | ||||
|     "@antv/g2plot": "^2.4.5", | ||||
|     "@better-scroll/core": "^2.4.2", | ||||
|     "@vueuse/core": "^7.5.1", | ||||
|     "axios": "^0.24.0", | ||||
|     "chroma-js": "^2.1.2", | ||||
|     "clipboard": "^2.0.8", | ||||
|     "crypto-js": "^4.1.1", | ||||
|     "dayjs": "^1.10.7", | ||||
|     "form-data": "^4.0.0", | ||||
|     "naive-ui": "^2.23.2", | ||||
|     "pinia": "^2.0.9", | ||||
|     "print-js": "^1.6.0", | ||||
|     "qs": "^6.10.2", | ||||
|     "swiper": "^7.4.1", | ||||
|     "vditor": "^3.8.10", | ||||
|     "vue": "^3.2.26", | ||||
|     "vue-router": "^4.0.12", | ||||
|     "wangeditor": "^4.7.11", | ||||
|     "xgplayer": "^2.31.4" | ||||
|   }, | ||||
|   "devDependencies": { | ||||
|     "@amap/amap-jsapi-types": "^0.0.8", | ||||
|     "@commitlint/cli": "^16.0.1", | ||||
|     "@commitlint/config-conventional": "^16.0.0", | ||||
|     "@iconify/json": "^1.1.450", | ||||
|     "@iconify/vue": "^3.1.1", | ||||
|     "@types/bmapgl": "^0.0.5", | ||||
|     "@types/chroma-js": "^2.1.3", | ||||
|     "@types/crypto-js": "^4.1.0", | ||||
|     "@types/qs": "^6.9.7", | ||||
|     "@typescript-eslint/eslint-plugin": "^5.8.1", | ||||
|     "@typescript-eslint/parser": "^5.8.1", | ||||
|     "@vitejs/plugin-vue": "^2.0.1", | ||||
|     "@vue/compiler-sfc": "^3.2.26", | ||||
|     "@vue/eslint-config-prettier": "^7.0.0", | ||||
|     "@vue/eslint-config-typescript": "^10.0.0", | ||||
|     "commitizen": "^4.2.4", | ||||
|     "cz-conventional-changelog": "^3.3.0", | ||||
|     "cz-customizable": "^6.3.0", | ||||
|     "dotenv": "^10.0.0", | ||||
|     "eslint": "^8.6.0", | ||||
|     "eslint-config-airbnb-base": "^15.0.0", | ||||
|     "eslint-config-prettier": "^8.3.0", | ||||
|     "eslint-plugin-import": "^2.25.3", | ||||
|     "eslint-plugin-prettier": "^4.0.0", | ||||
|     "eslint-plugin-vue": "^8.2.0", | ||||
|     "husky": "^7.0.4", | ||||
|     "lint-staged": "^12.1.4", | ||||
|     "mockjs": "^1.1.0", | ||||
|     "patch-package": "^6.4.7", | ||||
|     "postinstall-postinstall": "^2.1.0", | ||||
|     "prettier": "^2.5.1", | ||||
|     "rollup-plugin-visualizer": "^5.5.2", | ||||
|     "sass": "^1.45.2", | ||||
|     "typescript": "^4.5.4", | ||||
|     "unplugin-icons": "^0.13.0", | ||||
|     "unplugin-vue-components": "^0.17.11", | ||||
|     "vite": "~2.5.10", | ||||
|     "vite-plugin-html": "^2.1.2", | ||||
|     "vite-plugin-mock": "^2.9.6", | ||||
|     "vite-plugin-windicss": "^1.6.1", | ||||
|     "vue-tsc": "^0.30.1", | ||||
|     "vueuc": "^0.4.19", | ||||
|     "windicss": "^3.4.2" | ||||
|   }, | ||||
|   "license": "MIT", | ||||
|   "homepage": "https://github.com/honghuangdc/soybean-admin", | ||||
|   "repository": { | ||||
|     "type": "git", | ||||
|     "url": "git+https://github.com/honghuangdc/soybean-admin.git" | ||||
|     "url": "https://github.com/honghuangdc/soybean-admin.git" | ||||
|   }, | ||||
|   "bugs": { | ||||
|     "url": "https://github.com/honghuangdc/soybean-admin/issues" | ||||
|   }, | ||||
|   "keywords": [ | ||||
|     "Vue", | ||||
|     "Vue3", | ||||
|     "admin", | ||||
|     "admin-template", | ||||
|     "vue-admin", | ||||
|     "vue-admin-template", | ||||
|     "Vite3", | ||||
|     "Vite", | ||||
|     "vite-admin", | ||||
|     "TypeScript", | ||||
|     "TS", | ||||
|     "NaiveUI", | ||||
|     "naive-ui", | ||||
|     "naive-admin", | ||||
|     "NaiveUI-Admin", | ||||
|     "naive-ui-admin", | ||||
|     "UnoCSS" | ||||
|   ], | ||||
|   "scripts": { | ||||
|     "dev": "cross-env VITE_SERVICE_ENV=dev vite", | ||||
|     "dev:test": "cross-env VITE_SERVICE_ENV=test vite", | ||||
|     "dev:prod": "cross-env VITE_SERVICE_ENV=prod vite", | ||||
|     "build": "npm run typecheck && cross-env VITE_SERVICE_ENV=prod vite build", | ||||
|     "build:dev": "npm run typecheck && cross-env VITE_SERVICE_ENV=dev vite build", | ||||
|     "build:test": "npm run typecheck && cross-env VITE_SERVICE_ENV=test vite build", | ||||
|     "build:vercel": "cross-env VITE_HASH_ROUTE=Y VITE_VERCEL=Y vite build", | ||||
|     "preview": "vite preview", | ||||
|     "typecheck": "vue-tsc --noEmit --skipLibCheck", | ||||
|     "lint": "eslint . --fix", | ||||
|     "format": "soy prettier-format", | ||||
|     "commit": "soy git-commit", | ||||
|     "cleanup": "soy cleanup", | ||||
|     "update-pkg": "soy update-pkg", | ||||
|     "tsx": "tsx", | ||||
|     "logo": "tsx ./scripts/logo.ts", | ||||
|     "update-version": "bumpp --commit --push --tag", | ||||
|     "prepare": "soy init-git-hooks" | ||||
|   }, | ||||
|   "dependencies": { | ||||
|     "@antv/data-set": "0.11.8", | ||||
|     "@antv/g2": "4.2.10", | ||||
|     "@better-scroll/core": "2.5.1", | ||||
|     "@soybeanjs/vue-materials": "0.2.0", | ||||
|     "@vueuse/core": "10.1.2", | ||||
|     "axios": "1.4.0", | ||||
|     "clipboard": "2.0.11", | ||||
|     "colord": "2.9.3", | ||||
|     "crypto-js": "4.1.1", | ||||
|     "dayjs": "1.11.7", | ||||
|     "echarts": "5.4.2", | ||||
|     "form-data": "4.0.0", | ||||
|     "lodash-es": "4.17.21", | ||||
|     "naive-ui": "2.34.4", | ||||
|     "pinia": "2.1.3", | ||||
|     "print-js": "1.6.0", | ||||
|     "qs": "6.11.2", | ||||
|     "swiper": "9.3.2", | ||||
|     "ua-parser-js": "1.0.35", | ||||
|     "vditor": "3.9.3", | ||||
|     "vue": "3.3.4", | ||||
|     "vue-i18n": "9.2.2", | ||||
|     "vue-router": "4.2.2", | ||||
|     "vuedraggable": "4.1.0", | ||||
|     "wangeditor": "4.7.15", | ||||
|     "xgplayer": "3.0.2" | ||||
|   }, | ||||
|   "devDependencies": { | ||||
|     "@amap/amap-jsapi-types": "0.0.13", | ||||
|     "@iconify/json": "2.2.72", | ||||
|     "@iconify/vue": "4.1.1", | ||||
|     "@soybeanjs/cli": "0.4.1", | ||||
|     "@soybeanjs/vite-plugin-vue-page-route": "0.0.5", | ||||
|     "@types/bmapgl": "0.0.7", | ||||
|     "@types/crypto-js": "4.1.1", | ||||
|     "@types/node": "20.2.5", | ||||
|     "@types/qs": "6.9.7", | ||||
|     "@types/ua-parser-js": "0.7.36", | ||||
|     "@unocss/preset-uno": "0.52.7", | ||||
|     "@unocss/transformer-directives": "0.52.7", | ||||
|     "@unocss/vite": "0.52.7", | ||||
|     "@vitejs/plugin-vue": "4.2.3", | ||||
|     "@vitejs/plugin-vue-jsx": "3.0.1", | ||||
|     "bumpp": "9.1.0", | ||||
|     "cross-env": "7.0.3", | ||||
|     "eslint": "8.41.0", | ||||
|     "eslint-config-soybeanjs": "0.4.8", | ||||
|     "mockjs": "1.1.0", | ||||
|     "rollup-plugin-visualizer": "5.9.0", | ||||
|     "sass": "1.62.1", | ||||
|     "simple-git-hooks": "2.8.1", | ||||
|     "tsx": "3.12.7", | ||||
|     "typescript": "5.0.4", | ||||
|     "unplugin-icons": "0.16.1", | ||||
|     "unplugin-vue-components": "0.25.0", | ||||
|     "vite": "4.3.9", | ||||
|     "vite-plugin-compression": "0.5.1", | ||||
|     "vite-plugin-mock": "2.9.8", | ||||
|     "vite-plugin-progress": "0.0.7", | ||||
|     "vite-plugin-pwa": "0.15.2", | ||||
|     "vite-plugin-svg-icons": "2.0.1", | ||||
|     "vue-tsc": "1.6.5" | ||||
|   }, | ||||
|   "pnpm": { | ||||
|     "patchedDependencies": { | ||||
|       "mockjs@1.1.0": "patches/mockjs@1.1.0.patch" | ||||
|     } | ||||
|   }, | ||||
|   "simple-git-hooks": { | ||||
|     "commit-msg": "pnpm soy git-commit-verify", | ||||
|     "pre-commit": "pnpm typecheck && pnpm soy lint-staged" | ||||
|   } | ||||
| } | ||||
|   | ||||
							
								
								
									
										732
									
								
								patches/mockjs@1.1.0.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,732 @@ | ||||
| diff --git a/dist/mock.js b/dist/mock.js | ||||
| index 35d5b9af3eff34324656879705dcb81470fc9697..3e6a52e0fbfdd39d3aaf1592ffd19ecde33320f3 100644 | ||||
| --- a/dist/mock.js | ||||
| +++ b/dist/mock.js | ||||
| @@ -126,17 +126,17 @@ return /******/ (function(modules) { // webpackBootstrap | ||||
|  /* 1 */ | ||||
|  /***/ (function(module, exports, __webpack_require__) { | ||||
|  | ||||
| -	/* | ||||
| +	/* | ||||
|  	    ## Handler | ||||
|  | ||||
|  	    处理数据模板。 | ||||
| - | ||||
| + | ||||
|  	    * Handler.gen( template, name?, context? ) | ||||
|  | ||||
|  	        入口方法。 | ||||
|  | ||||
|  	    * Data Template Definition, DTD | ||||
| - | ||||
| + | ||||
|  	        处理数据模板定义。 | ||||
|  | ||||
|  	        * Handler.array( options ) | ||||
| @@ -146,7 +146,7 @@ return /******/ (function(modules) { // webpackBootstrap | ||||
|  	        * Handler.string( options ) | ||||
|  	        * Handler.function( options ) | ||||
|  	        * Handler.regexp( options ) | ||||
| - | ||||
| + | ||||
|  	        处理路径(相对和绝对)。 | ||||
|  | ||||
|  	        * Handler.getValueByKeyPath( key, options ) | ||||
| @@ -177,7 +177,7 @@ return /******/ (function(modules) { // webpackBootstrap | ||||
|  | ||||
|  	    Handle.gen(template, name, options) | ||||
|  	    context | ||||
| -	        currentContext, templateCurrentContext, | ||||
| +	        currentContext, templateCurrentContext, | ||||
|  	        path, templatePath | ||||
|  	        root, templateRoot | ||||
|  	*/ | ||||
| @@ -456,7 +456,7 @@ return /******/ (function(modules) { // webpackBootstrap | ||||
|  	                phed = Handler.placeholder(ph, options.context.currentContext, options.context.templateCurrentContext, options) | ||||
|  | ||||
|  	                // 只有一个占位符,并且没有其他字符 | ||||
| -	                if (placeholders.length === 1 && ph === result && typeof phed !== typeof result) { // | ||||
| +	                if (placeholders.length === 1 && ph === result && typeof phed !== typeof result) { // | ||||
|  	                    result = phed | ||||
|  	                    break | ||||
|  | ||||
| @@ -627,7 +627,7 @@ return /******/ (function(modules) { // webpackBootstrap | ||||
|  	            } | ||||
|  	            // 引用的值已经计算好 | ||||
|  	            if (currentContext && (key in currentContext)) return currentContext[key] | ||||
| - | ||||
| + | ||||
|  	            // 尚未计算,递归引用数据模板中的属性 | ||||
|  	            if (templateCurrentContext && | ||||
|  	                (typeof templateCurrentContext === 'object') && | ||||
| @@ -816,13 +816,13 @@ return /******/ (function(modules) { // webpackBootstrap | ||||
|  	        var tpl = Mock.heredoc(function() { | ||||
|  	            /*! | ||||
|  	        {{email}}{{age}} | ||||
| -	        <!-- Mock { | ||||
| +	        <!-- Mock { | ||||
|  	            email: '@EMAIL', | ||||
|  	            age: '@INT(1,100)' | ||||
|  	        } --> | ||||
|  	            *\/ | ||||
|  	        }) | ||||
| - | ||||
| + | ||||
|  	    **相关阅读** | ||||
|  	    * [Creating multiline strings in JavaScript](http://stackoverflow.com/questions/805107/creating-multiline-strings-in-javascript)、 | ||||
|  	*/ | ||||
| @@ -850,7 +850,7 @@ return /******/ (function(modules) { // webpackBootstrap | ||||
|  		解析数据模板(属性名部分)。 | ||||
|  | ||||
|  		* Parser.parse( name ) | ||||
| - | ||||
| + | ||||
|  			```json | ||||
|  			{ | ||||
|  				parameters: [ name, inc, range, decimal ], | ||||
| @@ -922,7 +922,7 @@ return /******/ (function(modules) { // webpackBootstrap | ||||
|  | ||||
|  	/* | ||||
|  	    ## Mock.Random | ||||
| - | ||||
| + | ||||
|  	    工具类,用于生成各种随机数据。 | ||||
|  	*/ | ||||
|  | ||||
| @@ -1251,7 +1251,7 @@ return /******/ (function(modules) { // webpackBootstrap | ||||
|  | ||||
|  	        替代图片源 | ||||
|  	            http://fpoimg.com/ | ||||
| -	        参考自 | ||||
| +	        参考自 | ||||
|  	            http://rensanning.iteye.com/blog/1933310 | ||||
|  	            http://code.tutsplus.com/articles/the-top-8-placeholders-for-web-designers--net-19485 | ||||
|  	    */ | ||||
| @@ -1541,7 +1541,7 @@ return /******/ (function(modules) { // webpackBootstrap | ||||
|  	        var bg_colour = Math.floor(Math.random() * 16777215).toString(16); | ||||
|  	        bg_colour = "#" + ("000000" + bg_colour).slice(-6); | ||||
|  	        document.bgColor = bg_colour; | ||||
| - | ||||
| + | ||||
|  	    http://martin.ankerl.com/2009/12/09/how-to-create-random-colors-programmatically/ | ||||
|  	        Creating random colors is actually more difficult than it seems. The randomness itself is easy, but aesthetically pleasing randomness is more difficult. | ||||
|  	        https://github.com/devongovett/color-generator | ||||
| @@ -1561,7 +1561,7 @@ return /******/ (function(modules) { // webpackBootstrap | ||||
|  | ||||
|  	    http://tool.c7sky.com/webcolor | ||||
|  	        网页设计常用色彩搭配表 | ||||
| - | ||||
| + | ||||
|  	    https://github.com/One-com/one-color | ||||
|  	        An OO-based JavaScript color parser/computation toolkit with support for RGB, HSV, HSL, CMYK, and alpha channels. | ||||
|  	        API 很赞 | ||||
| @@ -1593,7 +1593,7 @@ return /******/ (function(modules) { // webpackBootstrap | ||||
|  	            color += letters[Math.floor(Math.random() * 16)] | ||||
|  	        } | ||||
|  	        return color | ||||
| - | ||||
| + | ||||
|  	        // 随机生成一个无脑的颜色,格式为 '#RRGGBB'。 | ||||
|  	        // _brainlessColor() | ||||
|  	        var color = Math.floor( | ||||
| @@ -1959,7 +1959,7 @@ return /******/ (function(modules) { // webpackBootstrap | ||||
|  	        } | ||||
|  	        return result.join(' ') | ||||
|  	    }, | ||||
| -	    // | ||||
| +	    // | ||||
|  	    cparagraph: function(min, max) { | ||||
|  	        var len = range(3, 7, min, max) | ||||
|  	        var result = [] | ||||
| @@ -2282,17 +2282,17 @@ return /******/ (function(modules) { // webpackBootstrap | ||||
|  	        随机生成一个 URL。 | ||||
|  | ||||
|  	        [URL 规范](http://www.w3.org/Addressing/URL/url-spec.txt) | ||||
| -	            http                    Hypertext Transfer Protocol | ||||
| -	            ftp                     File Transfer protocol | ||||
| -	            gopher                  The Gopher protocol | ||||
| -	            mailto                  Electronic mail address | ||||
| -	            mid                     Message identifiers for electronic mail | ||||
| -	            cid                     Content identifiers for MIME body part | ||||
| -	            news                    Usenet news | ||||
| -	            nntp                    Usenet news for local NNTP access only | ||||
| -	            prospero                Access using the prospero protocols | ||||
| +	            http                    Hypertext Transfer Protocol | ||||
| +	            ftp                     File Transfer protocol | ||||
| +	            gopher                  The Gopher protocol | ||||
| +	            mailto                  Electronic mail address | ||||
| +	            mid                     Message identifiers for electronic mail | ||||
| +	            cid                     Content identifiers for MIME body part | ||||
| +	            news                    Usenet news | ||||
| +	            nntp                    Usenet news for local NNTP access only | ||||
| +	            prospero                Access using the prospero protocols | ||||
|  	            telnet rlogin tn3270    Reference to interactive sessions | ||||
| -	            wais                    Wide Area Information Servers | ||||
| +	            wais                    Wide Area Information Servers | ||||
|  	    */ | ||||
|  	    url: function(protocol, host) { | ||||
|  	        return (protocol || this.protocol()) + '://' + // protocol? | ||||
| @@ -2422,9 +2422,9 @@ return /******/ (function(modules) { // webpackBootstrap | ||||
|  	    西南   重庆市 四川省 贵州省 云南省 西藏自治区 | ||||
|  	    西北   陕西省 甘肃省 青海省 宁夏回族自治区 新疆维吾尔自治区 | ||||
|  	    港澳台 香港特别行政区 澳门特别行政区 台湾省 | ||||
| - | ||||
| + | ||||
|  	    **排序** | ||||
| - | ||||
| + | ||||
|  	    ```js | ||||
|  	    var map = {} | ||||
|  	    _.each(_.keys(REGIONS),function(id){ | ||||
| @@ -6527,7 +6527,7 @@ return /******/ (function(modules) { // webpackBootstrap | ||||
|  		                "0" / "1" / "2" / "3" / "4" / "5" / "6" / "7" / "8" / "9" / | ||||
|  		                "a" / "b" / "c" / "d" / "e" / "f" / | ||||
|  		                "A" / "B" / "C" / "D" / "E" / "F" | ||||
| - | ||||
| + | ||||
|  		    https://github.com/victorquinn/chancejs/blob/develop/chance.js#L1349 | ||||
|  		*/ | ||||
|  		guid: function() { | ||||
| @@ -6629,7 +6629,7 @@ return /******/ (function(modules) { // webpackBootstrap | ||||
|  	} | ||||
|  | ||||
|  	function CaptureGroup(n) { | ||||
| -	    Group.call(this, "capture-group"), this.index = cgs[this.offset] || (cgs[this.offset] = index++), | ||||
| +	    Group.call(this, "capture-group"), this.index = cgs[this.offset] || (cgs[this.offset] = index++), | ||||
|  	    this.body = n; | ||||
|  	} | ||||
|  | ||||
| @@ -6711,7 +6711,7 @@ return /******/ (function(modules) { // webpackBootstrap | ||||
|  	            } | ||||
|  	            return r = l ? '"' + u(l) + '"' : "end of input", "Expected " + t + " but " + r + " found."; | ||||
|  	        } | ||||
| -	        this.expected = n, this.found = l, this.offset = u, this.line = t, this.column = r, | ||||
| +	        this.expected = n, this.found = l, this.offset = u, this.line = t, this.column = r, | ||||
|  	        this.name = "SyntaxError", this.message = e(n, l); | ||||
|  	    } | ||||
|  	    function u(n) { | ||||
| @@ -6724,8 +6724,8 @@ return /******/ (function(modules) { // webpackBootstrap | ||||
|  	        function r(l) { | ||||
|  	            function u(l, u, t) { | ||||
|  	                var r, e; | ||||
| -	                for (r = u; t > r; r++) e = n.charAt(r), "\n" === e ? (l.seenCR || l.line++, l.column = 1, | ||||
| -	                l.seenCR = !1) : "\r" === e || "\u2028" === e || "\u2029" === e ? (l.line++, l.column = 1, | ||||
| +	                for (r = u; t > r; r++) e = n.charAt(r), "\n" === e ? (l.seenCR || l.line++, l.column = 1, | ||||
| +	                l.seenCR = !1) : "\r" === e || "\u2028" === e || "\u2029" === e ? (l.line++, l.column = 1, | ||||
|  	                l.seenCR = !0) : (l.column++, l.seenCR = !1); | ||||
|  	            } | ||||
|  	            return Mt !== l && (Mt > l && (Mt = 0, Dt = { | ||||
| @@ -6743,19 +6743,19 @@ return /******/ (function(modules) { // webpackBootstrap | ||||
|  	        } | ||||
|  	        function c() { | ||||
|  	            var l, u, t, r, o; | ||||
| -	            return l = qt, u = i(), null !== u ? (t = qt, 124 === n.charCodeAt(qt) ? (r = fl, | ||||
| -	            qt++) : (r = null, 0 === Wt && e(sl)), null !== r ? (o = c(), null !== o ? (r = [ r, o ], | ||||
| -	            t = r) : (qt = t, t = il)) : (qt = t, t = il), null === t && (t = al), null !== t ? (Lt = l, | ||||
| -	            u = hl(u, t), null === u ? (qt = l, l = u) : l = u) : (qt = l, l = il)) : (qt = l, | ||||
| +	            return l = qt, u = i(), null !== u ? (t = qt, 124 === n.charCodeAt(qt) ? (r = fl, | ||||
| +	            qt++) : (r = null, 0 === Wt && e(sl)), null !== r ? (o = c(), null !== o ? (r = [ r, o ], | ||||
| +	            t = r) : (qt = t, t = il)) : (qt = t, t = il), null === t && (t = al), null !== t ? (Lt = l, | ||||
| +	            u = hl(u, t), null === u ? (qt = l, l = u) : l = u) : (qt = l, l = il)) : (qt = l, | ||||
|  	            l = il), l; | ||||
|  	        } | ||||
|  	        function i() { | ||||
|  	            var n, l, u, t, r; | ||||
| -	            if (n = qt, l = f(), null === l && (l = al), null !== l) if (u = qt, Wt++, t = d(), | ||||
| +	            if (n = qt, l = f(), null === l && (l = al), null !== l) if (u = qt, Wt++, t = d(), | ||||
|  	            Wt--, null === t ? u = al : (qt = u, u = il), null !== u) { | ||||
| -	                for (t = [], r = h(), null === r && (r = a()); null !== r; ) t.push(r), r = h(), | ||||
| +	                for (t = [], r = h(), null === r && (r = a()); null !== r; ) t.push(r), r = h(), | ||||
|  	                null === r && (r = a()); | ||||
| -	                null !== t ? (r = s(), null === r && (r = al), null !== r ? (Lt = n, l = dl(l, t, r), | ||||
| +	                null !== t ? (r = s(), null === r && (r = al), null !== r ? (Lt = n, l = dl(l, t, r), | ||||
|  	                null === l ? (qt = n, n = l) : n = l) : (qt = n, n = il)) : (qt = n, n = il); | ||||
|  	            } else qt = n, n = il; else qt = n, n = il; | ||||
|  	            return n; | ||||
| @@ -6766,148 +6766,148 @@ return /******/ (function(modules) { // webpackBootstrap | ||||
|  	        } | ||||
|  	        function f() { | ||||
|  	            var l, u; | ||||
| -	            return l = qt, 94 === n.charCodeAt(qt) ? (u = pl, qt++) : (u = null, 0 === Wt && e(vl)), | ||||
| +	            return l = qt, 94 === n.charCodeAt(qt) ? (u = pl, qt++) : (u = null, 0 === Wt && e(vl)), | ||||
|  	            null !== u && (Lt = l, u = wl()), null === u ? (qt = l, l = u) : l = u, l; | ||||
|  	        } | ||||
|  	        function s() { | ||||
|  	            var l, u; | ||||
| -	            return l = qt, 36 === n.charCodeAt(qt) ? (u = Al, qt++) : (u = null, 0 === Wt && e(Cl)), | ||||
| +	            return l = qt, 36 === n.charCodeAt(qt) ? (u = Al, qt++) : (u = null, 0 === Wt && e(Cl)), | ||||
|  	            null !== u && (Lt = l, u = gl()), null === u ? (qt = l, l = u) : l = u, l; | ||||
|  	        } | ||||
|  	        function h() { | ||||
|  	            var n, l, u; | ||||
| -	            return n = qt, l = a(), null !== l ? (u = d(), null !== u ? (Lt = n, l = bl(l, u), | ||||
| +	            return n = qt, l = a(), null !== l ? (u = d(), null !== u ? (Lt = n, l = bl(l, u), | ||||
|  	            null === l ? (qt = n, n = l) : n = l) : (qt = n, n = il)) : (qt = n, n = il), n; | ||||
|  	        } | ||||
|  	        function d() { | ||||
|  	            var n, l, u; | ||||
| -	            return Wt++, n = qt, l = p(), null !== l ? (u = k(), null === u && (u = al), null !== u ? (Lt = n, | ||||
| -	            l = Tl(l, u), null === l ? (qt = n, n = l) : n = l) : (qt = n, n = il)) : (qt = n, | ||||
| +	            return Wt++, n = qt, l = p(), null !== l ? (u = k(), null === u && (u = al), null !== u ? (Lt = n, | ||||
| +	            l = Tl(l, u), null === l ? (qt = n, n = l) : n = l) : (qt = n, n = il)) : (qt = n, | ||||
|  	            n = il), Wt--, null === n && (l = null, 0 === Wt && e(kl)), n; | ||||
|  	        } | ||||
|  	        function p() { | ||||
|  	            var n; | ||||
| -	            return n = v(), null === n && (n = w(), null === n && (n = A(), null === n && (n = C(), | ||||
| +	            return n = v(), null === n && (n = w(), null === n && (n = A(), null === n && (n = C(), | ||||
|  	            null === n && (n = g(), null === n && (n = b()))))), n; | ||||
|  	        } | ||||
|  	        function v() { | ||||
|  	            var l, u, t, r, o, c; | ||||
| -	            return l = qt, 123 === n.charCodeAt(qt) ? (u = xl, qt++) : (u = null, 0 === Wt && e(yl)), | ||||
| -	            null !== u ? (t = T(), null !== t ? (44 === n.charCodeAt(qt) ? (r = ml, qt++) : (r = null, | ||||
| -	            0 === Wt && e(Rl)), null !== r ? (o = T(), null !== o ? (125 === n.charCodeAt(qt) ? (c = Fl, | ||||
| -	            qt++) : (c = null, 0 === Wt && e(Ql)), null !== c ? (Lt = l, u = Sl(t, o), null === u ? (qt = l, | ||||
| -	            l = u) : l = u) : (qt = l, l = il)) : (qt = l, l = il)) : (qt = l, l = il)) : (qt = l, | ||||
| +	            return l = qt, 123 === n.charCodeAt(qt) ? (u = xl, qt++) : (u = null, 0 === Wt && e(yl)), | ||||
| +	            null !== u ? (t = T(), null !== t ? (44 === n.charCodeAt(qt) ? (r = ml, qt++) : (r = null, | ||||
| +	            0 === Wt && e(Rl)), null !== r ? (o = T(), null !== o ? (125 === n.charCodeAt(qt) ? (c = Fl, | ||||
| +	            qt++) : (c = null, 0 === Wt && e(Ql)), null !== c ? (Lt = l, u = Sl(t, o), null === u ? (qt = l, | ||||
| +	            l = u) : l = u) : (qt = l, l = il)) : (qt = l, l = il)) : (qt = l, l = il)) : (qt = l, | ||||
|  	            l = il)) : (qt = l, l = il), l; | ||||
|  	        } | ||||
|  	        function w() { | ||||
|  	            var l, u, t, r; | ||||
| -	            return l = qt, 123 === n.charCodeAt(qt) ? (u = xl, qt++) : (u = null, 0 === Wt && e(yl)), | ||||
| -	            null !== u ? (t = T(), null !== t ? (n.substr(qt, 2) === Ul ? (r = Ul, qt += 2) : (r = null, | ||||
| -	            0 === Wt && e(El)), null !== r ? (Lt = l, u = Gl(t), null === u ? (qt = l, l = u) : l = u) : (qt = l, | ||||
| +	            return l = qt, 123 === n.charCodeAt(qt) ? (u = xl, qt++) : (u = null, 0 === Wt && e(yl)), | ||||
| +	            null !== u ? (t = T(), null !== t ? (n.substr(qt, 2) === Ul ? (r = Ul, qt += 2) : (r = null, | ||||
| +	            0 === Wt && e(El)), null !== r ? (Lt = l, u = Gl(t), null === u ? (qt = l, l = u) : l = u) : (qt = l, | ||||
|  	            l = il)) : (qt = l, l = il)) : (qt = l, l = il), l; | ||||
|  	        } | ||||
|  	        function A() { | ||||
|  	            var l, u, t, r; | ||||
| -	            return l = qt, 123 === n.charCodeAt(qt) ? (u = xl, qt++) : (u = null, 0 === Wt && e(yl)), | ||||
| -	            null !== u ? (t = T(), null !== t ? (125 === n.charCodeAt(qt) ? (r = Fl, qt++) : (r = null, | ||||
| -	            0 === Wt && e(Ql)), null !== r ? (Lt = l, u = Bl(t), null === u ? (qt = l, l = u) : l = u) : (qt = l, | ||||
| +	            return l = qt, 123 === n.charCodeAt(qt) ? (u = xl, qt++) : (u = null, 0 === Wt && e(yl)), | ||||
| +	            null !== u ? (t = T(), null !== t ? (125 === n.charCodeAt(qt) ? (r = Fl, qt++) : (r = null, | ||||
| +	            0 === Wt && e(Ql)), null !== r ? (Lt = l, u = Bl(t), null === u ? (qt = l, l = u) : l = u) : (qt = l, | ||||
|  	            l = il)) : (qt = l, l = il)) : (qt = l, l = il), l; | ||||
|  	        } | ||||
|  	        function C() { | ||||
|  	            var l, u; | ||||
| -	            return l = qt, 43 === n.charCodeAt(qt) ? (u = jl, qt++) : (u = null, 0 === Wt && e($l)), | ||||
| +	            return l = qt, 43 === n.charCodeAt(qt) ? (u = jl, qt++) : (u = null, 0 === Wt && e($l)), | ||||
|  	            null !== u && (Lt = l, u = ql()), null === u ? (qt = l, l = u) : l = u, l; | ||||
|  	        } | ||||
|  	        function g() { | ||||
|  	            var l, u; | ||||
| -	            return l = qt, 42 === n.charCodeAt(qt) ? (u = Ll, qt++) : (u = null, 0 === Wt && e(Ml)), | ||||
| +	            return l = qt, 42 === n.charCodeAt(qt) ? (u = Ll, qt++) : (u = null, 0 === Wt && e(Ml)), | ||||
|  	            null !== u && (Lt = l, u = Dl()), null === u ? (qt = l, l = u) : l = u, l; | ||||
|  	        } | ||||
|  	        function b() { | ||||
|  	            var l, u; | ||||
| -	            return l = qt, 63 === n.charCodeAt(qt) ? (u = Hl, qt++) : (u = null, 0 === Wt && e(Ol)), | ||||
| +	            return l = qt, 63 === n.charCodeAt(qt) ? (u = Hl, qt++) : (u = null, 0 === Wt && e(Ol)), | ||||
|  	            null !== u && (Lt = l, u = Wl()), null === u ? (qt = l, l = u) : l = u, l; | ||||
|  	        } | ||||
|  	        function k() { | ||||
|  	            var l; | ||||
| -	            return 63 === n.charCodeAt(qt) ? (l = Hl, qt++) : (l = null, 0 === Wt && e(Ol)), | ||||
| +	            return 63 === n.charCodeAt(qt) ? (l = Hl, qt++) : (l = null, 0 === Wt && e(Ol)), | ||||
|  	            l; | ||||
|  	        } | ||||
|  	        function T() { | ||||
|  	            var l, u, t; | ||||
| -	            if (l = qt, u = [], zl.test(n.charAt(qt)) ? (t = n.charAt(qt), qt++) : (t = null, | ||||
| -	            0 === Wt && e(Il)), null !== t) for (;null !== t; ) u.push(t), zl.test(n.charAt(qt)) ? (t = n.charAt(qt), | ||||
| +	            if (l = qt, u = [], zl.test(n.charAt(qt)) ? (t = n.charAt(qt), qt++) : (t = null, | ||||
| +	            0 === Wt && e(Il)), null !== t) for (;null !== t; ) u.push(t), zl.test(n.charAt(qt)) ? (t = n.charAt(qt), | ||||
|  	            qt++) : (t = null, 0 === Wt && e(Il)); else u = il; | ||||
| -	            return null !== u && (Lt = l, u = Jl(u)), null === u ? (qt = l, l = u) : l = u, | ||||
| +	            return null !== u && (Lt = l, u = Jl(u)), null === u ? (qt = l, l = u) : l = u, | ||||
|  	            l; | ||||
|  	        } | ||||
|  	        function x() { | ||||
|  	            var l, u, t, r; | ||||
| -	            return l = qt, 40 === n.charCodeAt(qt) ? (u = Kl, qt++) : (u = null, 0 === Wt && e(Nl)), | ||||
| -	            null !== u ? (t = R(), null === t && (t = F(), null === t && (t = m(), null === t && (t = y()))), | ||||
| -	            null !== t ? (41 === n.charCodeAt(qt) ? (r = Pl, qt++) : (r = null, 0 === Wt && e(Vl)), | ||||
| -	            null !== r ? (Lt = l, u = Xl(t), null === u ? (qt = l, l = u) : l = u) : (qt = l, | ||||
| +	            return l = qt, 40 === n.charCodeAt(qt) ? (u = Kl, qt++) : (u = null, 0 === Wt && e(Nl)), | ||||
| +	            null !== u ? (t = R(), null === t && (t = F(), null === t && (t = m(), null === t && (t = y()))), | ||||
| +	            null !== t ? (41 === n.charCodeAt(qt) ? (r = Pl, qt++) : (r = null, 0 === Wt && e(Vl)), | ||||
| +	            null !== r ? (Lt = l, u = Xl(t), null === u ? (qt = l, l = u) : l = u) : (qt = l, | ||||
|  	            l = il)) : (qt = l, l = il)) : (qt = l, l = il), l; | ||||
|  	        } | ||||
|  	        function y() { | ||||
|  	            var n, l; | ||||
| -	            return n = qt, l = c(), null !== l && (Lt = n, l = Yl(l)), null === l ? (qt = n, | ||||
| +	            return n = qt, l = c(), null !== l && (Lt = n, l = Yl(l)), null === l ? (qt = n, | ||||
|  	            n = l) : n = l, n; | ||||
|  	        } | ||||
|  	        function m() { | ||||
|  	            var l, u, t; | ||||
| -	            return l = qt, n.substr(qt, 2) === Zl ? (u = Zl, qt += 2) : (u = null, 0 === Wt && e(_l)), | ||||
| -	            null !== u ? (t = c(), null !== t ? (Lt = l, u = nu(t), null === u ? (qt = l, l = u) : l = u) : (qt = l, | ||||
| +	            return l = qt, n.substr(qt, 2) === Zl ? (u = Zl, qt += 2) : (u = null, 0 === Wt && e(_l)), | ||||
| +	            null !== u ? (t = c(), null !== t ? (Lt = l, u = nu(t), null === u ? (qt = l, l = u) : l = u) : (qt = l, | ||||
|  	            l = il)) : (qt = l, l = il), l; | ||||
|  	        } | ||||
|  	        function R() { | ||||
|  	            var l, u, t; | ||||
| -	            return l = qt, n.substr(qt, 2) === lu ? (u = lu, qt += 2) : (u = null, 0 === Wt && e(uu)), | ||||
| -	            null !== u ? (t = c(), null !== t ? (Lt = l, u = tu(t), null === u ? (qt = l, l = u) : l = u) : (qt = l, | ||||
| +	            return l = qt, n.substr(qt, 2) === lu ? (u = lu, qt += 2) : (u = null, 0 === Wt && e(uu)), | ||||
| +	            null !== u ? (t = c(), null !== t ? (Lt = l, u = tu(t), null === u ? (qt = l, l = u) : l = u) : (qt = l, | ||||
|  	            l = il)) : (qt = l, l = il), l; | ||||
|  	        } | ||||
|  	        function F() { | ||||
|  	            var l, u, t; | ||||
| -	            return l = qt, n.substr(qt, 2) === ru ? (u = ru, qt += 2) : (u = null, 0 === Wt && e(eu)), | ||||
| -	            null !== u ? (t = c(), null !== t ? (Lt = l, u = ou(t), null === u ? (qt = l, l = u) : l = u) : (qt = l, | ||||
| +	            return l = qt, n.substr(qt, 2) === ru ? (u = ru, qt += 2) : (u = null, 0 === Wt && e(eu)), | ||||
| +	            null !== u ? (t = c(), null !== t ? (Lt = l, u = ou(t), null === u ? (qt = l, l = u) : l = u) : (qt = l, | ||||
|  	            l = il)) : (qt = l, l = il), l; | ||||
|  	        } | ||||
|  	        function Q() { | ||||
|  	            var l, u, t, r, o; | ||||
| -	            if (Wt++, l = qt, 91 === n.charCodeAt(qt) ? (u = iu, qt++) : (u = null, 0 === Wt && e(au)), | ||||
| -	            null !== u) if (94 === n.charCodeAt(qt) ? (t = pl, qt++) : (t = null, 0 === Wt && e(vl)), | ||||
| +	            if (Wt++, l = qt, 91 === n.charCodeAt(qt) ? (u = iu, qt++) : (u = null, 0 === Wt && e(au)), | ||||
| +	            null !== u) if (94 === n.charCodeAt(qt) ? (t = pl, qt++) : (t = null, 0 === Wt && e(vl)), | ||||
|  	            null === t && (t = al), null !== t) { | ||||
| -	                for (r = [], o = S(), null === o && (o = U()); null !== o; ) r.push(o), o = S(), | ||||
| +	                for (r = [], o = S(), null === o && (o = U()); null !== o; ) r.push(o), o = S(), | ||||
|  	                null === o && (o = U()); | ||||
| -	                null !== r ? (93 === n.charCodeAt(qt) ? (o = fu, qt++) : (o = null, 0 === Wt && e(su)), | ||||
| -	                null !== o ? (Lt = l, u = hu(t, r), null === u ? (qt = l, l = u) : l = u) : (qt = l, | ||||
| +	                null !== r ? (93 === n.charCodeAt(qt) ? (o = fu, qt++) : (o = null, 0 === Wt && e(su)), | ||||
| +	                null !== o ? (Lt = l, u = hu(t, r), null === u ? (qt = l, l = u) : l = u) : (qt = l, | ||||
|  	                l = il)) : (qt = l, l = il); | ||||
|  	            } else qt = l, l = il; else qt = l, l = il; | ||||
|  	            return Wt--, null === l && (u = null, 0 === Wt && e(cu)), l; | ||||
|  	        } | ||||
|  	        function S() { | ||||
|  	            var l, u, t, r; | ||||
| -	            return Wt++, l = qt, u = U(), null !== u ? (45 === n.charCodeAt(qt) ? (t = pu, qt++) : (t = null, | ||||
| -	            0 === Wt && e(vu)), null !== t ? (r = U(), null !== r ? (Lt = l, u = wu(u, r), null === u ? (qt = l, | ||||
| -	            l = u) : l = u) : (qt = l, l = il)) : (qt = l, l = il)) : (qt = l, l = il), Wt--, | ||||
| +	            return Wt++, l = qt, u = U(), null !== u ? (45 === n.charCodeAt(qt) ? (t = pu, qt++) : (t = null, | ||||
| +	            0 === Wt && e(vu)), null !== t ? (r = U(), null !== r ? (Lt = l, u = wu(u, r), null === u ? (qt = l, | ||||
| +	            l = u) : l = u) : (qt = l, l = il)) : (qt = l, l = il)) : (qt = l, l = il), Wt--, | ||||
|  	            null === l && (u = null, 0 === Wt && e(du)), l; | ||||
|  	        } | ||||
|  	        function U() { | ||||
|  	            var n, l; | ||||
| -	            return Wt++, n = G(), null === n && (n = E()), Wt--, null === n && (l = null, 0 === Wt && e(Au)), | ||||
| +	            return Wt++, n = G(), null === n && (n = E()), Wt--, null === n && (l = null, 0 === Wt && e(Au)), | ||||
|  	            n; | ||||
|  	        } | ||||
|  	        function E() { | ||||
|  	            var l, u; | ||||
| -	            return l = qt, Cu.test(n.charAt(qt)) ? (u = n.charAt(qt), qt++) : (u = null, 0 === Wt && e(gu)), | ||||
| +	            return l = qt, Cu.test(n.charAt(qt)) ? (u = n.charAt(qt), qt++) : (u = null, 0 === Wt && e(gu)), | ||||
|  	            null !== u && (Lt = l, u = bu(u)), null === u ? (qt = l, l = u) : l = u, l; | ||||
|  	        } | ||||
|  	        function G() { | ||||
|  	            var n; | ||||
| -	            return n = L(), null === n && (n = Y(), null === n && (n = H(), null === n && (n = O(), | ||||
| -	            null === n && (n = W(), null === n && (n = z(), null === n && (n = I(), null === n && (n = J(), | ||||
| -	            null === n && (n = K(), null === n && (n = N(), null === n && (n = P(), null === n && (n = V(), | ||||
| -	            null === n && (n = X(), null === n && (n = _(), null === n && (n = nl(), null === n && (n = ll(), | ||||
| +	            return n = L(), null === n && (n = Y(), null === n && (n = H(), null === n && (n = O(), | ||||
| +	            null === n && (n = W(), null === n && (n = z(), null === n && (n = I(), null === n && (n = J(), | ||||
| +	            null === n && (n = K(), null === n && (n = N(), null === n && (n = P(), null === n && (n = V(), | ||||
| +	            null === n && (n = X(), null === n && (n = _(), null === n && (n = nl(), null === n && (n = ll(), | ||||
|  	            null === n && (n = ul(), null === n && (n = tl()))))))))))))))))), n; | ||||
|  	        } | ||||
|  	        function B() { | ||||
| @@ -6916,154 +6916,154 @@ return /******/ (function(modules) { // webpackBootstrap | ||||
|  	        } | ||||
|  	        function j() { | ||||
|  	            var l, u; | ||||
| -	            return l = qt, 46 === n.charCodeAt(qt) ? (u = ku, qt++) : (u = null, 0 === Wt && e(Tu)), | ||||
| +	            return l = qt, 46 === n.charCodeAt(qt) ? (u = ku, qt++) : (u = null, 0 === Wt && e(Tu)), | ||||
|  	            null !== u && (Lt = l, u = xu()), null === u ? (qt = l, l = u) : l = u, l; | ||||
|  	        } | ||||
|  	        function $() { | ||||
|  	            var l, u; | ||||
| -	            return Wt++, l = qt, mu.test(n.charAt(qt)) ? (u = n.charAt(qt), qt++) : (u = null, | ||||
| -	            0 === Wt && e(Ru)), null !== u && (Lt = l, u = bu(u)), null === u ? (qt = l, l = u) : l = u, | ||||
| +	            return Wt++, l = qt, mu.test(n.charAt(qt)) ? (u = n.charAt(qt), qt++) : (u = null, | ||||
| +	            0 === Wt && e(Ru)), null !== u && (Lt = l, u = bu(u)), null === u ? (qt = l, l = u) : l = u, | ||||
|  	            Wt--, null === l && (u = null, 0 === Wt && e(yu)), l; | ||||
|  	        } | ||||
|  	        function q() { | ||||
|  	            var n; | ||||
| -	            return n = M(), null === n && (n = D(), null === n && (n = Y(), null === n && (n = H(), | ||||
| -	            null === n && (n = O(), null === n && (n = W(), null === n && (n = z(), null === n && (n = I(), | ||||
| -	            null === n && (n = J(), null === n && (n = K(), null === n && (n = N(), null === n && (n = P(), | ||||
| -	            null === n && (n = V(), null === n && (n = X(), null === n && (n = Z(), null === n && (n = _(), | ||||
| -	            null === n && (n = nl(), null === n && (n = ll(), null === n && (n = ul(), null === n && (n = tl()))))))))))))))))))), | ||||
| +	            return n = M(), null === n && (n = D(), null === n && (n = Y(), null === n && (n = H(), | ||||
| +	            null === n && (n = O(), null === n && (n = W(), null === n && (n = z(), null === n && (n = I(), | ||||
| +	            null === n && (n = J(), null === n && (n = K(), null === n && (n = N(), null === n && (n = P(), | ||||
| +	            null === n && (n = V(), null === n && (n = X(), null === n && (n = Z(), null === n && (n = _(), | ||||
| +	            null === n && (n = nl(), null === n && (n = ll(), null === n && (n = ul(), null === n && (n = tl()))))))))))))))))))), | ||||
|  	            n; | ||||
|  	        } | ||||
|  	        function L() { | ||||
|  	            var l, u; | ||||
| -	            return l = qt, n.substr(qt, 2) === Fu ? (u = Fu, qt += 2) : (u = null, 0 === Wt && e(Qu)), | ||||
| +	            return l = qt, n.substr(qt, 2) === Fu ? (u = Fu, qt += 2) : (u = null, 0 === Wt && e(Qu)), | ||||
|  	            null !== u && (Lt = l, u = Su()), null === u ? (qt = l, l = u) : l = u, l; | ||||
|  	        } | ||||
|  	        function M() { | ||||
|  	            var l, u; | ||||
| -	            return l = qt, n.substr(qt, 2) === Fu ? (u = Fu, qt += 2) : (u = null, 0 === Wt && e(Qu)), | ||||
| +	            return l = qt, n.substr(qt, 2) === Fu ? (u = Fu, qt += 2) : (u = null, 0 === Wt && e(Qu)), | ||||
|  	            null !== u && (Lt = l, u = Uu()), null === u ? (qt = l, l = u) : l = u, l; | ||||
|  	        } | ||||
|  	        function D() { | ||||
|  	            var l, u; | ||||
| -	            return l = qt, n.substr(qt, 2) === Eu ? (u = Eu, qt += 2) : (u = null, 0 === Wt && e(Gu)), | ||||
| +	            return l = qt, n.substr(qt, 2) === Eu ? (u = Eu, qt += 2) : (u = null, 0 === Wt && e(Gu)), | ||||
|  	            null !== u && (Lt = l, u = Bu()), null === u ? (qt = l, l = u) : l = u, l; | ||||
|  	        } | ||||
|  	        function H() { | ||||
|  	            var l, u; | ||||
| -	            return l = qt, n.substr(qt, 2) === ju ? (u = ju, qt += 2) : (u = null, 0 === Wt && e($u)), | ||||
| +	            return l = qt, n.substr(qt, 2) === ju ? (u = ju, qt += 2) : (u = null, 0 === Wt && e($u)), | ||||
|  	            null !== u && (Lt = l, u = qu()), null === u ? (qt = l, l = u) : l = u, l; | ||||
|  	        } | ||||
|  	        function O() { | ||||
|  	            var l, u; | ||||
| -	            return l = qt, n.substr(qt, 2) === Lu ? (u = Lu, qt += 2) : (u = null, 0 === Wt && e(Mu)), | ||||
| +	            return l = qt, n.substr(qt, 2) === Lu ? (u = Lu, qt += 2) : (u = null, 0 === Wt && e(Mu)), | ||||
|  	            null !== u && (Lt = l, u = Du()), null === u ? (qt = l, l = u) : l = u, l; | ||||
|  	        } | ||||
|  	        function W() { | ||||
|  	            var l, u; | ||||
| -	            return l = qt, n.substr(qt, 2) === Hu ? (u = Hu, qt += 2) : (u = null, 0 === Wt && e(Ou)), | ||||
| +	            return l = qt, n.substr(qt, 2) === Hu ? (u = Hu, qt += 2) : (u = null, 0 === Wt && e(Ou)), | ||||
|  	            null !== u && (Lt = l, u = Wu()), null === u ? (qt = l, l = u) : l = u, l; | ||||
|  	        } | ||||
|  	        function z() { | ||||
|  	            var l, u; | ||||
| -	            return l = qt, n.substr(qt, 2) === zu ? (u = zu, qt += 2) : (u = null, 0 === Wt && e(Iu)), | ||||
| +	            return l = qt, n.substr(qt, 2) === zu ? (u = zu, qt += 2) : (u = null, 0 === Wt && e(Iu)), | ||||
|  	            null !== u && (Lt = l, u = Ju()), null === u ? (qt = l, l = u) : l = u, l; | ||||
|  	        } | ||||
|  	        function I() { | ||||
|  	            var l, u; | ||||
| -	            return l = qt, n.substr(qt, 2) === Ku ? (u = Ku, qt += 2) : (u = null, 0 === Wt && e(Nu)), | ||||
| +	            return l = qt, n.substr(qt, 2) === Ku ? (u = Ku, qt += 2) : (u = null, 0 === Wt && e(Nu)), | ||||
|  	            null !== u && (Lt = l, u = Pu()), null === u ? (qt = l, l = u) : l = u, l; | ||||
|  	        } | ||||
|  	        function J() { | ||||
|  	            var l, u; | ||||
| -	            return l = qt, n.substr(qt, 2) === Vu ? (u = Vu, qt += 2) : (u = null, 0 === Wt && e(Xu)), | ||||
| +	            return l = qt, n.substr(qt, 2) === Vu ? (u = Vu, qt += 2) : (u = null, 0 === Wt && e(Xu)), | ||||
|  	            null !== u && (Lt = l, u = Yu()), null === u ? (qt = l, l = u) : l = u, l; | ||||
|  	        } | ||||
|  	        function K() { | ||||
|  	            var l, u; | ||||
| -	            return l = qt, n.substr(qt, 2) === Zu ? (u = Zu, qt += 2) : (u = null, 0 === Wt && e(_u)), | ||||
| +	            return l = qt, n.substr(qt, 2) === Zu ? (u = Zu, qt += 2) : (u = null, 0 === Wt && e(_u)), | ||||
|  	            null !== u && (Lt = l, u = nt()), null === u ? (qt = l, l = u) : l = u, l; | ||||
|  	        } | ||||
|  	        function N() { | ||||
|  	            var l, u; | ||||
| -	            return l = qt, n.substr(qt, 2) === lt ? (u = lt, qt += 2) : (u = null, 0 === Wt && e(ut)), | ||||
| +	            return l = qt, n.substr(qt, 2) === lt ? (u = lt, qt += 2) : (u = null, 0 === Wt && e(ut)), | ||||
|  	            null !== u && (Lt = l, u = tt()), null === u ? (qt = l, l = u) : l = u, l; | ||||
|  	        } | ||||
|  	        function P() { | ||||
|  	            var l, u; | ||||
| -	            return l = qt, n.substr(qt, 2) === rt ? (u = rt, qt += 2) : (u = null, 0 === Wt && e(et)), | ||||
| +	            return l = qt, n.substr(qt, 2) === rt ? (u = rt, qt += 2) : (u = null, 0 === Wt && e(et)), | ||||
|  	            null !== u && (Lt = l, u = ot()), null === u ? (qt = l, l = u) : l = u, l; | ||||
|  	        } | ||||
|  	        function V() { | ||||
|  	            var l, u; | ||||
| -	            return l = qt, n.substr(qt, 2) === ct ? (u = ct, qt += 2) : (u = null, 0 === Wt && e(it)), | ||||
| +	            return l = qt, n.substr(qt, 2) === ct ? (u = ct, qt += 2) : (u = null, 0 === Wt && e(it)), | ||||
|  	            null !== u && (Lt = l, u = at()), null === u ? (qt = l, l = u) : l = u, l; | ||||
|  	        } | ||||
|  	        function X() { | ||||
|  	            var l, u; | ||||
| -	            return l = qt, n.substr(qt, 2) === ft ? (u = ft, qt += 2) : (u = null, 0 === Wt && e(st)), | ||||
| +	            return l = qt, n.substr(qt, 2) === ft ? (u = ft, qt += 2) : (u = null, 0 === Wt && e(st)), | ||||
|  	            null !== u && (Lt = l, u = ht()), null === u ? (qt = l, l = u) : l = u, l; | ||||
|  	        } | ||||
|  	        function Y() { | ||||
|  	            var l, u, t; | ||||
| -	            return l = qt, n.substr(qt, 2) === dt ? (u = dt, qt += 2) : (u = null, 0 === Wt && e(pt)), | ||||
| -	            null !== u ? (n.length > qt ? (t = n.charAt(qt), qt++) : (t = null, 0 === Wt && e(vt)), | ||||
| -	            null !== t ? (Lt = l, u = wt(t), null === u ? (qt = l, l = u) : l = u) : (qt = l, | ||||
| +	            return l = qt, n.substr(qt, 2) === dt ? (u = dt, qt += 2) : (u = null, 0 === Wt && e(pt)), | ||||
| +	            null !== u ? (n.length > qt ? (t = n.charAt(qt), qt++) : (t = null, 0 === Wt && e(vt)), | ||||
| +	            null !== t ? (Lt = l, u = wt(t), null === u ? (qt = l, l = u) : l = u) : (qt = l, | ||||
|  	            l = il)) : (qt = l, l = il), l; | ||||
|  	        } | ||||
|  	        function Z() { | ||||
|  	            var l, u, t; | ||||
| -	            return l = qt, 92 === n.charCodeAt(qt) ? (u = At, qt++) : (u = null, 0 === Wt && e(Ct)), | ||||
| -	            null !== u ? (gt.test(n.charAt(qt)) ? (t = n.charAt(qt), qt++) : (t = null, 0 === Wt && e(bt)), | ||||
| -	            null !== t ? (Lt = l, u = kt(t), null === u ? (qt = l, l = u) : l = u) : (qt = l, | ||||
| +	            return l = qt, 92 === n.charCodeAt(qt) ? (u = At, qt++) : (u = null, 0 === Wt && e(Ct)), | ||||
| +	            null !== u ? (gt.test(n.charAt(qt)) ? (t = n.charAt(qt), qt++) : (t = null, 0 === Wt && e(bt)), | ||||
| +	            null !== t ? (Lt = l, u = kt(t), null === u ? (qt = l, l = u) : l = u) : (qt = l, | ||||
|  	            l = il)) : (qt = l, l = il), l; | ||||
|  	        } | ||||
|  	        function _() { | ||||
|  	            var l, u, t, r; | ||||
| -	            if (l = qt, n.substr(qt, 2) === Tt ? (u = Tt, qt += 2) : (u = null, 0 === Wt && e(xt)), | ||||
| +	            if (l = qt, n.substr(qt, 2) === Tt ? (u = Tt, qt += 2) : (u = null, 0 === Wt && e(xt)), | ||||
|  	            null !== u) { | ||||
| -	                if (t = [], yt.test(n.charAt(qt)) ? (r = n.charAt(qt), qt++) : (r = null, 0 === Wt && e(mt)), | ||||
| -	                null !== r) for (;null !== r; ) t.push(r), yt.test(n.charAt(qt)) ? (r = n.charAt(qt), | ||||
| +	                if (t = [], yt.test(n.charAt(qt)) ? (r = n.charAt(qt), qt++) : (r = null, 0 === Wt && e(mt)), | ||||
| +	                null !== r) for (;null !== r; ) t.push(r), yt.test(n.charAt(qt)) ? (r = n.charAt(qt), | ||||
|  	                qt++) : (r = null, 0 === Wt && e(mt)); else t = il; | ||||
| -	                null !== t ? (Lt = l, u = Rt(t), null === u ? (qt = l, l = u) : l = u) : (qt = l, | ||||
| +	                null !== t ? (Lt = l, u = Rt(t), null === u ? (qt = l, l = u) : l = u) : (qt = l, | ||||
|  	                l = il); | ||||
|  	            } else qt = l, l = il; | ||||
|  	            return l; | ||||
|  	        } | ||||
|  	        function nl() { | ||||
|  	            var l, u, t, r; | ||||
| -	            if (l = qt, n.substr(qt, 2) === Ft ? (u = Ft, qt += 2) : (u = null, 0 === Wt && e(Qt)), | ||||
| +	            if (l = qt, n.substr(qt, 2) === Ft ? (u = Ft, qt += 2) : (u = null, 0 === Wt && e(Qt)), | ||||
|  	            null !== u) { | ||||
| -	                if (t = [], St.test(n.charAt(qt)) ? (r = n.charAt(qt), qt++) : (r = null, 0 === Wt && e(Ut)), | ||||
| -	                null !== r) for (;null !== r; ) t.push(r), St.test(n.charAt(qt)) ? (r = n.charAt(qt), | ||||
| +	                if (t = [], St.test(n.charAt(qt)) ? (r = n.charAt(qt), qt++) : (r = null, 0 === Wt && e(Ut)), | ||||
| +	                null !== r) for (;null !== r; ) t.push(r), St.test(n.charAt(qt)) ? (r = n.charAt(qt), | ||||
|  	                qt++) : (r = null, 0 === Wt && e(Ut)); else t = il; | ||||
| -	                null !== t ? (Lt = l, u = Et(t), null === u ? (qt = l, l = u) : l = u) : (qt = l, | ||||
| +	                null !== t ? (Lt = l, u = Et(t), null === u ? (qt = l, l = u) : l = u) : (qt = l, | ||||
|  	                l = il); | ||||
|  	            } else qt = l, l = il; | ||||
|  	            return l; | ||||
|  	        } | ||||
|  	        function ll() { | ||||
|  	            var l, u, t, r; | ||||
| -	            if (l = qt, n.substr(qt, 2) === Gt ? (u = Gt, qt += 2) : (u = null, 0 === Wt && e(Bt)), | ||||
| +	            if (l = qt, n.substr(qt, 2) === Gt ? (u = Gt, qt += 2) : (u = null, 0 === Wt && e(Bt)), | ||||
|  	            null !== u) { | ||||
| -	                if (t = [], St.test(n.charAt(qt)) ? (r = n.charAt(qt), qt++) : (r = null, 0 === Wt && e(Ut)), | ||||
| -	                null !== r) for (;null !== r; ) t.push(r), St.test(n.charAt(qt)) ? (r = n.charAt(qt), | ||||
| +	                if (t = [], St.test(n.charAt(qt)) ? (r = n.charAt(qt), qt++) : (r = null, 0 === Wt && e(Ut)), | ||||
| +	                null !== r) for (;null !== r; ) t.push(r), St.test(n.charAt(qt)) ? (r = n.charAt(qt), | ||||
|  	                qt++) : (r = null, 0 === Wt && e(Ut)); else t = il; | ||||
| -	                null !== t ? (Lt = l, u = jt(t), null === u ? (qt = l, l = u) : l = u) : (qt = l, | ||||
| +	                null !== t ? (Lt = l, u = jt(t), null === u ? (qt = l, l = u) : l = u) : (qt = l, | ||||
|  	                l = il); | ||||
|  	            } else qt = l, l = il; | ||||
|  	            return l; | ||||
|  	        } | ||||
|  	        function ul() { | ||||
|  	            var l, u; | ||||
| -	            return l = qt, n.substr(qt, 2) === Tt ? (u = Tt, qt += 2) : (u = null, 0 === Wt && e(xt)), | ||||
| +	            return l = qt, n.substr(qt, 2) === Tt ? (u = Tt, qt += 2) : (u = null, 0 === Wt && e(xt)), | ||||
|  	            null !== u && (Lt = l, u = $t()), null === u ? (qt = l, l = u) : l = u, l; | ||||
|  	        } | ||||
|  	        function tl() { | ||||
|  	            var l, u, t; | ||||
| -	            return l = qt, 92 === n.charCodeAt(qt) ? (u = At, qt++) : (u = null, 0 === Wt && e(Ct)), | ||||
| -	            null !== u ? (n.length > qt ? (t = n.charAt(qt), qt++) : (t = null, 0 === Wt && e(vt)), | ||||
| -	            null !== t ? (Lt = l, u = bu(t), null === u ? (qt = l, l = u) : l = u) : (qt = l, | ||||
| +	            return l = qt, 92 === n.charCodeAt(qt) ? (u = At, qt++) : (u = null, 0 === Wt && e(Ct)), | ||||
| +	            null !== u ? (n.length > qt ? (t = n.charAt(qt), qt++) : (t = null, 0 === Wt && e(vt)), | ||||
| +	            null !== t ? (Lt = l, u = bu(t), null === u ? (qt = l, l = u) : l = u) : (qt = l, | ||||
|  	            l = il)) : (qt = l, l = il), l; | ||||
|  	        } | ||||
|  	        var rl, el = arguments.length > 1 ? arguments[1] : {}, ol = { | ||||
| @@ -7234,7 +7234,7 @@ return /******/ (function(modules) { // webpackBootstrap | ||||
|  	var Util = __webpack_require__(3) | ||||
|  	var Random = __webpack_require__(5) | ||||
|  	    /* | ||||
| - | ||||
| + | ||||
|  	    */ | ||||
|  	var Handler = { | ||||
|  	    extend: Util.extend | ||||
| @@ -7481,7 +7481,7 @@ return /******/ (function(modules) { // webpackBootstrap | ||||
|  	        return Random.integer(min, max) | ||||
|  	    }, | ||||
|  	    /* | ||||
| - | ||||
| + | ||||
|  	    */ | ||||
|  	    charset: function(node, result, cache) { | ||||
|  	        // node.invert | ||||
| @@ -7642,11 +7642,11 @@ return /******/ (function(modules) { // webpackBootstrap | ||||
|  	    ## valid(template, data) | ||||
|  | ||||
|  	    校验真实数据 data 是否与数据模板 template 匹配。 | ||||
| - | ||||
| + | ||||
|  	    实现思路: | ||||
|  	    1. 解析规则。 | ||||
|  	        先把数据模板 template 解析为更方便机器解析的 JSON-Schame | ||||
| -	        name               属性名 | ||||
| +	        name               属性名 | ||||
|  	        type               属性值类型 | ||||
|  	        template           属性值模板 | ||||
|  	        properties         对象属性数组 | ||||
| @@ -7655,7 +7655,7 @@ return /******/ (function(modules) { // webpackBootstrap | ||||
|  	    2. 递归验证规则。 | ||||
|  	        然后用 JSON-Schema 校验真实数据,校验项包括属性名、值类型、值、值生成规则。 | ||||
|  | ||||
| -	    提示信息 | ||||
| +	    提示信息 | ||||
|  	    https://github.com/fge/json-schema-validator/blob/master/src/main/resources/com/github/fge/jsonschema/validator/validation.properties | ||||
|  	    [JSON-Schama validator](http://json-schema-validator.herokuapp.com/) | ||||
|  	    [Regexp Demo](http://demos.forbeslindesay.co.uk/regexp/) | ||||
| @@ -7693,8 +7693,8 @@ return /******/ (function(modules) { // webpackBootstrap | ||||
|  	                    +step | ||||
|  	                    整数部分 | ||||
|  	                    小数部分 | ||||
| -	                boolean | ||||
| -	                string | ||||
| +	                boolean | ||||
| +	                string | ||||
|  	                    min-max | ||||
|  	                    count | ||||
|  	    ## properties | ||||
| @@ -7949,9 +7949,9 @@ return /******/ (function(modules) { // webpackBootstrap | ||||
|  | ||||
|  	/* | ||||
|  	    完善、友好的提示信息 | ||||
| - | ||||
| + | ||||
|  	    Equal, not equal to, greater than, less than, greater than or equal to, less than or equal to | ||||
| -	    路径 验证类型 描述 | ||||
| +	    路径 验证类型 描述 | ||||
|  | ||||
|  	    Expect path.name is less than or equal to expected, but path.name is actual. | ||||
|  | ||||
| @@ -8264,7 +8264,7 @@ return /******/ (function(modules) { // webpackBootstrap | ||||
|  	Util.extend(MockXMLHttpRequest.prototype, { | ||||
|  	    // https://xhr.spec.whatwg.org/#the-open()-method | ||||
|  	    // Sets the request method, request URL, and synchronous flag. | ||||
| -	    open: function(method, url, async, username, password) { | ||||
| +	    open: function(method, url, async = true, username, password) { | ||||
|  	        var that = this | ||||
|  | ||||
|  	        Util.extend(this.custom, { | ||||
| @@ -8310,6 +8310,8 @@ return /******/ (function(modules) { // webpackBootstrap | ||||
|  	            var xhr = createNativeXMLHttpRequest() | ||||
|  	            this.custom.xhr = xhr | ||||
|  | ||||
| +                MockXMLHttpRequest.prototype.upload = xhr.upload | ||||
| + | ||||
|  	            // 初始化所有事件,用于监听原生 XHR 对象的事件 | ||||
|  	            for (var i = 0; i < XHR_EVENTS.length; i++) { | ||||
|  	                xhr.addEventListener(XHR_EVENTS[i], handle) | ||||
| @@ -8360,6 +8362,7 @@ return /******/ (function(modules) { // webpackBootstrap | ||||
|  | ||||
|  	        // 原生 XHR | ||||
|  	        if (!this.match) { | ||||
| +                this.custom.xhr.responseType = this.responseType || '' | ||||
|  	            this.custom.xhr.send(data) | ||||
|  	            return | ||||
|  	        } | ||||
							
								
								
									
										15888
									
								
								pnpm-lock.yaml
									
									
									
										generated
									
									
									
								
							
							
						
						| Before Width: | Height: | Size: 17 KiB | 
							
								
								
									
										1
									
								
								public/favicon.svg
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1 @@ | ||||
| <svg viewBox="0 0 160 160" xmlns="http://www.w3.org/2000/svg"><path d="M81.28 55.9c-.1-11.67-2.93-22.55-9.37-32.38-1-1.5-2.14-2.86-2.5-4.71a8.1 8.1 0 014-8.61 7.89 7.89 0 019.3 1.23 35.999 35.999 0 015.9 8.83 75.18 75.18 0 018.44 28.58 83.211 83.211 0 01-5.23 36.74 102.983 102.983 0 01-3 7.28 1.2 1.2 0 000 1.41c9.58 13.3 21.76 23 37.85 27.24a54.37 54.37 0 0019.68 1.57 7.72 7.72 0 018.36 6.9 7.903 7.903 0 01-6.7 9 64.744 64.744 0 01-23-1.33 77.68 77.68 0 01-36.93-19.88 93.628 93.628 0 01-11.91-13.71 2.18 2.18 0 00-2.3-1.06 72.744 72.744 0 00-27.38 7.55c-11.6 6-20.67 14.58-26.4 26.45a10.134 10.134 0 01-3.7 4.7 8 8 0 01-9.19-.7 7.86 7.86 0 01-2.36-9.28 60.324 60.324 0 018.72-14.52c12.2-15.43 28.21-24.59 47.32-28.57A85.085 85.085 0 0173.07 87c.524.015 1-.307 1.18-.8a76.06 76.06 0 006.53-22.3c.351-2.652.518-5.325.5-8z" fill="#1890ff"/><path d="M136.26 108.34a44.742 44.742 0 01-11.13-2.87 46.108 46.108 0 01-19.66-13.76 8 8 0 015.72-13.22 7.93 7.93 0 016.54 2.93 33.27 33.27 0 0018.87 10.75c1.546.155 3.058.553 4.48 1.18a8.08 8.08 0 013.84 9.21c-.92 3.52-4.13 5.81-8.66 5.78zm-80.6-75.02a7.61 7.61 0 016.64 5 49.139 49.139 0 013.64 17 46.33 46.33 0 01-2.46 17.28c-2 5.77-8.24 7.79-12.89 4.15a8.1 8.1 0 01-2.39-9 31.679 31.679 0 001.68-12.36 35.77 35.77 0 00-2.43-11c-2.1-5.45 1.75-11.07 8.21-11.07zm22.26 93.25a8 8 0 01-6.68 7.86 32.88 32.88 0 00-19.7 12.19 8.13 8.13 0 01-11.21 1.62 8 8 0 01-1.41-11.58A51.043 51.043 0 0154 123.81a45.842 45.842 0 0114-5.1c5.35-1.04 9.91 2.56 9.92 7.86z" fill="#1890ff"/></svg> | ||||
| After Width: | Height: | Size: 1.5 KiB | 
							
								
								
									
										
											BIN
										
									
								
								public/logo.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 23 KiB | 
| @@ -1,91 +0,0 @@ | ||||
| .app-loading { | ||||
|   position: fixed; | ||||
|   left: 0; | ||||
|   top: 0; | ||||
|   z-index: -1; | ||||
|   display: flex; | ||||
|   flex-direction: column; | ||||
|   justify-content: center; | ||||
|   align-items: center; | ||||
|   width: 100%; | ||||
|   height: 100%; | ||||
| 	background-color:#f5f7f9; | ||||
| } | ||||
| .app-loading_logo { | ||||
|   width: 128px; | ||||
|   height: 128px; | ||||
| } | ||||
| .app-loading__dot-wrapper { | ||||
|   width: 56px; | ||||
|   height: 56px; | ||||
|   margin: 36px 0; | ||||
| } | ||||
| .app-loading__dot { | ||||
|   position: relative; | ||||
|   height: 100%; | ||||
|   transform: rotate(45deg); | ||||
|   animation-name: loadingRotate; | ||||
|   animation-duration: 1.2s; | ||||
|   animation-iteration-count: infinite; | ||||
|   animation-timing-function: linear; | ||||
| } | ||||
| @keyframes loadingRotate { | ||||
|   to { | ||||
|     -webkit-transform: rotate(405deg); | ||||
|     transform: rotate(405deg); | ||||
|   } | ||||
| } | ||||
| @-webkit-keyframes loadingRotate { | ||||
|   to { | ||||
|     -webkit-transform: rotate(405deg); | ||||
|     transform: rotate(405deg); | ||||
|   } | ||||
| } | ||||
| .app-loading__dot > i { | ||||
|   position: absolute; | ||||
|   display: block; | ||||
|   width: 18px; | ||||
|   height: 18px; | ||||
|   background: #1890ff; | ||||
|   border-radius: 50%; | ||||
|   -webkit-transform: scale(0.75); | ||||
|   transform: scale(0.75); | ||||
|   transform-origin: 50% 50%; | ||||
|   opacity: 0.3; | ||||
|   animation: spinOpacity 1s infinite linear alternate; | ||||
| } | ||||
| @keyframes spinOpacity { | ||||
|   to { | ||||
|     opacity: 1; | ||||
|   } | ||||
| } | ||||
| @-webkit-keyframes spinOpacity { | ||||
|   to { | ||||
|     opacity: 1; | ||||
|   } | ||||
| } | ||||
| .delay-400 { | ||||
|   animation-delay: 0.4s !important; | ||||
| } | ||||
| .delay-800 { | ||||
|   animation-delay: 0.8s !important; | ||||
| } | ||||
| .delay-1200 { | ||||
|   animation-delay: 1.2s !important; | ||||
| } | ||||
| .left { | ||||
|   left: 0; | ||||
| } | ||||
| .right { | ||||
|   right: 0; | ||||
| } | ||||
| .top { | ||||
|   top: 0; | ||||
| } | ||||
| .bottom { | ||||
|   bottom: 0; | ||||
| } | ||||
| .app-loading_title { | ||||
|   font-size: 28px; | ||||
|   color: #646464; | ||||
| } | ||||
| Before Width: | Height: | Size: 11 KiB | 
							
								
								
									
										12
									
								
								scripts/logo.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,12 @@ | ||||
| import { readFile, writeFile } from 'fs/promises'; | ||||
| import themeSettings from '../src/settings/theme.json'; | ||||
|  | ||||
| async function updateFavicon(svgPath: string, color: string) { | ||||
|   const svgStr = await readFile(svgPath, 'utf-8'); | ||||
|  | ||||
|   const svgStrWithColor = svgStr.replace(/currentColor/g, color); | ||||
|  | ||||
|   await writeFile('./public/favicon.svg', svgStrWithColor); | ||||
| } | ||||
|  | ||||
| updateFavicon('./src/assets/svg-icon/logo.svg', themeSettings.themeColor); | ||||
							
								
								
									
										29
									
								
								src/App.vue
									
									
									
									
									
								
							
							
						
						| @@ -1,13 +1,26 @@ | ||||
| <template> | ||||
|   <app-provider> | ||||
|     <router-view /> | ||||
|   </app-provider> | ||||
|   <n-config-provider | ||||
|     :theme="theme.naiveTheme" | ||||
|     :theme-overrides="theme.naiveThemeOverrides" | ||||
|     :locale="zhCN" | ||||
|     :date-locale="dateZhCN" | ||||
|     class="h-full" | ||||
|   > | ||||
|     <naive-provider> | ||||
|       <router-view /> | ||||
|     </naive-provider> | ||||
|   </n-config-provider> | ||||
| </template> | ||||
|  | ||||
| <script lang="ts" setup> | ||||
| import { fetchTestMock } from '@/service'; | ||||
| import AppProvider from './AppProvider.vue'; | ||||
| <script setup lang="ts"> | ||||
| import { dateZhCN, zhCN } from 'naive-ui'; | ||||
| import { subscribeStore, useThemeStore } from '@/store'; | ||||
| import { useGlobalEvents } from '@/composables'; | ||||
|  | ||||
| fetchTestMock(); | ||||
| const theme = useThemeStore(); | ||||
|  | ||||
| subscribeStore(); | ||||
| useGlobalEvents(); | ||||
| </script> | ||||
| <style></style> | ||||
|  | ||||
| <style scoped></style> | ||||
|   | ||||
| @@ -1,33 +0,0 @@ | ||||
| <template> | ||||
|   <n-config-provider | ||||
|     class="h-full" | ||||
|     :locale="zhCN" | ||||
|     :date-locale="dateZhCN" | ||||
|     :theme="naiveTheme" | ||||
|     :theme-overrides="theme.themeOverrids" | ||||
|   > | ||||
|     <n-element class="h-full"> | ||||
|       <naive-provider> | ||||
|         <slot></slot> | ||||
|       </naive-provider> | ||||
|     </n-element> | ||||
|   </n-config-provider> | ||||
| </template> | ||||
|  | ||||
| <script lang="ts" setup> | ||||
| import { NConfigProvider, NElement, zhCN, dateZhCN } from 'naive-ui'; | ||||
| import { NaiveProvider } from '@/components'; | ||||
| import { useThemeStore } from '@/store'; | ||||
| import { useDarkMode, useGlobalEvent } from '@/composables'; | ||||
|  | ||||
| const theme = useThemeStore(); | ||||
| const { naiveTheme } = useDarkMode(); | ||||
| const { initGlobalEventListener } = useGlobalEvent(); | ||||
|  | ||||
| function init() { | ||||
|   initGlobalEventListener(); | ||||
| } | ||||
|  | ||||
| init(); | ||||
| </script> | ||||
| <style></style> | ||||
							
								
								
									
										
											BIN
										
									
								
								src/assets/fonts/aguazyuan-bold.ttf
									
									
									
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										
											BIN
										
									
								
								src/assets/fonts/aguazyuan-light.ttf
									
									
									
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										
											BIN
										
									
								
								src/assets/fonts/aguazyuan-regular.ttf
									
									
									
									
									
										Normal file
									
								
							
							
						
						| Before Width: | Height: | Size: 7.8 KiB | 
| Before Width: | Height: | Size: 11 KiB | 
							
								
								
									
										1
									
								
								src/assets/svg-icon/activity.svg
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1 @@ | ||||
| <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="round" stroke-linejoin="round"><path d="M22 12h-4l-3 9L9 3l-3 9H2"/></svg> | ||||
| After Width: | Height: | Size: 202 B | 
							
								
								
									
										1
									
								
								src/assets/svg-icon/at-sign.svg
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1 @@ | ||||
| <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="round" stroke-linejoin="round" class="prefix__prefix__feather prefix__prefix__feather-at-sign"><circle cx="12" cy="12" r="4"/><path d="M16 8v5a3 3 0 006 0v-1a10 10 0 10-3.92 7.94"/></svg> | ||||
| After Width: | Height: | Size: 315 B | 
							
								
								
									
										1
									
								
								src/assets/svg-icon/avatar.svg
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 6.3 KiB | 
							
								
								
									
										1
									
								
								src/assets/svg-icon/banner.svg
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 19 KiB | 
							
								
								
									
										1
									
								
								src/assets/svg-icon/cast.svg
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1 @@ | ||||
| <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="round" stroke-linejoin="round" class="prefix__prefix__feather prefix__prefix__feather-cast"><path d="M2 16.1A5 5 0 015.9 20M2 12.05A9 9 0 019.95 20M2 8V6a2 2 0 012-2h16a2 2 0 012 2v12a2 2 0 01-2 2h-6M2 20h.01"/></svg> | ||||
| After Width: | Height: | Size: 345 B | 
							
								
								
									
										1
									
								
								src/assets/svg-icon/chrome.svg
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1 @@ | ||||
| <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="10"/><circle cx="12" cy="12" r="4"/><path d="M21.17 8H12M3.95 6.06L8.54 14m2.34 7.94L15.46 14"/></svg> | ||||
| After Width: | Height: | Size: 288 B | 
							
								
								
									
										1
									
								
								src/assets/svg-icon/copy.svg
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1 @@ | ||||
| <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="round" stroke-linejoin="round"><rect x="9" y="9" width="13" height="13" rx="2" ry="2"/><path d="M5 15H4a2 2 0 01-2-2V4a2 2 0 012-2h9a2 2 0 012 2v1"/></svg> | ||||
| After Width: | Height: | Size: 283 B | 
							
								
								
									
										1
									
								
								src/assets/svg-icon/custom-icon.svg
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1 @@ | ||||
| <svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" viewBox="0 0 24 24"><path fill="currentColor" d="M19 10c0 1.38-2.12 2.5-3.5 2.5s-2.75-1.12-2.75-2.5h-1.5c0 1.38-1.37 2.5-2.75 2.5S5 11.38 5 10h-.75c-.16.64-.25 1.31-.25 2a8 8 0 008 8 8 8 0 008-8c0-.69-.09-1.36-.25-2H19m-7-6C9.04 4 6.45 5.61 5.07 8h13.86C17.55 5.61 14.96 4 12 4m10 8a10 10 0 01-10 10A10 10 0 012 12 10 10 0 0112 2a10 10 0 0110 10m-10 5.23c-1.75 0-3.29-.73-4.19-1.81L9.23 14c.45.72 1.52 1.23 2.77 1.23s2.32-.51 2.77-1.23l1.42 1.42c-.9 1.08-2.44 1.81-4.19 1.81z"/></svg> | ||||
| After Width: | Height: | Size: 544 B | 
							
								
								
									
										1
									
								
								src/assets/svg-icon/empty-data.svg
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 77 KiB | 
							
								
								
									
										1
									
								
								src/assets/svg-icon/heart.svg
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1 @@ | ||||
| <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="round" stroke-linejoin="round"><path d="M20.84 4.61a5.5 5.5 0 00-7.78 0L12 5.67l-1.06-1.06a5.5 5.5 0 00-7.78 7.78l1.06 1.06L12 21.23l7.78-7.78 1.06-1.06a5.5 5.5 0 000-7.78z"/></svg> | ||||
| After Width: | Height: | Size: 309 B | 
							
								
								
									
										1
									
								
								src/assets/svg-icon/logo-fill.svg
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1 @@ | ||||
| <svg xmlns="http://www.w3.org/2000/svg"><path d="M0 0h160v160H0V0z" fill="currentColor"/><path d="M94.322 51.888A69.12 69.12 0 0187.806 80.9a1.732 1.732 0 00.191 2.014c6.124 8.338 13.677 14.894 23.356 18.821a46.564 46.564 0 0017.273 3.414 29.101 29.101 0 003.364-.252 6.245 6.245 0 017.051 5.156 6.112 6.112 0 01-5.187 7.19 50.758 50.758 0 01-18.19-1.007c-15.964-3.686-28.2-12.84-37.709-25.88a2.165 2.165 0 00-2.246-1.098c-14.1 1.38-26.357 6.475-35.754 17.331a38.721 38.721 0 00-6.275 9.808 6.255 6.255 0 01-8.229 3.444 6.184 6.184 0 01-3.293-8.258 49.662 49.662 0 019.699-14.722c10.636-11.52 23.97-17.663 39.37-19.677a14.06 14.06 0 012.86-.342c1.622.14 2.197-.735 2.75-2.014a54.752 54.752 0 004.865-23.463 44.302 44.302 0 00-8.057-25.175 6.152 6.152 0 01-.655-6.506 6.043 6.043 0 015.318-3.564 6.386 6.386 0 015.7 3.02 53.98 53.98 0 017.222 14.38 59.734 59.734 0 013.092 18.368z" fill="#fff"/><path d="M47.257 119.468a6.04 6.04 0 011.36-3.907 38.165 38.165 0 0122.66-14.098 6.124 6.124 0 016.699 2.487 6.223 6.223 0 01-3.868 9.698 26.276 26.276 0 00-15.823 9.838 6.245 6.245 0 01-11.028-4.028v.01zm77.935-26.01a34.908 34.908 0 01-9.89-2.498 35.717 35.717 0 01-14.756-10.523 6.233 6.233 0 012.861-10 5.832 5.832 0 016.486 1.742 26.986 26.986 0 0016.628 8.912 6.042 6.042 0 015.036 5.58 6.253 6.253 0 01-4.32 6.504 6.588 6.588 0 01-2.045.282zM69.817 53.65a33.69 33.69 0 01-2.286 12.607 6.255 6.255 0 01-11.018 1.007 6.132 6.132 0 01-.655-5.438 26.178 26.178 0 00-.534-18.377 6.256 6.256 0 0111.572-4.753 40.515 40.515 0 012.921 14.954z" fill="#fff"/></svg> | ||||
| After Width: | Height: | Size: 1.5 KiB | 
							
								
								
									
										1
									
								
								src/assets/svg-icon/logo.svg
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1 @@ | ||||
| <svg viewBox="0 0 160 160" xmlns="http://www.w3.org/2000/svg"><path d="M81.28 55.9c-.1-11.67-2.93-22.55-9.37-32.38-1-1.5-2.14-2.86-2.5-4.71a8.1 8.1 0 014-8.61 7.89 7.89 0 019.3 1.23 35.999 35.999 0 015.9 8.83 75.18 75.18 0 018.44 28.58 83.211 83.211 0 01-5.23 36.74 102.983 102.983 0 01-3 7.28 1.2 1.2 0 000 1.41c9.58 13.3 21.76 23 37.85 27.24a54.37 54.37 0 0019.68 1.57 7.72 7.72 0 018.36 6.9 7.903 7.903 0 01-6.7 9 64.744 64.744 0 01-23-1.33 77.68 77.68 0 01-36.93-19.88 93.628 93.628 0 01-11.91-13.71 2.18 2.18 0 00-2.3-1.06 72.744 72.744 0 00-27.38 7.55c-11.6 6-20.67 14.58-26.4 26.45a10.134 10.134 0 01-3.7 4.7 8 8 0 01-9.19-.7 7.86 7.86 0 01-2.36-9.28 60.324 60.324 0 018.72-14.52c12.2-15.43 28.21-24.59 47.32-28.57A85.085 85.085 0 0173.07 87c.524.015 1-.307 1.18-.8a76.06 76.06 0 006.53-22.3c.351-2.652.518-5.325.5-8z" fill="currentColor"/><path d="M136.26 108.34a44.742 44.742 0 01-11.13-2.87 46.108 46.108 0 01-19.66-13.76 8 8 0 015.72-13.22 7.93 7.93 0 016.54 2.93 33.27 33.27 0 0018.87 10.75c1.546.155 3.058.553 4.48 1.18a8.08 8.08 0 013.84 9.21c-.92 3.52-4.13 5.81-8.66 5.78zm-80.6-75.02a7.61 7.61 0 016.64 5 49.139 49.139 0 013.64 17 46.33 46.33 0 01-2.46 17.28c-2 5.77-8.24 7.79-12.89 4.15a8.1 8.1 0 01-2.39-9 31.679 31.679 0 001.68-12.36 35.77 35.77 0 00-2.43-11c-2.1-5.45 1.75-11.07 8.21-11.07zm22.26 93.25a8 8 0 01-6.68 7.86 32.88 32.88 0 00-19.7 12.19 8.13 8.13 0 01-11.21 1.62 8 8 0 01-1.41-11.58A51.043 51.043 0 0154 123.81a45.842 45.842 0 0114-5.1c5.35-1.04 9.91 2.56 9.92 7.86z" fill="currentColor"/></svg> | ||||
| After Width: | Height: | Size: 1.5 KiB | 
							
								
								
									
										1
									
								
								src/assets/svg-icon/network-error.svg
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 19 KiB | 
							
								
								
									
										1
									
								
								src/assets/svg-icon/no-icon.svg
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 8.1 KiB | 
							
								
								
									
										1
									
								
								src/assets/svg-icon/no-permission.svg
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 50 KiB | 
							
								
								
									
										1
									
								
								src/assets/svg-icon/not-found.svg
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 33 KiB | 
							
								
								
									
										1
									
								
								src/assets/svg-icon/service-error.svg
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 74 KiB | 
							
								
								
									
										1
									
								
								src/assets/svg-icon/wind.svg
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1 @@ | ||||
| <svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="round" stroke-linejoin="round" class="feather feather-wind"><path d="M9.59 4.59A2 2 0 1 1 11 8H2m10.59 11.41A2 2 0 1 0 14 16H2m15.73-8.27A2.5 2.5 0 1 1 19.5 12H2"></path></svg> | ||||
| After Width: | Height: | Size: 327 B | 
| Before Width: | Height: | Size: 8.6 KiB | 
| @@ -1,26 +0,0 @@ | ||||
| <?xml version="1.0" encoding="utf-8"?> | ||||
| <!-- Generator: Adobe Illustrator 25.4.1, SVG Export Plug-In . SVG Version: 6.00 Build 0)  --> | ||||
| <svg version="1.1" id="图层_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" | ||||
| 	 viewBox="0 0 158.9 158.9" style="enable-background:new 0 0 158.9 158.9;" xml:space="preserve"> | ||||
| <style type="text/css"> | ||||
| 	.st0{fill:none;} | ||||
| 	.st1{fill:#409EFF;} | ||||
| </style> | ||||
| <path class="st0" d="M0,158.9C0,106.3,0,53.7,0,1.1C0,0.2,0.2,0,1.1,0c52.2,0,104.5,0,156.7,0c0.9,0,1.1,0.2,1.1,1.1 | ||||
| 	c0,52.2,0,104.5,0,156.7c0,0.9-0.2,1.1-1.1,1.1C105.2,158.8,52.6,158.8,0,158.9z"/> | ||||
| <path class="st1" d="M81.3,55.9c-0.1-11.7-2.9-22.5-9.4-32.4c-1-1.5-2.1-2.9-2.5-4.7c-0.7-3.4,0.9-6.9,4-8.6c3-1.7,6.8-1.2,9.3,1.2 | ||||
| 	c2.4,2.6,4.4,5.6,5.9,8.8c4.7,8.9,7.6,18.6,8.4,28.6c1,12.5-0.7,25-5.2,36.7c-0.9,2.5-1.9,4.9-3,7.3c-0.3,0.4-0.3,1,0,1.4 | ||||
| 	c9.6,13.3,21.8,23,37.8,27.2c6.4,1.7,13.1,2.3,19.7,1.6c4.2-0.4,7.9,2.7,8.4,6.9c0.7,4.3-2.3,8.3-6.6,9c0,0,0,0-0.1,0 | ||||
| 	c-7.7,0.9-15.5,0.5-23-1.3c-13.9-3.1-26.7-10-36.9-19.9c-4.4-4.2-8.4-8.8-11.9-13.7c-0.5-0.8-1.4-1.2-2.3-1.1 | ||||
| 	c-9.5,0.7-18.8,3.3-27.4,7.6c-11.6,6-20.7,14.6-26.4,26.4c-0.7,1.9-2,3.5-3.7,4.7c-2.9,1.7-6.6,1.5-9.2-0.7c-2.8-2.2-3.8-6-2.4-9.3 | ||||
| 	c2.2-5.2,5.1-10.1,8.7-14.5c12.2-15.4,28.2-24.6,47.3-28.6c4-0.8,8.1-1.4,12.2-1.6c0.5,0,1-0.3,1.2-0.8c3.3-7.1,5.5-14.6,6.5-22.3 | ||||
| 	C81.1,61.2,81.3,58.6,81.3,55.9z"/> | ||||
| <path class="st1" d="M136.3,108.3c-3.8-0.5-7.6-1.4-11.1-2.9c-7.7-2.8-14.4-7.5-19.7-13.8c-2.9-3.3-2.5-8.4,0.8-11.3 | ||||
| 	c1.4-1.2,3.1-1.9,4.9-1.9c2.5-0.1,5,1,6.5,2.9c4.9,5.6,11.6,9.4,18.9,10.8c1.5,0.2,3.1,0.6,4.5,1.2c3.2,1.8,4.8,5.6,3.8,9.2 | ||||
| 	C144,106.1,140.8,108.4,136.3,108.3z"/> | ||||
| <path class="st1" d="M55.7,33.3c3,0.2,5.6,2.2,6.6,5c2.2,5.4,3.4,11.2,3.6,17c0.3,5.9-0.6,11.7-2.5,17.3c-2,5.8-8.2,7.8-12.9,4.2 | ||||
| 	c-2.6-2.2-3.6-5.8-2.4-9c1.4-4,1.9-8.2,1.7-12.4c-0.2-3.8-1-7.5-2.4-11C45.3,38.9,49.2,33.3,55.7,33.3z"/> | ||||
| <path class="st1" d="M77.9,126.6c0,3.9-2.8,7.2-6.7,7.9c-7.8,1.5-14.8,5.9-19.7,12.2c-2.7,3.5-7.6,4.2-11.2,1.6 | ||||
| 	c-3.6-2.6-4.3-7.6-1.7-11.2c0.1-0.1,0.2-0.3,0.3-0.4c4.1-5.2,9.3-9.6,15.1-12.8c4.4-2.5,9.1-4.2,14-5.1 | ||||
| 	C73.3,117.7,77.9,121.3,77.9,126.6z"/> | ||||
| </svg> | ||||
| Before Width: | Height: | Size: 2.1 KiB | 
| @@ -6,19 +6,15 @@ | ||||
|         <n-spin :show="true" :size="loadingSize" /> | ||||
|       </div> | ||||
|       <div v-show="isEmpty" class="absolute-center"> | ||||
|         <div class="relative" :class="emptyNetworkClass"> | ||||
|           <svg-empty-data class="text-primary" /> | ||||
|           <p class="absolute-lb w-full text-center">{{ emptyDesc }}</p> | ||||
|         <div class="relative"> | ||||
|           <icon-local-empty-data :class="iconClass" /> | ||||
|           <p class="absolute-lb w-full text-center" :class="descClass">{{ emptyDesc }}</p> | ||||
|         </div> | ||||
|       </div> | ||||
|       <div v-show="!network" class="absolute-center"> | ||||
|         <div | ||||
|           class="relative" | ||||
|           :class="[{ 'cursor-pointer': showNetworkReload }, emptyNetworkClass]" | ||||
|           @click="handleReload" | ||||
|         > | ||||
|           <svg-network-error class="text-primary" /> | ||||
|           <p class="absolute-lb w-full text-center">{{ networkErrorDesc }}</p> | ||||
|         <div class="relative" :class="{ 'cursor-pointer': showNetworkReload }" @click="handleReload"> | ||||
|           <icon-local-network-error :class="iconClass" /> | ||||
|           <p class="absolute-lb w-full text-center" :class="descClass">{{ networkErrorDesc }}</p> | ||||
|         </div> | ||||
|       </div> | ||||
|     </div> | ||||
| @@ -26,11 +22,11 @@ | ||||
| </template> | ||||
| 
 | ||||
| <script setup lang="ts"> | ||||
| import { computed, watch, nextTick } from 'vue'; | ||||
| import { NSpin } from 'naive-ui'; | ||||
| import { computed, nextTick, onUnmounted, watch } from 'vue'; | ||||
| import { NETWORK_ERROR_MSG } from '@/config'; | ||||
| import { useBoolean } from '@/hooks'; | ||||
| import { SvgEmptyData, SvgNetworkError } from '../../svg'; | ||||
| 
 | ||||
| defineOptions({ name: 'LoadingEmptyWrapper' }); | ||||
| 
 | ||||
| interface Props { | ||||
|   /** 是否加载 */ | ||||
| @@ -43,8 +39,10 @@ interface Props { | ||||
|   placeholderClass?: string; | ||||
|   /** 空数据描述文本 */ | ||||
|   emptyDesc?: string; | ||||
|   /** 空数据和网络异常占位class */ | ||||
|   emptyNetworkClass?: string; | ||||
|   /** 图标的class */ | ||||
|   iconClass?: string; | ||||
|   /** 描述文本的class */ | ||||
|   descClass?: string; | ||||
|   /** 显示网络异常的重试点击按钮 */ | ||||
|   showNetworkReload?: boolean; | ||||
| } | ||||
| @@ -53,9 +51,10 @@ const props = withDefaults(defineProps<Props>(), { | ||||
|   loading: false, | ||||
|   empty: false, | ||||
|   loadingSize: 'medium', | ||||
|   placeholderClass: 'bg-white', | ||||
|   placeholderClass: 'bg-white dark:bg-dark transition-background-color duration-300 ease-in-out', | ||||
|   emptyDesc: '暂无数据', | ||||
|   emptyNetworkClass: 'w-320px h-320px text-16px text-[#666]', | ||||
|   iconClass: 'text-320px text-primary', | ||||
|   descClass: 'text-16px text-#666', | ||||
|   showNetworkReload: false | ||||
| }); | ||||
| 
 | ||||
| @@ -80,7 +79,7 @@ function handleReload() { | ||||
|   }); | ||||
| } | ||||
| 
 | ||||
| watch( | ||||
| const stopHandle = watch( | ||||
|   () => props.loading, | ||||
|   newValue => { | ||||
|     // 结束加载判断一下网络状态 | ||||
| @@ -89,5 +88,10 @@ watch( | ||||
|     } | ||||
|   } | ||||
| ); | ||||
| 
 | ||||
| onUnmounted(() => { | ||||
|   stopHandle(); | ||||
| }); | ||||
| </script> | ||||
| 
 | ||||
| <style scoped></style> | ||||
							
								
								
									
										50
									
								
								src/components/business/login-agreement.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,50 @@ | ||||
| <template> | ||||
|   <div class="w-full text-14px"> | ||||
|     <n-checkbox v-model:checked="checked">我已经仔细阅读并接受</n-checkbox> | ||||
|     <n-button :text="true" type="primary" @click="handleClickProtocol">《用户协议》</n-button> | ||||
|     <n-button :text="true" type="primary" @click="handleClickPolicy">《隐私权政策》</n-button> | ||||
|   </div> | ||||
| </template> | ||||
|  | ||||
| <script setup lang="ts"> | ||||
| import { computed } from 'vue'; | ||||
|  | ||||
| defineOptions({ name: 'LoginAgreement' }); | ||||
|  | ||||
| interface Props { | ||||
|   /** 是否勾选 */ | ||||
|   value?: boolean; | ||||
| } | ||||
|  | ||||
| const props = withDefaults(defineProps<Props>(), { | ||||
|   value: true | ||||
| }); | ||||
|  | ||||
| interface Emits { | ||||
|   (e: 'update:value', value: boolean): void; | ||||
|   /** 点击协议 */ | ||||
|   (e: 'click-protocol'): void; | ||||
|   /** 点击隐私政策 */ | ||||
|   (e: 'click-policy'): void; | ||||
| } | ||||
|  | ||||
| const emit = defineEmits<Emits>(); | ||||
|  | ||||
| const checked = computed({ | ||||
|   get() { | ||||
|     return props.value; | ||||
|   }, | ||||
|   set(newValue: boolean) { | ||||
|     emit('update:value', newValue); | ||||
|   } | ||||
| }); | ||||
|  | ||||
| function handleClickProtocol() { | ||||
|   emit('click-protocol'); | ||||
| } | ||||
| function handleClickPolicy() { | ||||
|   emit('click-policy'); | ||||
| } | ||||
| </script> | ||||
|  | ||||
| <style scoped></style> | ||||
| @@ -1,611 +0,0 @@ | ||||
| <template> | ||||
|   <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 500 500"> | ||||
|     <g id="freepik--background-complete--inject-83"> | ||||
|       <rect y="382.4" width="500" height="0.25" style="fill: #ebebeb"></rect> | ||||
|       <rect x="416.78" y="398.49" width="33.12" height="0.25" style="fill: #ebebeb"></rect> | ||||
|       <rect x="322.53" y="401.21" width="8.69" height="0.25" style="fill: #ebebeb"></rect> | ||||
|       <rect x="396.59" y="389.21" width="19.19" height="0.25" style="fill: #ebebeb"></rect> | ||||
|       <rect x="52.46" y="390.89" width="43.19" height="0.25" style="fill: #ebebeb"></rect> | ||||
|       <rect x="104.56" y="390.89" width="6.33" height="0.25" style="fill: #ebebeb"></rect> | ||||
|       <rect x="131.47" y="395.11" width="93.68" height="0.25" style="fill: #ebebeb"></rect> | ||||
|       <path | ||||
|         d="M237,337.8H43.91a5.71,5.71,0,0,1-5.7-5.71V60.66A5.71,5.71,0,0,1,43.91,55H237a5.71,5.71,0,0,1,5.71,5.71V332.09A5.71,5.71,0,0,1,237,337.8ZM43.91,55.2a5.46,5.46,0,0,0-5.45,5.46V332.09a5.46,5.46,0,0,0,5.45,5.46H237a5.47,5.47,0,0,0,5.46-5.46V60.66A5.47,5.47,0,0,0,237,55.2Z" | ||||
|         style="fill: #ebebeb" | ||||
|       ></path> | ||||
|       <path | ||||
|         d="M453.31,337.8H260.21a5.72,5.72,0,0,1-5.71-5.71V60.66A5.72,5.72,0,0,1,260.21,55h193.1A5.71,5.71,0,0,1,459,60.66V332.09A5.71,5.71,0,0,1,453.31,337.8ZM260.21,55.2a5.47,5.47,0,0,0-5.46,5.46V332.09a5.47,5.47,0,0,0,5.46,5.46h193.1a5.47,5.47,0,0,0,5.46-5.46V60.66a5.47,5.47,0,0,0-5.46-5.46Z" | ||||
|         style="fill: #ebebeb" | ||||
|       ></path> | ||||
|       <rect | ||||
|         x="301.09" | ||||
|         y="78.79" | ||||
|         width="108.81" | ||||
|         height="196.62" | ||||
|         transform="translate(710.99 354.2) rotate(180)" | ||||
|         style="fill: #e6e6e6" | ||||
|       ></rect> | ||||
|       <rect | ||||
|         x="296.07" | ||||
|         y="78.79" | ||||
|         width="111.48" | ||||
|         height="196.62" | ||||
|         transform="translate(703.63 354.2) rotate(180)" | ||||
|         style="fill: #f0f0f0" | ||||
|       ></rect> | ||||
|       <rect | ||||
|         x="301.09" | ||||
|         y="275.41" | ||||
|         width="108.81" | ||||
|         height="4.66" | ||||
|         transform="translate(710.99 555.48) rotate(180)" | ||||
|         style="fill: #e6e6e6" | ||||
|       ></rect> | ||||
|       <rect | ||||
|         x="294.26" | ||||
|         y="275.41" | ||||
|         width="111.48" | ||||
|         height="4.66" | ||||
|         transform="translate(700.01 555.48) rotate(180)" | ||||
|         style="fill: #f0f0f0" | ||||
|       ></rect> | ||||
|       <rect | ||||
|         x="260.53" | ||||
|         y="128.39" | ||||
|         width="182.56" | ||||
|         height="97.42" | ||||
|         transform="translate(528.91 -174.71) rotate(90)" | ||||
|         style="fill: #fafafa" | ||||
|       ></rect> | ||||
|       <polygon | ||||
|         points="330.66 268.38 358.08 85.82 377.56 85.82 350.13 268.38 330.66 268.38" | ||||
|         style="fill: #fff" | ||||
|       ></polygon> | ||||
|       <polygon | ||||
|         points="333.75 268.38 361.18 85.82 380.65 85.82 353.22 268.38 333.75 268.38" | ||||
|         style="fill: #fff" | ||||
|       ></polygon> | ||||
|       <polygon | ||||
|         points="354.31 268.38 381.74 85.82 389.33 85.82 361.91 268.38 354.31 268.38" | ||||
|         style="fill: #fff" | ||||
|       ></polygon> | ||||
|       <rect | ||||
|         x="212.27" | ||||
|         y="176.65" | ||||
|         width="182.56" | ||||
|         height="0.89" | ||||
|         transform="translate(480.65 -126.45) rotate(90)" | ||||
|         style="fill: #e6e6e6" | ||||
|       ></rect> | ||||
|       <polygon | ||||
|         points="294.41 91.12 403.22 91.12 403.86 88.55 295.06 88.55 294.41 91.12" | ||||
|         style="fill: #ebebeb; opacity: 0.6000000000000001" | ||||
|       ></polygon> | ||||
|       <polygon | ||||
|         points="294.41 95.32 403.22 95.32 403.86 92.76 295.06 92.76 294.41 95.32" | ||||
|         style="fill: #ebebeb; opacity: 0.6000000000000001" | ||||
|       ></polygon> | ||||
|       <polygon | ||||
|         points="294.41 99.53 403.22 99.53 403.86 96.97 295.06 96.97 294.41 99.53" | ||||
|         style="fill: #ebebeb; opacity: 0.6000000000000001" | ||||
|       ></polygon> | ||||
|       <polygon | ||||
|         points="294.41 103.74 403.22 103.74 403.86 101.17 295.06 101.17 294.41 103.74" | ||||
|         style="fill: #ebebeb; opacity: 0.6000000000000001" | ||||
|       ></polygon> | ||||
|       <polygon | ||||
|         points="294.41 107.95 403.22 107.95 403.86 105.38 295.06 105.38 294.41 107.95" | ||||
|         style="fill: #ebebeb; opacity: 0.6000000000000001" | ||||
|       ></polygon> | ||||
|       <polygon | ||||
|         points="294.41 112.15 403.22 112.15 403.86 109.59 295.06 109.59 294.41 112.15" | ||||
|         style="fill: #ebebeb; opacity: 0.6000000000000001" | ||||
|       ></polygon> | ||||
|       <rect x="274.53" y="67" width="156.92" height="3.79" style="fill: #f0f0f0"></rect> | ||||
|       <rect x="420.36" y="63.81" width="8.25" height="242.84" style="fill: #fafafa; opacity: 0.8"></rect> | ||||
|       <rect x="420.36" y="63.81" width="2.14" height="242.84" style="fill: #f0f0f0; opacity: 0.8"></rect> | ||||
|       <rect x="412.11" y="63.81" width="8.25" height="242.84" style="fill: #fafafa; opacity: 0.8"></rect> | ||||
|       <rect x="412.11" y="63.81" width="2.14" height="242.84" style="fill: #f0f0f0; opacity: 0.8"></rect> | ||||
|       <rect x="403.86" y="63.81" width="8.25" height="242.84" style="fill: #fafafa; opacity: 0.8"></rect> | ||||
|       <rect x="292.84" y="63.81" width="8.25" height="242.84" style="fill: #fafafa; opacity: 0.8"></rect> | ||||
|       <rect x="292.84" y="63.81" width="2.14" height="242.84" style="fill: #f0f0f0; opacity: 0.8"></rect> | ||||
|       <rect x="284.6" y="63.81" width="8.25" height="242.84" style="fill: #fafafa; opacity: 0.8"></rect> | ||||
|       <rect x="284.6" y="63.81" width="2.14" height="242.84" style="fill: #f0f0f0; opacity: 0.8"></rect> | ||||
|       <rect x="276.35" y="63.81" width="8.25" height="242.84" style="fill: #fafafa; opacity: 0.8"></rect> | ||||
|       <rect | ||||
|         x="85.34" | ||||
|         y="78.79" | ||||
|         width="108.81" | ||||
|         height="196.62" | ||||
|         transform="translate(279.49 354.2) rotate(180)" | ||||
|         style="fill: #e6e6e6" | ||||
|       ></rect> | ||||
|       <rect | ||||
|         x="80.32" | ||||
|         y="78.79" | ||||
|         width="111.48" | ||||
|         height="196.62" | ||||
|         transform="translate(272.12 354.2) rotate(180)" | ||||
|         style="fill: #f0f0f0" | ||||
|       ></rect> | ||||
|       <rect | ||||
|         x="85.34" | ||||
|         y="275.41" | ||||
|         width="108.81" | ||||
|         height="4.66" | ||||
|         transform="translate(279.49 555.48) rotate(180)" | ||||
|         style="fill: #e6e6e6" | ||||
|       ></rect> | ||||
|       <rect | ||||
|         x="78.51" | ||||
|         y="275.41" | ||||
|         width="111.48" | ||||
|         height="4.66" | ||||
|         transform="translate(268.5 555.48) rotate(180)" | ||||
|         style="fill: #f0f0f0" | ||||
|       ></rect> | ||||
|       <rect | ||||
|         x="44.78" | ||||
|         y="128.39" | ||||
|         width="182.56" | ||||
|         height="97.42" | ||||
|         transform="translate(313.16 41.04) rotate(90)" | ||||
|         style="fill: #fafafa" | ||||
|       ></rect> | ||||
|       <polygon | ||||
|         points="114.91 268.38 142.33 85.82 161.81 85.82 134.38 268.38 114.91 268.38" | ||||
|         style="fill: #fff" | ||||
|       ></polygon> | ||||
|       <polygon points="118 268.38 145.42 85.82 164.9 85.82 137.47 268.38 118 268.38" style="fill: #fff"></polygon> | ||||
|       <polygon | ||||
|         points="138.56 268.38 165.99 85.82 173.58 85.82 146.16 268.38 138.56 268.38" | ||||
|         style="fill: #fff" | ||||
|       ></polygon> | ||||
|       <rect | ||||
|         x="-3.49" | ||||
|         y="176.65" | ||||
|         width="182.56" | ||||
|         height="0.89" | ||||
|         transform="translate(264.9 89.3) rotate(90)" | ||||
|         style="fill: #e6e6e6" | ||||
|       ></rect> | ||||
|       <polygon | ||||
|         points="78.66 91.12 187.47 91.12 188.11 88.55 79.31 88.55 78.66 91.12" | ||||
|         style="fill: #ebebeb; opacity: 0.6000000000000001" | ||||
|       ></polygon> | ||||
|       <polygon | ||||
|         points="78.66 95.32 187.47 95.32 188.11 92.76 79.31 92.76 78.66 95.32" | ||||
|         style="fill: #ebebeb; opacity: 0.6000000000000001" | ||||
|       ></polygon> | ||||
|       <polygon | ||||
|         points="78.66 99.53 187.47 99.53 188.11 96.97 79.31 96.97 78.66 99.53" | ||||
|         style="fill: #ebebeb; opacity: 0.6000000000000001" | ||||
|       ></polygon> | ||||
|       <polygon | ||||
|         points="78.66 103.74 187.47 103.74 188.11 101.17 79.31 101.17 78.66 103.74" | ||||
|         style="fill: #ebebeb; opacity: 0.6000000000000001" | ||||
|       ></polygon> | ||||
|       <polygon | ||||
|         points="78.66 107.95 187.47 107.95 188.11 105.38 79.31 105.38 78.66 107.95" | ||||
|         style="fill: #ebebeb; opacity: 0.6000000000000001" | ||||
|       ></polygon> | ||||
|       <polygon | ||||
|         points="78.66 112.15 187.47 112.15 188.11 109.59 79.31 109.59 78.66 112.15" | ||||
|         style="fill: #ebebeb; opacity: 0.6000000000000001" | ||||
|       ></polygon> | ||||
|       <rect x="58.78" y="67" width="156.92" height="3.79" style="fill: #f0f0f0"></rect> | ||||
|       <rect x="204.61" y="63.81" width="8.25" height="242.84" style="fill: #fafafa; opacity: 0.8"></rect> | ||||
|       <rect x="204.61" y="63.81" width="2.14" height="242.84" style="fill: #f0f0f0; opacity: 0.8"></rect> | ||||
|       <rect x="196.36" y="63.81" width="8.25" height="242.84" style="fill: #fafafa; opacity: 0.8"></rect> | ||||
|       <rect x="196.36" y="63.81" width="2.14" height="242.84" style="fill: #f0f0f0; opacity: 0.8"></rect> | ||||
|       <rect x="188.11" y="63.81" width="8.25" height="242.84" style="fill: #fafafa; opacity: 0.8"></rect> | ||||
|       <rect x="77.09" y="63.81" width="8.25" height="242.84" style="fill: #fafafa; opacity: 0.8"></rect> | ||||
|       <rect x="77.09" y="63.81" width="2.14" height="242.84" style="fill: #f0f0f0; opacity: 0.8"></rect> | ||||
|       <rect x="68.84" y="63.81" width="8.25" height="242.84" style="fill: #fafafa; opacity: 0.8"></rect> | ||||
|       <rect x="68.84" y="63.81" width="2.14" height="242.84" style="fill: #f0f0f0; opacity: 0.8"></rect> | ||||
|       <rect x="60.59" y="63.81" width="8.25" height="242.84" style="fill: #fafafa; opacity: 0.8"></rect> | ||||
|       <rect | ||||
|         x="375.76" | ||||
|         y="291.61" | ||||
|         width="16.81" | ||||
|         height="84" | ||||
|         transform="translate(768.34 667.22) rotate(180)" | ||||
|         style="fill: #f0f0f0" | ||||
|       ></rect> | ||||
|       <rect | ||||
|         x="243.98" | ||||
|         y="375.61" | ||||
|         width="142.46" | ||||
|         height="6.79" | ||||
|         transform="translate(630.42 758.01) rotate(180)" | ||||
|         style="fill: #f0f0f0" | ||||
|       ></rect> | ||||
|       <rect x="237.85" y="291.61" width="137.92" height="84" style="fill: #f5f5f5"></rect> | ||||
|       <rect x="250.41" y="300.51" width="112.79" height="27.94" style="fill: #f0f0f0"></rect> | ||||
|       <rect x="250.41" y="334.85" width="112.79" height="27.94" style="fill: #f0f0f0"></rect> | ||||
|       <path | ||||
|         d="M293.44,304.36h26.73a2.41,2.41,0,0,0,2.41-2.41h0a2.42,2.42,0,0,0-2.41-2.41H293.44A2.42,2.42,0,0,0,291,302h0A2.41,2.41,0,0,0,293.44,304.36Z" | ||||
|         style="fill: #f5f5f5" | ||||
|       ></path> | ||||
|       <path | ||||
|         d="M293.44,338.71h26.73a2.42,2.42,0,0,0,2.41-2.41h0a2.41,2.41,0,0,0-2.41-2.41H293.44A2.41,2.41,0,0,0,291,336.3h0A2.42,2.42,0,0,0,293.44,338.71Z" | ||||
|         style="fill: #f5f5f5" | ||||
|       ></path> | ||||
|       <rect | ||||
|         x="233.59" | ||||
|         y="288.33" | ||||
|         width="142.18" | ||||
|         height="3.28" | ||||
|         transform="translate(609.35 579.95) rotate(180)" | ||||
|         style="fill: #f0f0f0" | ||||
|       ></rect> | ||||
|       <rect x="375.76" y="288.33" width="21.28" height="3.28" style="fill: #e6e6e6"></rect> | ||||
|       <path | ||||
|         d="M108.34,376.83h0a7.25,7.25,0,0,1-7.23-7.23V298.84a7.25,7.25,0,0,1,7.23-7.23h0a7.24,7.24,0,0,1,7.22,7.23V369.6A7.24,7.24,0,0,1,108.34,376.83Z" | ||||
|         style="fill: #f5f5f5" | ||||
|       ></path> | ||||
|       <path | ||||
|         d="M112.47,374h0a4.9,4.9,0,0,1-4.88-4.88V299.34a4.9,4.9,0,0,1,4.88-4.88h0a4.9,4.9,0,0,1,4.89,4.88V369.1A4.9,4.9,0,0,1,112.47,374Z" | ||||
|         style="fill: #ebebeb" | ||||
|       ></path> | ||||
|       <path | ||||
|         d="M118.83,376.83h0a7.24,7.24,0,0,1-7.22-7.23V298.84a7.24,7.24,0,0,1,7.22-7.23h0a7.25,7.25,0,0,1,7.23,7.23V369.6A7.25,7.25,0,0,1,118.83,376.83Z" | ||||
|         style="fill: #f5f5f5" | ||||
|       ></path> | ||||
|       <path | ||||
|         d="M123,374h0a4.89,4.89,0,0,1-4.88-4.88V299.34a4.89,4.89,0,0,1,4.88-4.88h0a4.89,4.89,0,0,1,4.88,4.88V369.1A4.89,4.89,0,0,1,123,374Z" | ||||
|         style="fill: #ebebeb" | ||||
|       ></path> | ||||
|       <rect x="122.1" y="291.61" width="14.45" height="85.22" rx="7.23" style="fill: #f5f5f5"></rect> | ||||
|       <path | ||||
|         d="M133.47,374h0a4.89,4.89,0,0,1-4.88-4.88V299.34a4.89,4.89,0,0,1,4.88-4.88h0a4.89,4.89,0,0,1,4.88,4.88V369.1A4.89,4.89,0,0,1,133.47,374Z" | ||||
|         style="fill: #ebebeb" | ||||
|       ></path> | ||||
|       <path | ||||
|         d="M139.83,376.83h0a7.25,7.25,0,0,1-7.23-7.23V298.84a7.25,7.25,0,0,1,7.23-7.23h0a7.25,7.25,0,0,1,7.23,7.23V369.6A7.25,7.25,0,0,1,139.83,376.83Z" | ||||
|         style="fill: #f5f5f5" | ||||
|       ></path> | ||||
|       <path | ||||
|         d="M144,374h0a4.9,4.9,0,0,1-4.89-4.88V299.34a4.9,4.9,0,0,1,4.89-4.88h0a4.9,4.9,0,0,1,4.88,4.88V369.1A4.9,4.9,0,0,1,144,374Z" | ||||
|         style="fill: #ebebeb" | ||||
|       ></path> | ||||
|       <path | ||||
|         d="M150.33,376.83h0a7.25,7.25,0,0,1-7.23-7.23V298.84a7.25,7.25,0,0,1,7.23-7.23h0a7.25,7.25,0,0,1,7.23,7.23V369.6A7.25,7.25,0,0,1,150.33,376.83Z" | ||||
|         style="fill: #f5f5f5" | ||||
|       ></path> | ||||
|       <path | ||||
|         d="M154.47,374h0a4.9,4.9,0,0,1-4.89-4.88V299.34a4.9,4.9,0,0,1,4.89-4.88h0a4.9,4.9,0,0,1,4.88,4.88V369.1A4.9,4.9,0,0,1,154.47,374Z" | ||||
|         style="fill: #ebebeb" | ||||
|       ></path> | ||||
|       <path | ||||
|         d="M160.83,376.83h0a7.25,7.25,0,0,1-7.23-7.23V298.84a7.25,7.25,0,0,1,7.23-7.23h0a7.24,7.24,0,0,1,7.22,7.23V369.6A7.24,7.24,0,0,1,160.83,376.83Z" | ||||
|         style="fill: #f5f5f5" | ||||
|       ></path> | ||||
|       <path | ||||
|         d="M165,374h0a4.9,4.9,0,0,1-4.88-4.88V299.34a4.9,4.9,0,0,1,4.88-4.88h0a4.9,4.9,0,0,1,4.89,4.88V369.1A4.9,4.9,0,0,1,165,374Z" | ||||
|         style="fill: #ebebeb" | ||||
|       ></path> | ||||
|       <path | ||||
|         d="M171.33,376.83h0a7.25,7.25,0,0,1-7.23-7.23V298.84a7.25,7.25,0,0,1,7.23-7.23h0a7.24,7.24,0,0,1,7.22,7.23V369.6A7.24,7.24,0,0,1,171.33,376.83Z" | ||||
|         style="fill: #f5f5f5" | ||||
|       ></path> | ||||
|       <rect x="157.39" y="364.15" width="24.4" height="3.2" rx="1.6" style="fill: #f5f5f5"></rect> | ||||
|       <path | ||||
|         d="M180.19,306.38H159a1.6,1.6,0,0,1-1.6-1.6h0a1.6,1.6,0,0,1,1.6-1.6h21.2a1.6,1.6,0,0,1,1.6,1.6h0A1.6,1.6,0,0,1,180.19,306.38Z" | ||||
|         style="fill: #f5f5f5" | ||||
|       ></path> | ||||
|     </g> | ||||
|     <g id="freepik--Shadow--inject-83"> | ||||
|       <ellipse | ||||
|         id="freepik--path--inject-83" | ||||
|         cx="250" | ||||
|         cy="416.24" | ||||
|         rx="193.89" | ||||
|         ry="11.32" | ||||
|         style="fill: #f5f5f5" | ||||
|       ></ellipse> | ||||
|     </g> | ||||
|     <g id="freepik--information-tab--inject-83"> | ||||
|       <path | ||||
|         d="M409.83,248.66h-239a9.25,9.25,0,0,1-9.32-9.93l8.76-141.08a10.75,10.75,0,0,1,10.55-9.94h239a9.26,9.26,0,0,1,9.32,9.94l-8.76,141.08A10.75,10.75,0,0,1,409.83,248.66Z" | ||||
|         style="fill: currentColor" | ||||
|       ></path> | ||||
|       <path | ||||
|         d="M409.83,248.66h-239a9.25,9.25,0,0,1-9.32-9.93l8.76-141.08a10.75,10.75,0,0,1,10.55-9.94h239a9.26,9.26,0,0,1,9.32,9.94l-8.76,141.08A10.75,10.75,0,0,1,409.83,248.66Z" | ||||
|         style="fill: #fff; opacity: 0.8" | ||||
|       ></path> | ||||
|       <path | ||||
|         d="M201.46,128.36H173a2.61,2.61,0,0,1-2.64-2.81l.81-13a3,3,0,0,1,3-2.82h28.46Z" | ||||
|         style="fill: #fff; opacity: 0.4" | ||||
|       ></path> | ||||
|       <path | ||||
|         d="M419.67,90.2H211.28a8,8,0,0,0-7.91,7.45l-2,32.37H172.9a3,3,0,0,0-3,2.82l-.75,12.2a2.61,2.61,0,0,0,2.64,2.82h28.46l-5.64,90.87a6.92,6.92,0,0,0,7,7.45H410a8,8,0,0,0,7.91-7.45l8.76-141.08A6.91,6.91,0,0,0,419.67,90.2Z" | ||||
|         style="fill: #fff" | ||||
|       ></path> | ||||
|       <path | ||||
|         d="M199,167.36H170.58a2.62,2.62,0,0,1-2.65-2.82l.76-12.2a3,3,0,0,1,3-2.82h28.46Z" | ||||
|         style="fill: #fff; opacity: 0.4" | ||||
|       ></path> | ||||
|       <path | ||||
|         d="M197.83,186.86H169.37a2.62,2.62,0,0,1-2.65-2.82l.76-12.21a3,3,0,0,1,3-2.81h28.46Z" | ||||
|         style="fill: #fff; opacity: 0.4" | ||||
|       ></path> | ||||
|       <path | ||||
|         d="M196.62,206.36H168.16a2.63,2.63,0,0,1-2.65-2.82l.76-12.21a3.05,3.05,0,0,1,3-2.82h28.46Z" | ||||
|         style="fill: #fff; opacity: 0.4" | ||||
|       ></path> | ||||
|       <path | ||||
|         d="M195.41,225.85H167A2.62,2.62,0,0,1,164.3,223l.76-12.2a3,3,0,0,1,3-2.82h28.47Z" | ||||
|         style="fill: #fff; opacity: 0.4" | ||||
|       ></path> | ||||
|       <path | ||||
|         d="M172.63,145.59a1.13,1.13,0,0,1-1.15-1.23l.66-10.71a1.48,1.48,0,0,1,1.44-1.36H197.7a1.13,1.13,0,0,1,1.15,1.23l-.66,10.72a1.48,1.48,0,0,1-1.44,1.35Z" | ||||
|         style="fill: currentColor; opacity: 0.2" | ||||
|       ></path> | ||||
|       <path | ||||
|         d="M253,107H218.57a4.47,4.47,0,0,1-4.49-4.79h0a5.17,5.17,0,0,1,5.08-4.78h34.41a4.46,4.46,0,0,1,4.49,4.78h0A5.19,5.19,0,0,1,253,107Z" | ||||
|         style="fill: currentColor; opacity: 0.30000000000000004" | ||||
|       ></path> | ||||
|       <path | ||||
|         d="M417,102.22a5.17,5.17,0,0,1-5.08,4.79,4.46,4.46,0,0,1-4.49-4.79,5.16,5.16,0,0,1,5.08-4.78A4.45,4.45,0,0,1,417,102.22Z" | ||||
|         style="fill: currentColor" | ||||
|       ></path> | ||||
|       <path | ||||
|         d="M319.53,188.84H218a8.83,8.83,0,0,1-8.9-9.49L212.15,130a10.23,10.23,0,0,1,10.07-9.48H323.78a8.81,8.81,0,0,1,8.89,9.48l-3.06,49.34A10.26,10.26,0,0,1,319.53,188.84Zm-97.34-67.9a9.79,9.79,0,0,0-9.63,9.07l-3.06,49.34a8.43,8.43,0,0,0,8.51,9.07H319.56a9.79,9.79,0,0,0,9.63-9.07L332.26,130a8.44,8.44,0,0,0-8.51-9.07Z" | ||||
|         style="fill: currentColor; opacity: 0.4" | ||||
|       ></path> | ||||
|       <path | ||||
|         d="M230.33,153.34l14.57,9.43a33,33,0,0,1,11.33-10.27L248.4,137A52.81,52.81,0,0,0,230.33,153.34Z" | ||||
|         style="fill: currentColor" | ||||
|       ></path> | ||||
|       <path | ||||
|         d="M230.33,153.34l14.57,9.43a33,33,0,0,1,11.33-10.27L248.4,137A52.81,52.81,0,0,0,230.33,153.34Z" | ||||
|         style="fill: #fff; opacity: 0.8" | ||||
|       ></path> | ||||
|       <path | ||||
|         d="M221.55,178.6h17.84a31.51,31.51,0,0,1,5.51-15.83l-14.57-9.43A50.28,50.28,0,0,0,221.55,178.6Z" | ||||
|         style="fill: #263238" | ||||
|       ></path> | ||||
|       <path | ||||
|         d="M272.36,130.76a49.82,49.82,0,0,0-24,6.22l7.83,15.52a31.31,31.31,0,0,1,15-3.89,27.86,27.86,0,0,1,28.13,30h17.84C318.88,152.18,298.79,130.76,272.36,130.76Z" | ||||
|         style="fill: currentColor" | ||||
|       ></path> | ||||
|       <path d="M260.78,207h-52.3a.85.85,0,0,1-.85-.91l.23-3.68a1,1,0,0,1,1-.91h52.3Z" style="fill: currentColor"></path> | ||||
|       <path | ||||
|         d="M260.78,207h66a1,1,0,0,0,1-.91l.23-3.68a.85.85,0,0,0-.85-.91h-66Z" | ||||
|         style="fill: currentColor; opacity: 0.2" | ||||
|       ></path> | ||||
|       <path | ||||
|         d="M296.3,221.51H207.58a.84.84,0,0,1-.85-.91l.23-3.67a1,1,0,0,1,1-.91h88.72Z" | ||||
|         style="fill: currentColor" | ||||
|       ></path> | ||||
|       <path | ||||
|         d="M296.3,221.51h29.58a1,1,0,0,0,1-.91l.23-3.67a.84.84,0,0,0-.85-.91H296.64Z" | ||||
|         style="fill: currentColor; opacity: 0.2" | ||||
|       ></path> | ||||
|       <path | ||||
|         d="M217.1,236H206.68a.85.85,0,0,1-.85-.91l.23-3.68a1,1,0,0,1,1-.91h10.42Z" | ||||
|         style="fill: currentColor" | ||||
|       ></path> | ||||
|       <path | ||||
|         d="M217.1,236H325a1,1,0,0,0,1-.91l.23-3.68a.85.85,0,0,0-.86-.91H217.44Z" | ||||
|         style="fill: currentColor; opacity: 0.2" | ||||
|       ></path> | ||||
|       <path | ||||
|         d="M348.77,236.45a.38.38,0,0,1-.39-.41l7.16-115.31a.44.44,0,0,1,.44-.41.38.38,0,0,1,.38.41L349.2,236A.44.44,0,0,1,348.77,236.45Z" | ||||
|         style="fill: currentColor" | ||||
|       ></path> | ||||
|       <path | ||||
|         d="M356.83,150.94a3,3,0,0,1-2.93,2.76,2.57,2.57,0,0,1-2.59-2.76,3,3,0,0,1,2.94-2.76A2.55,2.55,0,0,1,356.83,150.94Z" | ||||
|         style="fill: #fff" | ||||
|       ></path> | ||||
|       <path | ||||
|         d="M353.88,154.11a3,3,0,0,1-3-3.17,3.43,3.43,0,0,1,3.37-3.18,3,3,0,0,1,3,3.18A3.42,3.42,0,0,1,353.88,154.11Zm.34-5.52a2.53,2.53,0,0,0-2.49,2.35,2.18,2.18,0,0,0,2.2,2.34,2.53,2.53,0,0,0,2.49-2.34A2.18,2.18,0,0,0,354.22,148.59Z" | ||||
|         style="fill: currentColor" | ||||
|       ></path> | ||||
|       <path | ||||
|         d="M355.29,175.78a3,3,0,0,1-2.93,2.76,2.57,2.57,0,0,1-2.59-2.76A3,3,0,0,1,352.7,173,2.56,2.56,0,0,1,355.29,175.78Z" | ||||
|         style="fill: #fff" | ||||
|       ></path> | ||||
|       <path | ||||
|         d="M352.34,179a3,3,0,0,1-3-3.17,3.43,3.43,0,0,1,3.37-3.18,3,3,0,0,1,3,3.18A3.42,3.42,0,0,1,352.34,179Zm.34-5.52a2.53,2.53,0,0,0-2.49,2.35,2.17,2.17,0,0,0,2.2,2.34,2.53,2.53,0,0,0,2.49-2.34A2.18,2.18,0,0,0,352.68,173.43Z" | ||||
|         style="fill: currentColor" | ||||
|       ></path> | ||||
|       <polygon points="351.78 187.86 348.13 193.57 354.73 193.57 351.78 187.86" style="fill: #fff"></polygon> | ||||
|       <path | ||||
|         d="M354.7,194h-6.6a.39.39,0,0,1-.34-.2.42.42,0,0,1,0-.42l3.66-5.71a.42.42,0,0,1,.71,0l3,5.71a.44.44,0,0,1-.4.62Zm-5.83-.82H354l-2.3-4.48Z" | ||||
|         style="fill: currentColor" | ||||
|       ></path> | ||||
|       <path | ||||
|         d="M398.45,236.45a.38.38,0,0,1-.39-.41l7.16-115.31a.44.44,0,0,1,.44-.41.38.38,0,0,1,.39.41L398.89,236A.45.45,0,0,1,398.45,236.45Z" | ||||
|         style="fill: currentColor" | ||||
|       ></path> | ||||
|       <path | ||||
|         d="M403.67,196.71a2.56,2.56,0,0,0-2.58-2.76,3,3,0,0,0-2.94,2.76,2.57,2.57,0,0,0,2.59,2.76A3,3,0,0,0,403.67,196.71Z" | ||||
|         style="fill: #fff" | ||||
|       ></path> | ||||
|       <path | ||||
|         d="M400.72,199.88a3,3,0,0,1-3-3.17,3.42,3.42,0,0,1,3.37-3.17,3,3,0,0,1,3,3.17A3.42,3.42,0,0,1,400.72,199.88Zm.34-5.52a2.54,2.54,0,0,0-2.49,2.35,2.19,2.19,0,0,0,2.2,2.35,2.54,2.54,0,0,0,2.49-2.35A2.19,2.19,0,0,0,401.06,194.36Z" | ||||
|         style="fill: currentColor" | ||||
|       ></path> | ||||
|       <path | ||||
|         d="M407.53,134.6a2.56,2.56,0,0,0-2.59-2.76A3,3,0,0,0,402,134.6a2.57,2.57,0,0,0,2.59,2.76A3,3,0,0,0,407.53,134.6Z" | ||||
|         style="fill: #fff" | ||||
|       ></path> | ||||
|       <path | ||||
|         d="M404.57,137.77a2.94,2.94,0,0,1-3-3.17,3.43,3.43,0,0,1,3.37-3.18,3,3,0,0,1,3,3.18A3.43,3.43,0,0,1,404.57,137.77Zm.35-5.52a2.53,2.53,0,0,0-2.49,2.35,2.17,2.17,0,0,0,2.2,2.34,2.53,2.53,0,0,0,2.49-2.34A2.18,2.18,0,0,0,404.92,132.25Z" | ||||
|         style="fill: currentColor" | ||||
|       ></path> | ||||
|       <polygon points="402.64 168.92 399.7 163.2 406.29 163.2 402.64 168.92" style="fill: #fff"></polygon> | ||||
|       <path | ||||
|         d="M402.61,169.33a.38.38,0,0,1-.34-.21l-2.95-5.71a.43.43,0,0,1,0-.41.44.44,0,0,1,.37-.21h6.6a.39.39,0,0,1,.35.21.43.43,0,0,1,0,.41L403,169.12A.47.47,0,0,1,402.61,169.33Zm-2.22-5.71,2.3,4.47,2.86-4.47Z" | ||||
|         style="fill: currentColor" | ||||
|       ></path> | ||||
|       <path | ||||
|         d="M373.61,236.45a.38.38,0,0,1-.39-.41l7.16-115.31a.44.44,0,0,1,.44-.41.37.37,0,0,1,.38.41L374.05,236A.45.45,0,0,1,373.61,236.45Z" | ||||
|         style="fill: currentColor" | ||||
|       ></path> | ||||
|       <path | ||||
|         d="M381.24,158a3,3,0,0,1-2.94,2.76,2.55,2.55,0,0,1-2.58-2.76,3,3,0,0,1,2.93-2.76A2.57,2.57,0,0,1,381.24,158Z" | ||||
|         style="fill: #fff" | ||||
|       ></path> | ||||
|       <path | ||||
|         d="M378.28,161.2a3,3,0,0,1-3-3.18,3.42,3.42,0,0,1,3.37-3.17,3,3,0,0,1,3,3.17A3.43,3.43,0,0,1,378.28,161.2Zm.34-5.53a2.54,2.54,0,0,0-2.49,2.35,2.19,2.19,0,0,0,2.2,2.35,2.54,2.54,0,0,0,2.49-2.35A2.18,2.18,0,0,0,378.62,155.67Z" | ||||
|         style="fill: currentColor" | ||||
|       ></path> | ||||
|       <path | ||||
|         d="M377.81,213.26a3,3,0,0,1-2.93,2.76,2.56,2.56,0,0,1-2.59-2.76,3,3,0,0,1,2.93-2.76A2.57,2.57,0,0,1,377.81,213.26Z" | ||||
|         style="fill: #fff" | ||||
|       ></path> | ||||
|       <path | ||||
|         d="M374.85,216.43a3,3,0,0,1-3-3.17,3.43,3.43,0,0,1,3.37-3.18,3,3,0,0,1,3,3.18A3.42,3.42,0,0,1,374.85,216.43Zm.34-5.52a2.53,2.53,0,0,0-2.49,2.35,2.18,2.18,0,0,0,2.2,2.34,2.53,2.53,0,0,0,2.49-2.34A2.18,2.18,0,0,0,375.19,210.91Z" | ||||
|         style="fill: currentColor" | ||||
|       ></path> | ||||
|       <polygon points="380.46 126.12 376.8 131.84 383.4 131.84 380.46 126.12" style="fill: #fff"></polygon> | ||||
|       <path | ||||
|         d="M383.37,132.25h-6.59a.39.39,0,0,1-.35-.21.43.43,0,0,1,0-.41l3.65-5.71a.43.43,0,0,1,.72,0l2.94,5.71a.4.4,0,0,1,0,.41A.47.47,0,0,1,383.37,132.25Zm-5.82-.83h5.16L380.4,127Z" | ||||
|         style="fill: currentColor" | ||||
|       ></path> | ||||
|     </g> | ||||
|     <g id="freepik--Character--inject-83"> | ||||
|       <path | ||||
|         d="M111.54,155.81l-1,4.87-1,5c-.66,3.32-1.22,6.64-1.73,9.9-.26,1.63-.46,3.24-.63,4.83s-.32,3.13-.4,4.62a40,40,0,0,0,0,4.08c0,1.17.26,2.17.21,2.28l-.67-1.15c-.3-.3-.85-.58-.94-.45s.26.36.9.53a13.51,13.51,0,0,0,2.51.35,29.74,29.74,0,0,0,3.22-.08,65.84,65.84,0,0,0,7.23-1c1.25-.24,2.52-.49,3.78-.77l3.74-.81.5-.11a5.25,5.25,0,0,1,4.24,9.34l-1.87,1.38-1.84,1.26c-1.26.8-2.53,1.58-3.85,2.3a55.3,55.3,0,0,1-8.46,3.78,41.08,41.08,0,0,1-4.87,1.31,26.44,26.44,0,0,1-5.69.54,20.16,20.16,0,0,1-7-1.34,16.42,16.42,0,0,1-7.2-5.61,7.56,7.56,0,0,1-.52-.86l-.15-.29a28,28,0,0,1-2.55-8,47.2,47.2,0,0,1-.64-6.62q-.11-3.13,0-6.1t.41-5.85c.34-3.84.91-7.58,1.56-11.29.34-1.85.68-3.69,1.1-5.52.2-.92.4-1.84.63-2.76l.74-2.83a10.47,10.47,0,0,1,20.39,4.73Z" | ||||
|         style="fill: currentColor" | ||||
|       ></path> | ||||
|       <path | ||||
|         d="M111.54,155.81l-1,4.87-1,5c-.66,3.32-1.22,6.64-1.73,9.9-.26,1.63-.46,3.24-.63,4.83s-.32,3.13-.4,4.62a40,40,0,0,0,0,4.08c0,1.17.26,2.17.21,2.28l-.67-1.15c-.3-.3-.85-.58-.94-.45s.26.36.9.53a13.51,13.51,0,0,0,2.51.35,29.74,29.74,0,0,0,3.22-.08,65.84,65.84,0,0,0,7.23-1c1.25-.24,2.52-.49,3.78-.77l3.74-.81.5-.11a5.25,5.25,0,0,1,4.24,9.34l-1.87,1.38-1.84,1.26c-1.26.8-2.53,1.58-3.85,2.3a55.3,55.3,0,0,1-8.46,3.78,41.08,41.08,0,0,1-4.87,1.31,26.44,26.44,0,0,1-5.69.54,20.16,20.16,0,0,1-7-1.34,16.42,16.42,0,0,1-7.2-5.61,7.56,7.56,0,0,1-.52-.86l-.15-.29a28,28,0,0,1-2.55-8,47.2,47.2,0,0,1-.64-6.62q-.11-3.13,0-6.1t.41-5.85c.34-3.84.91-7.58,1.56-11.29.34-1.85.68-3.69,1.1-5.52.2-.92.4-1.84.63-2.76l.74-2.83a10.47,10.47,0,0,1,20.39,4.73Z" | ||||
|         style="opacity: 0.2" | ||||
|       ></path> | ||||
|       <path | ||||
|         d="M86.23,411.58S76.77,403,77,400.28l-7.86-4-4.68,8.08,4.34,2.43L70,406.4l.79,1.37c3.92,2,12.48,5.91,15.47,5.8A1.92,1.92,0,0,0,86.23,411.58Z" | ||||
|         style="fill: #263238" | ||||
|       ></path> | ||||
|       <path | ||||
|         d="M86.91,310.62c5.72-41,3.85-65.87,9.86-86.06l37.2-3s-16.49,65-24,92.06-31.23,88.42-31.23,88.42l-10.35-5.3S76.84,342.32,86.91,310.62Z" | ||||
|         style="fill: #263238" | ||||
|       ></path> | ||||
|       <path | ||||
|         d="M117.25,251.87c-2.53,5.85-7.47,43.42-7.45,62.18,0-.13.08-.28.12-.42,2.65-9.51,6.42-23.72,10.18-38.13Z" | ||||
|         style="opacity: 0.2" | ||||
|       ></path> | ||||
|       <path | ||||
|         d="M146,412.92s-15.43-3.5-16.14-6h-9.79l-.81,9.33h5.44l1-.86,1.22.86c4.4,0,17.12,0,19.86-1.6C146.8,413.23,146,412.92,146,412.92Z" | ||||
|         style="fill: #263238" | ||||
|       ></path> | ||||
|       <path | ||||
|         d="M119.87,311.77c-8.17-55.51-8.17-89.88-8.17-89.88l36.4-.59s-4.37,66.2-5.89,93.93c-1.57,28.83-10.57,92.29-10.57,92.29H119S116,347.42,119.87,311.77Z" | ||||
|         style="fill: #263238" | ||||
|       ></path> | ||||
|       <path | ||||
|         d="M115.92,117.67c-1.73,10.89-4.87,16.73-7,22.14,3.67,3.42,11.53,7.65,19.46,7.54s6.49-5.48,4.36-8.25c-5.69-2.87-5.91-5.77-4.52-8.31Z" | ||||
|         style="fill: #7f3e3b" | ||||
|       ></path> | ||||
|       <path d="M102.32,141.35s5.06-5.95,7.06-6.95,17.13,1,20.7,1.72,7.92,6,7.92,6Z" style="fill: #263238"></path> | ||||
|       <path | ||||
|         d="M141,116.76c-.16.72.09,1.38.56,1.48s1-.4,1.14-1.12-.09-1.38-.56-1.48S141.14,116,141,116.76Z" | ||||
|         style="fill: #263238" | ||||
|       ></path> | ||||
|       <path d="M140.71,117.75a26.08,26.08,0,0,0,2.06,6.87c-1.54.91-3.58-.1-3.58-.1Z" style="fill: #630f0f"></path> | ||||
|       <path | ||||
|         d="M143.46,112.63a.41.41,0,0,1-.4,0,3.39,3.39,0,0,0-3.11.1.42.42,0,0,1-.59-.12.43.43,0,0,1,.12-.6,4.23,4.23,0,0,1,3.92-.18.43.43,0,0,1,.22.57A.38.38,0,0,1,143.46,112.63Z" | ||||
|         style="fill: #263238" | ||||
|       ></path> | ||||
|       <path | ||||
|         d="M117.18,109.46c-1.43,8.92-2.73,14.07.72,19.55,5.18,8.24,17,6.56,21.07-1.78,3.68-7.5,5.41-20.83-2.45-26.19A12.46,12.46,0,0,0,117.18,109.46Z" | ||||
|         style="fill: #7f3e3b" | ||||
|       ></path> | ||||
|       <path | ||||
|         d="M133.39,118c7.22,1.56,5.12-7.36,3.39-8.25,4.34,2.6,7.22-.42,7-3.14,3.32-.55,3.15-6,.87-6.17-1.44-3.77-8.17-6.94-9.42-4.61-3.63-4.22-13.35-3.5-11.94-.44-3.69-.72-11.55-.39-8.92,5.17-5.61.72-5.34,10.32-1.68,11.32-3.83,2.12-.12,9.36,1.53,13.9S132.31,126.28,133.39,118Z" | ||||
|         style="fill: #263238" | ||||
|       ></path> | ||||
|       <path | ||||
|         d="M129.28,117.09a7.61,7.61,0,0,0,1.18,5.45c1.41,2,3.59.75,4.44-1.66.76-2.16.94-5.8-1.07-6.89S129.65,114.65,129.28,117.09Z" | ||||
|         style="fill: #7f3e3b" | ||||
|       ></path> | ||||
|       <path | ||||
|         d="M102.83,140.35c12.3-1.51,29.75-1.38,41.33.64A13.17,13.17,0,0,1,155,152.91c1.44,17.67-2.47,48.55-5.85,79.64-27.25,9.14-54.91-.13-54.91-.13-.61-6.27,2.77-26.82,4.88-37.79-1.55-11.32-5.48-24.29-7.69-39.34A13.15,13.15,0,0,1,102.83,140.35Z" | ||||
|         style="fill: currentColor" | ||||
|       ></path> | ||||
|       <path | ||||
|         d="M139.84,165.09c1.86,10.64,7.75,23.32,13.14,31.71.74-7.35,1.36-14.35,1.75-20.81Z" | ||||
|         style="opacity: 0.2" | ||||
|       ></path> | ||||
|       <path | ||||
|         d="M229.93,140.44a17.77,17.77,0,0,0-19.06,30c-1.78,2.4-7,9.45-8.59,12.17-2,3.29-3,6.25-1.62,7.07s3.48-1.51,5.43-4.8c1.62-2.71,5.34-10.65,6.59-13.37a17.77,17.77,0,0,0,17.25-31.06Zm4.27,23.23a15.54,15.54,0,1,1-5.41-21.31A15.53,15.53,0,0,1,234.2,163.67Z" | ||||
|         style="fill: currentColor" | ||||
|       ></path> | ||||
|       <path | ||||
|         d="M234.93,164.1a16.39,16.39,0,1,1-5.71-22.46A16.38,16.38,0,0,1,234.93,164.1Z" | ||||
|         style="fill: currentColor; opacity: 0.2" | ||||
|       ></path> | ||||
|       <path | ||||
|         d="M209.43,179.66l-2.17-1.92a3.36,3.36,0,0,0-3-.76l-5,1.14a6.28,6.28,0,0,0-4.4,3.72l-.48,1.16c3.37,3.43,9.54,4.66,9.54,4.66l1.73.54a2.79,2.79,0,0,0,3.57-1.76l1.13-3.39A3.27,3.27,0,0,0,209.43,179.66Z" | ||||
|         style="fill: #7f3e3b" | ||||
|       ></path> | ||||
|       <path | ||||
|         d="M154.47,149.29l2,4.39,2.11,4.48c1.41,3,2.9,5.89,4.39,8.72q1.13,2.12,2.32,4.11c.77,1.33,1.56,2.61,2.36,3.79A38.85,38.85,0,0,0,170,177.9c.7.86,1.42,1.48,1.44,1.58l-1.24-.51a12,12,0,0,0,4.36,1.1,43.06,43.06,0,0,0,6.37.08c2.28-.1,4.63-.34,7-.62,1.19-.15,2.4-.29,3.61-.47l3.58-.48.49-.07a5.26,5.26,0,0,1,3.6,9.6l-1.82,1.2-1.79,1.08c-1.21.69-2.43,1.36-3.69,2s-2.53,1.21-3.84,1.75-2.66,1-4,1.49a46,46,0,0,1-8.9,2,28.27,28.27,0,0,1-10.86-.66,4.81,4.81,0,0,1-.75-.28l-.48-.23a26.69,26.69,0,0,1-6.86-4.74,46.93,46.93,0,0,1-4.48-4.82,83.07,83.07,0,0,1-6.74-9.64c-2-3.23-3.74-6.51-5.39-9.8-.81-1.66-1.62-3.31-2.36-5-.37-.84-.75-1.69-1.1-2.54l-1.08-2.67a10.47,10.47,0,0,1,19.22-8.3Z" | ||||
|         style="fill: currentColor" | ||||
|       ></path> | ||||
|     </g> | ||||
|     <g id="freepik--Plant--inject-83"> | ||||
|       <path | ||||
|         d="M362.85,378.84c-1.54-12.09,5.2-21.84,11.72-31.28,7.67-11.1,15.6-22.57,10.91-38.32a33,33,0,0,0-6.31-11.77,40.88,40.88,0,0,1-13.75,18c-8.7,6.48-19,8.52-26.17,5.21-4.05-1.86-9-6.25-9.75-16.53-.74-10.52,5.37-18,16.33-20s24.27,2,33,11.41a43.49,43.49,0,0,0,1.84-20.25l1-.14a44.23,44.23,0,0,1-2.07,21.24A33.94,33.94,0,0,1,386.44,309c4.83,16.2-3.24,27.88-11.05,39.17-6.71,9.71-13,18.88-11.55,30.58Zm-11.33-94.2a31.2,31.2,0,0,0-5.51.48c-10.41,1.89-16.21,9-15.52,18.93.54,7.75,3.71,13.18,9.18,15.69,6.87,3.16,16.75,1.16,25.16-5.1a39.92,39.92,0,0,0,13.6-18A36.79,36.79,0,0,0,351.52,284.64Z" | ||||
|         style="fill: #263238" | ||||
|       ></path> | ||||
|       <path | ||||
|         d="M381.57,278.67c-7.92-7.07-8.83-16.4-4.19-18.37C383.81,257.57,386.21,268.93,381.57,278.67Z" | ||||
|         style="fill: currentColor" | ||||
|       ></path> | ||||
|       <path | ||||
|         d="M375.56,347c-5.66-9-6-20.22.91-21C382.76,325.26,384.14,335.92,375.56,347Z" | ||||
|         style="fill: currentColor" | ||||
|       ></path> | ||||
|       <path | ||||
|         d="M381.75,281.64c-1.09-6.71,2.21-11.71,5.31-10.82C391.35,272.05,388,278.66,381.75,281.64Z" | ||||
|         style="fill: currentColor" | ||||
|       ></path> | ||||
|       <path | ||||
|         d="M366.18,314.07c-3.47-7.48-1.25-14.41,2.67-14.39C374.27,299.72,372.48,308.55,366.18,314.07Z" | ||||
|         style="fill: currentColor" | ||||
|       ></path> | ||||
|       <path | ||||
|         d="M352.86,284.24c-7.14,1.21-12.5-2.28-11.57-5.59C342.58,274.06,349.65,277.62,352.86,284.24Z" | ||||
|         style="fill: currentColor" | ||||
|       ></path> | ||||
|       <path | ||||
|         d="M352.86,284.24c-4.38-2.34-5-5.82-2.76-6.75C353.25,276.2,354.75,280.39,352.86,284.24Z" | ||||
|         style="fill: currentColor" | ||||
|       ></path> | ||||
|       <path | ||||
|         d="M387.28,314c-1.73-4.67.1-7.7,2.41-6.89C392.9,308.24,391.25,312.36,387.28,314Z" | ||||
|         style="fill: currentColor" | ||||
|       ></path> | ||||
|       <path | ||||
|         d="M331.11,310.73c-4.95.54-7.44-2-6.09-4C326.9,303.87,330.5,306.48,331.11,310.73Z" | ||||
|         style="fill: currentColor" | ||||
|       ></path> | ||||
|       <rect | ||||
|         x="385.12" | ||||
|         y="386.95" | ||||
|         width="17.52" | ||||
|         height="1" | ||||
|         transform="translate(-43.09 725.57) rotate(-82.26)" | ||||
|         style="fill: currentColor" | ||||
|       ></rect> | ||||
|       <rect | ||||
|         x="387.27" | ||||
|         y="404.29" | ||||
|         width="8.47" | ||||
|         height="1" | ||||
|         transform="translate(-62.35 738.17) rotate(-82.26)" | ||||
|         style="fill: currentColor" | ||||
|       ></rect> | ||||
|       <path | ||||
|         d="M344,371.23l5.79,42.34a3.09,3.09,0,0,0,3.06,2.67h31.26a3.09,3.09,0,0,0,3.06-2.67l5.79-42.34a3.09,3.09,0,0,0-3.06-3.5H347A3.09,3.09,0,0,0,344,371.23Z" | ||||
|         style="fill: currentColor" | ||||
|       ></path> | ||||
|     </g> | ||||
|   </svg> | ||||
| </template> | ||||
|  | ||||
| <script lang="ts" setup></script> | ||||
| <style scoped></style> | ||||
| @@ -1,5 +0,0 @@ | ||||
| import Banner1 from './Banner1.vue'; | ||||
| import Banner2 from './Banner2.vue'; | ||||
| import Banner3 from './Banner3.vue'; | ||||
|  | ||||
| export { Banner1, Banner2, Banner3 }; | ||||
| @@ -1,24 +0,0 @@ | ||||
| <template> | ||||
|   <div :style="{ color }"> | ||||
|     <banner1 v-if="type === '1'" /> | ||||
|     <banner2 v-if="type === '2'" /> | ||||
|     <banner3 v-if="type === '3'" /> | ||||
|   </div> | ||||
| </template> | ||||
|  | ||||
| <script lang="ts" setup> | ||||
| import { Banner1, Banner2, Banner3 } from './components'; | ||||
|  | ||||
| interface Props { | ||||
|   /** banner类型 */ | ||||
|   type?: '1' | '2' | '3'; | ||||
|   /** 主题颜色 */ | ||||
|   color?: string; | ||||
| } | ||||
|  | ||||
| withDefaults(defineProps<Props>(), { | ||||
|   type: '1', | ||||
|   color: '#409eff' | ||||
| }); | ||||
| </script> | ||||
| <style scoped></style> | ||||
| @@ -1,4 +0,0 @@ | ||||
| import CornerTop from './CornerTop.vue'; | ||||
| import CornerBottom from './CornerBottom.vue'; | ||||
|  | ||||
| export { CornerTop, CornerBottom }; | ||||
| @@ -1,31 +0,0 @@ | ||||
| <template> | ||||
|   <div class="absolute-lt wh-full overflow-hidden"> | ||||
|     <div class="absolute -right-300px -top-900px"> | ||||
|       <corner-top :start-color="themeColor" :end-color="stopColor" /> | ||||
|     </div> | ||||
|     <div class="absolute -left-200px -bottom-400px"> | ||||
|       <corner-bottom :start-color="themeColor" :end-color="stopColor" /> | ||||
|     </div> | ||||
|   </div> | ||||
| </template> | ||||
|  | ||||
| <script lang="ts" setup> | ||||
| import { computed } from 'vue'; | ||||
| import { mixColor } from '@/utils'; | ||||
| import { CornerTop, CornerBottom } from './components'; | ||||
|  | ||||
| interface Props { | ||||
|   /** 主题颜色 */ | ||||
|   themeColor?: string; | ||||
| } | ||||
|  | ||||
| const props = withDefaults(defineProps<Props>(), { | ||||
|   themeColor: '#409EFF' | ||||
| }); | ||||
|  | ||||
| const COLOR_WHITE = '#ffffff'; | ||||
| const stopColor = computed(() => { | ||||
|   return mixColor(COLOR_WHITE, props.themeColor, 0.7); | ||||
| }); | ||||
| </script> | ||||
| <style scoped></style> | ||||