Compare commits
68 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
9bd9f60699 | ||
|
|
070ab01b22 | ||
|
|
11bf4fea9b | ||
|
|
0b8fa6d8f6 | ||
|
|
8917deb5db | ||
|
|
065019cdc6 | ||
|
|
f802ee9a68 | ||
|
|
971526d6ed | ||
|
|
2c2914a028 | ||
|
|
214b828b10 | ||
|
|
ada6f5b15a | ||
|
|
2aa0df5246 | ||
|
|
d9cdea9670 | ||
|
|
98541e1b49 | ||
|
|
f50398f6e3 | ||
|
|
74eb612d72 | ||
|
|
956634767a | ||
|
|
ee078bbcf2 | ||
|
|
044ec32069 | ||
|
|
19ac8e90e0 | ||
|
|
d1bfa49bd7 | ||
|
|
d78c541c87 | ||
|
|
ab9eb3c827 | ||
|
|
36c9cd69e6 | ||
|
|
914cddafc1 | ||
|
|
33edb3c33a | ||
|
|
8f322eae45 | ||
|
|
96aec27752 | ||
|
|
ca46b8813d | ||
|
|
6bf24bd8c2 | ||
|
|
623d137457 | ||
|
|
54e941504d | ||
|
|
e5ff294080 | ||
|
|
44e968592d | ||
|
|
983be395fa | ||
|
|
e5b30af48f | ||
|
|
5aba7bcecc | ||
|
|
4985bcde29 | ||
|
|
d8ade955b4 | ||
|
|
d9bbe4e7fe | ||
|
|
ff0dc6d08c | ||
|
|
6a0749f234 | ||
|
|
6b2ef079ca | ||
|
|
eaf2245e38 | ||
|
|
c75858ceab | ||
|
|
fabf9de03e | ||
|
|
9e030c976b | ||
|
|
55671ab22d | ||
|
|
7f872787f1 | ||
|
|
0cd3b6072f | ||
|
|
17c5d879cd | ||
|
|
417e98a99c | ||
|
|
b5a81503a8 | ||
|
|
1405b544be | ||
|
|
8707a8288e | ||
|
|
d9cb95e225 | ||
|
|
27f4e026b0 | ||
|
|
5fb24387ca | ||
|
|
88879dd4ec | ||
|
|
5d59245761 | ||
|
|
66c6d3a3a5 | ||
|
|
8996c1bce1 | ||
|
|
c5587211fd | ||
|
|
43232548bb | ||
|
|
3501590fb4 | ||
|
|
2b227ea333 | ||
|
|
2f32f4e2c1 | ||
|
|
3ec13b7510 |
@@ -1,10 +0,0 @@
|
||||
# Build
|
||||
dist
|
||||
src-tauri/target
|
||||
# Package files
|
||||
pnpm-lock.yaml
|
||||
# data
|
||||
src/data/**/*.json
|
||||
# lint files
|
||||
!.prettierrc.yml
|
||||
!.stylelintrc.yml
|
||||
133
.eslintrc.yml
@@ -1,133 +0,0 @@
|
||||
root: true
|
||||
env:
|
||||
browser: true
|
||||
es2021: true
|
||||
extends:
|
||||
- plugin:vue/vue3-essential
|
||||
- prettier
|
||||
- plugin:prettier/recommended
|
||||
- plugin:yml/standard
|
||||
- plugin:jsonc/recommended-with-json
|
||||
parserOptions:
|
||||
ecmaVersion: latest
|
||||
sourceType: module
|
||||
tsconfigRootDir: .
|
||||
project: ./tsconfig.json
|
||||
globals:
|
||||
TGApp: readonly
|
||||
window: readonly
|
||||
rules:
|
||||
vue/multi-word-component-names: off
|
||||
vue/valid-template-root: off
|
||||
overrides:
|
||||
- files: ["*.ts"]
|
||||
extends: standard-with-typescript
|
||||
# 将此处规则 copy 到下面的 .vue 文件的 rules 中
|
||||
rules: &typescript-rules
|
||||
import/order:
|
||||
- error
|
||||
- groups:
|
||||
- builtin
|
||||
- external
|
||||
- [internal, parent, sibling, index]
|
||||
- unknown
|
||||
newlines-between: always
|
||||
alphabetize:
|
||||
order: asc
|
||||
caseInsensitive: true
|
||||
"@typescript-eslint/indent": off
|
||||
"@typescript-eslint/quotes":
|
||||
- error
|
||||
- double
|
||||
"@typescript-eslint/semi":
|
||||
- error
|
||||
- always
|
||||
"@typescript-eslint/comma-dangle":
|
||||
- error
|
||||
- always-multiline
|
||||
"@typescript-eslint/space-before-function-paren":
|
||||
- error
|
||||
- anonymous: always
|
||||
named: never
|
||||
asyncArrow: always
|
||||
"@typescript-eslint/member-delimiter-style":
|
||||
- error
|
||||
- multiline:
|
||||
delimiter: semi
|
||||
requireLast: true
|
||||
"@typescript-eslint/no-import-type-side-effects": error
|
||||
"@typescript-eslint/strict-boolean-expressions": off
|
||||
"@typescript-eslint/consistent-type-assertions":
|
||||
- warn
|
||||
- assertionStyle: angle-bracket # 使用尖括号
|
||||
"@typescript-eslint/naming-convention":
|
||||
- warn
|
||||
- selector: variableLike
|
||||
format: [camelCase, UPPER_CASE, PascalCase, snake_case]
|
||||
leadingUnderscore: allow
|
||||
trailingUnderscore: allow
|
||||
"@typescript-eslint/no-non-null-assertion": warn
|
||||
"@typescript-eslint/no-misused-promises": off
|
||||
"@typescript-eslint/restrict-template-expressions": warn
|
||||
- files: ["*.vue"]
|
||||
parser: vue-eslint-parser
|
||||
parserOptions:
|
||||
parser: "@typescript-eslint/parser"
|
||||
extraFileExtensions: [.vue]
|
||||
rules:
|
||||
<<: *typescript-rules
|
||||
- files: [package.json, tsconfig.json]
|
||||
parser: jsonc-eslint-parser
|
||||
rules:
|
||||
jsonc/sort-array-values:
|
||||
- error
|
||||
- pathPattern: .*
|
||||
order:
|
||||
type: asc
|
||||
jsonc/sort-keys:
|
||||
- error
|
||||
- pathPattern: ^$
|
||||
order:
|
||||
- name
|
||||
- version
|
||||
- description
|
||||
- private
|
||||
- packageManager
|
||||
- scripts
|
||||
- lint-staged
|
||||
- keywords
|
||||
- author
|
||||
- license
|
||||
- repository
|
||||
- homepage
|
||||
- bugs
|
||||
- dependencies
|
||||
- devDependencies
|
||||
- files: ["*.yaml", "*.yml"]
|
||||
parser: yaml-eslint-parser
|
||||
parserOptions:
|
||||
defaultYAMLVersion: "1.2"
|
||||
rules:
|
||||
yml/indent:
|
||||
- error
|
||||
- 2
|
||||
yml/no-multiple-empty-lines: error
|
||||
yml/key-spacing: error
|
||||
yml/quotes:
|
||||
- error
|
||||
- prefer: double
|
||||
avoidEscape: true
|
||||
yml/sort-keys:
|
||||
- error
|
||||
- pathPattern: ^$
|
||||
order:
|
||||
- root
|
||||
- env
|
||||
- extends
|
||||
- parserOptions
|
||||
- globals
|
||||
- rules
|
||||
- overrides
|
||||
- pathPattern: ^rules$
|
||||
order:
|
||||
type: asc
|
||||
44
.github/ISSUE_TEMPLATE/source_update.yml
vendored
Normal file
@@ -0,0 +1,44 @@
|
||||
name: 原神游戏资源更新(仅供开发者使用)
|
||||
description: 版本前瞻后的例行资源更新
|
||||
title: "[Update] "
|
||||
labels:
|
||||
- 资源
|
||||
body:
|
||||
- type: checkboxes
|
||||
attributes:
|
||||
label: Issue Check
|
||||
options:
|
||||
- label: 个人明确了解该模板仅供开发者使用
|
||||
required: true
|
||||
- type: input
|
||||
id: version
|
||||
attributes:
|
||||
label: 游戏版本
|
||||
description: 请填写游戏版本
|
||||
placeholder: 如 4.6
|
||||
- type: checkboxes
|
||||
id: resources
|
||||
attributes:
|
||||
label: 包括的资源
|
||||
options:
|
||||
- label: 角色&名片,有新角色时选择
|
||||
required: false
|
||||
- label: 武器,有新武器时选择
|
||||
required: false
|
||||
- label: 成就,有新成就时选择
|
||||
required: false
|
||||
- label: 卡牌,有新卡牌时选择
|
||||
required: false
|
||||
- label: 材料,有新材料时选择
|
||||
required: false
|
||||
- type: textarea
|
||||
id: detail
|
||||
attributes:
|
||||
label: 详情
|
||||
description: 对上述内容进行详细说明
|
||||
- type: textarea
|
||||
id: additional
|
||||
attributes:
|
||||
label: 其他信息
|
||||
description: 请填写其他信息
|
||||
placeholder: 请填写其他信息
|
||||
7
.github/workflows/build.yml
vendored
@@ -26,7 +26,10 @@ jobs:
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v3
|
||||
- name: Add Rust targets(macOS)
|
||||
- name: Add Rust targets(macOS Intel)
|
||||
if: matrix.settings.target == 'macos-intel'
|
||||
run: rustup target add x86_64-apple-darwin
|
||||
- name: Add Rust targets(macOS ARM)
|
||||
if: matrix.settings.target == 'macos-arm'
|
||||
run: rustup target add aarch64-apple-darwin
|
||||
|
||||
@@ -44,7 +47,7 @@ jobs:
|
||||
- name: setup pnpm
|
||||
uses: pnpm/action-setup@v2
|
||||
with:
|
||||
version: 8.14.1
|
||||
version: 9.0.5
|
||||
- name: remove lockfile
|
||||
run: rm pnpm-lock.yaml
|
||||
- name: Install frontend dependencies
|
||||
|
||||
2
.github/workflows/qodana_code_quality.yml
vendored
@@ -18,7 +18,7 @@ jobs:
|
||||
- name: setup pnpm
|
||||
uses: pnpm/action-setup@v2
|
||||
with:
|
||||
version: 8.14.1
|
||||
version: 9.0.5
|
||||
- name: remove lockfile
|
||||
run: rm -f pnpm-lock.yaml
|
||||
- name: Install dependencies
|
||||
|
||||
50
CHANGELOG.md
@@ -2,13 +2,55 @@
|
||||
Author: 目棃
|
||||
Description: CHANGELOG
|
||||
Date: 2024-01-15
|
||||
Update: 2024-02-09
|
||||
Update: 2024-04-24
|
||||
---
|
||||
|
||||
> 本文档 [`Frontmatter`](https://github.com/BTMuli/MuCli#Frontmatter) 由 [MuCli](https://github.com/BTMuli/Mucli)
|
||||
> 自动生成于 `2024-01-15 17:29:15`
|
||||
> 本文档 [`Frontmatter`](https://github.com/BTMuli/MuCli#Frontmatter) 由 [MuCli](https://github.com/BTMuli/Mucli) 自动生成于 `2024-01-15 17:29:15`
|
||||
>
|
||||
> 更新于 `2024-02-09 20:30:26`
|
||||
> 更新于 `2024-04-24 15:36:42`
|
||||
|
||||
## [0.4.6](https://github.com/BTMuli/TeyvatGuide/releases/v0.4.6) (2024-04-24)
|
||||
|
||||
### Feat
|
||||
|
||||
- 帖子:重构文本解析,现在更加贴近应用内的渲染效果
|
||||
- 应用:侧边栏点击咨讯时的参数也支持记忆了
|
||||
- 应用:更新 4.6 版本的游戏资源
|
||||
|
||||
### Fix
|
||||
|
||||
- 留影叙佳期:修复侧边栏点击时初始画片数异常
|
||||
- 首页:修复特定情况下日历组件左侧切换日期按钮点击无效
|
||||
- 帖子:修复 `align:right` 不生效的问题
|
||||
- 首页:修复特定情况下首页卡池渲染异常
|
||||
|
||||
### Change
|
||||
|
||||
- 应用:数据库更新后弹出更新日志
|
||||
|
||||
## [0.4.5](https://github.com/BTMuli/TeyvatGuide/releases/v0.4.5) (2024-04-05)
|
||||
|
||||
### Feat
|
||||
|
||||
- 添加收藏页面,支持导入用户收藏 [`#100`](https://github.com/BTMuli/TeyvatGuide/issues/100)
|
||||
- 设置页添加更新日志跳转
|
||||
- 首页:组件样式迭代
|
||||
- 帖子:替换默认封面
|
||||
- 帖子:支持关键词搜索 [`#103`](https://github.com/BTMuli/TeyvatGuide/issues/103)
|
||||
|
||||
### Fix
|
||||
|
||||
- 成就:修正部分成就版本信息 [`3501590f`](https://github.com/BTMuli/TeyvatGuide/commit/3501590f)
|
||||
- 帖子:链接卡片添加间距
|
||||
- 图鉴:修复埃洛伊背景渲染异常
|
||||
- 留影叙佳期:补充遗漏数据,支持特定日期查看
|
||||
|
||||
### Change
|
||||
|
||||
- 帖子:微调解析逻辑
|
||||
- 重构:通用帖子卡片抽离作为组件,添加 `select` 状态
|
||||
- 帖子:抽奖详情改为 `overlay`
|
||||
- 应用:调整默认颜色
|
||||
|
||||
## [0.4.4](https://github.com/BTMuli/TeyvatGuide/releases/v0.4.4) (2024-03-13)
|
||||
|
||||
|
||||
@@ -2,16 +2,16 @@
|
||||
Author: 目棃
|
||||
Description: 说明文档
|
||||
Date: 2023-03-05
|
||||
Update: 2024-03-13
|
||||
Update: 2024-04-05
|
||||
---
|
||||
|
||||
> 本文档 [`Frontmatter`](https://github.com/BTMuli/MuCli#Frontmatter) 由 [MuCli](https://github.com/BTMuli/Mucli) 自动生成于 `2023-03-05 14:41:55`
|
||||
>
|
||||
> 更新于 `2024-03-13 15:51:39`
|
||||
> 更新于 `2024-04-05 14:25:24`
|
||||
|
||||
 
|
||||
|
||||
  
|
||||
  
|
||||
|
||||
<div style="width: 100%; text-align: center; margin: 0 auto;">
|
||||
<img alt="icon" src="https://s2.loli.net/2023/10/19/Y5DpBQRy3usLHEb.png" />
|
||||
@@ -49,6 +49,8 @@ Game Tool for Genshin Impact player, supports Windows and macOS.
|
||||
- [x] 米游社各分区帖子获取(支持通过 ID 获取)
|
||||
- [x] 成就管理(UIAF v1.1),支持 [`YaeAchievement`](https://github.com/HolographicHat/YaeAchievement) 导入
|
||||
- [x] 祈愿管理(UIGF v3.0)
|
||||
- [x] 留影叙佳期画片查看
|
||||
- [x] 帖子收藏
|
||||
|
||||
- 登陆功能:
|
||||
|
||||
|
||||
23
eslint.config.js
Normal file
@@ -0,0 +1,23 @@
|
||||
import { jsonEslintConfig } from "./eslint/jsonEslint.js";
|
||||
import { vueEslintConfig } from "./eslint/vueEslint.js";
|
||||
import ymlEslintConfig from "./eslint/ymlEslint.js";
|
||||
|
||||
export default [
|
||||
...jsonEslintConfig,
|
||||
ymlEslintConfig,
|
||||
...vueEslintConfig,
|
||||
{
|
||||
ignores: [
|
||||
"dist",
|
||||
"src-tauri/target",
|
||||
"pnpm-lock.yaml",
|
||||
"src/data/**/*.json",
|
||||
"src-tauri/tauri.conf.json",
|
||||
"qodana.yaml",
|
||||
".github",
|
||||
".vscode",
|
||||
".prettierrc.yml",
|
||||
".stylelintrc.yml",
|
||||
],
|
||||
},
|
||||
];
|
||||
95
eslint/jsonEslint.js
Normal file
@@ -0,0 +1,95 @@
|
||||
import eslint_jsonc from "eslint-plugin-jsonc";
|
||||
import jsonc_parser from "jsonc-eslint-parser";
|
||||
|
||||
const pkgJsonConfig = {
|
||||
files: ["package.json"],
|
||||
plugins: {
|
||||
jsonc: eslint_jsonc,
|
||||
},
|
||||
languageOptions: {
|
||||
parser: jsonc_parser,
|
||||
},
|
||||
rules: {
|
||||
"jsonc/comma-dangle": ["error", "never"],
|
||||
"jsonc/sort-keys": [
|
||||
"error",
|
||||
{
|
||||
pathPattern: "^$",
|
||||
order: [
|
||||
"name",
|
||||
"version",
|
||||
"description",
|
||||
"type",
|
||||
"packageManager",
|
||||
"scripts",
|
||||
"lint-staged",
|
||||
"keywords",
|
||||
"author",
|
||||
"license",
|
||||
"repository",
|
||||
"homepage",
|
||||
"bugs",
|
||||
"dependencies",
|
||||
"devDependencies",
|
||||
],
|
||||
},
|
||||
],
|
||||
},
|
||||
};
|
||||
|
||||
const tscJsonConfig = {
|
||||
files: ["tsconfig.json"],
|
||||
plugins: {
|
||||
jsonc: eslint_jsonc,
|
||||
},
|
||||
languageOptions: {
|
||||
parser: jsonc_parser,
|
||||
},
|
||||
rules: {
|
||||
"jsonc/comma-dangle": ["error", "never"],
|
||||
"jsonc/sort-keys": [
|
||||
"error",
|
||||
{
|
||||
pathPattern: "^$",
|
||||
order: [
|
||||
"compilerOptions",
|
||||
"include",
|
||||
"exclude",
|
||||
"extends",
|
||||
"files",
|
||||
"references",
|
||||
"typeAcquisition",
|
||||
],
|
||||
},
|
||||
],
|
||||
},
|
||||
};
|
||||
|
||||
const jsoncConfig = {
|
||||
files: ["source/data/out/**/*.json", ".vscode/**/*.json"],
|
||||
plugins: {
|
||||
jsonc: eslint_jsonc,
|
||||
},
|
||||
languageOptions: {
|
||||
parser: jsonc_parser,
|
||||
},
|
||||
rules: {
|
||||
"jsonc/comma-dangle": ["error", "never"],
|
||||
"jsonc/sort-keys": [
|
||||
"error",
|
||||
{
|
||||
pathPattern: "^$",
|
||||
order: {
|
||||
type: "asc",
|
||||
},
|
||||
},
|
||||
],
|
||||
},
|
||||
};
|
||||
|
||||
export const jsonEslintConfig = [
|
||||
...eslint_jsonc.configs["flat/recommended-with-json"],
|
||||
pkgJsonConfig,
|
||||
tscJsonConfig,
|
||||
jsoncConfig,
|
||||
];
|
||||
87
eslint/vueEslint.js
Normal file
@@ -0,0 +1,87 @@
|
||||
import eslint_js from "@eslint/js";
|
||||
import eslint_import from "eslint-plugin-import";
|
||||
import eslint_prettier from "eslint-plugin-prettier";
|
||||
import eslint_vue from "eslint-plugin-vue";
|
||||
import pluginVue from "eslint-plugin-vue";
|
||||
import globals from "globals";
|
||||
import eslint_ts from "typescript-eslint";
|
||||
import vue_parser from "vue-eslint-parser";
|
||||
|
||||
const tsConfigRules = {
|
||||
"@typescript-eslint/consistent-type-assertions": [
|
||||
"error",
|
||||
{
|
||||
assertionStyle: "angle-bracket",
|
||||
},
|
||||
],
|
||||
"@typescript-eslint/no-import-type-side-effects": "error",
|
||||
"@typescript-eslint/strict-boolean-expressions": "off",
|
||||
"@typescript-eslint/no-explicit-any": "off",
|
||||
"import/order": [
|
||||
"error",
|
||||
{
|
||||
groups: ["builtin", "external", "internal", "parent", "sibling", "index", "unknown"],
|
||||
"newlines-between": "always",
|
||||
alphabetize: {
|
||||
order: "asc",
|
||||
caseInsensitive: true,
|
||||
},
|
||||
},
|
||||
],
|
||||
"prettier/prettier": "error",
|
||||
};
|
||||
|
||||
const tsConfig = {
|
||||
files: ["*.ts"],
|
||||
plugins: {
|
||||
typescript: eslint_ts,
|
||||
import: eslint_import,
|
||||
prettier: eslint_prettier,
|
||||
},
|
||||
languageOptions: {
|
||||
parser: eslint_ts.parser,
|
||||
parserOptions: {
|
||||
project: "tsconfig.json",
|
||||
tsconfigRootDir: ".",
|
||||
},
|
||||
},
|
||||
rules: tsConfigRules,
|
||||
};
|
||||
|
||||
const vueConfig = {
|
||||
plugins: {
|
||||
vue: eslint_vue,
|
||||
import: eslint_import,
|
||||
prettier: eslint_prettier,
|
||||
},
|
||||
languageOptions: {
|
||||
globals: {
|
||||
...globals.browser,
|
||||
...globals.es2021,
|
||||
TGApp: "readonly",
|
||||
window: "readonly",
|
||||
},
|
||||
ecmaVersion: "latest",
|
||||
sourceType: "module",
|
||||
parser: vue_parser,
|
||||
parserOptions: {
|
||||
project: "tsconfig.json",
|
||||
parser: eslint_ts.parser,
|
||||
extraFileExtensions: [".vue"],
|
||||
tsconfigRootDir: ".",
|
||||
},
|
||||
},
|
||||
rules: {
|
||||
...tsConfigRules,
|
||||
"vue/multi-word-component-names": "off",
|
||||
},
|
||||
};
|
||||
|
||||
export const vueEslintConfig = [
|
||||
eslint_js.configs.recommended,
|
||||
...eslint_ts.configs.recommended,
|
||||
...eslint_vue.configs["flat/essential"],
|
||||
...pluginVue.configs["flat/essential"],
|
||||
tsConfig,
|
||||
vueConfig,
|
||||
];
|
||||
30
eslint/ymlEslint.js
Normal file
@@ -0,0 +1,30 @@
|
||||
import eslint_yml from "eslint-plugin-yml";
|
||||
import yml_parser from "yaml-eslint-parser";
|
||||
|
||||
const ymlEslintConfig = {
|
||||
files: ["**/*.yml", "**/*.yaml"],
|
||||
plugins: {
|
||||
yml: eslint_yml,
|
||||
},
|
||||
languageOptions: {
|
||||
parser: yml_parser,
|
||||
parserOptions: {
|
||||
defaultYAMLVersion: "1.2",
|
||||
extraFileExtensions: [".yaml", ".yml"],
|
||||
},
|
||||
},
|
||||
rules: {
|
||||
"yml/indent": ["error", 2],
|
||||
"yml/key-spacing": ["error"],
|
||||
"yml/quotes": [
|
||||
"error",
|
||||
{
|
||||
prefer: "double",
|
||||
avoidEscape: true,
|
||||
},
|
||||
],
|
||||
"yml/sort-keys": ["error", "asc"],
|
||||
},
|
||||
};
|
||||
|
||||
export default ymlEslintConfig;
|
||||
51
package.json
@@ -1,9 +1,10 @@
|
||||
{
|
||||
"name": "TeyvatGuide",
|
||||
"version": "0.4.4",
|
||||
"version": "0.4.6",
|
||||
"description": "Game Tool for Genshin Impact player",
|
||||
"private": true,
|
||||
"packageManager": "pnpm@8.15.3",
|
||||
"packageManager": "pnpm@9.0.5",
|
||||
"type": "module",
|
||||
"scripts": {
|
||||
"build": "tauri build",
|
||||
"debug": "tauri build --debug",
|
||||
@@ -66,7 +67,7 @@
|
||||
},
|
||||
"dependencies": {
|
||||
"@mdi/font": "7.4.47",
|
||||
"@tauri-apps/api": "^1.5.3",
|
||||
"@tauri-apps/api": "^1.5.4",
|
||||
"artplayer": "^5.1.1",
|
||||
"clipboard": "^2.0.11",
|
||||
"color-convert": "^2.0.1",
|
||||
@@ -79,50 +80,54 @@
|
||||
"tauri-plugin-log-api": "github:tauri-apps/tauri-plugin-log#v1",
|
||||
"tauri-plugin-sql-api": "github:tauri-apps/tauri-plugin-sql#v1",
|
||||
"uuid": "^9.0.1",
|
||||
"vue": "^3.4.19",
|
||||
"vue-echarts": "^6.6.9",
|
||||
"vue": "^3.4.24",
|
||||
"vue-echarts": "^6.7.0",
|
||||
"vue-json-viewer": "^3.0.4",
|
||||
"vue-router": "^4.3.0",
|
||||
"vuetify": "^3.5.8",
|
||||
"vue-router": "^4.3.2",
|
||||
"vuetify": "^3.5.16",
|
||||
"wcag-color": "^1.1.1",
|
||||
"xml-js": "^1.6.11"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@tauri-apps/cli": "^1.5.10",
|
||||
"@eslint/eslintrc": "^3.0.2",
|
||||
"@eslint/js": "^9.1.1",
|
||||
"@tauri-apps/cli": "^1.5.11",
|
||||
"@types/color-convert": "^2.0.3",
|
||||
"@types/js-md5": "^0.7.2",
|
||||
"@types/node": "^20.11.20",
|
||||
"@types/node": "^20.12.7",
|
||||
"@types/uuid": "^9.0.8",
|
||||
"@typescript-eslint/eslint-plugin": "^7.0.2",
|
||||
"@typescript-eslint/parser": "^7.0.2",
|
||||
"@typescript-eslint/parser": "^7.7.1",
|
||||
"@vitejs/plugin-vue": "^5.0.4",
|
||||
"concurrently": "^8.2.2",
|
||||
"eslint": "^8.56.0",
|
||||
"eslint": "^9.1.1",
|
||||
"eslint-config-love": "^47.0.0",
|
||||
"eslint-config-prettier": "^9.1.0",
|
||||
"eslint-config-standard-with-typescript": "^43.0.1",
|
||||
"eslint-plugin-import": "^2.29.1",
|
||||
"eslint-plugin-jsonc": "^2.13.0",
|
||||
"eslint-plugin-n": "^16.6.2",
|
||||
"eslint-plugin-jsonc": "^2.15.1",
|
||||
"eslint-plugin-n": "^17.2.1",
|
||||
"eslint-plugin-prettier": "^5.1.3",
|
||||
"eslint-plugin-promise": "^6.1.1",
|
||||
"eslint-plugin-vue": "^9.22.0",
|
||||
"eslint-plugin-yml": "^1.12.2",
|
||||
"eslint-plugin-vue": "^9.25.0",
|
||||
"eslint-plugin-yml": "^1.14.0",
|
||||
"globals": "^15.0.0",
|
||||
"husky": "^9.0.11",
|
||||
"jsonc-eslint-parser": "^2.4.0",
|
||||
"lint-staged": "^15.2.2",
|
||||
"oxlint": "^0.2.10",
|
||||
"oxlint": "^0.3.1",
|
||||
"prettier": "3.2.5",
|
||||
"stylelint": "^16.2.1",
|
||||
"stylelint": "^16.3.1",
|
||||
"stylelint-config-idiomatic-order": "^10.0.0",
|
||||
"stylelint-config-standard-vue": "^1.0.0",
|
||||
"stylelint-declaration-block-no-ignored-properties": "^2.8.0",
|
||||
"stylelint-high-performance-animation": "^1.10.0",
|
||||
"stylelint-order": "^6.0.4",
|
||||
"stylelint-prettier": "^5.0.0",
|
||||
"typescript": "^5.3.3",
|
||||
"vite": "^5.1.4",
|
||||
"vite-plugin-vue-devtools": "^7.0.15",
|
||||
"vite-plugin-vuetify": "^2.0.1",
|
||||
"typescript": "^5.4.5",
|
||||
"typescript-eslint": "^7.7.1",
|
||||
"vite": "^5.2.10",
|
||||
"vite-plugin-vue-devtools": "^7.0.27",
|
||||
"vite-plugin-vuetify": "^2.0.3",
|
||||
"vue-eslint-parser": "^9.4.2",
|
||||
"yaml-eslint-parser": "^1.2.2"
|
||||
}
|
||||
}
|
||||
|
||||
7415
pnpm-lock.yaml
generated
BIN
public/WIKI/GCG/normal/久岐忍.webp
Normal file
|
After Width: | Height: | Size: 55 KiB |
BIN
public/WIKI/GCG/normal/公义的酬报.webp
Normal file
|
After Width: | Height: | Size: 48 KiB |
BIN
public/WIKI/GCG/normal/割舍软弱之心.webp
Normal file
|
After Width: | Height: | Size: 41 KiB |
BIN
public/WIKI/GCG/normal/嗜雷·兽境猎犬.webp
Normal file
|
After Width: | Height: | Size: 52 KiB |
BIN
public/WIKI/GCG/normal/大型冰史莱姆.webp
Normal file
|
After Width: | Height: | Size: 41 KiB |
BIN
public/WIKI/GCG/normal/太郎丸.webp
Normal file
|
After Width: | Height: | Size: 28 KiB |
BIN
public/WIKI/GCG/normal/妙道合真.webp
Normal file
|
After Width: | Height: | Size: 36 KiB |
BIN
public/WIKI/GCG/normal/暗流涌动.webp
Normal file
|
After Width: | Height: | Size: 68 KiB |
BIN
public/WIKI/GCG/normal/海中寻宝.webp
Normal file
|
After Width: | Height: | Size: 39 KiB |
BIN
public/WIKI/GCG/normal/深渊使徒·激流.webp
Normal file
|
After Width: | Height: | Size: 69 KiB |
BIN
public/WIKI/GCG/normal/清籁岛.webp
Normal file
|
After Width: | Height: | Size: 55 KiB |
BIN
public/WIKI/GCG/normal/熔火铁甲.webp
Normal file
|
After Width: | Height: | Size: 59 KiB |
BIN
public/WIKI/GCG/normal/珐露珊.webp
Normal file
|
After Width: | Height: | Size: 56 KiB |
BIN
public/WIKI/GCG/normal/白手套和渔夫.webp
Normal file
|
After Width: | Height: | Size: 46 KiB |
BIN
public/WIKI/GCG/normal/紫晶的花冠.webp
Normal file
|
After Width: | Height: | Size: 56 KiB |
BIN
public/WIKI/GCG/normal/缤纷马卡龙.webp
Normal file
|
After Width: | Height: | Size: 54 KiB |
BIN
public/WIKI/GCG/normal/铁甲熔火帝皇.webp
Normal file
|
After Width: | Height: | Size: 79 KiB |
BIN
public/WIKI/character/10000096.webp
Normal file
|
After Width: | Height: | Size: 15 KiB |
BIN
public/WIKI/weapon/13512.webp
Normal file
|
After Width: | Height: | Size: 10 KiB |
BIN
public/icon/achievement/UI_AchievementIcon_A018.webp
Normal file
|
After Width: | Height: | Size: 21 KiB |
BIN
public/icon/achievement/UI_AchievementIcon_B004_Part9.webp
Normal file
|
After Width: | Height: | Size: 26 KiB |
BIN
public/icon/constellations/UI_Talent_S_Arlecchino_01.webp
Normal file
|
After Width: | Height: | Size: 2.5 KiB |
BIN
public/icon/constellations/UI_Talent_S_Arlecchino_02.webp
Normal file
|
After Width: | Height: | Size: 2.9 KiB |
BIN
public/icon/constellations/UI_Talent_S_Arlecchino_03.webp
Normal file
|
After Width: | Height: | Size: 3.2 KiB |
BIN
public/icon/constellations/UI_Talent_S_Arlecchino_04.webp
Normal file
|
After Width: | Height: | Size: 2.9 KiB |
BIN
public/icon/constellations/UI_Talent_U_Arlecchino_01.webp
Normal file
|
After Width: | Height: | Size: 2.6 KiB |
BIN
public/icon/constellations/UI_Talent_U_Arlecchino_02.webp
Normal file
|
After Width: | Height: | Size: 2.8 KiB |
BIN
public/icon/material/101322.webp
Normal file
|
After Width: | Height: | Size: 7.7 KiB |
BIN
public/icon/material/112098.webp
Normal file
|
After Width: | Height: | Size: 4.5 KiB |
BIN
public/icon/material/112099.webp
Normal file
|
After Width: | Height: | Size: 5.8 KiB |
BIN
public/icon/material/112100.webp
Normal file
|
After Width: | Height: | Size: 7.2 KiB |
BIN
public/icon/material/113059.webp
Normal file
|
After Width: | Height: | Size: 10 KiB |
BIN
public/icon/material/113060.webp
Normal file
|
After Width: | Height: | Size: 14 KiB |
BIN
public/icon/material/113061.webp
Normal file
|
After Width: | Height: | Size: 10 KiB |
BIN
public/icon/material/113062.webp
Normal file
|
After Width: | Height: | Size: 14 KiB |
BIN
public/icon/material/120791.webp
Normal file
|
After Width: | Height: | Size: 8.9 KiB |
BIN
public/icon/material/129001.webp
Normal file
|
After Width: | Height: | Size: 13 KiB |
BIN
public/icon/material/140001.webp
Normal file
|
After Width: | Height: | Size: 7.5 KiB |
BIN
public/icon/material/140002.webp
Normal file
|
After Width: | Height: | Size: 9.8 KiB |
BIN
public/icon/material/140003.webp
Normal file
|
After Width: | Height: | Size: 10 KiB |
BIN
public/icon/material/140004.webp
Normal file
|
After Width: | Height: | Size: 11 KiB |
BIN
public/icon/material/140005.webp
Normal file
|
After Width: | Height: | Size: 13 KiB |
BIN
public/icon/material/140006.webp
Normal file
|
After Width: | Height: | Size: 10 KiB |
BIN
public/icon/material/140007.webp
Normal file
|
After Width: | Height: | Size: 13 KiB |
BIN
public/icon/material/140008.webp
Normal file
|
After Width: | Height: | Size: 16 KiB |
BIN
public/icon/material/140009.webp
Normal file
|
After Width: | Height: | Size: 12 KiB |
BIN
public/icon/material/140010.webp
Normal file
|
After Width: | Height: | Size: 12 KiB |
BIN
public/icon/material/140011.webp
Normal file
|
After Width: | Height: | Size: 13 KiB |
BIN
public/icon/material/140012.webp
Normal file
|
After Width: | Height: | Size: 15 KiB |
BIN
public/icon/material/140013.webp
Normal file
|
After Width: | Height: | Size: 11 KiB |
BIN
public/icon/material/220097.webp
Normal file
|
After Width: | Height: | Size: 9.7 KiB |
BIN
public/icon/material/220098.webp
Normal file
|
After Width: | Height: | Size: 8.0 KiB |
BIN
public/icon/talents/Skill_E_Arlecchino_01.webp
Normal file
|
After Width: | Height: | Size: 2.1 KiB |
BIN
public/icon/talents/Skill_S_Arlecchino_01.webp
Normal file
|
After Width: | Height: | Size: 3.8 KiB |
BIN
public/icon/talents/UI_Talent_S_Arlecchino_05.webp
Normal file
|
After Width: | Height: | Size: 2.8 KiB |
BIN
public/icon/talents/UI_Talent_S_Arlecchino_06.webp
Normal file
|
After Width: | Height: | Size: 2.2 KiB |
BIN
public/icon/talents/UI_Talent_S_Arlecchino_07.webp
Normal file
|
After Width: | Height: | Size: 2.3 KiB |
|
Before Width: | Height: | Size: 3.6 KiB After Width: | Height: | Size: 5.5 KiB |
BIN
public/source/nameCard/bg/成就·掣鲸.webp
Normal file
|
After Width: | Height: | Size: 29 KiB |
BIN
public/source/nameCard/bg/枫丹·调律.webp
Normal file
|
After Width: | Height: | Size: 36 KiB |
BIN
public/source/nameCard/bg/枫丹·露泉.webp
Normal file
|
After Width: | Height: | Size: 27 KiB |
BIN
public/source/nameCard/bg/纪行·邦摇.webp
Normal file
|
After Width: | Height: | Size: 26 KiB |
BIN
public/source/nameCard/bg/阿蕾奇诺·法度.webp
Normal file
|
After Width: | Height: | Size: 23 KiB |
BIN
public/source/nameCard/icon/成就·掣鲸.webp
Normal file
|
After Width: | Height: | Size: 5.7 KiB |
BIN
public/source/nameCard/icon/枫丹·调律.webp
Normal file
|
After Width: | Height: | Size: 5.8 KiB |
BIN
public/source/nameCard/icon/枫丹·露泉.webp
Normal file
|
After Width: | Height: | Size: 4.6 KiB |
BIN
public/source/nameCard/icon/纪行·邦摇.webp
Normal file
|
After Width: | Height: | Size: 6.9 KiB |
BIN
public/source/nameCard/icon/阿蕾奇诺·法度.webp
Normal file
|
After Width: | Height: | Size: 4.5 KiB |
BIN
public/source/nameCard/profile/成就·掣鲸.webp
Normal file
|
After Width: | Height: | Size: 53 KiB |
BIN
public/source/nameCard/profile/枫丹·调律.webp
Normal file
|
After Width: | Height: | Size: 45 KiB |
BIN
public/source/nameCard/profile/枫丹·露泉.webp
Normal file
|
After Width: | Height: | Size: 30 KiB |
BIN
public/source/nameCard/profile/纪行·邦摇.webp
Normal file
|
After Width: | Height: | Size: 39 KiB |
BIN
public/source/nameCard/profile/阿蕾奇诺·法度.webp
Normal file
|
After Width: | Height: | Size: 25 KiB |
757
src-tauri/Cargo.lock
generated
@@ -1,6 +1,6 @@
|
||||
[package]
|
||||
name = "TeyvatGuide"
|
||||
version = "0.4.4"
|
||||
version = "0.4.6"
|
||||
description = "Game Tool for Genshin Impact player"
|
||||
authors = ["BTMuli <bt-muli@outlook.com>"]
|
||||
license = "MIT"
|
||||
@@ -13,14 +13,14 @@ edition = "2021"
|
||||
tauri-build = { version = "1.4", features = [] }
|
||||
|
||||
[dependencies]
|
||||
chrono = "0.4.34"
|
||||
log = "0.4.20"
|
||||
chrono = "0.4.38"
|
||||
log = "0.4.21"
|
||||
serde = { version = "1.0.197", features = ["derive"] }
|
||||
serde_json = "1.0.114"
|
||||
tauri = { version = "1.6.0", features = [ "shell-execute", "shell-open", "window-set-always-on-top", "window-set-fullscreen", "dialog-message", "process-exit", "fs-read-dir", "window-hide", "os-all", "clipboard-all", "dialog-open", "dialog-save", "fs-create-dir", "fs-remove-dir", "fs-write-file", "fs-remove-file", "fs-read-file", "path-all", "fs-exists", "window-close", "window-set-title", "window-unminimize", "window-show", "window-set-focus", "http-request"] }
|
||||
serde_json = "1.0.116"
|
||||
tauri = { version = "1.6.1", features = [ "shell-execute", "shell-open", "window-set-always-on-top", "window-set-fullscreen", "dialog-message", "process-exit", "fs-read-dir", "window-hide", "os-all", "clipboard-all", "dialog-open", "dialog-save", "fs-create-dir", "fs-remove-dir", "fs-write-file", "fs-remove-file", "fs-read-file", "path-all", "fs-exists", "window-close", "window-set-title", "window-unminimize", "window-show", "window-set-focus", "http-request"] }
|
||||
tauri-utils = "1.5.3"
|
||||
url = "2.5.0"
|
||||
walkdir = "2.4.0"
|
||||
walkdir = "2.5.0"
|
||||
|
||||
# sqlite 插件
|
||||
[dependencies.tauri-plugin-sql]
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
//! @file src/client/menu.rs
|
||||
//! @desc 客户端菜单模块,负责操作米游社客户端菜单
|
||||
//! @since Beta v0.4.3
|
||||
//! @since Beta v0.4.5
|
||||
|
||||
use tauri::{AppHandle, CustomMenuItem, LogicalSize, Manager, Menu, Size, Submenu, WindowUrl};
|
||||
use url::Url;
|
||||
@@ -27,8 +27,8 @@ fn create_utils_menu() -> Menu {
|
||||
let retry_bridge = CustomMenuItem::new("retry".to_string(), "重试桥接");
|
||||
let mock_touch = CustomMenuItem::new("mock_touch".to_string(), "模拟触摸");
|
||||
let remove_overlay = CustomMenuItem::new("remove_overlay".to_string(), "移除遮罩");
|
||||
// 旋转窗口/切换横屏或者竖屏
|
||||
let rotate_window = CustomMenuItem::new("rotate_window".to_string(), "旋转窗口");
|
||||
let switch_ua = CustomMenuItem::new("switch_ua".to_string(), "切换 UA");
|
||||
return Menu::new()
|
||||
.add_item(retry_bridge)
|
||||
.add_item(mock_touch)
|
||||
@@ -65,6 +65,7 @@ pub fn handle_menu_event(app_handle: AppHandle, event: tauri::MenuEvent) {
|
||||
"mock_touch" => handle_menu_mock_touch(app_handle),
|
||||
"remove_overlay" => handle_menu_remove_overlay(app_handle),
|
||||
"rotate_window" => handle_menu_rotate_window(app_handle),
|
||||
"switch_ua" => handle_menu_switch_ua(app_handle),
|
||||
_ => {}
|
||||
}
|
||||
}
|
||||
@@ -210,3 +211,23 @@ fn handle_menu_rotate_window(app_handle: AppHandle) {
|
||||
window.center().unwrap();
|
||||
window.set_focus().unwrap();
|
||||
}
|
||||
|
||||
// 处理切换 UA 菜单
|
||||
fn handle_menu_switch_ua(app_handle: AppHandle) {
|
||||
let window = app_handle.get_window("mhy_client");
|
||||
let execute_js = r#"
|
||||
javascript:(async function(){
|
||||
const isPc = navigator.userAgent.includes("Windows NT");
|
||||
const arg = {
|
||||
method: 'teyvat_switch_ua',
|
||||
payload: {
|
||||
url: window.location.href,
|
||||
isPc,
|
||||
}
|
||||
}
|
||||
await window.__TAURI__.event.emit('post_mhy_client',JSON.stringify(arg));
|
||||
})()"#;
|
||||
if window.is_some() {
|
||||
window.unwrap().eval(&execute_js).ok().unwrap();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
//! @file src/client/mod.rs
|
||||
//! @desc 客户端模块,负责操作米游社客户端
|
||||
//! @since Beta v0.4.3
|
||||
//! @since Beta v0.4.5
|
||||
|
||||
mod menu;
|
||||
use tauri::async_runtime::block_on;
|
||||
@@ -15,6 +15,11 @@ pub async fn create_mhy_client(handle: AppHandle, func: String, url: String) {
|
||||
} else {
|
||||
mhy_window_config.url = menu::get_mhy_client_url(func.clone());
|
||||
}
|
||||
// if pc {
|
||||
// let user_agent = mhy_window_config.user_agent.as_ref().unwrap();
|
||||
// let version = user_agent.split("/").last().unwrap();
|
||||
// mhy_window_config.user_agent = Some(format!("Mozilla/5.0 (Windows NT 10.0; Win64; x64) miHoYoBBS/{}", version));
|
||||
// }
|
||||
if func == "birthday"
|
||||
|| func == "web_act"
|
||||
|| url.starts_with("https://webstatic.mihoyo.com/ys/event/e20220303-birthday/index.html")
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
},
|
||||
"package": {
|
||||
"productName": "TeyvatGuide",
|
||||
"version": "0.4.4"
|
||||
"version": "0.4.6"
|
||||
},
|
||||
"tauri": {
|
||||
"allowlist": {
|
||||
@@ -170,7 +170,7 @@
|
||||
"title": "米游社",
|
||||
"label": "mhy_client",
|
||||
"url": "",
|
||||
"userAgent": "Mozilla/5.0 (Linux; Android 12) Mobile miHoYoBBS/2.67.1",
|
||||
"userAgent": "Mozilla/5.0 (Linux; Android 12) Mobile miHoYoBBS/2.70.1",
|
||||
"visible": false,
|
||||
"width": 400,
|
||||
"height": 800,
|
||||
|
||||
31
src/App.vue
@@ -184,20 +184,11 @@ async function getDeepLink(): Promise<UnlistenFn> {
|
||||
}
|
||||
await TGLogger.Info(`[App][getDeepLink] ${e.payload}`);
|
||||
if (e.payload === "") return;
|
||||
// 导入格式: teyvatguide://import_uigf?app=appName
|
||||
// 跳转格式: localhost:4000/achievements/?app=appName
|
||||
// todo 后续更改路径&参数名称
|
||||
if (e.payload.startsWith("teyvatguide://import_uigf")) {
|
||||
const param = (<string>e.payload).split("teyvatguide://import_uigf/?")[1];
|
||||
let appName = "";
|
||||
if (param) {
|
||||
appName = param.split("app=")[1];
|
||||
}
|
||||
if (appName === "") {
|
||||
await router.push("/achievements");
|
||||
} else {
|
||||
await router.push("/achievements/?app=" + appName);
|
||||
}
|
||||
if (
|
||||
e.payload.startsWith("teyvatguide://import_uigf") ||
|
||||
e.payload.startsWith("teyvatguide://import_uiaf")
|
||||
) {
|
||||
await toUIAF(e.payload);
|
||||
} else {
|
||||
showSnackbar({
|
||||
text: "无效的 deep link!",
|
||||
@@ -208,6 +199,16 @@ async function getDeepLink(): Promise<UnlistenFn> {
|
||||
});
|
||||
}
|
||||
|
||||
async function toUIAF(link: string) {
|
||||
const url = new URL(link);
|
||||
const app = url.searchParams.get("app");
|
||||
if (app === null || app === "") {
|
||||
await router.push("/achievements");
|
||||
} else {
|
||||
await router.push("/achievements/?app=" + app);
|
||||
}
|
||||
}
|
||||
|
||||
// 检测更新
|
||||
async function checkUpdate(): Promise<void> {
|
||||
const isProdEnv = import.meta.env.MODE === "production";
|
||||
@@ -224,7 +225,6 @@ async function checkUpdate(): Promise<void> {
|
||||
color: "error",
|
||||
timeout: 3000,
|
||||
});
|
||||
window.open("https://app.btmuli.ink/docs/Changelogs.html");
|
||||
return;
|
||||
}
|
||||
appStore.buildTime = getBuildTime();
|
||||
@@ -234,6 +234,7 @@ async function checkUpdate(): Promise<void> {
|
||||
color: "success",
|
||||
timeout: 3000,
|
||||
});
|
||||
window.open("https://app.btmuli.ink/docs/Changelogs.html");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* @file assets/css/post-parser.css
|
||||
* @description 游戏公告解析 css
|
||||
* @since Beta v0.4.4
|
||||
* @since Beta v0.4.5
|
||||
*/
|
||||
|
||||
.anno-body {
|
||||
@@ -54,7 +54,7 @@
|
||||
|
||||
.anno-content :deep(details) {
|
||||
padding: 10px;
|
||||
border: #35acce 2px solid;
|
||||
border: 1px var(--common-shadow-2) solid;
|
||||
border-radius: 10px;
|
||||
margin: 10px;
|
||||
}
|
||||
@@ -64,7 +64,7 @@
|
||||
}
|
||||
|
||||
.anno-content :deep(details) ::marker {
|
||||
color: #35acce;
|
||||
color: var(--tgc-pink-1);
|
||||
content: "✧";
|
||||
}
|
||||
|
||||
|
||||
@@ -1,15 +0,0 @@
|
||||
<svg width="256.000000" height="256.000000" viewBox="0 0 256 256" fill="none" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<desc>
|
||||
Created with Pixso.
|
||||
</desc>
|
||||
<g clip-path="url(#clip13_52)">
|
||||
<path id="矩形 3" d="M66.9232 37.8271L70.7784 54.533C71.0364 55.6508 71.9092 56.5237 73.027 56.7816L89.7329 60.6368C92.8335 61.3523 92.8335 65.7677 89.7329 66.4832L73.027 70.3384C71.9092 70.5963 71.0364 71.4692 70.7784 72.587L66.9232 89.2929C66.2076 92.3935 61.7924 92.3935 61.0768 89.2929L57.2216 72.587C56.9637 71.4692 56.0908 70.5963 54.973 70.3384L38.2671 66.4832C35.1665 65.7677 35.1665 61.3524 38.2671 60.6368L54.973 56.7816C56.0908 56.5237 56.9637 55.6508 57.2216 54.533L61.0768 37.8271C61.7924 34.7265 66.2076 34.7265 66.9232 37.8271Z" fill-rule="evenodd" fill="#ECE5D8"/>
|
||||
<path id="矩形 3" d="M176.392 148.672L180.417 166.115C180.847 167.978 182.302 169.433 184.165 169.863L201.608 173.888C206.776 175.081 206.776 182.439 201.608 183.632L184.165 187.657C182.302 188.087 180.847 189.542 180.417 191.405L176.392 208.848C175.199 214.016 167.841 214.016 166.648 208.848L162.623 191.405C162.193 189.542 160.738 188.087 158.875 187.657L141.432 183.632C136.264 182.439 136.264 175.081 141.432 173.888L158.875 169.863C160.738 169.433 162.193 167.978 162.623 166.115L166.648 148.672C167.841 143.504 175.199 143.504 176.392 148.672Z" fill-rule="evenodd" fill="#A9A7A3"/>
|
||||
<path id="矩形 3" d="M132.872 18.1118L151.297 97.955C151.727 99.8181 153.182 101.273 155.045 101.703L234.888 120.128C240.056 121.321 240.056 128.679 234.888 129.872L155.045 148.297C153.182 148.727 151.727 150.182 151.297 152.045L132.872 231.888C131.679 237.056 124.321 237.056 123.128 231.888L104.703 152.045C104.273 150.182 102.818 148.727 100.955 148.297L21.1118 129.872C15.9442 128.679 15.9442 121.321 21.1118 120.128L100.955 101.703C102.818 101.273 104.273 99.8181 104.703 97.955L123.128 18.1118C124.321 12.9442 131.679 12.9442 132.872 18.1118Z" fill-rule="evenodd" fill="#F1EFE9"/>
|
||||
</g>
|
||||
<defs>
|
||||
<clipPath id="clip13_52">
|
||||
<rect id="wish" width="256.000000" height="256.000000" fill="white"/>
|
||||
</clipPath>
|
||||
</defs>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 2.1 KiB |
@@ -1,7 +1,7 @@
|
||||
/**
|
||||
* @file assets/themes/dark.css
|
||||
* @description 主题样式文件-深色主题
|
||||
* @since Beta v0.4.1
|
||||
* @since Beta v0.4.5
|
||||
*/
|
||||
|
||||
/* dark mode */
|
||||
@@ -18,6 +18,8 @@ html.dark {
|
||||
--box-bg-3: #282c34;
|
||||
--box-bg-4: #3d424b;
|
||||
|
||||
--box-bg-blue: var(--tgc-blue-1);
|
||||
|
||||
/* box bg transparent */
|
||||
--box-bg-t-1: var(--tgc-white-3);
|
||||
|
||||
|
||||
@@ -1,23 +1,25 @@
|
||||
/**
|
||||
* @file assets/themes/default.css
|
||||
* @description 主题样式文件-默认(浅色)主题
|
||||
* @since Beta v0.4.1
|
||||
* @since Beta v0.4.5
|
||||
*/
|
||||
|
||||
/* default(light) theme */
|
||||
html.default {
|
||||
/* app container */
|
||||
--app-page-bg: #f9f6f2;
|
||||
--app-page-bg: #ffffff;
|
||||
--app-page-content: #2f2f2f;
|
||||
--app-side-bg: #f2f2f2;
|
||||
--app-side-content: #222222;
|
||||
|
||||
/* box container */
|
||||
--box-bg-1: #ebe7df;
|
||||
--box-bg-1: #f9f6f2;
|
||||
--box-bg-2: #f2f9f6;
|
||||
--box-bg-3: #dee4e9;
|
||||
--box-bg-4: #f5f5f5;
|
||||
|
||||
--box-bg-blue: #249ffd;
|
||||
|
||||
/* box bg transparent */
|
||||
--box-bg-t-1: var(--tgc-dark-5);
|
||||
|
||||
|
||||
@@ -27,7 +27,12 @@
|
||||
<img src="../../assets/icons/board.svg" alt="annoIcon" class="side-icon" />
|
||||
</template>
|
||||
</v-list-item>
|
||||
<v-list-item :title.attr="'咨讯'" value="news" :link="true" href="/news/2">
|
||||
<v-list-item
|
||||
:title.attr="'咨讯'"
|
||||
value="news"
|
||||
:link="true"
|
||||
:href="`/news/2/${appStore.recentNewsType}`"
|
||||
>
|
||||
<template #title>咨讯</template>
|
||||
<template #prepend>
|
||||
<img src="/platforms/mhy/mys.webp" alt="mihoyo" class="side-icon" />
|
||||
@@ -200,9 +205,9 @@
|
||||
<img src="/icon/material/210.webp" class="side-icon-menu" alt="daily_note" />
|
||||
</template>
|
||||
</v-list-item>
|
||||
<v-list-item class="side-item-menu" title="酒馆" @click="openClient('tavern')">
|
||||
<v-list-item class="side-item-menu" title="收藏" :link="true" href="/collection">
|
||||
<template #prepend>
|
||||
<img src="/platforms/mhy/mys.webp" alt="酒馆" class="side-icon-menu" />
|
||||
<img src="/source/UI/posts.png" alt="collect" class="side-icon-menu" />
|
||||
</template>
|
||||
</v-list-item>
|
||||
<v-list-item
|
||||
|
||||
@@ -9,13 +9,12 @@
|
||||
</template>
|
||||
<script lang="ts" setup>
|
||||
import { event } from "@tauri-apps/api";
|
||||
import { computed, onMounted } from "vue";
|
||||
import { UnlistenFn } from "@tauri-apps/api/helpers/event";
|
||||
import { computed, onMounted, onUnmounted } from "vue";
|
||||
|
||||
import { useAppStore } from "../../store/modules/app";
|
||||
|
||||
// store
|
||||
const appStore = useAppStore();
|
||||
// theme
|
||||
const themeGet = computed({
|
||||
get() {
|
||||
return appStore.theme;
|
||||
@@ -24,9 +23,10 @@ const themeGet = computed({
|
||||
appStore.theme = value;
|
||||
},
|
||||
});
|
||||
let themeListener: UnlistenFn;
|
||||
|
||||
onMounted(async () => {
|
||||
await listenOnTheme();
|
||||
themeListener = await listenOnTheme();
|
||||
});
|
||||
|
||||
async function switchTheme(): Promise<void> {
|
||||
@@ -34,12 +34,18 @@ async function switchTheme(): Promise<void> {
|
||||
await event.emit("readTheme", themeGet.value);
|
||||
}
|
||||
|
||||
async function listenOnTheme(): Promise<void> {
|
||||
await event.listen("readTheme", (e) => {
|
||||
const theme = <string>e.payload;
|
||||
async function listenOnTheme(): Promise<UnlistenFn> {
|
||||
return await event.listen<string>("readTheme", (e) => {
|
||||
const theme = e.payload;
|
||||
themeGet.value = theme === "default" ? "default" : "dark";
|
||||
});
|
||||
}
|
||||
|
||||
onUnmounted(() => {
|
||||
if (themeListener) {
|
||||
themeListener();
|
||||
}
|
||||
});
|
||||
</script>
|
||||
<style lang="css" scoped>
|
||||
.switch-box {
|
||||
|
||||
@@ -15,6 +15,9 @@
|
||||
<div class="tab-link" @click="toStore()" title="点击查看商店页面">
|
||||
<img src="/platforms/other/microsoft-store.webp" alt="store" />
|
||||
</div>
|
||||
<div class="tab-link" @click="toSite()" title="点击查看更新说明">
|
||||
<v-icon color="white">mdi-update</v-icon>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
@@ -47,6 +50,10 @@ function toGithub() {
|
||||
function toStore() {
|
||||
window.open("https://www.microsoft.com/store/productId/9NLBNNNBNSJN");
|
||||
}
|
||||
|
||||
function toSite() {
|
||||
window.open("https://app.btmuli.ink/docs/Changelogs.html");
|
||||
}
|
||||
</script>
|
||||
<style lang="css" scoped>
|
||||
.tab-box {
|
||||
|
||||
@@ -43,13 +43,14 @@
|
||||
<script lang="ts" setup>
|
||||
import { computed, onMounted, onUpdated, ref } from "vue";
|
||||
|
||||
import DucDetailOlb from "./duc-detail-olb.vue";
|
||||
import DucDetailOlt from "./duc-detail-olt.vue";
|
||||
import DucDetailOrt from "./duc-detail-ort.vue";
|
||||
import TGSqlite from "../../plugins/Sqlite";
|
||||
import { generateShareImg } from "../../utils/TGShare";
|
||||
import TOverlay from "../main/t-overlay.vue";
|
||||
|
||||
import DucDetailOlb from "./duc-detail-olb.vue";
|
||||
import DucDetailOlt from "./duc-detail-olt.vue";
|
||||
import DucDetailOrt from "./duc-detail-ort.vue";
|
||||
|
||||
interface DucDetailOverlayProps {
|
||||
modelValue: boolean;
|
||||
dataVal: TGApp.Sqlite.Character.UserRole;
|
||||
|
||||