mirror of
https://github.com/SECTL/SecScore.git
synced 2026-07-21 18:19:03 +08:00
支持学生头像设置与展示(上传/清除)
This commit is contained in:
@@ -0,0 +1,47 @@
|
||||
export const getAvatarFromExtraJson = (extraJson?: string | null): string | null => {
|
||||
if (!extraJson) return null
|
||||
|
||||
try {
|
||||
const parsed = JSON.parse(extraJson)
|
||||
if (!parsed || typeof parsed !== "object") return null
|
||||
|
||||
const avatar = (parsed as Record<string, unknown>).avatar
|
||||
if (typeof avatar !== "string") return null
|
||||
|
||||
const trimmed = avatar.trim()
|
||||
if (!trimmed) return null
|
||||
|
||||
if (trimmed.startsWith("data:image/")) return trimmed
|
||||
if (trimmed.startsWith("http://") || trimmed.startsWith("https://")) return trimmed
|
||||
|
||||
return null
|
||||
} catch {
|
||||
return null
|
||||
}
|
||||
}
|
||||
|
||||
export const setAvatarInExtraJson = (
|
||||
extraJson: string | null | undefined,
|
||||
avatar: string | null
|
||||
): string => {
|
||||
let base: Record<string, unknown> = {}
|
||||
|
||||
if (extraJson) {
|
||||
try {
|
||||
const parsed = JSON.parse(extraJson)
|
||||
if (parsed && typeof parsed === "object") {
|
||||
base = parsed as Record<string, unknown>
|
||||
}
|
||||
} catch {
|
||||
base = {}
|
||||
}
|
||||
}
|
||||
|
||||
if (avatar && avatar.trim()) {
|
||||
base.avatar = avatar.trim()
|
||||
} else {
|
||||
delete base.avatar
|
||||
}
|
||||
|
||||
return JSON.stringify(base)
|
||||
}
|
||||
Reference in New Issue
Block a user