18 Commits
Author SHA1 Message Date
Noah e988af8268 chore(deps): 升级前端三方依赖至最新稳定版并适配 (#1710)
* chore(deps): 升级 Next.js 14→16、React 18→19 及 TypeScript/ESLint/sass 工具链

- next 14.2 → 16.3.5(Turbopack 成为默认打包器,`output: 'export'` 与 out/ 页面文件名不变)
- react / react-dom 18.3 → 19.3,@types/react(-dom) 同步到 19.3
- qrcode.react 3 → 4、react-json-tree 0.19 → 0.20:仅为满足 React 19 的 peerDependency,API 用法不变
- typescript 5.9 → 6.0.3;tsconfig `target` es5 → ES2017(TS 6 弃用 es5,TS 7 已移除),
  `jsx` preserve → react-jsx(Next 16 强制),include 补 `.next/dev/types`
- next-env.d.ts 改为由 Next 生成、不再入库(官方文档要求,且 dev/build 会写入不同内容;
  仓库 .gitignore 已有 `/*.ts` 规则覆盖)
- eslint 8 → 9.39.5,eslint-config-next 16,eslint-config-prettier 10:
  Next 16 移除了 `next lint`,`.eslintrc.json` 迁移为 flat config `eslint.config.mjs`,
  `npm run lint` 改为直接调用 `eslint .`;eslint-plugin-react-hooks 7 新增的
  React Compiler 规则暂降为 warn(命中的都是既有写法,与本次升级无关)
- sass 1.97 → 1.104、@types/node 20 → 26(仅类型)
- next.config.js 关闭 Next 16.3 新增的 `agentRules`,避免 `next dev` 在仓库根目录生成 AGENTS.md

未升到最新的两项及原因:
- typescript 7.0.2 为原生实现、不再提供 JS API,eslint-config-next 依赖的 typescript-eslint
  明确拒绝 TS 7(`>=4.8.4 <6.1.0`),故停在 6.0.3
- eslint 10 移除了 `context.getFilename()`,eslint-config-next 依赖的 eslint-plugin-react 7.37.5
  尚未适配(peer `^9.7`),故停在 9.x 最后一版

* fix(ui): 适配 React 19 的类型变更

@types/react 19 带来的四类编译错误,逐个按最小改动处理,不涉及运行时逻辑:

- `useRef<T>()` 不再允许省略初始值 → `useRef<FormApi>(undefined)`(6 处,`.current` 类型不变)
- `useRef<HTMLDivElement>(null)` 现返回 `RefObject<HTMLDivElement | null>`,
  logviewer 的 `LogContent` props 类型同步放宽
- 全局 `JSX` 命名空间被移除 → `React.JSX.Element`(AvatarCard)
- `ReactElement` 的 props 默认类型由 `any` 改为 `unknown`,
  TemplateModal / OverrideModal 里 `cloneElement` 注入 onClick 的地方给 `isValidElement`
  标注具体的 props 形状,替代原来的 `<any>`
- 顺带删掉 layout.tsx 里一条已无作用的 `eslint-disable-next-line react-hooks/exhaustive-deps`
  (eslint-plugin-react-hooks 7 对该处不再报告,ESLint 会提示未使用的 disable 指令)

* chore(deps): 升级 Semi Design 2.89→2.103 及 swr/artplayer/mpegts.js,适配 ArrayField.add 新签名

- @douyinfe/semi-ui 2.89.1 → 2.103.0(semi-icons / semi-foundation 随之同步),同一 major,
  用到的 Form / Tabs / Collapse / Modal / Table / Select 等组件 API 未变
- ArrayField 的 `add` 由 `() => void` 变为 `(index?: number) => void`(支持在指定位置插入),
  原来直接写 `onClick={add}` 会把 MouseEvent 当 index 传入且不再通过类型检查,
  7 处改为 `onClick={() => add()}`,行为仍是追加到末尾
- swr 2.3.8 → 2.5.1、artplayer 5.3.0 → 5.4.0、mpegts.js 1.8.0 → 1.8.2:均为 minor/patch,无 API 变更

* chore(deps): 移除无引用的 ncp

`rg ncp` 在 app/、脚本与配置里均无命中(仅 CHANGELOG 提到 #1265 曾把它移出 dependencies),
是早年从 Svelte 前端遗留下来的复制工具,当前构建链(next build → out/ → rust-embed)用不到。

* fix(ui): 站内 Link 关闭预取,消除 Next 16 预取样式触发的 preload 警告

Next 16 的 Link 进入视口即预取目标路由的 RSC 载荷,载荷里的 `HL` 样式提示会让 React 为
目标页的每个 CSS 分块插入 `<link rel="preload" as="style">`;页面停留数秒后 Chrome 会对每个
未使用的预加载报一条 "was preloaded using link preload but not used" 警告。侧栏 9 个链接常驻
视口,配合 Turbopack 的细粒度 CSS 分块,每页会稳定出现 20+ 条(Next 14 下为 0)。

站内导航共 6 处 Link,全部加 `prefetch={false}`:静态导出由本机 axum 直接服务,点击时再拉取
几 KB 的路由载荷,实测 9 个侧栏页面客户端切换均正常且耗时 <150 ms;之后 6 秒停留 0 警告。

本 commit 可独立丢弃:丢弃后功能不受影响,只是控制台会有上述预加载警告。

* fix(ui): 在根布局最先导入 Semi Design 的 React 19 适配器

React 19 从 `react-dom` 上移除了 `render` / `unmountComponentAtNode`,也不再从 `react-dom`
re-export `createRoot`。Semi 的 Toast / Notification / Spin 图标等命令式渲染走
`_utils/reactRender.js`,在 React 19 下既拿不到 legacy render 也拿不到 createRoot,
会打印 "[Semi UI] createRoot is not available" 并**静默不渲染**——表现为保存成功 / 失败的
Toast 与 Notification 全部消失、日志页 Spin 不显示。

按 Semi 官方文档(semi.design/zh-CN/ecosystem/react19)在根布局第一行导入
`@douyinfe/semi-ui/react19-adapter`,它把 `react-dom/client` 的 createRoot 注入
`semiGlobal.config`。验证:空间配置页保存成功 / 校验失败的 Toast 正常弹出,
日志页 console 0 error。

* fix(ui): 消除 React 19 开发模式下的水合属性与 Fragment props 警告

开发模式(StrictMode)逐页走查 13 个页面,React 19 报两类新错误,均为既有写法在新版本下
被更严格地校验,生产构建不受影响:

- 每页一条 "A tree hydrated but some attributes of the server rendered HTML didn't match":
  差异只有 `<html>` / `<body>` 上由 <head> 内联脚本在水合前写入的 theme-mode 属性
  (React 18 下同一原因表现为 "Extra attributes from the server: theme-mode")。
  这是首屏防闪烁的有意行为,按 React 官方做法给这两个元素加 suppressHydrationWarning,
  只屏蔽元素自身的属性差异,不影响子树校验。
- 直播管理页每张卡片一条 "Invalid prop `disabled` supplied to React.Fragment":
  操作按钮以 Fragment 形式作为 Semi ButtonGroup 的唯一子元素,ButtonGroup 会对直接子元素
  cloneElement 注入 disabled / size / type,React 19 起会对 Fragment 上的这些 props 报错。
  改为返回带 key 的元素数组,DOM 结构与样式不变(子元素均非 Button 类型,不会插入分隔线)。

处理后开发模式 13 页 console 仅剩 mock 环境有意返回的 500。
2026-09-22 06:42:07 +00:00
NoahandAluneu f06efbb3b9 feat(ui): 前端整体重设计与统一(接手 #1653) (#1704)
* feat(ui): 前端整体重设计与统一(接手 #1653)

来自 Aluneu 的 PR #1653(head bdcfbea),在 master 4e156ac 上重新落地。
相对原 PR 的差异:
- 剔除 logo / favicon / logo.svg 品牌资产变更,侧栏与登录页仍用 public/logo.png
- 解决与 master 的三处冲突:upload-manager add/edit 的 studioEntity 补回 #1699 的 tid_v2;
  global.tsx 下载插件说明补上 mesio(9d02856)
- README.md 相关提交在原 PR 合并上游时已归零,此处不含

主要内容:
- PageHeader / SectionTitle / data-card 统一页头与卡片容器,status.tsx 作为状态视觉的唯一来源
- 侧栏自绘重写:5 组 9 项、服务状态指示、折叠偏好持久化、移动端抽屉
- 首页从外链 iframe 改为本地数据的控制台(KPI / 进行中 / 未开播 / 24h 事件流)
- 直播管理:搜索、平台筛选、网格/列表双视图、批量暂停/删除;接口失败不再被当作空列表
- 新增 /changelog 页,运行时拉取官方 CHANGELOG,带 localStorage 离线缓存
- 全局自定义背景:仅本地图片,canvas 重绘为 JPEG data URL,2MB 上限
- 修复:根 layout 与 (app)/layout 双重 <html>/<body>、主题水合闪烁、扫码登录无保护取值崩溃、
  弹窗内 width:1000 横向溢出、移动端抽屉被遮罩拦截
- 后处理 {cmd,value} ↔ HookStep 转换抽成 lib/postprocessor.ts
- 12 个平台插件文案精简

* fix(ui): 空间配置平台列表改为遍历插件注册表

dashboard 里硬编码的 PLATFORM_LIST 让新增平台插件要改第三个地方,漏了就在 UI 里静默消失。
把顺序与文案登记到 app/ui/plugins/index.ts 的 PlatformPanels,dashboard 只负责渲染。

* fix(ui): 控制台断连判定改为全部接口失败才触发,并放宽轮询频率

- /v1/status 单独失败时原先把整个控制台替换成「无法连接后端」,主播卡片全部消失;
  现在只有四个接口全部失败才判定断连,单个接口失败只显示对应提示条
- 主播状态 4s → 10s;streamer-info(全表)、videos(扫目录)、status(序列化整份配置)
  30s → 60s;侧栏与直播管理页共用同一组常量
- 事件流的平台名复用 status.tsx 的 platformName,删掉 use-dashboard 里的重复实现
- 首页「文档」链接对齐 README 里的 biliup.github.io 地址

* fix(ui): 直播状态文案与配色在卡片和列表视图保持一致

- 列表视图的「未开播」原是红底白字,与卡片的灰色徽章不一致;改为同一套三色
- 补回 Pending →「检测中」(原页面就有,重设计后被吞成「未开播」)
- OutOfSchedule 不再归到绿色录制组,绿色只留给 Working
- 删除无人引用的 statusMeta / platformTag

* fix(ui): 编辑投稿模板页在分区列表加载失败时给出原因而不是空白

/bili/archive/pre 需要可用的 B 站 cookie,没有账号时后端返回 500;原先 isError 为真但
error 为 undefined,页面渲染成一个空 div。现在保留页头并显示服务端返回的 message。

* fix(ui): 更新日志页不再把过时的最后一条标成「最新」

仓库里的 CHANGELOG.md 停在 1.2.1,而运行版本已是 1.2.5。页面现在读取 /v1/status 的版本号:
运行版本比日志最新一条还新时去掉「最新」标签并在顶部如实说明;日志里有当前版本时标「当前运行」。

* chore(ui): 清理重设计遗留的重复代码与死代码

- 直播管理页网格 / 列表两份完全相同的操作按钮合并为一处
- 去掉源码里面向评审工具的注释(「相对 PR 版本的增强」「保留 PR 逻辑」等)
- useGlobalBackground 删除 URL 模式残留的 validateBg / isRemoteUrl,遮罩透明度钳制与滑块范围对齐(0.05–0.8)
- 删除无人引用的 (app)/page.module.css 与 BiliupStatus 类型
- 移除 react-use(useWindowSize 已由 useIsMobile 替代,代码里已无引用)

* fix(ui): 全局设置里 sync_save_dir 输入框随下载插件下拉框即时显示

原先用 useFormApi().getValue() 做条件渲染,useFormApi 不订阅表单值变化,
选了 sync-downloader 之后输入框要先保存再刷新才出现。改用 useFormState 订阅 values。

* chore(ui): 删除原 PR 已移除的两个无人引用样式文件

app/page.module.css 与 app/styles/Home.module.css 是脚手架遗留,#1653 已删除;
接手时从合并树导入文件没有带上删除,这里补齐。

* fix(ui): 按 review 意见重审设置页文案,优先清晰无歧义

回应 #1704 的 review:设置页文案不再追求字数少,改为直观、清晰、无歧义。
逐条对照 master 原文与 Rust 实现重写,凡是精简后丢失默认值、单位、取值格式、
生效条件、依赖关系或风险提示的条目一律补回,用换行分点、加粗标出风险项。

- 12 个平台面板 + 全局「下载插件」说明:恢复多行结构,补回默认值 / 单位 / 格式 /
  生效条件(如 douyin_true_origin 需画质为原画且协议为 flv、twitch_disable_ads /
  twitch_cookie 仅 streamlink / ffmpeg 生效、youtube_cookie 填的是文件路径、
  日期格式 YYYYMMDD、大小格式 100M/5G、编码多选用 | 分隔)
- 与实现对齐并修正原文:bilibili 弹幕不再限定非 stream-gears、且随录像分段;
  bili_cookie 与 bili_cookie_file 同时填写时以文本为准;youtube_prefer_vcodec /
  acodec 是编码而非封装格式;streamlink 现可直接下载 FLV 直链;
  youtube_enable_download_playback「只想录直播的可以开启」笔误改为「关闭」;
  bili_qn 占位符改为 25000(原画),与实现默认值一致
- 空间配置页头描述改为准确描述三个 Tab 并提示需点「保存」
- 链接颜色改用 var(--semi-color-link)(原 rgb(var(...)) 为无效 CSS)

不涉及任何逻辑改动。

---------

Co-authored-by: Aluneu <19215190873@163.com>
2026-09-21 13:46:15 +00:00
ForgQi 3744c0f14c Refactor to remove legacy Python backend and database
Removed legacy Python backend modules, database models, and related utilities from the biliup package. Migrated configuration and main loop handling to use stream_gears bindings, simplifying the codebase and shifting backend responsibilities to the Rust implementation. Updated the login page to support registration and login via the new API, and adjusted frontend API base export.

Update Cargo.toml

Update Cargo.lock
2025-09-19 03:28:17 +08:00
ForgQi b13a6b7f77 Revert "fix: 修复遗漏的接口鉴权 (#1417)"
This reverts commit 244e03c38a.
2025-09-18 00:14:38 +08:00
XiaoMiku01 b3ee6f0e1f 添加登录页面 (#1375)
* feat: 实现完整的用户认证系统

- 添加登录页面和认证上下文
- 创建认证守卫组件保护路由
- 修改API请求添加认证头
- 重构布局组件支持认证状态
- 后端API添加认证中间件

* refactor(auth): 移除调试用的print语句

清理认证中间件中的调试输出,这些语句在生产环境中不需要

* style(login): 更新登录页面样式,添加渐变背景和卡片效果

改进登录页面的视觉设计,使用渐变背景提升整体美观度,并优化卡片样式增加现代感
2025-07-30 04:00:06 +00:00
bec4f72cc6 feat: 移动端响应式增强 (#1266)
* feat: 弹出层支持响应式宽度

* feat: 优化折叠效果

* feat: 优化移动端折叠体验

* fix: ssr 编译报错

* fix: 修复 PC 切移动端时不会自动折叠的问题

* feat: 支持仅自己可见开关 (#1261)

* feat: 支持仅自己可见开关

* fix: 私密视频投稿失败

* chore: 移除迁移脚本

* fix: 修复 is_only_self 覆盖界面原先额外字段配置问题

* fix: ncp and sass should not production dependencies (#1265)

* feat: 抖音真原画 (#1267)

* feat: 抖音真原画

* add webui option

* Update __init__.py

---------

Co-authored-by: ForgQi <34411314+ForgQi@users.noreply.github.com>

* feat: 优化移动端折叠体验

* chore: rebase master,重新提交 lock

---------

Co-authored-by: XuanRan_Nyan <31968665+xxxxuanran@users.noreply.github.com>
Co-authored-by: ForgQi <34411314+ForgQi@users.noreply.github.com>
2025-04-29 02:03:19 +00:00
1938e58802 Add 添加实时日志展示 (#1210)
* fix

* 修复虎牙拉流失败异常

* 添加边录边传下载器日志记录

* 修复边录边传投稿标题概率异常

* Update biliup/plugins/huya.py

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* 添加边录边传的说明链接

* 添加日志实时ws接口

* 避免日志文件过大读取异常

* 修复可能出现的Keyerror

* 添加 LogViewer 页面

* LogViewer 添加自动滚动

* 更换 Icon

* 添加下载按钮

* 修复投稿标题格式化异常

---------

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Co-authored-by: xxxxuanran <xxxxuanran@gmail.com>
2025-04-01 03:07:37 +00:00
my_key 3029079100 Update layout.tsx (#1156)
修改内容:
将 <Image> 组件中的 src 属性从 "logo.png" 修改为 "/logo.png"。
修改原因:
为了避免在多级目录结构下,图片路径解析错误导致图片无法显示的问题。通过在路径前添加 /,确保图片始终从根目录开始查找,避免因相对路径导致的路径解析错误。
影响范围:
该修改仅影响图片的路径解析方式,不会对图片的显示效果或其他功能产生任何负面影响。
2025-02-07 12:01:02 +00:00
Monine Melolaris 694d05fac0 Style(webui): 执行前端代码格式化 (#1141)
仅按照配置文件格式化,未进行任何逻辑更改。
2025-01-14 06:35:54 +00:00
Monine Melolaris 4273edc6c7 Feat(webui): 深色模式添加自动跟随系统,添加格式化配置文件。 (#1109)
* Style(webui): Add format config.

Add prettier config to confirm all developer have same code format style.

* Feat(WebUI): 深色模式行为优化

新增:
1、添加了「自动跟随系统主题」模式,并设置为默认行为,该模式将实时监控系统/浏览器主题,并同步变化;
2、添加了自动切换模式按钮。
修改:
1、修改按钮深色模式、浅色模式显示为对应当前模式;
2、修改默认主题为自动跟随系统。

* Update prettier config.

限定解析器的部分格式,避免影响其他语言的格式化功能。

* Disassemble some components.

1.move theme hooks to /lib folder;
2.disassemble ThemeButton component;
3.refactor ThemeButton related code.
2024-12-09 02:34:38 +00:00
see-more 61b052fa92 style: refactor mobile client upload-manager page and streamers page header style (#1064) 2024-09-21 07:46:04 +00:00
guthrie 01d03f3c49 web ui 功能更改;增加录制时间范围功能 (#1017)
* fix: 历史记录页面按更新日期排序错误

* 网页dark light mode记住

* add 录制时间范围功能

* fix 录制时间范围功能出现过滤删除问题

* fix 录制时间范围 兼容stream gears

* 改用pre_check检测时间范围;

移除对stream-gears下载的修改;

* 回滚对历史记录排序的更改 due to review by @Kataick
2024-09-05 22:41:47 +08:00
ForgQi 8bd750e0c1 add logo 2024-06-01 00:07:21 +08:00
ForgQi 8db64e2d8b add manually operated 2024-04-25 01:47:44 +08:00
XuanRan_Nyan f11dbc59a7 [Fix] Style errors and missing Title (#841)
* Fix wrong printing

* Formatting log

* [Fix] Style errors and missing Title

* 更名

* 错误的 is_check 时机

* 登录校验失败时不再移除 Cookie
2024-03-20 16:01:22 +00:00
Monine Melolaris 08769e8917 Fix: refined the webui. (#817)
主要改动:
优化了「空间配置」页的外观,并修正了部分有可能导致歧义的文字表述;
重新排版了部分交互项;
更改了部分交互的类型,如:部分填写项修改为选择项,部分输入框修改为密码框;
其他:
将HTML语言标志由「en」更改为「zh-Hans」。
(为了满足强迫症)导航页面添加了「Home」选项卡,并修改文字为60px的「Hello, Welcome to biliup!」。
(为了满足强迫症)格式化并整理了部分代码。
2024-02-23 18:09:31 +00:00
ForgQi 16303af983 Bumping version 2024-01-12 00:54:14 +08:00
ForgQi 6d1695347c webui初版 2023-12-08 23:37:40 +08:00