Compare commits
157 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
8b9b088c81 | ||
|
|
3ded02e124 | ||
|
|
6870859266 | ||
|
|
415ff1c98d | ||
|
|
c2ab1c550c | ||
|
|
587363ace4 | ||
|
|
f3c3408d71 | ||
|
|
02858f3da7 | ||
|
|
422e55315b | ||
|
|
663e63db3e | ||
|
|
d712441c23 | ||
|
|
5e49823fd4 | ||
|
|
12169746af | ||
|
|
2e8ec962b6 | ||
|
|
6d34b7cb65 | ||
|
|
4550e38ab6 | ||
|
|
6e86ac64bb | ||
|
|
5af4b64174 | ||
|
|
6d05f00dc7 | ||
|
|
e133135c8f | ||
|
|
7bfa5df594 | ||
|
|
000cd51dc0 | ||
|
|
e67763fa60 | ||
|
|
a2985d9719 | ||
|
|
f53fcb0a71 | ||
|
|
99d652ac5d | ||
|
|
93b189210b | ||
|
|
211a992022 | ||
|
|
4b500f6169 | ||
|
|
87c6d0e4e8 | ||
|
|
af251ec06d | ||
|
|
dcbd90eea2 | ||
|
|
2a6aa046e2 | ||
|
|
43d4a8b6bc | ||
|
|
8a30265412 | ||
|
|
7cb8a17a5b | ||
|
|
234c13ee11 | ||
|
|
34dde3b3b9 | ||
|
|
9139c0460f | ||
|
|
3f0c47ea79 | ||
|
|
6e36516eb8 | ||
|
|
543239a85b | ||
|
|
0cb12c5bd3 | ||
|
|
bdde9ef17c | ||
|
|
95ff9ce765 | ||
|
|
0a53639285 | ||
|
|
2accdfea74 | ||
|
|
38111b6abd | ||
|
|
8a0543d627 | ||
|
|
6445ac4dc1 | ||
|
|
8add932e79 | ||
|
|
f28188dc04 | ||
|
|
c51d537efb | ||
|
|
0dec0e2c94 | ||
|
|
c6b63a619b | ||
|
|
97821208d9 | ||
|
|
d925fa97e2 | ||
|
|
b95f0a8f9b | ||
|
|
ac4ed5dedf | ||
|
|
d44be02f9b | ||
|
|
7df84a2cb8 | ||
|
|
789b388a6f | ||
|
|
47029ce802 | ||
|
|
70bafa9ca2 | ||
|
|
110a6687f4 | ||
|
|
cc71ab05fb | ||
|
|
0c41ce4725 | ||
|
|
09211c8b7f | ||
|
|
87782187d7 | ||
|
|
120abe7a17 | ||
|
|
fe6d0b423d | ||
|
|
31f13caa1e | ||
|
|
1944f2c55b | ||
|
|
24ff9b8018 | ||
|
|
188dda4a1b | ||
|
|
e01c6cf474 | ||
|
|
99a87cc2ac | ||
|
|
2807ce48a6 | ||
|
|
f9b64c5c6a | ||
|
|
1038c9cdb7 | ||
|
|
87f9df80a5 | ||
|
|
d8f4a4c2bf | ||
|
|
3537751d65 | ||
|
|
66f77da754 | ||
|
|
7da01c117d | ||
|
|
722b5598fe | ||
|
|
ba962ae4c6 | ||
|
|
f121644bc4 | ||
|
|
1d810117b0 | ||
|
|
be7c294f7e | ||
|
|
0e1bcdaffe | ||
|
|
51d47c7ca6 | ||
|
|
28f05a757d | ||
|
|
c2db42d9f7 | ||
|
|
49855ea118 | ||
|
|
f5da601620 | ||
|
|
9f707db9f7 | ||
|
|
d30a70d4aa | ||
|
|
036b3c47a7 | ||
|
|
77c513b516 | ||
|
|
69f40cd495 | ||
|
|
9c79e0b822 | ||
|
|
c56b05b4f1 | ||
|
|
b5c7c6e8b1 | ||
|
|
480f1739f5 | ||
|
|
b0a480d65b | ||
|
|
d7aee50cc5 | ||
|
|
fe176ad418 | ||
|
|
5c2556a0c3 | ||
|
|
320e53b567 | ||
|
|
21698dc728 | ||
|
|
9b4b6fb7ab | ||
|
|
8c8f8e3a2d | ||
|
|
5e6e7ee047 | ||
|
|
2872d0f983 | ||
|
|
67e242308e | ||
|
|
a2df7b2d22 | ||
|
|
7b8be1adf9 | ||
|
|
9c73290033 | ||
|
|
6aaf9ea7d9 | ||
|
|
ada60d0d3b | ||
|
|
bbe329d677 | ||
|
|
47ed849f70 | ||
|
|
0d65ba7168 | ||
|
|
da2285a8d0 | ||
|
|
572180234f | ||
|
|
1497533f14 | ||
|
|
3b6970d8c3 | ||
|
|
8fc90d7144 | ||
|
|
c716cf79ed | ||
|
|
9057e613c7 | ||
|
|
a929e2cbe8 | ||
|
|
2d321aad9c | ||
|
|
43de734884 | ||
|
|
b3997815e1 | ||
|
|
52cbfb9f6b | ||
|
|
6d2d2b18d1 | ||
|
|
f7df9ec804 | ||
|
|
3f2ea530fe | ||
|
|
240356da0a | ||
|
|
57de268f06 | ||
|
|
3c238a0f0b | ||
|
|
d6dbddaf87 | ||
|
|
2a84e25f4a | ||
|
|
d1a4b6e97d | ||
|
|
f4a9069ea4 | ||
|
|
7cfd47c36b | ||
|
|
fcc5d3db15 | ||
|
|
2f19691a57 | ||
|
|
83ddadd451 | ||
|
|
b965cccbf1 | ||
|
|
8b60a7f8dd | ||
|
|
04c9907490 | ||
|
|
adef358534 | ||
|
|
fcdad22d94 | ||
|
|
bbc142ac2d | ||
|
|
7169bc202e |
@@ -1,3 +1,3 @@
|
||||
VITE_SENTRY_RELEASE=TeyvatGuide@0.9.6
|
||||
VITE_COMMIT_HASH=40ffb41f
|
||||
VITE_BUILD_TIME=1772034641
|
||||
VITE_SENTRY_RELEASE=TeyvatGuide@0.10.0
|
||||
VITE_COMMIT_HASH=3ded02e1
|
||||
VITE_BUILD_TIME=1776054886
|
||||
|
||||
4
.github/workflows/build.yml
vendored
@@ -29,7 +29,7 @@ jobs:
|
||||
runs-on: ${{ matrix.settings.platform }}
|
||||
env:
|
||||
SENTRY_AUTH_TOKEN: ${{ secrets.SENTRY_AUTH_TOKEN }}
|
||||
APP_VERSION: ${{ github.sha }}
|
||||
APP_VERSION: ${{ github.ref_name }}
|
||||
|
||||
steps:
|
||||
- name: Checkout
|
||||
@@ -69,7 +69,7 @@ jobs:
|
||||
- name: setup pnpm
|
||||
uses: pnpm/action-setup@v2
|
||||
with:
|
||||
version: 10.23.0
|
||||
version: 10.33.0
|
||||
- name: Install frontend dependencies
|
||||
run: pnpm install
|
||||
- name: Setup sentry-cli
|
||||
|
||||
3
.gitignore
vendored
@@ -10,4 +10,5 @@ dist
|
||||
*.tsbuildinfo
|
||||
|
||||
# Sentry Config File
|
||||
.env.development.local
|
||||
.env.development.local
|
||||
package-lock.json
|
||||
|
||||
87
.trae/rules/git-commit-rules.md
Normal file
@@ -0,0 +1,87 @@
|
||||
# Git Commit 规则
|
||||
|
||||
## 核心规则
|
||||
|
||||
1. **原子提交**:每个 commit 只包含一个主题的变更,不同主题的变更应分成多个 commit
|
||||
2. **分步提交**:分步执行 `git add <文件路径>` 再 `git commit -m "<emoji> <描述>"`
|
||||
3. **单一 emoji**:每条提交只使用一个 emoji,位于开头
|
||||
4. **Unicode 格式**:使用 Unicode emoji 图标(如 ✨),不要纯文本(如 `:sparkles:`)
|
||||
5. **中文描述**:以动词开头,一行不超过 100 字符
|
||||
6. **禁止 type: 声明**:不要使用 `✨ feat: xxx` 格式
|
||||
|
||||
## 提交格式
|
||||
|
||||
```
|
||||
<emoji> <描述>
|
||||
```
|
||||
|
||||
## 原子提交原则
|
||||
|
||||
**每个 commit 应该只关注一个主题**,如果一次修改涉及多个方面,应该拆分成多个 commit:
|
||||
|
||||
### ✅ 正确的提交方式
|
||||
|
||||
```bash
|
||||
# 提交 1:重构组件逻辑
|
||||
git add src/components/viewpost/vp-overlay-image.vue
|
||||
git commit -m "♻️ 重构图片浮窗组件拖拽缩放逻辑"
|
||||
|
||||
# 提交 2:更新规范文档
|
||||
git add .trae/skills/typescript-standards/skill.md
|
||||
git commit -m "📝 更新 TypeScript 类型注解规范"
|
||||
```
|
||||
|
||||
### ❌ 错误的提交方式
|
||||
|
||||
```bash
|
||||
# 不要将不同主题的变更混在一个 commit 中
|
||||
git add src/components/viewpost/vp-overlay-image.vue .trae/skills/typescript-standards/skill.md
|
||||
git commit -m "♻️ 重构组件并更新 TypeScript 规范" # ❌ 包含两个主题
|
||||
```
|
||||
|
||||
### 拆分指南
|
||||
|
||||
| 场景 | 拆分方式 |
|
||||
| ------------------- | ----------------- |
|
||||
| 代码重构 + 文档更新 | 分成两个 commit |
|
||||
| 功能开发 + Bug 修复 | 分成两个 commit |
|
||||
| 多个组件修改 | 按组件拆分 commit |
|
||||
| 代码修改 + 配置文件 | 分成两个 commit |
|
||||
| 功能开发 + 样式调整 | 分成两个 commit |
|
||||
|
||||
## Emoji 速查
|
||||
|
||||
| 类别 | Emoji | 场景 |
|
||||
| ------ | ----- | ------------- |
|
||||
| 新增 | ✨ | 新功能 |
|
||||
| 新增 | 🎨 | 代码结构/格式 |
|
||||
| 新增 | 📝 | 文档 |
|
||||
| 修改 | 🐛 | Bug 修复 |
|
||||
| 修改 | 🩹 | 小修复/补丁 |
|
||||
| 修改 | ⚡️ | 性能优化 |
|
||||
| 修改 | ♻️ | 重构 |
|
||||
| 修改 | 💄 | UI/样式 |
|
||||
| 删除 | 🔥 | 删除代码/文件 |
|
||||
| 删除 | ⚰️ | 删除死代码 |
|
||||
| 依赖 | ➕ | 添加依赖 |
|
||||
| 依赖 | ➖ | 删除依赖 |
|
||||
| 依赖 | ⬆️ | 升级依赖 |
|
||||
| 部署 | 🚀 | 部署 |
|
||||
| 部署 | 📦 | 编译/打包 |
|
||||
| 数据库 | 🗃️ | 数据库变更 |
|
||||
| 安全 | 🔒 | 安全问题 |
|
||||
| 架构 | 🏗️ | 架构变更 |
|
||||
| 体验 | 🧑💻 | 开发体验 |
|
||||
| 进行中 | 🚧 | 进行中工作 |
|
||||
|
||||
## 示例
|
||||
|
||||
```
|
||||
✨ 添加用户个人页面跳转功能
|
||||
🐛 修复角色生日判断逻辑
|
||||
🩹 补充首页 mini 参数处理
|
||||
♻️ 重构数据库操作为事务模式
|
||||
⚡️ 优化角色列表渲染性能
|
||||
📝 更新 TypeScript 类型注解规范
|
||||
🎨 调整组件代码格式
|
||||
```
|
||||
58
.trae/rules/sqlite-rules.md
Normal file
@@ -0,0 +1,58 @@
|
||||
---
|
||||
alwaysApply: false
|
||||
description: SQLite 数据库操作规范,包括参数占位符、异步模式、插入/更新模式等规则
|
||||
---
|
||||
|
||||
# SQLite 数据库操作规则
|
||||
|
||||
## 参数占位符
|
||||
|
||||
使用 `$1, $2, $3...` 作为参数占位符,**禁止使用 `?`**:
|
||||
|
||||
```typescript
|
||||
// 正确
|
||||
await db.execute("INSERT INTO Table(key, value) VALUES ($1, $2)", [key, value]);
|
||||
|
||||
// 错误
|
||||
await db.execute("INSERT INTO Table(key, value) VALUES (?, ?)", [key, value]);
|
||||
```
|
||||
|
||||
## 异步模式
|
||||
|
||||
所有数据库操作返回 Promise,必须使用 `await`:
|
||||
|
||||
```typescript
|
||||
// 正确
|
||||
const result = await db.execute(sql, params);
|
||||
|
||||
// 错误 - 不处理 Promise
|
||||
db.execute(sql, params);
|
||||
```
|
||||
|
||||
## 插入/更新模式
|
||||
|
||||
使用 `ON CONFLICT` 处理插入或更新:
|
||||
|
||||
```typescript
|
||||
await db.execute(
|
||||
`INSERT INTO Table(key, value, updated)
|
||||
VALUES ($1, $2, datetime('now', 'localtime'))
|
||||
ON CONFLICT(key) DO UPDATE SET value = $2, updated = datetime('now', 'localtime');`,
|
||||
[key, value],
|
||||
);
|
||||
```
|
||||
|
||||
## 查询模式
|
||||
|
||||
```typescript
|
||||
const rows = await db.select<RowType>("SELECT * FROM Table WHERE id = $1", [id]);
|
||||
```
|
||||
|
||||
## 路径别名
|
||||
|
||||
数据库相关代码使用以下别名:
|
||||
|
||||
| 别名 | 路径 |
|
||||
| --------- | -------------------------------- |
|
||||
| `@Sql/*` | `./src/plugins/Sqlite/*` |
|
||||
| `@Sqlm/*` | `./src/plugins/Sqlite/modules/*` |
|
||||
169
.trae/rules/typescript-rules.md
Normal file
@@ -0,0 +1,169 @@
|
||||
# TypeScript 开发规则
|
||||
|
||||
## 禁止使用原生 enum
|
||||
|
||||
使用 `const` 对象模式替代原生 `enum`:
|
||||
|
||||
```typescript
|
||||
// 正确
|
||||
const GameServerEnum = <const>{
|
||||
CN_GF01: "cn_gf01",
|
||||
CN_QD01: "cn_qd01",
|
||||
};
|
||||
```
|
||||
|
||||
## 类型定义
|
||||
|
||||
类型定义放在 `src/types/<Module>/<Module>.d.ts` 或 `types/<Module>/<Module>.d.ts`
|
||||
|
||||
Enum 常量放在 `src/enum/<Module>.ts`
|
||||
|
||||
```typescript
|
||||
declare namespace TGApp.BBS.Post {
|
||||
const NewsType = <const>{
|
||||
NOTICE: 1,
|
||||
ACTIVITY: 2,
|
||||
NEWS: 3,
|
||||
};
|
||||
|
||||
type NewsTypeEnum = (typeof NewsType)[keyof typeof NewsType];
|
||||
}
|
||||
```
|
||||
|
||||
枚举常量引用 `const` 对象类型,而非 union type:
|
||||
|
||||
```typescript
|
||||
// 正确
|
||||
const PostNewsTypeEnum: typeof TGApp.BBS.Post.NewsType = { ... };
|
||||
|
||||
// 错误
|
||||
const PostNewsTypeEnum: TGApp.BBS.Post.NewsTypeEnum = { ... };
|
||||
```
|
||||
|
||||
## 命名规范
|
||||
|
||||
| 类型 | 规范 | 示例 |
|
||||
| -------------- | ----------------- | --------------------- |
|
||||
| Interface/Type | PascalCase | `UserProfile` |
|
||||
| const 对象 | PascalCase | `NewsType` |
|
||||
| type alias | PascalCase + Enum | `NewsTypeEnum` |
|
||||
| enum 常量 | PascalCase + Enum | `PostNewsTypeEnum` |
|
||||
| readonly 列表 | PascalCase + List | `PostNewsTypeList` |
|
||||
| 描述函数 | camelCase + Desc | `getPostNewsTypeDesc` |
|
||||
| 常量 | UPPER_SNAKE_CASE | `MAX_RETRY_COUNT` |
|
||||
|
||||
## JSDoc 注释
|
||||
|
||||
所有导出函数、类型、枚举必须包含 `@since` 标签,版本号格式为 `Beta v{版本号}`。
|
||||
|
||||
### 文件头注释
|
||||
|
||||
在 `.ts` 或 `.d.ts` 文件顶部添加文件级注释:
|
||||
|
||||
```typescript
|
||||
/**
|
||||
* 角色相关类型定义
|
||||
* @since Beta v0.9.6
|
||||
*/
|
||||
```
|
||||
|
||||
### 函数和类型定义
|
||||
|
||||
```typescript
|
||||
/**
|
||||
* 获取角色信息
|
||||
* @since Beta v0.9.6
|
||||
* @param id - 角色 ID
|
||||
*/
|
||||
function getCharacter(id: number): Character;
|
||||
|
||||
/**
|
||||
* 角色信息对象
|
||||
* @since Beta v0.9.6
|
||||
*/
|
||||
type Character = {
|
||||
id: number;
|
||||
name: string;
|
||||
};
|
||||
```
|
||||
|
||||
### 版本更新规则
|
||||
|
||||
当修改类型定义的子成员时(如添加字段),需要同步更新:
|
||||
|
||||
1. **父级类型的 `@since`**:递增为当前项目版本(参考 `package.json`)
|
||||
2. **文件头的 `@since`**:如该文件是主要变更文件,同步更新
|
||||
|
||||
**示例:** 项目版本从 `0.9.8` → `0.9.9`
|
||||
|
||||
```typescript
|
||||
// 修改前
|
||||
/**
|
||||
* 角色相关类型定义
|
||||
* @since Beta v0.9.6
|
||||
*/
|
||||
|
||||
/**
|
||||
* 角色信息对象
|
||||
* @since Beta v0.9.6
|
||||
*/
|
||||
type Character = {
|
||||
id: number;
|
||||
name: string;
|
||||
};
|
||||
|
||||
// 修改后 - 添加新字段
|
||||
/**
|
||||
* 角色相关类型定义
|
||||
* @since Beta v0.9.9 // 文件头同步更新
|
||||
*/
|
||||
|
||||
/**
|
||||
* 角色信息对象
|
||||
* @since Beta v0.9.9 // 父级类型递增
|
||||
*/
|
||||
type Character = {
|
||||
id: number;
|
||||
name: string;
|
||||
element: string; // 新增字段
|
||||
};
|
||||
```
|
||||
|
||||
常用标签:`@param` `@returns` `@remarks` `@see` `@example` `@deprecated`
|
||||
|
||||
## 函数定义
|
||||
|
||||
**优先使用 `function` 关键字定义函数,而不是箭头函数赋值给 `const`**
|
||||
|
||||
```typescript
|
||||
// ✅ 正确 - 使用 function 关键字
|
||||
function getUser(id: number): UserProfile {
|
||||
return { id, name: "User" };
|
||||
}
|
||||
|
||||
async function loadData(): Promise<void> {
|
||||
await fetch("/api/data");
|
||||
}
|
||||
|
||||
// ❌ 错误 - 使用 const + 箭头函数(除非需要捕获 this 或用于回调)
|
||||
const getUser = (id: number): UserProfile => {
|
||||
return { id, name: "User" };
|
||||
};
|
||||
```
|
||||
|
||||
**例外情况(可以使用箭头函数):**
|
||||
|
||||
- 需要捕获词法 `this` 时
|
||||
- 作为回调函数传递给其他函数时
|
||||
- 对象字面量中的方法(根据场景判断)
|
||||
|
||||
## 类型注解
|
||||
|
||||
- 函数参数和返回值必须显式类型注解
|
||||
- 优先用 `type` 而非 `interface`
|
||||
- 用 `unknown` 而非 `any`
|
||||
- 避免类型断言 (`as`)
|
||||
|
||||
## 相关文档
|
||||
|
||||
- [typescript-standards skill](./skills/typescript-standards/)
|
||||
290
.trae/skills/git-workflow/SKILL.md
Normal file
@@ -0,0 +1,290 @@
|
||||
---
|
||||
name: "git-workflow"
|
||||
description: "Git workflow 综合指南。Invoke when user wants to make commits, needs commit format guidance, or after completing coding tasks."
|
||||
---
|
||||
|
||||
# Git Workflow 综合指南
|
||||
|
||||
本技能包含完整的 Git 提交工作流指南,涵盖提交规范和任务完成后的提交流程。
|
||||
|
||||
## 📚 目录
|
||||
|
||||
1. [Git Commit 规范](#git-commit-规范) - 提交信息格式规范
|
||||
2. [Task Completion Commit](#task-completion-commit) - 任务完成后的提交指南
|
||||
3. [快速参考](#快速参考) - 提交流程和 Emoji 速查
|
||||
|
||||
---
|
||||
|
||||
## Git Commit 规范
|
||||
|
||||
### 🎯 原子提交原则
|
||||
|
||||
**每个 commit 只包含一个主题的变更**。如果一次修改涉及多个方面,应该拆分成多个 commit:
|
||||
|
||||
```bash
|
||||
# ✅ 正确:拆分成两个独立的 commit
|
||||
git add src/components/viewpost/vp-overlay-image.vue
|
||||
git commit -m "♻️ 重构图片浮窗组件拖拽缩放逻辑"
|
||||
|
||||
git add .trae/skills/typescript-standards/skill.md
|
||||
git commit -m "📝 更新 TypeScript 类型注解规范"
|
||||
|
||||
# ❌ 错误:不要混在一个 commit 中
|
||||
git add 文件 1 文件 2
|
||||
git commit -m "♻️ 重构组件并更新 TypeScript 规范"
|
||||
```
|
||||
|
||||
### 提交格式
|
||||
|
||||
```
|
||||
<emoji> <描述>
|
||||
```
|
||||
|
||||
- **emoji**:使用 Unicode emoji 图标,放在提交信息开头
|
||||
- **描述**:使用中文,以动词开头,简短明了
|
||||
- **一行不超过 100 字符**
|
||||
- **禁止括号声明**:不要使用 `✨ feat(xxx)` 这种格式
|
||||
|
||||
### 拆分指南
|
||||
|
||||
| 场景 | 拆分方式 | 示例 |
|
||||
| ------------------- | ----------------- | --------------------------------- |
|
||||
| 代码重构 + 文档更新 | 分成两个 commit | `♻️ 重构组件` + `📝 更新文档` |
|
||||
| 功能开发 + Bug 修复 | 分成两个 commit | `✨ 添加功能` + `🐛 修复问题` |
|
||||
| 多个组件修改 | 按组件拆分 commit | `♻️ 重构组件 A` + `♻️ 重构组件 B` |
|
||||
| 代码修改 + 配置文件 | 分成两个 commit | `✨ 实现功能` + `🔧 更新配置` |
|
||||
|
||||
### Emoji 选择指南
|
||||
|
||||
#### 🆕 新增内容
|
||||
|
||||
| Emoji | 场景 | 示例 |
|
||||
| ----- | ------------- | ----------------------------- |
|
||||
| ✨ | 新功能 | `✨ 添加用户个人页面跳转功能` |
|
||||
| 🎨 | 代码结构/格式 | `🎨 重构角色卡片组件` |
|
||||
| 📝 | 文档 | `📝 更新 README` |
|
||||
| 🎉 | 初始项目 | `🎉 初始化项目` |
|
||||
| ✅ | 测试 | `✅ 添加角色查询单元测试` |
|
||||
|
||||
#### 🔧 修改内容
|
||||
|
||||
| Emoji | 场景 | 示例 |
|
||||
| ----- | ----------- | --------------------------- |
|
||||
| 🐛 | Bug 修复 | `🐛 修复角色生日判断逻辑` |
|
||||
| 🩹 | 小修复/补丁 | `🩹 补充首页 mini 参数处理` |
|
||||
| ⚡️ | 性能优化 | `⚡️ 优化角色列表渲染性能` |
|
||||
| ♻️ | 重构 | `♻️ 重构数据库操作层` |
|
||||
| 💄 | UI/样式 | `💄 调整首页卡片布局` |
|
||||
|
||||
#### 🗑️ 删除/清理
|
||||
|
||||
| Emoji | 场景 | 示例 |
|
||||
| ----- | ------------- | --------------------- |
|
||||
| 🔥 | 删除代码/文件 | `🔥 移除废弃组件` |
|
||||
| ⚰️ | 删除死代码 | `⚰️ 清理未使用的导入` |
|
||||
|
||||
#### 📦 依赖/配置
|
||||
|
||||
| Emoji | 场景 | 示例 |
|
||||
| ----- | -------- | ------------------- |
|
||||
| ➕ | 添加依赖 | `➕ 添加图表库依赖` |
|
||||
| ➖ | 删除依赖 | `➖ 移除冗余依赖` |
|
||||
| ⬆️ | 升级依赖 | `⬆️ 升级 Vue 版本` |
|
||||
| 🔧 | 配置文件 | `🔧 更新 vite 配置` |
|
||||
|
||||
#### 🚀 部署/构建
|
||||
|
||||
| Emoji | 场景 | 示例 |
|
||||
| ----- | --------- | ----------------- |
|
||||
| 🚀 | 部署 | `🚀 部署生产环境` |
|
||||
| 📦 | 编译/打包 | `📦 更新构建产物` |
|
||||
|
||||
#### 更多 Emoji
|
||||
|
||||
| Emoji | 场景 | Emoji | 场景 |
|
||||
| ----- | --------- | ----- | ----------- |
|
||||
| 🗃️ | 数据库 | 🔒 | 安全问题 |
|
||||
| 📈 | 分析/跟踪 | 🏗️ | 架构变更 |
|
||||
| 🧑💻 | 开发体验 | 🚸 | 用户体验 |
|
||||
| 💫 | 动画/过渡 | 🔀 | 合并分支 |
|
||||
| ⏪ | 回滚 | 🔖 | 版本标签 |
|
||||
| 🚧 | 进行中 | 💚 | CI 修复 |
|
||||
| 🚨 | 警告修复 | 👔 | 业务逻辑 |
|
||||
| 🦺 | 验证 | 🌐 | 国际化 |
|
||||
| 💥 | 重大变更 | 🍱 | 静态资源 |
|
||||
| 🏷️ | 类型定义 | 🚚 | 移动/重命名 |
|
||||
|
||||
---
|
||||
|
||||
## Task Completion Commit
|
||||
|
||||
### 何时使用
|
||||
|
||||
**当以下条件满足时,应该提交 commit:**
|
||||
|
||||
- ✅ 用户请求的编码任务已完成
|
||||
- ✅ 代码已通过 lint 和类型检查
|
||||
- ✅ 没有未解决的错误
|
||||
- ✅ 用户没有明确要求不提交
|
||||
|
||||
### 提交流程
|
||||
|
||||
#### 1. 检查变更内容
|
||||
|
||||
```bash
|
||||
git status
|
||||
```
|
||||
|
||||
#### 2. 分析变更主题
|
||||
|
||||
**关键原则:原子提交**
|
||||
|
||||
- 如果所有变更属于**同一个主题** → 一个 commit
|
||||
- 如果变更涉及**多个主题** → 拆分成多个 commit
|
||||
|
||||
#### 3. 选择正确的 emoji
|
||||
|
||||
根据变更类型选择对应的 emoji(见上方 [Emoji 选择指南](#emoji-选择指南))
|
||||
|
||||
#### 4. 执行提交
|
||||
|
||||
**单个主题的提交:**
|
||||
|
||||
```bash
|
||||
git add <文件路径>
|
||||
git commit -m "<emoji> <描述>"
|
||||
```
|
||||
|
||||
**多个主题的提交(拆分):**
|
||||
|
||||
```bash
|
||||
# 提交 1
|
||||
git add 文件 1
|
||||
git commit -m "♻️ 重构组件 A"
|
||||
|
||||
# 提交 2
|
||||
git add 文件 2
|
||||
git commit -m "📝 更新文档"
|
||||
```
|
||||
|
||||
#### 5. 编写提交信息
|
||||
|
||||
**格式要求:**
|
||||
|
||||
- emoji 图标 + 空格 + 中文描述
|
||||
- 以动词开头
|
||||
- 一行不超过 100 字符
|
||||
- 不要使用 `feat:` 这种括号声明
|
||||
|
||||
**好的示例:**
|
||||
|
||||
```
|
||||
✨ 添加用户个人页面跳转功能
|
||||
🐛 修复角色生日判断逻辑
|
||||
♻️ 重构图片浮窗组件拖拽缩放逻辑
|
||||
📝 更新 TypeScript 类型注解规范
|
||||
```
|
||||
|
||||
**错误的示例:**
|
||||
|
||||
```
|
||||
✨ feat: 添加功能 # ❌ 使用了 type 声明
|
||||
修复了一些 bug # ❌ 没有 emoji
|
||||
Added new feature # ❌ 没有使用中文
|
||||
```
|
||||
|
||||
### 特殊情况处理
|
||||
|
||||
#### 情况 1:用户明确要求不提交
|
||||
|
||||
如果用户说"先别提交"或"我自己来提交",则跳过提交步骤。
|
||||
|
||||
#### 情况 2:变更太多不确定如何拆分
|
||||
|
||||
如果变更涉及多个方面但不确定如何拆分,应该询问用户:
|
||||
|
||||
> "这次修改涉及多个方面,您希望我:
|
||||
>
|
||||
> - 拆分成多个 commit 提交?
|
||||
> - 还是合并成一个 commit 提交?"
|
||||
|
||||
#### 情况 3:提交失败
|
||||
|
||||
如果提交失败(例如有 lint 错误),应该:
|
||||
|
||||
1. 查看错误信息
|
||||
2. 修复错误
|
||||
3. 重新尝试提交
|
||||
|
||||
### 完整示例
|
||||
|
||||
**场景:用户要求重构图片浮窗组件并更新 TypeScript 规范**
|
||||
|
||||
任务完成后,应该这样提交:
|
||||
|
||||
```bash
|
||||
# 检查变更
|
||||
git status
|
||||
|
||||
# 提交 1:组件重构
|
||||
git add src/components/viewpost/vp-overlay-image.vue
|
||||
git commit -m "♻️ 重构图片浮窗组件拖拽缩放逻辑"
|
||||
|
||||
# 提交 2:规范更新
|
||||
git add .trae/skills/typescript-standards/skill.md
|
||||
git commit -m "📝 更新 TypeScript 类型注解规范"
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 快速参考
|
||||
|
||||
### 提交流程
|
||||
|
||||
```bash
|
||||
# 1. 检查变更
|
||||
git status
|
||||
|
||||
# 2. 添加文件(原子提交)
|
||||
git add <文件路径>
|
||||
|
||||
# 3. 提交(格式:<emoji> <描述>)
|
||||
git commit -m "<emoji> <中文描述>"
|
||||
```
|
||||
|
||||
### Emoji 速查表
|
||||
|
||||
| Emoji | 场景 | Emoji | 场景 |
|
||||
| ----- | -------- | ----- | -------- |
|
||||
| ✨ | 新功能 | 🐛 | Bug 修复 |
|
||||
| ♻️ | 重构 | ⚡️ | 性能优化 |
|
||||
| 💄 | UI/样式 | 📝 | 文档 |
|
||||
| 🎨 | 代码格式 | 🔧 | 配置 |
|
||||
| 🔥 | 删除 | 🚀 | 部署 |
|
||||
| ⬆️ | 升级依赖 | 🗃️ | 数据库 |
|
||||
|
||||
### 提交示例
|
||||
|
||||
```
|
||||
✨ 添加用户个人页面跳转功能
|
||||
🐛 修复角色生日判断逻辑
|
||||
🩹 补充首页 mini 参数&组件参数处理
|
||||
♻️ 重构数据库操作为事务模式
|
||||
⚡️ 优化角色列表渲染性能
|
||||
💄 调整深色模式配色方案
|
||||
📝 添加组件使用文档
|
||||
⬆️ 更新依赖版本,修复安全警告
|
||||
🔧 更新 vite 配置以支持新插件
|
||||
🚸 统一 UIGF 导出交互,导出前选择导出路径
|
||||
💫 添加页面转场动画效果
|
||||
🐛 修复抽卡记录导出为空的问题
|
||||
🏗️ 引入 Pinia 状态管理
|
||||
🧑💻 优化热更新加载速度
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 相关文档
|
||||
|
||||
- [Git Commit Rules](../rules/git-commit-rules.md) - Git Commit 规则
|
||||
- [TypeScript Standards](../typescript-standards/SKILL.md) - TypeScript 开发规范
|
||||
150
.trae/skills/git-workflow/task-completion.md
Normal file
@@ -0,0 +1,150 @@
|
||||
---
|
||||
name: "task-completion"
|
||||
description: "Guides AI to commit changes after completing tasks. Invoke when a coding task is finished and ready for commit."
|
||||
---
|
||||
|
||||
# Task Completion Commit
|
||||
|
||||
本 skill 指导 AI 在完成任务后如何正确提交代码变更。
|
||||
|
||||
## 何时使用
|
||||
|
||||
**当以下条件满足时,应该提交 commit:**
|
||||
|
||||
- ✅ 用户请求的编码任务已完成
|
||||
- ✅ 代码已通过 lint 和类型检查
|
||||
- ✅ 没有未解决的错误
|
||||
- ✅ 用户没有明确要求不提交
|
||||
|
||||
## 提交流程
|
||||
|
||||
### 1. 检查变更内容
|
||||
|
||||
首先检查哪些文件被修改:
|
||||
|
||||
```bash
|
||||
git status
|
||||
```
|
||||
|
||||
### 2. 分析变更主题
|
||||
|
||||
**关键原则:原子提交**
|
||||
|
||||
- 如果所有变更属于**同一个主题** → 一个 commit
|
||||
- 如果变更涉及**多个主题** → 拆分成多个 commit
|
||||
|
||||
**主题判断示例:**
|
||||
|
||||
| 场景 | 提交方式 |
|
||||
| ------------------- | -------------------- |
|
||||
| 只修改了一个组件 | 一个 commit |
|
||||
| 修改组件 + 更新文档 | 两个 commit |
|
||||
| 修复多个独立 bug | 每个 bug 一个 commit |
|
||||
| 重构多个组件 | 每个组件一个 commit |
|
||||
|
||||
### 3. 选择正确的 emoji
|
||||
|
||||
根据变更类型选择对应的 emoji:
|
||||
|
||||
- ✨ 新功能
|
||||
- 🐛 Bug 修复
|
||||
- ♻️ 重构
|
||||
- ⚡️ 性能优化
|
||||
- 💄 UI/样式调整
|
||||
- 📝 文档更新
|
||||
- 🎨 代码格式化
|
||||
- 🔧 配置文件修改
|
||||
|
||||
### 4. 执行提交
|
||||
|
||||
**单个主题的提交:**
|
||||
|
||||
```bash
|
||||
git add <文件路径>
|
||||
git commit -m "<emoji> <描述>"
|
||||
```
|
||||
|
||||
**多个主题的提交(拆分):**
|
||||
|
||||
```bash
|
||||
# 提交 1
|
||||
git add 文件 1
|
||||
git commit -m "♻️ 重构组件 A"
|
||||
|
||||
# 提交 2
|
||||
git add 文件 2
|
||||
git commit -m "📝 更新文档"
|
||||
```
|
||||
|
||||
### 5. 编写提交信息
|
||||
|
||||
**格式要求:**
|
||||
|
||||
- emoji 图标 + 空格 + 中文描述
|
||||
- 以动词开头
|
||||
- 一行不超过 100 字符
|
||||
- 不要使用 `feat:` 这种括号声明
|
||||
|
||||
**好的示例:**
|
||||
|
||||
```
|
||||
✨ 添加用户个人页面跳转功能
|
||||
🐛 修复角色生日判断逻辑
|
||||
♻️ 重构图片浮窗组件拖拽缩放逻辑
|
||||
📝 更新 TypeScript 类型注解规范
|
||||
```
|
||||
|
||||
**错误的示例:**
|
||||
|
||||
```
|
||||
✨ feat: 添加功能 # ❌ 使用了 type 声明
|
||||
修复了一些 bug # ❌ 没有 emoji
|
||||
Added new feature # ❌ 没有使用中文
|
||||
```
|
||||
|
||||
## 特殊情况处理
|
||||
|
||||
### 情况 1:用户明确要求不提交
|
||||
|
||||
如果用户说"先别提交"或"我自己来提交",则跳过提交步骤。
|
||||
|
||||
### 情况 2:变更太多不确定如何拆分
|
||||
|
||||
如果变更涉及多个方面但不确定如何拆分,应该询问用户:
|
||||
|
||||
> "这次修改涉及多个方面,您希望我:
|
||||
>
|
||||
> - 拆分成多个 commit 提交?
|
||||
> - 还是合并成一个 commit 提交?"
|
||||
|
||||
### 情况 3:提交失败
|
||||
|
||||
如果提交失败(例如有 lint 错误),应该:
|
||||
|
||||
1. 查看错误信息
|
||||
2. 修复错误
|
||||
3. 重新尝试提交
|
||||
|
||||
## 完整示例
|
||||
|
||||
**场景:用户要求重构图片浮窗组件并更新 TypeScript 规范**
|
||||
|
||||
任务完成后,应该这样提交:
|
||||
|
||||
```bash
|
||||
# 检查变更
|
||||
git status
|
||||
|
||||
# 提交 1:组件重构
|
||||
git add src/components/viewpost/vp-overlay-image.vue
|
||||
git commit -m "♻️ 重构图片浮窗组件拖拽缩放逻辑"
|
||||
|
||||
# 提交 2:规范更新
|
||||
git add .trae/skills/typescript-standards/skill.md
|
||||
git commit -m "📝 更新 TypeScript 类型注解规范"
|
||||
```
|
||||
|
||||
## 参考文档
|
||||
|
||||
- [Git Commit 规范](./git-commit.md) - Git Commit 格式规范
|
||||
- [Git Commit Rules](../rules/git-commit-rules.md) - Git Commit 规则
|
||||
160
.trae/skills/teyvat-guide/SKILL.md
Normal file
@@ -0,0 +1,160 @@
|
||||
---
|
||||
name: teyvat-guide
|
||||
description: TeyvatGuide 项目 SKILL。处理 Vue+Tauri+TypeScript 项目开发,包括组件开发、API 集成、SQLite 操作或代码规范。
|
||||
---
|
||||
|
||||
# TeyvatGuide 项目规范
|
||||
|
||||
## 技术栈
|
||||
|
||||
- **前端**: Vue 3 (Composition API), TypeScript 6, Vuetify 4
|
||||
- **桌面运行时**: Tauri 2 (Rust backend)
|
||||
- **构建工具**: Vite 8
|
||||
- **状态管理**: Pinia + persistedstate
|
||||
- **数据库**: SQLite (via @tauri-apps/plugin-sql)
|
||||
- **包管理器**: pnpm 10
|
||||
|
||||
## 代码风格
|
||||
|
||||
### 通用规则
|
||||
|
||||
| 规则 | 要求 |
|
||||
| ------ | -------------------------------- |
|
||||
| 语言 | 中文注释,英文代码 |
|
||||
| 缩进 | 2 空格 |
|
||||
| 引号 | 字符串用双引号,Vue 模板用单引号 |
|
||||
| 分号 | 必须 |
|
||||
| 尾逗号 | ES5 风格 |
|
||||
| 行长度 | ≤100 字符 |
|
||||
|
||||
### TypeScript 规范
|
||||
|
||||
> 详见 [typescript-standards skill](../typescript-standards/SKILL.md)
|
||||
|
||||
**枚举**: 使用 `const` 对象模式,禁止原生 `enum`
|
||||
|
||||
```typescript
|
||||
// 正确
|
||||
const GameServerEnum = <const>{
|
||||
CN_GF01: "cn_gf01",
|
||||
CN_QD01: "cn_qd01",
|
||||
};
|
||||
|
||||
// 错误
|
||||
enum GameServerEnum { ... }
|
||||
```
|
||||
|
||||
**JSDoc**: 导出函数必须包含 `@since` 标签,类型定义的子成员修改时需同步更新版本号
|
||||
|
||||
```typescript
|
||||
/**
|
||||
* 角色相关类型定义
|
||||
* @since Beta v0.9.6
|
||||
*/
|
||||
|
||||
/**
|
||||
* 函数描述
|
||||
* @since Beta v0.9.6
|
||||
* @param param - 参数描述
|
||||
* @returns 返回描述
|
||||
*/
|
||||
```
|
||||
|
||||
**版本更新规则**:当修改类型的子成员时(如添加字段),需要:
|
||||
|
||||
1. 更新父级类型的 `@since` 为当前项目版本(递增)
|
||||
2. 如该文件是主要变更文件,同步更新文件头的 `@since`
|
||||
|
||||
示例(项目版本从 0.9.8 → 0.9.9):
|
||||
|
||||
```typescript
|
||||
// 修改前
|
||||
/**
|
||||
* 角色信息对象
|
||||
* @since Beta v0.9.6
|
||||
*/
|
||||
type Character = {
|
||||
id: number;
|
||||
name: string;
|
||||
};
|
||||
|
||||
// 修改后 - 添加新字段
|
||||
/**
|
||||
* 角色信息对象
|
||||
* @since Beta v0.9.9 // 递增版本号
|
||||
*/
|
||||
type Character = {
|
||||
id: number;
|
||||
name: string;
|
||||
element: string; // 新增字段
|
||||
};
|
||||
```
|
||||
|
||||
**Import 顺序**: 1. 内置模块 2. 外部包 3. 别名 (@/\*) 4. 相对导入
|
||||
|
||||
### Vue 规范
|
||||
|
||||
- 组件结构: Template → script → style
|
||||
- 使用 `<script lang="ts" setup>` 语法
|
||||
- 组件名用 PascalCase
|
||||
- 样式用 SCSS,遵循 stylelint 配置
|
||||
|
||||
## 路径别名
|
||||
|
||||
| 别名 | 路径 |
|
||||
| ----------- | -------------------------------- |
|
||||
| `@/*` | `./src/*` |
|
||||
| `@styles/*` | `./src/assets/styles/*` |
|
||||
| `@comp/*` | `./src/components/*` |
|
||||
| `@enum/*` | `./src/enum/*` |
|
||||
| `@hooks/*` | `./src/hooks/*` |
|
||||
| `@Bili/*` | `./src/plugins/Bili/*` |
|
||||
| `@Hutao/*` | `./src/plugins/Hutao/*` |
|
||||
| `@Mys/*` | `./src/plugins/Mys/*` |
|
||||
| `@Sql/*` | `./src/plugins/Sqlite/*` |
|
||||
| `@Sqlm/*` | `./src/plugins/Sqlite/modules/*` |
|
||||
| `@req/*` | `./src/request/*` |
|
||||
| `@store/*` | `./src/store/modules/*` |
|
||||
| `@utils/*` | `./src/utils/*` |
|
||||
|
||||
## 数据库 (SQLite)
|
||||
|
||||
- 参数占位符: `$1, $2, $3...`(禁止 `?`)
|
||||
- 异步模式: 所有操作返回 Promise
|
||||
|
||||
```typescript
|
||||
await db.execute(
|
||||
`INSERT INTO Table(key, value, updated)
|
||||
VALUES ($1, $2, datetime('now', 'localtime'))
|
||||
ON CONFLICT(key) DO UPDATE SET value = $2, updated = datetime('now', 'localtime');`,
|
||||
[key, value],
|
||||
);
|
||||
```
|
||||
|
||||
## 代码检查
|
||||
|
||||
```bash
|
||||
pnpm lint # 运行所有检查
|
||||
pnpm lint:fix # 自动修复
|
||||
pnpm lint:vue # Vue 类型检查
|
||||
pnpm lint:style # 样式检查
|
||||
pnpm lint:rust:fix # Rust fmt
|
||||
```
|
||||
|
||||
## Git 提交规范
|
||||
|
||||
> 详见 [git-commit-skill](../git-commit-skill/SKILL.md)
|
||||
|
||||
**格式**: `<emoji> <描述>`(一行 ≤100 字符,禁止 type: 声明)
|
||||
|
||||
```bash
|
||||
git add <文件路径>
|
||||
git commit -m "✨ 添加新功能"
|
||||
```
|
||||
|
||||
## 注意事项
|
||||
|
||||
1. **禁止原生 enum** - 使用 const 对象模式
|
||||
2. **erasableSyntaxOnly** - 应为 `true` 或移除
|
||||
3. **jsx: preserve** - Vue 项目不需要 tsc 处理 jsx
|
||||
4. **提交规范** - 每次修改后使用 gitmoji 风格提交
|
||||
247
.trae/skills/typescript-standards/SKILL.md
Normal file
@@ -0,0 +1,247 @@
|
||||
---
|
||||
name: "typescript-standards"
|
||||
description: "TypeScript 开发规范,与 ESLint 配置保持一致。包含类型定义、数组语法、类型注解等规范。"
|
||||
---
|
||||
|
||||
# TypeScript 开发规范
|
||||
|
||||
> 本规范与项目 ESLint 配置保持一致,编写 TypeScript 代码时必须遵守。
|
||||
|
||||
## 目录结构
|
||||
|
||||
```
|
||||
src/types/<Module>/<Module>.d.ts # 类型定义 (.d.ts)
|
||||
types/<Module>/<Module>.d.ts # 根目录类型定义
|
||||
src/enum/<Module>.ts # 枚举常量 (.ts)
|
||||
```
|
||||
|
||||
## 命名规范
|
||||
|
||||
| 类型 | 规范 | 示例 |
|
||||
| -------------- | ----------------- | --------------------- |
|
||||
| Interface/Type | PascalCase | `UserProfile` |
|
||||
| const 对象 | PascalCase | `NewsType` |
|
||||
| type alias | PascalCase + Enum | `NewsTypeEnum` |
|
||||
| enum 常量 | PascalCase + Enum | `PostNewsTypeEnum` |
|
||||
| readonly 列表 | PascalCase + List | `PostNewsTypeList` |
|
||||
| 描述函数 | camelCase + Desc | `getPostNewsTypeDesc` |
|
||||
| 常量 | UPPER_SNAKE_CASE | `MAX_RETRY_COUNT` |
|
||||
|
||||
## 核心规则
|
||||
|
||||
### 1. 数组类型定义
|
||||
|
||||
**使用 `Array<T>` 语法,禁止使用 `T[]`**
|
||||
|
||||
```typescript
|
||||
// ✅ 正确
|
||||
const list: Array<string> = [];
|
||||
const matrix: Array<Array<number>> = [];
|
||||
|
||||
// ❌ 错误
|
||||
const list: string[] = [];
|
||||
const matrix: number[][] = [];
|
||||
```
|
||||
|
||||
### 2. 类型注解与断言
|
||||
|
||||
**优先使用类型注解 `: Type`,必要时使用 `<Type>` 断言,禁止使用 `as Type`**
|
||||
|
||||
```typescript
|
||||
// ✅ 正确 - 优先使用类型注解
|
||||
const value: string = someValue;
|
||||
const count: number = getCount();
|
||||
const result: string = getValue();
|
||||
|
||||
// ✅ 正确 - 必要时使用类型断言(如 DOM 元素、类型不匹配)
|
||||
const el: HTMLInputElement = <HTMLInputElement>document.getElementById("id");
|
||||
const data = <MyDataType>unknownValue;
|
||||
|
||||
// ✅ 正确 - 函数定义优先使用 function 关键字
|
||||
function getUser(id: number): UserProfile {
|
||||
return { id, name: "User" };
|
||||
}
|
||||
|
||||
// ❌ 错误 - as 断言风格
|
||||
const value = someValue as string;
|
||||
const result = getValue() as string;
|
||||
|
||||
// ❌ 错误 - 使用 const 定义函数(优先使用 function)
|
||||
const getUser = (id: number): UserProfile => {
|
||||
return { id, name: "User" };
|
||||
};
|
||||
|
||||
// ❌ 错误 - 缺少类型注解
|
||||
function getUser(id): UserProfile {
|
||||
return { id, name: "User" };
|
||||
}
|
||||
```
|
||||
|
||||
### 3. 禁止原生 enum
|
||||
|
||||
**使用 `const` 对象模式,使用 `<const>` 断言确保 readonly**
|
||||
|
||||
```typescript
|
||||
// ✅ 正确
|
||||
const GameServerEnum = <const>{
|
||||
CN_GF01: "cn_gf01",
|
||||
CN_QD01: "cn_qd01",
|
||||
};
|
||||
|
||||
type GameServerEnumType = (typeof GameServerEnum)[keyof typeof GameServerEnum];
|
||||
|
||||
// ❌ 错误
|
||||
enum GameServerEnum {
|
||||
CN_GF01 = "cn_gf01",
|
||||
CN_QD01 = "cn_qd01",
|
||||
}
|
||||
```
|
||||
|
||||
### 4. 类型定义
|
||||
|
||||
**优先使用 `type` 而非 `interface`**
|
||||
|
||||
```typescript
|
||||
// ✅ 正确
|
||||
type UserProfile = {
|
||||
id: number;
|
||||
name: string;
|
||||
};
|
||||
|
||||
// ❌ 错误
|
||||
interface UserProfile {
|
||||
id: number;
|
||||
name: string;
|
||||
}
|
||||
```
|
||||
|
||||
### 5. 函数定义规范
|
||||
|
||||
**优先使用 `function` 关键字定义函数,而不是箭头函数赋值给 `const`**
|
||||
|
||||
```typescript
|
||||
// ✅ 正确 - 使用 function 关键字
|
||||
function getUser(id: number): UserProfile {
|
||||
return { id, name: "User" };
|
||||
}
|
||||
|
||||
async function loadData(): Promise<void> {
|
||||
await fetch("/api/data");
|
||||
}
|
||||
|
||||
// ❌ 错误 - 使用 const + 箭头函数(除非需要捕获 this 或用于回调)
|
||||
const getUser = (id: number): UserProfile => {
|
||||
return { id, name: "User" };
|
||||
};
|
||||
|
||||
const loadData = async (): Promise<void> => {
|
||||
await fetch("/api/data");
|
||||
};
|
||||
```
|
||||
|
||||
**例外情况(可以使用箭头函数):**
|
||||
|
||||
- 需要捕获词法 `this` 时
|
||||
- 作为回调函数传递给其他函数时
|
||||
- 对象字面量中的方法(根据场景判断)
|
||||
|
||||
### 6. 类型注解规范
|
||||
|
||||
- 函数参数和返回值必须显式类型注解
|
||||
- 使用 `unknown` 而非 `any`
|
||||
- `ref` 泛型必须显式声明
|
||||
|
||||
```typescript
|
||||
// ✅ 正确
|
||||
const count = ref<number>(0);
|
||||
const list = ref<Array<string>>([]);
|
||||
const isDone = ref<boolean>(false);
|
||||
|
||||
function getUser(id: number): UserProfile {
|
||||
return { id, name: "User" };
|
||||
}
|
||||
|
||||
// ❌ 错误
|
||||
const count = ref(0); // 缺少泛型
|
||||
const list: string[] = ref([]); // 使用 [] 而非 Array
|
||||
|
||||
function getUser(id): UserProfile {
|
||||
// 缺少参数类型
|
||||
return { id, name: "User" };
|
||||
}
|
||||
```
|
||||
|
||||
### 7. JSDoc 注释
|
||||
|
||||
- 所有导出函数必须包含 `@since` 标签
|
||||
- 枚举常量需要 `@see` 标签
|
||||
- 类型定义的子成员修改时,需同步更新父级类型和文件头的 `@since` 版本号
|
||||
|
||||
```typescript
|
||||
/**
|
||||
* 角色相关类型定义
|
||||
* @since Beta v0.9.6
|
||||
*/
|
||||
|
||||
/**
|
||||
* 获取角色信息
|
||||
* @since Beta v0.9.6
|
||||
* @param id - 角色 ID
|
||||
*/
|
||||
function getCharacter(id: number): Character;
|
||||
|
||||
/**
|
||||
* 角色信息对象
|
||||
* @since Beta v0.9.6
|
||||
*/
|
||||
type Character = {
|
||||
id: number;
|
||||
name: string;
|
||||
};
|
||||
```
|
||||
|
||||
**版本更新规则:**
|
||||
|
||||
当修改类型的子成员时(如添加字段),需要:
|
||||
|
||||
1. 更新父级类型的 `@since` 为当前项目版本(递增)
|
||||
2. 如该文件是主要变更文件,同步更新文件头的 `@since`
|
||||
|
||||
示例(项目版本从 0.9.8 → 0.9.9):
|
||||
|
||||
```typescript
|
||||
// 修改前
|
||||
/**
|
||||
* 角色信息对象
|
||||
* @since Beta v0.9.6
|
||||
*/
|
||||
type Character = {
|
||||
id: number;
|
||||
name: string;
|
||||
};
|
||||
|
||||
// 修改后 - 添加新字段
|
||||
/**
|
||||
* 角色信息对象
|
||||
* @since Beta v0.9.9 // 递增版本号
|
||||
*/
|
||||
type Character = {
|
||||
id: number;
|
||||
name: string;
|
||||
element: string; // 新增字段
|
||||
};
|
||||
```
|
||||
|
||||
## ESLint 规则对应
|
||||
|
||||
| 规则 | ESLint 配置 | 语法要求 |
|
||||
| -------- | ------------------------------------------------ | ---------- |
|
||||
| 数组类型 | `@typescript-eslint/array-type` | `Array<T>` |
|
||||
| 类型断言 | `@typescript-eslint/consistent-type-assertions` | `<Type>` |
|
||||
| 类型定义 | `@typescript-eslint/consistent-type-definitions` | `type` |
|
||||
| 导入顺序 | `import/order` | 分组排序 |
|
||||
|
||||
## 详细规范
|
||||
|
||||
- Enum 定义:见 [enum.md](./enum.md)
|
||||
- TSDoc 注释:见 [tsdoc.md](./tsdoc.md)
|
||||
70
.trae/skills/typescript-standards/enum.md
Normal file
@@ -0,0 +1,70 @@
|
||||
# Enum 定义规范
|
||||
|
||||
## 类型定义 (.d.ts)
|
||||
|
||||
```typescript
|
||||
declare namespace TGApp.BBS.Post {
|
||||
const NewsType = <const>{
|
||||
NOTICE: 1,
|
||||
ACTIVITY: 2,
|
||||
NEWS: 3,
|
||||
};
|
||||
|
||||
type NewsTypeEnum = (typeof NewsType)[keyof typeof NewsType];
|
||||
}
|
||||
```
|
||||
|
||||
## 枚举常量 (.ts)
|
||||
|
||||
```typescript
|
||||
const PostNewsTypeEnum: typeof TGApp.BBS.Post.NewsType = {
|
||||
NOTICE: 1,
|
||||
ACTIVITY: 2,
|
||||
NEWS: 3,
|
||||
};
|
||||
```
|
||||
|
||||
注意:引用 `const` 对象类型 (`typeof TGApp.BBS.Post.NewsType`),而非 union type (`NewsTypeEnum`)
|
||||
|
||||
## 辅助工具
|
||||
|
||||
```typescript
|
||||
// 只读列表
|
||||
const PostNewsTypeList: ReadonlyArray<TGApp.BBS.Post.NewsTypeEnum> = [
|
||||
PostNewsTypeEnum.NOTICE,
|
||||
PostNewsTypeEnum.ACTIVITY,
|
||||
PostNewsTypeEnum.NEWS,
|
||||
];
|
||||
|
||||
// 描述函数
|
||||
function getPostNewsTypeDesc(newsType: TGApp.BBS.Post.NewsTypeEnum): string {
|
||||
switch (newsType) {
|
||||
case PostNewsTypeEnum.NOTICE:
|
||||
return "公告";
|
||||
case PostNewsTypeEnum.ACTIVITY:
|
||||
return "活动";
|
||||
case PostNewsTypeEnum.NEWS:
|
||||
return "资讯";
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## 聚合导出
|
||||
|
||||
```typescript
|
||||
const bbsEnum = {
|
||||
post: {
|
||||
viewType: PostViewTypeEnum,
|
||||
newsType: PostNewsTypeEnum,
|
||||
},
|
||||
};
|
||||
|
||||
export default bbsEnum;
|
||||
```
|
||||
|
||||
## 核心规则
|
||||
|
||||
1. 使用 `<const>` 断言确保 readonly
|
||||
2. 类型派生:`(typeof Type)[keyof typeof Type]`
|
||||
3. JSDoc 必须包含 `@since` 和 `@see`
|
||||
4. 枚举常量名与 .d.ts 中的 const 对象名一致
|
||||
167
.trae/skills/typescript-standards/tsdoc.md
Normal file
@@ -0,0 +1,167 @@
|
||||
# TSDoc 注释规范
|
||||
|
||||
## 支持的标签
|
||||
|
||||
`@example` `@link` `@param` `@remarks` `@returns` `@see` `@since` `@typeParam` `@deprecated`
|
||||
|
||||
## 必须标签
|
||||
|
||||
### `@since` - 版本信息
|
||||
|
||||
所有导出类型、函数、枚举必须包含 `@since` 标签,版本号格式为 `Beta v{版本号}`。
|
||||
|
||||
#### 1. 文件头注释
|
||||
|
||||
在 `.ts` 或 `.d.ts` 文件顶部添加文件级注释,说明文件整体信息:
|
||||
|
||||
```typescript
|
||||
/**
|
||||
* 角色相关类型定义
|
||||
* @since Beta v0.9.6
|
||||
*/
|
||||
```
|
||||
|
||||
#### 2. 函数定义
|
||||
|
||||
所有导出函数必须包含:
|
||||
|
||||
```typescript
|
||||
/**
|
||||
* 获取角色信息
|
||||
* @since Beta v0.9.6
|
||||
* @param id - 角色 ID
|
||||
* @returns 角色信息对象
|
||||
*/
|
||||
function getCharacter(id: number): Character;
|
||||
```
|
||||
|
||||
#### 3. 类型定义
|
||||
|
||||
类型定义(type/interface)必须包含:
|
||||
|
||||
```typescript
|
||||
/**
|
||||
* 角色信息对象
|
||||
* @since Beta v0.9.6
|
||||
*/
|
||||
type Character = {
|
||||
id: number;
|
||||
name: string;
|
||||
};
|
||||
```
|
||||
|
||||
#### 4. 子成员版本更新
|
||||
|
||||
当修改类型定义的子成员时,需要同步更新:
|
||||
|
||||
- 父级类型的 `@since` 版本号(递增)
|
||||
- 文件头的 `@since` 版本号(如该文件是主要变更文件)
|
||||
|
||||
**示例:**
|
||||
|
||||
假设项目当前版本为 `0.9.8`(见 `package.json`),修改类型后应更新为 `0.9.9`:
|
||||
|
||||
```typescript
|
||||
// 修改前(v0.9.8)
|
||||
/**
|
||||
* 角色信息对象
|
||||
* @since Beta v0.9.6
|
||||
*/
|
||||
type Character = {
|
||||
id: number;
|
||||
name: string;
|
||||
};
|
||||
|
||||
// 修改后(v0.9.9)- 添加了新字段
|
||||
/**
|
||||
* 角色信息对象
|
||||
* @since Beta v0.9.9
|
||||
*/
|
||||
type Character = {
|
||||
id: number;
|
||||
name: string;
|
||||
element: string; // 新增字段
|
||||
};
|
||||
```
|
||||
|
||||
**文件头同步更新示例:**
|
||||
|
||||
```typescript
|
||||
// 修改前
|
||||
/**
|
||||
* 角色相关类型定义
|
||||
* @since Beta v0.9.6
|
||||
*/
|
||||
|
||||
// 修改后(如该文件是主要变更)
|
||||
/**
|
||||
* 角色相关类型定义
|
||||
* @since Beta v0.9.9
|
||||
*/
|
||||
```
|
||||
|
||||
#### 5. 版本号规则
|
||||
|
||||
| 场景 | 版本号 |
|
||||
| ------------- | ------------------------------ |
|
||||
| 新增文件 | 使用当前项目版本 |
|
||||
| 修改类型/函数 | 递增版本号(如 0.9.8 → 0.9.9) |
|
||||
| 修改子成员 | 父级类型和文件头同步递增 |
|
||||
| 重构无变更 | 保持原版本号 |
|
||||
|
||||
## 常用标签
|
||||
|
||||
| 标签 | 用途 |
|
||||
| ------------------------------ | ---------- |
|
||||
| `@param name - 描述` | 参数说明 |
|
||||
| `@returns 描述` | 返回值说明 |
|
||||
| `@remarks 备注` | 备注说明 |
|
||||
| `@see TGApp.BBS.Post.NewsType` | 参考引用 |
|
||||
| `@example` | 用法示例 |
|
||||
| `@deprecated` | 废弃标记 |
|
||||
|
||||
## 示例
|
||||
|
||||
```typescript
|
||||
/**
|
||||
* 获取角色信息
|
||||
* @since Beta v0.9.6
|
||||
* @param id - 角色 ID
|
||||
* @returns 角色信息对象
|
||||
* @throws {NotFoundError} 当角色不存在时
|
||||
*/
|
||||
function getCharacter(id: number): Character { ... }
|
||||
|
||||
/**
|
||||
* 搜索结果返回数据
|
||||
* @remarks token_list 和 databox 目前用途不明
|
||||
*/
|
||||
type SearchRes = { ... };
|
||||
```
|
||||
|
||||
## 类型定义文件 (.d.ts)
|
||||
|
||||
```typescript
|
||||
declare namespace TGApp.BBS.Post {
|
||||
/**
|
||||
* 咨讯类型
|
||||
* @since Beta v0.9.1
|
||||
*/
|
||||
const NewsType = <const>{
|
||||
NOTICE: 1,
|
||||
ACTIVITY: 2,
|
||||
NEWS: 3,
|
||||
};
|
||||
}
|
||||
```
|
||||
|
||||
## 内联成员注释
|
||||
|
||||
```typescript
|
||||
type TGHttpParams = {
|
||||
/** 请求方法 */
|
||||
method: "GET" | "POST";
|
||||
/** 请求头 */
|
||||
headers?: Record<string, string>;
|
||||
};
|
||||
```
|
||||
163
CHANGELOG.md
@@ -1,160 +1,19 @@
|
||||
---
|
||||
Author: 目棃
|
||||
Description: CHANGELOG
|
||||
Date: 2025-09-09
|
||||
Update: 2026-02-25
|
||||
Date: 2026-04-13
|
||||
Update: 2026-04-13
|
||||
---
|
||||
|
||||
> 本文档 [`Frontmatter`](https://github.com/BTMuli/MuCli#Frontmatter) 由 [MuCli](https://github.com/BTMuli/Mucli) 自动生成于 `2025-09-09 14:30:56`
|
||||
> 本文档 [`Frontmatter`](https://github.com/BTMuli/MuCli#Frontmatter) 由 [MuCli](https://github.com/BTMuli/Mucli) 自动生成于 `2026-04-13 12:28:20`
|
||||
>
|
||||
> 更新于 `2026-02-25 23:50:25`
|
||||
> 更新于 `2026-04-13 12:32:01`
|
||||
|
||||
## [0.9.6](https://github.com/BTMuli/TeyvatGuide/releases/v0.9.6) (2026-02-26)
|
||||
## [0.10.0](https://github.com/BTMuli/TeyvatGuide/releases/v0.10.0) (2026-04-13)
|
||||
|
||||
- 🍱 更新6.4版本资源
|
||||
- ✨ 剧诗页新增绘想游迹&月谕圣牌浮窗
|
||||
- 👽️ 升级 UI 框架至 Vuetify4
|
||||
- ♻️ 重构多页面用户数据加载&刷新逻辑,大幅提升多账号用户体验
|
||||
- 🐛 修复浮窗高度异常抖动导致的子回复加载异常
|
||||
- 🐛 修复特定条件下的渲染异常
|
||||
- 🐛 完善分享设置输入校验,剔除非正整数输入
|
||||
- 🚸 版本更新后重置反馈按钮显示
|
||||
- 🚸 调用内置YAE时检测游戏本体是否启动
|
||||
- 🚸 更换祈愿字典数据源,由Hakushi变更为Yatta
|
||||
- 🚸 替换帖子卡片版块图标数据源,修复可能出现的版块图标渲染异常
|
||||
- 🚸 优化回正相关处理
|
||||
- 💄 调整侧边栏,溢出滚动
|
||||
- 💄 帖子详情显示 `vod` 组件占位
|
||||
- 💄 当存在战绩数据时角色列表用户信息采用对应数据进行渲染
|
||||
- 💄 首页限时祈愿组件卡池角色超过4个时采用Swiper进行轮播
|
||||
- 💄 调整 Snackbar 层级 [`#218`](https://github.com/BTMuli/TeyvatGuide/issues/218)
|
||||
|
||||
## [0.9.5](https://github.com/BTMuli/TeyvatGuide/releases/v0.9.5) (2026-02-08)
|
||||
|
||||
- ✨ 重构UIGF导入导出备份恢复,支持UIGF4.2
|
||||
- 🍱 精简颂愿元数据
|
||||
- 🐛 由于Gt4配置变更,修复验证码登录时极验未正确触发
|
||||
- 🐛 保存用户信息采用参数绑定,修复特殊数据导致的sql拼接异常
|
||||
- 🐛 将ck更新逻辑移至首页,修复ck自动更新异常
|
||||
- 🐛 修正剧诗概况星章计算逻辑
|
||||
- 💄 调整战绩数据总览样式,更为紧凑
|
||||
- 💄 处理特定武器没有副属性时的渲染
|
||||
- 💄 修复集录祈愿卡池渲染异常
|
||||
- 💄 调整剧诗详情布局,统一比例 2/1
|
||||
- 💄 调整签到组件额外奖励样式,处理额外奖励点击
|
||||
- 🚸 暴露成就系列完成百分比,1位小数
|
||||
- 🚸 优化当前选中成就系列区分度
|
||||
- 🚸 深渊上传成功后自动刷新胡桃云用户信息
|
||||
- 🚸 修复图片质量调整特定条件下浮窗异常关闭 [`#207`](https://github.com/BTMuli/TeyvatGuide/issues/207)
|
||||
- 🚸 自定义表情加载失败点击重新加载
|
||||
- 🚸 优化祈愿垫数展示UI
|
||||
|
||||
## [0.9.4](https://github.com/BTMuli/TeyvatGuide/releases/v0.9.4) (2026-01-22)
|
||||
|
||||
- 🐛 修复`msi`版本导入`dll`调用路径异常,捕获`dll`路径异常错误
|
||||
- 🎨 调整商店版本`dll`检测逻辑,存在时不复制
|
||||
- 🚸 调整导入相关提示文本
|
||||
|
||||
## [0.9.3](https://github.com/BTMuli/TeyvatGuide/releases/v0.9.3) (2026-01-19)
|
||||
|
||||
- 🐛 修复导入调用参数异常
|
||||
- 🚸 设置页胡桃云用户信息刷新防抖处理
|
||||
|
||||
## [0.9.2](https://github.com/BTMuli/TeyvatGuide/releases/v0.9.2) (2026-01-18)
|
||||
|
||||
- 🍱 增加旅行者衣装相关资源
|
||||
- ✨ WIKI新增 `{LINK#xx}{/LINK}` 数据支持 [`#156`](https://github.com/BTMuli/TeyvatGuide/issues/156)
|
||||
- ✨ 自动更新 Cookie [`#197`](https://github.com/BTMuli/TeyvatGuide/issues/197)
|
||||
- 🐛 修复祈愿页面检测数据更新异常
|
||||
- 🐛 修复特定情况下生成剧诗分享图时应用白屏
|
||||
- 🐛 修复首页活动奖励点击异常
|
||||
- 🐛 上传深渊记录时更新角色列表,以修复 `511001` 异常
|
||||
- 🐛 调整五星 UP 判断逻辑,修复特定数据 UP 判断异常
|
||||
- 🐛 修复微软应用商店版本材料&成就导入异常 [`#206`](https://github.com/BTMuli/TeyvatGuide/issues/206)
|
||||
- 🚸 `loading` 组件随机加载图标
|
||||
- 🚸 隐藏完成成就支持隐藏成就系列 [`#205`](https://github.com/BTMuli/TeyvatGuide/issues/205)
|
||||
- 🚸 调整首页部分图片缓存策略
|
||||
- 🚸 调整成就排序&搜索逻辑
|
||||
- 🚸 添加用户反馈显示控制入口
|
||||
- 🥅 修复文本放缩比读取异常,注册表不存在时返回 1.0
|
||||
- ♻️ 祈愿页面导入功能合并,仅显示一个导入按钮
|
||||
- 💄 深渊支持单楼层分享,剧诗支持单幕分享
|
||||
|
||||
## [0.9.1](https://github.com/BTMuli/TeyvatGuide/releases/v0.9.1) (2026-01-14)
|
||||
|
||||
- 🍱 元数据:更新6.3版本资源
|
||||
- 🍱 元数据:精简部分材料来源描述
|
||||
- 🍱 元数据:增加元素描述,如 `丝柯克` 为 `蛇之七变 冰`(修改前为`神之眼 冰`)
|
||||
- 🍱 元数据:增加 `埃洛伊` `奇偶` 的红色背景并进行相应处理 [`#198`](https://github.com/BTMuli/TeyvatGuide/issues/198)
|
||||
- ✏️ 修正文本,`咨讯` → `资讯`,感谢 [`@LuoYunXi0407`](https://github.com/LuoYunXi0407)
|
||||
- ✨ 祈愿页面:过往祈愿支持查看抽卡记录,更新图源以提升加载速度 [`#188`](https://github.com/BTMuli/TeyvatGuide/issues/188)
|
||||
- ✨ 背包物品:新增货币数据获取,支持删除记录
|
||||
- ✨ 角色列表页面:重构筛选逻辑,增加 `等级`/`好感`/`命座` 排序
|
||||
- ✨ 窗口回正增加文本放缩处理 [`#192`](https://github.com/BTMuli/TeyvatGuide/issues/192)
|
||||
- ✨ 引入 [Sentry](https://sentry.io) 用于分析应用崩溃/异常,同步更新隐私政策
|
||||
- ✨ 增加衣装相关资源 [`#190`](https://github.com/BTMuli/TeyvatGuide/issues/190)并在 `角色列表`/`角色图鉴` 进行展示。
|
||||
- ✨ 胡桃深渊数据库回归,剧诗概览回归
|
||||
- ✨ 支持通过命令行调用 [`#195`](https://github.com/BTMuli/TeyvatGuide/issues/195)
|
||||
- ✨ 支持胡桃云账号 `登录`/`密码重置` 等操作,支持胡桃云祈愿记录 `上传`/`下载`/`删除` [`#202`](https://github.com/BTMuli/TeyvatGuide/issues/202)
|
||||
- 🐛 修复程序最小化时托盘点击异常
|
||||
- 🐛 修复 wcag-color 无法对比 keyword 导致的渲染异常
|
||||
- 🐛 修复特定情况下管理员模式判断异常 [`#189`](https://github.com/BTMuli/TeyvatGuide/issues/189)
|
||||
- 🐛 修复从网络图更新到本地图导致的渲染异常
|
||||
- 🐛 尝试修复托盘图标初始化异常
|
||||
- 🐛 重构首页组件加载逻辑,存储中间值,增加登录态判断 [`#200`](https://github.com/BTMuli/TeyvatGuide/issues/200)
|
||||
- 🐛 修复通过 ck 登录没有即时刷新登录态
|
||||
- 🐛 修复特定情况下 UAC 调用异常
|
||||
- 🐛 补充缺失权限,修复浏览器跳转异常
|
||||
- 🐛 修复数据库重置异常
|
||||
- 🐛 修复部分帖子获取内容异常
|
||||
- 🐛 修复修改分享阈值点击取消时的取值异常 [`#203`](https://github.com/BTMuli/TeyvatGuide/issues/203)
|
||||
- 🐛 尝试修复调用内置 YAE 时特定条件下的匹配异常
|
||||
- 🚸 重构侧边栏账号切换逻辑,降低交互次数
|
||||
- 🚸 移除ck复制的确认浮窗
|
||||
- 🚸 管理员模式下侧边栏启动使用YAE导入
|
||||
- 🚸 背包物品页面:新增 `最近更新`/`最多数量`/`最少数量` 排序,调整默认排序逻辑,优化搜索处理 [`#196`](https://github.com/BTMuli/TeyvatGuide/issues/196)
|
||||
- 🚸 修正月谕圣牌下的星章计算逻辑
|
||||
- 🚸 调整Hakushi获取逻辑
|
||||
- 🚸 首页组件:已完成活动置后,调整完成判断逻辑
|
||||
- 🚸 调整部分弹窗提示 [`#201`](https://github.com/BTMuli/TeyvatGuide/issues/201)
|
||||
- 🚸 调用内置 YAE 时检测本地游戏版本
|
||||
- 💄 帖子详情:调整投票组件样式
|
||||
- 💄 首页组件:调整首页生日组件交互
|
||||
- 💄 首页签到组件:根据签到状态调整图标&文本
|
||||
- 💄 角色列表页面:角色卡片显示等级
|
||||
- 💄 幽境危战页面:调整顶部布局
|
||||
- 💄 帖子组件:增加自定义表情 tag 在浅色模式下的清晰度
|
||||
- 💄 设置页面:调整 `刷新页面设备信息` 交互
|
||||
- 🌐 公告页面:处理国际化
|
||||
- ♻️ 重构留影叙佳期页面,处理部分文本加载异常
|
||||
- ♻️ 统一 UID 选取逻辑
|
||||
- ♻️ 重构 WIKI 筛选组件筛选逻辑
|
||||
- ♻️ 重构游戏启动逻辑,修复特定条件下的启动失败
|
||||
|
||||
## [0.9.0](https://github.com/BTMuli/TeyvatGuide/releases/v0.9.0) (2025-12-20)
|
||||
|
||||
- 🍱 更新卡池数据,修正卡池数据异常导致的UP错误 [`#175`](https://github.com/BTMuli/TeyvatGuide/issues/175)
|
||||
- 🍱 更新千星资源,更新角色魔女的前夜礼数据
|
||||
- 🔥 由于祈愿数据更新滞后性,移除内置游戏祈愿详情页面
|
||||
- ✨ 支持背包物品导入(YAE),支持修改单个背包物品
|
||||
- ✨ 首页添加游戏签到组件,支持补签 [`#178`](https://github.com/BTMuli/TeyvatGuide/issues/178)
|
||||
- ✨ 应用支持托盘,设置页新增关闭到托盘配置项 [`#181`](https://github.com/BTMuli/TeyvatGuide/issues/181)
|
||||
- ✨ 重构祈愿页面概览,添加UP抽数数据,采用Swiper切换卡池 [`#173`](https://github.com/BTMuli/TeyvatGuide/issues/173)
|
||||
- ✨ 真境剧诗页面UI改版,显示讨伐列表&增益详情
|
||||
- ✨ 深境螺旋页面UI改版,显示讨伐列表&地脉异常 [`#179`](https://github.com/BTMuli/TeyvatGuide/issues/179)
|
||||
- ✨ 祈愿页面在元数据缺失条件下支持从外部获取物品ID [`#183`](https://github.com/BTMuli/TeyvatGuide/issues/183)
|
||||
- ♻️ 重构YAE导入处理逻辑,同存档数据批量更新(成就,背包物品)
|
||||
- ♻️ 调整常驻颂愿数据显示,祈愿概况UI迭代 [`#172`](https://github.com/BTMuli/TeyvatGuide/issues/172)
|
||||
- ♻️ 重构千星祈愿页面,适配抽数共享逻辑 **该部分缺失测试数据,如有异常请向开发者反馈(QQ,Github)**
|
||||
- ♻️ 重构祈愿数据备份处理,采用UIGF4,调整导入进度更新逻辑,兼容旧版本祈愿备份
|
||||
- 🚸 米社脚本增加点赞后取消配置,显示持有米游币数量
|
||||
- 🚸 **由于部分应用导出 UIGF 卡池类型异常**,放宽角色UP的判断逻辑
|
||||
- 🚸 优化角色活动日历处理,支持更多类型活动,显示活动描述
|
||||
- 🚸 角色添加release字段,调整WIKI角色页面排序 [`#180`](https://github.com/BTMuli/TeyvatGuide/issues/180)
|
||||
- 🚸 祈愿页面新增数据检测功能用于修正数据库中物品ID为空的数据
|
||||
- 🚸 米社视频组件适配窄视图,竖屏视频在窄视图下完整渲染
|
||||
- 🚸 调整搜索悬浮窗尺寸,修正搜索参数判断逻辑
|
||||
- 💄 多页面顶部样式调整,更为统一
|
||||
- 💄 首页近期活动组件奖励支持查看角色/武器奖励
|
||||
- 💄 首页近期活动组件奖励材料奖励支持查看已有数量
|
||||
- 💄 材料图鉴 UI 改版
|
||||
- ✨ 首页添加实时便笺组件
|
||||
- 🐛 修复战绩页面图片新地区(空之神殿,风息山)渲染异常
|
||||
- 🐛 修复Yatta请求权限不足
|
||||
- 🐛 修复数据库buildTime更新异常
|
||||
- ♻️ 重构图像保存逻辑,解耦图像请求
|
||||
- ♻️ 重构部分请求逻辑,完善错误处理
|
||||
|
||||
12
README.md
@@ -2,12 +2,12 @@
|
||||
Author: 目棃
|
||||
Description: 说明文档
|
||||
Date: 2023-03-05
|
||||
Update: 2026-02-25
|
||||
Update: 2026-04-13
|
||||
---
|
||||
|
||||
> 本文档 [`Frontmatter`](https://github.com/BTMuli/MuCli#Frontmatter) 由 [MuCli](https://github.com/BTMuli/Mucli) 自动生成于 `2023-03-05 14:41:55`
|
||||
>
|
||||
> 更新于 `2026-02-25 19:28:26`
|
||||
> 更新于 `2026-04-13 12:32:57`
|
||||
|
||||
[](https://deepwiki.com/BTMuli/TeyvatGuide) [](https://app.fossa.com/projects/git%2Bgithub.com%2FBTMuli%2FTeyvatGuide?ref=badge_shield)
|
||||
|
||||
@@ -65,6 +65,7 @@ Game Tool for Genshin Impact player, supports Windows and macOS.
|
||||
> 支持 扫码/验证码/Cookie 登陆,支持多账号管理
|
||||
- [x] 近期活动(首页组件)
|
||||
- [x] 游戏签到(首页组件)
|
||||
- [x] 实时便笺(首页组件)
|
||||
- [x] 原神战绩
|
||||
- [x] 角色详情
|
||||
- [x] 高难挑战(深境螺旋/真境剧诗/幽境危战)
|
||||
@@ -89,10 +90,7 @@ Game Tool for Genshin Impact player, supports Windows and macOS.
|
||||
|
||||
## 贡献者 / Contributors
|
||||
|
||||
- [BTMuli](https://github.com/BTMuli)
|
||||
- [舰队的偶像岛风酱!](https://github.com/frg2089)
|
||||
- [jerry765](https://github.com/jerry765)
|
||||
- [AuroraZiling](https://github.com/AuroraZiling)
|
||||
[Contributors](https://github.com/BTMuli/TeyvatGuide/graphs/contributors)
|
||||
|
||||
## UI 参考 / UI Reference
|
||||
|
||||
@@ -103,7 +101,7 @@ Game Tool for Genshin Impact player, supports Windows and macOS.
|
||||
|
||||
## 相关文档 / Docs
|
||||
|
||||
- Changelog: [CHANGELOG](CHANGELOG.md)
|
||||
- Changelog: [CHANGELOG](./CHANGELOG.md)
|
||||
- 资源来源:[项目资源说明](docs/项目资源说明.md)
|
||||
- UIAF:[UIAF v1.1](docs/standards/UIAF.md)
|
||||
- UIGF:[UIGF v3.0](docs/standards/UIGF3.md),[UIGF v4.0](docs/standards/UIGF.md)
|
||||
|
||||
212
docs/changelogs/CHANGELOG-v0.9.x.md
Normal file
@@ -0,0 +1,212 @@
|
||||
---
|
||||
Author: 目棃
|
||||
Description: CHANGELOG
|
||||
Date: 2025-09-09
|
||||
Update: 2026-04-08
|
||||
---
|
||||
|
||||
> 本文档 [`Frontmatter`](https://github.com/BTMuli/MuCli#Frontmatter) 由 [MuCli](https://github.com/BTMuli/Mucli) 自动生成于 `2025-09-09 14:30:56`
|
||||
>
|
||||
> 更新于 `2026-04-08 11:36:37`
|
||||
|
||||
# CHANGELOG v0.9.x
|
||||
|
||||
> 本文仅记录 v0.9.x 版本的更新内容
|
||||
|
||||
## [0.9.9](https://github.com/BTMuli/TeyvatGuide/releases/v0.9.8) (2026-04-08)
|
||||
|
||||
- 🍱 更新 6.5 版本游戏资源
|
||||
- ✨ 添加用户个人页面跳转
|
||||
- ✨ 增强图片浮窗功能,添加缩放和拖拽支持
|
||||
- ✨ 添加帖子详情请求限流 [`#233`](https://github.com/BTMuli/TeyvatGuide/issues/233)
|
||||
- ✨ 剧诗页面添加简略模式切换功能,优化战斗和卡片展示
|
||||
- 💫 帖子窗口部分按钮添加交互效果
|
||||
- 🐛 调整snackbar层级,修复兑换码浮窗分享异常
|
||||
- 🐛 修复角色生日判断逻辑异常,优化返回结果
|
||||
- 🐛 完善游戏启动ticket请求异常处理,隐藏请求成功后的详细ticket显示
|
||||
- 🚸 管理员模式下侧边栏启动仍然为启动游戏
|
||||
- 🚸 统一UIGF导出交互,导出前选择导出路径
|
||||
- 🚸 添加深渊、剧诗、危战 JSON Schema 验证规则
|
||||
- 🚸 扫码登录浮窗添加提示,防止用户误解
|
||||
|
||||
## [0.9.8](https://github.com/BTMuli/TeyvatGuide/releases/v0.9.8) (2026-03-13)
|
||||
|
||||
- 🍱 更新下半卡池数据
|
||||
- 🐛 处理UI框架升级导致的分享图生成异常
|
||||
- 🐛 修复采用ck登录后本地ck未同步更新
|
||||
- ✏️ 修正深渊最深抵达描述计算逻辑
|
||||
- ⚡️大幅提升UIGF导入速度 [`#222`](https://github.com/BTMuli/TeyvatGuide/issues/222)
|
||||
- ✨ 角色列表页展示当前筛选&排序
|
||||
- ✨ 定时检测版本更新并提醒 [`#231`](https://github.com/BTMuli/TeyvatGuide/issues/231)
|
||||
- 🔒️ 调整用户数据目录选取&旧目录删除处理,增加子目录检测&二次确认 [`#228`](https://github.com/BTMuli/TeyvatGuide/issues/228)
|
||||
- 🚸 导入胡桃深渊/剧诗/危战数据前进行提示
|
||||
- 🚸 设置页刷新信息允许仅刷新Cookie而不刷新游戏账号
|
||||
- 🚸 搜索框增加清空按钮,并进行对应适配处理
|
||||
- 🚸 完善非回正模式下的窗口位置&大小处理 [`#199`](https://github.com/BTMuli/TeyvatGuide/pull/199) [`#223`](https://github.com/BTMuli/TeyvatGuide/pull/223)
|
||||
- 🚸 实用脚本支持一键执行多账号 by [HLFromZ](https://github.com/BTMuli/TeyvatGuide/pull/227)
|
||||
- 🚸 角色列表页新增`等级>=70`筛选 [`#229`](https://github.com/BTMuli/TeyvatGuide/issues/229)
|
||||
- 🚸 角色列表页新增满好感筛选
|
||||
- 🚸 处理帖子标题为空时的渲染&事件
|
||||
- 🚸 调整部分图片缓存策略
|
||||
- 🚸 增加个人主页&合集主页的外部跳转
|
||||
- 💄 优化调整多处样式 [`#221`](https://github.com/BTMuli/TeyvatGuide/issues/221)
|
||||
- 💄 调整展开后的侧边栏宽度
|
||||
- 💄 自定义表情:调整浮窗信息显示逻辑,优化自定义表情label显示判断
|
||||
|
||||
## [0.9.7](https://github.com/BTMuli/TeyvatGuide/releases/v0.9.7) (2026-02-26)
|
||||
|
||||
- 🐛 修复脚本页面账号切换异常
|
||||
- 🚸 调整游戏安装目录选取逻辑,调整大小写处理 [`#219`](https://github.com/BTMuli/TeyvatGuide/issues/219)
|
||||
- 💄 替换部分侧边栏图标
|
||||
- 💄 调整浅色模式下滚动条可见度
|
||||
- 💄 调整部分页面UI
|
||||
|
||||
## [0.9.6](https://github.com/BTMuli/TeyvatGuide/releases/v0.9.6) (2026-02-26)
|
||||
|
||||
- 🍱 更新6.4版本资源
|
||||
- ✨ 剧诗页新增绘想游迹&月谕圣牌浮窗
|
||||
- 👽️ 升级 UI 框架至 Vuetify4
|
||||
- ♻️ 重构多页面用户数据加载&刷新逻辑,大幅提升多账号用户体验
|
||||
- 🐛 修复浮窗高度异常抖动导致的子回复加载异常
|
||||
- 🐛 修复特定条件下的渲染异常
|
||||
- 🐛 完善分享设置输入校验,剔除非正整数输入
|
||||
- 🚸 版本更新后重置反馈按钮显示
|
||||
- 🚸 调用内置YAE时检测游戏本体是否启动
|
||||
- 🚸 更换祈愿字典数据源,由Hakushi变更为Yatta
|
||||
- 🚸 替换帖子卡片版块图标数据源,修复可能出现的版块图标渲染异常
|
||||
- 🚸 优化回正相关处理
|
||||
- 💄 调整侧边栏,溢出滚动
|
||||
- 💄 帖子详情显示 `vod` 组件占位
|
||||
- 💄 当存在战绩数据时角色列表用户信息采用对应数据进行渲染
|
||||
- 💄 首页限时祈愿组件卡池角色超过4个时采用Swiper进行轮播
|
||||
- 💄 调整 Snackbar 层级 [`#218`](https://github.com/BTMuli/TeyvatGuide/issues/218)
|
||||
|
||||
## [0.9.5](https://github.com/BTMuli/TeyvatGuide/releases/v0.9.5) (2026-02-08)
|
||||
|
||||
- ✨ 重构UIGF导入导出备份恢复,支持UIGF4.2
|
||||
- 🍱 精简颂愿元数据
|
||||
- 🐛 由于Gt4配置变更,修复验证码登录时极验未正确触发
|
||||
- 🐛 保存用户信息采用参数绑定,修复特殊数据导致的sql拼接异常
|
||||
- 🐛 将ck更新逻辑移至首页,修复ck自动更新异常
|
||||
- 🐛 修正剧诗概况星章计算逻辑
|
||||
- 💄 调整战绩数据总览样式,更为紧凑
|
||||
- 💄 处理特定武器没有副属性时的渲染
|
||||
- 💄 修复集录祈愿卡池渲染异常
|
||||
- 💄 调整剧诗详情布局,统一比例 2/1
|
||||
- 💄 调整签到组件额外奖励样式,处理额外奖励点击
|
||||
- 🚸 暴露成就系列完成百分比,1位小数
|
||||
- 🚸 优化当前选中成就系列区分度
|
||||
- 🚸 深渊上传成功后自动刷新胡桃云用户信息
|
||||
- 🚸 修复图片质量调整特定条件下浮窗异常关闭 [`#207`](https://github.com/BTMuli/TeyvatGuide/issues/207)
|
||||
- 🚸 自定义表情加载失败点击重新加载
|
||||
- 🚸 优化祈愿垫数展示UI
|
||||
|
||||
## [0.9.4](https://github.com/BTMuli/TeyvatGuide/releases/v0.9.4) (2026-01-22)
|
||||
|
||||
- 🐛 修复`msi`版本导入`dll`调用路径异常,捕获`dll`路径异常错误
|
||||
- 🎨 调整商店版本`dll`检测逻辑,存在时不复制
|
||||
- 🚸 调整导入相关提示文本
|
||||
|
||||
## [0.9.3](https://github.com/BTMuli/TeyvatGuide/releases/v0.9.3) (2026-01-19)
|
||||
|
||||
- 🐛 修复导入调用参数异常
|
||||
- 🚸 设置页胡桃云用户信息刷新防抖处理
|
||||
|
||||
## [0.9.2](https://github.com/BTMuli/TeyvatGuide/releases/v0.9.2) (2026-01-18)
|
||||
|
||||
- 🍱 增加旅行者衣装相关资源
|
||||
- ✨ WIKI新增 `{LINK#xx}{/LINK}` 数据支持 [`#156`](https://github.com/BTMuli/TeyvatGuide/issues/156)
|
||||
- ✨ 自动更新 Cookie [`#197`](https://github.com/BTMuli/TeyvatGuide/issues/197)
|
||||
- 🐛 修复祈愿页面检测数据更新异常
|
||||
- 🐛 修复特定情况下生成剧诗分享图时应用白屏
|
||||
- 🐛 修复首页活动奖励点击异常
|
||||
- 🐛 上传深渊记录时更新角色列表,以修复 `511001` 异常
|
||||
- 🐛 调整五星 UP 判断逻辑,修复特定数据 UP 判断异常
|
||||
- 🐛 修复微软应用商店版本材料&成就导入异常 [`#206`](https://github.com/BTMuli/TeyvatGuide/issues/206)
|
||||
- 🚸 `loading` 组件随机加载图标
|
||||
- 🚸 隐藏完成成就支持隐藏成就系列 [`#205`](https://github.com/BTMuli/TeyvatGuide/issues/205)
|
||||
- 🚸 调整首页部分图片缓存策略
|
||||
- 🚸 调整成就排序&搜索逻辑
|
||||
- 🚸 添加用户反馈显示控制入口
|
||||
- 🥅 修复文本放缩比读取异常,注册表不存在时返回 1.0
|
||||
- ♻️ 祈愿页面导入功能合并,仅显示一个导入按钮
|
||||
- 💄 深渊支持单楼层分享,剧诗支持单幕分享
|
||||
|
||||
## [0.9.1](https://github.com/BTMuli/TeyvatGuide/releases/v0.9.1) (2026-01-14)
|
||||
|
||||
- 🍱 元数据:更新6.3版本资源
|
||||
- 🍱 元数据:精简部分材料来源描述
|
||||
- 🍱 元数据:增加元素描述,如 `丝柯克` 为 `蛇之七变 冰`(修改前为`神之眼 冰`)
|
||||
- 🍱 元数据:增加 `埃洛伊` `奇偶` 的红色背景并进行相应处理 [`#198`](https://github.com/BTMuli/TeyvatGuide/issues/198)
|
||||
- ✏️ 修正文本,`咨讯` → `资讯`,感谢 [`@LuoYunXi0407`](https://github.com/LuoYunXi0407)
|
||||
- ✨ 祈愿页面:过往祈愿支持查看抽卡记录,更新图源以提升加载速度 [`#188`](https://github.com/BTMuli/TeyvatGuide/issues/188)
|
||||
- ✨ 背包物品:新增货币数据获取,支持删除记录
|
||||
- ✨ 角色列表页面:重构筛选逻辑,增加 `等级`/`好感`/`命座` 排序
|
||||
- ✨ 窗口回正增加文本放缩处理 [`#192`](https://github.com/BTMuli/TeyvatGuide/issues/192)
|
||||
- ✨ 引入 [Sentry](https://sentry.io) 用于分析应用崩溃/异常,同步更新隐私政策
|
||||
- ✨ 增加衣装相关资源 [`#190`](https://github.com/BTMuli/TeyvatGuide/issues/190)并在 `角色列表`/`角色图鉴` 进行展示。
|
||||
- ✨ 胡桃深渊数据库回归,剧诗概览回归
|
||||
- ✨ 支持通过命令行调用 [`#195`](https://github.com/BTMuli/TeyvatGuide/issues/195)
|
||||
- ✨ 支持胡桃云账号 `登录`/`密码重置` 等操作,支持胡桃云祈愿记录 `上传`/`下载`/`删除` [`#202`](https://github.com/BTMuli/TeyvatGuide/issues/202)
|
||||
- 🐛 修复程序最小化时托盘点击异常
|
||||
- 🐛 修复 wcag-color 无法对比 keyword 导致的渲染异常
|
||||
- 🐛 修复特定情况下管理员模式判断异常 [`#189`](https://github.com/BTMuli/TeyvatGuide/issues/189)
|
||||
- 🐛 修复从网络图更新到本地图导致的渲染异常
|
||||
- 🐛 尝试修复托盘图标初始化异常
|
||||
- 🐛 重构首页组件加载逻辑,存储中间值,增加登录态判断 [`#200`](https://github.com/BTMuli/TeyvatGuide/issues/200)
|
||||
- 🐛 修复通过 ck 登录没有即时刷新登录态
|
||||
- 🐛 修复特定情况下 UAC 调用异常
|
||||
- 🐛 补充缺失权限,修复浏览器跳转异常
|
||||
- 🐛 修复数据库重置异常
|
||||
- 🐛 修复部分帖子获取内容异常
|
||||
- 🐛 修复修改分享阈值点击取消时的取值异常 [`#203`](https://github.com/BTMuli/TeyvatGuide/issues/203)
|
||||
- 🐛 尝试修复调用内置 YAE 时特定条件下的匹配异常
|
||||
- 🚸 重构侧边栏账号切换逻辑,降低交互次数
|
||||
- 🚸 移除ck复制的确认浮窗
|
||||
- 🚸 管理员模式下侧边栏启动使用YAE导入
|
||||
- 🚸 背包物品页面:新增 `最近更新`/`最多数量`/`最少数量` 排序,调整默认排序逻辑,优化搜索处理 [`#196`](https://github.com/BTMuli/TeyvatGuide/issues/196)
|
||||
- 🚸 修正月谕圣牌下的星章计算逻辑
|
||||
- 🚸 调整Hakushi获取逻辑
|
||||
- 🚸 首页组件:已完成活动置后,调整完成判断逻辑
|
||||
- 🚸 调整部分弹窗提示 [`#201`](https://github.com/BTMuli/TeyvatGuide/issues/201)
|
||||
- 🚸 调用内置 YAE 时检测本地游戏版本
|
||||
- 💄 帖子详情:调整投票组件样式
|
||||
- 💄 首页组件:调整首页生日组件交互
|
||||
- 💄 首页签到组件:根据签到状态调整图标&文本
|
||||
- 💄 角色列表页面:角色卡片显示等级
|
||||
- 💄 幽境危战页面:调整顶部布局
|
||||
- 💄 帖子组件:增加自定义表情 tag 在浅色模式下的清晰度
|
||||
- 💄 设置页面:调整 `刷新页面设备信息` 交互
|
||||
- 🌐 公告页面:处理国际化
|
||||
- ♻️ 重构留影叙佳期页面,处理部分文本加载异常
|
||||
- ♻️ 统一 UID 选取逻辑
|
||||
- ♻️ 重构 WIKI 筛选组件筛选逻辑
|
||||
- ♻️ 重构游戏启动逻辑,修复特定条件下的启动失败
|
||||
|
||||
## [0.9.0](https://github.com/BTMuli/TeyvatGuide/releases/v0.9.0) (2025-12-20)
|
||||
|
||||
- 🍱 更新卡池数据,修正卡池数据异常导致的UP错误 [`#175`](https://github.com/BTMuli/TeyvatGuide/issues/175)
|
||||
- 🍱 更新千星资源,更新角色魔女的前夜礼数据
|
||||
- 🔥 由于祈愿数据更新滞后性,移除内置游戏祈愿详情页面
|
||||
- ✨ 支持背包物品导入(YAE),支持修改单个背包物品
|
||||
- ✨ 首页添加游戏签到组件,支持补签 [`#178`](https://github.com/BTMuli/TeyvatGuide/issues/178)
|
||||
- ✨ 应用支持托盘,设置页新增关闭到托盘配置项 [`#181`](https://github.com/BTMuli/TeyvatGuide/issues/181)
|
||||
- ✨ 重构祈愿页面概览,添加UP抽数数据,采用Swiper切换卡池 [`#173`](https://github.com/BTMuli/TeyvatGuide/issues/173)
|
||||
- ✨ 真境剧诗页面UI改版,显示讨伐列表&增益详情
|
||||
- ✨ 深境螺旋页面UI改版,显示讨伐列表&地脉异常 [`#179`](https://github.com/BTMuli/TeyvatGuide/issues/179)
|
||||
- ✨ 祈愿页面在元数据缺失条件下支持从外部获取物品ID [`#183`](https://github.com/BTMuli/TeyvatGuide/issues/183)
|
||||
- ♻️ 重构YAE导入处理逻辑,同存档数据批量更新(成就,背包物品)
|
||||
- ♻️ 调整常驻颂愿数据显示,祈愿概况UI迭代 [`#172`](https://github.com/BTMuli/TeyvatGuide/issues/172)
|
||||
- ♻️ 重构千星祈愿页面,适配抽数共享逻辑 **该部分缺失测试数据,如有异常请向开发者反馈(QQ,Github)**
|
||||
- ♻️ 重构祈愿数据备份处理,采用UIGF4,调整导入进度更新逻辑,兼容旧版本祈愿备份
|
||||
- 🚸 米社脚本增加点赞后取消配置,显示持有米游币数量
|
||||
- 🚸 **由于部分应用导出 UIGF 卡池类型异常**,放宽角色UP的判断逻辑
|
||||
- 🚸 优化角色活动日历处理,支持更多类型活动,显示活动描述
|
||||
- 🚸 角色添加release字段,调整WIKI角色页面排序 [`#180`](https://github.com/BTMuli/TeyvatGuide/issues/180)
|
||||
- 🚸 祈愿页面新增数据检测功能用于修正数据库中物品ID为空的数据
|
||||
- 🚸 米社视频组件适配窄视图,竖屏视频在窄视图下完整渲染
|
||||
- 🚸 调整搜索悬浮窗尺寸,修正搜索参数判断逻辑
|
||||
- 💄 多页面顶部样式调整,更为统一
|
||||
- 💄 首页近期活动组件奖励支持查看角色/武器奖励
|
||||
- 💄 首页近期活动组件奖励材料奖励支持查看已有数量
|
||||
- 💄 材料图鉴 UI 改版
|
||||
@@ -1,6 +1,6 @@
|
||||
/**
|
||||
* Vue & Typescript 文件的 Eslint 配置
|
||||
* @since Beta v0.9.1
|
||||
* @since Beta v0.9.9
|
||||
*/
|
||||
import pluginImport from "eslint-plugin-import";
|
||||
import pluginPrettier from "eslint-plugin-prettier";
|
||||
@@ -19,14 +19,15 @@ const tsConfigRules = {
|
||||
"@typescript-eslint/no-unused-expressions": ["error", { allowShortCircuit: false }],
|
||||
"@typescript-eslint/array-type": ["error", { default: "generic" }],
|
||||
"@typescript-eslint/consistent-type-definitions": ["error", "type"],
|
||||
"import/order": [
|
||||
"error",
|
||||
{
|
||||
groups: ["builtin", "external", "internal", "parent", "sibling", "index", "unknown"],
|
||||
"newlines-between": "always",
|
||||
alphabetize: { order: "asc", caseInsensitive: true },
|
||||
},
|
||||
],
|
||||
// TODO: 等后续 eslint-plugin-import 适配 ESLint 10 后再启用
|
||||
// "import/order": [
|
||||
// "error",
|
||||
// {
|
||||
// groups: ["builtin", "external", "internal", "parent", "sibling", "index", "unknown"],
|
||||
// "newlines-between": "always",
|
||||
// alphabetize: { order: "asc", caseInsensitive: true },
|
||||
// },
|
||||
// ],
|
||||
"prettier/prettier": "error",
|
||||
};
|
||||
|
||||
|
||||
80
package.json
@@ -1,9 +1,9 @@
|
||||
{
|
||||
"name": "teyvatguide",
|
||||
"version": "0.9.6",
|
||||
"version": "0.10.0",
|
||||
"description": "Game Tool for GenshinImpact player",
|
||||
"private": true,
|
||||
"packageManager": "pnpm@10.30.1",
|
||||
"packageManager": "pnpm@10.33.0",
|
||||
"type": "module",
|
||||
"scripts": {
|
||||
"build": "tsx scripts/auto-build.ts",
|
||||
@@ -72,93 +72,93 @@
|
||||
"dependencies": {
|
||||
"@date-fns/tz": "^1.4.1",
|
||||
"@mdi/font": "7.4.47",
|
||||
"@sentry/core": "^10.40.0",
|
||||
"@sentry/vite-plugin": "^5.1.0",
|
||||
"@sentry/vue": "^10.40.0",
|
||||
"@sentry/core": "^10.47.0",
|
||||
"@sentry/vite-plugin": "^5.1.1",
|
||||
"@sentry/vue": "^10.47.0",
|
||||
"@skipperndt/plugin-machine-uid": "^0.1.3",
|
||||
"@tauri-apps/api": "^2.10.1",
|
||||
"@tauri-apps/plugin-cli": "^2.4.1",
|
||||
"@tauri-apps/plugin-deep-link": "^2.4.7",
|
||||
"@tauri-apps/plugin-dialog": "^2.6.0",
|
||||
"@tauri-apps/plugin-fs": "^2.4.5",
|
||||
"@tauri-apps/plugin-http": "^2.5.7",
|
||||
"@tauri-apps/plugin-deep-link": "^2.4.8",
|
||||
"@tauri-apps/plugin-dialog": "^2.7.0",
|
||||
"@tauri-apps/plugin-fs": "^2.5.0",
|
||||
"@tauri-apps/plugin-http": "^2.5.8",
|
||||
"@tauri-apps/plugin-log": "^2.8.0",
|
||||
"@tauri-apps/plugin-notification": "^2.3.3",
|
||||
"@tauri-apps/plugin-opener": "^2.5.3",
|
||||
"@tauri-apps/plugin-os": "^2.3.2",
|
||||
"@tauri-apps/plugin-process": "^2.3.1",
|
||||
"@tauri-apps/plugin-sql": "^2.3.2",
|
||||
"@tauri-apps/plugin-sql": "^2.4.0",
|
||||
"ajv": "^8.18.0",
|
||||
"artplayer": "^5.3.0",
|
||||
"artplayer": "^5.4.0",
|
||||
"colord": "^2.9.3",
|
||||
"date-fns": "^4.1.0",
|
||||
"echarts": "^6.0.0",
|
||||
"html2canvas": "^1.4.1",
|
||||
"ini": "^6.0.0",
|
||||
"js-md5": "^0.8.3",
|
||||
"jsencrypt": "^3.5.4",
|
||||
"json-bigint": "^1.0.0",
|
||||
"pinia": "^3.0.4",
|
||||
"pinia-plugin-persistedstate": "^4.7.1",
|
||||
"qrcode.vue": "^3.8.0",
|
||||
"qrcode.vue": "^3.8.1",
|
||||
"rsa-oaep-encryption": "^1.1.0",
|
||||
"sass-embedded": "^1.97.3",
|
||||
"swiper": "^12.1.2",
|
||||
"sass-embedded": "^1.99.0",
|
||||
"swiper": "^12.1.3",
|
||||
"uuid": "^13.0.0",
|
||||
"vue": "^3.5.29",
|
||||
"vue": "^3.5.32",
|
||||
"vue-echarts": "^8.0.1",
|
||||
"vue-json-pretty": "^2.6.0",
|
||||
"vue-router": "^5.0.3",
|
||||
"vuetify": "^4.0.0",
|
||||
"vue-router": "^5.0.4",
|
||||
"vuetify": "^4.0.5",
|
||||
"wcag-color": "^1.1.1"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@btmuli/stylelint-plugin-color": "^0.1.0",
|
||||
"@eslint/eslintrc": "^3.3.4",
|
||||
"@eslint/js": "9.39.2",
|
||||
"@eslint/eslintrc": "^3.3.5",
|
||||
"@eslint/js": "10.0.1",
|
||||
"@microsoft/tsdoc": "^0.16.0",
|
||||
"@tauri-apps/cli": "2.10.0",
|
||||
"@tauri-apps/cli": "2.10.1",
|
||||
"@types/fs-extra": "^11.0.4",
|
||||
"@types/ini": "^4.1.1",
|
||||
"@types/js-md5": "^0.8.0",
|
||||
"@types/json-bigint": "^1.0.4",
|
||||
"@types/node": "^25.3.0",
|
||||
"@typescript-eslint/parser": "^8.56.1",
|
||||
"@typescript/native-preview": "7.0.0-dev.20260222.1",
|
||||
"@vitejs/plugin-vue": "^6.0.4",
|
||||
"@types/node": "^25.5.2",
|
||||
"@typescript-eslint/parser": "^8.58.0",
|
||||
"@vitejs/plugin-vue": "^6.0.5",
|
||||
"app-root-path": "^3.1.0",
|
||||
"concurrently": "^9.2.1",
|
||||
"envfile": "^7.1.0",
|
||||
"eslint": "9.39.2",
|
||||
"eslint": "^10.2.0",
|
||||
"eslint-plugin-import": "^2.32.0",
|
||||
"eslint-plugin-jsonc": "^3.1.0",
|
||||
"eslint-plugin-jsonc": "^3.1.2",
|
||||
"eslint-plugin-prettier": "^5.5.5",
|
||||
"eslint-plugin-tsdoc": "^0.5.1",
|
||||
"eslint-plugin-tsdoc": "^0.5.2",
|
||||
"eslint-plugin-vue": "^10.8.0",
|
||||
"eslint-plugin-yml": "^3.3.0",
|
||||
"fs-extra": "^11.3.3",
|
||||
"globals": "^17.3.0",
|
||||
"eslint-plugin-yml": "^3.3.1",
|
||||
"fs-extra": "^11.3.4",
|
||||
"globals": "^17.4.0",
|
||||
"husky": "^9.1.7",
|
||||
"jsonc-eslint-parser": "^3.1.0",
|
||||
"lint-staged": "^16.2.7",
|
||||
"oxlint": "^1.50.0",
|
||||
"lint-staged": "16.4.0",
|
||||
"oxlint": "^1.59.0",
|
||||
"postcss-preset-env": "^11.2.0",
|
||||
"prettier": "3.8.1",
|
||||
"stylelint": "^17.3.0",
|
||||
"stylelint": "^17.6.0",
|
||||
"stylelint-config-idiomatic-order": "^10.0.0",
|
||||
"stylelint-config-standard-scss": "^17.0.0",
|
||||
"stylelint-config-standard-vue": "^1.0.0",
|
||||
"stylelint-declaration-block-no-ignored-properties": "^3.0.0",
|
||||
"stylelint-high-performance-animation": "^2.0.0",
|
||||
"stylelint-order": "^7.0.1",
|
||||
"stylelint-order": "^8.1.1",
|
||||
"stylelint-prettier": "^5.0.3",
|
||||
"stylelint-scss": "^7.0.0",
|
||||
"tsx": "^4.21.0",
|
||||
"typescript": "^5.9.3",
|
||||
"typescript-eslint": "^8.56.1",
|
||||
"vite": "npm:rolldown-vite@^7.3.1",
|
||||
"vite-plugin-vue-devtools": "^8.0.6",
|
||||
"typescript": "^6.0.2",
|
||||
"typescript-eslint": "^8.58.0",
|
||||
"vite": "^8.0.6",
|
||||
"vite-plugin-vue-devtools": "^8.1.1",
|
||||
"vite-plugin-vuetify": "^2.1.3",
|
||||
"vue-eslint-parser": "^10.4.0",
|
||||
"vue-tsc": "^3.2.5",
|
||||
"vue-tsc": "^3.2.6",
|
||||
"yaml-eslint-parser": "^2.0.0"
|
||||
}
|
||||
}
|
||||
|
||||
3482
pnpm-lock.yaml
generated
BIN
public/UI/combat/combatCrown2.webp
Normal file
|
After Width: | Height: | Size: 1.4 KiB |
BIN
public/UI/daily/coin.webp
Normal file
|
After Width: | Height: | Size: 2.1 KiB |
BIN
public/UI/daily/domain.webp
Normal file
|
After Width: | Height: | Size: 1.8 KiB |
BIN
public/UI/daily/mission.webp
Normal file
|
After Width: | Height: | Size: 2.0 KiB |
BIN
public/UI/daily/resin.webp
Normal file
|
After Width: | Height: | Size: 2.2 KiB |
BIN
public/UI/daily/task.webp
Normal file
|
After Width: | Height: | Size: 1.9 KiB |
BIN
public/UI/daily/trans.webp
Normal file
|
After Width: | Height: | Size: 2.2 KiB |
|
Before Width: | Height: | Size: 2.4 KiB |
|
Before Width: | Height: | Size: 2.1 KiB |
BIN
public/UI/nav/subRecord.webp
Normal file
|
After Width: | Height: | Size: 4.1 KiB |
BIN
public/UI/nav/subSign.webp
Normal file
|
After Width: | Height: | Size: 2.3 KiB |
BIN
public/UI/nav/userBag.webp
Normal file
|
After Width: | Height: | Size: 2.1 KiB |
BIN
public/WIKI/character/10000130.webp
Normal file
|
After Width: | Height: | Size: 23 KiB |
BIN
public/WIKI/gachaB/UI_Beyd_Avatar_Boy_ArmAcc_S0044.webp
Normal file
|
After Width: | Height: | Size: 26 KiB |
BIN
public/WIKI/gachaB/UI_Beyd_Avatar_Boy_ArmAcc_S0045.webp
Normal file
|
After Width: | Height: | Size: 26 KiB |
BIN
public/WIKI/gachaB/UI_Beyd_Avatar_Boy_ArmAcc_S0052.webp
Normal file
|
After Width: | Height: | Size: 26 KiB |
BIN
public/WIKI/gachaB/UI_Beyd_Avatar_Boy_ArmAcc_S0053.webp
Normal file
|
After Width: | Height: | Size: 26 KiB |
BIN
public/WIKI/gachaB/UI_Beyd_Avatar_Boy_ArmAcc_S0116.webp
Normal file
|
After Width: | Height: | Size: 19 KiB |
BIN
public/WIKI/gachaB/UI_Beyd_Avatar_Boy_Bottom_S0039.webp
Normal file
|
After Width: | Height: | Size: 9.1 KiB |
BIN
public/WIKI/gachaB/UI_Beyd_Avatar_Boy_Bottom_S0040.webp
Normal file
|
After Width: | Height: | Size: 8.5 KiB |
BIN
public/WIKI/gachaB/UI_Beyd_Avatar_Boy_Bottom_S0044.webp
Normal file
|
After Width: | Height: | Size: 9.3 KiB |
BIN
public/WIKI/gachaB/UI_Beyd_Avatar_Boy_Bottom_S0045.webp
Normal file
|
After Width: | Height: | Size: 9.3 KiB |
BIN
public/WIKI/gachaB/UI_Beyd_Avatar_Boy_Bottom_S0052.webp
Normal file
|
After Width: | Height: | Size: 15 KiB |
BIN
public/WIKI/gachaB/UI_Beyd_Avatar_Boy_Bottom_S0053.webp
Normal file
|
After Width: | Height: | Size: 13 KiB |
BIN
public/WIKI/gachaB/UI_Beyd_Avatar_Boy_Bottom_S0078.webp
Normal file
|
After Width: | Height: | Size: 6.8 KiB |
BIN
public/WIKI/gachaB/UI_Beyd_Avatar_Boy_Bottom_S0079.webp
Normal file
|
After Width: | Height: | Size: 6.3 KiB |
BIN
public/WIKI/gachaB/UI_Beyd_Avatar_Boy_Bottom_S0116.webp
Normal file
|
After Width: | Height: | Size: 8.1 KiB |
BIN
public/WIKI/gachaB/UI_Beyd_Avatar_Boy_Earwear_S0052.webp
Normal file
|
After Width: | Height: | Size: 8.4 KiB |
BIN
public/WIKI/gachaB/UI_Beyd_Avatar_Boy_Earwear_S0053.webp
Normal file
|
After Width: | Height: | Size: 8.2 KiB |
BIN
public/WIKI/gachaB/UI_Beyd_Avatar_Boy_Hair_S0116.webp
Normal file
|
After Width: | Height: | Size: 21 KiB |
BIN
public/WIKI/gachaB/UI_Beyd_Avatar_Boy_Headwear_S0039.webp
Normal file
|
After Width: | Height: | Size: 16 KiB |
BIN
public/WIKI/gachaB/UI_Beyd_Avatar_Boy_Headwear_S0040.webp
Normal file
|
After Width: | Height: | Size: 11 KiB |
BIN
public/WIKI/gachaB/UI_Beyd_Avatar_Boy_Headwear_S0044.webp
Normal file
|
After Width: | Height: | Size: 12 KiB |
BIN
public/WIKI/gachaB/UI_Beyd_Avatar_Boy_Headwear_S0045.webp
Normal file
|
After Width: | Height: | Size: 12 KiB |
BIN
public/WIKI/gachaB/UI_Beyd_Avatar_Boy_Headwear_S0116.webp
Normal file
|
After Width: | Height: | Size: 11 KiB |
BIN
public/WIKI/gachaB/UI_Beyd_Avatar_Boy_LegAcc_S0039.webp
Normal file
|
After Width: | Height: | Size: 15 KiB |
BIN
public/WIKI/gachaB/UI_Beyd_Avatar_Boy_LegAcc_S0040.webp
Normal file
|
After Width: | Height: | Size: 16 KiB |
BIN
public/WIKI/gachaB/UI_Beyd_Avatar_Boy_LegAcc_S0116.webp
Normal file
|
After Width: | Height: | Size: 14 KiB |
BIN
public/WIKI/gachaB/UI_Beyd_Avatar_Boy_Shoe_S0039.webp
Normal file
|
After Width: | Height: | Size: 9.9 KiB |
BIN
public/WIKI/gachaB/UI_Beyd_Avatar_Boy_Shoe_S0040.webp
Normal file
|
After Width: | Height: | Size: 12 KiB |
BIN
public/WIKI/gachaB/UI_Beyd_Avatar_Boy_Shoe_S0044.webp
Normal file
|
After Width: | Height: | Size: 14 KiB |
BIN
public/WIKI/gachaB/UI_Beyd_Avatar_Boy_Shoe_S0045.webp
Normal file
|
After Width: | Height: | Size: 16 KiB |
BIN
public/WIKI/gachaB/UI_Beyd_Avatar_Boy_Shoe_S0052.webp
Normal file
|
After Width: | Height: | Size: 11 KiB |
BIN
public/WIKI/gachaB/UI_Beyd_Avatar_Boy_Shoe_S0053.webp
Normal file
|
After Width: | Height: | Size: 12 KiB |
BIN
public/WIKI/gachaB/UI_Beyd_Avatar_Boy_Shoe_S0078.webp
Normal file
|
After Width: | Height: | Size: 7.7 KiB |
BIN
public/WIKI/gachaB/UI_Beyd_Avatar_Boy_Shoe_S0079.webp
Normal file
|
After Width: | Height: | Size: 7.2 KiB |
BIN
public/WIKI/gachaB/UI_Beyd_Avatar_Boy_Shoe_S0116.webp
Normal file
|
After Width: | Height: | Size: 18 KiB |
BIN
public/WIKI/gachaB/UI_Beyd_Avatar_Boy_Suit_S0029.webp
Normal file
|
After Width: | Height: | Size: 37 KiB |
BIN
public/WIKI/gachaB/UI_Beyd_Avatar_Boy_Suit_S0056.webp
Normal file
|
After Width: | Height: | Size: 50 KiB |
BIN
public/WIKI/gachaB/UI_Beyd_Avatar_Boy_Suit_S0066.webp
Normal file
|
After Width: | Height: | Size: 50 KiB |
BIN
public/WIKI/gachaB/UI_Beyd_Avatar_Boy_Suit_S0106.webp
Normal file
|
After Width: | Height: | Size: 30 KiB |
BIN
public/WIKI/gachaB/UI_Beyd_Avatar_Boy_Suit_S0111.webp
Normal file
|
After Width: | Height: | Size: 44 KiB |
BIN
public/WIKI/gachaB/UI_Beyd_Avatar_Boy_Suit_S0113.webp
Normal file
|
After Width: | Height: | Size: 26 KiB |
BIN
public/WIKI/gachaB/UI_Beyd_Avatar_Boy_Suit_S0114.webp
Normal file
|
After Width: | Height: | Size: 32 KiB |
BIN
public/WIKI/gachaB/UI_Beyd_Avatar_Boy_Suit_S0115.webp
Normal file
|
After Width: | Height: | Size: 27 KiB |
BIN
public/WIKI/gachaB/UI_Beyd_Avatar_Boy_Suit_S0116.webp
Normal file
|
After Width: | Height: | Size: 31 KiB |
BIN
public/WIKI/gachaB/UI_Beyd_Avatar_Boy_Suit_S0117.webp
Normal file
|
After Width: | Height: | Size: 21 KiB |
BIN
public/WIKI/gachaB/UI_Beyd_Avatar_Boy_Suit_S0118.webp
Normal file
|
After Width: | Height: | Size: 23 KiB |
BIN
public/WIKI/gachaB/UI_Beyd_Avatar_Boy_Suit_S0119.webp
Normal file
|
After Width: | Height: | Size: 24 KiB |
BIN
public/WIKI/gachaB/UI_Beyd_Avatar_Boy_Suit_S0120.webp
Normal file
|
After Width: | Height: | Size: 24 KiB |
BIN
public/WIKI/gachaB/UI_Beyd_Avatar_Boy_Top_S0039.webp
Normal file
|
After Width: | Height: | Size: 20 KiB |
BIN
public/WIKI/gachaB/UI_Beyd_Avatar_Boy_Top_S0040.webp
Normal file
|
After Width: | Height: | Size: 18 KiB |
BIN
public/WIKI/gachaB/UI_Beyd_Avatar_Boy_Top_S0044.webp
Normal file
|
After Width: | Height: | Size: 24 KiB |
BIN
public/WIKI/gachaB/UI_Beyd_Avatar_Boy_Top_S0045.webp
Normal file
|
After Width: | Height: | Size: 26 KiB |
BIN
public/WIKI/gachaB/UI_Beyd_Avatar_Boy_Top_S0052.webp
Normal file
|
After Width: | Height: | Size: 20 KiB |
BIN
public/WIKI/gachaB/UI_Beyd_Avatar_Boy_Top_S0053.webp
Normal file
|
After Width: | Height: | Size: 19 KiB |
BIN
public/WIKI/gachaB/UI_Beyd_Avatar_Boy_Top_S0078.webp
Normal file
|
After Width: | Height: | Size: 23 KiB |
BIN
public/WIKI/gachaB/UI_Beyd_Avatar_Boy_Top_S0079.webp
Normal file
|
After Width: | Height: | Size: 24 KiB |
BIN
public/WIKI/gachaB/UI_Beyd_Avatar_Boy_Top_S0116.webp
Normal file
|
After Width: | Height: | Size: 32 KiB |
BIN
public/WIKI/gachaB/UI_Beyd_Avatar_Girl_ArmAcc_S0044.webp
Normal file
|
After Width: | Height: | Size: 22 KiB |
BIN
public/WIKI/gachaB/UI_Beyd_Avatar_Girl_ArmAcc_S0045.webp
Normal file
|
After Width: | Height: | Size: 27 KiB |
BIN
public/WIKI/gachaB/UI_Beyd_Avatar_Girl_ArmAcc_S0052.webp
Normal file
|
After Width: | Height: | Size: 24 KiB |
BIN
public/WIKI/gachaB/UI_Beyd_Avatar_Girl_ArmAcc_S0053.webp
Normal file
|
After Width: | Height: | Size: 24 KiB |
BIN
public/WIKI/gachaB/UI_Beyd_Avatar_Girl_ArmAcc_S0116.webp
Normal file
|
After Width: | Height: | Size: 28 KiB |
BIN
public/WIKI/gachaB/UI_Beyd_Avatar_Girl_Bottom_S0044.webp
Normal file
|
After Width: | Height: | Size: 14 KiB |
BIN
public/WIKI/gachaB/UI_Beyd_Avatar_Girl_Bottom_S0045.webp
Normal file
|
After Width: | Height: | Size: 14 KiB |
BIN
public/WIKI/gachaB/UI_Beyd_Avatar_Girl_Bottom_S0052.webp
Normal file
|
After Width: | Height: | Size: 19 KiB |
BIN
public/WIKI/gachaB/UI_Beyd_Avatar_Girl_Bottom_S0053.webp
Normal file
|
After Width: | Height: | Size: 16 KiB |
BIN
public/WIKI/gachaB/UI_Beyd_Avatar_Girl_Bottom_S0078.webp
Normal file
|
After Width: | Height: | Size: 11 KiB |
BIN
public/WIKI/gachaB/UI_Beyd_Avatar_Girl_Bottom_S0079.webp
Normal file
|
After Width: | Height: | Size: 12 KiB |
BIN
public/WIKI/gachaB/UI_Beyd_Avatar_Girl_Earwear_S0052.webp
Normal file
|
After Width: | Height: | Size: 11 KiB |
BIN
public/WIKI/gachaB/UI_Beyd_Avatar_Girl_Earwear_S0053.webp
Normal file
|
After Width: | Height: | Size: 9.9 KiB |