feat: 添加账号支持选择学习平台

账号新增 platform 字段,登录/刷新课程/发现课程按平台分发;同时把 JS 脚本收进 script/(目录规范调整)。
This commit is contained in:
study-tool
2026-10-30 01:13:47 +08:00
parent e8634a6317
commit 1a3347f7f9
29 changed files with 449 additions and 297 deletions
+17 -4
View File
@@ -75,6 +75,7 @@ function accountPayload(account: Account) {
return {
id: account.id,
username: account.username,
platform: account.platform || 'guanyixue',
note: account.note || '',
user: account.user || '',
cookies: account.cookies || [],
@@ -93,6 +94,9 @@ export default function App() {
const [accounts, setAccounts] = useState<Account[]>([])
const accountsRef = useRef(accounts)
const [platforms, setPlatforms] = useState<Record<string, string>>({ guanyixue: '莞易学' })
const [platformList, setPlatformList] = useState<PlatformInfo[]>([
{ id: 'guanyixue', label: '莞易学' },
])
const [offline, setOffline] = useState(false)
const [toast, setToast] = useState<ToastState | null>(null)
const [pending, setPending] = useState<Record<string, string>>({})
@@ -193,9 +197,12 @@ export default function App() {
useEffect(() => {
api<{ platforms: PlatformInfo[] }>('/api/platforms')
.then((response) => {
const list = response.platforms || []
if (!list.length) return
setPlatformList(list)
const map: Record<string, string> = {}
for (const platform of response.platforms || []) map[platform.id] = platform.label
if (Object.keys(map).length) setPlatforms(map)
for (const platform of list) map[platform.id] = platform.label
setPlatforms(map)
})
.catch(() => {})
}, [])
@@ -366,7 +373,10 @@ export default function App() {
try {
let response = await api<CoursesResponse>('/api/courses', {
method: 'POST',
body: JSON.stringify({ cookies: account.cookies }),
body: JSON.stringify({
cookies: account.cookies,
platform: account.platform || 'guanyixue',
}),
})
if (!response.ok && response.code === 'session_expired') {
notify({ message: '会话已失效,正在自动重新登录…' })
@@ -578,6 +588,7 @@ export default function App() {
method: 'POST',
body: JSON.stringify({
username: data.username,
platform: data.platform,
password: data.password,
note: data.note,
cookies: [],
@@ -621,7 +632,8 @@ export default function App() {
}
function platformLabel(account: Account) {
const id = (account.courses || []).find((course) => course.platform)?.platform
const id =
account.platform || (account.courses || []).find((course) => course.platform)?.platform
return (id && platforms[id]) || '莞易学'
}
@@ -749,6 +761,7 @@ export default function App() {
<AddAccountDialog
open={dialog?.type === 'add'}
platforms={platformList}
onClose={() => setDialog(null)}
onSubmit={addAccount}
/>