Compare commits
311 Commits
v2.5.8
...
feat/AICha
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
eb6cc79796 | ||
|
|
68cf5bddca | ||
|
|
c9cdcc0cc5 | ||
|
|
d8a24fc106 | ||
|
|
1a3868b2ea | ||
|
|
d1e949aa87 | ||
|
|
a24f3d0511 | ||
|
|
d2ab29bfd5 | ||
|
|
18ffde1d49 | ||
|
|
54f32eec5f | ||
|
|
2d0d42e35d | ||
|
|
666d73aed1 | ||
|
|
f8602e56eb | ||
|
|
f734dca910 | ||
|
|
1c0cd2e2a7 | ||
|
|
7e762e8524 | ||
|
|
277d598a69 | ||
|
|
09337131b5 | ||
|
|
791b9cc694 | ||
|
|
61618db93c | ||
|
|
2a63046bbd | ||
|
|
030fed7d60 | ||
|
|
13c528a35e | ||
|
|
e068a253e5 | ||
|
|
06384bb204 | ||
|
|
4a1a05cf51 | ||
|
|
5e7c5dd3f3 | ||
|
|
af172e4516 | ||
|
|
d2b6ab25d6 | ||
|
|
0dfdfc1269 | ||
|
|
c927be4c3f | ||
|
|
f883cb3839 | ||
|
|
884a53e448 | ||
|
|
86335c917d | ||
|
|
ea738270a8 | ||
|
|
a8bf8e00ab | ||
|
|
92dba1218f | ||
|
|
f0aa0014a9 | ||
|
|
02ef835855 | ||
|
|
253a7b21b1 | ||
|
|
2c8b15cd3a | ||
|
|
8b9541b51e | ||
|
|
78565bacc8 | ||
|
|
6d512d0374 | ||
|
|
eaa42885c3 | ||
|
|
b50c386432 | ||
|
|
2b232f76aa | ||
|
|
baed923a64 | ||
|
|
3ef1666ef7 | ||
|
|
43d85b10cc | ||
|
|
f17f07cc2b | ||
|
|
4954b1cc24 | ||
|
|
c078a0be1d | ||
|
|
b2fe51fd2a | ||
|
|
72740e7d2d | ||
|
|
c76148687c | ||
|
|
0bc93f14da | ||
|
|
777951bb8c | ||
|
|
833d09efe4 | ||
|
|
f816314115 | ||
|
|
9c33073f75 | ||
|
|
63e28f9993 | ||
|
|
f33f41d41f | ||
|
|
bd825e0c32 | ||
|
|
b45cfd2212 | ||
|
|
3c608a8875 | ||
|
|
5cfbac209d | ||
|
|
2081e99d4a | ||
|
|
706021871a | ||
|
|
026c3d35a0 | ||
|
|
2753e89dd5 | ||
|
|
31ba428f33 | ||
|
|
d9db68c9bb | ||
|
|
6616a932c5 | ||
|
|
493b2e183f | ||
|
|
5800c158aa | ||
|
|
6fcb82bb90 | ||
|
|
0d5455c9c5 | ||
|
|
e5e1725d42 | ||
|
|
4d171273e9 | ||
|
|
8d21d2228a | ||
|
|
d98f59cbb4 | ||
|
|
f0b0656ddc | ||
|
|
62460fbfe0 | ||
|
|
802d224209 | ||
|
|
7589059756 | ||
|
|
6330aaf4ee | ||
|
|
62ebfdf7f7 | ||
|
|
87fc30d170 | ||
|
|
296a944c9f | ||
|
|
635f72996b | ||
|
|
91feb14ff4 | ||
|
|
4dbd35074c | ||
|
|
af0dec1345 | ||
|
|
74bf3702c7 | ||
|
|
e46ee95bb8 | ||
|
|
edbd3defcc | ||
|
|
f9a2b18473 | ||
|
|
418090604a | ||
|
|
6dbfa496b4 | ||
|
|
82c3fd529c | ||
|
|
b793f71f26 | ||
|
|
b8c3c4eec2 | ||
|
|
2a5b9de68b | ||
|
|
2b9a7edaef | ||
|
|
c7fbdd7a02 | ||
|
|
9e4f31ea52 | ||
|
|
3cee9498d7 | ||
|
|
7f8795c36a | ||
|
|
3441b8a282 | ||
|
|
b2a15ca5e2 | ||
|
|
bcce4a01d4 | ||
|
|
0b97e09ccc | ||
|
|
9d287b8202 | ||
|
|
3a50ccdf5c | ||
|
|
d4bf21d464 | ||
|
|
430340c084 | ||
|
|
f9b93372d4 | ||
|
|
41021548a2 | ||
|
|
6b02f3fc61 | ||
|
|
fab231a916 | ||
|
|
2c4841bb11 | ||
|
|
bd6cc99733 | ||
|
|
50a74f3612 | ||
|
|
303669cd2c | ||
|
|
eca26a977d | ||
|
|
4be6db7d31 | ||
|
|
a55fc9b2c1 | ||
|
|
28fdc79e18 | ||
|
|
bb027cf921 | ||
|
|
4f3061ed78 | ||
|
|
9deefc0fa2 | ||
|
|
bb7a94b7cc | ||
|
|
9e867c672c | ||
|
|
7c1cf1335b | ||
|
|
2cbf7273fb | ||
|
|
a917332e81 | ||
|
|
7e865c7cb0 | ||
|
|
dcf4664a18 | ||
|
|
6ad6c58691 | ||
|
|
a8b548cb0b | ||
|
|
f0e9f27c5f | ||
|
|
b019b479bd | ||
|
|
52f9047299 | ||
|
|
a39c054b62 | ||
|
|
2ed72c74d4 | ||
|
|
e62e7932ea | ||
|
|
d7216f70c6 | ||
|
|
15d16e567f | ||
|
|
9804a2ed67 | ||
|
|
696055585c | ||
|
|
474a3886f4 | ||
|
|
bc65a3bd5a | ||
|
|
51baa1a907 | ||
|
|
e7144313a4 | ||
|
|
64eefbe7bd | ||
|
|
0b97ccb767 | ||
|
|
0eed677805 | ||
|
|
40e9786215 | ||
|
|
29bec4f373 | ||
|
|
90d55bb4ba | ||
|
|
6731c89c32 | ||
|
|
530ce3e63d | ||
|
|
3bea8d9f02 | ||
|
|
19d699b19f | ||
|
|
65264b3dac | ||
|
|
1bc38ba4c1 | ||
|
|
51b7d621fa | ||
|
|
c492c0d18e | ||
|
|
a832dc1220 | ||
|
|
34e663373b | ||
|
|
1560cb4a0b | ||
|
|
20f52e471b | ||
|
|
0dcddfc810 | ||
|
|
7984fe04ba | ||
|
|
5e2f6e454e | ||
|
|
31c1709f63 | ||
|
|
801ec4ee00 | ||
|
|
90f108a61f | ||
|
|
2c163431c5 | ||
|
|
611b4ebed3 | ||
|
|
3333aa0eb7 | ||
|
|
5cb9bfc41e | ||
|
|
67cad46ee7 | ||
|
|
b08e7d8b60 | ||
|
|
67169133e6 | ||
|
|
90a89853ed | ||
|
|
d1f831df73 | ||
|
|
0e07e339b7 | ||
|
|
ac9d922245 | ||
|
|
df7fed3c82 | ||
|
|
9a8659b711 | ||
|
|
776b6ec2c0 | ||
|
|
cbf5f4da69 | ||
|
|
54354c6ee0 | ||
|
|
22f84f1ee0 | ||
|
|
eadea02eba | ||
|
|
e15cf9b088 | ||
|
|
4b03f5739e | ||
|
|
029f3f9895 | ||
|
|
383a7762e3 | ||
|
|
5098733ba0 | ||
|
|
4d9aabe296 | ||
|
|
d6d488b8d7 | ||
|
|
0a2f608639 | ||
|
|
63ba2e6717 | ||
|
|
835fb88ab3 | ||
|
|
3afd91ee60 | ||
|
|
01fd658023 | ||
|
|
25c39b73c5 | ||
|
|
223b9f2587 | ||
|
|
6a06f32d4a | ||
|
|
12e81fd30f | ||
|
|
2a857e349b | ||
|
|
7abc4b3d69 | ||
|
|
1ad09e6056 | ||
|
|
788da743a6 | ||
|
|
556c83c122 | ||
|
|
6b19f075a1 | ||
|
|
577731837f | ||
|
|
f1aef7c156 | ||
|
|
69d77225db | ||
|
|
eea52ea1e4 | ||
|
|
02529566d3 | ||
|
|
c188aefc47 | ||
|
|
5176aee1ac | ||
|
|
000fcc289b | ||
|
|
837d2b33ba | ||
|
|
cd03444a98 | ||
|
|
2feb359cf0 | ||
|
|
af7d38822c | ||
|
|
16c4dea897 | ||
|
|
2d0f3e0056 | ||
|
|
cefe53d57f | ||
|
|
a2b3c32978 | ||
|
|
b0247577c3 | ||
|
|
a5b5f89fb2 | ||
|
|
684b95c5a8 | ||
|
|
b0432d60e4 | ||
|
|
3607c9d933 | ||
|
|
3983bf71fc | ||
|
|
0dd59a5f87 | ||
|
|
e1b1984c53 | ||
|
|
498f4904c3 | ||
|
|
00e2a89745 | ||
|
|
cb08e62cc6 | ||
|
|
7aaabb27dd | ||
|
|
f411af6405 | ||
|
|
373d87c7a8 | ||
|
|
97553407a4 | ||
|
|
b5f8402ede | ||
|
|
0840d7e3f0 | ||
|
|
c4f46f826b | ||
|
|
412db5c0e8 | ||
|
|
4e49700421 | ||
|
|
6b47049117 | ||
|
|
4d4bd9cb00 | ||
|
|
2dcbbeb516 | ||
|
|
15a645ec78 | ||
|
|
16cd17aa54 | ||
|
|
310771d16f | ||
|
|
b38a1b9904 | ||
|
|
ca0dc1fc77 | ||
|
|
9fdb6953ab | ||
|
|
99a8859476 | ||
|
|
c18ee4b467 | ||
|
|
fadbf2b24a | ||
|
|
a1641e96cc | ||
|
|
451ded82c5 | ||
|
|
77373e3782 | ||
|
|
187071b026 | ||
|
|
adf47e7acc | ||
|
|
7b762e26a0 | ||
|
|
82dc56fe64 | ||
|
|
e346da33cf | ||
|
|
9f43c9e77d | ||
|
|
0b7c873556 | ||
|
|
003171bc1e | ||
|
|
311bd72b6a | ||
|
|
11fdfe65a0 | ||
|
|
7f4040fd4e | ||
|
|
0086307640 | ||
|
|
b2249f81f8 | ||
|
|
0a2c762605 | ||
|
|
e8b60ee83b | ||
|
|
70f088e384 | ||
|
|
a845bbcdc3 | ||
|
|
6969a0999e | ||
|
|
1ec6020168 | ||
|
|
6fd6636cef | ||
|
|
8bb4aa77d9 | ||
|
|
4dae48e1ad | ||
|
|
5a4ff7065b | ||
|
|
491860a85c | ||
|
|
33d18cd3b6 | ||
|
|
d0f88391e5 | ||
|
|
493e070bb9 | ||
|
|
096df49dcd | ||
|
|
cabb8c6cc8 | ||
|
|
130d296fcc | ||
|
|
e2ee633e7a | ||
|
|
248714a8d4 | ||
|
|
3e95457c0d | ||
|
|
ac1d1a343b | ||
|
|
23511f78cd | ||
|
|
f2728c5145 | ||
|
|
06c3cc2289 | ||
|
|
024c1a36d8 | ||
|
|
a8c49db64a | ||
|
|
ea9186f941 | ||
|
|
e8eb13bb30 |
@@ -1,10 +1,14 @@
|
||||
# 后端服务地址
|
||||
VITE_SERVICE_URL="https://hulaspark.com/api"
|
||||
# websocket服务地址
|
||||
# # websocket服务地址
|
||||
VITE_WEBSOCKET_URL="wss://hulaspark.com/websocket"
|
||||
# 项目标题
|
||||
VITE_APP_TITLE="HuLa—IM"
|
||||
# 项目名称
|
||||
VITE_APP_NAME="HuLa"
|
||||
# gitee token
|
||||
VITE_GITEE_TOKEN="0312a213a6b6882beb96f487e75661a6"
|
||||
VITE_GITEE_TOKEN="a9029798336825cea39ac9e4413b8579"
|
||||
|
||||
# 启用本地的服务地址,先要注释掉上面的服务地址
|
||||
# VITE_SERVICE_URL="http://127.0.0.1:9190"
|
||||
# VITE_WEBSOCKET_URL="ws://127.0.0.1:8090/websocket"
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
# 后端服务地址
|
||||
VITE_SERVICE_URL="https://hulaspark.com/api/"
|
||||
VITE_SERVICE_URL="https://hulaspark.com/api"
|
||||
# websocket服务地址
|
||||
VITE_WEBSOCKET_URL="wss://hulaspark.com/websocket"
|
||||
# 项目标题
|
||||
@@ -7,4 +7,4 @@ VITE_APP_TITLE="HuLa—IM"
|
||||
# 项目名称
|
||||
VITE_APP_NAME="HuLa"
|
||||
# gitee token
|
||||
VITE_GITEE_TOKEN="0312a213a6b6882beb96f487e75661a6"
|
||||
VITE_GITEE_TOKEN="a9029798336825cea39ac9e4413b8579"
|
||||
|
||||
@@ -51,6 +51,7 @@ module.exports = {
|
||||
'vue/multi-word-component-names': 'off', //关闭组件命名规则
|
||||
'@typescript-eslint/no-explicit-any': 'off', // 关闭any校验
|
||||
'no-redeclare': 2, //禁止重复声明变量
|
||||
'eol-last': 'off' // 关闭行尾符(linebreak-style)的校验
|
||||
'eol-last': 'off', // 关闭行尾符(linebreak-style)的校验
|
||||
'vue/use-v-on-exact': 'off', // 如果使用了键盘事件,这个规则必须添加 exact,例如 `@keydown.exact`。该事件对 chat-editor 存在影响
|
||||
}
|
||||
}
|
||||
|
||||
5
.gitattributes
vendored
@@ -1,3 +1,8 @@
|
||||
# Auto detect text files and perform LF normalization
|
||||
* text=auto eol=lf
|
||||
"*.rs" eol=lf
|
||||
"Cargo.toml" eol=lf
|
||||
"Cargo.lock" eol=lf
|
||||
"*.vue" eol=lf
|
||||
"*.js" eol=lf
|
||||
"*.ts" eol=lf
|
||||
|
||||
@@ -38,11 +38,9 @@ body:
|
||||
- type: textarea
|
||||
id: info
|
||||
attributes:
|
||||
label: '☄️ 完整的 `tauri info` 输出'
|
||||
description: '请运行 “tauri info” 在控制台等待输出完毕,并将输出内容复制到此处'
|
||||
label: '☄️ 完整的 `pnpm tauri info` 输出'
|
||||
description: '请运行 “pnpm tauri info” 在控制台等待输出完毕,并将输出内容复制到此处'
|
||||
render: text
|
||||
validations:
|
||||
required: true
|
||||
|
||||
- type: textarea
|
||||
attributes:
|
||||
|
||||
2
.github/FUNDING.yml
vendored
@@ -1,6 +1,4 @@
|
||||
# These are supported funding model platforms
|
||||
|
||||
github: [nongyehong]
|
||||
patreon: #
|
||||
open_collective: HuLaSpark
|
||||
custom: https://opencollective.com/hulaspark
|
||||
|
||||
12
.github/ISSUE_TEMPLATE/bug_report.yml
vendored
@@ -23,8 +23,12 @@ body:
|
||||
label: '💻 Operating System'
|
||||
multiple: true
|
||||
options:
|
||||
- 'Windows'
|
||||
- 'Windows 10'
|
||||
- 'Windows 11'
|
||||
- 'macOS'
|
||||
- 'Linux'
|
||||
- 'Android'
|
||||
- 'ios'
|
||||
validations:
|
||||
required: true
|
||||
|
||||
@@ -38,11 +42,9 @@ body:
|
||||
- type: textarea
|
||||
id: info
|
||||
attributes:
|
||||
label: '☄️ intact `tauri info` output'
|
||||
description: 'Please run "tauri info" in the console and wait for the output to finish, then copy the output here'
|
||||
label: '☄️ intact `pnpm tauri info` output'
|
||||
description: 'Please run "pnpm tauri info" in the console and wait for the output to finish, then copy the output here'
|
||||
render: text
|
||||
validations:
|
||||
required: true
|
||||
|
||||
- type: textarea
|
||||
attributes:
|
||||
|
||||
12
.github/ISSUE_TEMPLATE/bug_report_cn.yml
vendored
@@ -23,8 +23,12 @@ body:
|
||||
label: '💻 系统环境'
|
||||
multiple: true
|
||||
options:
|
||||
- 'Windows'
|
||||
- 'Windows 10'
|
||||
- 'Windows 11'
|
||||
- 'macOS'
|
||||
- 'Linux'
|
||||
- 'Android'
|
||||
- 'ios'
|
||||
validations:
|
||||
required: true
|
||||
|
||||
@@ -38,11 +42,9 @@ body:
|
||||
- type: textarea
|
||||
id: info
|
||||
attributes:
|
||||
label: '☄️ 完整的 `tauri info` 输出'
|
||||
description: '请运行 “tauri info” 在控制台等待输出完毕,并将输出内容复制到此处'
|
||||
label: '☄️ 完整的 `pnpm tauri info` 输出'
|
||||
description: '请运行 “pnpm tauri info” 在控制台等待输出完毕,并将输出内容复制到此处'
|
||||
render: text
|
||||
validations:
|
||||
required: true
|
||||
|
||||
- type: textarea
|
||||
attributes:
|
||||
|
||||
41
.github/labeler.yml
vendored
Normal file
@@ -0,0 +1,41 @@
|
||||
# 前端相关变更
|
||||
'前端':
|
||||
- src/**/*
|
||||
|
||||
# 工作流程相关变更
|
||||
'工作流程':
|
||||
- .github/**/*
|
||||
|
||||
# 文档相关变更
|
||||
'文档':
|
||||
- '**/*.md'
|
||||
|
||||
# 依赖相关变更
|
||||
'依赖更新':
|
||||
- package.json
|
||||
- pnpm-lock.yaml
|
||||
|
||||
# Rust 相关变更
|
||||
'Rust':
|
||||
- '**/*.rs'
|
||||
- '**/Cargo.toml'
|
||||
- '**/Cargo.lock'
|
||||
- 'src-tauri/**/*'
|
||||
|
||||
# 配置文件变更
|
||||
'配置':
|
||||
- '*.config.ts'
|
||||
- '*.config.js'
|
||||
- 'tsconfig.json'
|
||||
- '.env*'
|
||||
|
||||
# 测试相关变更
|
||||
'测试':
|
||||
- '**/*.test.ts'
|
||||
- 'test/**/*'
|
||||
|
||||
# 样式相关变更
|
||||
'样式':
|
||||
- '**/*.css'
|
||||
- '**/*.scss'
|
||||
- 'uno.config.*'
|
||||
83
.github/workflows/codeql.yml
vendored
Normal file
@@ -0,0 +1,83 @@
|
||||
# For most projects, this workflow file will not need changing; you simply need
|
||||
# to commit it to your repository.
|
||||
#
|
||||
# You may wish to alter this file to override the set of languages analyzed,
|
||||
# or to provide custom queries or build logic.
|
||||
#
|
||||
# ******** NOTE ********
|
||||
# We have attempted to detect the languages in your repository. Please check
|
||||
# the `language` matrix defined below to confirm you have the correct set of
|
||||
# supported CodeQL languages.
|
||||
#
|
||||
name: "CodeQL"
|
||||
|
||||
on:
|
||||
# push:
|
||||
# branches: ["master"]
|
||||
# 暂时只在pr的时候运行
|
||||
pull_request:
|
||||
branches: ["master"]
|
||||
schedule:
|
||||
- cron: "0 0 1 * *" # 每月1号运行
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
jobs:
|
||||
analyze:
|
||||
# 跳过 Renovate PR
|
||||
if: |
|
||||
github.actor != 'renovate[bot]' &&
|
||||
github.actor != 'renovate-preview[bot]'
|
||||
|
||||
name: Analyze
|
||||
runs-on: ubuntu-latest
|
||||
permissions:
|
||||
actions: read
|
||||
contents: read
|
||||
security-events: write
|
||||
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
language: ["javascript", "typescript"]
|
||||
# CodeQL supports [ $supported-codeql-languages ]
|
||||
# Learn more about CodeQL language support at https://aka.ms/codeql-docs/language-support
|
||||
|
||||
steps:
|
||||
- name: Harden Runner
|
||||
uses: step-security/harden-runner@0080882f6c36860b6ba35c610c98ce87d4e2f26f # v2.10.2
|
||||
with:
|
||||
egress-policy: audit
|
||||
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
||||
|
||||
# Initializes the CodeQL tools for scanning.
|
||||
- name: Initialize CodeQL
|
||||
uses: github/codeql-action/init@df409f7d9260372bd5f19e5b04e83cb3c43714ae # v3.27.9
|
||||
with:
|
||||
languages: ${{ matrix.language }}
|
||||
# If you wish to specify custom queries, you can do so here or in a config file.
|
||||
# By default, queries listed here will override any specified in a config file.
|
||||
# Prefix the list here with "+" to use these queries and those in the config file.
|
||||
|
||||
# Autobuild attempts to build any compiled languages (C/C++, C#, or Java).
|
||||
# If this step fails, then you should remove it and run the build manually (see below)
|
||||
- name: Autobuild
|
||||
uses: github/codeql-action/autobuild@df409f7d9260372bd5f19e5b04e83cb3c43714ae # v3.27.9
|
||||
|
||||
# ℹ️ Command-line programs to run using the OS shell.
|
||||
# 📚 See https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idstepsrun
|
||||
|
||||
# If the Autobuild fails above, remove it and uncomment the following three lines.
|
||||
# modify them (or add more) to build your code if your project, please refer to the EXAMPLE below for guidance.
|
||||
|
||||
# - run: |
|
||||
# echo "Run, Build Application using script"
|
||||
# ./location_of_script_within_repo/buildscript.sh
|
||||
|
||||
- name: Perform CodeQL Analysis
|
||||
uses: github/codeql-action/analyze@df409f7d9260372bd5f19e5b04e83cb3c43714ae # v3.27.9
|
||||
with:
|
||||
category: "/language:${{matrix.language}}"
|
||||
82
.github/workflows/debug-build.yml
vendored
Normal file
@@ -0,0 +1,82 @@
|
||||
name: Debug Build
|
||||
|
||||
on:
|
||||
workflow_dispatch: # 手动触发
|
||||
inputs:
|
||||
platform:
|
||||
type: choice
|
||||
description: '选择测试平台'
|
||||
required: true
|
||||
default: 'ubuntu-22.04'
|
||||
options:
|
||||
- ubuntu-22.04
|
||||
- macos-latest
|
||||
- windows-latest
|
||||
|
||||
jobs:
|
||||
debug-build:
|
||||
runs-on: ${{ inputs.platform }}
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
|
||||
- name: Install Ubuntu dependencies
|
||||
if: inputs.platform == 'ubuntu-22.04'
|
||||
run: |
|
||||
sudo apt-get update
|
||||
sudo apt-get install -y \
|
||||
libwebkit2gtk-4.1-dev \
|
||||
librsvg2-dev \
|
||||
patchelf \
|
||||
libudev-dev \
|
||||
libasound2-dev \
|
||||
pkg-config \
|
||||
libgtk-3-dev \
|
||||
libayatana-appindicator3-dev
|
||||
|
||||
# 验证安装的包
|
||||
dpkg -l | grep -E 'webkit|appindicator|rsvg|udev|asound|gtk'
|
||||
|
||||
# 添加环境变量配置
|
||||
- name: Set up environment variables
|
||||
run: echo "${{ secrets.ENV_LOCAL_CONTENT }}" > .env.local
|
||||
|
||||
# 安装 pnpm
|
||||
- name: Install pnpm
|
||||
uses: pnpm/action-setup@v4
|
||||
with:
|
||||
version: 9
|
||||
run_install: false
|
||||
|
||||
# 设置 Node.js
|
||||
- name: Setup Node
|
||||
uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version: '22'
|
||||
cache: 'pnpm'
|
||||
|
||||
- name: Install dependencies
|
||||
run: pnpm install
|
||||
|
||||
- name: Build Vite + Tauri
|
||||
run: pnpm build
|
||||
|
||||
# 安装 Rust
|
||||
- name: install Rust stable
|
||||
uses: dtolnay/rust-toolchain@stable
|
||||
with:
|
||||
targets: ${{ inputs.platform == 'macos-latest' && 'aarch64-apple-darwin,x86_64-apple-darwin' || '' }}
|
||||
|
||||
- name: Rust cache
|
||||
uses: swatinem/rust-cache@v2
|
||||
with:
|
||||
workspaces: './src-tauri -> target'
|
||||
|
||||
# 只构建不发布
|
||||
- name: Build Tauri app
|
||||
uses: tauri-apps/tauri-action@v0
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
TAURI_SIGNING_PRIVATE_KEY: ${{ secrets.TAURI_SIGNING_PRIVATE_KEY }}
|
||||
TAURI_SIGNING_PRIVATE_KEY_PASSWORD: ${{ secrets.TAURI_SIGNING_PRIVATE_KEY_PASSWORD }}
|
||||
with:
|
||||
releaseId: "debug-build"
|
||||
27
.github/workflows/dependency-review.yml
vendored
Normal file
@@ -0,0 +1,27 @@
|
||||
# Dependency Review Action
|
||||
#
|
||||
# This Action will scan dependency manifest files that change as part of a Pull Request,
|
||||
# surfacing known-vulnerable versions of the packages declared or updated in the PR.
|
||||
# Once installed, if the workflow run is marked as required,
|
||||
# PRs introducing known-vulnerable packages will be blocked from merging.
|
||||
#
|
||||
# Source repository: https://github.com/actions/dependency-review-action
|
||||
name: 'Dependency Review'
|
||||
on: [pull_request]
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
jobs:
|
||||
dependency-review:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Harden Runner
|
||||
uses: step-security/harden-runner@0080882f6c36860b6ba35c610c98ce87d4e2f26f # v2.10.2
|
||||
with:
|
||||
egress-policy: audit
|
||||
|
||||
- name: 'Checkout Repository'
|
||||
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
||||
- name: 'Dependency Review'
|
||||
uses: actions/dependency-review-action@3b139cfc5fae8b618d3eae3675e383bb1769c019 # v4.5.0
|
||||
24
.github/workflows/greetings.yml
vendored
Normal file
@@ -0,0 +1,24 @@
|
||||
name: Greetings
|
||||
|
||||
on: [pull_request_target, issues]
|
||||
|
||||
# 顶层设置最小权限,推荐 contents: read
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
jobs:
|
||||
greeting:
|
||||
# 跳过 Renovate PR
|
||||
if: |
|
||||
github.actor != 'renovate[bot]' &&
|
||||
github.actor != 'renovate-preview[bot]'
|
||||
runs-on: ubuntu-latest
|
||||
permissions:
|
||||
issues: write
|
||||
pull-requests: write
|
||||
steps:
|
||||
- uses: actions/first-interaction@v1
|
||||
with:
|
||||
repo-token: ${{ secrets.GITHUB_TOKEN }}
|
||||
issue-message: "👋 感谢你提出第一个 Issue!我们会尽快查看并回复。请确保已经提供了足够的信息来描述问题。"
|
||||
pr-message: "🎉 感谢你提交第一个 PR!我们很高兴你参与到 HuLa 项目中来。我们会尽快审查你的贡献。"
|
||||
22
.github/workflows/label.yml
vendored
Normal file
@@ -0,0 +1,22 @@
|
||||
# This workflow will triage pull requests and apply a label based on the
|
||||
# paths that are modified in the pull request.
|
||||
#
|
||||
# To use this workflow, you will need to set up a .github/labeler.yml
|
||||
# file with configuration. For more information, see:
|
||||
# https://github.com/actions/labeler
|
||||
|
||||
name: Labeler
|
||||
on: [pull_request_target]
|
||||
|
||||
jobs:
|
||||
label:
|
||||
|
||||
runs-on: ubuntu-latest
|
||||
permissions:
|
||||
contents: read
|
||||
pull-requests: write
|
||||
|
||||
steps:
|
||||
- uses: actions/labeler@v4
|
||||
with:
|
||||
repo-token: "${{ secrets.GITHUB_TOKEN }}"
|
||||
145
.github/workflows/pr-chatbot-review.yml
vendored
Normal file
@@ -0,0 +1,145 @@
|
||||
name: PR Review Bot
|
||||
|
||||
on:
|
||||
pull_request:
|
||||
types: [opened, synchronize]
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
pull-requests: write
|
||||
|
||||
jobs:
|
||||
review:
|
||||
# 跳过 Renovate PR
|
||||
if: |
|
||||
github.actor != 'renovate[bot]' &&
|
||||
github.actor != 'renovate-preview[bot]'
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
fetch-depth: 0
|
||||
|
||||
- name: Get PR diff
|
||||
id: diff
|
||||
run: |
|
||||
git fetch origin ${{ github.event.pull_request.base.sha }}
|
||||
# 排除配置文件,只分析源代码文件
|
||||
DIFF=$(git diff ${{ github.event.pull_request.base.sha }} ${{ github.event.pull_request.head.sha }} -- \
|
||||
'src/**/*.vue' \
|
||||
'src/**/*.ts' \
|
||||
'src/**/*.tsx' \
|
||||
'src-tauri/**/*.rs' \
|
||||
':!:**/*.json' \
|
||||
':!:**/*.yaml' \
|
||||
':!:**/*.yml' \
|
||||
':!:**/*.config.*' \
|
||||
':!:**/*.lock' \
|
||||
':!:**/*.toml' \
|
||||
':!:.env*' \
|
||||
':!:.eslintrc*' \
|
||||
':!:.prettierrc*')
|
||||
|
||||
# 如果没有相关文件变更,设置一个提示信息
|
||||
if [ -z "$DIFF" ]; then
|
||||
echo "NO_CHANGES=true" >> $GITHUB_ENV
|
||||
echo "DIFF=没有检测到相关文件的变更。" >> $GITHUB_ENV
|
||||
else
|
||||
echo "NO_CHANGES=false" >> $GITHUB_ENV
|
||||
echo "DIFF<<EOF" >> $GITHUB_ENV
|
||||
echo "$DIFF" >> $GITHUB_ENV
|
||||
echo "EOF" >> $GITHUB_ENV
|
||||
fi
|
||||
|
||||
# 首先安装 pnpm
|
||||
- name: Install pnpm
|
||||
uses: pnpm/action-setup@v4
|
||||
with:
|
||||
version: 9
|
||||
run_install: false
|
||||
|
||||
# 然后设置 Node.js
|
||||
- name: Setup Node
|
||||
uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version: '22'
|
||||
cache: 'pnpm'
|
||||
|
||||
- name: Install dependencies
|
||||
run: |
|
||||
pnpm config set registry https://registry.npmmirror.com/
|
||||
pnpm install
|
||||
pnpm add openai
|
||||
|
||||
- name: Analyze PR
|
||||
id: analyze
|
||||
if: env.NO_CHANGES != 'true'
|
||||
uses: actions/github-script@v7
|
||||
env:
|
||||
DASHSCOPE_API_KEY: ${{ secrets.DASHSCOPE_API_KEY }}
|
||||
with:
|
||||
script: |
|
||||
const OpenAI = require('openai');
|
||||
|
||||
const openai = new OpenAI({
|
||||
apiKey: process.env.DASHSCOPE_API_KEY,
|
||||
baseURL: "https://dashscope.aliyuncs.com/compatible-mode/v1"
|
||||
});
|
||||
|
||||
const diff = process.env.DIFF;
|
||||
|
||||
try {
|
||||
const completion = await openai.chat.completions.create({
|
||||
model: "qwen-plus",
|
||||
messages: [{
|
||||
role: "system",
|
||||
content: "你是一个代码审查助手。请用中文分析以下代码变更,重点关注:\n" +
|
||||
"1. 代码逻辑的改动\n" +
|
||||
"2. 潜在的问题或优化空间\n" +
|
||||
"3. TypeScript 类型定义的准确性\n" +
|
||||
"4. Vue 组件的性能影响\n" +
|
||||
"5. Rust 代码的安全性和性能\n" +
|
||||
"请用中文简明扼要地总结。"
|
||||
}, {
|
||||
role: "user",
|
||||
content: `请分析以下代码变更并总结主要改动:\n\n${diff}`
|
||||
}],
|
||||
temperature: 0.7,
|
||||
max_tokens: 1000
|
||||
});
|
||||
|
||||
const analysis = completion.choices[0].message.content;
|
||||
core.setOutput('analysis', analysis);
|
||||
|
||||
await github.rest.issues.createComment({
|
||||
issue_number: context.issue.number,
|
||||
owner: context.repo.owner,
|
||||
repo: context.repo.repo,
|
||||
body: `
|
||||
PR 代码分析
|
||||
|
||||
${analysis}
|
||||
|
||||
*这是由通义千问 AI 自动生成的 PR 分析,仅供参考。*`
|
||||
});
|
||||
} catch (error) {
|
||||
core.setFailed(`分析失败: ${error.message}`);
|
||||
}
|
||||
|
||||
- name: Skip Analysis Comment
|
||||
if: env.NO_CHANGES == 'true'
|
||||
uses: actions/github-script@v7
|
||||
with:
|
||||
script: |
|
||||
await github.rest.issues.createComment({
|
||||
issue_number: context.issue.number,
|
||||
owner: context.repo.owner,
|
||||
repo: context.repo.repo,
|
||||
body: `## PR 代码分析
|
||||
|
||||
本次变更不包含需要分析的代码文件(src 目录下的 .vue/.ts/.tsx 文件或 src-tauri 目录下的 .rs 文件)。
|
||||
|
||||
---
|
||||
*这是自动生成的通知。*`
|
||||
});
|
||||
59
.github/workflows/release.yml
vendored
@@ -4,40 +4,67 @@ on:
|
||||
push:
|
||||
tags:
|
||||
- 'v*'
|
||||
workflow_dispatch:
|
||||
|
||||
# 确保默认情况下所有 job 都只有只读权限,只有需要写权限的 job(比如发布 release 的 job)才会单独提升权限,其他 job 依然保持最小权限,最大程度保护仓库安全
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
concurrency:
|
||||
group: release-${{ github.ref }}
|
||||
cancel-in-progress: true
|
||||
cancel-in-progress: true # 如果有新的发布任务,取消正在进行的任务
|
||||
|
||||
jobs:
|
||||
publish-tauri:
|
||||
permissions:
|
||||
contents: write
|
||||
contents: write # 授予写入仓库内容的权限
|
||||
strategy:
|
||||
fail-fast: false
|
||||
fail-fast: false # 某个平台构建失败不影响其他平台
|
||||
matrix:
|
||||
include:
|
||||
- platform: 'macos-latest' # for Arm based macs (M1 and above).
|
||||
args: '--target aarch64-apple-darwin'
|
||||
- platform: 'macos-latest' # for Intel based macs.
|
||||
args: '--target x86_64-apple-darwin'
|
||||
- platform: 'windows-latest'
|
||||
args: ''
|
||||
- platform: "macos-latest" # for Arm based macs (M1 and above).
|
||||
args: "--target aarch64-apple-darwin"
|
||||
- platform: "macos-latest" # for Intel based macs.
|
||||
args: "--target x86_64-apple-darwin"
|
||||
- platform: "ubuntu-22.04"
|
||||
args: ""
|
||||
- platform: "windows-latest"
|
||||
args: ""
|
||||
|
||||
runs-on: ${{ matrix.platform }}
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
|
||||
# 安装 Node.js
|
||||
- name: install dependencies (ubuntu only)
|
||||
if: matrix.platform == 'ubuntu-22.04'
|
||||
run: |
|
||||
sudo apt-get update
|
||||
sudo apt-get install -y \
|
||||
libwebkit2gtk-4.1-dev \
|
||||
librsvg2-dev \
|
||||
patchelf \
|
||||
libudev-dev \
|
||||
libasound2-dev \
|
||||
pkg-config \
|
||||
libgtk-3-dev \
|
||||
libayatana-appindicator3-dev
|
||||
|
||||
# 添加环境变量配置
|
||||
- name: Set up environment variables
|
||||
run: echo "${{ secrets.ENV_LOCAL_CONTENT }}" > .env.local
|
||||
|
||||
# 首先安装 pnpm
|
||||
- name: Install pnpm
|
||||
uses: pnpm/action-setup@v4
|
||||
with:
|
||||
version: 9
|
||||
run_install: false
|
||||
|
||||
# 然后设置 Node.js
|
||||
- name: Setup Node
|
||||
uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version: '22'
|
||||
|
||||
# 安装 pnpm
|
||||
- name: Install pnpm
|
||||
run: npm install -g pnpm@latest
|
||||
cache: 'pnpm'
|
||||
|
||||
- name: Install dependencies
|
||||
run: pnpm install
|
||||
@@ -71,4 +98,4 @@ jobs:
|
||||
releaseBody: 'See the assets to download and install this version.'
|
||||
releaseDraft: true
|
||||
prerelease: false
|
||||
args: ${{ matrix.args }}
|
||||
args: ${{ matrix.args }}
|
||||
58
.github/workflows/rust-clippy.yml
vendored
Normal file
@@ -0,0 +1,58 @@
|
||||
# This workflow uses actions that are not certified by GitHub.
|
||||
# They are provided by a third-party and are governed by
|
||||
# separate terms of service, privacy policy, and support
|
||||
# documentation.
|
||||
# rust-clippy is a tool that runs a bunch of lints to catch common
|
||||
# mistakes in your Rust code and help improve your Rust code.
|
||||
# More details at https://github.com/rust-lang/rust-clippy
|
||||
# and https://rust-lang.github.io/rust-clippy/
|
||||
|
||||
name: rust-clippy analyze
|
||||
|
||||
on:
|
||||
pull_request:
|
||||
# The branches below must be a subset of the branches above
|
||||
branches: [ "master" ]
|
||||
paths:
|
||||
- '**/*.rs'
|
||||
|
||||
jobs:
|
||||
rust-clippy-analyze:
|
||||
# 跳过 Renovate PR
|
||||
if: |
|
||||
github.actor != 'renovate[bot]' &&
|
||||
github.actor != 'renovate-preview[bot]'
|
||||
|
||||
name: Run rust-clippy analyzing
|
||||
runs-on: ubuntu-latest
|
||||
permissions:
|
||||
contents: read
|
||||
security-events: write
|
||||
actions: read # only required for a private repository by github/codeql-action/upload-sarif to get the Action run status
|
||||
steps:
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Install Rust toolchain
|
||||
uses: actions-rs/toolchain@16499b5e05bf2e26879000db0c1d13f7e13fa3af #@v1
|
||||
with:
|
||||
profile: minimal
|
||||
toolchain: stable
|
||||
components: clippy
|
||||
override: true
|
||||
|
||||
- name: Install required cargo
|
||||
run: cargo install clippy-sarif sarif-fmt
|
||||
|
||||
- name: Run rust-clippy
|
||||
run:
|
||||
cargo clippy
|
||||
--all-features
|
||||
--message-format=json | clippy-sarif | tee rust-clippy-results.sarif | sarif-fmt
|
||||
continue-on-error: true
|
||||
|
||||
- name: Upload analysis results to GitHub
|
||||
uses: github/codeql-action/upload-sarif@v3
|
||||
with:
|
||||
sarif_file: rust-clippy-results.sarif
|
||||
wait-for-processing: true
|
||||
6
.gitignore
vendored
@@ -19,7 +19,11 @@ dist-ssr
|
||||
*.njsproj
|
||||
*.sln
|
||||
*.sw?
|
||||
.idea
|
||||
|
||||
src-tauri/target
|
||||
|
||||
.history/
|
||||
.history/
|
||||
|
||||
/coverage
|
||||
.cursorrules
|
||||
8
.idea/.gitignore
generated
vendored
@@ -1,8 +0,0 @@
|
||||
# 默认忽略的文件
|
||||
/shelf/
|
||||
/workspace.xml
|
||||
# 基于编辑器的 HTTP 客户端请求
|
||||
/httpRequests/
|
||||
# Datasource local storage ignored files
|
||||
/dataSources/
|
||||
/dataSources.local.xml
|
||||
12
.idea/HuLa.iml
generated
@@ -1,12 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<module type="EMPTY_MODULE" version="4">
|
||||
<component name="NewModuleRootManager">
|
||||
<content url="file://$MODULE_DIR$">
|
||||
<sourceFolder url="file://$MODULE_DIR$/src-tauri/src" isTestSource="false" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/src-tauri/target" />
|
||||
</content>
|
||||
<orderEntry type="inheritedJdk" />
|
||||
<orderEntry type="sourceFolder" forTests="false" />
|
||||
<orderEntry type="library" name="ts-external-references" level="project" />
|
||||
</component>
|
||||
</module>
|
||||
6
.idea/bun.xml
generated
@@ -1,6 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="BunSettings">
|
||||
<option name="bunPath" value="$USER_HOME$/.bun/bin/bun" />
|
||||
</component>
|
||||
</project>
|
||||
62
.idea/codeStyles/Project.xml
generated
@@ -1,62 +0,0 @@
|
||||
<component name="ProjectCodeStyleConfiguration">
|
||||
<code_scheme name="Project" version="173">
|
||||
<option name="LINE_SEPARATOR" value=" " />
|
||||
<HTMLCodeStyleSettings>
|
||||
<option name="HTML_SPACE_INSIDE_EMPTY_TAG" value="true" />
|
||||
</HTMLCodeStyleSettings>
|
||||
<JSCodeStyleSettings version="0">
|
||||
<option name="USE_SEMICOLON_AFTER_STATEMENT" value="false" />
|
||||
<option name="FORCE_SEMICOLON_STYLE" value="true" />
|
||||
<option name="SPACE_BEFORE_FUNCTION_LEFT_PARENTH" value="false" />
|
||||
<option name="USE_DOUBLE_QUOTES" value="false" />
|
||||
<option name="FORCE_QUOTE_STYlE" value="true" />
|
||||
<option name="ENFORCE_TRAILING_COMMA" value="Remove" />
|
||||
<option name="SPACES_WITHIN_OBJECT_LITERAL_BRACES" value="true" />
|
||||
<option name="SPACES_WITHIN_IMPORTS" value="true" />
|
||||
</JSCodeStyleSettings>
|
||||
<TypeScriptCodeStyleSettings version="0">
|
||||
<option name="USE_SEMICOLON_AFTER_STATEMENT" value="false" />
|
||||
<option name="FORCE_SEMICOLON_STYLE" value="true" />
|
||||
<option name="SPACE_BEFORE_FUNCTION_LEFT_PARENTH" value="false" />
|
||||
<option name="USE_DOUBLE_QUOTES" value="false" />
|
||||
<option name="FORCE_QUOTE_STYlE" value="true" />
|
||||
<option name="ENFORCE_TRAILING_COMMA" value="Remove" />
|
||||
<option name="SPACES_WITHIN_OBJECT_LITERAL_BRACES" value="true" />
|
||||
<option name="SPACES_WITHIN_IMPORTS" value="true" />
|
||||
</TypeScriptCodeStyleSettings>
|
||||
<VueCodeStyleSettings>
|
||||
<option name="INTERPOLATION_NEW_LINE_AFTER_START_DELIMITER" value="false" />
|
||||
<option name="INTERPOLATION_NEW_LINE_BEFORE_END_DELIMITER" value="false" />
|
||||
</VueCodeStyleSettings>
|
||||
<codeStyleSettings language="HTML">
|
||||
<option name="SOFT_MARGINS" value="120" />
|
||||
<indentOptions>
|
||||
<option name="INDENT_SIZE" value="2" />
|
||||
<option name="CONTINUATION_INDENT_SIZE" value="2" />
|
||||
<option name="TAB_SIZE" value="2" />
|
||||
</indentOptions>
|
||||
</codeStyleSettings>
|
||||
<codeStyleSettings language="JavaScript">
|
||||
<option name="SOFT_MARGINS" value="120" />
|
||||
<indentOptions>
|
||||
<option name="INDENT_SIZE" value="2" />
|
||||
<option name="CONTINUATION_INDENT_SIZE" value="2" />
|
||||
<option name="TAB_SIZE" value="2" />
|
||||
</indentOptions>
|
||||
</codeStyleSettings>
|
||||
<codeStyleSettings language="TypeScript">
|
||||
<option name="SOFT_MARGINS" value="120" />
|
||||
<indentOptions>
|
||||
<option name="INDENT_SIZE" value="2" />
|
||||
<option name="CONTINUATION_INDENT_SIZE" value="2" />
|
||||
<option name="TAB_SIZE" value="2" />
|
||||
</indentOptions>
|
||||
</codeStyleSettings>
|
||||
<codeStyleSettings language="Vue">
|
||||
<option name="SOFT_MARGINS" value="120" />
|
||||
<indentOptions>
|
||||
<option name="CONTINUATION_INDENT_SIZE" value="2" />
|
||||
</indentOptions>
|
||||
</codeStyleSettings>
|
||||
</code_scheme>
|
||||
</component>
|
||||
5
.idea/codeStyles/codeStyleConfig.xml
generated
@@ -1,5 +0,0 @@
|
||||
<component name="ProjectCodeStyleConfiguration">
|
||||
<state>
|
||||
<option name="USE_PER_PROJECT_SETTINGS" value="true" />
|
||||
</state>
|
||||
</component>
|
||||
6
.idea/git_toolbox_blame.xml
generated
@@ -1,6 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="GitToolBoxBlameSettings">
|
||||
<option name="version" value="2" />
|
||||
</component>
|
||||
</project>
|
||||
5
.idea/icon.svg
generated
|
Before Width: | Height: | Size: 136 KiB |
6
.idea/inspectionProfiles/Project_Default.xml
generated
@@ -1,6 +0,0 @@
|
||||
<component name="InspectionProjectProfileManager">
|
||||
<profile version="1.0">
|
||||
<option name="myName" value="Project Default" />
|
||||
<inspection_tool class="Eslint" enabled="true" level="WARNING" enabled_by_default="true" />
|
||||
</profile>
|
||||
</component>
|
||||
6
.idea/jsLibraryMappings.xml
generated
@@ -1,6 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="JavaScriptLibraryMappings">
|
||||
<file url="PROJECT" libraries="{ts-external-references}" />
|
||||
</component>
|
||||
</project>
|
||||
14
.idea/libraries/ts_external_references.xml
generated
@@ -1,14 +0,0 @@
|
||||
<component name="libraryTable">
|
||||
<library name="ts-external-references" type="javaScript">
|
||||
<properties>
|
||||
<sourceFilesUrls>
|
||||
<item url="file://$PROJECT_DIR$/node_modules/.pnpm/@rspack+core@1.1.0_@swc+helpers@0.5.15/node_modules/@rspack/core/module.d.ts" />
|
||||
</sourceFilesUrls>
|
||||
</properties>
|
||||
<CLASSES>
|
||||
<root url="file://$PROJECT_DIR$/node_modules/.pnpm/@rspack+core@1.1.0_@swc+helpers@0.5.15/node_modules/@rspack/core/module.d.ts" />
|
||||
</CLASSES>
|
||||
<JAVADOC />
|
||||
<SOURCES />
|
||||
</library>
|
||||
</component>
|
||||
8
.idea/modules.xml
generated
@@ -1,8 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="ProjectModuleManager">
|
||||
<modules>
|
||||
<module fileurl="file://$PROJECT_DIR$/.idea/HuLa.iml" filepath="$PROJECT_DIR$/.idea/HuLa.iml" />
|
||||
</modules>
|
||||
</component>
|
||||
</project>
|
||||
6
.idea/prettier.xml
generated
@@ -1,6 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="PrettierConfiguration">
|
||||
<option name="myConfigurationMode" value="AUTOMATIC" />
|
||||
</component>
|
||||
</project>
|
||||
6
.idea/vcs.xml
generated
@@ -1,6 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="VcsDirectoryMappings">
|
||||
<mapping directory="" vcs="Git" />
|
||||
</component>
|
||||
</project>
|
||||
@@ -1,14 +1,15 @@
|
||||
import path from 'node:path'
|
||||
|
||||
function createCommand(prefix, join) {
|
||||
return (filenames) =>
|
||||
`${prefix} ${filenames.map((f) => path.relative(process.cwd(), f)).join(` ${join} `)}`
|
||||
return (filenames) => `${prefix} ${filenames.map((f) => path.relative(process.cwd(), f)).join(` ${join} `)}`
|
||||
}
|
||||
|
||||
export default {
|
||||
'*.{js,jsx,ts,tsx,vue}': [
|
||||
'oxlint src',
|
||||
createCommand('pnpm eslint --fix', ''),
|
||||
createCommand('prettier --write', '--write')
|
||||
createCommand('prettier --write', '--write'),
|
||||
// () => 'pnpm test:run',
|
||||
() => 'vue-tsc --noEmit'
|
||||
]
|
||||
}
|
||||
|
||||
2
.npmrc
@@ -1,2 +1,4 @@
|
||||
# 配置npm镜像源 (华为云)
|
||||
registry=https://repo.huaweicloud.com/repository/npm/
|
||||
# 严格检查 package.json 中 "engines" 字段指定的版本要求
|
||||
engine-strict=true
|
||||
14
.vscode/launch.json
vendored
@@ -7,6 +7,20 @@
|
||||
"command": "pnpm run tauri:dev",
|
||||
"cwd": "${workspaceFolder}"
|
||||
},
|
||||
{
|
||||
"type": "node-terminal",
|
||||
"name": "tauri:ios:dev",
|
||||
"request": "launch",
|
||||
"command": "pnpm run tauri:ios:dev",
|
||||
"cwd": "${workspaceFolder}"
|
||||
},
|
||||
{
|
||||
"type": "node-terminal",
|
||||
"name": "tauri:android:dev",
|
||||
"request": "launch",
|
||||
"command": "pnpm run tauri:android:dev",
|
||||
"cwd": "${workspaceFolder}"
|
||||
},
|
||||
{
|
||||
"type": "node-terminal",
|
||||
"name": "tauri:build",
|
||||
|
||||
7
.vscode/settings.json
vendored
Normal file
@@ -0,0 +1,7 @@
|
||||
{
|
||||
"css.customData": [
|
||||
".vscode/tailwindcss.json"
|
||||
],
|
||||
"java.configuration.updateBuildConfiguration": "disabled",
|
||||
"typescript.tsdk": "node_modules/typescript/lib",
|
||||
}
|
||||
56
.vscode/tailwindcss.json
vendored
Normal file
@@ -0,0 +1,56 @@
|
||||
{
|
||||
"version": 1.1,
|
||||
"atDirectives": [
|
||||
{
|
||||
"name": "@tailwind",
|
||||
"description": "Use the `@tailwind` directive to insert Tailwind's `base`, `components`, `utilities` and `screens` styles into your CSS.",
|
||||
"references": [
|
||||
{
|
||||
"name": "Tailwind Documentation",
|
||||
"url": "https://tailwindcss.com/docs/functions-and-directives#tailwind"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "@apply",
|
||||
"description": "Use the `@apply` directive to inline any existing utility classes into your own custom CSS. This is useful when you find a common utility pattern in your HTML that you’d like to extract to a new component.",
|
||||
"references": [
|
||||
{
|
||||
"name": "Tailwind Documentation",
|
||||
"url": "https://tailwindcss.com/docs/functions-and-directives#apply"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "@responsive",
|
||||
"description": "You can generate responsive variants of your own classes by wrapping their definitions in the `@responsive` directive:\n```css\n@responsive {\n .alert {\n background-color: #E53E3E;\n }\n}\n```\n",
|
||||
"references": [
|
||||
{
|
||||
"name": "Tailwind Documentation",
|
||||
"url": "https://tailwindcss.com/docs/functions-and-directives#responsive"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "@screen",
|
||||
"description": "The `@screen` directive allows you to create media queries that reference your breakpoints by **name** instead of duplicating their values in your own CSS:\n```css\n@screen sm {\n /* ... */\n}\n```\n…gets transformed into this:\n```css\n@media (min-width: 640px) {\n /* ... */\n}\n```\n",
|
||||
"references": [
|
||||
{
|
||||
"name": "Tailwind Documentation",
|
||||
"url": "https://tailwindcss.com/docs/functions-and-directives#screen"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "@variants",
|
||||
"description": "Generate `hover`, `focus`, `active` and other **variants** of your own utilities by wrapping their definitions in the `@variants` directive:\n```css\n@variants hover, focus {\n .btn-brand {\n background-color: #3182CE;\n }\n}\n```\n",
|
||||
"references": [
|
||||
{
|
||||
"name": "Tailwind Documentation",
|
||||
"url": "https://tailwindcss.com/docs/functions-and-directives#variants"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
385
CHANGELOG.md
@@ -1,5 +1,390 @@
|
||||
|
||||
|
||||
## [2.6.12](https://github.com/HuLaSpark/HuLa/compare/v2.6.11...v2.6.12) (2025-05-25)
|
||||
|
||||
|
||||
### ✨ Features | 新功能
|
||||
|
||||
* **component:** :sparkles: 增加右键emoji可以另存为 ([0dfdfc1](https://github.com/HuLaSpark/HuLa/commit/0dfdfc1269256baa59316b7936db94468b733b69))
|
||||
* **hook:** :sparkles: 增强文本选择复制 ([791b9cc](https://github.com/HuLaSpark/HuLa/commit/791b9cc69485d9c8245396d72cca834ac9a61aa0)), closes [#279](https://github.com/HuLaSpark/HuLa/issues/279)
|
||||
|
||||
|
||||
### 🐛 Bug Fixes | Bug 修复
|
||||
|
||||
* 修复ws链接断开没有重试问题 ([#276](https://github.com/HuLaSpark/HuLa/issues/276)) ([e068a25](https://github.com/HuLaSpark/HuLa/commit/e068a253e5215aacb606f852087e5e9e67010404))
|
||||
* **agreement:** :bug: 安装界面乱码 ([#277](https://github.com/HuLaSpark/HuLa/issues/277)) ([13c528a](https://github.com/HuLaSpark/HuLa/commit/13c528a35e11ee5fa7325beb1fcef8d28f2550e3)), closes [#275](https://github.com/HuLaSpark/HuLa/issues/275)
|
||||
* **hook:** :bug: 修复除emoji类型和图片类型都可以另存为的bug ([d2b6ab2](https://github.com/HuLaSpark/HuLa/commit/d2b6ab25d6fd7ea5a4e9df1d287fe3d3cc9a1b58))
|
||||
* **hook:** :bug: 修复mac系统右键会选中文本的问题 ([7e762e8](https://github.com/HuLaSpark/HuLa/commit/7e762e8524df0d17f85ca71eedb95d01dea7c8d3))
|
||||
* **hook:** :bug: 暂时移除/唤起ai快捷键识别 ([4a1a05c](https://github.com/HuLaSpark/HuLa/commit/4a1a05cf51b4bab670b2da5faac43bf33f902998))
|
||||
* **input:** :bug: 修复mac下输入框检查拼写和字母大小写问题 ([f8602e5](https://github.com/HuLaSpark/HuLa/commit/f8602e56ebbf4ae90f5f5dc7e7cebee317bf4ab4))
|
||||
* **mac:** :bug: 修复mac下点击关闭按钮无法关闭home窗口问题 ([2a63046](https://github.com/HuLaSpark/HuLa/commit/2a63046bbd2d7c4cd484d456c708ab47bdc8e792))
|
||||
* **view:** :bug: 修复托盘菜单内容不展示问题和托盘图标闪烁后不展示问题 ([c927be4](https://github.com/HuLaSpark/HuLa/commit/c927be4c3fd00cdde9f93c15793ea56ce5b11d14))
|
||||
* **view:** :bug: 修改邮箱输入框长度限制 ([61618db](https://github.com/HuLaSpark/HuLa/commit/61618db93cbe9512eceb66fbc50006a90f7d44f1)), closes [#278](https://github.com/HuLaSpark/HuLa/issues/278)
|
||||
* **worker:** :bug: 修复ws在重连后清空token导致无法对应获取消息问题 ([030fed7](https://github.com/HuLaSpark/HuLa/commit/030fed7d60a6eb03dccb49e6f108b2b5d67161e4))
|
||||
|
||||
|
||||
### ⚡️ Performance Improvements | 性能优化
|
||||
|
||||
* **global:** :zap: 增加ws健康检查兜底刷新最新消息内容、网络断线恢复重连 ([f734dca](https://github.com/HuLaSpark/HuLa/commit/f734dca910b17e3dd8a4d8e5e58cae3e7caaa333))
|
||||
|
||||
## [2.6.11](https://github.com/HuLaSpark/HuLa/compare/v2.6.10...v2.6.11) (2025-05-18)
|
||||
|
||||
|
||||
### ⚠ BREAKING CHANGES
|
||||
|
||||
* **component:** webSocket的计时器调整为worker计时器
|
||||
|
||||
### ✨ Features | 新功能
|
||||
|
||||
* **view:** :sparkles: 新增重置密码功能 ([b45cfd2](https://github.com/HuLaSpark/HuLa/commit/b45cfd22120c9fe46fead1fcb9daf5cc7b25f423))
|
||||
* **view:** :sparkles: 增加修订版本更新检测,修复每次版本变动都更新的bug ([#271](https://github.com/HuLaSpark/HuLa/issues/271)) ([833d09e](https://github.com/HuLaSpark/HuLa/commit/833d09efe4e218d483c37a87cb1bdd39443f46c7))
|
||||
|
||||
|
||||
### 🐛 Bug Fixes | Bug 修复
|
||||
|
||||
* **component:** :bug: 点击头像弹出个人信息面板 ([#273](https://github.com/HuLaSpark/HuLa/issues/273)) ([eaa4288](https://github.com/HuLaSpark/HuLa/commit/eaa42885c33a03d84cc2999c6a77a1eb4d5baf0a))
|
||||
* **component:** :bug: 修复回复消息表情不展示问题 ([f33f41d](https://github.com/HuLaSpark/HuLa/commit/f33f41d41f0f60fb5ab9e0cff6305b0cef548eea))
|
||||
* **component:** :bug: 修复图片截图功能文件大小问题 ([f816314](https://github.com/HuLaSpark/HuLa/commit/f816314115a02e10241f299536db9e54854a510f))
|
||||
* **component:** :bug: 修复因公告宽度导致聊天框布局混乱问题 ([2753e89](https://github.com/HuLaSpark/HuLa/commit/2753e89dd52f7a4a66eca3ffe5e8189bdc266170))
|
||||
* **component:** :bug: 修复mac下更新提示窗口可以调整大小、拖动、标题栏显示问题 ([c761486](https://github.com/HuLaSpark/HuLa/commit/c76148687cd86b2f56d34525bc3d56b859d74a13))
|
||||
* **component:** :bug: 优化windows上群聊的展示时机和样式 ([92dba12](https://github.com/HuLaSpark/HuLa/commit/92dba1218ffc113e9ea492c1ead20732c40bce32))
|
||||
* **ios:** :bug: 修复ios init导致无法启动问题 ([3ef1666](https://github.com/HuLaSpark/HuLa/commit/3ef1666ef7eadae9990fbeed357b5c1ccc085c12))
|
||||
* **notify:** :bug: 修复免打扰时还会触发托盘图标闪烁(windows) ([02ef835](https://github.com/HuLaSpark/HuLa/commit/02ef83585549851836b11dc1e58e7f47e5a06754))
|
||||
* **view:** :bug: 修复系统托盘闪烁和提示菜单内容不显示问题 ([4954b1c](https://github.com/HuLaSpark/HuLa/commit/4954b1cc241ed0275619d7c3b7db2b7ead7e680e))
|
||||
* **view:** :bug: 修复系统托盘信息提示菜单内容展示问题和点击跳转问题 ([2c8b15c](https://github.com/HuLaSpark/HuLa/commit/2c8b15cd3a971de02c50c682b2f3b8902ba52479))
|
||||
* **view:** :bug: 修复win下忘记密码页面背景颜色问题 ([bd825e0](https://github.com/HuLaSpark/HuLa/commit/bd825e0c32534be3cce4788de8b53d9c686c7464))
|
||||
|
||||
|
||||
### ⚡️ Performance Improvements | 性能优化
|
||||
|
||||
* **component:** :zap: 优化群聊成员和公告展示、以及完成搜索会话功能 ([a8bf8e0](https://github.com/HuLaSpark/HuLa/commit/a8bf8e00aba0ea0df35cc165ae0fc71aa333e511))
|
||||
* **component:** :zap: 优化消息回复表情功能 ([2081e99](https://github.com/HuLaSpark/HuLa/commit/2081e99d4ad45b8f13ebf57ae7f6b5cceb6f1dbc))
|
||||
* **component:** :zap: 优化emoji的样式和展示 ([f0aa001](https://github.com/HuLaSpark/HuLa/commit/f0aa0014a9d6a5ff32a537f4900a61ce340db6de))
|
||||
* **service:** :zap: 优化websocket可以在窗口隐藏后继续监听 ([884a53e](https://github.com/HuLaSpark/HuLa/commit/884a53e4484a1a0d0efbcb17f5761ddd80409461))
|
||||
* **view:** :zap: 优化在登录框下未提示更新、右下角窗口可拖动问题 ([777951b](https://github.com/HuLaSpark/HuLa/commit/777951bb8cff2383611a81e9aaaa4fc2c2e7f6a6))
|
||||
|
||||
## [2.6.10](https://github.com/HuLaSpark/HuLa/compare/v2.6.9...v2.6.10) (2025-05-05)
|
||||
|
||||
|
||||
### ✨ Features | 新功能
|
||||
|
||||
* **component:** :sparkles: 增加公告类型消息 ([f0b0656](https://github.com/HuLaSpark/HuLa/commit/f0b0656ddc874a597a49de2e4f8666913730e759))
|
||||
* **view:** :sparkles: 新增发布群公告功能 ([#259](https://github.com/HuLaSpark/HuLa/issues/259)) ([87fc30d](https://github.com/HuLaSpark/HuLa/commit/87fc30d170996022379b45d9b94110edbe1c5c74))
|
||||
|
||||
|
||||
### 🐛 Bug Fixes | Bug 修复
|
||||
|
||||
* **chat:** 隔离聊天窗口内部数据 ([#258](https://github.com/HuLaSpark/HuLa/issues/258)) ([635f729](https://github.com/HuLaSpark/HuLa/commit/635f72996b8e03e1c00bc20fe9ad870ae8d303f4))
|
||||
* **component:** :bug: 修复表情包圆角样式 ([e5e1725](https://github.com/HuLaSpark/HuLa/commit/e5e1725d42b41c2bc518e5f4c91cbdbb5f2a3421))
|
||||
* **component:** :bug: 修复公告排序问题、公告加载更多重复数据问题 ([8d21d22](https://github.com/HuLaSpark/HuLa/commit/8d21d2228a6f743faa1aa4bf635d9fe8d41efd1f))
|
||||
* **component:** :bug: 修复链接卡片无法点击后默认浏览器打开的问题 ([296a944](https://github.com/HuLaSpark/HuLa/commit/296a944c9f0312548e668ae1a6b831d821b502d2))
|
||||
* **component:** :bug: 修复全选意外选中全部内容的问题 ([6616a93](https://github.com/HuLaSpark/HuLa/commit/6616a932c57a7189d1540575332471d03684f49b))
|
||||
* **component:** :bug: 修改群聊中群消息设置逻辑 ([62460fb](https://github.com/HuLaSpark/HuLa/commit/62460fbfe04802764d5a4d60430d587ecbee528d))
|
||||
* **component:** :bug: 修改url文本解析样式 ([0d5455c](https://github.com/HuLaSpark/HuLa/commit/0d5455c9c590406878c572b667dbf8d21ae7a5b1))
|
||||
* **readme:** :bug: 修改readme中的描述 ([91feb14](https://github.com/HuLaSpark/HuLa/commit/91feb14ff4fa77c6bb11aeddd90863cd197fec78))
|
||||
|
||||
|
||||
### ⚡️ Performance Improvements | 性能优化
|
||||
|
||||
* **component:** :zap: 优化消息点赞和不满功能 ([4d17127](https://github.com/HuLaSpark/HuLa/commit/4d171273e9ba4f6e584206720eeae636d72626e6))
|
||||
|
||||
## [2.6.9](https://github.com/HuLaSpark/HuLa/compare/v2.6.8...v2.6.9) (2025-04-20)
|
||||
|
||||
|
||||
### ✨ Features | 新功能
|
||||
|
||||
* 回复可以回复表情包、图片 ([#251](https://github.com/HuLaSpark/HuLa/issues/251)) ([4180906](https://github.com/HuLaSpark/HuLa/commit/418090604a08a189ae94d487f762406a3bc853ab))
|
||||
* **hooks:** 优化消息类型判断逻辑 ([#249](https://github.com/HuLaSpark/HuLa/issues/249)) ([82c3fd5](https://github.com/HuLaSpark/HuLa/commit/82c3fd529c96153a198f1425d02751173761de0b))
|
||||
* **view:** :sparkles: 新增中版本强制更新功能 ([#252](https://github.com/HuLaSpark/HuLa/issues/252)) ([edbd3de](https://github.com/HuLaSpark/HuLa/commit/edbd3defccdfe0d1b6163e82193316f3044217db)), closes [#183](https://github.com/HuLaSpark/HuLa/issues/183) [#183](https://github.com/HuLaSpark/HuLa/issues/183) [#183](https://github.com/HuLaSpark/HuLa/issues/183)
|
||||
* **view:** :sparkles: 新增子窗口创建方式和邀请加群功能 ([b2a15ca](https://github.com/HuLaSpark/HuLa/commit/b2a15ca5e219b32115702d06f937a396ddaf57c5))
|
||||
* **worker:** :sparkles: 代理实现 ([#232](https://github.com/HuLaSpark/HuLa/issues/232)) ([d4bf21d](https://github.com/HuLaSpark/HuLa/commit/d4bf21d464cc1faea22abcb5369daef6360cd1e0)), closes [#197](https://github.com/HuLaSpark/HuLa/issues/197)
|
||||
|
||||
|
||||
### 🐛 Bug Fixes | Bug 修复
|
||||
|
||||
* 修复回复框错位 BUG ([#256](https://github.com/HuLaSpark/HuLa/issues/256)) ([e46ee95](https://github.com/HuLaSpark/HuLa/commit/e46ee95bb872812101fb0938a6ffdf161a28308f)), closes [#253](https://github.com/HuLaSpark/HuLa/issues/253)
|
||||
* **common:** :bug: 修复回复表情包或者emoji的时候位置偏移 ([f9a2b18](https://github.com/HuLaSpark/HuLa/commit/f9a2b184735a718ea1063f0914837d0bef36367c))
|
||||
* **common:** :bug: 修复FloatBlockList组件悬浮层bug ([2b9a7ed](https://github.com/HuLaSpark/HuLa/commit/2b9a7edaef876aeea2a9c4605e136c413675a4f2))
|
||||
* **config:** :bug: 修复renovate配置问题 ([6b02f3f](https://github.com/HuLaSpark/HuLa/commit/6b02f3fc61f73bf65e594e9aa23aa610996be429))
|
||||
* **hook:** :bug: 修复回复时出现空格符和回复替换等问题 ([b8c3c4e](https://github.com/HuLaSpark/HuLa/commit/b8c3c4eec26212a584f3e368c7b4782b2c5e8f07))
|
||||
* **hook:** :bug: 修改mac下子窗口创建逻辑 ([7f8795c](https://github.com/HuLaSpark/HuLa/commit/7f8795c36a158359aaf82e491c927ddf5c80c8ee))
|
||||
* **hooks:** :bug: 修复一些xss的问题 ([bcce4a0](https://github.com/HuLaSpark/HuLa/commit/bcce4a01d4a0955d82dcbb82ec570435fa69a343))
|
||||
* **layout:** :bug: 回退增加系统通知功能 ([c7fbdd7](https://github.com/HuLaSpark/HuLa/commit/c7fbdd7a0290355a186732f2419ceddc20741e01))
|
||||
* **message:** 将消息内容解析为文本而不当做 HTML 处理 [#237](https://github.com/HuLaSpark/HuLa/issues/237) ([#246](https://github.com/HuLaSpark/HuLa/issues/246)) ([3441b8a](https://github.com/HuLaSpark/HuLa/commit/3441b8a28286c9e69f27338a6974ebd26eeb69bf))
|
||||
* **Plugins:** :bug: 修复插件卸载后,重新打开插件列表,状态依旧是安装状态问题 ([#247](https://github.com/HuLaSpark/HuLa/issues/247)) ([3cee949](https://github.com/HuLaSpark/HuLa/commit/3cee9498d79a0f2b00fd5ecbac87f3d260d4b449))
|
||||
* **Plugins:** :bug: 修复插件卸载后,重新打开插件列表,状态依旧是安装状态问题(list布局) ([#248](https://github.com/HuLaSpark/HuLa/issues/248)) ([9e4f31e](https://github.com/HuLaSpark/HuLa/commit/9e4f31ea526230a0ce0e1f8b48302c3dc5792eb8))
|
||||
* **view:** :bug: 修复会话中转义字符的问题 ([b793f71](https://github.com/HuLaSpark/HuLa/commit/b793f71f26507a4e9b6402dd8a3dd3cfac75c5f8))
|
||||
|
||||
|
||||
### ⚡️ Performance Improvements | 性能优化
|
||||
|
||||
* **component:** :zap: 优化链接的展示和解析 ([74bf370](https://github.com/HuLaSpark/HuLa/commit/74bf3702c73b751c0e3165c357064136896d548f))
|
||||
* **component:** :zap: 优化屏蔽后的逻辑 ([2a5b9de](https://github.com/HuLaSpark/HuLa/commit/2a5b9de68b64ceacd535074aaf6284060d869918))
|
||||
* **component:** :zap: 优化群备注和群昵称(beta) ([fab231a](https://github.com/HuLaSpark/HuLa/commit/fab231a9166acac97d50426109e2e37364a2d794))
|
||||
* **rust:** :zap: 修改mac系统托盘的右键菜单 ([6dbfa49](https://github.com/HuLaSpark/HuLa/commit/6dbfa496b4c18581e5915890033c6ebdf65a6976))
|
||||
|
||||
## [2.6.8](https://github.com/HuLaSpark/HuLa/compare/v2.6.7...v2.6.8) (2025-03-26)
|
||||
|
||||
|
||||
### ✨ Features | 新功能
|
||||
|
||||
* **component:** :sparkles: 增加兼容七牛云上传功能 ([eca26a9](https://github.com/HuLaSpark/HuLa/commit/eca26a977d315da23dec8c178b96b7db3b8a804f))
|
||||
* **component:** :sparkles: 增加邮箱登录、PIN输入框 ([4be6db7](https://github.com/HuLaSpark/HuLa/commit/4be6db7d31e77efd93cef9c4108ae0a8cc7ef2e0))
|
||||
|
||||
|
||||
### 🐛 Bug Fixes | Bug 修复
|
||||
|
||||
* **chat:** 修复回复消息导致光标偏移 [#223](https://github.com/HuLaSpark/HuLa/issues/223) ([#224](https://github.com/HuLaSpark/HuLa/issues/224)) ([2cbf727](https://github.com/HuLaSpark/HuLa/commit/2cbf7273fb107de1bf363958758aa0a61e1206b4))
|
||||
* **component:** 🐛 使用setShow手动触发Popover显示 ([#230](https://github.com/HuLaSpark/HuLa/issues/230)) ([28fdc79](https://github.com/HuLaSpark/HuLa/commit/28fdc79e1891ca0f81cafe44d65c806bf2bda4f8)), closes [#210](https://github.com/HuLaSpark/HuLa/issues/210) [#210](https://github.com/HuLaSpark/HuLa/issues/210) [#210](https://github.com/HuLaSpark/HuLa/issues/210)
|
||||
* **hooks:** replace focus call with focusOn function in useMsgInput ([#227](https://github.com/HuLaSpark/HuLa/issues/227)) ([9deefc0](https://github.com/HuLaSpark/HuLa/commit/9deefc0fa21df42def3aac8012d622e46a270ef4)), closes [#151](https://github.com/HuLaSpark/HuLa/issues/151)
|
||||
* Implement placeholder by CSS ([#226](https://github.com/HuLaSpark/HuLa/issues/226)) ([9e867c6](https://github.com/HuLaSpark/HuLa/commit/9e867c672c482e3ca38b03033d80cd79df1c457d))
|
||||
|
||||
## [2.6.7](https://github.com/HuLaSpark/HuLa/compare/v2.6.6...v2.6.7) (2025-03-18)
|
||||
|
||||
|
||||
### ✨ Features | 新功能
|
||||
|
||||
* **component:** :sparkles: 增加表情包功能 ([f0e9f27](https://github.com/HuLaSpark/HuLa/commit/f0e9f27c5fbf28759c5f6520ba49af5649714bb1))
|
||||
* **component:** :sparkles: 增加动画表情处理 ([bc65a3b](https://github.com/HuLaSpark/HuLa/commit/bc65a3bd5a97255dbaade6fc4f5e63f29647fdcf))
|
||||
* **component:** :sparkles: 增加会话列表右键菜单功能(免打扰) ([6731c89](https://github.com/HuLaSpark/HuLa/commit/6731c89c32ed32c38d1913876d3e9df3d168f969))
|
||||
* **component:** :sparkles: 增加localStorage缓存消息列表(暂时) ([e714431](https://github.com/HuLaSpark/HuLa/commit/e7144313a4858bd5c918e9d9a4d377b0ce8cadbc))
|
||||
* **vite:** add vite-plugin-vue-devtools for enhanced debugging ([#219](https://github.com/HuLaSpark/HuLa/issues/219)) ([a8b548c](https://github.com/HuLaSpark/HuLa/commit/a8b548cb0bca1eedcd5d16e4589eded8761d2455))
|
||||
|
||||
|
||||
### 🐛 Bug Fixes | Bug 修复
|
||||
|
||||
* **chat-editor:** record cursor position correctly ([#221](https://github.com/HuLaSpark/HuLa/issues/221)) ([6ad6c58](https://github.com/HuLaSpark/HuLa/commit/6ad6c586912eeeb04a6ea49d9bbf0b5962fdfcc6))
|
||||
* **component:** :bug: 完善消息免打扰功能和样式 ([0eed677](https://github.com/HuLaSpark/HuLa/commit/0eed67780521a28cb51a4272498add8f008f784f))
|
||||
* **component:** :bug: 修复缓存存储问题、会话切换后聊天框内容混合问题 ([51b7d62](https://github.com/HuLaSpark/HuLa/commit/51b7d621fad80cee15aedf201068103c4e88a23d))
|
||||
* **component:** :bug: 修复回复的内容宽度问题 ([0dcddfc](https://github.com/HuLaSpark/HuLa/commit/0dcddfc810b731e194c2a37f16d56473bbf0607a))
|
||||
* **component:** :bug: 修复新消息回复无法跳转问题 ([65264b3](https://github.com/HuLaSpark/HuLa/commit/65264b3dacb8820a9938f107408ec31306a0738e))
|
||||
* **component:** :bug: 修复用户上线推送的数据类型错误问题 ([474a388](https://github.com/HuLaSpark/HuLa/commit/474a3886f45476e2640a86f3fb8c991fc96399ee))
|
||||
* **component:** :bug: 修复右键二级菜单图标错误bug ([0b97ccb](https://github.com/HuLaSpark/HuLa/commit/0b97ccb76785e5f8a13466ad93a8b32beb213572))
|
||||
* **component:** :bug: 修复win下聊天框滚动条隐藏坍塌问题和会话快速切换的异步竞态问题 ([a39c054](https://github.com/HuLaSpark/HuLa/commit/a39c054b6264fb2cc0addfb2d1970b880ba53fd4))
|
||||
* **layout:** :bug: 修复F5刷新会使窗口变大的bug ([#214](https://github.com/HuLaSpark/HuLa/issues/214)) ([51baa1a](https://github.com/HuLaSpark/HuLa/commit/51baa1a907a1339d354fbe3f131cdf87a9d9a49a))
|
||||
* **store:** :bug: 修复群聊列表获取不到问题(后续把stores中定义的reactive换为ref) ([40e9786](https://github.com/HuLaSpark/HuLa/commit/40e97862153a084542bb263f2d5bd33f3dc39472))
|
||||
* **util:** :bug: 修复消息上报在未登录的时候触发问题 ([34e6633](https://github.com/HuLaSpark/HuLa/commit/34e663373b1885fab34724b6ef2091a9bb9a9bc0))
|
||||
* **view:** :bug: 修复重新启动应用后的登录逻辑 ([1560cb4](https://github.com/HuLaSpark/HuLa/commit/1560cb4a0bc8729f4b008ba8c96ee6918a8b6dfe))
|
||||
|
||||
|
||||
### ⚡️ Performance Improvements | 性能优化
|
||||
|
||||
* **component:** :zap: 优化好友申请列表 ([52f9047](https://github.com/HuLaSpark/HuLa/commit/52f9047299282c1d5b2f67efbd6f2fc865fc476e))
|
||||
* **component:** :zap: 优化好友申请列表和群详情 ([15d16e5](https://github.com/HuLaSpark/HuLa/commit/15d16e567f2082c0ee87939a9816e1c7c84ae362))
|
||||
* **component:** :zap: 优化好友页面和聊天页面切换需要重新加载问题 ([20f52e4](https://github.com/HuLaSpark/HuLa/commit/20f52e471bd8684036b1ecfa8ecf6064ea75cc18))
|
||||
* **component:** :zap: 优化群聊操作(我的群昵称、群备注、群名称) ([dcf4664](https://github.com/HuLaSpark/HuLa/commit/dcf4664a185b6ab83b324a9e40e191b99c6e09a9))
|
||||
* **component:** :zap: 优化群聊详情显示 ([6960555](https://github.com/HuLaSpark/HuLa/commit/696055585c9d734d069b0d9d797aad7b62cd88ee))
|
||||
* **component:** :zap: 优化头像上传功能(群头像) ([7e865c7](https://github.com/HuLaSpark/HuLa/commit/7e865c7cb0e6f1c6d4fb87c1a95a8aa2471304fa))
|
||||
* **component:** :zap: 优化消息列表 ([1bc38ba](https://github.com/HuLaSpark/HuLa/commit/1bc38ba4c1dea8d0ca830166b9bbbc3e6f41c845))
|
||||
* **component:** :zap: 优化虚拟列表 ([19d699b](https://github.com/HuLaSpark/HuLa/commit/19d699b19f7e324ca01c852400add6a98ed3ef5f))
|
||||
* **component:** :zap: 优化虚拟列表滚动掉帧问题 ([3bea8d9](https://github.com/HuLaSpark/HuLa/commit/3bea8d9f02ae179528b8673eb3f9cc6894a58381))
|
||||
* **component:** :zap: 优化虚拟列表加载更多闪屏的问题和消息气泡动画问题 ([530ce3e](https://github.com/HuLaSpark/HuLa/commit/530ce3e63d74d97a2fbc10ad862a7fe166365bb0))
|
||||
* **component:** :zap: 优化右键二级菜单弹出的问题 ([90d55bb](https://github.com/HuLaSpark/HuLa/commit/90d55bb4baefa287fd458ed8f089786a9fb5d372))
|
||||
* **component:** :zap: 优化右键二级菜单点击事件不触发问题、拆分屏蔽消息和免打扰功能 ([29bec4f](https://github.com/HuLaSpark/HuLa/commit/29bec4f373d2e8ce1dbcc5a88d02844b70a0b9e1))
|
||||
* **view:** :zap: 优化群主管理员标签样式 ([64eefbe](https://github.com/HuLaSpark/HuLa/commit/64eefbe7bdaef03b4598776c64f01ecdbe90626d))
|
||||
* **view:** :zap: 优化申请群聊功能 ([c492c0d](https://github.com/HuLaSpark/HuLa/commit/c492c0d18e9b0288ae45827b71bd29f4632bb636))
|
||||
* **view:** :zap: 优化项目中类型的编写和定义方式 ([a832dc1](https://github.com/HuLaSpark/HuLa/commit/a832dc1220468de33f724c78256047a84ff62811))
|
||||
|
||||
# Changelog
|
||||
|
||||
## <small>2.6.6 (2025-03-01)</small>
|
||||
|
||||
* fix(global): :bug: 修复一些内容的类型问题 ([2c16343](https://github.com/HuLaSpark/HuLa/commit/2c16343))
|
||||
* fix(service): :bug: 修复oss接口配置问题 ([5e2f6e4](https://github.com/HuLaSpark/HuLa/commit/5e2f6e4))
|
||||
* perf(component): :zap: 优化一些功能的操作体验和样式 ([31c1709](https://github.com/HuLaSpark/HuLa/commit/31c1709))
|
||||
* perf(service): :zap: 优化http模块 ([801ec4e](https://github.com/HuLaSpark/HuLa/commit/801ec4e))
|
||||
* feat(component): :sparkles: 增加预加载页面样式 ([90f108a](https://github.com/HuLaSpark/HuLa/commit/90f108a))
|
||||
|
||||
## <small>2.6.5 (2025-02-27)</small>
|
||||
|
||||
* fix(common): :bug: 修复登出账号时没有清空系统托盘图标上的未读数(MacOS) ([383a776](https://github.com/HuLaSpark/HuLa/commit/383a776))
|
||||
* fix(component): :bug: 修复加好友/群聊顶部栏不可操作问题和窗口通信响应式问题 ([b08e7d8](https://github.com/HuLaSpark/HuLa/commit/b08e7d8))
|
||||
* fix(component): :bug: 修复跳转到会话选中回退第一个问题 ([029f3f9](https://github.com/HuLaSpark/HuLa/commit/029f3f9))
|
||||
* fix(config): :bug: 修复检查更新问题(暂时先切换回github) ([d6d488b](https://github.com/HuLaSpark/HuLa/commit/d6d488b))
|
||||
* fix(file): :bug: 修复git未监听文件名大小写修改 ([9a8659b](https://github.com/HuLaSpark/HuLa/commit/9a8659b))
|
||||
* fix(git): :bug: 删除多余的文件,导致打包出错 ([df7fed3](https://github.com/HuLaSpark/HuLa/commit/df7fed3))
|
||||
* fix(global): :bug: 修改全局使用到的一些类型为string ([3333aa0](https://github.com/HuLaSpark/HuLa/commit/3333aa0)), closes [#211](https://github.com/HuLaSpark/HuLa/issues/211)
|
||||
* fix(worker): :bug: 修复ws连接问题和一些页面组件问题 ([eadea02](https://github.com/HuLaSpark/HuLa/commit/eadea02))
|
||||
* perf(component): :zap: 优化侧边栏功能 ([d1f831d](https://github.com/HuLaSpark/HuLa/commit/d1f831d))
|
||||
* perf(component): :zap: 优化加好友/群聊窗体样式和功能 ([6716913](https://github.com/HuLaSpark/HuLa/commit/6716913))
|
||||
* perf(component): :zap: 优化自动登录功能 ([5cb9bfc](https://github.com/HuLaSpark/HuLa/commit/5cb9bfc))
|
||||
* perf(service): :zap: 优化群聊功能 (#208) ([0e07e33](https://github.com/HuLaSpark/HuLa/commit/0e07e33)), closes [#208](https://github.com/HuLaSpark/HuLa/issues/208)
|
||||
* perf(view): :zap: 优化登录逻辑 ([67cad46](https://github.com/HuLaSpark/HuLa/commit/67cad46))
|
||||
* perf(view): :zap: 优化群聊侧边栏用户信息展示 ([4b03f57](https://github.com/HuLaSpark/HuLa/commit/4b03f57))
|
||||
* perf(view): :zap: 优化群聊侧边栏状态展示和聊天框顶部栏状态展示 ([e15cf9b](https://github.com/HuLaSpark/HuLa/commit/e15cf9b))
|
||||
* perf(view): :zap: 优化图片查看器 ([22f84f1](https://github.com/HuLaSpark/HuLa/commit/22f84f1))
|
||||
* feat(component): :sparkles: 新增用户状态切换 ([5098733](https://github.com/HuLaSpark/HuLa/commit/5098733))
|
||||
* feat(service): :sparkles: 增加双token校验 ([776b6ec](https://github.com/HuLaSpark/HuLa/commit/776b6ec)), closes [#IBNT91](https://github.com/HuLaSpark/HuLa/issues/IBNT91)
|
||||
* feat(view): :sparkles: 添加好友或群,基本完成了查找添加好友相关的内容,可以查出来群聊信息暂时还没有写添加 (#209) ([90a8985](https://github.com/HuLaSpark/HuLa/commit/90a8985)), closes [#209](https://github.com/HuLaSpark/HuLa/issues/209)
|
||||
* chore: 发布 v2.6.4 ([ac9d922](https://github.com/HuLaSpark/HuLa/commit/ac9d922))
|
||||
* [Snyk] Upgrade @tauri-apps/plugin-clipboard-manager from 2.2.0 to 2.2.1 (#206) ([54354c6](https://github.com/HuLaSpark/HuLa/commit/54354c6)), closes [#206](https://github.com/HuLaSpark/HuLa/issues/206)
|
||||
* [Snyk] Upgrade @tauri-apps/plugin-http from 2.2.0 to 2.3.0 (#207) ([cbf5f4d](https://github.com/HuLaSpark/HuLa/commit/cbf5f4d)), closes [#207](https://github.com/HuLaSpark/HuLa/issues/207)
|
||||
* docs(readme): :memo: 更新赞助者名单 ([4d9aabe](https://github.com/HuLaSpark/HuLa/commit/4d9aabe))
|
||||
|
||||
|
||||
### BREAKING CHANGE
|
||||
|
||||
* 一次性查出多条。添加好友用的是AddFriendsModal.vu页面进行一些修改,
|
||||
|
||||
closed https://gitee.com/HuLaSpark/HuLa/issues/IBJYSD
|
||||
|
||||
* fix(view): :bug: 修改创建窗体minH的问题
|
||||
|
||||
## <small>2.6.4 (2025-02-21)</small>
|
||||
|
||||
* fix(common): :bug: 修复登出账号时没有清空系统托盘图标上的未读数(MacOS) ([383a776](https://github.com/HuLaSpark/HuLa/commit/383a776))
|
||||
* fix(component): :bug: 修复跳转到会话选中回退第一个问题 ([029f3f9](https://github.com/HuLaSpark/HuLa/commit/029f3f9))
|
||||
* fix(config): :bug: 修复检查更新问题(暂时先切换回github) ([d6d488b](https://github.com/HuLaSpark/HuLa/commit/d6d488b))
|
||||
* fix(file): :bug: 修复git未监听文件名大小写修改 ([9a8659b](https://github.com/HuLaSpark/HuLa/commit/9a8659b))
|
||||
* fix(git): :bug: 删除多余的文件,导致打包出错 ([df7fed3](https://github.com/HuLaSpark/HuLa/commit/df7fed3))
|
||||
* fix(worker): :bug: 修复ws连接问题和一些页面组件问题 ([eadea02](https://github.com/HuLaSpark/HuLa/commit/eadea02))
|
||||
* feat(component): :sparkles: 新增用户状态切换 ([5098733](https://github.com/HuLaSpark/HuLa/commit/5098733))
|
||||
* feat(service): :sparkles: 增加双token校验 ([776b6ec](https://github.com/HuLaSpark/HuLa/commit/776b6ec)), closes [#IBNT91](https://github.com/HuLaSpark/HuLa/issues/IBNT91)
|
||||
* [Snyk] Upgrade @tauri-apps/plugin-clipboard-manager from 2.2.0 to 2.2.1 (#206) ([54354c6](https://github.com/HuLaSpark/HuLa/commit/54354c6)), closes [#206](https://github.com/HuLaSpark/HuLa/issues/206)
|
||||
* [Snyk] Upgrade @tauri-apps/plugin-http from 2.2.0 to 2.3.0 (#207) ([cbf5f4d](https://github.com/HuLaSpark/HuLa/commit/cbf5f4d)), closes [#207](https://github.com/HuLaSpark/HuLa/issues/207)
|
||||
* perf(view): :zap: 优化群聊侧边栏用户信息展示 ([4b03f57](https://github.com/HuLaSpark/HuLa/commit/4b03f57))
|
||||
* perf(view): :zap: 优化群聊侧边栏状态展示和聊天框顶部栏状态展示 ([e15cf9b](https://github.com/HuLaSpark/HuLa/commit/e15cf9b))
|
||||
* perf(view): :zap: 优化图片查看器 ([22f84f1](https://github.com/HuLaSpark/HuLa/commit/22f84f1))
|
||||
* docs(readme): :memo: 更新赞助者名单 ([4d9aabe](https://github.com/HuLaSpark/HuLa/commit/4d9aabe))
|
||||
|
||||
## <small>2.6.3 (2025-02-15)</small>
|
||||
|
||||
* feat(component): :sparkles: 增加更换头像功能 ([63ba2e6](https://github.com/HuLaSpark/HuLa/commit/63ba2e6))
|
||||
* feat(directive): :sparkles: 新增图片查看器 ([6a06f32](https://github.com/HuLaSpark/HuLa/commit/6a06f32))
|
||||
* feat(preview): :sparkles: 增加本地开发配置以及赞助渠道 ([788da74](https://github.com/HuLaSpark/HuLa/commit/788da74))
|
||||
* feat(service): ✨ 可选参数禁用http请求重试 (#202) ([223b9f2](https://github.com/HuLaSpark/HuLa/commit/223b9f2)), closes [#202](https://github.com/HuLaSpark/HuLa/issues/202)
|
||||
* build(deps-dev): bump vitest from 3.0.1 to 3.0.5 (#201) ([2a857e3](https://github.com/HuLaSpark/HuLa/commit/2a857e3)), closes [#201](https://github.com/HuLaSpark/HuLa/issues/201)
|
||||
* build(deps): bump dompurify from 3.2.3 to 3.2.4 (#205) ([835fb88](https://github.com/HuLaSpark/HuLa/commit/835fb88)), closes [#205](https://github.com/HuLaSpark/HuLa/issues/205)
|
||||
* build(mobile): :package: 修改移动端文件的位置和配置 ([12e81fd](https://github.com/HuLaSpark/HuLa/commit/12e81fd))
|
||||
* perf(common): :zap: 优化图片查看器和请求重试报错机制 ([25c39b7](https://github.com/HuLaSpark/HuLa/commit/25c39b7))
|
||||
* perf(component): :zap: 优化图片查看器 ([3afd91e](https://github.com/HuLaSpark/HuLa/commit/3afd91e))
|
||||
* fix(view): :bug: 修复好友申请方不知道对方已同意的bug (#203) ([01fd658](https://github.com/HuLaSpark/HuLa/commit/01fd658)), closes [#203](https://github.com/HuLaSpark/HuLa/issues/203)
|
||||
* Dev retry (#199) ([7abc4b3](https://github.com/HuLaSpark/HuLa/commit/7abc4b3)), closes [#199](https://github.com/HuLaSpark/HuLa/issues/199)
|
||||
* docs: :memo: 更新wx群二维码 ([1ad09e6](https://github.com/HuLaSpark/HuLa/commit/1ad09e6))
|
||||
|
||||
## <small>2.6.2 (2025-01-23)</small>
|
||||
|
||||
* feat(strategy): :sparkles: 增加表情包功能支持 ([6b19f07](https://github.com/HuLaSpark/HuLa/commit/6b19f07))
|
||||
* feat(strategy): :sparkles: 增加发送图片功能(beta) ([f1aef7c](https://github.com/HuLaSpark/HuLa/commit/f1aef7c))
|
||||
* chore(deps): update dependency vite to v6.0.9 [security] (#195) ([5777318](https://github.com/HuLaSpark/HuLa/commit/5777318)), closes [#195](https://github.com/HuLaSpark/HuLa/issues/195)
|
||||
* perf(component): :zap: 优化组件加载、浏览器指纹生成 (#192) ([0252956](https://github.com/HuLaSpark/HuLa/commit/0252956)), closes [#192](https://github.com/HuLaSpark/HuLa/issues/192)
|
||||
* perf(icon): :zap: 修改全平台icon(除了mac) (#193) ([eea52ea](https://github.com/HuLaSpark/HuLa/commit/eea52ea)), closes [#193](https://github.com/HuLaSpark/HuLa/issues/193)
|
||||
* perf(view): :zap: 优化已删除好友的界面展示 ([69d7722](https://github.com/HuLaSpark/HuLa/commit/69d7722))
|
||||
|
||||
## <small>2.6.1 (2025-01-17)</small>
|
||||
|
||||
* fix(Android): :bug: 修复安卓启动配置 (#191) ([5176aee](https://github.com/HuLaSpark/HuLa/commit/5176aee)), closes [#191](https://github.com/HuLaSpark/HuLa/issues/191)
|
||||
* fix(build): :bug: 去除alsa-sys的安装 ([b5f8402](https://github.com/HuLaSpark/HuLa/commit/b5f8402))
|
||||
* fix(build): :bug: 修复ubuntu alsa-sys包版本 (#145) ([0840d7e](https://github.com/HuLaSpark/HuLa/commit/0840d7e)), closes [#145](https://github.com/HuLaSpark/HuLa/issues/145)
|
||||
* fix(build): :bug: 修复ubuntu CI打包问题 (#144) ([c4f46f8](https://github.com/HuLaSpark/HuLa/commit/c4f46f8)), closes [#144](https://github.com/HuLaSpark/HuLa/issues/144)
|
||||
* fix(common): :bug: 修复系统托盘状态切换问题 (#153) ([00e2a89](https://github.com/HuLaSpark/HuLa/commit/00e2a89)), closes [#153](https://github.com/HuLaSpark/HuLa/issues/153)
|
||||
* fix(common): :bug: 修复set_badge_count方法没有处理报错问题 (#140) ([4d4bd9c](https://github.com/HuLaSpark/HuLa/commit/4d4bd9c)), closes [#140](https://github.com/HuLaSpark/HuLa/issues/140)
|
||||
* fix(component): :bug: 修复tray设置窗口大小问题 (#149) ([7aaabb2](https://github.com/HuLaSpark/HuLa/commit/7aaabb2)), closes [#149](https://github.com/HuLaSpark/HuLa/issues/149)
|
||||
* fix(docker): :bug: 修改docker-compose配置 (#162) ([e1b1984](https://github.com/HuLaSpark/HuLa/commit/e1b1984)), closes [#162](https://github.com/HuLaSpark/HuLa/issues/162)
|
||||
* fix(mobile): :bug: 修复ios移动端页面问题 (#185) ([af7d388](https://github.com/HuLaSpark/HuLa/commit/af7d388)), closes [#185](https://github.com/HuLaSpark/HuLa/issues/185)
|
||||
* fix(renovate): :bug: 修复renovate bot配置 (#164) ([0dd59a5](https://github.com/HuLaSpark/HuLa/commit/0dd59a5)), closes [#164](https://github.com/HuLaSpark/HuLa/issues/164)
|
||||
* fix(service): :bug: 优化浏览器指纹 (#175) ([a2b3c32](https://github.com/HuLaSpark/HuLa/commit/a2b3c32)), closes [#175](https://github.com/HuLaSpark/HuLa/issues/175)
|
||||
* fix(service): :bug: 增加浏览器指纹作为唯一值解决netty关联channel的问题 (#171) ([a5b5f89](https://github.com/HuLaSpark/HuLa/commit/a5b5f89)), closes [#171](https://github.com/HuLaSpark/HuLa/issues/171)
|
||||
* fix(view): :bug: 修复系统托盘无法变化成多列表操作 (#150) ([cb08e62](https://github.com/HuLaSpark/HuLa/commit/cb08e62)), closes [#150](https://github.com/HuLaSpark/HuLa/issues/150)
|
||||
* fix(view): :bug: 修复setSize方法导致无法修改窗口大小问题 ([412db5c](https://github.com/HuLaSpark/HuLa/commit/412db5c)), closes [#139](https://github.com/HuLaSpark/HuLa/issues/139)
|
||||
* perf(mobile): :zap: 优化ios整体页面 (#186) ([2feb359](https://github.com/HuLaSpark/HuLa/commit/2feb359)), closes [#186](https://github.com/HuLaSpark/HuLa/issues/186)
|
||||
* perf(view): :zap: 优化聊天框用户信息操作选项 (#173) ([b024757](https://github.com/HuLaSpark/HuLa/commit/b024757)), closes [#173](https://github.com/HuLaSpark/HuLa/issues/173)
|
||||
* perf(view): :zap: 优化win的托盘闪烁和消息提示 (#142) ([4e49700](https://github.com/HuLaSpark/HuLa/commit/4e49700)), closes [#142](https://github.com/HuLaSpark/HuLa/issues/142)
|
||||
* perf(worker): :zap: 使用worker优化计时器不准确问题 (#190) ([000fcc2](https://github.com/HuLaSpark/HuLa/commit/000fcc2)), closes [#190](https://github.com/HuLaSpark/HuLa/issues/190)
|
||||
* feat(android): :sparkles: 新增android兼容 (#170) ([684b95c](https://github.com/HuLaSpark/HuLa/commit/684b95c)), closes [#170](https://github.com/HuLaSpark/HuLa/issues/170)
|
||||
* feat(mobile): :sparkles: 新增移动端兼容 (#169) ([3607c9d](https://github.com/HuLaSpark/HuLa/commit/3607c9d)), closes [#169](https://github.com/HuLaSpark/HuLa/issues/169) [#61](https://github.com/HuLaSpark/HuLa/issues/61)
|
||||
* feat(mobile): :sparkles: 增加ios下拉刷新功能 (#189) ([837d2b3](https://github.com/HuLaSpark/HuLa/commit/837d2b3)), closes [#189](https://github.com/HuLaSpark/HuLa/issues/189)
|
||||
* feat(scripts): :sparkles: 新增环境检测脚本(用于检测用户当前系统环境) (#166) ([3983bf7](https://github.com/HuLaSpark/HuLa/commit/3983bf7)), closes [#166](https://github.com/HuLaSpark/HuLa/issues/166)
|
||||
* feat(service): :sparkles: http错误提示 (#184) ([cd03444](https://github.com/HuLaSpark/HuLa/commit/cd03444)), closes [#184](https://github.com/HuLaSpark/HuLa/issues/184)
|
||||
* feat(service): :sparkles: http请求重试 (#178) ([2d0f3e0](https://github.com/HuLaSpark/HuLa/commit/2d0f3e0)), closes [#178](https://github.com/HuLaSpark/HuLa/issues/178)
|
||||
* feat(system): :sparkles: 新增linxu系统ubuntu兼容 (#148) ([373d87c](https://github.com/HuLaSpark/HuLa/commit/373d87c)), closes [#148](https://github.com/HuLaSpark/HuLa/issues/148)
|
||||
* feat(view): :sparkles: 增加透明高斯模糊开关 (#177) ([cefe53d](https://github.com/HuLaSpark/HuLa/commit/cefe53d)), closes [#177](https://github.com/HuLaSpark/HuLa/issues/177)
|
||||
* !45 fix(view): :bug:修复群聊问题 ([b0432d6](https://github.com/HuLaSpark/HuLa/commit/b0432d6)), closes [#152](https://github.com/HuLaSpark/HuLa/issues/152)
|
||||
* Http请求重试并抛出错误 (#181) ([16c4dea](https://github.com/HuLaSpark/HuLa/commit/16c4dea)), closes [#181](https://github.com/HuLaSpark/HuLa/issues/181)
|
||||
* Test actions (#147) ([9755340](https://github.com/HuLaSpark/HuLa/commit/9755340)), closes [#147](https://github.com/HuLaSpark/HuLa/issues/147)
|
||||
* build: 升级依赖 (#161) ([498f490](https://github.com/HuLaSpark/HuLa/commit/498f490)), closes [#161](https://github.com/HuLaSpark/HuLa/issues/161) [#156](https://github.com/HuLaSpark/HuLa/issues/156) [#155](https://github.com/HuLaSpark/HuLa/issues/155) [#157](https://github.com/HuLaSpark/HuLa/issues/157) [#158](https://github.com/HuLaSpark/HuLa/issues/158) [#159](https://github.com/HuLaSpark/HuLa/issues/159)
|
||||
* chore: 发布 v2.6.0 ([f411af6](https://github.com/HuLaSpark/HuLa/commit/f411af6))
|
||||
* ci: :ferris_wheel: 优化CI配置 (#141) ([6b47049](https://github.com/HuLaSpark/HuLa/commit/6b47049)), closes [#141](https://github.com/HuLaSpark/HuLa/issues/141)
|
||||
|
||||
## 2.6.0 (2025-01-05)
|
||||
|
||||
* feat(system): :sparkles: 新增linxu系统ubuntu兼容 (#148) ([43d1561](https://github.com/HuLaSpark/HuLa/commit/43d1561)), closes [#148](https://github.com/HuLaSpark/HuLa/issues/148)
|
||||
* Test actions (#147) ([d0a0e5f](https://github.com/HuLaSpark/HuLa/commit/d0a0e5f)), closes [#147](https://github.com/HuLaSpark/HuLa/issues/147)
|
||||
* fix(build): :bug: 去除alsa-sys的安装 ([64f0c39](https://github.com/HuLaSpark/HuLa/commit/64f0c39))
|
||||
* fix(build): :bug: 修复ubuntu alsa-sys包版本 (#145) ([d6adb2d](https://github.com/HuLaSpark/HuLa/commit/d6adb2d)), closes [#145](https://github.com/HuLaSpark/HuLa/issues/145)
|
||||
* fix(build): :bug: 修复ubuntu CI打包问题 (#144) ([5d66161](https://github.com/HuLaSpark/HuLa/commit/5d66161)), closes [#144](https://github.com/HuLaSpark/HuLa/issues/144)
|
||||
* fix(common): :bug: 修复set_badge_count方法没有处理报错问题 (#140) ([4d4bd9c](https://github.com/HuLaSpark/HuLa/commit/4d4bd9c)), closes [#140](https://github.com/HuLaSpark/HuLa/issues/140)
|
||||
* fix(view): :bug: 修复setSize方法导致无法修改窗口大小问题 (#143) ([b412c2e](https://github.com/HuLaSpark/HuLa/commit/b412c2e)), closes [#143](https://github.com/HuLaSpark/HuLa/issues/143) [#139](https://github.com/HuLaSpark/HuLa/issues/139)
|
||||
* perf(view): :zap: 优化win的托盘闪烁和消息提示 (#142) ([4e49700](https://github.com/HuLaSpark/HuLa/commit/4e49700)), closes [#142](https://github.com/HuLaSpark/HuLa/issues/142)
|
||||
* ci: :ferris_wheel: 优化CI配置 (#141) ([6b47049](https://github.com/HuLaSpark/HuLa/commit/6b47049)), closes [#141](https://github.com/HuLaSpark/HuLa/issues/141)
|
||||
|
||||
## [2.5.11](https://github.com/HuLaSpark/HuLa/compare/v2.5.10...v2.5.11) (2025-01-03)
|
||||
|
||||
|
||||
### ✨ Features | 新功能
|
||||
|
||||
* **component:** :sparkles: 新增AI选项卡,封装提及框功能 ([#133](https://github.com/HuLaSpark/HuLa/issues/133)) ([9fdb695](https://github.com/HuLaSpark/HuLa/commit/9fdb6953ab2c9d46c75b715aac40d211cb605fa7))
|
||||
* **notification:** :sparkles: 新增notification系统通知 ([#127](https://github.com/HuLaSpark/HuLa/issues/127)) ([77373e3](https://github.com/HuLaSpark/HuLa/commit/77373e3782f8f5679940605656259efbb21db558))
|
||||
* **service:** :sparkles: 新增翻译服务api ([#130](https://github.com/HuLaSpark/HuLa/issues/130)) ([fadbf2b](https://github.com/HuLaSpark/HuLa/commit/fadbf2b24a7f5688d02de47ac36254902018e56e))
|
||||
|
||||
|
||||
### 🐛 Bug Fixes | Bug 修复
|
||||
|
||||
* **common:** :bug: 修复一些流程和已知的问题 ([#134](https://github.com/HuLaSpark/HuLa/issues/134)) ([ca0dc1f](https://github.com/HuLaSpark/HuLa/commit/ca0dc1fc778c3c2b9b4175b11ea02fc3cace1cd5))
|
||||
* **common:** :bug: 修复一些已知问题 ([#137](https://github.com/HuLaSpark/HuLa/issues/137)) ([16cd17a](https://github.com/HuLaSpark/HuLa/commit/16cd17aa54fe32399fdeb6a11470fac6daede754))
|
||||
* **event:** :bug: 修复tauri listen未销毁问题 ([#124](https://github.com/HuLaSpark/HuLa/issues/124)) ([7b762e2](https://github.com/HuLaSpark/HuLa/commit/7b762e26a086ca69b0c71093f9382fc865b259aa))
|
||||
* **pnpm:** :bug: 更新版本依赖 ([#138](https://github.com/HuLaSpark/HuLa/issues/138)) ([15a645e](https://github.com/HuLaSpark/HuLa/commit/15a645ec78214886e2502226bc7fa176ba91d912))
|
||||
* **version:** :bug: 修复升级tauri版本导致的高度问题 ([#125](https://github.com/HuLaSpark/HuLa/issues/125)) ([adf47e7](https://github.com/HuLaSpark/HuLa/commit/adf47e7acc38c7159ddc0aaa4bb38784ff5f1594))
|
||||
|
||||
|
||||
### ⚡️ Performance Improvements | 性能优化
|
||||
|
||||
* **component:** :zap: 可在设置中切换翻译提供商 ([#132](https://github.com/HuLaSpark/HuLa/issues/132)) ([99a8859](https://github.com/HuLaSpark/HuLa/commit/99a8859476bef5593641076a6fdadd2b48153be2))
|
||||
* **component:** :zap: 优化撤回消息重新编辑判定 ([#128](https://github.com/HuLaSpark/HuLa/issues/128)) ([451ded8](https://github.com/HuLaSpark/HuLa/commit/451ded82c58cdfd4d8941533db50df61f448b292))
|
||||
* **component:** :zap: 优化翻译的显示 ([#131](https://github.com/HuLaSpark/HuLa/issues/131)) ([c18ee4b](https://github.com/HuLaSpark/HuLa/commit/c18ee4b46715b072cfa7ff82b790c68c63a5eb62))
|
||||
* **component:** :zap: 优化虚拟列表加载更多功能 ([#129](https://github.com/HuLaSpark/HuLa/issues/129)) ([a1641e9](https://github.com/HuLaSpark/HuLa/commit/a1641e96ccde507a28f56c8083a8e37bd379da6c))
|
||||
|
||||
## [2.5.10](https://github.com/HuLaSpark/HuLa/compare/v2.5.9...v2.5.10) (2024-12-25)
|
||||
|
||||
|
||||
### 🐛 Bug Fixes | Bug 修复
|
||||
|
||||
* **common:** :bug: 修复提示的效果问题 ([#121](https://github.com/HuLaSpark/HuLa/issues/121)) ([0b7c873](https://github.com/HuLaSpark/HuLa/commit/0b7c873556be3d14752293d762f87a4d417843dd)), closes [#34](https://github.com/HuLaSpark/HuLa/issues/34)
|
||||
* **component:** :bug: 修复输入框和虚拟列表的一些问题 ([#117](https://github.com/HuLaSpark/HuLa/issues/117)) ([7f4040f](https://github.com/HuLaSpark/HuLa/commit/7f4040fd4e5597227cbd3a2c0e3beb84f7e288bd))
|
||||
* **component:** :bug: 修复整体流程bug问题 ([#118](https://github.com/HuLaSpark/HuLa/issues/118)) ([11fdfe6](https://github.com/HuLaSpark/HuLa/commit/11fdfe65a0fe46b4792cf579a47bbb9b75f465de))
|
||||
* **rust:** :bug: 修复windows启动报错问题 ([#119](https://github.com/HuLaSpark/HuLa/issues/119)) ([311bd72](https://github.com/HuLaSpark/HuLa/commit/311bd72b6af9627221d4c12bf5d1089380d5b4f5)), closes [#IBD413](https://github.com/HuLaSpark/HuLa/issues/IBD413)
|
||||
* **rust:** :bug: 修复windows下启动问题 ([#122](https://github.com/HuLaSpark/HuLa/issues/122)) ([9f43c9e](https://github.com/HuLaSpark/HuLa/commit/9f43c9e77d647cfdc30aa04ad51ac6b0ce608a49))
|
||||
* **windows:** :bug: 修复windows下打包出错问题 ([#123](https://github.com/HuLaSpark/HuLa/issues/123)) ([e346da3](https://github.com/HuLaSpark/HuLa/commit/e346da33cf26143bc5d98f1bee61933ceebfff58))
|
||||
|
||||
|
||||
### ⚡️ Performance Improvements | 性能优化
|
||||
|
||||
* **component:** :zap: 优化使用for-of ([#120](https://github.com/HuLaSpark/HuLa/issues/120)) ([003171b](https://github.com/HuLaSpark/HuLa/commit/003171bc1eb688e0a37f94735ca1e4d71446cf94))
|
||||
* **component:** :zap: 优化虚拟列表的滚动和性能 ([#112](https://github.com/HuLaSpark/HuLa/issues/112)) ([e8b60ee](https://github.com/HuLaSpark/HuLa/commit/e8b60ee83bb9f7f4048899df31113b83f0f01c62))
|
||||
|
||||
## [2.5.9](https://github.com/HuLaSpark/HuLa/compare/v2.5.8...v2.5.9) (2024-12-18)
|
||||
|
||||
|
||||
### ✨ Features | 新功能
|
||||
|
||||
* **component:** :sparkles: 新增默认头像 ([#104](https://github.com/HuLaSpark/HuLa/issues/104)) ([5a4ff70](https://github.com/HuLaSpark/HuLa/commit/5a4ff7065b2f5c2339f8f6208bf3fe3d73c59400))
|
||||
|
||||
|
||||
### 🐛 Bug Fixes | Bug 修复
|
||||
|
||||
* **CI:** :bug: 修复release配置 ([#110](https://github.com/HuLaSpark/HuLa/issues/110)) ([6969a09](https://github.com/HuLaSpark/HuLa/commit/6969a0999ec0a0114e21e9db8ea8f56a82c73e09))
|
||||
* **component:** :bug: 修复mac下输入框输入拼音时的问题 ([#108](https://github.com/HuLaSpark/HuLa/issues/108)) ([6fd6636](https://github.com/HuLaSpark/HuLa/commit/6fd6636cef63c05cdd2ed04858d533ad98e0c34f))
|
||||
* **component:** :bug: 修复naiveui的虚拟列表问题 ([#109](https://github.com/HuLaSpark/HuLa/issues/109)) ([1ec6020](https://github.com/HuLaSpark/HuLa/commit/1ec602016869119e51348c40436aeda120a0dccd))
|
||||
* **config:** :bug: 修改renovate bot的配置 ([23511f7](https://github.com/HuLaSpark/HuLa/commit/23511f78cd5b22449bbc53cb5c567255250ca863))
|
||||
* **view:** :bug: 修复群里在线人数问题和登录历史记录问题 ([#105](https://github.com/HuLaSpark/HuLa/issues/105)) ([4dae48e](https://github.com/HuLaSpark/HuLa/commit/4dae48e1ad380bc5ca68b664fe89664ac68235fd))
|
||||
* **view:** :bug: 修复异常关闭再重新登录会不显示会话的bug ([096df49](https://github.com/HuLaSpark/HuLa/commit/096df49dcd9408eecadb9344d5d7433468e7bc5c))
|
||||
|
||||
|
||||
### ⚡️ Performance Improvements | 性能优化
|
||||
|
||||
* **hook:** :zap: 优化windows窗口圆角问题 ([024c1a3](https://github.com/HuLaSpark/HuLa/commit/024c1a36d8ab435151d6485921b198070b15076e))
|
||||
* **view:** :zap: 优化一下样式和登录页面的提示 ([#107](https://github.com/HuLaSpark/HuLa/issues/107)) ([8bb4aa7](https://github.com/HuLaSpark/HuLa/commit/8bb4aa77d93fb731d3ff85fe273d20e7b4ba991d)), closes [#106](https://github.com/HuLaSpark/HuLa/issues/106)
|
||||
|
||||
## [2.5.8](https://github.com/HuLaSpark/HuLa/compare/v2.5.7...v2.5.8) (2024-12-12)
|
||||
|
||||
|
||||
|
||||
239
README.en.md
Normal file
@@ -0,0 +1,239 @@
|
||||
<p align="center">
|
||||
<img width="350px" height="150px" src="src/assets/logo/hula.png" />
|
||||
</p>
|
||||
|
||||
<p align="center">An Instant Messaging System Built with Tauri, Vite 6, Vue 3, and TypeScript</p>
|
||||
|
||||
<div align="center">
|
||||
<a href="https://hellogithub.com/repository/743b101346c54f6cb5c20eed2edbaa40" target="_blank"><img src="https://abroad.hellogithub.com/v1/widgets/recommend.svg?rid=743b101346c54f6cb5c20eed2edbaa40&claim_uid=WsQaY6SlnL7qxG3&theme=neutral" alt="Featured|HelloGitHub" style="width: 250px; height: 54px;" width="250" height="54" /></a>
|
||||
</div>
|
||||
|
||||
<div align="center">
|
||||
<a href="https://deepwiki.com/HuLaSpark/HuLa"><img src="https://deepwiki.com/badge.svg" alt=""></a>
|
||||
<a href="https://app.fossa.com/projects/git%2Bgithub.com%2FHuLaSpark%2FHuLa?ref=badge_shield"><img src="https://app.fossa.com/api/projects/git%2Bgithub.com%2FHuLaSpark%2FHuLa.svg?type=shield" alt=""></a>
|
||||
<a href="https://www.bestpractices.dev/zh-CN/projects/9692"><img src="https://bestpractices.coreinfrastructure.org/projects/9692/badge" alt="CI"></a>
|
||||
<img src="https://img.shields.io/badge/TypeScript-blue?logo=Typescript&style=flat&logoColor=fff">
|
||||
<img src="https://img.shields.io/badge/Vue3-35495E?logo=vue.js&logoColor=4FC08D">
|
||||
<img src="https://img.shields.io/badge/Tauri-24C8DB?logo=tauri&logoColor=FFC131">
|
||||
<img src="https://img.shields.io/badge/Rust-c57c54?logo=rust&logoColor=E34F26">
|
||||
<img src="https://img.shields.io/badge/Vite6-35495E?logo=vite&logoColor=41D1FF">
|
||||
<img src="https://img.shields.io/badge/UnoCss-efefef?logo=UnoCss&logoColor=606060">
|
||||
<img src="https://img.shields.io/badge/pnpm-909090?logo=pnpm&logoColor=FFC131">
|
||||
<img src="https://img.shields.io/badge/Sass-CC6699?logo=sass&logoColor=fff">
|
||||
</div>
|
||||
|
||||
<p align="center">
|
||||
gitee:<a href="https://gitee.com/HulaSpark/HuLa/stargazers"><img src="https://gitee.com/HulaSpark/HuLa/badge/star.svg?theme=gvp" alt="star"></a>
|
||||
github:<a href="https://gitee.com/link?target=https://github.com/HulaSpark/HuLa/stargazers"><img src="https://img.shields.io/github/stars/HulaSpark/HuLa" alt="star"></a>
|
||||
gitcode:<a href="https://gitcode.com/HuLaSpark/HuLa"><img src="https://gitcode.com/HuLaSpark/HuLa/star/badge.svg" alt="star"></a>
|
||||
</p>
|
||||
<p align="center">
|
||||
WeChat: <img src="https://img.shields.io/badge/cy2439646234-07C160?logo=wechat&logoColor=fff">
|
||||
</p>
|
||||
|
||||
<p align="center">
|
||||
💻 Official Website:<a href="https://hulaspark.com">HuLaSpark</a>
|
||||
</p>
|
||||
|
||||
<p align="center">
|
||||
☕️ server:<a href="https://github.com/HulaSpark/HuLa-Server">github HuLa-Server</a> | <a href="https://gitee.com/HulaSpark/HuLa-Server">gitee HuLa-Server</a>
|
||||
</p>
|
||||
|
||||
<p align="center"><a href="README.zh-CN.md">中文</a> | English</p>
|
||||
|
||||
## 🌐 Support platform
|
||||
|
||||
| Platform | Supported version |
|
||||
|------|---------|
|
||||
| Windows | Windows 10, Windows 11 |
|
||||
| macOS | macOS 10.5+ |
|
||||
| Linux | Ubuntu 22.0+ |
|
||||
| iOS/iPadOS | iOS 9.0+, iPadOS 9.0+ |
|
||||
| Android | Android 8.0+ |
|
||||
|
||||
## 📝 Project Introduction
|
||||
|
||||
HuLa is an instant messaging system developed with Tauri, Vite 6, Vue 3, and TypeScript. It leverages the cross-platform capabilities of Tauri and the reactive design of Vue 3, combined with TypeScript's type safety features and the fast build system of Vite 6, to provide users with an efficient, secure, and easy-to-use communication solution.
|
||||
|
||||
## 🛠️ Technology Stack
|
||||
|
||||
- **Tauri**: Provides a lightweight, high-performance desktop application container, enabling the development of cross-platform desktop applications with a web technology stack. Tauri's design philosophy aims to minimize resource consumption while ensuring security.
|
||||
- **Vite 6**: A modern front-end build tool that uses native ES module import to offer a fast development server. At the same time, it provides robust support for production builds. Vite 6 is its latest version, bringing more optimizations and features.
|
||||
- **Vue 3**: A progressive JavaScript framework for building user interfaces. Its Composition API, improved TypeScript integration, and optimizations for mobile platforms make developing complex single-page applications simpler and more efficient.
|
||||
- **TypeScript**: A superset of JavaScript that adds a type system to the language. It enables catching more errors during development and provides better support from editors.
|
||||
|
||||
## 🖼️ Project PreView
|
||||
|
||||

|
||||
|
||||

|
||||
|
||||

|
||||
|
||||

|
||||
|
||||
<div style="padding: 28px; display: inline-block;">
|
||||
<img src="preview/img_4.png" alt="img_4.png" style="border-radius: 8px; display: block;" />
|
||||
</div>
|
||||
|
||||
<div style="padding: 28px; display: inline-block;">
|
||||
<img src="preview/img_5.png" alt="img_5.png" style="border-radius: 8px; display: block;" />
|
||||
</div>
|
||||
|
||||
<div style="padding: 28px; display: inline-block;">
|
||||
<img src="preview/img_6.png" alt="img_6.png" style="border-radius: 8px; display: block;" />
|
||||
</div>
|
||||
|
||||
<div style="padding: 28px; display: inline-block;">
|
||||
<img src="preview/img_7.png" alt="img_7.png" style="border-radius: 8px; display: block;" />
|
||||
</div>
|
||||
|
||||
<div style="padding: 28px; display: inline-block;">
|
||||
<img src="preview/img_8.png" alt="img_8.png" style="border-radius: 8px; display: block;" />
|
||||
</div>
|
||||
|
||||
<div style="padding: 28px; display: inline-block;">
|
||||
<img src="preview/img_9.png" alt="img_9.png" style="border-radius: 8px; display: block;" />
|
||||
</div>
|
||||
|
||||
## ✨ Completed Features
|
||||
|
||||
| Feature Category | Feature Description | Status |
|
||||
|-----------------|---------------------|--------|
|
||||
| 🔐 **User Authentication** | Username/Password Login | ✅ Completed |
|
||||
| | QR Code Scan Login | ✅ Completed |
|
||||
| | Multi-device Login Management | ✅ Completed |
|
||||
| 💬 **Messaging** | One-on-one Private Chat | ✅ Completed |
|
||||
| | Group Chat | ✅ Completed |
|
||||
| | Message Recall | ✅ Completed |
|
||||
| | @Mention, Reply Function | ✅ Completed |
|
||||
| | Message Read Status | ✅ Completed |
|
||||
| | Emoji Function | ✅ Completed |
|
||||
| | Context Menu Based on Message Type | ✅ Completed |
|
||||
| | Support parsing links as preview cards | ✅ Completed |
|
||||
| | Message likes and dissatisfaction status | ✅ Completed |
|
||||
| 👥 **Contact & Group Management** | Friend Add/Remove | ✅ Completed |
|
||||
| | Friend Search | ✅ Completed |
|
||||
| | Group Creation and Management | ✅ Completed |
|
||||
| | Friend Online Status | ✅ Completed |
|
||||
| | Friend Badges | ✅ Completed |
|
||||
| | Block, Blacklist, Do Not Disturb | ✅ Completed |
|
||||
| | Message by message merging and forwarding | 🚧 In Progress |
|
||||
| | Group Announcement | ✅ 已完成 |
|
||||
| | Group chat、individual chat notes, nicknames, etc | ✅ 已完成 |
|
||||
| 🎨 **UI Interface** | Modern Interface Design | ✅ Completed |
|
||||
| | Dark/Light Theme Support | ✅ Completed |
|
||||
| | Skin Theme Switching | ✅ Completed |
|
||||
| 🛠️ **System Functions** | Multi-window Management | ✅ Completed |
|
||||
| | System Tray, Tray Flash Notifications | ✅ Completed |
|
||||
| | Message Notifications | ✅ Completed |
|
||||
| | Image Viewer | ✅ Completed |
|
||||
| | Screenshot Function | 🚧 In Progress |
|
||||
| | Support automatic/forced updates | ✅ Completed |
|
||||
| | Customize update page | ✅ Completed |
|
||||
| 🌐 **Cross-platform Support** | Win10, Win11/macOS/Linux | ✅ Completed |
|
||||
| | iOS/Android Adaptation | 🚧 In Progress |
|
||||
| 🤖 **AI** | DeepSeek, ChatGPT, Claude, Qwen, Custom | 🚧 In Progress |
|
||||
|
||||
## 👏 Thanks to the following contributors!
|
||||
|
||||
<a href="https://github.com/HuLaSpark/HuLa/graphs/contributors">
|
||||
<img src="https://opencollective.com/HuLaSpark/contributors.svg?width=890" />
|
||||
</a>
|
||||
|
||||
## 📥 Installation and Running
|
||||
|
||||
```bash
|
||||
# Clone the project
|
||||
git clone https://gitee.com/HuLaSpark/HuLa.git
|
||||
or
|
||||
git clone https://github.com/HuLaSpark/HuLa.git
|
||||
|
||||
# Enter the project directory
|
||||
cd HuLa
|
||||
|
||||
# Install dependencies
|
||||
pnpm install
|
||||
|
||||
# Run the development server
|
||||
pnpm run tauri:dev
|
||||
|
||||
# Build for production
|
||||
pnpm run tauri:build
|
||||
```
|
||||
|
||||
## ⚠️ Precautions(macOS Users)
|
||||
|
||||
Downloading the installation package on the web page will indicate that the installation package is corrupted, and you may encounter a certificate issue, which is caused by the security mechanism of the macOS system. Follow these steps to solve:
|
||||
|
||||
#### 1. Open "System Settings" - "Security & Privacy", as shown in the figure, check the box: Allow apps downloaded from "Any Source" to run:
|
||||
|
||||
<div style="padding: 28px; display: inline-block;">
|
||||
<img src="preview/img_10.png" alt="img_10.png" style="border-radius: 8px; display: block;" />
|
||||
</div>
|
||||
|
||||
#### 2. If an error is reported, run the following command in the terminal to resolve the problem:
|
||||
|
||||
```bash
|
||||
## Execute before installation
|
||||
sudo xattr -rd com.apple.quarantine the Path To Install The Package/Download installation package name
|
||||
```
|
||||
```bash
|
||||
## If it has already been installed, proceed as follows
|
||||
sudo xattr -r -d com.apple.quarantine /Applications/apply name.app
|
||||
```
|
||||
|
||||
## 📋 SubmissionSpecification
|
||||
|
||||
use **pnpm run commit** to invoke the _git commit_ interaction and follow the prompts to complete the input and selection of information
|
||||
|
||||
## ⚖️ Disclaimer
|
||||
|
||||
1. This project is provided as an open source project, and the developer does not provide any express or implied warranty of any kind as to the functionality, security, or suitability of the software to the extent permitted by law
|
||||
2. The User expressly understands and agrees that the use of the Software is entirely at the User's own risk and that the Software is provided on an "as is" and "as available" basis. The developer disclaims all warranties of any kind, whether express or implied, including, but not limited to, warranties of merchantability, fitness for a particular purpose, and non-infringement
|
||||
3. In no event shall Developer or its suppliers be liable for any direct, indirect, incidental, special, punitive, or consequential damages, including, but not limited to, lost profits, business interruption, disclosure of personal information, or other commercial damages or losses arising from the use of the Software
|
||||
4. All users who carry out secondary development on this project shall undertake to use this software for legitimate purposes and shall be responsible for complying with local laws and regulations
|
||||
5. Developer reserves the right to modify the functionality or features of the Software, as well as any part of this Disclaimer, at any time, and these modifications may be reflected in software updates
|
||||
|
||||
**The final interpretation of this disclaimer belongs to the developer**
|
||||
|
||||
## 🎁 Sponsor HuLa
|
||||
If you think HuLa is helpful to you, welcome to sponsor HuLa. Your support is our motivation to keep moving forward.
|
||||
|
||||
<div style="display: flex;">
|
||||
<img src="preview/zs.jpg" width="260" height="280" alt="Sponsorship Code" style="border-radius: 12px;" />
|
||||
|
||||
<img src="preview/zfb.png" width="260" height="280" alt="Sponsorship Code" style="border-radius: 12px; margin-left: 40px" />
|
||||
</div>
|
||||
|
||||
|
||||
## 💬 HuLa Community discussion groups
|
||||
<img src="preview/wx.png" width="260" height="300" alt="微信群二维码" style="border-radius: 12px;" />
|
||||
|
||||
## 🙏 List of sponsors
|
||||
Thanks to the following sponsors for their support!
|
||||
|
||||
| Date | Sponsor | Sum | Platform |
|
||||
|------|--------|------|------|
|
||||
| 2025-04-25 | 上官俊斌 | ¥200 | 微信赞赏码 |
|
||||
| 2025-05-27 | 临安居士 | ¥188 | 微信赞赏码 |
|
||||
| 2025-04-20 | 姜兴(Simon) | ¥188 | 微信赞赏码 |
|
||||
| 2025-02-17 | 禾硕 | ¥168 | 支付宝赞赏 |
|
||||
| 2025-02-8 | Boom.... | ¥100 | 微信赞赏码 |
|
||||
| 2025-05-09 | 犹豫,就会败北。| ¥88.00 | 微信红包 |
|
||||
| 2025-04-01 | 墨 | ¥88.88 | 微信转账 |
|
||||
| 2025-02-8 | 邓伟 | ¥88 | 微信赞赏码 |
|
||||
| 2025-02-7 | dennis | ¥80 | gitee码云赞赏 |
|
||||
| 2025-05-15 | 孤鸿影 | ¥56 | 微信红包 |
|
||||
| 2025-02-6 | 小二 | ¥62 | 微信转账 |
|
||||
| 2025-06-03 | 洪流 | ¥20 | 微信赞赏码 |
|
||||
| 2025-05-27 | 刘启成 | ¥20 | 微信赞赏码 |
|
||||
| 2025-05-20 | 没有留名的赞助者 | ¥20 | 微信赞赏码 |
|
||||
|
||||
> Note: This list is manually updated. If you have sponsored but are not displayed in the list, please contact us by:
|
||||
1. Submit Issue on GitHub
|
||||
2. Send an email to: 2439646234@qq.com
|
||||
3. Contact via WeChat: cy2439646234
|
||||
|
||||
## 📄 License
|
||||
[](https://app.fossa.com/projects/git%2Bgithub.com%2FHuLaSpark%2FHuLa?ref=badge_large)
|
||||
204
README.md
@@ -2,44 +2,67 @@
|
||||
<img width="350px" height="150px" src="src/assets/logo/hula.png" />
|
||||
</p>
|
||||
|
||||
<p align="center">An Instant Messaging System Built with Tauri, Vite 5, Vue 3, and TypeScript</p>
|
||||
<p align="center">一款基于Tauri、Vite 6、Vue 3 和 TypeScript 构建的即时通讯系统</p>
|
||||
|
||||
<div align="center">
|
||||
<a href="https://hellogithub.com/repository/743b101346c54f6cb5c20eed2edbaa40" target="_blank"><img src="https://abroad.hellogithub.com/v1/widgets/recommend.svg?rid=743b101346c54f6cb5c20eed2edbaa40&claim_uid=WsQaY6SlnL7qxG3&theme=neutral" alt="Featured|HelloGitHub" style="width: 250px; height: 54px;" width="250" height="54" /></a>
|
||||
</div>
|
||||
|
||||
<div align="center">
|
||||
<a href="https://deepwiki.com/HuLaSpark/HuLa"><img src="https://deepwiki.com/badge.svg" alt=""></a>
|
||||
<a href="https://app.fossa.com/projects/git%2Bgithub.com%2FHuLaSpark%2FHuLa?ref=badge_shield"><img src="https://app.fossa.com/api/projects/git%2Bgithub.com%2FHuLaSpark%2FHuLa.svg?type=shield" alt=""></a>
|
||||
<a href="https://www.bestpractices.dev/zh-CN/projects/9692"><img src="https://bestpractices.coreinfrastructure.org/projects/9692/badge" alt="CI"></a>
|
||||
<img src="https://img.shields.io/badge/TypeScript-blue?logo=Typescript&style=flat&logoColor=fff">
|
||||
<img src="https://img.shields.io/badge/Vue3-35495E?logo=vue.js&logoColor=4FC08D">
|
||||
<img src="https://img.shields.io/badge/Tauri-24C8DB?logo=tauri&logoColor=FFC131">
|
||||
<img src="https://img.shields.io/badge/Rust-c57c54?logo=rust&logoColor=E34F26">
|
||||
<img src="https://img.shields.io/badge/Vite5-35495E?logo=vite&logoColor=41D1FF">
|
||||
<img src="https://img.shields.io/badge/Vite6-35495E?logo=vite&logoColor=41D1FF">
|
||||
<img src="https://img.shields.io/badge/UnoCss-efefef?logo=UnoCss&logoColor=606060">
|
||||
<img src="https://img.shields.io/badge/pnpm-909090?logo=pnpm&logoColor=FFC131">
|
||||
<img src="https://img.shields.io/badge/Sass-CC6699?logo=sass&logoColor=fff">
|
||||
<img src="https://img.shields.io/badge/Design-Naive-059669">
|
||||
</div>
|
||||
|
||||
<p align="center">
|
||||
gitee:<a href="https://gitee.com/HulaSpark/HuLa/stargazers"><img src="https://gitee.com/HulaSpark/HuLa/badge/star.svg?theme=gvp" alt="star"></a>
|
||||
github:<a href="https://gitee.com/link?target=https://github.com/HulaSpark/HuLa/stargazers"><img src="https://img.shields.io/github/stars/HulaSpark/HuLa" alt="star"></a>
|
||||
gitcode:<a href="https://gitcode.com/HuLaSpark/HuLa"><img src="https://gitcode.com/HuLaSpark/HuLa/star/badge.svg" alt="star"></a>
|
||||
</p>
|
||||
<p align="center">
|
||||
WeChat: <img src="https://img.shields.io/badge/cy2439646234-07C160?logo=wechat&logoColor=fff">
|
||||
微信: <img src="https://img.shields.io/badge/cy2439646234-07C160?logo=wechat&logoColor=fff">
|
||||
</p>
|
||||
|
||||
<p align="center"><a href="README.zh-CN.md">中文</a> | English</p>
|
||||
<p align="center">
|
||||
💻 官网:<a href="https://hulaspark.com">HuLaSpark</a>
|
||||
</p>
|
||||
|
||||
## Project Introduction
|
||||
<p align="center">
|
||||
☕️ 服务端:<a href="https://github.com/HulaSpark/HuLa-Server">github HuLa-Server</a> | <a href="https://gitee.com/HulaSpark/HuLa-Server">gitee HuLa-Server</a>
|
||||
</p>
|
||||
|
||||
HuLa is an instant messaging system developed with Tauri, Vite 5, Vue 3, and TypeScript. It leverages the cross-platform capabilities of Tauri and the reactive design of Vue 3, combined with TypeScript's type safety features and the fast build system of Vite 5, to provide users with an efficient, secure, and easy-to-use communication solution.
|
||||
<p align="center"><a href="README.en.md">English</a> | 中文</p>
|
||||
|
||||
## Technology Stack
|
||||
## 🌐 支持平台
|
||||
|
||||
- **Tauri**: Provides a lightweight, high-performance desktop application container, enabling the development of cross-platform desktop applications with a web technology stack. Tauri's design philosophy aims to minimize resource consumption while ensuring security.
|
||||
- **Vite 5**: A modern front-end build tool that uses native ES module import to offer a fast development server. At the same time, it provides robust support for production builds. Vite 5 is its latest version, bringing more optimizations and features.
|
||||
- **Vue 3**: A progressive JavaScript framework for building user interfaces. Its Composition API, improved TypeScript integration, and optimizations for mobile platforms make developing complex single-page applications simpler and more efficient.
|
||||
- **TypeScript**: A superset of JavaScript that adds a type system to the language. It enables catching more errors during development and provides better support from editors.
|
||||
| 平台 | 支持版本 |
|
||||
|------|---------|
|
||||
| Windows | Windows 10, Windows 11 |
|
||||
| macOS | macOS 10.5+ |
|
||||
| Linux | Ubuntu 22.0+ |
|
||||
| iOS/iPadOS | iOS 9.0+, iPadOS 9.0+ |
|
||||
| Android | Android 8.0+ |
|
||||
|
||||
## Project PreView
|
||||
## 📝 项目介绍
|
||||
|
||||
HuLa 是一款基于 Tauri、Vite 6、Vue 3 和 TypeScript 构建的即时通讯系统。它利用了 Tauri 的跨平台能力和 Vue 3 的响应式设计,结合了 TypeScript 的类型安全特性和 Vite 6 的快速构建,为用户提供了一个高效、安全和易用的通讯解决方案。
|
||||
|
||||
## 🛠️ 技术栈
|
||||
|
||||
- **Tauri**: 为本项目提供了一款轻量级的、高性能的桌面应用容器,使得我们可以使用前端技术栈来开发跨平台的桌面应用。Tauri 的设计哲学是在保证安全性的前提下,尽可能减少资源占用。
|
||||
- **Vite 6**: Vite 是一个现代化的前端构建工具,它利用原生 ES 模块导入的能力来提供一个快速的开发服务器,与此同时,它也为生产环境打包提供了强大的支持。Vite 6 是其最新的版本,带来了更多的优化和特性。
|
||||
- **Vue 3**: Vue 3 是一个渐进式JavaScript框架,用于构建用户界面。它的组合式API、更好的TypeScript集成和对移动端的优化使得开发复杂的单页应用变得更加简单和高效。
|
||||
- **TypeScript**: TypeScript 是 JavaScript 的一个超集,它在 JavaScript 的基础上增加了类型系统。这让我们能够在开发过程中捕获更多的错误,并且提供更好的编辑器支持。
|
||||
|
||||
## 🖼️ 项目预览
|
||||
|
||||

|
||||
|
||||
@@ -49,71 +72,168 @@ HuLa is an instant messaging system developed with Tauri, Vite 5, Vue 3, and Typ
|
||||
|
||||

|
||||
|
||||

|
||||
<div style="padding: 28px; display: inline-block;">
|
||||
<img src="preview/img_4.png" alt="img_4.png" style="border-radius: 8px; display: block;" />
|
||||
</div>
|
||||
|
||||

|
||||
<div style="padding: 28px; display: inline-block;">
|
||||
<img src="preview/img_5.png" alt="img_5.png" style="border-radius: 8px; display: block;" />
|
||||
</div>
|
||||
|
||||

|
||||
<div style="padding: 28px; display: inline-block;">
|
||||
<img src="preview/img_6.png" alt="img_6.png" style="border-radius: 8px; display: block;" />
|
||||
</div>
|
||||
|
||||

|
||||
<div style="padding: 28px; display: inline-block;">
|
||||
<img src="preview/img_7.png" alt="img_7.png" style="border-radius: 8px; display: block;" />
|
||||
</div>
|
||||
|
||||

|
||||
<div style="padding: 28px; display: inline-block;">
|
||||
<img src="preview/img_8.png" alt="img_8.png" style="border-radius: 8px; display: block;" />
|
||||
</div>
|
||||
|
||||
## Thanks to the following contributors!
|
||||
<div style="padding: 28px; display: inline-block;">
|
||||
<img src="preview/img_9.png" alt="img_9.png" style="border-radius: 8px; display: block;" />
|
||||
</div>
|
||||
|
||||
## ✨ 已完成功能
|
||||
|
||||
| 功能分类 | 功能描述 | 状态 |
|
||||
|---------|---------|------|
|
||||
| 🔐 **用户认证** | 账号密码登录 | ✅ 已完成 |
|
||||
| | 二维码扫码登录 | ✅ 已完成 |
|
||||
| | 多设备登录管理 | ✅ 已完成 |
|
||||
| 💬 **消息功能** | 一对一私聊 | ✅ 已完成 |
|
||||
| | 群组聊天 | ✅ 已完成 |
|
||||
| | 消息撤回 | ✅ 已完成 |
|
||||
| | @提醒、回复功能 | ✅ 已完成 |
|
||||
| | 消息已读状态 | ✅ 已完成 |
|
||||
| | 表情包功能 | ✅ 已完成 |
|
||||
| | 根据消息类型右键菜单 | ✅ 已完成 |
|
||||
| | 支持解析链接为预览卡片 | ✅ 已完成 |
|
||||
| | 消息点赞和不满状态 | ✅ 已完成 |
|
||||
| 👥 **联系人、群聊管理** | 好友添加与删除 | ✅ 已完成 |
|
||||
| | 好友搜索 | ✅ 已完成 |
|
||||
| | 群组创建与管理 | ✅ 已完成 |
|
||||
| | 好友在线状态 | ✅ 已完成 |
|
||||
| | 好友徽章 | ✅ 已完成 |
|
||||
| | 屏蔽、拉黑、免打扰功能 | ✅ 已完成 |
|
||||
| | 消息逐条\合并转发 | 🚧 进行中 |
|
||||
| | 群公告 | ✅ 已完成 |
|
||||
| | 群聊、单聊备注、昵称等 | ✅ 已完成 |
|
||||
| 🎨 **UI界面** | 现代化界面设计 | ✅ 已完成 |
|
||||
| | 深色/浅色主题支持 | ✅ 已完成 |
|
||||
| | 皮肤主题切换 | ✅ 已完成 |
|
||||
| 🛠️ **系统功能** | 多窗口管理 | ✅ 已完成 |
|
||||
| | 系统托盘、托盘闪烁提醒支持 | ✅ 已完成 |
|
||||
| | 消息通知 | ✅ 已完成 |
|
||||
| | 图片查看器 | ✅ 已完成 |
|
||||
| | 截图功能 | 🚧 进行中 |
|
||||
| | 文件上传(支持七牛云存储) | ✅ 已完成 |
|
||||
| | 支持自动、强制更新 | ✅ 已完成 |
|
||||
| | 自定义更新页面 | ✅ 已完成 |
|
||||
| 🌐 **跨平台支持** | win10、win11/macOS/linux | ✅ 已完成 |
|
||||
| | iOS/Android适配 | 🚧 进行中 |
|
||||
| 🤖 **AI** | deepseek、chatgpt、claude、qwen、自定义 | 🚧 进行中 |
|
||||
|
||||
## 👏 感谢以下贡献者们!
|
||||
|
||||
<a href="https://github.com/HuLaSpark/HuLa/graphs/contributors">
|
||||
<img src="https://opencollective.com/HuLaSpark/contributors.svg?width=890" />
|
||||
</a>
|
||||
|
||||
## Installation and Running
|
||||
## 📥 安装与运行
|
||||
|
||||
```bash
|
||||
# Clone the project
|
||||
# 克隆项目
|
||||
git clone https://gitee.com/HuLaSpark/HuLa.git
|
||||
or
|
||||
或者
|
||||
git clone https://github.com/HuLaSpark/HuLa.git
|
||||
|
||||
# Enter the project directory
|
||||
# 进入项目目录
|
||||
cd HuLa
|
||||
|
||||
# Install dependencies
|
||||
# 安装依赖
|
||||
pnpm install
|
||||
|
||||
# Run the development server
|
||||
# 运行开发服务器
|
||||
pnpm run tauri:dev
|
||||
|
||||
# Build for production
|
||||
# 构建生产版本
|
||||
pnpm run tauri:build
|
||||
```
|
||||
|
||||
## ⚠️ Precautions(macOS Users)
|
||||
## ⚠️ 注意事项(macOS用户)
|
||||
|
||||
Downloading the installation package on the web page will indicate that the installation package is corrupted, and you may encounter a certificate issue, which is caused by the security mechanism of the macOS system. Follow these steps to solve:
|
||||
网页上下载安装包会提示安装包已损坏,可能会遇到证书问题,这是因为 macOS 系统的安全机制导致的。请按照以下步骤解决:
|
||||
|
||||
#### 1. Open "System Settings" - "Security & Privacy", as shown in the figure, check the box: Allow apps downloaded from "Any Source" to run:
|
||||
#### 1. 打开 "系统设置" - "安全性与隐私",如图勾选:允许 "任何来源" 下载的 App 运行:
|
||||
|
||||

|
||||
<div style="padding: 28px; display: inline-block;">
|
||||
<img src="preview/img_10.png" alt="img_10.png" style="border-radius: 8px; display: block;" />
|
||||
</div>
|
||||
|
||||
#### 2. If an error is reported, run the following command in the terminal to resolve the problem:
|
||||
#### 2. 如果还报错,请在终端执行以下命令解决:
|
||||
|
||||
```bash
|
||||
sudo xattr -rd com.apple.quarantine the Path To Install The Package/HuLa.app
|
||||
## 安装前执行
|
||||
sudo xattr -rd com.apple.quarantine 你的安装包路径/下载的安装包名称
|
||||
```
|
||||
```bash
|
||||
## 如果已经安装,则执行下面
|
||||
sudo xattr -r -d com.apple.quarantine /Applications/应用名称.app
|
||||
```
|
||||
|
||||
## SubmissionSpecification
|
||||
## 📋 提交规范
|
||||
|
||||
use **pnpm run commit** to invoke the _git commit_ interaction and follow the prompts to complete the input and selection of information
|
||||
执行 **pnpm run commit** 唤起 _git commit_ 交互,根据提示完成信息的输入和选择
|
||||
|
||||
## Disclaimer
|
||||
## ⚖️ 免责声明
|
||||
|
||||
1. This project is provided as an open source project, and the developer does not provide any express or implied warranty of any kind as to the functionality, security, or suitability of the software to the extent permitted by law
|
||||
2. The User expressly understands and agrees that the use of the Software is entirely at the User's own risk and that the Software is provided on an "as is" and "as available" basis. The developer disclaims all warranties of any kind, whether express or implied, including, but not limited to, warranties of merchantability, fitness for a particular purpose, and non-infringement
|
||||
3. In no event shall Developer or its suppliers be liable for any direct, indirect, incidental, special, punitive, or consequential damages, including, but not limited to, lost profits, business interruption, disclosure of personal information, or other commercial damages or losses arising from the use of the Software
|
||||
4. All users who carry out secondary development on this project shall undertake to use this software for legitimate purposes and shall be responsible for complying with local laws and regulations
|
||||
5. Developer reserves the right to modify the functionality or features of the Software, as well as any part of this Disclaimer, at any time, and these modifications may be reflected in software updates
|
||||
1. 本项目是作为一款开源项目提供的,开发者在法律允许的范围内不对软件的功能性、安全性或适用性提供任何形式的明示或暗示的保证
|
||||
2. 用户明确理解并同意,使用本软件的风险完全由用户自己承担,软件以"现状"和"现有"基础提供。开发者不提供任何形式的担保,无论是明示还是暗示的,包括但不限于适销性、特定用途的适用性和非侵权的担保
|
||||
3. 在任何情况下,开发者或其供应商都不对任何直接的、间接的、偶然的、特殊的、惩罚性的或后果性的损害承担责任,包括但不限于使用本软件产生的利润损失、业务中断、个人信息泄露或其他商业损害或损失
|
||||
4. 所有在本项目上进行二次开发的用户,都需承诺将本软件用于合法目的,并自行负责遵守当地的法律和法规
|
||||
5. 开发者有权在任何时间修改软件的功能或特性,以及本免责声明的任何部分,并且这些修改可能会以软件更新的形式体现
|
||||
|
||||
**The final interpretation of this disclaimer belongs to the developer**
|
||||
**本免责声明的最终解释权归开发者所有**
|
||||
|
||||
## 🎁 赞助HuLa
|
||||
如果您觉得HuLa对您有帮助,欢迎赞助HuLa,您的支持是我们不断前进的动力
|
||||
|
||||
## License
|
||||
<div style="display: flex;">
|
||||
<img src="preview/zs.jpg" width="260" height="280" alt="赞助码" style="border-radius: 12px;" />
|
||||
|
||||
<img src="preview/zfb.png" width="260" height="280" alt="赞助码" style="border-radius: 12px; margin-left: 40px" />
|
||||
</div>
|
||||
|
||||
## 💬 HuLa社区讨论群
|
||||
<img src="preview/wx.png" width="260" height="300" alt="微信群二维码" style="border-radius: 12px;" />
|
||||
|
||||
## 🙏 赞助者名单
|
||||
感谢以下赞助者的支持!
|
||||
|
||||
| 日期 | 赞助者 | 金额 | 平台 |
|
||||
|------|--------|------|------|
|
||||
| 2025-04-25 | 上官俊斌 | ¥200 | 微信赞赏码 |
|
||||
| 2025-05-27 | 临安居士 | ¥188 | 微信赞赏码 |
|
||||
| 2025-04-20 | 姜兴(Simon) | ¥188 | 微信赞赏码 |
|
||||
| 2025-02-17 | 禾硕 | ¥168 | 支付宝赞赏 |
|
||||
| 2025-02-8 | Boom.... | ¥100 | 微信赞赏码 |
|
||||
| 2025-05-09 | 犹豫,就会败北。| ¥88.00 | 微信红包 |
|
||||
| 2025-04-01 | 墨 | ¥88.88 | 微信转账 |
|
||||
| 2025-02-8 | 邓伟 | ¥88 | 微信赞赏码 |
|
||||
| 2025-02-7 | dennis | ¥80 | gitee码云赞赏 |
|
||||
| 2025-05-15 | 孤鸿影 | ¥56 | 微信红包 |
|
||||
| 2025-02-6 | 小二 | ¥62 | 微信转账 |
|
||||
| 2025-06-03 | 洪流 | ¥20 | 微信赞赏码 |
|
||||
| 2025-05-27 | 刘启成 | ¥20 | 微信赞赏码 |
|
||||
| 2025-05-20 | 没有留名的赞助者 | ¥20 | 微信赞赏码 |
|
||||
|
||||
> 注:该名单为手动更新。如果您已赞助但未显示在列表中,请通过以下方式联系我们:
|
||||
1. 在GitHub上提交Issue
|
||||
2. 发送邮件至: 2439646234@qq.com
|
||||
3. 通过微信联系: cy2439646234
|
||||
|
||||
## 📄 许可证
|
||||
[](https://app.fossa.com/projects/git%2Bgithub.com%2FHuLaSpark%2FHuLa?ref=badge_large)
|
||||
|
||||
119
README.zh-CN.md
@@ -1,119 +0,0 @@
|
||||
<p align="center">
|
||||
<img width="350px" height="150px" src="src/assets/logo/hula.png" />
|
||||
</p>
|
||||
|
||||
<p align="center">一个基于Tauri、Vite 5、Vue 3 和 TypeScript 构建的即时通讯系统</p>
|
||||
|
||||
<div align="center">
|
||||
<a href="https://app.fossa.com/projects/git%2Bgithub.com%2FHuLaSpark%2FHuLa?ref=badge_shield"><img src="https://app.fossa.com/api/projects/git%2Bgithub.com%2FHuLaSpark%2FHuLa.svg?type=shield" alt=""></a>
|
||||
<a href="https://www.bestpractices.dev/zh-CN/projects/9692"><img src="https://bestpractices.coreinfrastructure.org/projects/9692/badge" alt="CI"></a>
|
||||
<img src="https://img.shields.io/badge/TypeScript-blue?logo=Typescript&style=flat&logoColor=fff">
|
||||
<img src="https://img.shields.io/badge/Vue3-35495E?logo=vue.js&logoColor=4FC08D">
|
||||
<img src="https://img.shields.io/badge/Tauri-24C8DB?logo=tauri&logoColor=FFC131">
|
||||
<img src="https://img.shields.io/badge/Rust-c57c54?logo=rust&logoColor=E34F26">
|
||||
<img src="https://img.shields.io/badge/Vite5-35495E?logo=vite&logoColor=41D1FF">
|
||||
<img src="https://img.shields.io/badge/UnoCss-efefef?logo=UnoCss&logoColor=606060">
|
||||
<img src="https://img.shields.io/badge/pnpm-909090?logo=pnpm&logoColor=FFC131">
|
||||
<img src="https://img.shields.io/badge/Sass-CC6699?logo=sass&logoColor=fff">
|
||||
<img src="https://img.shields.io/badge/UI组件库-Naive-059669">
|
||||
</div>
|
||||
|
||||
<p align="center">
|
||||
gitee:<a href="https://gitee.com/HulaSpark/HuLa/stargazers"><img src="https://gitee.com/HulaSpark/HuLa/badge/star.svg?theme=gvp" alt="star"></a>
|
||||
github:<a href="https://gitee.com/link?target=https://github.com/HulaSpark/HuLa/stargazers"><img src="https://img.shields.io/github/stars/HulaSpark/HuLa" alt="star"></a>
|
||||
</p>
|
||||
<p align="center">
|
||||
微信: <img src="https://img.shields.io/badge/cy2439646234-07C160?logo=wechat&logoColor=fff">
|
||||
</p>
|
||||
|
||||
<p align="center"><a href="README.md">English</a> | 中文</p>
|
||||
|
||||
## 项目介绍
|
||||
|
||||
HuLa 是一个基于 Tauri、Vite 5、Vue 3 和 TypeScript 构建的即时通讯系统。它利用了 Tauri 的跨平台能力和 Vue 3 的响应式设计,结合了 TypeScript 的类型安全特性和 Vite 5 的快速构建,为用户提供了一个高效、安全和易用的通讯解决方案。
|
||||
|
||||
## 技术栈
|
||||
|
||||
- **Tauri**: 为本项目提供了一个轻量级的、高性能的桌面应用容器,使得我们可以使用前端技术栈来开发跨平台的桌面应用。Tauri 的设计哲学是在保证安全性的前提下,尽可能减少资源占用。
|
||||
- **Vite 5**: Vite 是一个现代化的前端构建工具,它利用原生 ES 模块导入的能力来提供一个快速的开发服务器,与此同时,它也为生产环境打包提供了强大的支持。Vite 5 是其最新的版本,带来了更多的优化和特性。
|
||||
- **Vue 3**: Vue 3 是一个渐进式JavaScript框架,用于构建用户界面。它的组合式API、更好的TypeScript集成和对移动端的优化使得开发复杂的单页应用变得更加简单和高效。
|
||||
- **TypeScript**: TypeScript 是 JavaScript 的一个超集,它在 JavaScript 的基础上增加了类型系统。这让我们能够在开发过程中捕获更多的错误,并且提供更好的编辑器支持。
|
||||
|
||||
## 项目预览
|
||||
|
||||

|
||||
|
||||

|
||||
|
||||

|
||||
|
||||

|
||||
|
||||

|
||||
|
||||

|
||||
|
||||

|
||||
|
||||

|
||||
|
||||

|
||||
|
||||
## 感谢以下贡献者们!
|
||||
|
||||
<a href="https://github.com/HuLaSpark/HuLa/graphs/contributors">
|
||||
<img src="https://opencollective.com/HuLaSpark/contributors.svg?width=890" />
|
||||
</a>
|
||||
|
||||
## 安装与运行
|
||||
|
||||
```bash
|
||||
# 克隆项目
|
||||
git clone https://gitee.com/HuLaSpark/HuLa.git
|
||||
或者
|
||||
git clone https://github.com/HuLaSpark/HuLa.git
|
||||
|
||||
# 进入项目目录
|
||||
cd HuLa
|
||||
|
||||
# 安装依赖
|
||||
pnpm install
|
||||
|
||||
# 运行开发服务器
|
||||
pnpm run tauri:dev
|
||||
|
||||
# 构建生产版本
|
||||
pnpm run tauri:build
|
||||
```
|
||||
|
||||
## ⚠️ 注意事项(macOS用户)
|
||||
|
||||
网页上下载安装包会提示安装包已损坏,可能会遇到证书问题,这是因为 macOS 系统的安全机制导致的。请按照以下步骤解决:
|
||||
|
||||
#### 1. 打开 “系统设置” - “安全性与隐私”,如图勾选:允许 “任何来源” 下载的 App 运行:
|
||||
|
||||

|
||||
|
||||
#### 2. 如果还报错,请在终端执行以下命令解决:
|
||||
|
||||
```bash
|
||||
sudo xattr -rd com.apple.quarantine 你的安装包路径/HuLa.app
|
||||
```
|
||||
|
||||
## 提交规范
|
||||
|
||||
执行 **pnpm run commit** 唤起 _git commit_ 交互,根据提示完成信息的输入和选择
|
||||
|
||||
## 免责声明
|
||||
|
||||
1. 本项目是作为一个开源项目提供的,开发者在法律允许的范围内不对软件的功能性、安全性或适用性提供任何形式的明示或暗示的保证
|
||||
2. 用户明确理解并同意,使用本软件的风险完全由用户自己承担,软件以"现状"和"现有"基础提供。开发者不提供任何形式的担保,无论是明示还是暗示的,包括但不限于适销性、特定用途的适用性和非侵权的担保
|
||||
3. 在任何情况下,开发者或其供应商都不对任何直接的、间接的、偶然的、特殊的、惩罚性的或后果性的损害承担责任,包括但不限于使用本软件产生的利润损失、业务中断、个人信息泄露或其他商业损害或损失
|
||||
4. 所有在本项目上进行二次开发的用户,都需承诺将本软件用于合法目的,并自行负责遵守当地的法律和法规
|
||||
5. 开发者有权在任何时间修改软件的功能或特性,以及本免责声明的任何部分,并且这些修改可能会以软件更新的形式体现
|
||||
|
||||
**本免责声明的最终解释权归开发者所有**
|
||||
|
||||
|
||||
## License
|
||||
[](https://app.fossa.com/projects/git%2Bgithub.com%2FHuLaSpark%2FHuLa?ref=badge_large)
|
||||
@@ -1,14 +1,60 @@
|
||||
version: '3.7'
|
||||
services:
|
||||
tauri:
|
||||
image: ivangabriele/tauri:debian-bullseye-18 # 使用该镜像打包tauri
|
||||
image: ubuntu:22.04
|
||||
volumes:
|
||||
- .:/app
|
||||
# 只挂载构建产物目录
|
||||
- ./src-tauri/target/release:/app/src-tauri/target/release
|
||||
environment:
|
||||
- RUST_BACKTRACE=1
|
||||
- CARGO_HOME=/root/.cargo
|
||||
- RUSTUP_HOME=/root/.rustup
|
||||
- DEBIAN_FRONTEND=noninteractive
|
||||
command:
|
||||
- 'sh'
|
||||
- 'bash'
|
||||
- '-c'
|
||||
- | # 使用|表示下面的命令将按照顺序执行
|
||||
- |
|
||||
cd /app
|
||||
npm config set registry https://registry.npmmirror.com
|
||||
apt-get update
|
||||
apt-get install -y curl git build-essential libwebkit2gtk-4.1-dev librsvg2-dev patchelf libudev-dev \
|
||||
libasound2-dev pkg-config libgtk-3-dev libayatana-appindicator3-dev
|
||||
|
||||
# 安装 Node.js 22
|
||||
curl -fsSL https://deb.nodesource.com/setup_22.x | bash -
|
||||
apt-get install -y nodejs
|
||||
npm install -g npm@latest
|
||||
|
||||
# 安装指定版本的 pnpm
|
||||
npm install -g pnpm@9
|
||||
pnpm --version
|
||||
|
||||
# 安装 Rust
|
||||
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y
|
||||
source "$CARGO_HOME/env"
|
||||
|
||||
# 配置镜像源
|
||||
pnpm config set registry https://repo.huaweicloud.com/repository/npm/
|
||||
rustup default stable
|
||||
mkdir -p ~/.cargo
|
||||
echo '[source.crates-io]
|
||||
replace-with = "rsproxy-sparse"
|
||||
[source.rsproxy]
|
||||
registry = "https://rsproxy.cn/crates.io-index"
|
||||
[source.rsproxy-sparse]
|
||||
registry = "sparse+https://rsproxy.cn/index/"
|
||||
[registries.rsproxy]
|
||||
index = "https://rsproxy.cn/crates.io-index"' > ~/.cargo/config.toml
|
||||
|
||||
# 构建项目
|
||||
cd /app
|
||||
echo "📦 Installing dependencies..."
|
||||
rm -rf node_modules pnpm-lock.yaml
|
||||
pnpm install
|
||||
pnpm tauri build
|
||||
|
||||
echo "🔨 Building Vite project..."
|
||||
pnpm build || exit 1
|
||||
|
||||
echo "✨ Starting Tauri build..."
|
||||
pnpm tauri build || exit 1
|
||||
echo "✅ Tauri build completed. Check src-tauri/target/release for the output."
|
||||
|
||||
241
docs/qiniu-upload.md
Normal file
@@ -0,0 +1,241 @@
|
||||
# 七牛云上传功能使用指南
|
||||
|
||||
HuLa 现已支持使用七牛云存储服务来上传和存储文件,这为用户提供了更灵活的文件存储选择。本文档将介绍如何在 HuLa 中使用七牛云上传功能。
|
||||
|
||||
## 功能特点
|
||||
|
||||
- 支持在默认上传方式和七牛云之间切换
|
||||
- 使用统一的上传接口,便于集成
|
||||
- 支持大文件上传
|
||||
- 自动生成唯一文件名,避免文件名冲突
|
||||
- 支持进度显示(在浏览器环境中)
|
||||
- 支持多区域上传(华东、华北、华南、北美、东南亚)
|
||||
- 支持分片上传大文件
|
||||
|
||||
## 配置说明
|
||||
|
||||
### 七牛云区域设置
|
||||
|
||||
七牛云提供了多个存储区域,HuLa 支持根据配置自动选择合适的上传域名:
|
||||
|
||||
| 区域代码 | 区域名称 | 上传域名 |
|
||||
|---------|---------|---------|
|
||||
| z0 | 华东 | https://upload.qiniup.com |
|
||||
| z1 | 华北 | https://upload-z1.qiniup.com |
|
||||
| z2 | 华南 | https://upload-z2.qiniup.com |
|
||||
| na0 | 北美 | https://upload-na0.qiniup.com |
|
||||
| as0 | 东南亚 | https://upload-as0.qiniup.com |
|
||||
|
||||
默认情况下,如果未指定区域,系统将使用华南区域(z2)。
|
||||
|
||||
### 后端配置
|
||||
|
||||
后端需要提供以下配置信息:
|
||||
|
||||
```json
|
||||
{
|
||||
"token": "七牛云上传凭证",
|
||||
"domain": "七牛云存储域名",
|
||||
"storagePrefix": "存储前缀",
|
||||
"region": "存储区域代码(可选,默认为z2)"
|
||||
}
|
||||
```
|
||||
|
||||
## 使用方法
|
||||
|
||||
### 在代码中使用
|
||||
|
||||
```typescript
|
||||
import { useUpload, UploadProviderEnum } from '@/hooks/useUpload'
|
||||
import { UploadSceneEnum } from '@/enums'
|
||||
|
||||
// 创建上传hook实例
|
||||
const uploadHook = useUpload()
|
||||
|
||||
// 使用七牛云上传
|
||||
async function uploadToQiniu(filePath: string) {
|
||||
try {
|
||||
// 获取上传和下载URL
|
||||
const result = await uploadHook.getUploadAndDownloadUrl(filePath, {
|
||||
provider: UploadProviderEnum.QINIU,
|
||||
scene: UploadSceneEnum.CHAT
|
||||
})
|
||||
|
||||
// 执行上传
|
||||
await uploadHook.doUpload(filePath, result.uploadUrl, result)
|
||||
|
||||
console.log('上传成功,下载地址:', result.downloadUrl)
|
||||
return result.downloadUrl
|
||||
} catch (error) {
|
||||
console.error('上传失败:', error)
|
||||
throw error
|
||||
}
|
||||
}
|
||||
|
||||
// 使用默认上传方式
|
||||
async function uploadWithDefault(filePath: string) {
|
||||
try {
|
||||
// 获取上传和下载URL
|
||||
const result = await uploadHook.getUploadAndDownloadUrl(filePath, {
|
||||
provider: UploadProviderEnum.DEFAULT,
|
||||
scene: UploadSceneEnum.CHAT
|
||||
})
|
||||
|
||||
// 执行上传
|
||||
await uploadHook.doUpload(filePath, result.uploadUrl, { downloadUrl: result.downloadUrl })
|
||||
|
||||
console.log('上传成功,下载地址:', result.downloadUrl)
|
||||
return result.downloadUrl
|
||||
} catch (error) {
|
||||
console.error('上传失败:', error)
|
||||
throw error
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### 使用分片上传
|
||||
|
||||
对于大文件上传,HuLa 现在支持使用七牛云的分片上传功能,可以提高上传成功率和性能:
|
||||
|
||||
```typescript
|
||||
import { useUpload, UploadProviderEnum } from '@/hooks/useUpload'
|
||||
import { UploadSceneEnum } from '@/enums'
|
||||
|
||||
// 创建上传hook实例
|
||||
const uploadHook = useUpload()
|
||||
|
||||
// 使用七牛云分片上传
|
||||
async function uploadLargeFileToQiniu(filePath: string) {
|
||||
try {
|
||||
// 获取上传和下载URL
|
||||
const result = await uploadHook.getUploadAndDownloadUrl(filePath, {
|
||||
provider: UploadProviderEnum.QINIU,
|
||||
scene: UploadSceneEnum.CHAT
|
||||
})
|
||||
|
||||
// 执行分片上传,指定使用分片上传和分片大小(可选,默认4MB)
|
||||
await uploadHook.doUpload(filePath, result.uploadUrl, {
|
||||
...result,
|
||||
useChunks: true,
|
||||
chunkSize: 4 * 1024 * 1024 // 4MB,可根据需要调整
|
||||
})
|
||||
|
||||
console.log('分片上传成功,下载地址:', result.downloadUrl)
|
||||
return result.downloadUrl
|
||||
} catch (error) {
|
||||
console.error('分片上传失败:', error)
|
||||
throw error
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
分片上传参数说明:
|
||||
|
||||
| 参数名 | 类型 | 说明 |
|
||||
|-------|------|------|
|
||||
| useChunks | boolean | 是否使用分片上传,设置为true启用分片上传 |
|
||||
| chunkSize | number | 分片大小,单位为字节,默认为4MB (4 * 1024 * 1024) |
|
||||
|
||||
当文件大小超过设定的分片大小时,系统会自动将文件分成多个块进行上传,并在上传完成后自动合并。
|
||||
|
||||
### 在消息策略中使用
|
||||
|
||||
HuLa 的消息策略已集成七牛云上传功能,可以通过传递 `provider` 选项来指定使用哪种上传方式:
|
||||
|
||||
```typescript
|
||||
import { messageStrategyMap } from '@/strategy/MessageStrategy'
|
||||
import { MsgEnum } from '@/enums'
|
||||
import { UploadProviderEnum } from '@/hooks/useUpload'
|
||||
|
||||
// 获取图片消息策略
|
||||
const imageStrategy = messageStrategyMap[MsgEnum.IMAGE]
|
||||
|
||||
// 使用七牛云上传
|
||||
async function uploadImageWithQiniu(path: string) {
|
||||
const result = await imageStrategy.uploadFile(path, {
|
||||
provider: UploadProviderEnum.QINIU
|
||||
})
|
||||
|
||||
// 执行上传
|
||||
await imageStrategy.doUpload(path, result.uploadUrl, result)
|
||||
|
||||
return result.downloadUrl
|
||||
}
|
||||
|
||||
// 使用七牛云分片上传大图片
|
||||
async function uploadLargeImageWithQiniu(path: string) {
|
||||
const result = await imageStrategy.uploadFile(path, {
|
||||
provider: UploadProviderEnum.QINIU
|
||||
})
|
||||
|
||||
// 执行分片上传
|
||||
await imageStrategy.doUpload(path, result.uploadUrl, {
|
||||
...result,
|
||||
useChunks: true,
|
||||
chunkSize: 2 * 1024 * 1024 // 2MB分片
|
||||
})
|
||||
|
||||
return result.downloadUrl
|
||||
}
|
||||
```
|
||||
|
||||
## 分片上传原理与优势
|
||||
|
||||
七牛云分片上传功能基于七牛云的分块上传API实现,主要流程如下:
|
||||
|
||||
1. 将大文件分割成固定大小的数据块
|
||||
2. 使用 `/mkblk/<blocksize>` 接口上传第一个数据块
|
||||
3. 使用 `/bput/<ctx>/<offset>` 接口上传后续数据块
|
||||
4. 所有分片上传完成后,使用 `/mkfile/<filesize>/key/<encodedKey>` 接口将所有数据块合并成完整文件
|
||||
|
||||
分片上传的主要优势:
|
||||
|
||||
- **支持断点续传**:上传中断后可以从已上传的部分继续
|
||||
- **提高上传成功率**:大文件分成小块上传,减少单次传输失败的风险
|
||||
- **优化网络利用率**:可以更好地利用网络带宽
|
||||
- **提供上传进度反馈**:可以精确显示每个分片的上传进度
|
||||
|
||||
建议在以下情况使用分片上传:
|
||||
- 上传大于10MB的文件
|
||||
- 网络环境不稳定
|
||||
- 需要显示精确上传进度的场景
|
||||
|
||||
## 配置七牛云
|
||||
|
||||
要使用七牛云上传功能,需要在后端配置七牛云的相关参数:
|
||||
|
||||
1. 在七牛云控制台创建存储空间(Bucket)
|
||||
2. 获取 AccessKey 和 SecretKey
|
||||
3. 配置后端服务,实现获取上传 Token 的接口
|
||||
|
||||
后端需要提供以下接口:
|
||||
|
||||
```
|
||||
GET /api/qiniu/token
|
||||
```
|
||||
|
||||
返回格式:
|
||||
|
||||
```json
|
||||
{
|
||||
"token": "七牛云上传Token",
|
||||
"domain": "七牛云存储域名",
|
||||
"storagePrefix": "存储前缀"
|
||||
}
|
||||
```
|
||||
|
||||
## 测试方法
|
||||
|
||||
1. 在七牛云控制台创建存储空间(Bucket)
|
||||
2. 获取 AccessKey 和 SecretKey
|
||||
3. 配置后端服务,实现获取上传 Token 的接口
|
||||
4. 使用 HuLa 提供的上传接口进行测试
|
||||
|
||||
## 注意事项
|
||||
|
||||
1. 七牛云上传需要有效的 Token,Token 有时效性,过期后需要重新获取
|
||||
2. 上传大文件时,请确保网络稳定
|
||||
3. 在生产环境中,建议配置 HTTPS 域名,确保数据传输安全
|
||||
4. 七牛云存储有容量和流量限制,请根据实际需求选择合适的套餐
|
||||
5. 分片上传时,建议根据网络环境和文件大小调整分片大小,一般推荐1MB-4MB
|
||||
6. 对于特别大的文件(如视频),强烈建议使用分片上传功能
|
||||
@@ -3,7 +3,7 @@
|
||||
<head>
|
||||
<meta charset="UTF-8" />
|
||||
<link rel="icon" type="image/svg+xml" href="/vite.svg" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no viewport-fit=cover" />
|
||||
<title>HuLa</title>
|
||||
|
||||
<!--引入iconpark图标库-->
|
||||
|
||||
125
package.json
@@ -1,109 +1,142 @@
|
||||
{
|
||||
"name": "hula",
|
||||
"type": "module",
|
||||
"version": "2.5.8",
|
||||
"version": "2.6.12",
|
||||
"license": "Apache-2.0",
|
||||
"engines": {
|
||||
"node": ">=18.12.0",
|
||||
"pnpm": ">=8.10.0"
|
||||
"node": ">=18.x",
|
||||
"pnpm": ">=9.x"
|
||||
},
|
||||
"repository": {
|
||||
"url": "https://github.com/HuLaSpark/HuLa.git"
|
||||
},
|
||||
"author": {
|
||||
"name": "nongyehong",
|
||||
"name": "HuLaSpark团队",
|
||||
"email": "2439646234@qq.com",
|
||||
"url": "https://github.com/HuLaSpark/HuLa"
|
||||
"url": "https://github.com/HuLaSpark"
|
||||
},
|
||||
"scripts": {
|
||||
"========= 启动vue(tauri项目会连带执行不需要单独执行) =========": "",
|
||||
"dev": "vite",
|
||||
"========= 打包vue(tauri项目会连带执行不需要单独执行) =========": "",
|
||||
"build": "tsc --noEmit && vite build",
|
||||
"========= 启动tauri =========": "",
|
||||
"build": "vue-tsc --noEmit && vite build",
|
||||
"========= 启动HuLa桌面应用程序 =========": "",
|
||||
"tauri:dev": "tauri dev",
|
||||
"========= 打包tauri =========": "",
|
||||
"========= 打包桌面应用程序 =========": "",
|
||||
"tauri:build": "tauri build",
|
||||
"========= 打包后可调试并且可以弹出控制台 =========": "",
|
||||
"tauri:build:debug": "tauri build --debug",
|
||||
"========= 启动HuLa ios 程序 =========": "",
|
||||
"tauri:ios:dev": "tauri ios dev",
|
||||
"========= 启动HuLa android 程序 =========": "",
|
||||
"tauri:android:dev": "tauri android dev",
|
||||
"========= 初始化 ios =========": "",
|
||||
"tauri:ios:init": "tauri ios init",
|
||||
"========= 初始化 android =========": "",
|
||||
"tauri:android:init": "tauri android init",
|
||||
"========= 生成icon =========": "",
|
||||
"tauri:icon": "tauri icon hula.png",
|
||||
"========= 安装依赖前执行校验包管理器 =========": "",
|
||||
"preinstall": "npx only-allow pnpm",
|
||||
"tauri:icon": "tauri icon public/logo.png",
|
||||
"========= 安装依赖前执行 =========": "",
|
||||
"preinstall": "npx only-allow pnpm && node scripts/check-all.js",
|
||||
"========= 使用commit来进行代码提交 =========": "",
|
||||
"commit": "git add . && git-cz",
|
||||
"========= 校验代码规范 =========": "",
|
||||
"lint:staged": "lint-staged",
|
||||
"lint:staged": "lint-staged && vue-tsc --noEmit",
|
||||
"========= 安装husky =========": "",
|
||||
"prepare": "husky install",
|
||||
"prepare": "husky",
|
||||
"========= 发版 =========": "",
|
||||
"release": "release-it",
|
||||
"========= commit后再次添加修改到上一次的commit =========": "",
|
||||
"addition-commit": "git add . && git commit --amend --no-edit"
|
||||
"addition-commit": "git add . && git commit --amend --no-edit",
|
||||
"========= 单元测试 =========": "",
|
||||
"test:run": "vitest run",
|
||||
"========= 使用 vitest UI =========": "",
|
||||
"test:ui": "vitest --ui --coverage.enabled=true",
|
||||
"========= 测试覆盖率 =========": "",
|
||||
"coverage": "vitest run --coverage"
|
||||
},
|
||||
"dependencies": {
|
||||
"@actions/github": "^6.0.0",
|
||||
"@tauri-apps/api": "2.0.2",
|
||||
"@tauri-apps/plugin-autostart": "2.0.0",
|
||||
"@tauri-apps/plugin-clipboard-manager": "2.0.0",
|
||||
"@tauri-apps/plugin-http": "2.0.0",
|
||||
"@tauri-apps/plugin-os": "2.0.0",
|
||||
"@tauri-apps/plugin-process": "2.0.0",
|
||||
"@tauri-apps/plugin-sql": "^2.0.1",
|
||||
"@tauri-apps/plugin-updater": "~2",
|
||||
"@fingerprintjs/fingerprintjs": "^4.6.0",
|
||||
"@microsoft/fetch-event-source": "^2.0.1",
|
||||
"@tauri-apps/api": "2.5.0",
|
||||
"@tauri-apps/plugin-autostart": "2.3.0",
|
||||
"@tauri-apps/plugin-clipboard-manager": "2.2.2",
|
||||
"@tauri-apps/plugin-dialog": "^2.2.1",
|
||||
"@tauri-apps/plugin-fs": "^2.2.1",
|
||||
"@tauri-apps/plugin-http": "2.4.3",
|
||||
"@tauri-apps/plugin-notification": "^2.2.2",
|
||||
"@tauri-apps/plugin-os": "2.2.1",
|
||||
"@tauri-apps/plugin-process": "2.2.1",
|
||||
"@tauri-apps/plugin-shell": "^2.2.1",
|
||||
"@tauri-apps/plugin-sql": "^2.2.0",
|
||||
"@tauri-apps/plugin-updater": "2.7.1",
|
||||
"colorthief": "^2.6.0",
|
||||
"crypto-js": "^4.2.0",
|
||||
"dayjs": "^1.11.11",
|
||||
"dompurify": "^3.2.4",
|
||||
"event-source-polyfill": "^1.0.31",
|
||||
"grapheme-splitter": "^1.0.4",
|
||||
"hula": "file:",
|
||||
"hula-emojis": "^1.1.0",
|
||||
"hula-emojis": "^1.2.11",
|
||||
"lodash-es": "^4.17.21",
|
||||
"mitt": "^3.0.1",
|
||||
"naive-ui": "^2.40.3",
|
||||
"pinia": "^2.2.1",
|
||||
"pinia-plugin-persistedstate": "^4.1.2",
|
||||
"pinia-shared-state": "^0.5.1",
|
||||
"naive-ui": "^2.41.0",
|
||||
"pinia": "^3.0.1",
|
||||
"pinia-plugin-persistedstate": "^4.2.0",
|
||||
"pinia-shared-state": "^1.0.1",
|
||||
"seemly": "^0.3.10",
|
||||
"vue": "^3.5.13",
|
||||
"vue-draggable-plus": "^0.5.3",
|
||||
"vue-cropper": "1.1.4",
|
||||
"vue-draggable-plus": "^0.6.0",
|
||||
"vue-router": "^4.5.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@babel/eslint-parser": "^7.24.7",
|
||||
"@babel/eslint-parser": "^7.25.9",
|
||||
"@commitlint/cli": "^19.6.0",
|
||||
"@commitlint/config-conventional": "^19.6.0",
|
||||
"@release-it/bumper": "^6.0.1",
|
||||
"@release-it/conventional-changelog": "8.0.2",
|
||||
"@rollup/plugin-terser": "^0.4.4",
|
||||
"@tauri-apps/cli": "2.0.4",
|
||||
"@tauri-apps/cli": "2.5.0",
|
||||
"@types/crypto-js": "^4.2.2",
|
||||
"@types/event-source-polyfill": "^1.0.5",
|
||||
"@types/lodash-es": "^4.17.12",
|
||||
"@types/node": "^20.14.14",
|
||||
"@types/node": "^22.10.7",
|
||||
"@typescript-eslint/eslint-plugin": "7.1.0",
|
||||
"@typescript-eslint/parser": "^7.15.0",
|
||||
"@unocss/preset-uno": "^0.65.0",
|
||||
"@unocss/reset": "^0.65.0",
|
||||
"@unocss/transformer-directives": "^0.65.0",
|
||||
"@unocss/transformer-variant-group": "^0.65.0",
|
||||
"@unocss/vite": "^0.65.0",
|
||||
"@unocss/preset-wind3": "^66.1.1",
|
||||
"@unocss/reset": "^66.1.1",
|
||||
"@unocss/transformer-directives": "^66.1.1",
|
||||
"@unocss/transformer-variant-group": "^66.1.1",
|
||||
"@unocss/vite": "^66.1.1",
|
||||
"@vitejs/plugin-vue": "^5.2.1",
|
||||
"@vitejs/plugin-vue-jsx": "^4.1.1",
|
||||
"@vueuse/core": "^12.0.0",
|
||||
"commitizen": "^4.3.0",
|
||||
"@vitest/coverage-v8": "^3.0.5",
|
||||
"@vitest/ui": "^3.0.5",
|
||||
"@vue/test-utils": "^2.4.6",
|
||||
"@vueuse/core": "^13.2.0",
|
||||
"chalk": "^5.3.0",
|
||||
"commitizen": "^4.3.1",
|
||||
"cz-git": "^1.11.0",
|
||||
"eslint": "^8.57.0",
|
||||
"eslint-config-prettier": "^9.1.0",
|
||||
"eslint-plugin-import": "^2.29.1",
|
||||
"eslint-plugin-prettier": "^5.1.3",
|
||||
"eslint-plugin-vue": "^9.27.0",
|
||||
"happy-dom": "^15.11.7",
|
||||
"husky": "^9.0.11",
|
||||
"lint-staged": "^15.2.7",
|
||||
"oxlint": "^0.2.18",
|
||||
"prettier": "^3.3.2",
|
||||
"release-it": "^17.10.0",
|
||||
"sass": "1.81.1",
|
||||
"typescript": "^5.7.2",
|
||||
"unplugin-auto-import": "^0.18.6",
|
||||
"unplugin-vue-components": "^0.27.5",
|
||||
"vite": "6.0.2",
|
||||
"vue-tsc": "^2.1.10"
|
||||
"release-it": "^17.11.0",
|
||||
"sass": "1.83.0",
|
||||
"typescript": "^5.8.3",
|
||||
"unplugin-auto-import": "^19.1.1",
|
||||
"unplugin-vue-components": "^28.4.1",
|
||||
"vite": "6.3.4",
|
||||
"vite-plugin-vue-setup-extend": "^0.4.0",
|
||||
"vitest": "^3.0.5",
|
||||
"vue-tsc": "^2.2.0"
|
||||
},
|
||||
"config": {
|
||||
"commitizen": {
|
||||
|
||||
4722
pnpm-lock.yaml
generated
BIN
preview/img.png
|
Before Width: | Height: | Size: 221 KiB After Width: | Height: | Size: 1.5 MiB |
|
Before Width: | Height: | Size: 592 KiB After Width: | Height: | Size: 1.6 MiB |
BIN
preview/img_10.png
Normal file
|
After Width: | Height: | Size: 181 KiB |
|
Before Width: | Height: | Size: 615 KiB After Width: | Height: | Size: 1.6 MiB |
|
Before Width: | Height: | Size: 1000 KiB After Width: | Height: | Size: 840 KiB |
|
Before Width: | Height: | Size: 250 KiB After Width: | Height: | Size: 490 KiB |
|
Before Width: | Height: | Size: 477 KiB After Width: | Height: | Size: 633 KiB |
|
Before Width: | Height: | Size: 289 KiB After Width: | Height: | Size: 492 KiB |
|
Before Width: | Height: | Size: 2.1 MiB After Width: | Height: | Size: 358 KiB |
|
Before Width: | Height: | Size: 930 KiB After Width: | Height: | Size: 477 KiB |
|
Before Width: | Height: | Size: 181 KiB After Width: | Height: | Size: 289 KiB |
BIN
preview/wx.png
Normal file
|
After Width: | Height: | Size: 210 KiB |
BIN
preview/zfb.png
Normal file
|
After Width: | Height: | Size: 170 KiB |
BIN
preview/zs.jpg
Normal file
|
After Width: | Height: | Size: 90 KiB |
BIN
public/AI/QW.png
Normal file
|
After Width: | Height: | Size: 134 KiB |
BIN
public/AI/deepseek.png
Normal file
|
After Width: | Height: | Size: 10 KiB |
1
public/AI/openai.svg
Normal file
@@ -0,0 +1 @@
|
||||
<svg fill="currentColor" fill-rule="evenodd" height="14" viewBox="0 0 24 24" width="14" xmlns="http://www.w3.org/2000/svg" color="rgb(171, 104, 255)" style="flex: 0 0 auto; line-height: 1;"><title>OpenAI</title><path d="M21.55 10.004a5.416 5.416 0 00-.478-4.501c-1.217-2.09-3.662-3.166-6.05-2.66A5.59 5.59 0 0010.831 1C8.39.995 6.224 2.546 5.473 4.838A5.553 5.553 0 001.76 7.496a5.487 5.487 0 00.691 6.5 5.416 5.416 0 00.477 4.502c1.217 2.09 3.662 3.165 6.05 2.66A5.586 5.586 0 0013.168 23c2.443.006 4.61-1.546 5.361-3.84a5.553 5.553 0 003.715-2.66 5.488 5.488 0 00-.693-6.497v.001zm-8.381 11.558a4.199 4.199 0 01-2.675-.954c.034-.018.093-.05.132-.074l4.44-2.53a.71.71 0 00.364-.623v-6.176l1.877 1.069c.02.01.033.029.036.05v5.115c-.003 2.274-1.87 4.118-4.174 4.123zM4.192 17.78a4.059 4.059 0 01-.498-2.763c.032.02.09.055.131.078l4.44 2.53c.225.13.504.13.73 0l5.42-3.088v2.138a.068.068 0 01-.027.057L9.9 19.288c-1.999 1.136-4.552.46-5.707-1.51h-.001zM3.023 8.216A4.15 4.15 0 015.198 6.41l-.002.151v5.06a.711.711 0 00.364.624l5.42 3.087-1.876 1.07a.067.067 0 01-.063.005l-4.489-2.559c-1.995-1.14-2.679-3.658-1.53-5.63h.001zm15.417 3.54l-5.42-3.088L14.896 7.6a.067.067 0 01.063-.006l4.489 2.557c1.998 1.14 2.683 3.662 1.529 5.633a4.163 4.163 0 01-2.174 1.807V12.38a.71.71 0 00-.363-.623zm1.867-2.773a6.04 6.04 0 00-.132-.078l-4.44-2.53a.731.731 0 00-.729 0l-5.42 3.088V7.325a.068.068 0 01.027-.057L14.1 4.713c2-1.137 4.555-.46 5.707 1.513.487.833.664 1.809.499 2.757h.001zm-11.741 3.81l-1.877-1.068a.065.065 0 01-.036-.051V6.559c.001-2.277 1.873-4.122 4.181-4.12.976 0 1.92.338 2.671.954-.034.018-.092.05-.131.073l-4.44 2.53a.71.71 0 00-.365.623l-.003 6.173v.002zm1.02-2.168L12 9.25l2.414 1.375v2.75L12 14.75l-2.415-1.375v-2.75z"></path></svg>
|
||||
|
After Width: | Height: | Size: 1.7 KiB |
BIN
public/avatar/001.png
Normal file
|
After Width: | Height: | Size: 201 KiB |
BIN
public/avatar/002.png
Normal file
|
After Width: | Height: | Size: 207 KiB |
BIN
public/avatar/003.png
Normal file
|
After Width: | Height: | Size: 186 KiB |
BIN
public/avatar/004.png
Normal file
|
After Width: | Height: | Size: 206 KiB |
BIN
public/avatar/005.png
Normal file
|
After Width: | Height: | Size: 227 KiB |
BIN
public/avatar/006.png
Normal file
|
After Width: | Height: | Size: 204 KiB |
BIN
public/avatar/007.png
Normal file
|
After Width: | Height: | Size: 191 KiB |
BIN
public/avatar/008.png
Normal file
|
After Width: | Height: | Size: 204 KiB |
BIN
public/avatar/009.png
Normal file
|
After Width: | Height: | Size: 200 KiB |
BIN
public/avatar/010.png
Normal file
|
After Width: | Height: | Size: 210 KiB |
BIN
public/avatar/011.png
Normal file
|
After Width: | Height: | Size: 193 KiB |
BIN
public/avatar/012.png
Normal file
|
After Width: | Height: | Size: 181 KiB |
BIN
public/avatar/013.png
Normal file
|
After Width: | Height: | Size: 212 KiB |
BIN
public/avatar/014.png
Normal file
|
After Width: | Height: | Size: 209 KiB |
BIN
public/avatar/015.png
Normal file
|
After Width: | Height: | Size: 192 KiB |
BIN
public/avatar/016.png
Normal file
|
After Width: | Height: | Size: 188 KiB |
BIN
public/avatar/017.png
Normal file
|
After Width: | Height: | Size: 212 KiB |
BIN
public/avatar/018.png
Normal file
|
After Width: | Height: | Size: 208 KiB |
BIN
public/avatar/019.png
Normal file
|
After Width: | Height: | Size: 202 KiB |
BIN
public/avatar/020.png
Normal file
|
After Width: | Height: | Size: 210 KiB |
BIN
public/avatar/021.png
Normal file
|
After Width: | Height: | Size: 211 KiB |
BIN
public/msg.png
|
Before Width: | Height: | Size: 601 B |
BIN
public/msgAction/bomb.png
Normal file
|
After Width: | Height: | Size: 736 KiB |
BIN
public/msgAction/clapping.png
Normal file
|
After Width: | Height: | Size: 483 KiB |
BIN
public/msgAction/enraged-face.png
Normal file
|
After Width: | Height: | Size: 1.1 MiB |
BIN
public/msgAction/exploding-head.png
Normal file
|
After Width: | Height: | Size: 1.1 MiB |
BIN
public/msgAction/face-with-tears-of-joy.png
Normal file
|
After Width: | Height: | Size: 728 KiB |
BIN
public/msgAction/flashlight.png
Normal file
|
After Width: | Height: | Size: 9.4 KiB |
BIN
public/msgAction/heart-on-fire.png
Normal file
|
After Width: | Height: | Size: 1.1 MiB |
BIN
public/msgAction/like.png
Normal file
|
After Width: | Height: | Size: 762 KiB |
BIN
public/msgAction/pocket-money.png
Normal file
|
After Width: | Height: | Size: 16 KiB |
BIN
public/msgAction/rose.png
Normal file
|
After Width: | Height: | Size: 12 KiB |
BIN
public/msgAction/slightly-frowning-face.png
Normal file
|
After Width: | Height: | Size: 1.1 MiB |
BIN
public/msgAction/victory-hand.png
Normal file
|
After Width: | Height: | Size: 80 KiB |
@@ -1,6 +1,62 @@
|
||||
{
|
||||
"$schema": "https://docs.renovatebot.com/renovate-schema.json",
|
||||
"extends": [
|
||||
"config:recommended"
|
||||
]
|
||||
"automerge": false,
|
||||
"dependencyDashboard": true,
|
||||
"ignoreDeps": [],
|
||||
"labels": ["dependencies", "skip-ci"],
|
||||
"postUpdateOptions": ["yarnDedupeHighest"],
|
||||
"prConcurrentLimit": 30,
|
||||
"prHourlyLimit": 4,
|
||||
"rebaseWhen": "conflicted",
|
||||
"schedule": "on sunday at 9:00am",
|
||||
"timezone": "Asia/Shanghai",
|
||||
"vulnerabilityAlerts": {
|
||||
"labels": ["security"],
|
||||
"automerge": true
|
||||
},
|
||||
"rangeStrategy": "bump",
|
||||
"lockFileMaintenance": {
|
||||
"enabled": true,
|
||||
"schedule": ["on sunday at 9:00am"]
|
||||
},
|
||||
"packageRules": [
|
||||
{
|
||||
"matchUpdateTypes": ["minor", "patch"],
|
||||
"groupName": "non-major dependencies",
|
||||
"groupSlug": "minor-patch-updates"
|
||||
},
|
||||
{
|
||||
"groupName": "Tauri dependencies",
|
||||
"groupSlug": "tauri-deps",
|
||||
"matchPackagePatterns": ["^@tauri-apps/"],
|
||||
"matchManagers": ["npm"],
|
||||
"rangeStrategy": "replace"
|
||||
},
|
||||
{
|
||||
"groupName": "UnoCSS dependencies",
|
||||
"groupSlug": "unocss-deps",
|
||||
"matchPackagePatterns": ["^@unocss/"],
|
||||
"matchManagers": ["npm"],
|
||||
"rangeStrategy": "replace"
|
||||
},
|
||||
{
|
||||
"description": "Rust crate updates",
|
||||
"matchManagers": ["cargo"],
|
||||
"groupName": "Rust dependencies",
|
||||
"groupSlug": "rust-deps",
|
||||
"enabled": true,
|
||||
"registryUrls": ["https://crates.io"],
|
||||
"rangeStrategy": "replace"
|
||||
},
|
||||
{
|
||||
"matchUpdateTypes": ["patch", "digest", "pin"],
|
||||
"matchManagers": ["npm", "cargo"]
|
||||
},
|
||||
{
|
||||
"matchManagers": ["npm", "cargo"],
|
||||
"rangeStrategy": "replace"
|
||||
}
|
||||
],
|
||||
"enabledManagers": ["npm", "cargo"],
|
||||
"updateInternalDeps": true
|
||||
}
|
||||
|
||||
62
scripts/check-all.js
Normal file
@@ -0,0 +1,62 @@
|
||||
import { execSync } from 'child_process'
|
||||
import chalk from 'chalk'
|
||||
import { fileURLToPath } from 'url'
|
||||
import { dirname, join } from 'path'
|
||||
|
||||
const __filename = fileURLToPath(import.meta.url)
|
||||
const __dirname = dirname(__filename)
|
||||
|
||||
/**
|
||||
* 执行单个检查脚本
|
||||
* @param {string} scriptPath - 脚本路径
|
||||
* @param {string} description - 检查描述
|
||||
*/
|
||||
async function runScript(scriptPath, description) {
|
||||
const startTime = performance.now()
|
||||
console.log(chalk.blue(`\n[HuLa ${new Date().toLocaleTimeString()}] 开始${description}...\n`))
|
||||
|
||||
try {
|
||||
execSync(`node ${scriptPath}`, { stdio: 'inherit' })
|
||||
const duration = ((performance.now() - startTime) / 1000).toFixed(2)
|
||||
console.log(chalk.green(`\n✓ ${description}完成 (${duration}s)\n`))
|
||||
return true
|
||||
} catch (error) {
|
||||
console.error(chalk.red(`\n✗ ${description}失败`))
|
||||
return false
|
||||
}
|
||||
}
|
||||
|
||||
async function main() {
|
||||
console.log(chalk.cyan('正在检查HuLa需要的环境配置...\n'))
|
||||
|
||||
/** @type {CheckItem[]} */
|
||||
const checks = [
|
||||
{
|
||||
script: join(__dirname, 'check-env.js'),
|
||||
description: '配置文件检查'
|
||||
},
|
||||
{
|
||||
script: join(__dirname, 'check-dependencies.js'),
|
||||
description: '环境检查'
|
||||
}
|
||||
]
|
||||
|
||||
const startTime = performance.now()
|
||||
|
||||
for (const check of checks) {
|
||||
const success = await runScript(check.script, check.description)
|
||||
if (!success) {
|
||||
console.error(chalk.red(`\n${check.description}未通过,终止检查流程\n`))
|
||||
process.exit(1)
|
||||
}
|
||||
}
|
||||
|
||||
const totalDuration = ((performance.now() - startTime) / 1000).toFixed(2)
|
||||
console.log(chalk.green(`\n✨ 所有检查通过!总用时:${totalDuration}s\n`))
|
||||
}
|
||||
|
||||
main().catch((error) => {
|
||||
console.error(chalk.red('\n检查过程中发生错误:'))
|
||||
console.error(chalk.yellow(error.stack || error))
|
||||
process.exit(1)
|
||||
})
|
||||
191
scripts/check-dependencies.js
Normal file
@@ -0,0 +1,191 @@
|
||||
import { execSync } from 'child_process'
|
||||
import chalk from 'chalk'
|
||||
import { platform } from 'os'
|
||||
import { existsSync } from 'fs'
|
||||
|
||||
// 环境安装指南
|
||||
const INSTALL_GUIDES = {
|
||||
'Node.js': 'https://nodejs.org/zh-cn/download/',
|
||||
pnpm: 'https://pnpm.io/zh/installation',
|
||||
Rust: 'https://www.rust-lang.org/tools/install',
|
||||
'WebView2 Runtime': 'https://developer.microsoft.com/microsoft-edge/webview2/'
|
||||
}
|
||||
|
||||
// 更新指南
|
||||
const UPDATE_GUIDES = {
|
||||
Rust: '请运行 `rustup update` 命令更新 Rust 版本'
|
||||
}
|
||||
|
||||
// Windows 特定的检查路径
|
||||
const WINDOWS_PATHS = {
|
||||
'WebView2 Runtime': [
|
||||
'C:\\Program Files (x86)\\Microsoft\\EdgeWebView\\Application',
|
||||
'C:\\Program Files\\Microsoft\\EdgeWebView\\Application',
|
||||
'C:\\Windows\\SystemApps\\Microsoft.Win32WebViewHost_cw5n1h2txyewy'
|
||||
]
|
||||
}
|
||||
|
||||
// 错误信息映射
|
||||
const ERROR_MESSAGES = {
|
||||
ENOENT: '命令未找到',
|
||||
EPERM: '权限不足',
|
||||
EACCES: '访问被拒绝'
|
||||
}
|
||||
|
||||
const checks = [
|
||||
{
|
||||
name: 'Node.js',
|
||||
command: 'node --version',
|
||||
versionExtractor: (output) => output.replace('v', ''),
|
||||
minVersion: '18.0.0',
|
||||
isRequired: true
|
||||
},
|
||||
{
|
||||
name: 'pnpm',
|
||||
command: 'pnpm --version',
|
||||
versionExtractor: (output) => output.trim(),
|
||||
minVersion: '9.0.0',
|
||||
isRequired: true
|
||||
},
|
||||
{
|
||||
name: 'Rust',
|
||||
command: 'rustc --version',
|
||||
versionExtractor: (output) => output.split(' ')[1],
|
||||
minVersion: '1.86.0',
|
||||
isRequired: true
|
||||
}
|
||||
]
|
||||
|
||||
/**
|
||||
* 检查 WebView2 是否安装
|
||||
* @returns {boolean}
|
||||
*/
|
||||
const checkWebView2 = () => {
|
||||
try {
|
||||
// 检查注册表
|
||||
const regQuery =
|
||||
'reg query "HKLM\\SOFTWARE\\WOW6432Node\\Microsoft\\EdgeUpdate\\Clients\\{F3017226-FE2A-4295-8BDF-00C3A9A7E4C5}" /v pv'
|
||||
execSync(regQuery, { stdio: 'ignore' })
|
||||
return true
|
||||
} catch {
|
||||
// 如果注册表查询失败,检查文件路径
|
||||
return WINDOWS_PATHS['WebView2 Runtime'].some((path) => existsSync(path))
|
||||
}
|
||||
}
|
||||
|
||||
// Windows 特定的检查
|
||||
const windowsChecks = [
|
||||
{
|
||||
name: 'WebView2 Runtime',
|
||||
checkInstalled: checkWebView2,
|
||||
isRequired: true
|
||||
}
|
||||
]
|
||||
|
||||
/**
|
||||
* 获取友好的错误提示
|
||||
* @param {Error} error 错误对象
|
||||
* @returns {string} 错误提示
|
||||
*/
|
||||
const getFriendlyErrorMessage = (error) => {
|
||||
const code = error.code || ''
|
||||
return ERROR_MESSAGES[code] || error.message || '未知错误'
|
||||
}
|
||||
|
||||
/**
|
||||
* 比较版本号
|
||||
* @param {string} version1 当前版本
|
||||
* @param {string} version2 所需版本
|
||||
* @returns {number} 1: version1 大, -1: version2 大, 0: 相等
|
||||
*/
|
||||
const compareVersions = (version1, version2) => {
|
||||
const v1 = version1.replace(/[^0-9.]/g, '').split('.')
|
||||
const v2 = version2.replace(/[^0-9.]/g, '').split('.')
|
||||
|
||||
for (let i = 0; i < Math.max(v1.length, v2.length); i++) {
|
||||
const num1 = parseInt(v1[i] || '0')
|
||||
const num2 = parseInt(v2[i] || '0')
|
||||
if (num1 > num2) return 1
|
||||
if (num1 < num2) return -1
|
||||
}
|
||||
return 0
|
||||
}
|
||||
|
||||
function checkDependency(check) {
|
||||
try {
|
||||
const output = execSync(check.command).toString().trim()
|
||||
const version = check.versionExtractor(output)
|
||||
const isVersionValid = compareVersions(version, check.minVersion) >= 0
|
||||
|
||||
if (isVersionValid) {
|
||||
console.log(chalk.green(`✓ ${check.name} 版本 ${output} 已安装\n`))
|
||||
return true
|
||||
} else {
|
||||
console.log(chalk.yellow(`⚠️ ${check.name} 版本过低`))
|
||||
console.log(chalk.yellow(` 当前版本: ${output}`))
|
||||
console.log(chalk.yellow(` 需要版本: >=${check.minVersion}`))
|
||||
|
||||
// 对 Rust 进行特殊处理,提示使用 rustup update
|
||||
if (check.name === 'Rust') {
|
||||
console.log(chalk.yellow(` ${UPDATE_GUIDES[check.name]}`))
|
||||
}
|
||||
|
||||
console.log(chalk.gray(` 👉 升级指南: ${INSTALL_GUIDES[check.name]}`))
|
||||
return false
|
||||
}
|
||||
} catch (error) {
|
||||
const errorMessage = getFriendlyErrorMessage(error)
|
||||
console.log(chalk.red(`✗ ${check.name} 未安装`))
|
||||
console.log(chalk.red(` 原因: ${errorMessage}`))
|
||||
console.log(chalk.gray(` 👉 安装指南: ${INSTALL_GUIDES[check.name]}`))
|
||||
return false
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 检查 Windows 特定的依赖
|
||||
* @param {Object} check 检查项
|
||||
* @returns {boolean} 是否通过检查
|
||||
*/
|
||||
function checkWindowsDependency(check) {
|
||||
try {
|
||||
const isInstalled = check.checkInstalled()
|
||||
if (isInstalled) {
|
||||
console.log(chalk.green(`✓ ${check.name} 已安装`))
|
||||
return true
|
||||
} else {
|
||||
console.log(chalk.red(`✗ ${check.name} 未安装`))
|
||||
console.log(chalk.gray(` 👉 安装指南: ${INSTALL_GUIDES[check.name]}`))
|
||||
return false
|
||||
}
|
||||
} catch (error) {
|
||||
const errorMessage = getFriendlyErrorMessage(error)
|
||||
console.log(chalk.red(`✗ ${check.name} 检查失败`))
|
||||
console.log(chalk.red(` 原因: ${errorMessage}`))
|
||||
return false
|
||||
}
|
||||
}
|
||||
|
||||
function main() {
|
||||
const isWindows = platform() === 'win32'
|
||||
|
||||
// 执行基本检查
|
||||
const results = checks.map(checkDependency)
|
||||
|
||||
// 在 Windows 上执行额外检查
|
||||
if (isWindows) {
|
||||
console.log(chalk.blue(`\n[HuLa ${new Date().toLocaleTimeString()}] 正在检查 Windows 开发环境...\n`))
|
||||
const windowsResults = windowsChecks.map(checkWindowsDependency)
|
||||
results.push(...windowsResults)
|
||||
}
|
||||
|
||||
if (results.every(Boolean)) {
|
||||
console.log(chalk.green('\n✓ 所有环境检查通过!'))
|
||||
process.exit(0)
|
||||
} else {
|
||||
console.log(chalk.red('\n✗ 环境依赖检查失败,请按照上述提示安装或更新依赖。'))
|
||||
process.exit(1)
|
||||
}
|
||||
}
|
||||
|
||||
main()
|
||||