#### What type of PR is this?
/area console
/kind feature
/milestone 2.9.x
#### What this PR does / why we need it:
Console 端的 Tabs 组件支持通过鼠标滚动选项卡。

#### Which issue(s) this PR fixes:
Fixes#4353
#### Special notes for your reviewer:
None
#### Does this PR introduce a user-facing change?
```release-note
Console 端的 Tabs 组件支持通过鼠标滚动选项卡。
```
#### What type of PR is this?
/kind feature
/milestone 2.3.x
/area core
#### What this PR does / why we need it:
提供 `/apis/api.console.halo.run/v1alpha1/plugins/bundle.js` 来获取已启用插件的捆绑后的 main.js 和 style.css 文件
#### Which issue(s) this PR fixes:
Fixes#3442
#### Does this PR introduce a user-facing change?
```release-note
优化已启用插件 jsbundle 文件的加载方式
```
#### What type of PR is this?
/kind bug
/area console
/milestone 2.9.x
#### What this PR does / why we need it:
Console 评论列表中,使用用户名查询时携带 kind
#### How to test it?
在 Console 端评论列表,选中右上角评论者,进行选择。
#### Which issue(s) this PR fixes:
Fixes#4465
#### Does this PR introduce a user-facing change?
```release-note
解决评论列表根据评论者条件筛选时为空的问题
```
#### What type of PR is this?
/kind improvement
/kind console
#### What this PR does / why we need it:
修改附件显示模式后,保存状态
#### Which issue(s) this PR fixes:
Fixes https://github.com/halo-dev/halo/issues/4476
#### Does this PR introduce a user-facing change?
```release-note
Console 端附件管理的显示模式支持缓存到浏览器。
```
#### What type of PR is this?
/area console
/kind improvement
/milestone 2.9.x
#### What this PR does / why we need it:
优化插件升级相关代码,解决插件管理列表的潜在性能问题。
#### Which issue(s) this PR fixes:
Fixes#4409
#### Special notes for your reviewer:
需要测试插件安装和升级功能
#### Does this PR introduce a user-facing change?
```release-note
优化 Console 端插件管理列表的性能
```
A function to debounce editor updates was added to the DefaultEditor.vue component. This change was necessary to prevent excessive event executions. Now, 'update:raw', 'update:content', and 'update' events will be emitted 250ms after the last update, reducing the number of redundant operations and increasing the editor's performance.
<!-- Thanks for sending a pull request! Here are some tips for you:
1. 如果这是你的第一次,请阅读我们的贡献指南:<https://github.com/halo-dev/halo/blob/master/CONTRIBUTING.md>。
1. If this is your first time, please read our contributor guidelines: <https://github.com/halo-dev/halo/blob/master/CONTRIBUTING.md>.
2. 请根据你解决问题的类型为 Pull Request 添加合适的标签。
2. Please label this pull request according to what type of issue you are addressing, especially if this is a release targeted pull request.
3. 请确保你已经添加并运行了适当的测试。
3. Ensure you have added or ran the appropriate tests for your PR.
-->
#### What type of PR is this?
/kind improvement
<!--
添加其中一个类别:
Add one of the following kinds:
/kind bug
/kind cleanup
/kind documentation
/kind feature
/kind improvement
适当添加其中一个或多个类别(可选):
Optionally add one or more of the following kinds if applicable:
/kind api-change
/kind deprecation
/kind failing-test
/kind flake
/kind regression
-->
#### What this PR does / why we need it:
目前默认编辑器在文章内容过多时,会出现输入延迟。
#### Which issue(s) this PR fixes:
<!--
PR 合并时自动关闭 issue。
Automatically closes linked issue when PR is merged.
用法:`Fixes #<issue 号>`,或者 `Fixes (粘贴 issue 完整链接)`
Usage: `Fixes #<issue number>`, or `Fixes (paste link of issue)`.
-->
Fixes#4389
#### Special notes for your reviewer:
#### Does this PR introduce a user-facing change?
<!--
如果当前 Pull Request 的修改不会造成用户侧的任何变更,在 `release-note` 代码块儿中填写 `NONE`。
否则请填写用户侧能够理解的 Release Note。如果当前 Pull Request 包含破坏性更新(Break Change),
Release Note 需要以 `action required` 开头。
If no, just write "NONE" in the release-note block below.
If yes, a release note is required:
Enter your extended release note in the block below. If the PR requires additional action from users switching to the new release, include the string "action required".
-->
```release-note
增强默认编辑器在文章内容过大时的性能。
```
#### What type of PR is this?
/area console
/kind feature
/milestone 2.9.x
#### What this PR does / why we need it:
为 FormKit 的 password 类型输入框添加统一的显示/隐藏明文按钮。
<img width="541" alt="image" src="https://github.com/halo-dev/halo/assets/21301288/2947cef2-258c-434d-9268-c8b5ad26a9f7">
#### Which issue(s) this PR fixes:
Fixes#4382
#### Special notes for your reviewer:
测试密码输入框的显示隐藏明文按钮是否可以正常使用即可。
#### Does this PR introduce a user-facing change?
```release-note
为 FormKit 的 password 类型输入框添加统一的显示/隐藏明文按钮。
```
#### What type of PR is this?
/area console
/kind improvement
/milestone 2.9.x
#### What this PR does / why we need it:
升级 Vue 至 3.3 以及相关的依赖。
see https://blog.vuejs.org/posts/vue-3-3
#### Which issue(s) this PR fixes:
Fixes#4425
#### Does this PR introduce a user-facing change?
```release-note
升级 Vue 至 3.3 以及相关的依赖。
```
#### What type of PR is this?
/kind bug
/area console
/milestone 2.9.x
#### What this PR does / why we need it:
原先使用 uppy 上传文件时抛出异常时,处理了 Halo 系统内部异常,但并未处理外部抛出的异常,例如反向代理等,因而会导致上传文件时卡在 0% 或者 100%。
更改之后当上传抛出异常时,首先会尝试将异常信息转换为 JSON,如果转换失败,则代表为外部异常,此时会抛出异常信息,异常信息格式为 `status: statusText`。
<img width="1045" alt="image" src="https://github.com/halo-dev/halo/assets/31335418/228a73aa-b22e-40f9-b69d-3180e2f78032">
#### How to test it?
在 Halo 上传接口前增加一层反向代理,并设置最大允许文件值,之后上传超过其值的文件进行尝试,若能够成功抛出异常即可。
#### Which issue(s) this PR fixes:
Fixes#4359
#### Does this PR introduce a user-facing change?
```release-note
修复上传文件时由于外部异常而导致进度条不变的问题
```
#### What type of PR is this?
/kind bug
#### What this PR does / why we need it:
对 console 跳转链接进行编码,用于解决跳转链接中如果携带非标准字符而导致的报错
#### How to test it?
本地开发环境:重定向地址无误且进行了 uri 编码即可。
生产环境:
在 console 后端未登录时,前往应用市场输入网站地址进行安装,之后进行登录,查看是否能够正确跳转。
#### Which issue(s) this PR fixes:
Fixes#4351
#### Does this PR introduce a user-facing change?
```release-note
对 console 重定向链接进行编码
```
#### What type of PR is this?
/kind improvement
#### What this PR does / why we need it:
由于后端 annotation 的值可以为空,而前端则规定 annotation 值为必填项,因此去除前端必填属性。
#### Which issue(s) this PR fixes:
Fixes#4279
#### Does this PR introduce a user-facing change?
```release-note
将元数据值更改为非必填
```
#### What type of PR is this?
/area console
/kind cleanup
/milestone 2.9.x
#### What this PR does / why we need it:
升级 FormKit 的依赖至 0.17.5
see https://formkit.com/changelog
#### Does this PR introduce a user-facing change?
```release-note
升级 FormKit 的依赖至 0.17.5
```
* refactor: improve the system initialization process
* Sync api-client
Signed-off-by: Ryan Wang <i@ryanc.cc>
* feat: add initialized state to global info
* Refine setup page ui
Signed-off-by: Ryan Wang <i@ryanc.cc>
* refactor: improve the system initialization process
* Refine setup page ui
Signed-off-by: Ryan Wang <i@ryanc.cc>
* Refine setup page ui
Signed-off-by: Ryan Wang <i@ryanc.cc>
* fix: update with initialize state
* Refactor setup
Signed-off-by: Ryan Wang <i@ryanc.cc>
* refactor: initialization state
* Refactor router guards
Signed-off-by: Ryan Wang <i@ryanc.cc>
* Refine i18n
Signed-off-by: Ryan Wang <i@ryanc.cc>
* Refactor init data
Signed-off-by: Ryan Wang <i@ryanc.cc>
* Refactor init data
Signed-off-by: Ryan Wang <i@ryanc.cc>
* Update console/src/views/system/Setup.vue
Co-authored-by: Takagi <mail@e.lixingyong.com>
* refactor: initialization interface
---------
Signed-off-by: Ryan Wang <i@ryanc.cc>
Co-authored-by: Ryan Wang <i@ryanc.cc>
Co-authored-by: Takagi <mail@e.lixingyong.com>
#### What type of PR is this?
/kind feature
/area core
/milestone 2.9.x
#### What this PR does / why we need it:
Support restarting Halo and enable restart endpoint by default.
Restart endpoint detail:
request uri: `/actuator/restart`
request method: `POST`
Please note that memory usage may slightly increase after restarting Halo.
#### Does this PR introduce a user-facing change?
```release-note
支持在线重启 Halo。
```
#### What type of PR is this?
/kind bug
/area console
#### What this PR does / why we need it:
在 AnnotationsForm 新增 customAnnotationsDuplicateKey 校验规则,校验自定义元数据中是否具有重复的 key。
#### Which issue(s) this PR fixes:
Fixes#4367
#### Special notes for your reviewer:
在任意一个使用 AnnotationsForm 的位置,例如`文章设置 - 元数据` 中,新增一个已经存在的 key,查看是否有重复 key 的校验。
#### Does this PR introduce a user-facing change?
```release-note
修复 AnnotationsForm 重复的 key 校验无效的问题。
```
#### What type of PR is this?
/kind bug
/area console
#### What this PR does / why we need it:
为 AnnotationsForm 的 formkit 表单 id 增加 uuid 前缀,防止由于一个页面具有多个 AnnotationsForm 时编号互相冲突。
#### Which issue(s) this PR fixes:
Fixes#4368
#### Special notes for your reviewer:
检查使用 AnnotationsForm 的界面,例如文章、页面设置的元数据处没有出现问题即可。
#### Does this PR introduce a user-facing change?
```release-note
None
```
#### What type of PR is this?
/kind improvement
/area console
#### What this PR does / why we need it:
为 `Formkit` 添加自动滚动至错误的插件,当表单校验不通过时,如果错误处被隐藏,则会滚动至错误处。
#### Which issue(s) this PR fixes:
Fixes#4317
#### Special notes for your reviewer:
找到表单中的必选项或其他校验项,尝试填写一个错误的选项。之后滚动表单直到隐藏当前项,此时点击提交,查看是否能够自动滚动至对应的错误项。
#### Does this PR introduce a user-facing change?
```release-note
当表单填写错误时,将会自动滚动至错误项。
```
#### What type of PR is this?
/kind bug
/area console
#### What this PR does / why we need it:
在用户列表中,禁止用户选中自己,以解决用户能够进行视觉上自我删除的 bug。
<img width="1636" alt="image" src="https://github.com/halo-dev/halo/assets/31335418/d95f7cf5-cfea-49fa-8f68-d13c46bc88c1">
#### Which issue(s) this PR fixes:
Fixes#4350
#### Special notes for your reviewer:
#### Does this PR introduce a user-facing change?
```release-note
在用户列表中禁用选中当前用户
```
#### What type of PR is this?
/area console
/kind cleanup
/milestone 2.9.x
#### What this PR does / why we need it:
使用 [rollup-plugin-gzip](https://www.npmjs.com/package/rollup-plugin-gzip) 代替 [vite-compression-plugin](https://www.npmjs.com/package/vite-compression-plugin) 在 Vite 编译后对资源进行 gzip。
原因是 vite-compression-plugin 已经在 npmjs.com 下架。
#### Special notes for your reviewer:
无特别需要注意,CI 能通过就行。
#### Does this PR introduce a user-facing change?
```release-note
None
```
#### What type of PR is this?
/kind cleanup
/area core
#### What this PR does / why we need it:
Bump up Halo to `2.9.0-SNAPSHOT` for developing Halo 2.9.0.
#### Does this PR introduce a user-facing change?
```release-note
None
```
#### What type of PR is this?
/kind cleanup
#### What this PR does / why we need it:
修改 Console 以及其下 packages 的版本号,发布 Halo 2.8
#### Does this PR introduce a user-facing change?
```release-note
None
```
#### What type of PR is this?
/area console
/kind bug
/milestone 2.8.x
#### What this PR does / why we need it:
修复创建角色时,如果基于某个角色创建,实际权限可能不会更新的问题。
#### Special notes for your reviewer:
需要测试:
1. 基于超级管理员创建新角色。
2. 取消勾选一些角色模板。
3. 测试此角色是否存在取消了勾选的角色模板。
#### Does this PR introduce a user-facing change?
```release-note
修复创建角色时,如果基于某个角色创建,实际权限可能不会更新的问题。
```
#### What type of PR is this?
/kind improvement
/area console
/milestone 2.8.x
#### What this PR does / why we need it:
优化刷新搜索引擎索引的文案。
#### Does this PR introduce a user-facing change?
```release-note
优化刷新搜索引擎索引的文案。
```
#### What type of PR is this?
/kind improvement
/area console
/milestone 2.8.x
#### What this PR does / why we need it:
优化刷新搜索引擎索引的文案。
#### Does this PR introduce a user-facing change?
```release-note
优化刷新搜索引擎索引的文案。
```
#### What type of PR is this?
/kind bug
/area console
#### What this PR does / why we need it:
在预览附件时点击 "下一个" 或者 "上一个", 如果这时翻页, 预览页面可能不会刷新, 也可能刷新到其他非预料中的页面
#### Which issue(s) this PR fixes:
Fixes#4330
#### Special notes for your reviewer:
1. 准备附件测试翻页
2. 在第一页的最后一个附件预览中点击 "next", 观察是否正常
3. 在第二页的第一个附件预览中点击 "pre", 观察是否正常
#### Does this PR introduce a user-facing change?
```release-note
预览附件点击 "下一个" 或者 "上一个" 翻页后, 预览页面不正常刷新
```
#### What type of PR is this?
/kind bug
/area console
/milestone 2.8.x
#### What this PR does / why we need it:
修复在最后一个附件点击 "下一个" 时, 附件库内容全部消失或得到一个 "空" 附件, 且不能 "往前"
#### Which issue(s) this PR fixes:
Fixes#4326
#### Special notes for your reviewer:
1. 上传附件
2. 一直点击 "下一个" 直到最后一张
3. 在最后一张再点击下一个, 观察页面是否出现异常, 正常情况下会停在最后一个附件上且页面不会有刷新
#### Does this PR introduce a user-facing change?
```release-note
修复 Console 端在最后一个附件点击下一项按钮时得到空结果的问题。
```
#### What type of PR is this?
/kind cleanup
#### What this PR does / why we need it:
Bump version of console to 2.8.0-rc.2.
#### Does this PR introduce a user-facing change?
```release-note
None
```
#### What type of PR is this?
/area console
/kind improvement
/milestone 2.8.x
#### What this PR does / why we need it:
移除备份列表空状态的创建备份按钮,防止出现多个创建的按钮。
<img width="1669" alt="image" src="https://github.com/halo-dev/halo/assets/21301288/2f79c05e-090d-4318-bd91-07680bb881be">
#### Does this PR introduce a user-facing change?
```release-note
None
```
#### What type of PR is this?
/area console
/kind improvement
/milestone 2.8.x
#### What this PR does / why we need it:
重构 Console 的分页组件,以支持显示数据总条数。
#### Which issue(s) this PR fixes:
Fixes#4268
#### Special notes for your reviewer:
需要测试:
- 测试各个页面的分页功能是否正常
#### Does this PR introduce a user-facing change?
```release-note
重构 Console 的分页组件,以支持显示数据总条数。
```
#### What type of PR is this?
/area console
/kind bug
/milestone 2.8.x
#### What this PR does / why we need it:
修复新建文章发布或者保存之后,浏览器中的内容缓存没有清空的问题。
#### Which issue(s) this PR fixes:
Fixes#4310
#### Special notes for your reviewer:
需要测试:
1. 新建一篇文章,测试未保存到服务器时,刷新浏览器,观察内容是否还存在。
2. 保存之后,再次新建文章,观察编辑器是否没有内容。
#### Does this PR introduce a user-facing change?
```release-note
修复新建文章发布或者保存之后,浏览器中的内容缓存没有清空的问题。
```
#### What type of PR is this?
/area console
/kind bug
/milestone 2.8.x
#### What this PR does / why we need it:
修复用户详情页面切换用户之后,数据不更新的问题。操作路径:
1. 进入任意一个用户的资料页面。
2. 点击左下角当前登录用户的个人资料。
#### Which issue(s) this PR fixes:
Fixes https://github.com/halo-dev/halo/issues/4320
#### Special notes for your reviewer:
#### Does this PR introduce a user-facing change?
```release-note
修复用户详情页面切换用户之后,数据不更新的问题。
```
#### What type of PR is this?
/area console
/kind bug
/milestone 2.8.x
#### What this PR does / why we need it:
修复评论有新回复时,无法展开回复列表的问题。
#### Which issue(s) this PR fixes:
Fixes https://github.com/halo-dev/halo/issues/4252
#### Special notes for your reviewer:
需要测试:
1. 选中任意一个评论,尝试进行回复。
2. 点击回复按钮打开回复列表,观察是否能够正常打开。
#### Does this PR introduce a user-facing change?
```release-note
修复 Console 的评论有新回复时,无法展开回复列表的问题。
```
#### What type of PR is this?
/kind improvement
#### What this PR does / why we need it:
对头像处理组件的 toolbar 进行国际化处理。
#### Which issue(s) this PR fixes:
Fixes#4296
#### Special notes for your reviewer:
#### Does this PR introduce a user-facing change?
```release-note
None
```
#### What type of PR is this?
/area console
/kind improvement
/milestone 2.8.x
#### What this PR does / why we need it:
完善备份恢复界面的 i18n。
#### Does this PR introduce a user-facing change?
```release-note
None
```
#### What type of PR is this?
/area console
/kind improvement
/milestone 2.8.x
#### What this PR does / why we need it:
在恢复备份的界面,改为需要先点击开始恢复按钮再显示上传区域。
#### Which issue(s) this PR fixes:
Fixes#4295
#### Does this PR introduce a user-facing change?
```release-note
None
```
#### What type of PR is this?
/area console
/kind improvement
/milestone 2.8.x
#### What this PR does / why we need it:
为 Dialog 组件添加 showCancel 属性用于控制是否显示取消按钮,某些场景下 Dialog 只是用于提示切必须点击确定。
此外,还对以下位置做了对应修改:
1. 进入文章编辑时检查编辑器是否存在的弹框,只允许点击确定并返回。
2. 备份恢复完成之后点击确定关闭 Halo。
#### Does this PR introduce a user-facing change?
```release-note
Console 端的 Dialog 组件添加 showCancel 属性用于控制是否显示取消按钮。
```
#### What type of PR is this?
/area console
/area editor
/milestone 2.8.x
/kind feature
#### What this PR does / why we need it:
升级默认编辑器以支持:
1. 重构 Block 操作区域逻辑,防止误操作。 Fixes https://github.com/halo-dev/halo/issues/4164
2. 支持设置文字背景颜色和字体颜色。
3. iframe block 支持主动刷新页面。 https://github.com/halo-dev/halo/issues/4227
4. 在顶部工具栏的区域添加工具箱。
5. 支持设置字体大小。
#### Does this PR introduce a user-facing change?
```release-note
升级默认编辑器版本,支持设置字体颜色、大小等功能,优化使用体验。
```
#### What type of PR is this?
/kind improvement
/area console
/area core
#### What this PR does / why we need it:
此 PR 对用户头像上传的方式进行了重构,移除了原有的头像链接及上传至附件库的方案。允许具有用户管理权限的用户对其他用户的头像进行修改和移除。
Core:
新增了 `/apis/api.console.halo.run/v1alpha1/users/-/avatar` 的 `POST` 以及 `DELETE` 接口,用来上传用户的头像及删除当前用户的头像。
Console:
新增对用户头像进行裁剪的功能,并调用上传接口保存用户头像。
需等待 #4247 合并
#### Which issue(s) this PR fixes:
Fixes#2688
See #4251
See #4247
#### Special notes for your reviewer:
1. 测试上传、删除头像接口是否能够正常执行。
2. 查看当前用户的头像是否能够设置成功。
3. 查看附件库中,当前用户的头像文件是否为 0 或 1 个。
#### Does this PR introduce a user-facing change?
```release-note
支持裁剪、上传和删除用户头像。
```
#### What type of PR is this?
/kind feature
/area core
#### What this PR does / why we need it:
Currently, we cannot pass a sort parameter into extensions' list API, so the result of the API is unsortable.
This PR add the support for that API. e.g.:
```bash
curl -X 'GET' \
'http://localhost:8090/api/v1alpha1/annotationsettings?sort=metadata.name,desc' \
-H 'accept: */*'
```
#### Does this PR introduce a user-facing change?
```release-note
Extension 查询接口支持排序参数。
```
#### What type of PR is this?
/area console
/kind improvement
/milestone 2.8.x
#### What this PR does / why we need it:
移除用户编辑表单中用户名的校验规则,在这个表单中,用户名本身就是不能修改的,所以不需要验证。移除之后还能够解决旧版本 Halo 升级之后无法修改资料的问题。(旧版本没有用户名校验)
#### Which issue(s) this PR fixes:
Fixes#4269
#### Does this PR introduce a user-facing change?
```release-note
移除 Console 端用户编辑表单中用户名的校验规则,防止旧版本 Halo 升级之后无法修改资料。
```
#### What type of PR is this?
/area console
/kind feature
/milestone 2.8.x
#### What this PR does / why we need it:
在附件数据管理列表页面路由中记录查询条件,包括分页信息、筛选信息等。可以保证在刷新浏览器窗口或者从编辑页面返回时保留之前的查询状态。
<img width="1714" alt="image" src="https://github.com/halo-dev/halo/assets/21301288/cd3ab1da-ac5c-48c7-a8f2-83f2f86a47bc">
#### Special notes for your reviewer:
需要测试:
1. 附件管理列表的所有筛选项是否可以正常工作。
2. 尝试设置部分筛选,然后刷新页面,观察筛选条件是否正常保留。
#### Does this PR introduce a user-facing change?
```release-note
Console 端的附件管理列表支持在地址栏记录筛选条件。
```
#### What type of PR is this?
/area console
/kind bug
/milestone 2.8.x
#### What this PR does / why we need it:
修复在非安全域名下,SearchInput 组件无法正常渲染的问题,因为使用了 crypto 接口来随机生成表单的 id。但 crypto 在非安全域名下无法被调用,参考:https://developer.mozilla.org/en-US/docs/Web/API/Crypto
#### Which issue(s) this PR fixes:
Fixes https://github.com/halo-dev/halo/issues/4250
#### Does this PR introduce a user-facing change?
```release-note
None
```