Compare commits
148 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
89a79dc968 | ||
|
|
e1653bdfb0 | ||
|
|
8af5136a9c | ||
|
|
a8694104a9 | ||
|
|
570cbb5fed | ||
|
|
dd339285cb | ||
|
|
31311510ef | ||
|
|
f367e797a9 | ||
|
|
082fe9dfab | ||
|
|
3769859611 | ||
|
|
928c71ead8 | ||
|
|
39f2a7dc31 | ||
|
|
1d637705b7 | ||
|
|
9e2eb80a21 | ||
|
|
927d4545a1 | ||
|
|
45217d423a | ||
|
|
d430cd4672 | ||
|
|
d15d78b73f | ||
|
|
00fdcc79d6 | ||
|
|
20438106a4 | ||
|
|
f92684c7b3 | ||
|
|
3228b6a305 | ||
|
|
a47afbf2e0 | ||
|
|
f4a0165e81 | ||
|
|
31874e07c4 | ||
|
|
c696d3b51d | ||
|
|
8a2a3f5279 | ||
|
|
a2f68b92c7 | ||
|
|
96dfec969c | ||
|
|
1b5ddf9b3f | ||
|
|
4dc273662d | ||
|
|
83d52c6f40 | ||
|
|
0aabd2fa80 | ||
|
|
01dc6a6ea7 | ||
|
|
765c860473 | ||
|
|
b276b04f23 | ||
|
|
e308e4789c | ||
|
|
522add2441 | ||
|
|
08f74ce6a0 | ||
|
|
3be703d329 | ||
|
|
a3e42b63e6 | ||
|
|
4ef3313eb1 | ||
|
|
a22aac457a | ||
|
|
8a2524d6b1 | ||
|
|
b504f043b4 | ||
|
|
f842975f21 | ||
|
|
577f86248e | ||
|
|
c3246e95ce | ||
|
|
e3fb88fd44 | ||
|
|
0f6fe11c75 | ||
|
|
9d212a5b87 | ||
|
|
c0d9830670 | ||
|
|
c577a6f1ea | ||
|
|
0e6210ee8e | ||
|
|
adfe55054e | ||
|
|
fecad43dec | ||
|
|
4c93bb0d42 | ||
|
|
667aa6fb94 | ||
|
|
a1a5271603 | ||
|
|
4a646c2c4e | ||
|
|
48b976ac84 | ||
|
|
d7250ce13c | ||
|
|
1cad9891dc | ||
|
|
6302f171e9 | ||
|
|
bb67da034b | ||
|
|
804b735e95 | ||
|
|
e6904e14b5 | ||
|
|
b4954bd74c | ||
|
|
8f9006b9f4 | ||
|
|
fba7a6c088 | ||
|
|
0fdbea55eb | ||
|
|
b93ae791f2 | ||
|
|
b6b0b90ae8 | ||
|
|
7e7fb318ea | ||
|
|
3a102f31be | ||
|
|
9dba531bb2 | ||
|
|
6b5959ff76 | ||
|
|
d8267cbf7b | ||
|
|
ac4d2a319f | ||
|
|
214dec29d8 | ||
|
|
fcb16c9299 | ||
|
|
37ea45f0c1 | ||
|
|
dafa153b62 | ||
|
|
9b152eb59f | ||
|
|
d5aaecbf72 | ||
|
|
ce5a88954a | ||
|
|
fee1872b46 | ||
|
|
dd3ce101a6 | ||
|
|
d32d7b69f1 | ||
|
|
11a6157af0 | ||
|
|
1a40f88027 | ||
|
|
81fc5f9dca | ||
|
|
8c9885441b | ||
|
|
6bbef1332b | ||
|
|
cd5e151926 | ||
|
|
41921a2a6a | ||
|
|
3cead7eda6 | ||
|
|
26f670fae3 | ||
|
|
bc9d848633 | ||
|
|
8f2ea6deea | ||
|
|
92603e8599 | ||
|
|
530f45e75c | ||
|
|
d0936a0a60 | ||
|
|
7d0e0f187c | ||
|
|
cad8de6cd7 | ||
|
|
d29ade356a | ||
|
|
b14ad0e687 | ||
|
|
aeca190f2c | ||
|
|
3ac68c1fd9 | ||
|
|
8a09d8e442 | ||
|
|
0f546e8a57 | ||
|
|
26070919c9 | ||
|
|
bfd73c3d73 | ||
|
|
415927cd0f | ||
|
|
aa6c75e59f | ||
|
|
c31c86bd56 | ||
|
|
1ee3c35216 | ||
|
|
6676357296 | ||
|
|
3ba72969d9 | ||
|
|
c9ea10f0ef | ||
|
|
17f1b39414 | ||
|
|
70216734a3 | ||
|
|
c25bde1b7a | ||
|
|
beb457a884 | ||
|
|
1b1abb9b88 | ||
|
|
112bd3b938 | ||
|
|
55adf31613 | ||
|
|
cdddbae520 | ||
|
|
c4bd07069c | ||
|
|
71b45584e8 | ||
|
|
e343d37a01 | ||
|
|
7f5ffab2a7 | ||
|
|
d2e6d112d5 | ||
|
|
5b390d3ad1 | ||
|
|
798c4bd7d5 | ||
|
|
7e133176e5 | ||
|
|
87a345ffa7 | ||
|
|
2bafb6d491 | ||
|
|
0f278ad25e | ||
|
|
1da157abbd | ||
|
|
2fa9f88da2 | ||
|
|
9e2f91b4d4 | ||
|
|
2b15e1a351 | ||
|
|
25f95d9f90 | ||
|
|
03e33872c2 | ||
|
|
5b5f96c2d3 | ||
|
|
0005e4eb74 | ||
|
|
89d1b2c6a7 |
2
.vscode/extensions.json
vendored
@@ -5,6 +5,6 @@
|
||||
"stylelint.vscode-stylelint",
|
||||
"tauri-apps.tauri-vscode",
|
||||
"Vue.vscode-typescript-vue-plugin",
|
||||
"Vue.volar"
|
||||
"Vue.vue-official"
|
||||
]
|
||||
}
|
||||
|
||||
197
CHANGELOG.md
@@ -2,167 +2,56 @@
|
||||
Author: 目棃
|
||||
Description: CHANGELOG
|
||||
Date: 2024-10-09
|
||||
Update: 2025-02-11
|
||||
Update: 2025-03-27
|
||||
---
|
||||
|
||||
> 本文档 [`Frontmatter`](https://github.com/BTMuli/MuCli#Frontmatter) 由 [MuCli](https://github.com/BTMuli/Mucli) 自动生成于 `2024-10-09 15:51:43`
|
||||
>
|
||||
> 更新于 `2025-02-11 10:57:49`
|
||||
> 更新于 `2025-03-27 14:45:54`
|
||||
|
||||
## [0.6.9](https://github.com/BTMuli/TeyvatGuide/releases/v0.6.9) (2025-02-11)
|
||||
## [0.7.2](https://github.com/BTMuli/TeyvatGuide/releases/v0.7.2) (2025-03-27)
|
||||
|
||||
- 🍱 更新5.4资源 [`#141`](https://github.com/BTMuli/TeyvatGuide/issues/141)
|
||||
- 🐛 修复米游社子窗口路径解析异常
|
||||
- 🐛 修复特定条件下真境剧诗角色元素图标渲染异常
|
||||
- 🐛 修复名片图鉴浮窗渲染异常
|
||||
- 🚸 调整兑换码入口显示判断逻辑
|
||||
- 🚸 成就导入不允许点击外部取消,调整刷新逻辑
|
||||
- 🚸 下载封面图时显示封面链接
|
||||
- 💄 调整部分UI
|
||||
- 🍱 更新5.5资源 [`#147`](https://github.com/BTMuli/TeyvatGuide/issues/147)
|
||||
- ✨ 新增游戏签到脚本
|
||||
- ✨ 扫码登录新增游戏登录方式
|
||||
- ✨ 获取登录用户关注帖子
|
||||
- 🐛 修复获取深渊数据概览异常
|
||||
- 🐛 修复扫码登录异常
|
||||
- ♻️ 首页卡池&活动组件重构
|
||||
- ♻️ 重构游戏账号数据库
|
||||
- ♻️ 调用浏览器而非webview2打开外部链接
|
||||
- 💄 帖子卡片UI调整,增加时间&推荐理由数据
|
||||
- 💄 调整整体滚动条样式
|
||||
- 💄 调整抽奖UI
|
||||
- 💄 米游币脚本显示连续执行天数
|
||||
- 💄 帖子投票组件进度条显示相对进度(以最高数为基准)
|
||||
- 💄 调整多页面UI
|
||||
- 🎨 重构合集浮窗滚动高度计算
|
||||
- 🎨 调整帖子卡片点击处理
|
||||
- 🚸 处理下线villaCard渲染
|
||||
- 🚸 即时响应页面适配
|
||||
- 🚸 完善部分请求防抖处理
|
||||
- 🚸 链接识别`ys.mihoyo.com`
|
||||
|
||||
## [0.6.8](https://github.com/BTMuli/TeyvatGuide/releases/v0.6.8) (2025-01-22)
|
||||
## [0.7.1](https://github.com/BTMuli/TeyvatGuide/releases/v0.7.1) (2025-03-06)
|
||||
|
||||
- ✨ 扫码登录
|
||||
- ✨ 调整祈愿记录图表样式,新增祈愿日历&祈愿堆叠柱状图
|
||||
- ✨ 支持配置帖子详情图像质量,默认80%
|
||||
- ✨ 支持帖子详情图像查看原图,当质量配置为100%时,该按钮不显示
|
||||
- ✨ 深渊上传支持胡桃账户设置
|
||||
- 🚸 降低祈愿全量刷新耗时
|
||||
- 🚸 加快帖子加载速度,降低内存占用
|
||||
- 💄 调整角色卡片样式
|
||||
- 💄 调整角色名片样式,增加描述清晰度
|
||||
- 💄 调整深渊Wiki队伍搭配窗口高度
|
||||
- 💄 mac下不显示分享设置
|
||||
- 💄 调整战绩页新洞天渲染样式
|
||||
- 🔥 深渊Wiki移除第10层数据
|
||||
- 🐛 修复深渊数据恢复异常
|
||||
- 🐛 修复 loading 组件 empty 状态设置异常
|
||||
- ♻️ 优化帖子加载逻辑,当刷新内容不足20条时,下次刷新数量为20-当前数量,如刷新数量为19条,则下次刷新数量为1条
|
||||
- ♻️ 动态获取分区列表&版块列表
|
||||
- ♻️ 重构部分路由处理,当话题/帖子切换分区/版块时,页面刷新不重置当前分区/版块
|
||||
- 🐛 修复B站视频时长计算异常
|
||||
- 🐛 处理脚本签到1034 [`#145`](https://github.com/BTMuli/TeyvatGuide/issues/145)
|
||||
- 💄 调整搜索浮窗样式&帖子/公告卡片样式
|
||||
- 🥅 捕获分享图生成异常
|
||||
- 🚸 部分页面添加防抖处理
|
||||
- 🍱 调整缓存图片范围
|
||||
|
||||
## [0.6.7](https://github.com/BTMuli/TeyvatGuide/releases/v0.6.7) (2024-12-31)
|
||||
## [0.7.0](https://github.com/BTMuli/TeyvatGuide/releases/v0.7.0) (2025-02-28)
|
||||
|
||||
- 🍱 更新5.3版本游戏资源 [`#139`](https://github.com/BTMuli/TeyvatGuide/issues/139)
|
||||
- ✨ 支持嵌入B站视频的分享图渲染
|
||||
- 🐛 修复版块跳转异常
|
||||
- 🐛 修复清理日志异常
|
||||
- 🐛 修复特定帖子`link_card_ids`数据解析异常
|
||||
- 🐛 修复帖子文本居中异常
|
||||
- 🐛 修复侧边栏跳转角色/武器图鉴异常
|
||||
- ✏️ 调整分享图大小计算方式,采用1024进制而非原有的1000进制
|
||||
- 💄 调整用户等级UI,浅色深色下统一为白色文字
|
||||
- 💄 调整回复弹窗位置,上移一段距离以避免底部提示遮挡
|
||||
- 💄 首页素材日历组件只显示日期,移除具体时间
|
||||
- 💄 调整链接卡片提示文字
|
||||
- 💄 调整剧诗角色列表显示UI
|
||||
- 🚸 版块/咨讯页数据获取/刷新显示成功提示
|
||||
- 🚸 首页近期活动卡片Icon补充缺失的点击逻辑
|
||||
- 🚸 调整合集组件改版后的滚动逻辑,更加流畅
|
||||
- 👽️ 由于API变更,调整版块数据获取逻辑
|
||||
- 👽️ 由于返回数据格式变更,调整视频时长的计算逻辑
|
||||
- 👽️ 由于返回数据格式变更,处理帖子内的转义字符
|
||||
- ♻️ loading组件重构,部分页面显示更精准的进度
|
||||
- ♻️ 应用元数据格式重构,剔除冗余数据
|
||||
|
||||
## [0.6.6](https://github.com/BTMuli/TeyvatGuide/releases/v0.6.6) (2024-12-13)
|
||||
|
||||
- 🐛 修复主题切换响应异常
|
||||
- 🐛 修复增量刷新逻辑异常
|
||||
- ⚡️ 显著降低运行内存占用
|
||||
|
||||
## [0.6.5](https://github.com/BTMuli/TeyvatGuide/releases/v0.6.5) (2024-12-11)
|
||||
|
||||
- 🍱 添加下半卡池数据&部分资源
|
||||
- ✨ 帖子内容中涉及的话题链接支持应用内跳转
|
||||
- ♻️ 首页组件加载逻辑重构
|
||||
- ✨ UIGF4导入/导出浮窗,支持自选UID
|
||||
- 💄 调整剧诗部分数据缺失时的显示
|
||||
- 🐛 调整部分UI,修复切换账户后角色详情刷新异常
|
||||
|
||||
## [0.6.4](https://github.com/BTMuli/TeyvatGuide/releases/v0.6.4) (2024-12-03)
|
||||
|
||||
- 🐛 修复子回复渲染异常
|
||||
- ✏️ 祈愿记录将验证非空ID
|
||||
- 🐛 修复战绩分享图渲染异常
|
||||
- 🐛 修复`dialog`组件`input`默认值无效
|
||||
- 🎨 调整帖子查找overlay逻辑
|
||||
- ✨ 分享图生成阈值自定义
|
||||
- 👽️ 全量刷新时清理旧数据,修复由于米哈游数据异常导致的重复数据
|
||||
|
||||
## [0.6.3](https://github.com/BTMuli/TeyvatGuide/releases/v0.6.3) (2024-11-19)
|
||||
|
||||
- 🐛 修复用户战绩角色数据`undefined`
|
||||
- 🐛 修复咨讯页加载更多异常
|
||||
- 🐛 修复验证码登录提示`-100`,数据刷新后若为已登录UID则不会再提示切换
|
||||
- 🐛 修复部分公告渲染异常
|
||||
- 🐛 修复成就页面在存在搜索内容时点击左侧成就系列无响应
|
||||
- ✨ 帖子新增 UID 卡片解析&渲染
|
||||
- ✨ 帖子新增自定义表情解析&渲染
|
||||
- ✨ 真境剧诗适配,新增真境剧诗页面,支持获取&分享&上传(胡桃数据库),可通过深渊页面进入
|
||||
- ✨ 新增话题页面,可通过帖子卡片标签点击或帖子详情顶部标签点击进入
|
||||
- ✨ 更完善的`loading`显示,调整了组件UI
|
||||
- 🍱 更新5.2版本资源 [`#133`](https://github.com/BTMuli/TeyvatGuide/issues/133)
|
||||
- 💄 调整祈愿记录UP四星颜色
|
||||
- 💄 修复帖子页兑换码弹窗高度异常
|
||||
- 💄 调整帖子卡片UI,增加显示帖子话题(如存在),话题&版块支持点击跳转
|
||||
- 💄 调整帖子详情页UI,顶部话题&版块支持点击跳转
|
||||
- 💄 调整帖子显示数量,支持加载更多,默认排序改为`最新回复`,移除`默认排序`,增加`热门`排序
|
||||
- 💄 咨讯、帖子等页面刷新时自动滚动到顶部
|
||||
- 🔥 深渊数据库显示移除第9层统计数据
|
||||
- 👽️ 米游社子窗口增加`genshinnet`域名支持
|
||||
- 🎨 优化帖子详情数据加载的错误处理
|
||||
- ♻️ `snackbar`、`confirm`、`loading`组件重构
|
||||
- ♻️ 请求模块重构
|
||||
|
||||
## [0.6.2](https://github.com/BTMuli/TeyvatGuide/releases/v0.6.2) (2024-10-31)
|
||||
|
||||
- 🐛 修复用户登录状态异常 [`#132`](https://github.com/BTMuli/TeyvatGudie/issues/132)
|
||||
- 💄 帖子子回复取消保持,点击其他隐藏
|
||||
- 💄 调整未登录时的部分内容渲染
|
||||
- 💄 调整保存时图片的hint
|
||||
- 💄 `mac`:修复回顶组件宽度异常
|
||||
- 💄 `mac`:修复视频封面位置异常
|
||||
- 💄 调整角色卡片UI,维持名片比例
|
||||
- ♻️ 深渊数据库重构,概览显示差距
|
||||
- 🍱 更新下半卡池
|
||||
- 👽️ 修正咨讯Api
|
||||
|
||||
## [0.6.1](https://github.com/BTMuli/TeyvatGuide/releases/v0.6.1) (2024-10-22)
|
||||
|
||||
- 🐛 新用户数据库初始化异常 [`#131`](https://github.com/BTMuli/TeyavtGuide/issues/131)
|
||||
- 🐛 修复角色数据未即时刷新
|
||||
- 🐛 修复`openSystemBrowser`回调执行异常
|
||||
- ♻️ 公告卡片组件抽离,支持分享
|
||||
- 🎨 成就页面&名片图鉴页面采用虚拟列表优化性能
|
||||
- 🎨 调整卡片封面加载逻辑
|
||||
- 💄 处理特定情况下的内容溢出
|
||||
- 💄 适配深渊新字段,显示跳过楼层
|
||||
- 💄深渊分享显示应用信息,圣遗物详情推荐属性高亮
|
||||
- 💄调整帖子子窗口副标题样式
|
||||
- 💄调整留影叙佳期选项样式
|
||||
|
||||
## [0.6.0](https://github.com/BTMuli/TeyvatGuide/releases/v0.6.0) (2024-10-09)
|
||||
|
||||
- ✨ 应用支持多账号 [`#126`](https://github.com/BTMuli/TeyvatGuide/issues/126)
|
||||
- ✨ 支持手动输入CK&用户删除
|
||||
- ✨ 帖子卡片支持分享
|
||||
- ✨ 支持官服用户直接启动原神 [`#80`](https://github.com/BTMuli/TeyvatGuide/issues/80)
|
||||
- ♻️ 重构成就表格,支持多存档
|
||||
- ♻️ 重构深渊数据加载逻辑,适配多存档
|
||||
- ♻️ 重构用户登录逻辑及切换
|
||||
- ♻️ 重构祈愿、深渊、角色页面逻辑,支持游戏账号切换
|
||||
- ♻️ 战绩页面适配多账户
|
||||
- 💄 帖子/公告子窗口添加窗口置顶按钮
|
||||
- 💄 调整视频分享截图
|
||||
- 💄 回复分享图忽略导出图标
|
||||
- 💄 显示用户等级
|
||||
- 💄 处理特定情况下的回复内容溢出
|
||||
- 💄 兑换码支持分享,调整了兑换码浮窗UI
|
||||
- 💄 公告对列表进行缩进
|
||||
- 💄 材料Wiki样式优化,支持分类筛选&查询
|
||||
- 💄 材料详情浮窗支持分享
|
||||
- ✏️ JSBridge新增`openSystemBrowser`回调处理
|
||||
- ✏️ 修正公告正则
|
||||
- 👽️ 更新国际服公告Api
|
||||
- 📖 添加 macOS 平台门禁属性导致无法打开应用的修复指引 [`#130`](https://github.com/BTMuli/TeyvatGuide/issues/130)
|
||||
- ✨ 新增无痕浏览配置,默认开启
|
||||
- ✨ 登录状态且关闭无痕浏览时,可对帖子进行点赞操作
|
||||
- ✨ 新增实用脚本页面,支持一键完成米游币每日任务 [`#144`](https://github.com/BTMuli/TeyvatGuide/issues/144)
|
||||
- 🐛 修复公告解析异常
|
||||
- 🐛 修复角色卡片视图(详细)浮窗切换时背景图更新异常
|
||||
- 🐛 修复路由跳转不生效
|
||||
- ♻️ 重构首页素材日历组件生日计算,修复生日计算异常
|
||||
- 🚸 设置页登录二维码支持生成分享图,点击底部图标触发
|
||||
- 💄 调整首页素材日历组件可视页码
|
||||
- 💄 调整部分页面UI
|
||||
- 🍱 更新下半卡池数据
|
||||
|
||||
13
README.md
@@ -2,12 +2,12 @@
|
||||
Author: 目棃
|
||||
Description: 说明文档
|
||||
Date: 2023-03-05
|
||||
Update: 2025-02-11
|
||||
Update: 2025-03-27
|
||||
---
|
||||
|
||||
> 本文档 [`Frontmatter`](https://github.com/BTMuli/MuCli#Frontmatter) 由 [MuCli](https://github.com/BTMuli/Mucli) 自动生成于 `2023-03-05 14:41:55`
|
||||
>
|
||||
> 更新于 `2025-02-11 10:55:00`
|
||||
> 更新于 `2025-03-27 14:45:50`
|
||||
|
||||
 
|
||||
|
||||
@@ -66,6 +66,9 @@ Game Tool for Genshin Impact player, supports Windows and macOS.
|
||||
- [x] 真境剧诗数据获取
|
||||
- [x] 祈愿数据获取(近一年)
|
||||
- [x] 用户收藏帖子获取
|
||||
- [x] 用户关注帖子获取
|
||||
- [x] 一键完成米游币每日任务
|
||||
- [x] 一键完成游戏签到
|
||||
|
||||
- Wiki 功能:
|
||||
|
||||
@@ -97,8 +100,8 @@ Game Tool for Genshin Impact player, supports Windows and macOS.
|
||||
|
||||
- Changelog: [CHANGELOG](CHANGELOG.md)
|
||||
- 资源来源:[项目资源说明](docs/项目资源说明.md)
|
||||
- UIAF:[UIAF v1.1](docs/UIAF.md)
|
||||
- UIGF:[UIGF v3.0](docs/UIGF3.md),[UIGF v4.0](docs/UIGF.md)
|
||||
- UIAF:[UIAF v1.1](docs/standards/UIAF.md)
|
||||
- UIGF:[UIGF v3.0](docs/standards/UIGF3.md),[UIGF v4.0](docs/standards/UIGF.md)
|
||||
- [macOS 平台门禁属性导致应用无法打开应用的修复指引](docs/macos-gatekeeper/README.md)
|
||||
|
||||
## 特定项目 / Special Project
|
||||
@@ -141,6 +144,8 @@ Game Tool for Genshin Impact player, supports Windows and macOS.
|
||||
- [paimon-moe](https://github.com/MadeBaruna/paimon-moe)
|
||||
- [Adachi-BOT](https://github.com/Arondight/Adachi-BOT)
|
||||
- [amos-data](https://github.com/yuehaiteam/amos-data)
|
||||
- [MihoyoBBSTools](https://github.com/Womsxd/MihoyoBBSTools)
|
||||
- [nonebot-plugin-mystool](https://github.com/Ljzd-PRO/nonebot-plugin-mystool)
|
||||
|
||||
感谢 JetBrains 提供的开源许可证。
|
||||
|
||||
|
||||
168
docs/changelogs/CHANGELOG-v0.6.x.md
Normal file
@@ -0,0 +1,168 @@
|
||||
---
|
||||
Author: 目棃
|
||||
Description: CHANGELOG
|
||||
Date: 2024-10-09
|
||||
Update: 2025-02-11
|
||||
---
|
||||
|
||||
> 本文档 [`Frontmatter`](https://github.com/BTMuli/MuCli#Frontmatter) 由 [MuCli](https://github.com/BTMuli/Mucli) 自动生成于 `2024-10-09 15:51:43`
|
||||
>
|
||||
> 更新于 `2025-02-11 10:57:49`
|
||||
|
||||
## [0.6.9](https://github.com/BTMuli/TeyvatGuide/releases/v0.6.9) (2025-02-11)
|
||||
|
||||
- 🍱 更新5.4资源 [`#141`](https://github.com/BTMuli/TeyvatGuide/issues/141)
|
||||
- 🐛 修复米游社子窗口路径解析异常
|
||||
- 🐛 修复特定条件下真境剧诗角色元素图标渲染异常
|
||||
- 🐛 修复名片图鉴浮窗渲染异常
|
||||
- 🚸 调整兑换码入口显示判断逻辑
|
||||
- 🚸 成就导入不允许点击外部取消,调整刷新逻辑
|
||||
- 🚸 下载封面图时显示封面链接
|
||||
- 💄 调整部分UI
|
||||
|
||||
## [0.6.8](https://github.com/BTMuli/TeyvatGuide/releases/v0.6.8) (2025-01-22)
|
||||
|
||||
- ✨ 扫码登录
|
||||
- ✨ 调整祈愿记录图表样式,新增祈愿日历&祈愿堆叠柱状图
|
||||
- ✨ 支持配置帖子详情图像质量,默认80%
|
||||
- ✨ 支持帖子详情图像查看原图,当质量配置为100%时,该按钮不显示
|
||||
- ✨ 深渊上传支持胡桃账户设置
|
||||
- 🚸 降低祈愿全量刷新耗时
|
||||
- 🚸 加快帖子加载速度,降低内存占用
|
||||
- 💄 调整角色卡片样式
|
||||
- 💄 调整角色名片样式,增加描述清晰度
|
||||
- 💄 调整深渊Wiki队伍搭配窗口高度
|
||||
- 💄 mac下不显示分享设置
|
||||
- 💄 调整战绩页新洞天渲染样式
|
||||
- 🔥 深渊Wiki移除第10层数据
|
||||
- 🐛 修复深渊数据恢复异常
|
||||
- 🐛 修复 loading 组件 empty 状态设置异常
|
||||
- ♻️ 优化帖子加载逻辑,当刷新内容不足20条时,下次刷新数量为20-当前数量,如刷新数量为19条,则下次刷新数量为1条
|
||||
- ♻️ 动态获取分区列表&版块列表
|
||||
- ♻️ 重构部分路由处理,当话题/帖子切换分区/版块时,页面刷新不重置当前分区/版块
|
||||
|
||||
## [0.6.7](https://github.com/BTMuli/TeyvatGuide/releases/v0.6.7) (2024-12-31)
|
||||
|
||||
- 🍱 更新5.3版本游戏资源 [`#139`](https://github.com/BTMuli/TeyvatGuide/issues/139)
|
||||
- ✨ 支持嵌入B站视频的分享图渲染
|
||||
- 🐛 修复版块跳转异常
|
||||
- 🐛 修复清理日志异常
|
||||
- 🐛 修复特定帖子`link_card_ids`数据解析异常
|
||||
- 🐛 修复帖子文本居中异常
|
||||
- 🐛 修复侧边栏跳转角色/武器图鉴异常
|
||||
- ✏️ 调整分享图大小计算方式,采用1024进制而非原有的1000进制
|
||||
- 💄 调整用户等级UI,浅色深色下统一为白色文字
|
||||
- 💄 调整回复弹窗位置,上移一段距离以避免底部提示遮挡
|
||||
- 💄 首页素材日历组件只显示日期,移除具体时间
|
||||
- 💄 调整链接卡片提示文字
|
||||
- 💄 调整剧诗角色列表显示UI
|
||||
- 🚸 版块/咨讯页数据获取/刷新显示成功提示
|
||||
- 🚸 首页近期活动卡片Icon补充缺失的点击逻辑
|
||||
- 🚸 调整合集组件改版后的滚动逻辑,更加流畅
|
||||
- 👽️ 由于API变更,调整版块数据获取逻辑
|
||||
- 👽️ 由于返回数据格式变更,调整视频时长的计算逻辑
|
||||
- 👽️ 由于返回数据格式变更,处理帖子内的转义字符
|
||||
- ♻️ loading组件重构,部分页面显示更精准的进度
|
||||
- ♻️ 应用元数据格式重构,剔除冗余数据
|
||||
|
||||
## [0.6.6](https://github.com/BTMuli/TeyvatGuide/releases/v0.6.6) (2024-12-13)
|
||||
|
||||
- 🐛 修复主题切换响应异常
|
||||
- 🐛 修复增量刷新逻辑异常
|
||||
- ⚡️ 显著降低运行内存占用
|
||||
|
||||
## [0.6.5](https://github.com/BTMuli/TeyvatGuide/releases/v0.6.5) (2024-12-11)
|
||||
|
||||
- 🍱 添加下半卡池数据&部分资源
|
||||
- ✨ 帖子内容中涉及的话题链接支持应用内跳转
|
||||
- ♻️ 首页组件加载逻辑重构
|
||||
- ✨ UIGF4导入/导出浮窗,支持自选UID
|
||||
- 💄 调整剧诗部分数据缺失时的显示
|
||||
- 🐛 调整部分UI,修复切换账户后角色详情刷新异常
|
||||
|
||||
## [0.6.4](https://github.com/BTMuli/TeyvatGuide/releases/v0.6.4) (2024-12-03)
|
||||
|
||||
- 🐛 修复子回复渲染异常
|
||||
- ✏️ 祈愿记录将验证非空ID
|
||||
- 🐛 修复战绩分享图渲染异常
|
||||
- 🐛 修复`dialog`组件`input`默认值无效
|
||||
- 🎨 调整帖子查找overlay逻辑
|
||||
- ✨ 分享图生成阈值自定义
|
||||
- 👽️ 全量刷新时清理旧数据,修复由于米哈游数据异常导致的重复数据
|
||||
|
||||
## [0.6.3](https://github.com/BTMuli/TeyvatGuide/releases/v0.6.3) (2024-11-19)
|
||||
|
||||
- 🐛 修复用户战绩角色数据`undefined`
|
||||
- 🐛 修复咨讯页加载更多异常
|
||||
- 🐛 修复验证码登录提示`-100`,数据刷新后若为已登录UID则不会再提示切换
|
||||
- 🐛 修复部分公告渲染异常
|
||||
- 🐛 修复成就页面在存在搜索内容时点击左侧成就系列无响应
|
||||
- ✨ 帖子新增 UID 卡片解析&渲染
|
||||
- ✨ 帖子新增自定义表情解析&渲染
|
||||
- ✨ 真境剧诗适配,新增真境剧诗页面,支持获取&分享&上传(胡桃数据库),可通过深渊页面进入
|
||||
- ✨ 新增话题页面,可通过帖子卡片标签点击或帖子详情顶部标签点击进入
|
||||
- ✨ 更完善的`loading`显示,调整了组件UI
|
||||
- 🍱 更新5.2版本资源 [`#133`](https://github.com/BTMuli/TeyvatGuide/issues/133)
|
||||
- 💄 调整祈愿记录UP四星颜色
|
||||
- 💄 修复帖子页兑换码弹窗高度异常
|
||||
- 💄 调整帖子卡片UI,增加显示帖子话题(如存在),话题&版块支持点击跳转
|
||||
- 💄 调整帖子详情页UI,顶部话题&版块支持点击跳转
|
||||
- 💄 调整帖子显示数量,支持加载更多,默认排序改为`最新回复`,移除`默认排序`,增加`热门`排序
|
||||
- 💄 咨讯、帖子等页面刷新时自动滚动到顶部
|
||||
- 🔥 深渊数据库显示移除第9层统计数据
|
||||
- 👽️ 米游社子窗口增加`genshinnet`域名支持
|
||||
- 🎨 优化帖子详情数据加载的错误处理
|
||||
- ♻️ `snackbar`、`confirm`、`loading`组件重构
|
||||
- ♻️ 请求模块重构
|
||||
|
||||
## [0.6.2](https://github.com/BTMuli/TeyvatGuide/releases/v0.6.2) (2024-10-31)
|
||||
|
||||
- 🐛 修复用户登录状态异常 [`#132`](https://github.com/BTMuli/TeyvatGudie/issues/132)
|
||||
- 💄 帖子子回复取消保持,点击其他隐藏
|
||||
- 💄 调整未登录时的部分内容渲染
|
||||
- 💄 调整保存时图片的hint
|
||||
- 💄 `mac`:修复回顶组件宽度异常
|
||||
- 💄 `mac`:修复视频封面位置异常
|
||||
- 💄 调整角色卡片UI,维持名片比例
|
||||
- ♻️ 深渊数据库重构,概览显示差距
|
||||
- 🍱 更新下半卡池
|
||||
- 👽️ 修正咨讯Api
|
||||
|
||||
## [0.6.1](https://github.com/BTMuli/TeyvatGuide/releases/v0.6.1) (2024-10-22)
|
||||
|
||||
- 🐛 新用户数据库初始化异常 [`#131`](https://github.com/BTMuli/TeyavtGuide/issues/131)
|
||||
- 🐛 修复角色数据未即时刷新
|
||||
- 🐛 修复`openSystemBrowser`回调执行异常
|
||||
- ♻️ 公告卡片组件抽离,支持分享
|
||||
- 🎨 成就页面&名片图鉴页面采用虚拟列表优化性能
|
||||
- 🎨 调整卡片封面加载逻辑
|
||||
- 💄 处理特定情况下的内容溢出
|
||||
- 💄 适配深渊新字段,显示跳过楼层
|
||||
- 💄深渊分享显示应用信息,圣遗物详情推荐属性高亮
|
||||
- 💄调整帖子子窗口副标题样式
|
||||
- 💄调整留影叙佳期选项样式
|
||||
|
||||
## [0.6.0](https://github.com/BTMuli/TeyvatGuide/releases/v0.6.0) (2024-10-09)
|
||||
|
||||
- ✨ 应用支持多账号 [`#126`](https://github.com/BTMuli/TeyvatGuide/issues/126)
|
||||
- ✨ 支持手动输入CK&用户删除
|
||||
- ✨ 帖子卡片支持分享
|
||||
- ✨ 支持官服用户直接启动原神 [`#80`](https://github.com/BTMuli/TeyvatGuide/issues/80)
|
||||
- ♻️ 重构成就表格,支持多存档
|
||||
- ♻️ 重构深渊数据加载逻辑,适配多存档
|
||||
- ♻️ 重构用户登录逻辑及切换
|
||||
- ♻️ 重构祈愿、深渊、角色页面逻辑,支持游戏账号切换
|
||||
- ♻️ 战绩页面适配多账户
|
||||
- 💄 帖子/公告子窗口添加窗口置顶按钮
|
||||
- 💄 调整视频分享截图
|
||||
- 💄 回复分享图忽略导出图标
|
||||
- 💄 显示用户等级
|
||||
- 💄 处理特定情况下的回复内容溢出
|
||||
- 💄 兑换码支持分享,调整了兑换码浮窗UI
|
||||
- 💄 公告对列表进行缩进
|
||||
- 💄 材料Wiki样式优化,支持分类筛选&查询
|
||||
- 💄 材料详情浮窗支持分享
|
||||
- ✏️ JSBridge新增`openSystemBrowser`回调处理
|
||||
- ✏️ 修正公告正则
|
||||
- 👽️ 更新国际服公告Api
|
||||
- 📖 添加 macOS 平台门禁属性导致无法打开应用的修复指引 [`#130`](https://github.com/BTMuli/TeyvatGuide/issues/130)
|
||||
@@ -2,12 +2,12 @@
|
||||
Author: 目棃
|
||||
Description: 项目资源说明
|
||||
Date: 2023-03-10
|
||||
Update: 2024-09-19
|
||||
Update: 2025-02-28
|
||||
---
|
||||
|
||||
> 本文档 [`Frontmatter`](https://github.com/BTMuli/MuCli#Frontmatter) 由 [MuCli](https://github.com/BTMuli/Mucli) 自动生成于 `2023-03-10 22:05:44`
|
||||
>
|
||||
> 更新于 `2024-09-19 15:28:16`
|
||||
> 更新于 `2025-02-28 09:40:33`
|
||||
|
||||
## 说明
|
||||
|
||||
@@ -28,6 +28,7 @@ Update: 2024-09-19
|
||||
- 我的角色:Hoyolab
|
||||
- 深渊记录:Hoyolab
|
||||
- 祈愿记录:Hoyolab
|
||||
- 实用脚本:Hoyolab
|
||||
- 图鉴:Hoyolab,其子目录图标同样来源于 Hoyolab
|
||||
- 模式切换:`mdi-weather-night` `mdi-weather-sunny`
|
||||
- 设置:个人绘制 SVG
|
||||
|
||||
@@ -5,7 +5,6 @@
|
||||
<link rel="icon" type="image/svg+xml" href="/icon.svg" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
<title>TeyvatGuide</title>
|
||||
<script src="https://static.geetest.com/v4/gt4.js"></script>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
|
||||
81
package.json
@@ -1,17 +1,19 @@
|
||||
{
|
||||
"name": "teyvatguide",
|
||||
"version": "0.6.9",
|
||||
"version": "0.7.2",
|
||||
"description": "Game Tool for GenshinImpact player",
|
||||
"private": true,
|
||||
"packageManager": "pnpm@10.2.0",
|
||||
"packageManager": "pnpm@10.6.5",
|
||||
"type": "module",
|
||||
"scripts": {
|
||||
"build": "tauri build",
|
||||
"debug": "tauri build --debug",
|
||||
"dev": "tauri dev --exit-on-panic",
|
||||
"eslint:pre": "pnpx @eslint/config-inspector@latest",
|
||||
"oxlint": "oxlint",
|
||||
"lint": "concurrently \"pnpm:lint:*(!fix)\"",
|
||||
"lint:fix": "concurrently \"pnpm:lint:*:fix\"",
|
||||
"lint-vue": "vue-tsc --noEmit",
|
||||
"lint:code": "eslint .",
|
||||
"lint:code:fix": "eslint . --fix",
|
||||
"lint:style": "stylelint \"src/**/*.{vue,css,scss}\" -f verbose",
|
||||
@@ -68,78 +70,79 @@
|
||||
},
|
||||
"dependencies": {
|
||||
"@mdi/font": "7.4.47",
|
||||
"@tauri-apps/api": "^2.2.0",
|
||||
"@tauri-apps/api": "^2.4.0",
|
||||
"@tauri-apps/plugin-deep-link": "^2.2.0",
|
||||
"@tauri-apps/plugin-dialog": "^2.2.0",
|
||||
"@tauri-apps/plugin-fs": "^2.2.0",
|
||||
"@tauri-apps/plugin-http": "^2.3.0",
|
||||
"@tauri-apps/plugin-log": "^2.2.1",
|
||||
"@tauri-apps/plugin-os": "^2.2.0",
|
||||
"@tauri-apps/plugin-http": "^2.4.2",
|
||||
"@tauri-apps/plugin-log": "^2.3.1",
|
||||
"@tauri-apps/plugin-opener": "^2.2.6",
|
||||
"@tauri-apps/plugin-os": "^2.2.1",
|
||||
"@tauri-apps/plugin-process": "^2.2.0",
|
||||
"@tauri-apps/plugin-shell": "^2.2.0",
|
||||
"@tauri-apps/plugin-sql": "^2.2.0",
|
||||
"ajv": "^8.17.1",
|
||||
"artplayer": "^5.2.2",
|
||||
"clipboard": "^2.0.11",
|
||||
"color-convert": "^2.0.1",
|
||||
"color-convert": "^3.0.1",
|
||||
"echarts": "^5.6.0",
|
||||
"html2canvas": "^1.4.1",
|
||||
"js-md5": "^0.8.3",
|
||||
"jsencrypt": "^3.3.2",
|
||||
"pinia": "^2.3.1",
|
||||
"pinia": "^3.0.1",
|
||||
"pinia-plugin-persistedstate": "^4.2.0",
|
||||
"qrcode.vue": "^3.6.0",
|
||||
"sass": "^1.83.4",
|
||||
"sass-loader": "^16.0.4",
|
||||
"uuid": "^11.0.5",
|
||||
"sass-embedded": "^1.86.0",
|
||||
"uuid": "^11.1.0",
|
||||
"vue": "^3.5.13",
|
||||
"vue-echarts": "^7.0.3",
|
||||
"vue-json-viewer": "^3.0.4",
|
||||
"vue-json-pretty": "^2.4.0",
|
||||
"vue-router": "^4.5.0",
|
||||
"vuetify": "^3.7.9",
|
||||
"vuetify": "^3.7.19",
|
||||
"wcag-color": "^1.1.1",
|
||||
"xml-js": "^1.6.11"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@eslint/eslintrc": "^3.2.0",
|
||||
"@eslint/js": "^9.19.0",
|
||||
"@tauri-apps/cli": "2.2.7",
|
||||
"@eslint/eslintrc": "^3.3.1",
|
||||
"@eslint/js": "^9.23.0",
|
||||
"@tauri-apps/cli": "2.4.0",
|
||||
"@types/color-convert": "^2.0.4",
|
||||
"@types/fs-extra": "^11.0.4",
|
||||
"@types/js-md5": "^0.7.2",
|
||||
"@types/node": "^22.13.0",
|
||||
"@types/node": "^22.13.13",
|
||||
"@types/uuid": "^10.0.0",
|
||||
"@typescript-eslint/parser": "^8.23.0",
|
||||
"@vitejs/plugin-vue": "^5.2.1",
|
||||
"@typescript-eslint/parser": "^8.28.0",
|
||||
"@vitejs/plugin-vue": "^5.2.3",
|
||||
"concurrently": "^9.1.2",
|
||||
"eslint": "^9.19.0",
|
||||
"eslint": "^9.23.0",
|
||||
"eslint-plugin-import": "^2.31.0",
|
||||
"eslint-plugin-jsonc": "^2.19.1",
|
||||
"eslint-plugin-prettier": "^5.2.3",
|
||||
"eslint-plugin-vue": "^9.32.0",
|
||||
"eslint-plugin-yml": "^1.16.0",
|
||||
"eslint-plugin-jsonc": "^2.20.0",
|
||||
"eslint-plugin-prettier": "^5.2.5",
|
||||
"eslint-plugin-vue": "^10.0.0",
|
||||
"eslint-plugin-yml": "^1.17.0",
|
||||
"fs-extra": "^11.3.0",
|
||||
"globals": "^15.14.0",
|
||||
"globals": "^16.0.0",
|
||||
"husky": "^9.1.7",
|
||||
"jsonc-eslint-parser": "^2.4.0",
|
||||
"lint-staged": "^15.4.3",
|
||||
"oxlint": "^0.15.9",
|
||||
"prettier": "3.4.2",
|
||||
"stylelint": "^16.14.1",
|
||||
"lint-staged": "^15.5.0",
|
||||
"oxlint": "^0.16.3",
|
||||
"prettier": "3.5.3",
|
||||
"stylelint": "^16.16.0",
|
||||
"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-high-performance-animation": "^1.11.0",
|
||||
"stylelint-order": "^6.0.4",
|
||||
"stylelint-prettier": "^5.0.3",
|
||||
"stylelint-scss": "^6.11.0",
|
||||
"tsx": "^4.19.2",
|
||||
"typescript": "^5.7.3",
|
||||
"typescript-eslint": "^8.23.0",
|
||||
"vite": "^6.0.11",
|
||||
"vite-plugin-vue-devtools": "^7.7.1",
|
||||
"vite-plugin-vuetify": "^2.0.4",
|
||||
"vue-eslint-parser": "^9.4.3",
|
||||
"yaml-eslint-parser": "^1.2.3"
|
||||
"stylelint-scss": "^6.11.1",
|
||||
"tsx": "^4.19.3",
|
||||
"typescript": "^5.8.2",
|
||||
"typescript-eslint": "^8.28.0",
|
||||
"vite": "^6.2.3",
|
||||
"vite-plugin-vue-devtools": "^7.7.2",
|
||||
"vite-plugin-vuetify": "^2.1.0",
|
||||
"vue-eslint-parser": "^10.1.1",
|
||||
"vue-tsc": "^2.2.8",
|
||||
"yaml-eslint-parser": "^1.3.0"
|
||||
}
|
||||
}
|
||||
|
||||
3179
pnpm-lock.yaml
generated
BIN
public/WIKI/character/10000110.webp
Normal file
|
After Width: | Height: | Size: 17 KiB |
BIN
public/WIKI/character/10000111.webp
Normal file
|
After Width: | Height: | Size: 21 KiB |
BIN
public/WIKI/nameCard/bg/伊安珊·不懈.webp
Normal file
|
After Width: | Height: | Size: 29 KiB |
BIN
public/WIKI/nameCard/bg/成就·寂宁.webp
Normal file
|
After Width: | Height: | Size: 20 KiB |
BIN
public/WIKI/nameCard/bg/瓦雷莎·力源.webp
Normal file
|
After Width: | Height: | Size: 24 KiB |
BIN
public/WIKI/nameCard/bg/纪行·荣花.webp
Normal file
|
After Width: | Height: | Size: 30 KiB |
BIN
public/WIKI/nameCard/bg/纳塔·眬瞳.webp
Normal file
|
After Width: | Height: | Size: 25 KiB |
BIN
public/WIKI/nameCard/icon/伊安珊·不懈.webp
Normal file
|
After Width: | Height: | Size: 6.0 KiB |
BIN
public/WIKI/nameCard/icon/成就·寂宁.webp
Normal file
|
After Width: | Height: | Size: 3.8 KiB |
BIN
public/WIKI/nameCard/icon/瓦雷莎·力源.webp
Normal file
|
After Width: | Height: | Size: 4.3 KiB |
BIN
public/WIKI/nameCard/icon/纪行·荣花.webp
Normal file
|
After Width: | Height: | Size: 5.3 KiB |
BIN
public/WIKI/nameCard/icon/纳塔·眬瞳.webp
Normal file
|
After Width: | Height: | Size: 4.8 KiB |
BIN
public/WIKI/nameCard/profile/伊安珊·不懈.webp
Normal file
|
After Width: | Height: | Size: 31 KiB |
BIN
public/WIKI/nameCard/profile/成就·寂宁.webp
Normal file
|
After Width: | Height: | Size: 16 KiB |
BIN
public/WIKI/nameCard/profile/瓦雷莎·力源.webp
Normal file
|
After Width: | Height: | Size: 21 KiB |
BIN
public/WIKI/nameCard/profile/纪行·荣花.webp
Normal file
|
After Width: | Height: | Size: 42 KiB |
BIN
public/WIKI/nameCard/profile/纳塔·眬瞳.webp
Normal file
|
After Width: | Height: | Size: 35 KiB |
BIN
public/WIKI/weapon/14519.webp
Normal file
|
After Width: | Height: | Size: 14 KiB |
BIN
public/icon/achievement/UI_AchievementIcon_A021.webp
Normal file
|
After Width: | Height: | Size: 8.2 KiB |
BIN
public/icon/achievement/UI_AchievementIcon_B007_Part3.webp
Normal file
|
After Width: | Height: | Size: 9.0 KiB |
BIN
public/icon/constellations/UI_Talent_S_Iansan_01.webp
Normal file
|
After Width: | Height: | Size: 3.3 KiB |
BIN
public/icon/constellations/UI_Talent_S_Iansan_02.webp
Normal file
|
After Width: | Height: | Size: 2.2 KiB |
BIN
public/icon/constellations/UI_Talent_S_Iansan_03.webp
Normal file
|
After Width: | Height: | Size: 3.0 KiB |
BIN
public/icon/constellations/UI_Talent_S_Iansan_04.webp
Normal file
|
After Width: | Height: | Size: 2.8 KiB |
BIN
public/icon/constellations/UI_Talent_S_Varesa_01.webp
Normal file
|
After Width: | Height: | Size: 2.8 KiB |
BIN
public/icon/constellations/UI_Talent_S_Varesa_02.webp
Normal file
|
After Width: | Height: | Size: 2.7 KiB |
BIN
public/icon/constellations/UI_Talent_S_Varesa_03.webp
Normal file
|
After Width: | Height: | Size: 2.8 KiB |
BIN
public/icon/constellations/UI_Talent_S_Varesa_04.webp
Normal file
|
After Width: | Height: | Size: 2.3 KiB |
BIN
public/icon/constellations/UI_Talent_U_Iansan_01.webp
Normal file
|
After Width: | Height: | Size: 2.3 KiB |
BIN
public/icon/constellations/UI_Talent_U_Iansan_02.webp
Normal file
|
After Width: | Height: | Size: 4.0 KiB |
BIN
public/icon/constellations/UI_Talent_U_Varesa_01.webp
Normal file
|
After Width: | Height: | Size: 2.8 KiB |
BIN
public/icon/constellations/UI_Talent_U_Varesa_02.webp
Normal file
|
After Width: | Height: | Size: 2.8 KiB |
BIN
public/icon/material/101254.webp
Normal file
|
After Width: | Height: | Size: 11 KiB |
BIN
public/icon/material/101255.webp
Normal file
|
After Width: | Height: | Size: 7.9 KiB |
BIN
public/icon/material/101256.webp
Normal file
|
After Width: | Height: | Size: 8.0 KiB |
BIN
public/icon/material/112119.webp
Normal file
|
After Width: | Height: | Size: 3.7 KiB |
BIN
public/icon/material/112120.webp
Normal file
|
After Width: | Height: | Size: 6.0 KiB |
BIN
public/icon/material/112121.webp
Normal file
|
After Width: | Height: | Size: 17 KiB |
BIN
public/icon/material/113072.webp
Normal file
|
After Width: | Height: | Size: 9.6 KiB |
BIN
public/icon/talents/Skill_E_Iansan_01.webp
Normal file
|
After Width: | Height: | Size: 2.8 KiB |
BIN
public/icon/talents/Skill_E_Varesa_01.webp
Normal file
|
After Width: | Height: | Size: 2.0 KiB |
BIN
public/icon/talents/Skill_S_Iansan_01.webp
Normal file
|
After Width: | Height: | Size: 2.3 KiB |
BIN
public/icon/talents/Skill_S_Varesa_01.webp
Normal file
|
After Width: | Height: | Size: 2.9 KiB |
BIN
public/icon/talents/UI_Talent_S_Iansan_05.webp
Normal file
|
After Width: | Height: | Size: 2.2 KiB |
BIN
public/icon/talents/UI_Talent_S_Iansan_06.webp
Normal file
|
After Width: | Height: | Size: 4.4 KiB |
BIN
public/icon/talents/UI_Talent_S_Iansan_08.webp
Normal file
|
After Width: | Height: | Size: 2.7 KiB |
BIN
public/icon/talents/UI_Talent_S_Varesa_05.webp
Normal file
|
After Width: | Height: | Size: 2.6 KiB |
BIN
public/icon/talents/UI_Talent_S_Varesa_06.webp
Normal file
|
After Width: | Height: | Size: 3.4 KiB |
BIN
public/icon/talents/UI_Talent_S_Varesa_07.webp
Normal file
|
After Width: | Height: | Size: 2.1 KiB |
BIN
public/icon/talents/UI_Talent_S_Varesa_08.webp
Normal file
|
After Width: | Height: | Size: 2.1 KiB |
BIN
public/platforms/mhy/launcher.webp
Normal file
|
After Width: | Height: | Size: 8.5 KiB |
|
Before Width: | Height: | Size: 30 KiB |
BIN
public/source/UI/act_birthday.webp
Normal file
|
After Width: | Height: | Size: 6.2 KiB |
|
Before Width: | Height: | Size: 2.0 KiB |
BIN
public/source/UI/posts.webp
Normal file
|
After Width: | Height: | Size: 776 B |
BIN
public/source/UI/toolbox.webp
Normal file
|
After Width: | Height: | Size: 5.0 KiB |
|
Before Width: | Height: | Size: 2.9 KiB |
BIN
public/source/UI/video_play_bili.webp
Normal file
|
After Width: | Height: | Size: 2.1 KiB |
3
src-tauri/.gitignore
vendored
@@ -2,3 +2,6 @@
|
||||
# will have compiled files and executables
|
||||
/target/
|
||||
|
||||
# Generated by Tauri
|
||||
# will have schema files for capabilities auto-completion
|
||||
/gen/schemas
|
||||
|
||||
1528
src-tauri/Cargo.lock
generated
@@ -1,6 +1,6 @@
|
||||
[package]
|
||||
name = "TeyvatGuide"
|
||||
version = "0.6.9"
|
||||
version = "0.7.2"
|
||||
description = "Game Tool for Genshin Impact player"
|
||||
authors = ["BTMuli <bt-muli@outlook.com>"]
|
||||
license = "MIT"
|
||||
@@ -9,16 +9,23 @@ edition = "2021"
|
||||
|
||||
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
||||
|
||||
[lib]
|
||||
# The `_lib` suffix may seem redundant, but it is necessary
|
||||
# to make the lib name unique and wouldn't conflict with the bin name.
|
||||
# This seems to be only an issue on Windows, see https://github.com/rust-lang/cargo/issues/8519
|
||||
name = "teyvat_guide_lib"
|
||||
crate-type = ["staticlib", "cdylib", "rlib"]
|
||||
|
||||
[build-dependencies]
|
||||
tauri-build = { version = "2.0.5", features = [] }
|
||||
tauri-build = { version = "2.1.0", features = [] }
|
||||
|
||||
[dependencies]
|
||||
chrono = "0.4.39"
|
||||
log = "0.4.25"
|
||||
serde = { version = "1.0.217", features = ["derive"] }
|
||||
serde_json = "1.0.138"
|
||||
tauri = { version = "2.2.5", features = [] }
|
||||
tauri-utils = "2.1.1"
|
||||
chrono = "0.4.40"
|
||||
log = "0.4.26"
|
||||
serde = { version = "1.0.219", features = ["derive"] }
|
||||
serde_json = "1.0.140"
|
||||
tauri = { version = "2.4.0", features = [] }
|
||||
tauri-utils = "2.3.0"
|
||||
url = "2.5.4"
|
||||
walkdir = "2.5.0"
|
||||
|
||||
@@ -48,6 +55,11 @@ features = ["unsafe-headers"]
|
||||
git = "ssh://git@github.com/tauri-apps/plugins-workspace.git"
|
||||
branch = "v2"
|
||||
|
||||
# opener 插件
|
||||
[dependencies.tauri-plugin-opener]
|
||||
git = "ssh://git@github.com/tauri-apps/plugins-workspace.git"
|
||||
branch = "v2"
|
||||
|
||||
# os 插件
|
||||
[dependencies.tauri-plugin-os]
|
||||
git = "ssh://git@github.com/tauri-apps/plugins-workspace.git"
|
||||
@@ -73,8 +85,3 @@ branch = "v2"
|
||||
git = "ssh://git@github.com/tauri-apps/plugins-workspace.git"
|
||||
branch = "v2"
|
||||
features = ["sqlite"]
|
||||
|
||||
[features]
|
||||
# this feature is used for production builds or when `devPath` points to the filesystem
|
||||
# DO NOT REMOVE!!
|
||||
custom-protocol = ["tauri/custom-protocol"]
|
||||
|
||||
@@ -21,6 +21,7 @@
|
||||
"core:window:allow-center",
|
||||
"core:window:allow-close",
|
||||
"core:window:allow-destroy",
|
||||
"core:window:allow-set-always-on-top",
|
||||
"core:window:allow-set-size",
|
||||
"core:window:allow-set-title",
|
||||
"core:window:allow-set-fullscreen",
|
||||
|
||||
@@ -14,6 +14,7 @@
|
||||
"core:window:default",
|
||||
"core:path:allow-resolve-directory",
|
||||
"core:path:default",
|
||||
"opener:default",
|
||||
{ "identifier": "fs:allow-exists", "allow": [{ "path": "**" }] },
|
||||
{ "identifier": "fs:allow-mkdir", "allow": [{ "path": "**" }] },
|
||||
{ "identifier": "fs:allow-read-dir", "allow": [{ "path": "**" }] },
|
||||
|
||||
@@ -37,6 +37,7 @@
|
||||
"core:window:allow-set-focus",
|
||||
"core:window:allow-show",
|
||||
"core:window:allow-unminimize",
|
||||
"opener:default",
|
||||
{ "identifier": "fs:allow-exists", "allow": [{ "path": "**" }] },
|
||||
{ "identifier": "fs:allow-mkdir", "allow": [{ "path": "**" }] },
|
||||
{ "identifier": "fs:allow-read-dir", "allow": [{ "path": "**" }] },
|
||||
@@ -44,6 +45,7 @@
|
||||
{ "identifier": "fs:allow-remove", "allow": [{ "path": "**" }] },
|
||||
{ "identifier": "fs:allow-write-file", "allow": [{ "path": "**" }] },
|
||||
{ "identifier": "fs:allow-write-text-file", "allow": [{ "path": "**" }] },
|
||||
{ "identifier": "opener:allow-open-path", "allow": [{ "path": "**" }] },
|
||||
{
|
||||
"identifier": "http:default",
|
||||
"allow": [
|
||||
@@ -55,11 +57,7 @@
|
||||
},
|
||||
{
|
||||
"identifier": "shell:allow-execute",
|
||||
"allow": [
|
||||
{ "name": "win_open", "cmd": "explorer", "args": true },
|
||||
{ "name": "mac_open", "cmd": "open", "args": true },
|
||||
{ "name": "exec-sh", "cmd": "powershell", "args": true }
|
||||
]
|
||||
"allow": [{ "name": "exec-sh", "cmd": "powershell", "args": true }]
|
||||
}
|
||||
],
|
||||
"platforms": ["windows", "macOS"]
|
||||
|
||||
@@ -1,201 +0,0 @@
|
||||
{
|
||||
"DevJson": {
|
||||
"identifier": "DevJson",
|
||||
"description": "Capability for the dev json window",
|
||||
"local": true,
|
||||
"windows": ["Dev_JSON"],
|
||||
"permissions": [
|
||||
"core:app:allow-version",
|
||||
"core:app:default",
|
||||
"core:event:allow-listen",
|
||||
"core:event:default",
|
||||
"http:allow-fetch",
|
||||
"log:allow-log",
|
||||
"log:default",
|
||||
"core:path:allow-resolve-directory",
|
||||
"core:path:default",
|
||||
"sql:allow-load",
|
||||
"sql:allow-execute",
|
||||
"sql:default",
|
||||
"core:webview:allow-set-webview-zoom",
|
||||
"core:webview:default",
|
||||
"core:window:allow-center",
|
||||
"core:window:allow-close",
|
||||
"core:window:allow-destroy",
|
||||
"core:window:allow-set-size",
|
||||
"core:window:allow-set-title",
|
||||
"core:window:allow-set-fullscreen",
|
||||
"core:window:allow-show",
|
||||
"core:window:default",
|
||||
{
|
||||
"identifier": "http:default",
|
||||
"allow": [
|
||||
{ "url": "https://*.miyoushe.com/*" },
|
||||
{ "url": "https://*.mihoyo.com/*" },
|
||||
{ "url": "https://*.hoyoverse.com/*" }
|
||||
]
|
||||
}
|
||||
],
|
||||
"platforms": ["windows", "macOS"]
|
||||
},
|
||||
"Mys": {
|
||||
"identifier": "Mys",
|
||||
"description": "Capability for the mys client window",
|
||||
"remote": {
|
||||
"urls": ["https://*.mihoyo.com/*", "https://*.miyoushe.com/*", "https://*.genshinnet.com/*"]
|
||||
},
|
||||
"local": true,
|
||||
"windows": ["mhy_client"],
|
||||
"permissions": [
|
||||
"dialog:allow-message",
|
||||
"dialog:default",
|
||||
"core:event:allow-emit",
|
||||
"http:allow-fetch",
|
||||
"core:webview:allow-set-webview-zoom",
|
||||
"core:webview:default",
|
||||
"core:window:allow-center",
|
||||
"core:window:default",
|
||||
"core:path:allow-resolve-directory",
|
||||
"core:path:default",
|
||||
{ "identifier": "fs:allow-exists", "allow": [{ "path": "**" }] },
|
||||
{ "identifier": "fs:allow-mkdir", "allow": [{ "path": "**" }] },
|
||||
{ "identifier": "fs:allow-read-dir", "allow": [{ "path": "**" }] },
|
||||
{ "identifier": "fs:allow-read-text-file", "allow": [{ "path": "**" }] },
|
||||
{ "identifier": "fs:allow-remove", "allow": [{ "path": "**" }] },
|
||||
{ "identifier": "fs:allow-write-file", "allow": [{ "path": "**" }] },
|
||||
{ "identifier": "fs:allow-write-text-file", "allow": [{ "path": "**" }] },
|
||||
{
|
||||
"identifier": "http:default",
|
||||
"allow": [
|
||||
{ "url": "https://*.miyoushe.com/*" },
|
||||
{ "url": "https://*.mihoyo.com/*" },
|
||||
{ "url": "https://*.genshinnet.com/*" }
|
||||
]
|
||||
}
|
||||
],
|
||||
"platforms": ["windows", "macOS"]
|
||||
},
|
||||
"SubWindow": {
|
||||
"identifier": "SubWindow",
|
||||
"description": "Capability for the sub window",
|
||||
"local": true,
|
||||
"windows": ["Sub_window"],
|
||||
"permissions": [
|
||||
"core:app:allow-version",
|
||||
"core:app:default",
|
||||
"dialog:allow-save",
|
||||
"dialog:default",
|
||||
"core:event:allow-listen",
|
||||
"core:event:default",
|
||||
"fs:default",
|
||||
"http:allow-fetch",
|
||||
"log:allow-log",
|
||||
"log:default",
|
||||
"core:path:allow-resolve-directory",
|
||||
"core:path:default",
|
||||
"shell:allow-open",
|
||||
"shell:default",
|
||||
"sql:allow-load",
|
||||
"sql:allow-execute",
|
||||
"sql:default",
|
||||
"core:webview:allow-set-webview-zoom",
|
||||
"core:webview:default",
|
||||
"core:window:allow-center",
|
||||
"core:window:allow-close",
|
||||
"core:window:allow-destroy",
|
||||
"core:window:allow-set-size",
|
||||
"core:window:allow-set-title",
|
||||
"core:window:allow-set-focus",
|
||||
"core:window:allow-set-fullscreen",
|
||||
"core:window:allow-show",
|
||||
"core:window:allow-set-always-on-top",
|
||||
"core:window:default",
|
||||
{ "identifier": "fs:allow-exists", "allow": [{ "path": "**" }] },
|
||||
{ "identifier": "fs:allow-mkdir", "allow": [{ "path": "**" }] },
|
||||
{ "identifier": "fs:allow-read-dir", "allow": [{ "path": "**" }] },
|
||||
{ "identifier": "fs:allow-read-text-file", "allow": [{ "path": "**" }] },
|
||||
{ "identifier": "fs:allow-remove", "allow": [{ "path": "**" }] },
|
||||
{ "identifier": "fs:allow-write-file", "allow": [{ "path": "**" }] },
|
||||
{ "identifier": "fs:allow-write-text-file", "allow": [{ "path": "**" }] },
|
||||
{
|
||||
"identifier": "http:default",
|
||||
"allow": [
|
||||
{ "url": "https://*.miyoushe.com/*" },
|
||||
{ "url": "https://*.mihoyo.com/*" },
|
||||
{ "url": "https://*.mihoyogift.com/*" },
|
||||
{ "url": "https://*.bilibili.com/*" },
|
||||
{ "url": "http://*.hdslb.com/*" },
|
||||
{ "url": "https://*.hoyoverse.com/*" },
|
||||
{ "url": "https://*.genshinnet.com/*" }
|
||||
]
|
||||
}
|
||||
],
|
||||
"platforms": ["windows", "macOS"]
|
||||
},
|
||||
"TeyvatGuide": {
|
||||
"identifier": "TeyvatGuide",
|
||||
"description": "Capability for the main window",
|
||||
"local": true,
|
||||
"windows": ["TeyvatGuide"],
|
||||
"permissions": [
|
||||
"core:app:allow-version",
|
||||
"core:app:default",
|
||||
"dialog:allow-save",
|
||||
"dialog:default",
|
||||
"core:event:allow-listen",
|
||||
"core:event:default",
|
||||
"fs:default",
|
||||
"http:allow-fetch",
|
||||
"log:allow-log",
|
||||
"log:default",
|
||||
"core:path:allow-resolve-directory",
|
||||
"core:path:default",
|
||||
"process:allow-exit",
|
||||
"process:default",
|
||||
"shell:allow-execute",
|
||||
"shell:allow-open",
|
||||
"shell:default",
|
||||
"sql:allow-load",
|
||||
"sql:allow-execute",
|
||||
"sql:default",
|
||||
"core:webview:allow-create-webview-window",
|
||||
"core:webview:allow-set-webview-zoom",
|
||||
"core:webview:default",
|
||||
"core:window:allow-center",
|
||||
"core:window:allow-close",
|
||||
"core:window:allow-destroy",
|
||||
"core:window:allow-set-size",
|
||||
"core:window:default",
|
||||
"core:window:allow-is-minimized",
|
||||
"core:window:allow-set-title",
|
||||
"core:window:allow-set-focus",
|
||||
"core:window:allow-show",
|
||||
"core:window:allow-unminimize",
|
||||
{ "identifier": "fs:allow-exists", "allow": [{ "path": "**" }] },
|
||||
{ "identifier": "fs:allow-mkdir", "allow": [{ "path": "**" }] },
|
||||
{ "identifier": "fs:allow-read-dir", "allow": [{ "path": "**" }] },
|
||||
{ "identifier": "fs:allow-read-text-file", "allow": [{ "path": "**" }] },
|
||||
{ "identifier": "fs:allow-remove", "allow": [{ "path": "**" }] },
|
||||
{ "identifier": "fs:allow-write-file", "allow": [{ "path": "**" }] },
|
||||
{ "identifier": "fs:allow-write-text-file", "allow": [{ "path": "**" }] },
|
||||
{
|
||||
"identifier": "http:default",
|
||||
"allow": [
|
||||
{ "url": "https://*.miyoushe.com/*" },
|
||||
{ "url": "https://*.mihoyo.com/*" },
|
||||
{ "url": "https://homa.snapgenshin.com/*" },
|
||||
{ "url": "https://*.hoyoverse.com/*" }
|
||||
]
|
||||
},
|
||||
{
|
||||
"identifier": "shell:allow-execute",
|
||||
"allow": [
|
||||
{ "args": true, "cmd": "explorer", "name": "win_open" },
|
||||
{ "args": true, "cmd": "open", "name": "mac_open" },
|
||||
{ "args": true, "cmd": "powershell", "name": "exec-sh" }
|
||||
]
|
||||
}
|
||||
],
|
||||
"platforms": ["windows", "macOS"]
|
||||
}
|
||||
}
|
||||
@@ -1,6 +1,6 @@
|
||||
//! @file src/client/mod.rs
|
||||
//! @desc 客户端模块,负责操作米游社客户端
|
||||
//! @since Beta v0.6.8
|
||||
//! @since Beta v0.7.0
|
||||
|
||||
mod menu;
|
||||
mod utils;
|
||||
@@ -8,7 +8,7 @@ mod utils;
|
||||
use tauri::{AppHandle, Manager, WebviewWindowBuilder};
|
||||
use tauri_utils::config::WebviewUrl;
|
||||
|
||||
static BBS_VERSION: &'static str = "2.80.1";
|
||||
static BBS_VERSION: &'static str = "2.82.0";
|
||||
|
||||
#[tauri::command]
|
||||
pub async fn create_mhy_client(handle: AppHandle, func: String, url: String) {
|
||||
@@ -39,6 +39,7 @@ pub async fn create_mhy_client(handle: AppHandle, func: String, url: String) {
|
||||
.title("米游社")
|
||||
.center()
|
||||
.user_agent(&win_ua)
|
||||
.additional_browser_args("--disable-features=msWebOOUI,msPdfOOUI,msSmartScreenProtection --autoplay-policy=no-user-gesture-required")
|
||||
// todo mac环境下没看到menu
|
||||
.menu(menu::create_mhy_menu(handle.clone()))
|
||||
.on_menu_event(move |app, event| menu::handle_menu_event(app, event))
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
//! @file src/commands.rs
|
||||
//! @desc 命令模块,负责处理命令
|
||||
//! @since Beta v0.5.1
|
||||
//! @since Beta v0.7.2
|
||||
|
||||
use tauri::{AppHandle, Emitter, Manager, WebviewWindowBuilder};
|
||||
use tauri_utils::config::{WebviewUrl, WindowConfig};
|
||||
@@ -42,6 +42,7 @@ pub async fn create_window(
|
||||
.visible(option.visible)
|
||||
.title(option.title)
|
||||
.center()
|
||||
.additional_browser_args("--disable-features=msWebOOUI,msPdfOOUI,msSmartScreenProtection --autoplay-policy=no-user-gesture-required")
|
||||
.build()
|
||||
.unwrap();
|
||||
}
|
||||
|
||||
68
src-tauri/src/lib.rs
Normal file
@@ -0,0 +1,68 @@
|
||||
//! @file src/lib.rs
|
||||
//! @desc 主模块,用于启动应用
|
||||
//! @since Beta v0.7.2
|
||||
|
||||
mod client;
|
||||
mod commands;
|
||||
mod plugins;
|
||||
mod utils;
|
||||
|
||||
use crate::client::create_mhy_client;
|
||||
use crate::commands::{create_window, execute_js, get_dir_size, init_app};
|
||||
use crate::plugins::{build_log_plugin, build_si_plugin};
|
||||
use tauri::{generate_context, generate_handler, Builder, Manager, Window, WindowEvent};
|
||||
|
||||
// 窗口事件处理
|
||||
fn window_event_handler(app: &Window, event: &WindowEvent) {
|
||||
match event {
|
||||
WindowEvent::CloseRequested { api, .. } => {
|
||||
api.prevent_close();
|
||||
if app.label() == "TeyvatGuide" {
|
||||
// 子窗口 label 的数组
|
||||
const SUB_WINDOW_LABELS: [&str; 3] = ["Sub_window", "Dev_JSON", "mhy_client"];
|
||||
for label in SUB_WINDOW_LABELS.iter() {
|
||||
let sub = app.get_webview_window(label);
|
||||
if sub.is_some() {
|
||||
sub.unwrap().destroy().unwrap();
|
||||
}
|
||||
}
|
||||
}
|
||||
app.destroy().unwrap();
|
||||
}
|
||||
_ => {}
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg_attr(mobile, tauri::mobile_entry_point)]
|
||||
pub fn run() {
|
||||
Builder::default()
|
||||
.on_window_event(move |app, event| window_event_handler(app, event))
|
||||
.plugin(build_si_plugin())
|
||||
.plugin(tauri_plugin_deep_link::init())
|
||||
.plugin(tauri_plugin_dialog::init())
|
||||
.plugin(tauri_plugin_fs::init())
|
||||
.plugin(tauri_plugin_http::init())
|
||||
.plugin(tauri_plugin_opener::init())
|
||||
.plugin(tauri_plugin_os::init())
|
||||
.plugin(tauri_plugin_process::init())
|
||||
.plugin(tauri_plugin_shell::init())
|
||||
.plugin(tauri_plugin_sql::Builder::default().build())
|
||||
.plugin(build_log_plugin())
|
||||
.setup(|_app| {
|
||||
let _window = _app.get_webview_window("TeyvatGuide");
|
||||
#[cfg(debug_assertions)]
|
||||
if _window.is_some() {
|
||||
_window.unwrap().open_devtools();
|
||||
}
|
||||
Ok(())
|
||||
})
|
||||
.invoke_handler(generate_handler![
|
||||
init_app,
|
||||
create_window,
|
||||
execute_js,
|
||||
get_dir_size,
|
||||
create_mhy_client
|
||||
])
|
||||
.run(generate_context!())
|
||||
.expect("error while running tauri application");
|
||||
}
|
||||
@@ -1,69 +1,10 @@
|
||||
//! @file src/main.rs
|
||||
//! @desc 主模块,用于启动应用
|
||||
//! @since Beta v0.6.2
|
||||
//! @since Beta v0.7.2
|
||||
|
||||
// Prevents additional console window on Windows in release, DO NOT REMOVE!!
|
||||
#![cfg_attr(not(debug_assertions), windows_subsystem = "windows")]
|
||||
|
||||
mod client;
|
||||
mod commands;
|
||||
mod plugins;
|
||||
mod utils;
|
||||
|
||||
use crate::client::create_mhy_client;
|
||||
use crate::commands::{create_window, execute_js, get_dir_size, init_app};
|
||||
use crate::plugins::{build_log_plugin, build_si_plugin};
|
||||
use tauri::{generate_context, generate_handler, Builder, Manager, Window, WindowEvent};
|
||||
|
||||
// 窗口事件处理
|
||||
fn window_event_handler(app: &Window, event: &WindowEvent) {
|
||||
match event {
|
||||
WindowEvent::CloseRequested { api, .. } => {
|
||||
api.prevent_close();
|
||||
if app.label() == "TeyvatGuide" {
|
||||
// 子窗口 label 的数组
|
||||
const SUB_WINDOW_LABELS: [&str; 3] = ["Sub_window", "Dev_JSON", "mhy_client"];
|
||||
for label in SUB_WINDOW_LABELS.iter() {
|
||||
let sub = app.get_webview_window(label);
|
||||
if sub.is_some() {
|
||||
sub.unwrap().destroy().unwrap();
|
||||
}
|
||||
}
|
||||
}
|
||||
app.destroy().unwrap();
|
||||
}
|
||||
_ => {}
|
||||
}
|
||||
}
|
||||
|
||||
fn main() {
|
||||
Builder::default()
|
||||
.on_window_event(move |app, event| window_event_handler(app, event))
|
||||
.plugin(build_si_plugin())
|
||||
.plugin(tauri_plugin_deep_link::init())
|
||||
.plugin(tauri_plugin_dialog::init())
|
||||
.plugin(tauri_plugin_fs::init())
|
||||
.plugin(tauri_plugin_http::init())
|
||||
.plugin(tauri_plugin_os::init())
|
||||
.plugin(tauri_plugin_process::init())
|
||||
.plugin(tauri_plugin_shell::init())
|
||||
.plugin(tauri_plugin_sql::Builder::default().build())
|
||||
.plugin(build_log_plugin())
|
||||
.setup(|_app| {
|
||||
let _window = _app.get_webview_window("TeyvatGuide");
|
||||
#[cfg(debug_assertions)]
|
||||
if _window.is_some() {
|
||||
_window.unwrap().open_devtools();
|
||||
}
|
||||
Ok(())
|
||||
})
|
||||
.invoke_handler(generate_handler![
|
||||
init_app,
|
||||
create_window,
|
||||
execute_js,
|
||||
get_dir_size,
|
||||
create_mhy_client
|
||||
])
|
||||
.run(generate_context!())
|
||||
.expect("error while running tauri application");
|
||||
teyvat_guide_lib::run()
|
||||
}
|
||||
|
||||
@@ -1,7 +1,8 @@
|
||||
{
|
||||
"$schema": "https://schema.tauri.app/config/2",
|
||||
"productName": "TeyvatGuide",
|
||||
"identifier": "TeyvatGuide",
|
||||
"version": "0.6.9",
|
||||
"version": "0.7.2",
|
||||
"build": {
|
||||
"beforeDevCommand": "pnpm vite:dev",
|
||||
"beforeBuildCommand": "pnpm vite:build",
|
||||
@@ -39,6 +40,7 @@
|
||||
"resizable": true,
|
||||
"title": "Teyvat Guide",
|
||||
"label": "TeyvatGuide",
|
||||
"additionalBrowserArgs": "--disable-features=msWebOOUI,msPdfOOUI,msSmartScreenProtection --autoplay-policy=no-user-gesture-required",
|
||||
"width": 1600,
|
||||
"height": 900,
|
||||
"center": true,
|
||||
|
||||
54
src/App.vue
@@ -18,10 +18,10 @@ import showSnackbar from "@comp/func/snackbar.js";
|
||||
import TGSqlite from "@Sqlite/index.js";
|
||||
import TSUserAccount from "@Sqlite/modules/userAccount.js";
|
||||
import { app, core, event, webviewWindow } from "@tauri-apps/api";
|
||||
import { PhysicalSize } from "@tauri-apps/api/dpi";
|
||||
import type { Event, UnlistenFn } from "@tauri-apps/api/event";
|
||||
import { currentMonitor, getCurrentWindow } from "@tauri-apps/api/window";
|
||||
import { getCurrentWindow, LogicalSize } from "@tauri-apps/api/window";
|
||||
import { mkdir } from "@tauri-apps/plugin-fs";
|
||||
import { openUrl } from "@tauri-apps/plugin-opener";
|
||||
import { storeToRefs } from "pinia";
|
||||
import { computed, onMounted, onUnmounted, ref } from "vue";
|
||||
import { useRouter } from "vue-router";
|
||||
@@ -30,6 +30,7 @@ import { useAppStore } from "@/store/modules/app.js";
|
||||
import { useUserStore } from "@/store/modules/user.js";
|
||||
import { getBuildTime } from "@/utils/TGBuild.js";
|
||||
import TGLogger from "@/utils/TGLogger.js";
|
||||
import { getWindowSize, resizeWindow } from "@/utils/TGWindow.js";
|
||||
import OtherApi from "@/web/request/otherReq.js";
|
||||
|
||||
const router = useRouter();
|
||||
@@ -40,6 +41,7 @@ const vuetifyTheme = computed<string>(() => (theme.value === "dark" ? "dark" : "
|
||||
|
||||
let themeListener: UnlistenFn | null = null;
|
||||
let urlListener: UnlistenFn | null = null;
|
||||
let resizeListener: UnlistenFn | null = null;
|
||||
|
||||
onMounted(async () => {
|
||||
const win = getCurrentWindow();
|
||||
@@ -51,43 +53,27 @@ onMounted(async () => {
|
||||
await core.invoke("init_app");
|
||||
urlListener = await getDeepLink();
|
||||
}
|
||||
if (needResize.value !== "false") await checkResize();
|
||||
if (needResize.value !== "false") await resizeWindow();
|
||||
document.documentElement.className = theme.value;
|
||||
themeListener = await event.listen<string>("readTheme", (e: Event<string>) => {
|
||||
theme.value = e.payload;
|
||||
document.documentElement.className = theme.value;
|
||||
});
|
||||
resizeListener = await event.listen<string>("needResize", async (e: Event<string>) => {
|
||||
console.log(needResize);
|
||||
const windowCur = webviewWindow.getCurrentWebviewWindow();
|
||||
if (e.payload !== "false") {
|
||||
await resizeWindow();
|
||||
} else {
|
||||
const size = getWindowSize(windowCur.label);
|
||||
await windowCur.setSize(new LogicalSize(size.width, size.height));
|
||||
await windowCur.setZoom(1);
|
||||
}
|
||||
await windowCur.center();
|
||||
});
|
||||
await getCurrentWindow().show();
|
||||
});
|
||||
|
||||
async function checkResize(): Promise<void> {
|
||||
const screen = await currentMonitor();
|
||||
if (screen === null) {
|
||||
showSnackbar.error("获取屏幕信息失败!", 3000);
|
||||
return;
|
||||
}
|
||||
const windowCur = webviewWindow.getCurrentWebviewWindow();
|
||||
if (await windowCur.isMaximized()) return;
|
||||
const designSize = getSize(windowCur.label);
|
||||
const widthScale = screen.size.width / 1920;
|
||||
const heightScale = screen.size.height / 1080;
|
||||
await windowCur.setSize(
|
||||
new PhysicalSize(
|
||||
Math.round(designSize.width * widthScale),
|
||||
Math.round(designSize.height * heightScale),
|
||||
),
|
||||
);
|
||||
await windowCur.setZoom((1 / screen.scaleFactor) * Math.min(widthScale, heightScale));
|
||||
await windowCur.setFocus();
|
||||
return;
|
||||
}
|
||||
|
||||
function getSize(label: string): PhysicalSize {
|
||||
if (label === "TeyvatGuide") return new PhysicalSize(1600, 900);
|
||||
if (label === "Sub_window" || label === "Dev_JSON") return new PhysicalSize(960, 720);
|
||||
return new PhysicalSize(1280, 720);
|
||||
}
|
||||
|
||||
// 启动后只执行一次的监听
|
||||
async function listenOnInit(): Promise<void> {
|
||||
console.info("[App][listenOnInit] 监听初始化事件!");
|
||||
@@ -248,7 +234,7 @@ async function checkUpdate(): Promise<void> {
|
||||
buildTime.value = getBuildTime();
|
||||
await TGSqlite.update();
|
||||
showSnackbar.success("数据库已更新!", 3000);
|
||||
window.open("https://app.btmuli.ink/docs/TeyvatGuide/changelogs.html");
|
||||
await openUrl("https://app.btmuli.ink/docs/TeyvatGuide/changelogs.html");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -261,6 +247,10 @@ onUnmounted(() => {
|
||||
urlListener();
|
||||
urlListener = null;
|
||||
}
|
||||
if (resizeListener !== null) {
|
||||
resizeListener();
|
||||
resizeListener = null;
|
||||
}
|
||||
});
|
||||
</script>
|
||||
<style lang="css" scoped>
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
/*
|
||||
* @file assets/index.css
|
||||
* @description 全局样式文件
|
||||
* @since Beta v0.5.5
|
||||
* @since Beta v0.7.2
|
||||
*/
|
||||
|
||||
@import "fonts/index.css";
|
||||
@import url("themes/default.css");
|
||||
@import url("themes/dark.css");
|
||||
@import "themes/default.css";
|
||||
@import "themes/dark.css";
|
||||
|
||||
:root {
|
||||
/* font */
|
||||
@@ -62,26 +62,27 @@ html {
|
||||
|
||||
/*
|
||||
* @description 侧边滚动条样式
|
||||
* @since Beta v0.5.5
|
||||
* @since Beta v0.7.2
|
||||
*/
|
||||
::-webkit-scrollbar {
|
||||
width: 8px;
|
||||
height: 8px;
|
||||
border-radius: 5px;
|
||||
width: 4px;
|
||||
height: 4px;
|
||||
border-radius: 4px;
|
||||
}
|
||||
|
||||
::-webkit-scrollbar-track {
|
||||
border-radius: 5px;
|
||||
border-radius: 4px;
|
||||
background: var(--common-shadow-2);
|
||||
}
|
||||
|
||||
::-webkit-scrollbar-corner {
|
||||
border-radius: 5px;
|
||||
border-radius: 4px;
|
||||
background: var(--common-shadow-2);
|
||||
}
|
||||
|
||||
::-webkit-scrollbar-thumb {
|
||||
border-radius: 5px;
|
||||
min-height: 48px;
|
||||
border-radius: 4px;
|
||||
background: var(--tgc-od-white);
|
||||
}
|
||||
|
||||
49
src/assets/styles/github.styles.scss
Normal file
@@ -0,0 +1,49 @@
|
||||
/**
|
||||
* @file styles/github.styles.scss
|
||||
* @description GitHub styles
|
||||
* @since Beta v0.7.2
|
||||
*/
|
||||
|
||||
/* Card,传入theme参数 */
|
||||
@mixin github-card($theme: "default") {
|
||||
@include github-card-shadow($theme);
|
||||
|
||||
@if $theme == "default" {
|
||||
border: 1px solid #d1d9e0;
|
||||
background: #ffffff;
|
||||
} @else {
|
||||
border: 1px solid #3d444d;
|
||||
background: #0d1117;
|
||||
}
|
||||
}
|
||||
|
||||
/* CardShadow,传入theme参数 */
|
||||
@mixin github-card-shadow($theme: "default") {
|
||||
@if $theme == "default" {
|
||||
box-shadow:
|
||||
rgba(31, 35, 40, 0.06) 0 1px 1px 0,
|
||||
rgba(31, 35, 40, 0.06) 0 1px 3px 0;
|
||||
} @else {
|
||||
box-shadow:
|
||||
rgba(1, 4, 9, 0.6) 0 1px 1px 0,
|
||||
rgba(1, 4, 9, 0.6) 0 1px 3px 0;
|
||||
}
|
||||
}
|
||||
|
||||
/* Btn,传入theme参数 */
|
||||
@mixin github-btn($theme: "default") {
|
||||
@if $theme == "default" {
|
||||
border: 1px solid #d1d9e0;
|
||||
background: #f6f8fa;
|
||||
} @else {
|
||||
border: 1px solid #3d444d;
|
||||
background: #212830;
|
||||
}
|
||||
}
|
||||
|
||||
/* tags,深色主题 */
|
||||
@mixin github-tag-dark-gen($color: #548af7) {
|
||||
border: 1px solid rgba($color, 0.3);
|
||||
background: rgba($color, 0.18);
|
||||
color: $color;
|
||||
}
|
||||
@@ -1,7 +1,7 @@
|
||||
/**
|
||||
* @file assets/themes/dark.css
|
||||
* @description 主题样式文件-深色主题
|
||||
* @since Beta v0.4.5
|
||||
* @since Beta v0.7.2
|
||||
*/
|
||||
|
||||
/* dark mode */
|
||||
@@ -33,8 +33,6 @@ html.dark {
|
||||
|
||||
/* button */
|
||||
--btn-text: var(--tgc-yellow-1);
|
||||
--btn-bg-1: var(--tgc-dark-5);
|
||||
--btn-text-1: var(--tgc-yellow-1);
|
||||
|
||||
/* box-shadow */
|
||||
--common-shadow-1: rgb(255 255 255 / 10%);
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/**
|
||||
* @file assets/themes/default.css
|
||||
* @description 主题样式文件-默认(浅色)主题
|
||||
* @since Beta v0.4.5
|
||||
* @since Beta v0.7.2
|
||||
*/
|
||||
|
||||
/* default(light) theme */
|
||||
@@ -33,8 +33,6 @@ html.default {
|
||||
|
||||
/* button */
|
||||
--btn-text: var(--tgc-yellow-2); /* with tgc-btn-1 */
|
||||
--btn-bg-1: var(--tgc-yellow-1);
|
||||
--btn-text-1: var(--tgc-blue-1);
|
||||
|
||||
/* box-shadow */
|
||||
--common-shadow-1: rgb(0 0 0 / 10%);
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
<TMiImg alt="navIcon" :src="navItem.icon" :ori="true" />
|
||||
<span>{{ navItem.name }}</span>
|
||||
</div>
|
||||
<div v-if="props.modelValue === 2 && hasNav" class="tgn-nav">
|
||||
<div v-if="hasNav" class="tgn-nav">
|
||||
<v-btn size="25" @click="tryGetCode" title="查看兑换码" icon="mdi-code-tags-check"></v-btn>
|
||||
</div>
|
||||
<ToLivecode v-model="showOverlay" :data="codeData" v-model:actId="actId" />
|
||||
@@ -15,6 +15,7 @@ import TMiImg from "@comp/app/t-mi-img.vue";
|
||||
import showDialog from "@comp/func/dialog.js";
|
||||
import showSnackbar from "@comp/func/snackbar.js";
|
||||
import { emit } from "@tauri-apps/api/event";
|
||||
import { openUrl } from "@tauri-apps/plugin-opener";
|
||||
import { storeToRefs } from "pinia";
|
||||
import { computed, onMounted, ref, shallowRef, watch } from "vue";
|
||||
|
||||
@@ -37,7 +38,6 @@ const showOverlay = ref<boolean>(false);
|
||||
const actId = ref<string>();
|
||||
|
||||
const hasNav = computed<TGApp.BBS.Navigator.Navigator | undefined>(() => {
|
||||
if (props.modelValue !== 2) return undefined;
|
||||
return nav.value.find((item) => item.name === "前瞻直播" || item.name === "直播兑换码");
|
||||
});
|
||||
|
||||
@@ -81,6 +81,7 @@ async function toNav(item: TGApp.BBS.Navigator.Navigator): Promise<void> {
|
||||
await TGLogger.Info(`[TGameNav][toNav] ${item.app_path}`);
|
||||
const link = new URL(item.app_path);
|
||||
const mysList = [
|
||||
"https://ys.mihoyo.com",
|
||||
"https://act.mihoyo.com",
|
||||
"https://webstatic.mihoyo.com",
|
||||
"https://bbs.mihoyo.com",
|
||||
@@ -93,10 +94,10 @@ async function toNav(item: TGApp.BBS.Navigator.Navigator): Promise<void> {
|
||||
}
|
||||
// 如果不在上面的域名里面,就直接打开
|
||||
if (!mysList.includes(link.origin)) {
|
||||
window.open(item.app_path);
|
||||
await openUrl(item.app_path);
|
||||
return;
|
||||
}
|
||||
if (item.name === "签到福利") {
|
||||
if (item.name === "签到福利" || item.name === "每日签到") {
|
||||
await TGClient.open("web_act_thin", item.app_path);
|
||||
return;
|
||||
}
|
||||
@@ -112,78 +113,49 @@ async function toNav(item: TGApp.BBS.Navigator.Navigator): Promise<void> {
|
||||
// 处理 protocol
|
||||
async function toBBS(link: URL): Promise<void> {
|
||||
if (link.protocol == "mihoyobbs:") {
|
||||
if (link.pathname.startsWith("//article")) {
|
||||
if (link.hostname === "article") {
|
||||
const postId = link.pathname.split("/").pop();
|
||||
await createPost(<string>postId);
|
||||
return;
|
||||
}
|
||||
if (link.pathname.startsWith("//forum")) {
|
||||
if (link.hostname === "forum") {
|
||||
const forumId = link.pathname.split("/").pop();
|
||||
const localPath = getLocalPath(forumId);
|
||||
if (localPath === "") {
|
||||
showSnackbar.warn(`不支持的链接:${link.href}`);
|
||||
return;
|
||||
}
|
||||
const localPath = `/posts/forum/${props.modelValue}/${forumId}`;
|
||||
await emit("active_deep_link", `router?path=${localPath}`);
|
||||
return;
|
||||
}
|
||||
}
|
||||
showSnackbar.warn(`不支持的链接:${link.href}`);
|
||||
}
|
||||
|
||||
// todo 动态获取版块列表
|
||||
function getLocalPath(forum?: string): string {
|
||||
if (!forum) return "";
|
||||
const forumLocalMap: Record<string, string> = {
|
||||
"31": "/news/3", // 崩坏2 官方
|
||||
"6": "/news/1", // 崩坏3 官方
|
||||
"28": "/news/2", // 原神官方
|
||||
"33": "/news/4", // 未定官方
|
||||
"58": "/news/8", // 绝区零官方
|
||||
"36": "/news/5", // 大别野公告
|
||||
};
|
||||
if (forumLocalMap[forum]) return forumLocalMap[forum];
|
||||
const ysForums = ["26", "43", "29", "49", "50"];
|
||||
const srForums = ["52", "61", "56", "62"];
|
||||
const bh3Forums = ["1", "14", "4", "41"];
|
||||
const bh2Forums = ["30", "51", "40"];
|
||||
const wdForums = ["37", "60", "42", "38"];
|
||||
const zzzForums = ["57", "59", "64", "65"];
|
||||
const dbyForums = ["54", "35", "34", "39", "47", "48", "55", "36"];
|
||||
if (ysForums.includes(forum)) return `/posts/forum/2/${forum}`;
|
||||
if (srForums.includes(forum)) return `/posts/forum/6/${forum}`;
|
||||
if (bh3Forums.includes(forum)) return `/posts/forum/1/${forum}`;
|
||||
if (bh2Forums.includes(forum)) return `/posts/forum/3/${forum}`;
|
||||
if (wdForums.includes(forum)) return `/posts/forum/4/${forum}`;
|
||||
if (zzzForums.includes(forum)) return `/posts/forum/8/${forum}`;
|
||||
if (dbyForums.includes(forum)) return `/posts/forum/5/${forum}`;
|
||||
return "";
|
||||
}
|
||||
</script>
|
||||
<style lang="css" scoped>
|
||||
<style lang="scss" scoped>
|
||||
@use "@styles/github.styles.scss" as github-styles;
|
||||
|
||||
.tgn-container {
|
||||
position: relative;
|
||||
display: flex;
|
||||
padding: 5px;
|
||||
gap: 10px;
|
||||
padding: 8px;
|
||||
gap: 8px;
|
||||
}
|
||||
|
||||
.tgn-nav {
|
||||
@include github-styles.github-card();
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
padding: 5px;
|
||||
border-radius: 5px;
|
||||
-webkit-backdrop-filter: blur(20px);
|
||||
backdrop-filter: blur(20px);
|
||||
background: var(--common-shadow-t-4);
|
||||
box-shadow: 0 0 5px var(--common-shadow-4);
|
||||
padding: 4px;
|
||||
border-radius: 4px;
|
||||
color: var(--tgc-white-1);
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.dark .tgn-nav {
|
||||
@include github-styles.github-card("dark");
|
||||
}
|
||||
|
||||
.tgn-nav img {
|
||||
width: 25px;
|
||||
height: 25px;
|
||||
width: 28px;
|
||||
height: 28px;
|
||||
}
|
||||
|
||||
.tgn-nav span {
|
||||
|
||||
@@ -68,8 +68,8 @@ const props = defineProps<TItemBoxProps>();
|
||||
left: 0;
|
||||
overflow: hidden;
|
||||
width: v-bind("props.modelValue.size");
|
||||
border-radius: 5px;
|
||||
aspect-ratio: 1;
|
||||
height: v-bind("props.modelValue.height");
|
||||
border-radius: 4px;
|
||||
}
|
||||
|
||||
.tib-bg img {
|
||||
@@ -82,8 +82,8 @@ const props = defineProps<TItemBoxProps>();
|
||||
position: relative;
|
||||
overflow: hidden;
|
||||
width: v-bind("props.modelValue.size");
|
||||
border-radius: 5px;
|
||||
aspect-ratio: 1;
|
||||
height: v-bind("props.modelValue.height");
|
||||
border-radius: 4px;
|
||||
}
|
||||
|
||||
.tib-icon img {
|
||||
@@ -98,11 +98,11 @@ const props = defineProps<TItemBoxProps>();
|
||||
left: 0;
|
||||
display: flex;
|
||||
width: v-bind("props.modelValue.size");
|
||||
height: v-bind("props.modelValue.height");
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
border-radius: 5px;
|
||||
aspect-ratio: 1;
|
||||
border-radius: 4px;
|
||||
}
|
||||
|
||||
.tib-lt {
|
||||
@@ -111,9 +111,9 @@ const props = defineProps<TItemBoxProps>();
|
||||
left: 3%;
|
||||
display: flex;
|
||||
width: v-bind("props.modelValue.ltSize");
|
||||
height: v-bind("props.modelValue.ltSize");
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
aspect-ratio: 1;
|
||||
}
|
||||
|
||||
.tib-lt img {
|
||||
@@ -128,12 +128,12 @@ const props = defineProps<TItemBoxProps>();
|
||||
right: 0;
|
||||
display: flex;
|
||||
width: v-bind("props.modelValue.rtSize");
|
||||
height: v-bind("props.modelValue.rtSize");
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
aspect-ratio: 1;
|
||||
background: rgb(0 0 0 / 40%);
|
||||
border-bottom-left-radius: 5px;
|
||||
border-top-right-radius: 5px;
|
||||
border-bottom-left-radius: 4px;
|
||||
border-top-right-radius: 4px;
|
||||
color: var(--tgc-white-1);
|
||||
font-family: var(--font-title);
|
||||
}
|
||||
@@ -145,13 +145,15 @@ const props = defineProps<TItemBoxProps>();
|
||||
display: flex;
|
||||
width: 100%;
|
||||
height: v-bind("props.modelValue.innerHeight ?? 0") px;
|
||||
flex-grow: 1;
|
||||
flex-shrink: 0;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
-webkit-backdrop-filter: blur(v-bind("props.modelValue.innerBlur ?? 0"));
|
||||
backdrop-filter: blur(v-bind("props.modelValue.innerBlur ?? 0"));
|
||||
background: rgb(20 20 20 / 40%);
|
||||
border-bottom-left-radius: 5px;
|
||||
border-bottom-right-radius: 5px;
|
||||
border-bottom-left-radius: 4px;
|
||||
border-bottom-right-radius: 4px;
|
||||
color: var(--tgc-white-1);
|
||||
font-family: var(--font-title);
|
||||
font-size: v-bind("((props.modelValue.innerHeight ?? 0) / 2).toString() + 'px'");
|
||||
@@ -159,8 +161,8 @@ const props = defineProps<TItemBoxProps>();
|
||||
|
||||
.tib-inner img {
|
||||
width: v-bind("(props.modelValue.innerHeight ?? 0).toString() + 'px'");
|
||||
height: v-bind("(props.modelValue.innerHeight ?? 0).toString() + 'px'");
|
||||
padding: 1px;
|
||||
aspect-ratio: 1;
|
||||
}
|
||||
|
||||
.tib-inner span {
|
||||
|
||||
@@ -33,6 +33,10 @@ const localUrl = ref<string>();
|
||||
|
||||
onMounted(async () => {
|
||||
if (!props.src) return;
|
||||
if (!props.src.startsWith("http")) {
|
||||
localUrl.value = props.src;
|
||||
return;
|
||||
}
|
||||
const link = props.ori ? props.src : appStore.getImageUrl(props.src);
|
||||
localUrl.value = await saveImgLocal(link);
|
||||
});
|
||||
|
||||
@@ -14,11 +14,7 @@ import { onMounted, ref } from "vue";
|
||||
|
||||
const isPined = ref<boolean>(false);
|
||||
|
||||
onMounted(async () => {
|
||||
// 因为无法获取窗口是否置顶,这边手动取消置顶
|
||||
// 详见:https://github.com/tauri-apps/tauri/issues/11078
|
||||
await getCurrentWindow().setAlwaysOnTop(false);
|
||||
});
|
||||
onMounted(async () => (isPined.value = await getCurrentWindow().isAlwaysOnTop()));
|
||||
|
||||
async function switchPin(): Promise<void> {
|
||||
isPined.value = !isPined.value;
|
||||
|
||||
@@ -1,9 +1,8 @@
|
||||
<template>
|
||||
<div v-if="card" :id="`post-card-${card.postId}`" class="tpc-card">
|
||||
<div class="tpc-top">
|
||||
<div class="tpc-cover" @click="createPost(card)">
|
||||
<img :src="localCover" alt="cover" v-if="localCover" />
|
||||
<v-progress-circular color="primary" :indeterminate="true" v-else-if="card.cover !== ''" />
|
||||
<div class="tpc-cover" @click="toPost()">
|
||||
<TMiImg :src="card.cover" alt="cover" :ori="true" v-if="card.cover !== ''" />
|
||||
<img src="/source/UI/defaultCover.webp" alt="cover" v-else />
|
||||
<div v-if="card.status" class="tpc-act">
|
||||
<div class="tpc-status">{{ card.status?.label }}</div>
|
||||
@@ -16,37 +15,60 @@
|
||||
<div class="tpc-title" :title="card.title" @click="shareCard">{{ card.title }}</div>
|
||||
</div>
|
||||
<div class="tpc-mid" v-if="card.user !== null">
|
||||
<TpAvatar :data="card.user" position="left" />
|
||||
<TpAvatar
|
||||
:data="card.user"
|
||||
position="left"
|
||||
:style="{ cursor: props.userClick ? 'pointer' : 'default' }"
|
||||
@click="onUserClick()"
|
||||
/>
|
||||
</div>
|
||||
<div class="tpc-bottom" v-if="card.data !== null">
|
||||
<div class="tpc-bottom">
|
||||
<div class="tpc-tags">
|
||||
<div v-for="(reason, idx) in card.reasons" :key="idx" class="tpc-reason" title="推荐理由">
|
||||
<v-icon size="12">mdi-lightbulb-on</v-icon>
|
||||
<span>{{ reason.text }}</span>
|
||||
</div>
|
||||
<div v-for="topic in card.topics" :key="topic.id" class="tpc-tag" @click="toTopic(topic)">
|
||||
<v-icon size="10">mdi-tag</v-icon>
|
||||
<v-icon size="12">mdi-tag</v-icon>
|
||||
<span>{{ topic.name }}</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="tpc-data">
|
||||
<div class="tpc-data" v-if="card.data !== null">
|
||||
<div class="tpc-info-item" :title="`浏览数:${card.data.view}`">
|
||||
<v-icon>mdi-eye</v-icon>
|
||||
<v-icon size="12">mdi-eye</v-icon>
|
||||
<span>{{ card.data.view }}</span>
|
||||
</div>
|
||||
<div class="tpc-info-item" :title="`收藏数:${card.data.mark}`">
|
||||
<v-icon>mdi-star</v-icon>
|
||||
<v-icon size="12">mdi-star</v-icon>
|
||||
<span>{{ card.data.mark }}</span>
|
||||
</div>
|
||||
<div class="tpc-info-item" :title="`回复数:${card.data.reply}`">
|
||||
<v-icon>mdi-comment</v-icon>
|
||||
<v-icon size="12">mdi-comment</v-icon>
|
||||
<span>{{ card.data.reply }}</span>
|
||||
</div>
|
||||
<div class="tpc-info-item" :title="`点赞数:${card.data.like}`">
|
||||
<v-icon>mdi-thumb-up</v-icon>
|
||||
<v-icon size="12">mdi-thumb-up</v-icon>
|
||||
<span>{{ card.data.like }}</span>
|
||||
</div>
|
||||
<div class="tpc-info-item" :title="`转发数:${card.data.forward}`">
|
||||
<v-icon>mdi-share-variant</v-icon>
|
||||
<v-icon size="12">mdi-share-variant</v-icon>
|
||||
<span>{{ card.data.forward }}</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="tpc-data">
|
||||
<div class="tpc-info-item" :title="`创建时间: ${card.meta.create_time}`">
|
||||
<v-icon size="12">mdi-calendar-clock</v-icon>
|
||||
<span>{{ card.meta.create_time }}</span>
|
||||
</div>
|
||||
<div
|
||||
v-if="card.meta.update_time"
|
||||
class="tpc-info-item"
|
||||
:title="`更新时间: ${card.meta.update_time}`"
|
||||
>
|
||||
<v-icon size="12">mdi-calendar-edit</v-icon>
|
||||
<span>{{ card.meta.update_time }}</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div
|
||||
class="tpc-forum"
|
||||
@@ -54,7 +76,7 @@
|
||||
:title="`频道: ${card.forum.name}`"
|
||||
@click="toForum(card.forum)"
|
||||
>
|
||||
<img :src="card.forum.icon" :alt="card.forum.name" />
|
||||
<img v-if="card.forum.icon !== ''" :src="card.forum.icon" :alt="card.forum.name" />
|
||||
<span>{{ card.forum.name }}</span>
|
||||
</div>
|
||||
<v-checkbox-btn
|
||||
@@ -67,94 +89,100 @@
|
||||
</div>
|
||||
</template>
|
||||
<script lang="ts" setup>
|
||||
import TMiImg from "@comp/app/t-mi-img.vue";
|
||||
import showSnackbar from "@comp/func/snackbar.js";
|
||||
import TpAvatar from "@comp/viewPost/tp-avatar.vue";
|
||||
import { emit } from "@tauri-apps/api/event";
|
||||
import { computed, onMounted, onUnmounted, ref, shallowRef, watch } from "vue";
|
||||
import { computed, onMounted, shallowRef, watch } from "vue";
|
||||
import { useRoute, useRouter } from "vue-router";
|
||||
|
||||
import { generateShareImg, saveImgLocal } from "@/utils/TGShare.js";
|
||||
import { generateShareImg } from "@/utils/TGShare.js";
|
||||
import { createPost } from "@/utils/TGWindow.js";
|
||||
import { timestampToDate } from "@/utils/toolFunc.js";
|
||||
|
||||
type TPostCardProps = { modelValue: TGApp.Plugins.Mys.Post.FullData; selectMode?: boolean };
|
||||
type TPostCardEmits = (e: "onSelected", v: string) => void;
|
||||
type TPostStatus = TGApp.Plugins.Mys.News.RenderStatus & { stat: ActStat };
|
||||
type TPostCardProps = {
|
||||
modelValue: TGApp.BBS.Post.FullData;
|
||||
selectMode?: boolean;
|
||||
userClick?: boolean;
|
||||
};
|
||||
type TPostCardEmits = {
|
||||
(e: "onSelected", v: string): void;
|
||||
(e: "onUserClick", v: TGApp.BBS.Post.User): void;
|
||||
};
|
||||
type RenderForum = { name: string; icon: string; id: number };
|
||||
type RenderStatus = { stat: number; label: string; color: string };
|
||||
type RenderData = { mark: number; forward: number; like: number; reply: number; view: number };
|
||||
type RenderMeta = { create_time: string; update_time?: string };
|
||||
export type RenderCard = {
|
||||
title: string;
|
||||
cover: string;
|
||||
postId: number;
|
||||
subtitle: string;
|
||||
user: TGApp.BBS.Post.User | null;
|
||||
forum: RenderForum | null;
|
||||
data: RenderData | null;
|
||||
meta: RenderMeta;
|
||||
status?: RenderStatus;
|
||||
topics: Array<TGApp.BBS.Post.Topic>;
|
||||
reasons: Array<TGApp.BBS.Post.RecommendTags>;
|
||||
};
|
||||
|
||||
enum ActStat {
|
||||
UNKNOWN,
|
||||
STARTED,
|
||||
FINISHED,
|
||||
SELECTION,
|
||||
}
|
||||
|
||||
const stats: Readonly<Array<TPostStatus>> = [
|
||||
{ stat: ActStat.UNKNOWN, label: "未知", color: "var(--tgc-od-red)" },
|
||||
{ stat: ActStat.STARTED, label: "进行中", color: "var(--tgc-od-green)" },
|
||||
{ stat: ActStat.FINISHED, label: "已结束", color: "var(--tgc-od-white)" },
|
||||
{ stat: ActStat.SELECTION, label: "评选中", color: "var(--tgc-od-orange)" },
|
||||
const stats: Readonly<Array<RenderStatus>> = [
|
||||
{ stat: 0, label: "未知", color: "var(--tgc-od-red)" },
|
||||
{ stat: 1, label: "进行中", color: "var(--tgc-od-green)" },
|
||||
{ stat: 2, label: "已结束", color: "var(--tgc-od-white)" },
|
||||
{ stat: 3, label: "评选中", color: "var(--tgc-od-orange)" },
|
||||
];
|
||||
const route = useRoute();
|
||||
const router = useRouter();
|
||||
const props = withDefaults(defineProps<TPostCardProps>(), { selectMode: false });
|
||||
const emits = defineEmits<TPostCardEmits>();
|
||||
const card = shallowRef<TGApp.Plugins.Mys.News.RenderCard>();
|
||||
const localCover = ref<string>();
|
||||
const card = shallowRef<RenderCard>();
|
||||
|
||||
const cardBg = computed<string>(() => {
|
||||
if (card.value && card.value.status) return card.value.status.color;
|
||||
return "none";
|
||||
});
|
||||
|
||||
onMounted(async () => await reload(props.modelValue));
|
||||
onMounted(async () => (card.value = getPostCard(props.modelValue)));
|
||||
|
||||
watch(
|
||||
() => props.modelValue,
|
||||
async () => await reload(props.modelValue),
|
||||
async () => (card.value = getPostCard(props.modelValue)),
|
||||
);
|
||||
|
||||
async function reload(data: TGApp.Plugins.Mys.Post.FullData): Promise<void> {
|
||||
if (localCover.value) {
|
||||
URL.revokeObjectURL(localCover.value);
|
||||
localCover.value = undefined;
|
||||
async function toPost(): Promise<void> {
|
||||
if (!card.value) return;
|
||||
if (route.name !== "帖子详情") {
|
||||
await createPost(card.value);
|
||||
return;
|
||||
}
|
||||
card.value = getPostCard(data);
|
||||
if (card.value && card.value.cover !== "") {
|
||||
localCover.value = await saveImgLocal(card.value.cover);
|
||||
if (route.params.post_id.toString() === card.value.postId.toString()) {
|
||||
showSnackbar.warn("当前已在该帖子详情页", 3000);
|
||||
return;
|
||||
}
|
||||
await router.push({ name: "帖子详情", params: { post_id: card.value.postId.toString() } });
|
||||
}
|
||||
|
||||
onUnmounted(() => {
|
||||
if (localCover.value) {
|
||||
URL.revokeObjectURL(localCover.value);
|
||||
localCover.value = undefined;
|
||||
}
|
||||
});
|
||||
|
||||
function getActivityStatus(status: number): TGApp.Plugins.Mys.News.RenderStatus {
|
||||
if (status satisfies ActStat) {
|
||||
const stat: ActStat = status;
|
||||
return stats[stat];
|
||||
}
|
||||
return stats[ActStat.UNKNOWN];
|
||||
function getActivityStatus(status: number): RenderStatus {
|
||||
let idx = stats.findIndex((v) => v.stat === status);
|
||||
if (idx === -1) idx = 0;
|
||||
return stats[idx];
|
||||
}
|
||||
|
||||
function getPostCover(item: TGApp.Plugins.Mys.Post.FullData): string {
|
||||
function getPostCover(item: TGApp.BBS.Post.FullData): string {
|
||||
let cover;
|
||||
if (item.cover) cover = item.cover.url;
|
||||
else if (item.post.cover) cover = item.post.cover;
|
||||
else if (item.post.images.length > 0) cover = item.post.images[0];
|
||||
if (cover === undefined) return "";
|
||||
if (cover.endsWith(".gif")) return cover;
|
||||
// return `${cover}?x-oss-process=image/resize,m_fill,w_360,h_130,limit_0/format,jpg/quality,Q_${imageQualityPercent.value}`;
|
||||
return `${cover}?x-oss-process=image/resize,m_fill,w_360,h_130,limit_0/format,png`;
|
||||
return `${cover}?x-oss-process=image/resize,m_fill,w_690,h_320,limit_0/format,png`;
|
||||
}
|
||||
|
||||
/**
|
||||
* @description 获取公共属性
|
||||
* @since Beta v0.6.1
|
||||
* @param {TGApp.Plugins.Mys.Post.FullData} item 咨讯列表项
|
||||
* @returns {TGApp.Plugins.Mys.News.RenderCard} 渲染用咨讯列表项
|
||||
*/
|
||||
function getCommonCard(item: TGApp.Plugins.Mys.Post.FullData): TGApp.Plugins.Mys.News.RenderCard {
|
||||
let forumData: TGApp.Plugins.Mys.News.RenderForum | null = null;
|
||||
let statData: TGApp.Plugins.Mys.News.RenderData | null = null;
|
||||
function getCommonCard(item: TGApp.BBS.Post.FullData): RenderCard {
|
||||
let forumData: RenderForum | null = null;
|
||||
let statData: RenderData | null = null;
|
||||
if (item.forum !== null) {
|
||||
forumData = { name: item.forum.name, icon: item.forum.icon, id: item.forum.id };
|
||||
}
|
||||
@@ -167,6 +195,11 @@ function getCommonCard(item: TGApp.Plugins.Mys.Post.FullData): TGApp.Plugins.Mys
|
||||
view: item.stat.view_num,
|
||||
};
|
||||
}
|
||||
const metaData: RenderMeta = {
|
||||
create_time: timestampToDate(Number(item.post.created_at) * 1000),
|
||||
update_time:
|
||||
item.post.updated_at === 0 ? undefined : timestampToDate(Number(item.post.updated_at) * 1000),
|
||||
};
|
||||
return {
|
||||
title: item.post.subject,
|
||||
cover: getPostCover(item),
|
||||
@@ -175,11 +208,13 @@ function getCommonCard(item: TGApp.Plugins.Mys.Post.FullData): TGApp.Plugins.Mys
|
||||
user: item.user,
|
||||
forum: forumData,
|
||||
data: statData,
|
||||
meta: metaData,
|
||||
topics: item.topics,
|
||||
reasons: item.recommend_reason?.tags ?? [],
|
||||
};
|
||||
}
|
||||
|
||||
function getPostCard(item: TGApp.Plugins.Mys.Post.FullData): TGApp.Plugins.Mys.News.RenderCard {
|
||||
function getPostCard(item: TGApp.BBS.Post.FullData): RenderCard {
|
||||
const commonCard = getCommonCard(item);
|
||||
if (
|
||||
item.news_meta !== undefined &&
|
||||
@@ -196,6 +231,7 @@ function getPostCard(item: TGApp.Plugins.Mys.Post.FullData): TGApp.Plugins.Mys.N
|
||||
}
|
||||
|
||||
async function shareCard(): Promise<void> {
|
||||
console.log(props.modelValue);
|
||||
if (!card.value) return;
|
||||
const shareDom = document.querySelector<HTMLDivElement>(`#post-card-${card.value.postId}`);
|
||||
if (shareDom === null) {
|
||||
@@ -206,18 +242,26 @@ async function shareCard(): Promise<void> {
|
||||
await generateShareImg(fileName, shareDom, 2.5);
|
||||
}
|
||||
|
||||
async function toTopic(topic: TGApp.Plugins.Mys.Topic.Info): Promise<void> {
|
||||
async function toTopic(topic: TGApp.BBS.Post.Topic): Promise<void> {
|
||||
const gid = props.modelValue.post.game_id;
|
||||
await emit("active_deep_link", `router?path=/posts/topic/${gid}/${topic.id}`);
|
||||
}
|
||||
|
||||
async function toForum(forum: TGApp.Plugins.Mys.News.RenderForum): Promise<void> {
|
||||
async function toForum(forum: RenderForum): Promise<void> {
|
||||
const gid = props.modelValue.post.game_id;
|
||||
await emit("active_deep_link", `router?path=/posts/forum/${gid}/${forum.id}`);
|
||||
}
|
||||
|
||||
function onUserClick(): void {
|
||||
if (!card.value || card.value.user === null) return;
|
||||
emits("onUserClick", card.value.user);
|
||||
}
|
||||
</script>
|
||||
<style lang="css" scoped>
|
||||
<style lang="scss" scoped>
|
||||
@use "@styles/github.styles.scss" as github-styles;
|
||||
|
||||
.tpc-card {
|
||||
@include github-styles.github-card();
|
||||
position: relative;
|
||||
display: flex;
|
||||
overflow: hidden;
|
||||
@@ -226,11 +270,12 @@ async function toForum(forum: TGApp.Plugins.Mys.News.RenderForum): Promise<void>
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
border: 1px solid var(--common-shadow-1);
|
||||
border-radius: 5px;
|
||||
background: var(--box-bg-1);
|
||||
box-shadow: 2px 2px 5px var(--common-shadow-2);
|
||||
row-gap: 10px;
|
||||
border-radius: 4px;
|
||||
row-gap: 8px;
|
||||
}
|
||||
|
||||
.dark .tpc-card {
|
||||
@include github-styles.github-card("dark");
|
||||
}
|
||||
|
||||
.tpc-top {
|
||||
@@ -239,7 +284,7 @@ async function toForum(forum: TGApp.Plugins.Mys.News.RenderForum): Promise<void>
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
row-gap: 5px;
|
||||
row-gap: 4px;
|
||||
}
|
||||
|
||||
.tpc-cover {
|
||||
@@ -249,13 +294,14 @@ async function toForum(forum: TGApp.Plugins.Mys.News.RenderForum): Promise<void>
|
||||
width: 100%;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
aspect-ratio: 36 / 13;
|
||||
aspect-ratio: 69 / 32;
|
||||
background: var(--common-shadow-2);
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.tpc-cover img {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
object-fit: cover;
|
||||
object-position: center;
|
||||
transition: all 0.3s linear;
|
||||
@@ -263,8 +309,11 @@ async function toForum(forum: TGApp.Plugins.Mys.News.RenderForum): Promise<void>
|
||||
|
||||
.tpc-mid {
|
||||
position: relative;
|
||||
width: 100%;
|
||||
width: fit-content;
|
||||
max-width: 100%;
|
||||
box-sizing: border-box;
|
||||
padding: 0 10px;
|
||||
margin-right: auto;
|
||||
}
|
||||
|
||||
.tpc-bottom {
|
||||
@@ -272,45 +321,55 @@ async function toForum(forum: TGApp.Plugins.Mys.News.RenderForum): Promise<void>
|
||||
display: flex;
|
||||
width: 100%;
|
||||
flex-direction: column;
|
||||
padding: 5px 10px;
|
||||
row-gap: 5px;
|
||||
padding: 4px 8px;
|
||||
}
|
||||
|
||||
.tpc-title {
|
||||
overflow: hidden;
|
||||
width: 100%;
|
||||
padding: 5px 10px;
|
||||
position: relative;
|
||||
width: fit-content;
|
||||
max-width: 100%;
|
||||
padding: 4px 8px;
|
||||
margin-right: auto;
|
||||
cursor: pointer;
|
||||
font-family: var(--font-title);
|
||||
font-size: 18px;
|
||||
text-overflow: ellipsis;
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
.tpc-tags {
|
||||
display: flex;
|
||||
width: fit-content;
|
||||
max-width: 100%;
|
||||
flex-wrap: wrap;
|
||||
align-items: flex-start;
|
||||
justify-content: flex-start;
|
||||
color: var(--box-text-5);
|
||||
font-size: 12px;
|
||||
gap: 5px;
|
||||
|
||||
:hover {
|
||||
color: var(--box-text-3);
|
||||
}
|
||||
gap: 4px;
|
||||
}
|
||||
|
||||
.tpc-tag {
|
||||
@include github-styles.github-tag-dark-gen(#e06c63);
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
padding: 0 3px;
|
||||
border: 1px solid var(--common-shadow-1);
|
||||
border-radius: 5px;
|
||||
background: var(--box-bg-2);
|
||||
padding: 0 4px;
|
||||
border-radius: 4px;
|
||||
cursor: pointer;
|
||||
gap: 3px;
|
||||
gap: 4px;
|
||||
|
||||
&:hover {
|
||||
@include github-styles.github-tag-dark-gen(#00aeec);
|
||||
}
|
||||
}
|
||||
|
||||
.tpc-reason {
|
||||
@include github-styles.github-tag-dark-gen(#d19a66);
|
||||
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
padding: 0 4px;
|
||||
border-radius: 4px;
|
||||
gap: 4px;
|
||||
}
|
||||
|
||||
.tpc-forum {
|
||||
@@ -320,15 +379,15 @@ async function toForum(forum: TGApp.Plugins.Mys.News.RenderForum): Promise<void>
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: flex-start;
|
||||
padding: 5px;
|
||||
-webkit-backdrop-filter: blur(20px);
|
||||
backdrop-filter: blur(20px);
|
||||
background: var(--common-shadow-2);
|
||||
border-bottom-left-radius: 5px;
|
||||
padding: 4px;
|
||||
background: var(--tgc-od-white);
|
||||
border-bottom-left-radius: 4px;
|
||||
border-top-right-radius: 4px;
|
||||
box-shadow: 0 0 10px var(--tgc-dark-1);
|
||||
color: var(--tgc-white-1);
|
||||
cursor: pointer;
|
||||
text-shadow: 0 0 5px var(--tgc-dark-1);
|
||||
opacity: 0.8;
|
||||
text-shadow: 0 0 4px var(--tgc-dark-1);
|
||||
}
|
||||
|
||||
.tpc-select {
|
||||
@@ -361,12 +420,13 @@ async function toForum(forum: TGApp.Plugins.Mys.News.RenderForum): Promise<void>
|
||||
|
||||
.tpc-data {
|
||||
display: flex;
|
||||
width: 100%;
|
||||
width: fit-content;
|
||||
max-width: 100%;
|
||||
height: 20px;
|
||||
align-items: center;
|
||||
justify-content: flex-end;
|
||||
padding: 5px;
|
||||
column-gap: 10px;
|
||||
justify-content: center;
|
||||
margin-left: auto;
|
||||
column-gap: 8px;
|
||||
}
|
||||
|
||||
.tpc-info-item {
|
||||
@@ -375,7 +435,8 @@ async function toForum(forum: TGApp.Plugins.Mys.News.RenderForum): Promise<void>
|
||||
justify-content: flex-start;
|
||||
color: var(--box-text-7);
|
||||
font-size: 12px;
|
||||
gap: 5px;
|
||||
gap: 2px;
|
||||
white-space: nowrap;
|
||||
opacity: 0.6;
|
||||
}
|
||||
|
||||
@@ -398,7 +459,7 @@ async function toForum(forum: TGApp.Plugins.Mys.News.RenderForum): Promise<void>
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: flex-start;
|
||||
padding: 5px 30px 5px 5px;
|
||||
padding: 4px 30px 4px 4px;
|
||||
background-color: v-bind(cardBg);
|
||||
clip-path: polygon(0 0, calc(100% - 15px) 0, 100% 50%, calc(100% - 15px) 100%, 0 100%);
|
||||
color: var(--tgc-white-1);
|
||||
@@ -425,9 +486,9 @@ async function toForum(forum: TGApp.Plugins.Mys.News.RenderForum): Promise<void>
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: flex-start;
|
||||
margin: 5px;
|
||||
margin: 4px;
|
||||
color: var(--tgc-white-1);
|
||||
gap: 5px;
|
||||
gap: 4px;
|
||||
opacity: 0.8;
|
||||
}
|
||||
|
||||
@@ -438,15 +499,16 @@ async function toForum(forum: TGApp.Plugins.Mys.News.RenderForum): Promise<void>
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
padding: 0 5px;
|
||||
padding: 0 4px;
|
||||
-webkit-backdrop-filter: blur(20px);
|
||||
backdrop-filter: blur(20px);
|
||||
background: var(--common-shadow-1);
|
||||
border-bottom-right-radius: 5px;
|
||||
border-top-left-radius: 5px;
|
||||
box-shadow: 2px 2px 5px var(--tgc-dark-1);
|
||||
background: var(--tgc-od-orange);
|
||||
border-bottom-right-radius: 4px;
|
||||
border-top-left-radius: 4px;
|
||||
box-shadow: 2px 2px 4px var(--tgc-dark-1);
|
||||
color: var(--tgc-white-1);
|
||||
font-size: 12px;
|
||||
text-shadow: 0 0 5px var(--tgc-dark-1);
|
||||
opacity: 0.8;
|
||||
text-shadow: 0 0 4px var(--tgc-dark-1);
|
||||
}
|
||||
</style>
|
||||
|
||||