From 70d8fc5bfa73e1814d5f4ba9a20cf05273cfc601 Mon Sep 17 00:00:00 2001 From: ngthanhvu Date: Thu, 23 Jul 2026 11:00:05 -0400 Subject: [PATCH] =?UTF-8?q?feat:=20th=C3=AAm=20=C3=ADt=20avatar?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/components/AppHeader.vue | 49 +- app/components/AuthModal.vue | 336 +++++++--- app/middleware/auth.ts | 11 + app/pages/thanh-vien.vue | 588 ++++++++++++++++-- public/avatars/hoat-hinh/01.jpg | Bin 0 -> 17693 bytes public/avatars/hoat-hinh/02.jpg | Bin 0 -> 16094 bytes public/avatars/hoat-hinh/03.jpg | Bin 0 -> 16833 bytes public/avatars/hoat-hinh/04.jpg | Bin 0 -> 18287 bytes public/avatars/hoat-hinh/05.jpg | Bin 0 -> 17351 bytes public/avatars/hoat-hinh/06.jpg | Bin 0 -> 15649 bytes public/avatars/hoat-hinh/07.jpg | Bin 0 -> 17152 bytes public/avatars/hoat-hinh/08.jpg | Bin 0 -> 17170 bytes public/avatars/hoat-hinh/09.jpg | Bin 0 -> 16602 bytes public/avatars/hoat-hinh/10.jpg | Bin 0 -> 15544 bytes public/avatars/hoat-hinh/11.jpg | Bin 0 -> 15072 bytes public/avatars/hoat-hinh/12.jpg | Bin 0 -> 16127 bytes public/avatars/hoat-hinh/13.jpg | Bin 0 -> 27777 bytes public/avatars/hoat-hinh/14.jpg | Bin 0 -> 22845 bytes public/avatars/hoat-hinh/15.jpg | Bin 0 -> 17679 bytes public/avatars/hoat-hinh/21.jpg | Bin 0 -> 106403 bytes public/avatars/hoat-hinh/22.jpg | Bin 0 -> 117748 bytes public/avatars/hoat-hinh/23.jpg | Bin 0 -> 113102 bytes public/avatars/hoat-hinh/24.jpg | Bin 0 -> 115853 bytes public/avatars/hoat-hinh/25.jpg | Bin 0 -> 111531 bytes public/avatars/hoat-hinh/26.jpg | Bin 0 -> 113602 bytes public/avatars/hoat-hinh/27.jpg | Bin 0 -> 115185 bytes public/avatars/hoat-hinh/28.jpg | Bin 0 -> 105268 bytes public/avatars/hoat-hinh/29.jpg | Bin 0 -> 78409 bytes public/avatars/hoat-hinh/30.jpg | Bin 0 -> 122846 bytes public/avatars/meme/01.jpg | Bin 0 -> 87012 bytes public/avatars/meme/02.jpg | Bin 0 -> 105860 bytes public/avatars/meme/03.jpg | Bin 0 -> 88063 bytes public/avatars/meme/04.jpg | Bin 0 -> 110898 bytes public/avatars/meme/05.jpg | Bin 0 -> 72956 bytes public/avatars/meme/06.jpg | Bin 0 -> 45179 bytes public/avatars/meme/07.jpg | Bin 0 -> 57210 bytes public/avatars/meme/08.jpg | Bin 0 -> 86041 bytes public/avatars/viet-nam/01.jpg | Bin 0 -> 32176 bytes public/avatars/viet-nam/02.jpg | Bin 0 -> 23472 bytes public/avatars/viet-nam/03.jpg | Bin 0 -> 29933 bytes public/avatars/viet-nam/04.jpg | Bin 0 -> 32010 bytes public/avatars/viet-nam/05.jpg | Bin 0 -> 25042 bytes public/avatars/viet-nam/06.jpg | Bin 0 -> 25609 bytes public/avatars/viet-nam/07.jpg | Bin 0 -> 23290 bytes public/avatars/viet-nam/08.jpg | Bin 0 -> 34642 bytes public/avatars/viet-nam/09.jpg | Bin 0 -> 31403 bytes public/avatars/viet-nam/10.jpg | Bin 0 -> 32547 bytes public/avatars/viet-nam/11.jpg | Bin 0 -> 27752 bytes public/avatars/viet-nam/12.jpg | Bin 0 -> 25880 bytes public/avatars/viet-nam/13.jpg | Bin 0 -> 29896 bytes public/avatars/viet-nam/14.jpg | Bin 0 -> 27267 bytes public/avatars/viet-nam/15.jpg | Bin 0 -> 30325 bytes public/avatars/viet-nam/16.jpg | Bin 0 -> 35356 bytes server/api/auth/avatar.put.ts | 46 ++ server/api/auth/change-password.post.ts | 48 ++ server/api/auth/forgot-password.post.ts | 36 ++ server/api/auth/profile.put.ts | 34 + server/api/auth/reset-password.post.ts | 50 ++ .../migrations/0007_shiny_jane_foster.sql | 2 + .../migrations/meta/0007_snapshot.json | 350 +++++++++++ server/database/migrations/meta/_journal.json | 7 + server/database/schema.ts | 2 + 62 files changed, 1401 insertions(+), 158 deletions(-) create mode 100644 app/middleware/auth.ts create mode 100644 public/avatars/hoat-hinh/01.jpg create mode 100644 public/avatars/hoat-hinh/02.jpg create mode 100644 public/avatars/hoat-hinh/03.jpg create mode 100644 public/avatars/hoat-hinh/04.jpg create mode 100644 public/avatars/hoat-hinh/05.jpg create mode 100644 public/avatars/hoat-hinh/06.jpg create mode 100644 public/avatars/hoat-hinh/07.jpg create mode 100644 public/avatars/hoat-hinh/08.jpg create mode 100644 public/avatars/hoat-hinh/09.jpg create mode 100644 public/avatars/hoat-hinh/10.jpg create mode 100644 public/avatars/hoat-hinh/11.jpg create mode 100644 public/avatars/hoat-hinh/12.jpg create mode 100644 public/avatars/hoat-hinh/13.jpg create mode 100644 public/avatars/hoat-hinh/14.jpg create mode 100644 public/avatars/hoat-hinh/15.jpg create mode 100644 public/avatars/hoat-hinh/21.jpg create mode 100644 public/avatars/hoat-hinh/22.jpg create mode 100644 public/avatars/hoat-hinh/23.jpg create mode 100644 public/avatars/hoat-hinh/24.jpg create mode 100644 public/avatars/hoat-hinh/25.jpg create mode 100644 public/avatars/hoat-hinh/26.jpg create mode 100644 public/avatars/hoat-hinh/27.jpg create mode 100644 public/avatars/hoat-hinh/28.jpg create mode 100644 public/avatars/hoat-hinh/29.jpg create mode 100644 public/avatars/hoat-hinh/30.jpg create mode 100644 public/avatars/meme/01.jpg create mode 100644 public/avatars/meme/02.jpg create mode 100644 public/avatars/meme/03.jpg create mode 100644 public/avatars/meme/04.jpg create mode 100644 public/avatars/meme/05.jpg create mode 100644 public/avatars/meme/06.jpg create mode 100644 public/avatars/meme/07.jpg create mode 100644 public/avatars/meme/08.jpg create mode 100644 public/avatars/viet-nam/01.jpg create mode 100644 public/avatars/viet-nam/02.jpg create mode 100644 public/avatars/viet-nam/03.jpg create mode 100644 public/avatars/viet-nam/04.jpg create mode 100644 public/avatars/viet-nam/05.jpg create mode 100644 public/avatars/viet-nam/06.jpg create mode 100644 public/avatars/viet-nam/07.jpg create mode 100644 public/avatars/viet-nam/08.jpg create mode 100644 public/avatars/viet-nam/09.jpg create mode 100644 public/avatars/viet-nam/10.jpg create mode 100644 public/avatars/viet-nam/11.jpg create mode 100644 public/avatars/viet-nam/12.jpg create mode 100644 public/avatars/viet-nam/13.jpg create mode 100644 public/avatars/viet-nam/14.jpg create mode 100644 public/avatars/viet-nam/15.jpg create mode 100644 public/avatars/viet-nam/16.jpg create mode 100644 server/api/auth/avatar.put.ts create mode 100644 server/api/auth/change-password.post.ts create mode 100644 server/api/auth/forgot-password.post.ts create mode 100644 server/api/auth/profile.put.ts create mode 100644 server/api/auth/reset-password.post.ts create mode 100644 server/database/migrations/0007_shiny_jane_foster.sql create mode 100644 server/database/migrations/meta/0007_snapshot.json diff --git a/app/components/AppHeader.vue b/app/components/AppHeader.vue index 4892d55..a113ad1 100644 --- a/app/components/AppHeader.vue +++ b/app/components/AppHeader.vue @@ -27,6 +27,11 @@ const displayName = computed(() => { const displayInitial = computed(() => displayName.value.charAt(0).toUpperCase()) +const avatarUrl = computed(() => { + if (user.value?.avatar) return user.value.avatar + return null +}) + const navItems = [ { label: 'Trang chủ', to: '/' }, { label: 'Duyệt phim', to: '/phim' }, @@ -111,38 +116,49 @@ watch(() => route.path, () => {