eslint
This commit is contained in:
15
CLAUDE.md
15
CLAUDE.md
@@ -2,18 +2,15 @@
|
|||||||
|
|
||||||
```bash
|
```bash
|
||||||
# 使用以下命令检查代码合法性
|
# 使用以下命令检查代码合法性
|
||||||
pnpm run build
|
pnpm eslint
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
||||||
- **Next.js 16** 使用 App Router 和 standalone 输出模式
|
- Next.js 16 使用 App Router
|
||||||
- **React 19** 启用 React Compiler 进行优化
|
- TypeScript 严格模式和 ES2023 目标
|
||||||
- **TypeScript** 严格模式和 ES2023 目标
|
- better-auth 身份验证(邮箱/密码)
|
||||||
- **Tailwind CSS v4** 样式框架
|
- next-intl 国际化(支持:en-US, zh-CN, ja-JP, ko-KR, de-DE, fr-FR, it-IT, ug-CN)
|
||||||
- **PostgreSQL** + **Prisma ORM**(自定义输出目录:`src/generated/prisma`)
|
- 阿里云千问 TTS (qwen3-tts-flash) 文本转语音
|
||||||
- **better-auth** 身份验证(邮箱/密码)
|
|
||||||
- **next-intl** 国际化(支持:en-US, zh-CN, ja-JP, ko-KR, de-DE, fr-FR, it-IT, ug-CN)
|
|
||||||
- **阿里云千问 TTS** (qwen3-tts-flash) 文本转语音
|
|
||||||
- 使用 pnpm,而不是 npm 或 yarn
|
- 使用 pnpm,而不是 npm 或 yarn
|
||||||
- 应用使用 TypeScript 严格模式 - 确保类型安全
|
- 应用使用 TypeScript 严格模式 - 确保类型安全
|
||||||
- 所有面向用户的文本都需要国际化
|
- 所有面向用户的文本都需要国际化
|
||||||
|
|||||||
@@ -24,25 +24,25 @@ export function useSubtitleSync() {
|
|||||||
const seek = useSrtPlayerStore((state) => state.seek);
|
const seek = useSrtPlayerStore((state) => state.seek);
|
||||||
const pause = useSrtPlayerStore((state) => state.pause);
|
const pause = useSrtPlayerStore((state) => state.pause);
|
||||||
|
|
||||||
// 获取当前时间对应的字幕索引
|
|
||||||
const getCurrentSubtitleIndex = (time: number): number | null => {
|
|
||||||
for (let i = 0; i < subtitleData.length; i++) {
|
|
||||||
const subtitle = subtitleData[i];
|
|
||||||
if (time >= subtitle.start && time <= subtitle.end) {
|
|
||||||
return i;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
};
|
|
||||||
|
|
||||||
// 检查是否需要自动暂停
|
|
||||||
const shouldAutoPause = (subtitle: { start: number; end: number }, time: number): boolean => {
|
|
||||||
return autoPause && time >= subtitle.end - 0.2 && time < subtitle.end;
|
|
||||||
};
|
|
||||||
|
|
||||||
// 同步循环
|
// 同步循环
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
const syncSubtitles = () => {
|
const syncSubtitles = () => {
|
||||||
|
// 获取当前时间对应的字幕索引
|
||||||
|
const getCurrentSubtitleIndex = (time: number): number | null => {
|
||||||
|
for (let i = 0; i < subtitleData.length; i++) {
|
||||||
|
const subtitle = subtitleData[i];
|
||||||
|
if (time >= subtitle.start && time <= subtitle.end) {
|
||||||
|
return i;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
};
|
||||||
|
|
||||||
|
// 检查是否需要自动暂停
|
||||||
|
const shouldAutoPause = (subtitle: { start: number; end: number }, time: number): boolean => {
|
||||||
|
return autoPause && time >= subtitle.end - 0.2 && time < subtitle.end;
|
||||||
|
};
|
||||||
|
|
||||||
const currentIndex = getCurrentSubtitleIndex(currentTime);
|
const currentIndex = getCurrentSubtitleIndex(currentTime);
|
||||||
|
|
||||||
// 检查字幕是否发生变化
|
// 检查字幕是否发生变化
|
||||||
|
|||||||
@@ -134,7 +134,7 @@ export function Progress({
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
{showLabel && (
|
{showLabel && (
|
||||||
<div className="ml-3 text-sm font-medium text-gray-700 min-w-[3rem] text-right">
|
<div className="ml-3 text-sm font-medium text-gray-700 min-w-12 text-right">
|
||||||
{formatLabel()}
|
{formatLabel()}
|
||||||
</div>
|
</div>
|
||||||
)}
|
)}
|
||||||
|
|||||||
Reference in New Issue
Block a user