From f988d3b91a713f450aa2d3279ce79359c5ab9f5e Mon Sep 17 00:00:00 2001 From: npmrun <1549469775@qq.com> Date: Sat, 18 Apr 2026 21:11:42 +0800 Subject: [PATCH] refactor(ui): reorganize media cleanup section and update labels --- app/composables/usePublicHomeLayout.ts | 4 ---- app/layouts/public.vue | 39 +++++++++++++++++++-------------- app/pages/me/index.vue | 24 ++++++++++---------- packages/drizzle-pkg/db.sqlite | Bin 135168 -> 135168 bytes 4 files changed, 34 insertions(+), 33 deletions(-) diff --git a/app/composables/usePublicHomeLayout.ts b/app/composables/usePublicHomeLayout.ts index 33e6fd7..0503c0b 100644 --- a/app/composables/usePublicHomeLayout.ts +++ b/app/composables/usePublicHomeLayout.ts @@ -2,10 +2,6 @@ import type { InjectionKey, Ref } from 'vue' export type PublicHomeLayoutMode = 'showcase' | 'detailed' -export function publicHomeLayoutStorageKey(slug: string) { - return `public-home-layout:${slug}` -} - /** 由 `layouts/public.vue` provide,公开主页 `inject` 读取 */ export const publicHomeLayoutModeKey: InjectionKey> = Symbol('publicHomeLayoutMode') diff --git a/app/layouts/public.vue b/app/layouts/public.vue index 70db257..38dbb92 100644 --- a/app/layouts/public.vue +++ b/app/layouts/public.vue @@ -2,7 +2,6 @@ import { useAuthSession } from '../composables/useAuthSession' import { publicHomeLayoutModeKey, - publicHomeLayoutStorageKey, type PublicHomeLayoutMode, } from '../composables/usePublicHomeLayout' import { unwrapApiBody, type ApiResponse } from '../utils/http/factory' @@ -50,35 +49,41 @@ const headerBrandIconUrl = computed(() => profileSlug.value ? publicHomeHeader.value?.iconUrl ?? null : null, ) +type LayoutBySlug = Record + +const layoutBySlug = useCookie('public_home_layout', { + default: () => ({}), + maxAge: 60 * 60 * 24 * 400, + sameSite: 'lax', +}) + +function cookieModeForSlug(slug: string): PublicHomeLayoutMode { + const m = layoutBySlug.value[slug] + return m === 'detailed' || m === 'showcase' ? m : 'showcase' +} + const publicLayoutMode = ref('showcase') provide(publicHomeLayoutModeKey, publicLayoutMode) -function syncModeFromStorage() { - if (!import.meta.client) { - return - } +function syncModeFromCookie() { if (!showPublicLayoutToggle.value || !profileSlug.value) { return } - const raw = localStorage.getItem(publicHomeLayoutStorageKey(profileSlug.value)) - publicLayoutMode.value = raw === 'detailed' || raw === 'showcase' ? raw : 'showcase' + publicLayoutMode.value = cookieModeForSlug(profileSlug.value) } -onMounted(() => { - refresh().catch(() => {}) - syncModeFromStorage() -}) - -watch([profileSlug, showPublicLayoutToggle], syncModeFromStorage) +syncModeFromCookie() +watch([profileSlug, showPublicLayoutToggle, layoutBySlug], syncModeFromCookie) watch(publicLayoutMode, (m) => { - if (!import.meta.client) { - return - } if (!showPublicLayoutToggle.value || !profileSlug.value) { return } - localStorage.setItem(publicHomeLayoutStorageKey(profileSlug.value), m) + layoutBySlug.value = { ...layoutBySlug.value, [profileSlug.value]: m } +}) + +onMounted(() => { + refresh().catch(() => {}) }) diff --git a/app/pages/me/index.vue b/app/pages/me/index.vue index db0507c..34a8d01 100644 --- a/app/pages/me/index.vue +++ b/app/pages/me/index.vue @@ -69,17 +69,6 @@ onMounted(async () => {
- 文章媒体清理 -
-

- 孤儿图片审查与清理 -

- - 打开 - -
- -
时光机
@@ -113,9 +102,20 @@ onMounted(async () => { 打开
+ +
+ 文章媒体清理 +
+

+ 孤儿图片审查与清理 +

+ + 打开 + +
- 媒体存储校验 + 文章媒体存储校验

磁盘与 media_assets 一致性 diff --git a/packages/drizzle-pkg/db.sqlite b/packages/drizzle-pkg/db.sqlite index cf29ea9e43fb4a5a4bb07f70e9a46a3cfb82c7fb..ca5e6ac1ea046282782fcb0054e6b6b96567c879 100644 GIT binary patch delta 905 zcma))L1+_E5Qg8|-G|v|GhIs262;cm+RJvc$!@lbhf?(BB>@9UExOs=N>L$nE#k$b z2Yaq5l2aj|P+zI~PYMpvtAwVjpC$%{y;5%>r-Bs~LlOw7@vV1x@|PG0#iIa1C@h-eVl zg+{29zCzfz2?c43z!nm(L2)rofyj!ocw8Y0JL57oHRU*-6L1$Dnw}Zc3JdwWbFStD zfqy^H?zHuc>jwy9DCHJCOsrd0+SJpwVd&{3jq!*2|EW8Rg-$R%gA=d2r&=$yV)XUm zaQ*W>2tiLsm-n@eK}s_~2%)e|U^}+Q4X4+5H@es9)W2>f~EZro6~&pmF%(I#@2@8~1v=V05JRN+a{R#W{a(S`TS=KN7oj*V!66IH&ii0$hWGeqn|8A;} LAwb0RbD{SSKmqBG delta 466 zcmZozz|pXPV}dlJ&_o$$Rv`wxvd)bu3-mb{`A;(NpX8skSx}*k-`tdmHI$Q;)hH=B z)g;Z*ST`}n%tF`1IMqZq$uu=pH#IfUz|b(&BF!){k#X+fRf`@m&YeF`?&0K<_SQg? zZZPoQ;9n0kX)(X926HGQF~%^dGlz0czF@C1DS!oN#2*I!Km6Y}3pTvw-~2tEzkp>9 z1OFVLiIezKk{J0II0Xfz1sMccWs_N19UT)BQxc0oL}GDtEYKx$-ujg0Nh_)Yoy`2GQ%@{Vu%zdA;97BwawhUu2|jBSic z(+|`$N~+JDKUb|-fsu!S69`2`85meufv!s|Elw>0nm$*g210I9c+aoM$;iUO%*n_M zBAA$&IXSr)7#LXi-+;Z(|AznLcEJY5hy47k%#1*Js451|MGXp@Ca^ecWnucm4*-E6 BiTMBk