feat: 添加账号支持选择学习平台
账号新增 platform 字段,登录/刷新课程/发现课程按平台分发;同时把 JS 脚本收进 script/(目录规范调整)。
This commit is contained in:
+17
-4
@@ -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}
|
||||
/>
|
||||
|
||||
Reference in New Issue
Block a user