Compare commits
	
		
			35 Commits
		
	
	
		
			v1.2.1
			...
			tauri-v.1.
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 
						 | 
					9d9592886b | ||
| 
						 | 
					c791adc6bc | ||
| 
						 | 
					693f704690 | ||
| 
						 | 
					49f60b2d50 | ||
| 
						 | 
					425c69acc2 | ||
| 
						 | 
					f7de3fd0f1 | ||
| 
						 | 
					c7f6f2a537 | ||
| 
						 | 
					531432d5ff | ||
| 
						 | 
					ff1d50461f | ||
| 
						 | 
					b5027c8f3e | ||
| 
						 | 
					1e67ae8c49 | ||
| 
						 | 
					5c67d0650e | ||
| 
						 | 
					af735e87b8 | ||
| 
						 | 
					b336841567 | ||
| 
						 | 
					b094d6882b | ||
| 
						 | 
					b94baa18c1 | ||
| 
						 | 
					3eeace94dd | ||
| 
						 | 
					ad2f24707a | ||
| 
						 | 
					cd9d58d4de | ||
| 
						 | 
					2198b982f0 | ||
| 
						 | 
					376e2f7d84 | ||
| 
						 | 
					069fa8a817 | ||
| 
						 | 
					b5a723cb5f | ||
| 
						 | 
					79e85bc6b5 | ||
| 
						 | 
					bf7183747b | ||
| 
						 | 
					aabb2a49c4 | ||
| 
						 | 
					7026126a57 | ||
| 
						 | 
					c212565248 | ||
| 
						 | 
					813d8ce4c7 | ||
| 
						 | 
					20a8127434 | ||
| 
						 | 
					ec8cadd183 | ||
| 
						 | 
					4470cb4e8c | ||
| 
						 | 
					8f9a70505c | ||
| 
						 | 
					9094b21cbb | ||
| 
						 | 
					6259287240 | 
							
								
								
									
										2
									
								
								.github/ISSUE_TEMPLATE/bug-report_cn.yaml
									
									
									
									
										vendored
									
									
								
							
							
						
						@@ -1,4 +1,4 @@
 | 
			
		||||
name: Bug提交
 | 
			
		||||
name: 🐞 Bug提交
 | 
			
		||||
description: 在使用软件或功能的过程中遇到了错误
 | 
			
		||||
title: '[Bug]: '
 | 
			
		||||
labels: [ "bug?" ]
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										2
									
								
								.github/ISSUE_TEMPLATE/bug-report_en.yaml
									
									
									
									
										vendored
									
									
								
							
							
						
						@@ -1,4 +1,4 @@
 | 
			
		||||
name: Bug Report
 | 
			
		||||
name: 🐞 Bug Report
 | 
			
		||||
description: Encountered an error while using the software or feature
 | 
			
		||||
title: '[Bug]: '
 | 
			
		||||
labels: [ "bug?" ]
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										48
									
								
								.github/ISSUE_TEMPLATE/feature_request_cn.yaml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,48 @@
 | 
			
		||||
---
 | 
			
		||||
name: 🚀 功能请求
 | 
			
		||||
description: 提出一个想法以帮助我们改进W&B
 | 
			
		||||
title: "[功能]: "
 | 
			
		||||
labels:
 | 
			
		||||
  - "功能请求"
 | 
			
		||||
 | 
			
		||||
body:
 | 
			
		||||
  - type: markdown
 | 
			
		||||
    attributes:
 | 
			
		||||
      value: |
 | 
			
		||||
        **感谢 :heart: 您花时间填写此功能请求报告!**
 | 
			
		||||
        我们恳请您搜索看看您的功能是否[已经存在](https://github.com/soybeanjs/soybean-admin/issues?q=is%3Aissue+sort%3Acreated-desc+)。
 | 
			
		||||
 | 
			
		||||
        我们也很乐意接受用户的贡献。有关更多详细信息,请参阅[此处](https://github.com/soybeanjs/soybean-admin/blob/main/README.zh_CN.md#%E5%A6%82%E4%BD%95%E8%B4%A1%E7%8C%AE)。
 | 
			
		||||
 | 
			
		||||
  - type: textarea
 | 
			
		||||
    attributes:
 | 
			
		||||
      label: 描述
 | 
			
		||||
      description: |
 | 
			
		||||
        对您感兴趣的功能的清晰简洁的描述。
 | 
			
		||||
    validations:
 | 
			
		||||
      required: true
 | 
			
		||||
 | 
			
		||||
  - type: textarea
 | 
			
		||||
    attributes:
 | 
			
		||||
      label: 建议的解决方案
 | 
			
		||||
      description: |
 | 
			
		||||
        描述您想要的解决方案。对您希望发生的事情的清晰简洁的描述。
 | 
			
		||||
    validations:
 | 
			
		||||
      required: true
 | 
			
		||||
 | 
			
		||||
  - type: textarea
 | 
			
		||||
    attributes:
 | 
			
		||||
      label: 替代方案
 | 
			
		||||
      description: |
 | 
			
		||||
        描述您考虑过的替代方案。
 | 
			
		||||
        对您考虑过的任何替代解决方案或功能的清晰简洁的描述。
 | 
			
		||||
    validations:
 | 
			
		||||
      required: false
 | 
			
		||||
 | 
			
		||||
  - type: textarea
 | 
			
		||||
    attributes:
 | 
			
		||||
      label: 额外的上下文
 | 
			
		||||
      description: |
 | 
			
		||||
        在此处添加有关问题的其他上下文。
 | 
			
		||||
    validations:
 | 
			
		||||
      required: false
 | 
			
		||||
							
								
								
									
										48
									
								
								.github/ISSUE_TEMPLATE/feature_request_en.yaml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,48 @@
 | 
			
		||||
---
 | 
			
		||||
name: 🚀 Feature Request
 | 
			
		||||
description: Suggest an idea to help us improve W&B
 | 
			
		||||
title: "[Feature]: "
 | 
			
		||||
labels:
 | 
			
		||||
  - "feature_request"
 | 
			
		||||
 | 
			
		||||
body:
 | 
			
		||||
  - type: markdown
 | 
			
		||||
    attributes:
 | 
			
		||||
      value: |
 | 
			
		||||
        **Thanks :heart: for taking the time to fill out this feature request report!**
 | 
			
		||||
        We kindly ask that you search to see if an issue [already exists](https://github.com/soybeanjs/soybean-admin/issues?q=is%3Aissue+sort%3Acreated-desc+) for your feature.
 | 
			
		||||
 | 
			
		||||
        We are also happy to accept contributions from our users. For more details see [here](https://github.com/soybeanjs/soybean-admin/blob/main/README.md#how-to-contribute).
 | 
			
		||||
 | 
			
		||||
  - type: textarea
 | 
			
		||||
    attributes:
 | 
			
		||||
      label: Description
 | 
			
		||||
      description: |
 | 
			
		||||
        A clear and concise description of the feature you're interested in.
 | 
			
		||||
    validations:
 | 
			
		||||
      required: true
 | 
			
		||||
 | 
			
		||||
  - type: textarea
 | 
			
		||||
    attributes:
 | 
			
		||||
      label: Suggested Solution
 | 
			
		||||
      description: |
 | 
			
		||||
        Describe the solution you'd like. A clear and concise description of what you want to happen.
 | 
			
		||||
    validations:
 | 
			
		||||
      required: true
 | 
			
		||||
 | 
			
		||||
  - type: textarea
 | 
			
		||||
    attributes:
 | 
			
		||||
      label: Alternatives
 | 
			
		||||
      description: |
 | 
			
		||||
        Describe alternatives you've considered.
 | 
			
		||||
        A clear and concise description of any alternative solutions or features you've considered.
 | 
			
		||||
    validations:
 | 
			
		||||
      required: false
 | 
			
		||||
 | 
			
		||||
  - type: textarea
 | 
			
		||||
    attributes:
 | 
			
		||||
      label: Additional Context
 | 
			
		||||
      description: |
 | 
			
		||||
        Add any other context about the problem here.
 | 
			
		||||
    validations:
 | 
			
		||||
      required: false
 | 
			
		||||
							
								
								
									
										121
									
								
								CHANGELOG.md
									
									
									
									
									
								
							
							
						
						@@ -1,6 +1,127 @@
 | 
			
		||||
# Changelog
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
## [v1.2.6](https://github.com/honghuangdc/soybean-admin/compare/v1.2.5...v1.2.6) (2024-06-21)
 | 
			
		||||
 | 
			
		||||
###    🐞 Bug Fixes
 | 
			
		||||
 | 
			
		||||
- **projects**:
 | 
			
		||||
  - request modal title use i18n. fixed #507  -  by @honghuangdc in https://github.com/honghuangdc/soybean-admin/issues/507 [<samp>(f7de3)</samp>](https://github.com/honghuangdc/soybean-admin/commit/f7de3fd)
 | 
			
		||||
  - add `getDataByPage` for `useTable`. fixed #499  -  by @honghuangdc in https://github.com/honghuangdc/soybean-admin/issues/499 [<samp>(425c6)</samp>](https://github.com/honghuangdc/soybean-admin/commit/425c69a)
 | 
			
		||||
  - fix login redirect to routeHome when routeHome of dynamic route is not same as static route. fixed #511  -  by @honghuangdc in https://github.com/honghuangdc/soybean-admin/issues/511 [<samp>(49f60)</samp>](https://github.com/honghuangdc/soybean-admin/commit/49f60b2)
 | 
			
		||||
 | 
			
		||||
###    🛠 Optimizations
 | 
			
		||||
 | 
			
		||||
- **projects**: optimize `getRouteQueryOfLoginRoute`  -  by @honghuangdc [<samp>(693f7)</samp>](https://github.com/honghuangdc/soybean-admin/commit/693f704)
 | 
			
		||||
 | 
			
		||||
###    📖 Documentation
 | 
			
		||||
 | 
			
		||||
- **projects**:
 | 
			
		||||
  - update CHANGELOG  -  by @honghuangdc [<samp>(5c67d)</samp>](https://github.com/honghuangdc/soybean-admin/commit/5c67d06)
 | 
			
		||||
  - update README  -  by @honghuangdc [<samp>(1e67a)</samp>](https://github.com/honghuangdc/soybean-admin/commit/1e67ae8)
 | 
			
		||||
 | 
			
		||||
###    🏡 Chore
 | 
			
		||||
 | 
			
		||||
- **deps**:
 | 
			
		||||
  - update deps. close #510  -  by @honghuangdc in https://github.com/honghuangdc/soybean-admin/issues/510 [<samp>(53143)</samp>](https://github.com/honghuangdc/soybean-admin/commit/531432d)
 | 
			
		||||
  - update deps  -  by @honghuangdc [<samp>(c7f6f)</samp>](https://github.com/honghuangdc/soybean-admin/commit/c7f6f2a)
 | 
			
		||||
 | 
			
		||||
###    🤖 CI
 | 
			
		||||
 | 
			
		||||
- **projects**:
 | 
			
		||||
  - add github issues template  -  by @honghuangdc [<samp>(b5027)</samp>](https://github.com/honghuangdc/soybean-admin/commit/b5027c8)
 | 
			
		||||
  - update github issues template  -  by @honghuangdc [<samp>(ff1d5)</samp>](https://github.com/honghuangdc/soybean-admin/commit/ff1d504)
 | 
			
		||||
 | 
			
		||||
###    ❤️ Contributors
 | 
			
		||||
 | 
			
		||||
[](https://github.com/honghuangdc)  
 | 
			
		||||
 | 
			
		||||
## [v1.2.5](https://github.com/soybeanjs/soybean-admin/compare/v1.2.4...v1.2.5) (2024-06-15)
 | 
			
		||||
 | 
			
		||||
###    🐞 Bug Fixes
 | 
			
		||||
 | 
			
		||||
- **projects**: Fix the issue of abnormal tab caching after logout. fixed #495  -  by @Azir-11 in https://github.com/soybeanjs/soybean-admin/issues/495 [<samp>(3eeac)</samp>](https://github.com/soybeanjs/soybean-admin/commit/3eeace9)
 | 
			
		||||
 | 
			
		||||
###    🔥 Performance
 | 
			
		||||
 | 
			
		||||
- **project**: Initializing the static routing function does not require asynchronization  -  by **CHENZL** in https://github.com/soybeanjs/soybean-admin/issues/493 [<samp>(2198b)</samp>](https://github.com/soybeanjs/soybean-admin/commit/2198b98)
 | 
			
		||||
 | 
			
		||||
###    🛠 Optimizations
 | 
			
		||||
 | 
			
		||||
- **projects**: optimize code  -  by @soybeanjs [<samp>(b94ba)</samp>](https://github.com/soybeanjs/soybean-admin/commit/b94baa1)
 | 
			
		||||
- **types**: Enhance compatibility of global types  -  by @Azir-11 in https://github.com/soybeanjs/soybean-admin/issues/494 [<samp>(cd9d5)</samp>](https://github.com/soybeanjs/soybean-admin/commit/cd9d58d)
 | 
			
		||||
- **utils**: Reduce code indentation and improve readability  -  by @Azir-11 in https://github.com/soybeanjs/soybean-admin/issues/496 [<samp>(ad2f2)</samp>](https://github.com/soybeanjs/soybean-admin/commit/ad2f247)
 | 
			
		||||
 | 
			
		||||
###    📖 Documentation
 | 
			
		||||
 | 
			
		||||
- **projects**: update CHANGELOG  -  by @soybeanjs [<samp>(b3368)</samp>](https://github.com/soybeanjs/soybean-admin/commit/b336841)
 | 
			
		||||
 | 
			
		||||
###    🏡 Chore
 | 
			
		||||
 | 
			
		||||
- **deps**: update deps  -  by @soybeanjs [<samp>(b094d)</samp>](https://github.com/soybeanjs/soybean-admin/commit/b094d68)
 | 
			
		||||
 | 
			
		||||
###    ❤️ Contributors
 | 
			
		||||
 | 
			
		||||
[](https://github.com/soybeanjs)  [](https://github.com/Azir-11)  
 | 
			
		||||
[CHENZL](mailto:zlong5568863@qq.com)
 | 
			
		||||
 | 
			
		||||
## [v1.2.4](https://github.com/soybeanjs/soybean-admin/compare/v1.2.3...v1.2.4) (2024-06-14)
 | 
			
		||||
 | 
			
		||||
###    🛠 Optimizations
 | 
			
		||||
 | 
			
		||||
- **projects**:
 | 
			
		||||
  - optimize `setupAppVersionNotification`  -  by @soybeanjs [<samp>(b5a72)</samp>](https://github.com/soybeanjs/soybean-admin/commit/b5a723c)
 | 
			
		||||
  - get buildTime with timezone 'Asia/Shanghai'  -  by @soybeanjs [<samp>(069fa)</samp>](https://github.com/soybeanjs/soybean-admin/commit/069fa8a)
 | 
			
		||||
 | 
			
		||||
###    ❤️ Contributors
 | 
			
		||||
 | 
			
		||||
[](https://github.com/soybeanjs)  
 | 
			
		||||
 | 
			
		||||
## [v1.2.3](https://github.com/soybeanjs/soybean-admin/compare/v1.2.2...v1.2.3) (2024-06-13)
 | 
			
		||||
 | 
			
		||||
###    🐞 Bug Fixes
 | 
			
		||||
 | 
			
		||||
- **projects**:
 | 
			
		||||
  - fix mobile browser theme issue by adding color-scheme meta tag to index.html  -  by @KickCashew in https://github.com/soybeanjs/soybean-admin/issues/488 [<samp>(c2125)</samp>](https://github.com/soybeanjs/soybean-admin/commit/c212565)
 | 
			
		||||
  - Fix secondary directory components is empty  -  by @paynezhuang in https://github.com/soybeanjs/soybean-admin/issues/491 [<samp>(aabb2)</samp>](https://github.com/soybeanjs/soybean-admin/commit/aabb2a4)
 | 
			
		||||
 | 
			
		||||
###    📖 Documentation
 | 
			
		||||
 | 
			
		||||
- **projects**:
 | 
			
		||||
  - Fixed the hyperlink pointing error  -  by **Azir** [<samp>(20a81)</samp>](https://github.com/soybeanjs/soybean-admin/commit/20a8127)
 | 
			
		||||
  - update README  -  by @soybeanjs [<samp>(70261)</samp>](https://github.com/soybeanjs/soybean-admin/commit/7026126)
 | 
			
		||||
 | 
			
		||||
###    🏡 Chore
 | 
			
		||||
 | 
			
		||||
- **deps**:
 | 
			
		||||
  - update deps  -  by @soybeanjs [<samp>(813d8)</samp>](https://github.com/soybeanjs/soybean-admin/commit/813d8ce)
 | 
			
		||||
  - update deps  -  by @soybeanjs [<samp>(bf718)</samp>](https://github.com/soybeanjs/soybean-admin/commit/bf71837)
 | 
			
		||||
 | 
			
		||||
###    ❤️ Contributors
 | 
			
		||||
 | 
			
		||||
[](https://github.com/soybeanjs)  [](https://github.com/paynezhuang)  [](https://github.com/KickCashew)  
 | 
			
		||||
[Azir](mailto:2075125282@qq.com)
 | 
			
		||||
 | 
			
		||||
## [v1.2.2](https://github.com/honghuangdc/soybean-admin/compare/v1.2.1...v1.2.2) (2024-06-12)
 | 
			
		||||
 | 
			
		||||
###    🚀 Features
 | 
			
		||||
 | 
			
		||||
- **projects**: reset scroll position when tab change  -  by @soybeanjs [<samp>(9094b)</samp>](https://github.com/honghuangdc/soybean-admin/commit/9094b21)
 | 
			
		||||
 | 
			
		||||
###    🐞 Bug Fixes
 | 
			
		||||
 | 
			
		||||
- **projects**:
 | 
			
		||||
  - hide AppVersionNotification in DEV mode  -  by @sigma-plus in https://github.com/honghuangdc/soybean-admin/issues/482 [<samp>(62592)</samp>](https://github.com/honghuangdc/soybean-admin/commit/6259287)
 | 
			
		||||
  - fix menu-toggler hidden in mobile layout. fixed #483  -  by @soybeanjs in https://github.com/honghuangdc/soybean-admin/issues/483 [<samp>(4470c)</samp>](https://github.com/honghuangdc/soybean-admin/commit/4470cb4)
 | 
			
		||||
 | 
			
		||||
###    📖 Documentation
 | 
			
		||||
 | 
			
		||||
- **projects**: update README  -  by @soybeanjs [<samp>(8f9a7)</samp>](https://github.com/honghuangdc/soybean-admin/commit/8f9a705)
 | 
			
		||||
 | 
			
		||||
###    ❤️ Contributors
 | 
			
		||||
 | 
			
		||||
[](https://github.com/soybeanjs)  [](https://github.com/sigma-plus)  
 | 
			
		||||
 | 
			
		||||
## [v1.2.1](https://github.com/honghuangdc/soybean-admin/compare/v1.2.0...v1.2.1) (2024-06-07)
 | 
			
		||||
 | 
			
		||||
###    🐞 Bug Fixes
 | 
			
		||||
 
 | 
			
		||||
@@ -1,6 +1,114 @@
 | 
			
		||||
# 更新日志
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
## [v1.2.5](https://github.com/soybeanjs/soybean-admin/compare/v1.2.4...v1.2.5) (2024-06-15)
 | 
			
		||||
 | 
			
		||||
###    🐞 错误修复
 | 
			
		||||
 | 
			
		||||
- **项目**: 修复登出后标签页异常缓存的问题。已修复 #495  -  由 @Azir-11 在 https://github.com/soybeanjs/soybean-admin/issues/495 [<samp>(3eeac)</samp>](https://github.com/soybeanjs/soybean-admin/commit/3eeace9)
 | 
			
		||||
 | 
			
		||||
###    🔥 性能
 | 
			
		||||
 | 
			
		||||
- **项目**: 初始化静态路由功能不需要异步  -  由 **CHENZL** 在 https://github.com/soybeanjs/soybean-admin/issues/493 [<samp>(2198b)</samp>](https://github.com/soybeanjs/soybean-admin/commit/2198b98)
 | 
			
		||||
 | 
			
		||||
###    🛠 优化
 | 
			
		||||
 | 
			
		||||
- **项目**: 优化代码  -  由 @soybeanjs [<samp>(b94ba)</samp>](https://github.com/soybeanjs/soybean-admin/commit/b94baa1)
 | 
			
		||||
- **类型**: 提高全局类型的兼容性  -  由 @Azir-11 在 https://github.com/soybeanjs/soybean-admin/issues/494 [<samp>(cd9d5)</samp>](https://github.com/soybeanjs/soybean-admin/commit/cd9d58d)
 | 
			
		||||
- **工具**: 减少代码缩进,提高可读性  -  由 @Azir-11 在 https://github.com/soybeanjs/soybean-admin/issues/496 [<samp>(ad2f2)</samp>](https://github.com/soybeanjs/soybean-admin/commit/ad2f247)
 | 
			
		||||
 | 
			
		||||
###    📖 文档
 | 
			
		||||
 | 
			
		||||
- **项目**: 更新CHANGELOG  -  由 @soybeanjs [<samp>(f70d2)</samp>](https://github.com/soybeanjs/soybean-admin/commit/f70d29b)
 | 
			
		||||
 | 
			
		||||
###    🏡 杂项
 | 
			
		||||
 | 
			
		||||
- **依赖**: 更新依赖  -  由 @soybeanjs [<samp>(b094d)</samp>](https://github.com/soybeanjs/soybean-admin/commit/b094d68)
 | 
			
		||||
 | 
			
		||||
###    ❤️ 贡献者
 | 
			
		||||
 | 
			
		||||
[](https://github.com/soybeanjs)  [](https://github.com/Azir-11)  
 | 
			
		||||
[CHENZL](mailto:zlong5568863@qq.com)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
## [v1.2.4](https://github.com/soybeanjs/soybean-admin/compare/v1.2.3...v1.2.4) (2024-06-14)
 | 
			
		||||
 | 
			
		||||
###    🛠 优化
 | 
			
		||||
 | 
			
		||||
- **项目**:
 | 
			
		||||
  - 优化 `setupAppVersionNotification`  -  由 @soybeanjs 提交 [<samp>(b5a72)</samp>](https://github.com/soybeanjs/soybean-admin/commit/b5a723c)
 | 
			
		||||
  - 获取 'Asia/Shanghai' 时区的构建时间  -  由 @soybeanjs 提交 [<samp>(069fa)</samp>](https://github.com/soybeanjs/soybean-admin/commit/069fa8a)
 | 
			
		||||
 | 
			
		||||
###    ❤️ 贡献者
 | 
			
		||||
 | 
			
		||||
[](https://github.com/soybeanjs)  
 | 
			
		||||
 | 
			
		||||
## [v1.2.3](https://github.com/soybeanjs/soybean-admin/compare/v1.2.2...v1.2.3) (2024-06-13)
 | 
			
		||||
 | 
			
		||||
###    🐞 修复错误
 | 
			
		||||
 | 
			
		||||
- **项目**:
 | 
			
		||||
  - 通过在index.html中添加color-scheme元标签修复移动浏览器主题问题  -  由 @KickCashew 在 https://github.com/soybeanjs/soybean-admin/issues/488 中提交 [<samp>(c2125)</samp>](https://github.com/soybeanjs/soybean-admin/commit/c212565)
 | 
			
		||||
  - 修复二级目录组件为空  -  由 @paynezhuang 在 https://github.com/soybeanjs/soybean-admin/issues/491 中提交 [<samp>(aabb2)</samp>](https://github.com/soybeanjs/soybean-admin/commit/aabb2a4)
 | 
			
		||||
 | 
			
		||||
###    📖 文档
 | 
			
		||||
 | 
			
		||||
- **项目**:
 | 
			
		||||
  - 修复超链接指向错误  -  由 **Azir** 提交 [<samp>(20a81)</samp>](https://github.com/soybeanjs/soybean-admin/commit/20a8127)
 | 
			
		||||
  - 更新 README  -  由 @soybeanjs 提交 [<samp>(70261)</samp>](https://github.com/soybeanjs/soybean-admin/commit/7026126)
 | 
			
		||||
 | 
			
		||||
###    🏡 杂项
 | 
			
		||||
 | 
			
		||||
- **依赖**:
 | 
			
		||||
  - 更新依赖  -  由 @soybeanjs 提交 [<samp>(813d8)</samp>](https://github.com/soybeanjs/soybean-admin/commit/813d8ce)
 | 
			
		||||
  - 更新依赖  -  由 @soybeanjs 提交 [<samp>(bf718)</samp>](https://github.com/soybeanjs/soybean-admin/commit/bf71837)
 | 
			
		||||
 | 
			
		||||
###    ❤️ 贡献者
 | 
			
		||||
 | 
			
		||||
[](https://github.com/soybeanjs)  [](https://github.com/paynezhuang)  [](https://github.com/KickCashew)  
 | 
			
		||||
[Azir](mailto:2075125282@qq.com)
 | 
			
		||||
 | 
			
		||||
## [v1.2.2](https://github.com/honghuangdc/soybean-admin/compare/v1.2.1...v1.2.2) (2024-06-12)
 | 
			
		||||
 | 
			
		||||
###    🚀 特性
 | 
			
		||||
 | 
			
		||||
- **项目**: 切换标签时重置滚动位置  -  由 @soybeanjs 提交 [<samp>(9094b)</samp>](https://github.com/honghuangdc/soybean-admin/commit/9094b21)
 | 
			
		||||
 | 
			
		||||
###    🐞 修复错误
 | 
			
		||||
 | 
			
		||||
- **项目**:
 | 
			
		||||
  - 在DEV模式下隐藏AppVersionNotification  -  由 @sigma-plus 在 https://github.com/honghuangdc/soybean-admin/issues/482 中提交 [<samp>(62592)</samp>](https://github.com/honghuangdc/soybean-admin/commit/6259287)
 | 
			
		||||
  - 修复在移动布局中隐藏menu-toggler。fixed #483  -  由 @soybeanjs 在 https://github.com/honghuangdc/soybean-admin/issues/483 中提交 [<samp>(4470c)</samp>](https://github.com/honghuangdc/soybean-admin/commit/4470cb4)
 | 
			
		||||
 | 
			
		||||
###    📖 文档
 | 
			
		||||
 | 
			
		||||
- **项目**: 更新 README  -  由 @soybeanjs 提交 [<samp>(8f9a7)</samp>](https://github.com/honghuangdc/soybean-admin/commit/8f9a705)
 | 
			
		||||
 | 
			
		||||
###    ❤️ 贡献者
 | 
			
		||||
 | 
			
		||||
[](https://github.com/soybeanjs)  [](https://github.com/sigma-plus)  
 | 
			
		||||
 | 
			
		||||
## [v1.2.1](https://github.com/honghuangdc/soybean-admin/compare/v1.2.0...v1.2.1) (2024-06-07)
 | 
			
		||||
 | 
			
		||||
###    🐞 修复错误
 | 
			
		||||
 | 
			
		||||
- **项目**:
 | 
			
		||||
  - 修复页面重新加载时获取用户信息  -  由 @soybeanjs 提交 [<samp>(ff51b)</samp>](https://github.com/honghuangdc/soybean-admin/commit/ff51b72)
 | 
			
		||||
  - 修复setupAppVersionNotification渲染  -  由 @soybeanjs 提交 [<samp>(6a6eb)</samp>](https://github.com/honghuangdc/soybean-admin/commit/6a6eb9a)
 | 
			
		||||
 | 
			
		||||
###    📖 文档
 | 
			
		||||
 | 
			
		||||
- **项目**: 更新CHANGELOG  -  由 @soybeanjs [<samp>(fe06b)</samp>](https://github.com/honghuangdc/soybean-admin/commit/fe06b8c)完成
 | 
			
		||||
 | 
			
		||||
###    🏡 日常任务
 | 
			
		||||
 | 
			
		||||
- **依赖**: 更新依赖  -  由 @soybeanjs [<samp>(08827)</samp>](https://github.com/honghuangdc/soybean-admin/commit/08827a4)完成
 | 
			
		||||
 | 
			
		||||
###    ❤️ 贡献者
 | 
			
		||||
 | 
			
		||||
[](https://github.com/soybeanjs)  
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
## [v1.2.0](https://github.com/soybeanjs/soybean-admin/compare/v1.1.5...v1.2.0) (2024-06-06)
 | 
			
		||||
 | 
			
		||||
###    🚀 功能
 | 
			
		||||
 
 | 
			
		||||
@@ -11,6 +11,9 @@
 | 
			
		||||
[](https://github.com/soybeanjs/soybean-admin)
 | 
			
		||||
[](https://gitee.com/honghuangdc/soybean-admin)
 | 
			
		||||
 | 
			
		||||
<a href="https://hellogithub.com/repository/1298f27d5fe54959a16cf9686516ddb3" target="_blank"><img src="https://abroad.hellogithub.com/v1/widgets/recommend.svg?rid=1298f27d5fe54959a16cf9686516ddb3&claim_uid=IiDXWmP4TEntjbV" alt="Featured|HelloGitHub" style="width: 250px; height: 54px;" width="250" height="54" /></a>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
> [!NOTE]
 | 
			
		||||
> If you think `SoybeanAdmin` is helpful to you, or you like our project, please give us a ⭐️ on GitHub. Your support is the driving force for us to continue to improve and add new features! Thank you for your support!
 | 
			
		||||
 | 
			
		||||
@@ -156,7 +159,7 @@ Thanks the following people for their contributions. If you want to contribute t
 | 
			
		||||
  </div>
 | 
			
		||||
	<!-- <div>
 | 
			
		||||
		<p>WeChat Group</p>
 | 
			
		||||
		<img src="https://soybeanjs-1300612522.cos.ap-guangzhou.myqcloud.com/uPic/wechat-0402.jpg" style="width:200px" />
 | 
			
		||||
		<img src="https://soybeanjs-1300612522.cos.ap-guangzhou.myqcloud.com/picgo/soybean-admin-wechat-0620.jpg" style="width:200px" />
 | 
			
		||||
	</div> -->
 | 
			
		||||
	<div>
 | 
			
		||||
		<p>Add the following WeChat to invite to the WeChat group</p>
 | 
			
		||||
 
 | 
			
		||||
@@ -1,7 +1,7 @@
 | 
			
		||||
<div align="center">
 | 
			
		||||
	<img src="./public/favicon.svg" width="160" />
 | 
			
		||||
	<h1>SoybeanAdmin</h1>
 | 
			
		||||
  <span><a href="./README.zh_CN.md">English</a> | 中文</span>
 | 
			
		||||
  <span><a href="./README.md">English</a> | 中文</span>
 | 
			
		||||
</div>
 | 
			
		||||
 | 
			
		||||
---
 | 
			
		||||
@@ -11,6 +11,8 @@
 | 
			
		||||
[](https://github.com/soybeanjs/soybean-admin)
 | 
			
		||||
[](https://gitee.com/honghuangdc/soybean-admin)
 | 
			
		||||
 | 
			
		||||
<a href="https://hellogithub.com/repository/1298f27d5fe54959a16cf9686516ddb3" target="_blank"><img src="https://abroad.hellogithub.com/v1/widgets/recommend.svg?rid=1298f27d5fe54959a16cf9686516ddb3&claim_uid=IiDXWmP4TEntjbV" alt="Featured|HelloGitHub" style="width: 250px; height: 54px;" width="250" height="54" /></a>
 | 
			
		||||
 | 
			
		||||
> [!NOTE]
 | 
			
		||||
> 如果您觉得 `SoybeanAdmin`对您有所帮助,或者您喜欢我们的项目,请在 GitHub 上给我们一个 ⭐️。您的支持是我们持续改进和增加新功能的动力!感谢您的支持!
 | 
			
		||||
 | 
			
		||||
@@ -157,7 +159,7 @@ pnpm build
 | 
			
		||||
  </div>
 | 
			
		||||
	<!-- <div>
 | 
			
		||||
		<p>微信群</p>
 | 
			
		||||
		<img src="https://soybeanjs-1300612522.cos.ap-guangzhou.myqcloud.com/uPic/wechat-0402.jpg" style="width:200px" />
 | 
			
		||||
		<img src="https://soybeanjs-1300612522.cos.ap-guangzhou.myqcloud.com/picgo/soybean-admin-wechat-0620.jpg" style="width:200px" />
 | 
			
		||||
	</div> -->
 | 
			
		||||
	<div>
 | 
			
		||||
		<p>添加下面微信邀请进微信群</p>
 | 
			
		||||
 
 | 
			
		||||
@@ -1 +1,2 @@
 | 
			
		||||
export * from './proxy';
 | 
			
		||||
export * from './time';
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										12
									
								
								build/config/time.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,12 @@
 | 
			
		||||
import dayjs from 'dayjs';
 | 
			
		||||
import utc from 'dayjs/plugin/utc';
 | 
			
		||||
import timezone from 'dayjs/plugin/timezone';
 | 
			
		||||
 | 
			
		||||
export function getBuildTime() {
 | 
			
		||||
  dayjs.extend(utc);
 | 
			
		||||
  dayjs.extend(timezone);
 | 
			
		||||
 | 
			
		||||
  const buildTime = dayjs.tz(Date.now(), 'Asia/Shanghai').format('YYYY-MM-DD HH:mm:ss');
 | 
			
		||||
 | 
			
		||||
  return buildTime;
 | 
			
		||||
}
 | 
			
		||||
@@ -1,7 +1,7 @@
 | 
			
		||||
import { defineConfig } from '@soybeanjs/eslint-config';
 | 
			
		||||
 | 
			
		||||
export default defineConfig(
 | 
			
		||||
  { vue: true, unocss: true },
 | 
			
		||||
  { vue: true, unocss: true, ignores: ['src-tauri/target'] },
 | 
			
		||||
  {
 | 
			
		||||
    rules: {
 | 
			
		||||
      'vue/multi-word-component-names': [
 | 
			
		||||
 
 | 
			
		||||
@@ -4,6 +4,7 @@
 | 
			
		||||
    <meta charset="UTF-8" />
 | 
			
		||||
    <link rel="icon" href="/favicon.svg" />
 | 
			
		||||
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
 | 
			
		||||
    <meta name="color-scheme" content="light dark" />
 | 
			
		||||
    <title>%VITE_APP_TITLE%</title>
 | 
			
		||||
  </head>
 | 
			
		||||
  <body>
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										46
									
								
								package.json
									
									
									
									
									
								
							
							
						
						@@ -1,7 +1,7 @@
 | 
			
		||||
{
 | 
			
		||||
  "name": "soybean-admin",
 | 
			
		||||
  "type": "module",
 | 
			
		||||
  "version": "1.2.1",
 | 
			
		||||
  "version": "1.2.6",
 | 
			
		||||
  "description": "A fresh and elegant admin template, based on Vue3、Vite3、TypeScript、NaiveUI and UnoCSS. 一个基于Vue3、Vite3、TypeScript、NaiveUI and UnoCSS的清新优雅的中后台模版。",
 | 
			
		||||
  "author": {
 | 
			
		||||
    "name": "Soybean",
 | 
			
		||||
@@ -32,16 +32,19 @@
 | 
			
		||||
  },
 | 
			
		||||
  "scripts": {
 | 
			
		||||
    "build": "vite build --mode prod",
 | 
			
		||||
    "build:tauri": "pnpm tauri build",
 | 
			
		||||
    "build:test": "vite build --mode test",
 | 
			
		||||
    "cleanup": "sa cleanup",
 | 
			
		||||
    "commit": "sa git-commit",
 | 
			
		||||
    "dev": "vite --mode test",
 | 
			
		||||
    "dev:prod": "vite --mode prod",
 | 
			
		||||
    "dev:tauri": "pnpm tauri dev",
 | 
			
		||||
    "gen-route": "sa gen-route",
 | 
			
		||||
    "lint": "eslint . --fix",
 | 
			
		||||
    "prepare": "simple-git-hooks",
 | 
			
		||||
    "preview": "vite preview",
 | 
			
		||||
    "release": "sa release",
 | 
			
		||||
    "tauri-icon": "pnpm tauri icon ./public/logo.png",
 | 
			
		||||
    "typecheck": "vue-tsc --noEmit --skipLibCheck",
 | 
			
		||||
    "update-pkg": "sa update-pkg"
 | 
			
		||||
  },
 | 
			
		||||
@@ -53,7 +56,7 @@
 | 
			
		||||
    "@sa/hooks": "workspace:*",
 | 
			
		||||
    "@sa/materials": "workspace:*",
 | 
			
		||||
    "@sa/utils": "workspace:*",
 | 
			
		||||
    "@vueuse/core": "10.10.0",
 | 
			
		||||
    "@vueuse/core": "10.11.0",
 | 
			
		||||
    "clipboard": "2.0.11",
 | 
			
		||||
    "dayjs": "1.11.11",
 | 
			
		||||
    "echarts": "5.5.0",
 | 
			
		||||
@@ -61,44 +64,45 @@
 | 
			
		||||
    "naive-ui": "2.38.2",
 | 
			
		||||
    "nprogress": "0.2.0",
 | 
			
		||||
    "pinia": "2.1.7",
 | 
			
		||||
    "tailwind-merge": "^2.3.0",
 | 
			
		||||
    "vue": "3.4.27",
 | 
			
		||||
    "tailwind-merge": "2.3.0",
 | 
			
		||||
    "vue": "3.4.29",
 | 
			
		||||
    "vue-draggable-plus": "0.5.0",
 | 
			
		||||
    "vue-i18n": "9.13.1",
 | 
			
		||||
    "vue-router": "4.3.2"
 | 
			
		||||
    "vue-router": "4.3.3"
 | 
			
		||||
  },
 | 
			
		||||
  "devDependencies": {
 | 
			
		||||
    "@elegant-router/vue": "0.3.7",
 | 
			
		||||
    "@iconify/json": "2.2.217",
 | 
			
		||||
    "@iconify/json": "2.2.220",
 | 
			
		||||
    "@sa/scripts": "workspace:*",
 | 
			
		||||
    "@sa/uno-preset": "workspace:*",
 | 
			
		||||
    "@soybeanjs/eslint-config": "1.3.6",
 | 
			
		||||
    "@soybeanjs/eslint-config": "1.3.7",
 | 
			
		||||
    "@tauri-apps/cli": "1.5.14",
 | 
			
		||||
    "@types/lodash-es": "4.17.12",
 | 
			
		||||
    "@types/node": "20.14.2",
 | 
			
		||||
    "@types/node": "20.14.6",
 | 
			
		||||
    "@types/nprogress": "0.2.3",
 | 
			
		||||
    "@unocss/eslint-config": "0.60.4",
 | 
			
		||||
    "@unocss/preset-icons": "0.60.4",
 | 
			
		||||
    "@unocss/preset-uno": "0.60.4",
 | 
			
		||||
    "@unocss/transformer-directives": "0.60.4",
 | 
			
		||||
    "@unocss/transformer-variant-group": "0.60.4",
 | 
			
		||||
    "@unocss/vite": "0.60.4",
 | 
			
		||||
    "@unocss/eslint-config": "0.61.0",
 | 
			
		||||
    "@unocss/preset-icons": "0.61.0",
 | 
			
		||||
    "@unocss/preset-uno": "0.61.0",
 | 
			
		||||
    "@unocss/transformer-directives": "0.61.0",
 | 
			
		||||
    "@unocss/transformer-variant-group": "0.61.0",
 | 
			
		||||
    "@unocss/vite": "0.61.0",
 | 
			
		||||
    "@vitejs/plugin-vue": "5.0.5",
 | 
			
		||||
    "@vitejs/plugin-vue-jsx": "4.0.0",
 | 
			
		||||
    "eslint": "9.4.0",
 | 
			
		||||
    "eslint": "9.5.0",
 | 
			
		||||
    "eslint-plugin-vue": "9.26.0",
 | 
			
		||||
    "lint-staged": "15.2.5",
 | 
			
		||||
    "sass": "1.77.4",
 | 
			
		||||
    "lint-staged": "15.2.7",
 | 
			
		||||
    "sass": "1.77.6",
 | 
			
		||||
    "simple-git-hooks": "2.11.1",
 | 
			
		||||
    "tsx": "4.12.0",
 | 
			
		||||
    "tsx": "4.15.6",
 | 
			
		||||
    "typescript": "5.4.5",
 | 
			
		||||
    "unplugin-icons": "0.19.0",
 | 
			
		||||
    "unplugin-vue-components": "0.27.0",
 | 
			
		||||
    "vite": "5.2.12",
 | 
			
		||||
    "vite": "5.3.1",
 | 
			
		||||
    "vite-plugin-progress": "0.0.7",
 | 
			
		||||
    "vite-plugin-svg-icons": "2.0.1",
 | 
			
		||||
    "vite-plugin-vue-devtools": "7.2.1",
 | 
			
		||||
    "vite-plugin-vue-devtools": "7.3.2",
 | 
			
		||||
    "vue-eslint-parser": "9.4.3",
 | 
			
		||||
    "vue-tsc": "2.0.19"
 | 
			
		||||
    "vue-tsc": "2.0.21"
 | 
			
		||||
  },
 | 
			
		||||
  "simple-git-hooks": {
 | 
			
		||||
    "commit-msg": "pnpm sa git-commit-verify",
 | 
			
		||||
 
 | 
			
		||||
@@ -1,6 +1,6 @@
 | 
			
		||||
{
 | 
			
		||||
  "name": "@sa/axios",
 | 
			
		||||
  "version": "1.2.1",
 | 
			
		||||
  "version": "1.2.6",
 | 
			
		||||
  "exports": {
 | 
			
		||||
    ".": "./src/index.ts"
 | 
			
		||||
  },
 | 
			
		||||
 
 | 
			
		||||
@@ -1,6 +1,6 @@
 | 
			
		||||
{
 | 
			
		||||
  "name": "@sa/color",
 | 
			
		||||
  "version": "1.2.1",
 | 
			
		||||
  "version": "1.2.6",
 | 
			
		||||
  "exports": {
 | 
			
		||||
    ".": "./src/index.ts"
 | 
			
		||||
  },
 | 
			
		||||
 
 | 
			
		||||
@@ -1,6 +1,6 @@
 | 
			
		||||
{
 | 
			
		||||
  "name": "@sa/hooks",
 | 
			
		||||
  "version": "1.2.1",
 | 
			
		||||
  "version": "1.2.6",
 | 
			
		||||
  "exports": {
 | 
			
		||||
    ".": "./src/index.ts"
 | 
			
		||||
  },
 | 
			
		||||
 
 | 
			
		||||
@@ -1,6 +1,6 @@
 | 
			
		||||
{
 | 
			
		||||
  "name": "@sa/materials",
 | 
			
		||||
  "version": "1.2.1",
 | 
			
		||||
  "version": "1.2.6",
 | 
			
		||||
  "exports": {
 | 
			
		||||
    ".": "./src/index.ts"
 | 
			
		||||
  },
 | 
			
		||||
@@ -11,7 +11,7 @@
 | 
			
		||||
  },
 | 
			
		||||
  "dependencies": {
 | 
			
		||||
    "@sa/utils": "workspace:*",
 | 
			
		||||
    "simplebar-vue": "2.3.4"
 | 
			
		||||
    "simplebar-vue": "2.3.5"
 | 
			
		||||
  },
 | 
			
		||||
  "devDependencies": {
 | 
			
		||||
    "typed-css-modules": "0.9.1"
 | 
			
		||||
 
 | 
			
		||||
@@ -1,6 +1,6 @@
 | 
			
		||||
{
 | 
			
		||||
  "name": "@sa/fetch",
 | 
			
		||||
  "version": "1.2.1",
 | 
			
		||||
  "version": "1.2.6",
 | 
			
		||||
  "exports": {
 | 
			
		||||
    ".": "./src/index.ts"
 | 
			
		||||
  },
 | 
			
		||||
 
 | 
			
		||||
@@ -1,6 +1,6 @@
 | 
			
		||||
{
 | 
			
		||||
  "name": "@sa/scripts",
 | 
			
		||||
  "version": "1.2.1",
 | 
			
		||||
  "version": "1.2.6",
 | 
			
		||||
  "bin": {
 | 
			
		||||
    "sa": "./bin.ts"
 | 
			
		||||
  },
 | 
			
		||||
@@ -15,7 +15,7 @@
 | 
			
		||||
  "devDependencies": {
 | 
			
		||||
    "@soybeanjs/changelog": "0.3.24",
 | 
			
		||||
    "bumpp": "9.4.1",
 | 
			
		||||
    "c12": "1.10.0",
 | 
			
		||||
    "c12": "1.11.1",
 | 
			
		||||
    "cac": "6.7.14",
 | 
			
		||||
    "consola": "3.2.3",
 | 
			
		||||
    "enquirer": "2.4.1",
 | 
			
		||||
 
 | 
			
		||||
@@ -1,6 +1,6 @@
 | 
			
		||||
{
 | 
			
		||||
  "name": "@sa/uno-preset",
 | 
			
		||||
  "version": "1.2.1",
 | 
			
		||||
  "version": "1.2.6",
 | 
			
		||||
  "exports": {
 | 
			
		||||
    ".": "./src/index.ts"
 | 
			
		||||
  },
 | 
			
		||||
 
 | 
			
		||||
@@ -1,6 +1,6 @@
 | 
			
		||||
{
 | 
			
		||||
  "name": "@sa/utils",
 | 
			
		||||
  "version": "1.2.1",
 | 
			
		||||
  "version": "1.2.6",
 | 
			
		||||
  "exports": {
 | 
			
		||||
    ".": "./src/index.ts"
 | 
			
		||||
  },
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										1502
									
								
								pnpm-lock.yaml
									
									
									
										generated
									
									
									
								
							
							
						
						
							
								
								
									
										
											BIN
										
									
								
								public/logo.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 20 KiB  | 
							
								
								
									
										3
									
								
								src-tauri/.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,3 @@
 | 
			
		||||
# Generated by Cargo
 | 
			
		||||
# will have compiled files and executables
 | 
			
		||||
/target/
 | 
			
		||||
							
								
								
									
										3664
									
								
								src-tauri/Cargo.lock
									
									
									
										generated
									
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										26
									
								
								src-tauri/Cargo.toml
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,26 @@
 | 
			
		||||
[package]
 | 
			
		||||
name = "app"
 | 
			
		||||
version = "0.1.0"
 | 
			
		||||
description = "A Tauri App"
 | 
			
		||||
authors = ["you"]
 | 
			
		||||
license = ""
 | 
			
		||||
repository = ""
 | 
			
		||||
default-run = "app"
 | 
			
		||||
edition = "2021"
 | 
			
		||||
rust-version = "1.60"
 | 
			
		||||
 | 
			
		||||
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
 | 
			
		||||
 | 
			
		||||
[build-dependencies]
 | 
			
		||||
tauri-build = { version = "1.5.1", features = [] }
 | 
			
		||||
 | 
			
		||||
[dependencies]
 | 
			
		||||
serde_json = "1.0"
 | 
			
		||||
serde = { version = "1.0", features = ["derive"] }
 | 
			
		||||
tauri = { version = "1.6.1", features = [] }
 | 
			
		||||
 | 
			
		||||
[features]
 | 
			
		||||
# this feature is used for production builds or when `devPath` points to the filesystem and the built-in dev server is disabled.
 | 
			
		||||
# If you use cargo directly instead of tauri's cli you can use this feature flag to switch between tauri's `dev` and `build` modes.
 | 
			
		||||
# DO NOT REMOVE!!
 | 
			
		||||
custom-protocol = [ "tauri/custom-protocol" ]
 | 
			
		||||
							
								
								
									
										3
									
								
								src-tauri/build.rs
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,3 @@
 | 
			
		||||
fn main() {
 | 
			
		||||
  tauri_build::build()
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										
											BIN
										
									
								
								src-tauri/icons/128x128.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 8.8 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								src-tauri/icons/128x128@2x.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 19 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								src-tauri/icons/32x32.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 1.7 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								src-tauri/icons/Square107x107Logo.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 7.4 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								src-tauri/icons/Square142x142Logo.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 9.9 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								src-tauri/icons/Square150x150Logo.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 10 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								src-tauri/icons/Square284x284Logo.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 21 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								src-tauri/icons/Square30x30Logo.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 1.6 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								src-tauri/icons/Square310x310Logo.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 23 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								src-tauri/icons/Square44x44Logo.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 2.6 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								src-tauri/icons/Square71x71Logo.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 4.7 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								src-tauri/icons/Square89x89Logo.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 6.1 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								src-tauri/icons/StoreLogo.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 3.0 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								src-tauri/icons/icon.icns
									
									
									
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										
											BIN
										
									
								
								src-tauri/icons/icon.ico
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 31 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								src-tauri/icons/icon.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 39 KiB  | 
							
								
								
									
										8
									
								
								src-tauri/src/main.rs
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,8 @@
 | 
			
		||||
// Prevents additional console window on Windows in release, DO NOT REMOVE!!
 | 
			
		||||
#![cfg_attr(not(debug_assertions), windows_subsystem = "windows")]
 | 
			
		||||
 | 
			
		||||
fn main() {
 | 
			
		||||
  tauri::Builder::default()
 | 
			
		||||
    .run(tauri::generate_context!())
 | 
			
		||||
    .expect("error while running tauri application");
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										60
									
								
								src-tauri/tauri.conf.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,60 @@
 | 
			
		||||
{
 | 
			
		||||
  "$schema": "../node_modules/@tauri-apps/cli/schema.json",
 | 
			
		||||
  "build": {
 | 
			
		||||
    "beforeBuildCommand": "npm run build",
 | 
			
		||||
    "beforeDevCommand": "npm run dev",
 | 
			
		||||
    "devPath": "http://localhost:9527",
 | 
			
		||||
    "distDir": "../dist"
 | 
			
		||||
  },
 | 
			
		||||
  "package": {
 | 
			
		||||
    "productName": "soybean-admin",
 | 
			
		||||
    "version": "1.0.0"
 | 
			
		||||
  },
 | 
			
		||||
  "tauri": {
 | 
			
		||||
    "allowlist": {
 | 
			
		||||
      "all": false
 | 
			
		||||
    },
 | 
			
		||||
    "bundle": {
 | 
			
		||||
      "active": true,
 | 
			
		||||
      "category": "DeveloperTool",
 | 
			
		||||
      "copyright": "",
 | 
			
		||||
      "deb": {
 | 
			
		||||
        "depends": []
 | 
			
		||||
      },
 | 
			
		||||
      "externalBin": [],
 | 
			
		||||
      "icon": ["icons/32x32.png", "icons/128x128.png", "icons/128x128@2x.png", "icons/icon.icns", "icons/icon.ico"],
 | 
			
		||||
      "identifier": "cn.soybeanjs.admin",
 | 
			
		||||
      "longDescription": "",
 | 
			
		||||
      "macOS": {
 | 
			
		||||
        "entitlements": null,
 | 
			
		||||
        "exceptionDomain": "",
 | 
			
		||||
        "frameworks": [],
 | 
			
		||||
        "providerShortName": null,
 | 
			
		||||
        "signingIdentity": null
 | 
			
		||||
      },
 | 
			
		||||
      "resources": [],
 | 
			
		||||
      "shortDescription": "",
 | 
			
		||||
      "targets": "all",
 | 
			
		||||
      "windows": {
 | 
			
		||||
        "certificateThumbprint": null,
 | 
			
		||||
        "digestAlgorithm": "sha256",
 | 
			
		||||
        "timestampUrl": ""
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "security": {
 | 
			
		||||
      "csp": null
 | 
			
		||||
    },
 | 
			
		||||
    "updater": {
 | 
			
		||||
      "active": false
 | 
			
		||||
    },
 | 
			
		||||
    "windows": [
 | 
			
		||||
      {
 | 
			
		||||
        "fullscreen": false,
 | 
			
		||||
        "height": 768,
 | 
			
		||||
        "resizable": true,
 | 
			
		||||
        "title": "SoybeanAdmin",
 | 
			
		||||
        "width": 1366
 | 
			
		||||
      }
 | 
			
		||||
    ]
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
@@ -41,6 +41,7 @@ const icon = computed(() => {
 | 
			
		||||
 | 
			
		||||
<template>
 | 
			
		||||
  <ButtonIcon
 | 
			
		||||
    :key="String(collapsed)"
 | 
			
		||||
    :tooltip-content="collapsed ? $t('icon.expand') : $t('icon.collapse')"
 | 
			
		||||
    tooltip-placement="bottom-start"
 | 
			
		||||
    :z-index="zIndex"
 | 
			
		||||
 
 | 
			
		||||
@@ -160,6 +160,24 @@ export function useTable<A extends NaiveUI.TableApiFn>(config: NaiveUI.NaiveTabl
 | 
			
		||||
    Object.assign(pagination, update);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  /**
 | 
			
		||||
   * get data by page number
 | 
			
		||||
   *
 | 
			
		||||
   * @param pageNum the page number. default is 1
 | 
			
		||||
   */
 | 
			
		||||
  async function getDataByPage(pageNum: number = 1) {
 | 
			
		||||
    updatePagination({
 | 
			
		||||
      page: pageNum
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    updateSearchParams({
 | 
			
		||||
      current: pageNum,
 | 
			
		||||
      size: pagination.pageSize!
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    await getData();
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  scope.run(() => {
 | 
			
		||||
    watch(
 | 
			
		||||
      () => appStore.locale,
 | 
			
		||||
@@ -184,6 +202,7 @@ export function useTable<A extends NaiveUI.TableApiFn>(config: NaiveUI.NaiveTabl
 | 
			
		||||
    mobilePagination,
 | 
			
		||||
    updatePagination,
 | 
			
		||||
    getData,
 | 
			
		||||
    getDataByPage,
 | 
			
		||||
    searchParams,
 | 
			
		||||
    updateSearchParams,
 | 
			
		||||
    resetSearchParams
 | 
			
		||||
 
 | 
			
		||||
@@ -1,5 +1,6 @@
 | 
			
		||||
<script setup lang="ts">
 | 
			
		||||
import { computed } from 'vue';
 | 
			
		||||
import { LAYOUT_SCROLL_EL_ID } from '@sa/materials';
 | 
			
		||||
import { useAppStore } from '@/store/modules/app';
 | 
			
		||||
import { useThemeStore } from '@/store/modules/theme';
 | 
			
		||||
import { useRouteStore } from '@/store/modules/route';
 | 
			
		||||
@@ -24,6 +25,12 @@ const routeStore = useRouteStore();
 | 
			
		||||
const tabStore = useTabStore();
 | 
			
		||||
 | 
			
		||||
const transitionName = computed(() => (themeStore.page.animate ? themeStore.page.animateMode : ''));
 | 
			
		||||
 | 
			
		||||
function resetScroll() {
 | 
			
		||||
  const el = document.querySelector(`#${LAYOUT_SCROLL_EL_ID}`);
 | 
			
		||||
 | 
			
		||||
  el?.scrollTo({ left: 0, top: 0 });
 | 
			
		||||
}
 | 
			
		||||
</script>
 | 
			
		||||
 | 
			
		||||
<template>
 | 
			
		||||
@@ -32,6 +39,7 @@ const transitionName = computed(() => (themeStore.page.animate ? themeStore.page
 | 
			
		||||
      :name="transitionName"
 | 
			
		||||
      mode="out-in"
 | 
			
		||||
      @before-leave="appStore.setContentXScrollable(true)"
 | 
			
		||||
      @after-leave="resetScroll"
 | 
			
		||||
      @after-enter="appStore.setContentXScrollable(false)"
 | 
			
		||||
    >
 | 
			
		||||
      <KeepAlive :include="routeStore.cacheRoutes">
 | 
			
		||||
 
 | 
			
		||||
@@ -23,6 +23,7 @@ const local: App.I18n.Schema = {
 | 
			
		||||
    deleteSuccess: 'Delete Success',
 | 
			
		||||
    confirmDelete: 'Are you sure you want to delete?',
 | 
			
		||||
    edit: 'Edit',
 | 
			
		||||
    error: 'Error',
 | 
			
		||||
    index: 'Index',
 | 
			
		||||
    keywordSearch: 'Please enter keyword',
 | 
			
		||||
    logout: 'Logout',
 | 
			
		||||
 
 | 
			
		||||
@@ -23,6 +23,7 @@ const local: App.I18n.Schema = {
 | 
			
		||||
    deleteSuccess: '删除成功',
 | 
			
		||||
    confirmDelete: '确认删除吗?',
 | 
			
		||||
    edit: '编辑',
 | 
			
		||||
    error: '错误',
 | 
			
		||||
    index: '序号',
 | 
			
		||||
    keywordSearch: '请输入关键词搜索',
 | 
			
		||||
    logout: '退出登录',
 | 
			
		||||
 
 | 
			
		||||
@@ -3,38 +3,51 @@ import { NButton } from 'naive-ui';
 | 
			
		||||
import { $t } from '../locales';
 | 
			
		||||
 | 
			
		||||
export function setupAppVersionNotification() {
 | 
			
		||||
  let isShow = false;
 | 
			
		||||
 | 
			
		||||
  document.addEventListener('visibilitychange', async () => {
 | 
			
		||||
    const preConditions = [!isShow, document.visibilityState === 'visible', !import.meta.env.DEV];
 | 
			
		||||
 | 
			
		||||
    if (!preConditions.every(Boolean)) return;
 | 
			
		||||
 | 
			
		||||
    const buildTime = await getHtmlBuildTime();
 | 
			
		||||
 | 
			
		||||
    if (buildTime !== BUILD_TIME && document.visibilityState === 'visible') {
 | 
			
		||||
      const n = window.$notification?.create({
 | 
			
		||||
        title: $t('system.updateTitle'),
 | 
			
		||||
        content: $t('system.updateContent'),
 | 
			
		||||
        action() {
 | 
			
		||||
          return h('div', { style: { display: 'flex', justifyContent: 'end', gap: '12px', width: '325px' } }, [
 | 
			
		||||
            h(
 | 
			
		||||
              NButton,
 | 
			
		||||
              {
 | 
			
		||||
                onClick() {
 | 
			
		||||
                  n?.destroy();
 | 
			
		||||
                }
 | 
			
		||||
              },
 | 
			
		||||
              () => $t('system.updateCancel')
 | 
			
		||||
            ),
 | 
			
		||||
            h(
 | 
			
		||||
              NButton,
 | 
			
		||||
              {
 | 
			
		||||
                type: 'primary',
 | 
			
		||||
                onClick() {
 | 
			
		||||
                  location.reload();
 | 
			
		||||
                }
 | 
			
		||||
              },
 | 
			
		||||
              () => $t('system.updateConfirm')
 | 
			
		||||
            )
 | 
			
		||||
          ]);
 | 
			
		||||
        }
 | 
			
		||||
      });
 | 
			
		||||
    if (buildTime === BUILD_TIME) {
 | 
			
		||||
      return;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    isShow = true;
 | 
			
		||||
 | 
			
		||||
    const n = window.$notification?.create({
 | 
			
		||||
      title: $t('system.updateTitle'),
 | 
			
		||||
      content: $t('system.updateContent'),
 | 
			
		||||
      action() {
 | 
			
		||||
        return h('div', { style: { display: 'flex', justifyContent: 'end', gap: '12px', width: '325px' } }, [
 | 
			
		||||
          h(
 | 
			
		||||
            NButton,
 | 
			
		||||
            {
 | 
			
		||||
              onClick() {
 | 
			
		||||
                n?.destroy();
 | 
			
		||||
              }
 | 
			
		||||
            },
 | 
			
		||||
            () => $t('system.updateCancel')
 | 
			
		||||
          ),
 | 
			
		||||
          h(
 | 
			
		||||
            NButton,
 | 
			
		||||
            {
 | 
			
		||||
              type: 'primary',
 | 
			
		||||
              onClick() {
 | 
			
		||||
                location.reload();
 | 
			
		||||
              }
 | 
			
		||||
            },
 | 
			
		||||
            () => $t('system.updateConfirm')
 | 
			
		||||
          )
 | 
			
		||||
        ]);
 | 
			
		||||
      },
 | 
			
		||||
      onClose() {
 | 
			
		||||
        isShow = false;
 | 
			
		||||
      }
 | 
			
		||||
    });
 | 
			
		||||
  });
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -6,6 +6,7 @@ import type {
 | 
			
		||||
  Router
 | 
			
		||||
} from 'vue-router';
 | 
			
		||||
import type { RouteKey, RoutePath } from '@elegant-router/types';
 | 
			
		||||
import { getRouteName } from '@/router/elegant/transform';
 | 
			
		||||
import { useAuthStore } from '@/store/modules/auth';
 | 
			
		||||
import { useRouteStore } from '@/store/modules/route';
 | 
			
		||||
import { localStg } from '@/utils/storage';
 | 
			
		||||
@@ -149,9 +150,7 @@ async function initRoute(to: RouteLocationNormalized): Promise<RouteLocationRaw
 | 
			
		||||
  // initialize the auth route requires the user to be logged in, if not, redirect to the login page
 | 
			
		||||
  if (!isLogin) {
 | 
			
		||||
    const loginRoute: RouteKey = 'login';
 | 
			
		||||
    const redirect = to.fullPath;
 | 
			
		||||
 | 
			
		||||
    const query: LocationQueryRaw = to.name !== loginRoute ? { redirect } : {};
 | 
			
		||||
    const query = getRouteQueryOfLoginRoute(to, routeStore.routeHome);
 | 
			
		||||
 | 
			
		||||
    const location: RouteLocationRaw = {
 | 
			
		||||
      name: loginRoute,
 | 
			
		||||
@@ -197,3 +196,20 @@ function handleRouteSwitch(to: RouteLocationNormalized, from: RouteLocationNorma
 | 
			
		||||
 | 
			
		||||
  next();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function getRouteQueryOfLoginRoute(to: RouteLocationNormalized, routeHome: RouteKey) {
 | 
			
		||||
  const loginRoute: RouteKey = 'login';
 | 
			
		||||
  const redirect = to.fullPath;
 | 
			
		||||
  const [redirectPath, redirectQuery] = redirect.split('?');
 | 
			
		||||
  const redirectName = getRouteName(redirectPath as RoutePath);
 | 
			
		||||
 | 
			
		||||
  const isRedirectHome = routeHome === redirectName;
 | 
			
		||||
 | 
			
		||||
  const query: LocationQueryRaw = to.name !== loginRoute && !isRedirectHome ? { redirect } : {};
 | 
			
		||||
 | 
			
		||||
  if (isRedirectHome && redirectQuery) {
 | 
			
		||||
    query.redirect = `/?${redirectQuery}`;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  return query;
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -63,7 +63,7 @@ export const request = createFlatRequest<App.Service.Response, RequestInstanceSt
 | 
			
		||||
        window.addEventListener('beforeunload', handleLogout);
 | 
			
		||||
 | 
			
		||||
        window.$dialog?.error({
 | 
			
		||||
          title: 'Error',
 | 
			
		||||
          title: $t('common.error'),
 | 
			
		||||
          content: response.data.msg,
 | 
			
		||||
          positiveText: $t('common.confirm'),
 | 
			
		||||
          maskClosable: false,
 | 
			
		||||
 
 | 
			
		||||
@@ -8,11 +8,13 @@ import { fetchGetUserInfo, fetchLogin } from '@/service/api';
 | 
			
		||||
import { localStg } from '@/utils/storage';
 | 
			
		||||
import { $t } from '@/locales';
 | 
			
		||||
import { useRouteStore } from '../route';
 | 
			
		||||
import { useTabStore } from '../tab';
 | 
			
		||||
import { clearAuthStorage, getToken } from './shared';
 | 
			
		||||
 | 
			
		||||
export const useAuthStore = defineStore(SetupStoreId.Auth, () => {
 | 
			
		||||
  const route = useRoute();
 | 
			
		||||
  const routeStore = useRouteStore();
 | 
			
		||||
  const tabStore = useTabStore();
 | 
			
		||||
  const { toLogin, redirectFromLogin } = useRouterPush(false);
 | 
			
		||||
  const { loading: loginLoading, startLoading, endLoading } = useLoading();
 | 
			
		||||
 | 
			
		||||
@@ -47,6 +49,7 @@ export const useAuthStore = defineStore(SetupStoreId.Auth, () => {
 | 
			
		||||
      await toLogin();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    tabStore.cacheTabs();
 | 
			
		||||
    routeStore.resetStore();
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -219,7 +219,7 @@ export const useRouteStore = defineStore(SetupStoreId.Route, () => {
 | 
			
		||||
  /** Init auth route */
 | 
			
		||||
  async function initAuthRoute() {
 | 
			
		||||
    if (authRouteMode.value === 'static') {
 | 
			
		||||
      await initStaticAuthRoute();
 | 
			
		||||
      initStaticAuthRoute();
 | 
			
		||||
    } else {
 | 
			
		||||
      await initDynamicAuthRoute();
 | 
			
		||||
    }
 | 
			
		||||
@@ -228,7 +228,7 @@ export const useRouteStore = defineStore(SetupStoreId.Route, () => {
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  /** Init static auth route */
 | 
			
		||||
  async function initStaticAuthRoute() {
 | 
			
		||||
  function initStaticAuthRoute() {
 | 
			
		||||
    const { authRoutes: staticAuthRoutes } = createStaticRoutes();
 | 
			
		||||
 | 
			
		||||
    if (authStore.isStaticSuper) {
 | 
			
		||||
 
 | 
			
		||||
@@ -290,6 +290,7 @@ export const useTabStore = defineStore(SetupStoreId.Tab, () => {
 | 
			
		||||
    resetTabLabel,
 | 
			
		||||
    isTabRetain,
 | 
			
		||||
    updateTabsByLocale,
 | 
			
		||||
    getTabIdByRoute
 | 
			
		||||
    getTabIdByRoute,
 | 
			
		||||
    cacheTabs
 | 
			
		||||
  };
 | 
			
		||||
});
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										1
									
								
								src/typings/app.d.ts
									
									
									
									
										vendored
									
									
								
							
							
						
						@@ -273,6 +273,7 @@ declare namespace App {
 | 
			
		||||
        deleteSuccess: string;
 | 
			
		||||
        confirmDelete: string;
 | 
			
		||||
        edit: string;
 | 
			
		||||
        error: string;
 | 
			
		||||
        index: string;
 | 
			
		||||
        keywordSearch: string;
 | 
			
		||||
        logout: string;
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										4
									
								
								src/typings/env.d.ts
									
									
									
									
										vendored
									
									
								
							
							
						
						@@ -105,3 +105,7 @@ declare namespace Env {
 | 
			
		||||
    readonly VITE_STORAGE_PREFIX?: string;
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
interface ImportMeta {
 | 
			
		||||
  readonly env: Env.ImportMeta;
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										46
									
								
								src/typings/global.d.ts
									
									
									
									
										vendored
									
									
								
							
							
						
						@@ -1,27 +1,27 @@
 | 
			
		||||
interface Window {
 | 
			
		||||
  /** NProgress instance */
 | 
			
		||||
  NProgress?: import('nprogress').NProgress;
 | 
			
		||||
  /** Loading bar instance */
 | 
			
		||||
  $loadingBar?: import('naive-ui').LoadingBarProviderInst;
 | 
			
		||||
  /** Dialog instance */
 | 
			
		||||
  $dialog?: import('naive-ui').DialogProviderInst;
 | 
			
		||||
  /** Message instance */
 | 
			
		||||
  $message?: import('naive-ui').MessageProviderInst;
 | 
			
		||||
  /** Notification instance */
 | 
			
		||||
  $notification?: import('naive-ui').NotificationProviderInst;
 | 
			
		||||
}
 | 
			
		||||
export {};
 | 
			
		||||
 | 
			
		||||
interface ViewTransition {
 | 
			
		||||
  ready: Promise<void>;
 | 
			
		||||
}
 | 
			
		||||
declare global {
 | 
			
		||||
  export interface Window {
 | 
			
		||||
    /** NProgress instance */
 | 
			
		||||
    NProgress?: import('nprogress').NProgress;
 | 
			
		||||
    /** Loading bar instance */
 | 
			
		||||
    $loadingBar?: import('naive-ui').LoadingBarProviderInst;
 | 
			
		||||
    /** Dialog instance */
 | 
			
		||||
    $dialog?: import('naive-ui').DialogProviderInst;
 | 
			
		||||
    /** Message instance */
 | 
			
		||||
    $message?: import('naive-ui').MessageProviderInst;
 | 
			
		||||
    /** Notification instance */
 | 
			
		||||
    $notification?: import('naive-ui').NotificationProviderInst;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
interface Document {
 | 
			
		||||
  startViewTransition?: (callback: () => Promise<void> | void) => ViewTransition;
 | 
			
		||||
}
 | 
			
		||||
  interface ViewTransition {
 | 
			
		||||
    ready: Promise<void>;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
interface ImportMeta {
 | 
			
		||||
  readonly env: Env.ImportMeta;
 | 
			
		||||
}
 | 
			
		||||
  export interface Document {
 | 
			
		||||
    startViewTransition?: (callback: () => Promise<void> | void) => ViewTransition;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
/** Build time of the project */
 | 
			
		||||
declare const BUILD_TIME: string;
 | 
			
		||||
  /** Build time of the project */
 | 
			
		||||
  export const BUILD_TIME: string;
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -18,7 +18,7 @@ const { bool: visible, setTrue: openModal } = useBoolean();
 | 
			
		||||
 | 
			
		||||
const wrapperRef = ref<HTMLElement | null>(null);
 | 
			
		||||
 | 
			
		||||
const { columns, columnChecks, data, loading, pagination, getData } = useTable({
 | 
			
		||||
const { columns, columnChecks, data, loading, pagination, getData, getDataByPage } = useTable({
 | 
			
		||||
  apiFn: fetchGetMenuList,
 | 
			
		||||
  columns: () => [
 | 
			
		||||
    {
 | 
			
		||||
@@ -257,7 +257,7 @@ init();
 | 
			
		||||
        :operate-type="operateType"
 | 
			
		||||
        :row-data="editingData"
 | 
			
		||||
        :all-pages="allPages"
 | 
			
		||||
        @submitted="getData"
 | 
			
		||||
        @submitted="getDataByPage"
 | 
			
		||||
      />
 | 
			
		||||
    </NCard>
 | 
			
		||||
  </div>
 | 
			
		||||
 
 | 
			
		||||
@@ -6,7 +6,7 @@ export function getLayoutAndPage(component?: string | null) {
 | 
			
		||||
  let layout = '';
 | 
			
		||||
  let page = '';
 | 
			
		||||
 | 
			
		||||
  const [layoutOrPage, pageItem] = component?.split(FIRST_LEVEL_ROUTE_COMPONENT_SPLIT) || [];
 | 
			
		||||
  const [layoutOrPage = '', pageItem = ''] = component?.split(FIRST_LEVEL_ROUTE_COMPONENT_SPLIT) || [];
 | 
			
		||||
 | 
			
		||||
  layout = getLayout(layoutOrPage);
 | 
			
		||||
  page = getPage(pageItem || layoutOrPage);
 | 
			
		||||
 
 | 
			
		||||
@@ -10,7 +10,17 @@ import RoleSearch from './modules/role-search.vue';
 | 
			
		||||
 | 
			
		||||
const appStore = useAppStore();
 | 
			
		||||
 | 
			
		||||
const { columns, columnChecks, data, loading, getData, mobilePagination, searchParams, resetSearchParams } = useTable({
 | 
			
		||||
const {
 | 
			
		||||
  columns,
 | 
			
		||||
  columnChecks,
 | 
			
		||||
  data,
 | 
			
		||||
  loading,
 | 
			
		||||
  getData,
 | 
			
		||||
  getDataByPage,
 | 
			
		||||
  mobilePagination,
 | 
			
		||||
  searchParams,
 | 
			
		||||
  resetSearchParams
 | 
			
		||||
} = useTable({
 | 
			
		||||
  apiFn: fetchGetRoleList,
 | 
			
		||||
  apiParams: {
 | 
			
		||||
    current: 1,
 | 
			
		||||
@@ -129,7 +139,7 @@ function edit(id: number) {
 | 
			
		||||
 | 
			
		||||
<template>
 | 
			
		||||
  <div class="min-h-500px flex-col-stretch gap-16px overflow-hidden lt-sm:overflow-auto">
 | 
			
		||||
    <RoleSearch v-model:model="searchParams" @reset="resetSearchParams" @search="getData" />
 | 
			
		||||
    <RoleSearch v-model:model="searchParams" @reset="resetSearchParams" @search="getDataByPage" />
 | 
			
		||||
    <NCard :title="$t('page.manage.role.title')" :bordered="false" size="small" class="sm:flex-1-hidden card-wrapper">
 | 
			
		||||
      <template #header-extra>
 | 
			
		||||
        <TableHeaderOperation
 | 
			
		||||
@@ -158,7 +168,7 @@ function edit(id: number) {
 | 
			
		||||
        v-model:visible="drawerVisible"
 | 
			
		||||
        :operate-type="operateType"
 | 
			
		||||
        :row-data="editingData"
 | 
			
		||||
        @submitted="getData"
 | 
			
		||||
        @submitted="getDataByPage"
 | 
			
		||||
      />
 | 
			
		||||
    </NCard>
 | 
			
		||||
  </div>
 | 
			
		||||
 
 | 
			
		||||
@@ -10,7 +10,17 @@ import UserSearch from './modules/user-search.vue';
 | 
			
		||||
 | 
			
		||||
const appStore = useAppStore();
 | 
			
		||||
 | 
			
		||||
const { columns, columnChecks, data, getData, loading, mobilePagination, searchParams, resetSearchParams } = useTable({
 | 
			
		||||
const {
 | 
			
		||||
  columns,
 | 
			
		||||
  columnChecks,
 | 
			
		||||
  data,
 | 
			
		||||
  getData,
 | 
			
		||||
  getDataByPage,
 | 
			
		||||
  loading,
 | 
			
		||||
  mobilePagination,
 | 
			
		||||
  searchParams,
 | 
			
		||||
  resetSearchParams
 | 
			
		||||
} = useTable({
 | 
			
		||||
  apiFn: fetchGetUserList,
 | 
			
		||||
  showTotal: true,
 | 
			
		||||
  apiParams: {
 | 
			
		||||
@@ -160,7 +170,7 @@ function edit(id: number) {
 | 
			
		||||
 | 
			
		||||
<template>
 | 
			
		||||
  <div class="min-h-500px flex-col-stretch gap-16px overflow-hidden lt-sm:overflow-auto">
 | 
			
		||||
    <UserSearch v-model:model="searchParams" @reset="resetSearchParams" @search="getData" />
 | 
			
		||||
    <UserSearch v-model:model="searchParams" @reset="resetSearchParams" @search="getDataByPage" />
 | 
			
		||||
    <NCard :title="$t('page.manage.user.title')" :bordered="false" size="small" class="sm:flex-1-hidden card-wrapper">
 | 
			
		||||
      <template #header-extra>
 | 
			
		||||
        <TableHeaderOperation
 | 
			
		||||
@@ -189,7 +199,7 @@ function edit(id: number) {
 | 
			
		||||
        v-model:visible="drawerVisible"
 | 
			
		||||
        :operate-type="operateType"
 | 
			
		||||
        :row-data="editingData"
 | 
			
		||||
        @submitted="getData"
 | 
			
		||||
        @submitted="getDataByPage"
 | 
			
		||||
      />
 | 
			
		||||
    </NCard>
 | 
			
		||||
  </div>
 | 
			
		||||
 
 | 
			
		||||
@@ -1,14 +1,13 @@
 | 
			
		||||
import process from 'node:process';
 | 
			
		||||
import { URL, fileURLToPath } from 'node:url';
 | 
			
		||||
import { defineConfig, loadEnv } from 'vite';
 | 
			
		||||
import dayjs from 'dayjs';
 | 
			
		||||
import { setupVitePlugins } from './build/plugins';
 | 
			
		||||
import { createViteProxy } from './build/config';
 | 
			
		||||
import { createViteProxy, getBuildTime } from './build/config';
 | 
			
		||||
 | 
			
		||||
export default defineConfig(configEnv => {
 | 
			
		||||
  const viteEnv = loadEnv(configEnv.mode, process.cwd()) as unknown as Env.ImportMeta;
 | 
			
		||||
 | 
			
		||||
  const buildTime = dayjs().format('YYYY-MM-DD HH:mm:ss');
 | 
			
		||||
  const buildTime = getBuildTime();
 | 
			
		||||
 | 
			
		||||
  return {
 | 
			
		||||
    base: viteEnv.VITE_BASE_URL,
 | 
			
		||||
 
 | 
			
		||||