feat: 添加用户设置功能,支持修改昵称和邮箱,重构相关路由和组件

This commit is contained in:
2025-12-21 01:11:53 +07:00
parent 2e42bbc278
commit a4034b6b78
22 changed files with 620 additions and 225 deletions

View File

@@ -0,0 +1,71 @@
<script lang='ts' setup>
import { toastController } from "@ionic/vue";
import { arrowBackOutline } from "ionicons/icons";
import { safeClient } from "@/api";
import { authClient } from "@/auth";
const { user } = useAuth();
const username = ref(user.value?.username || "");
const { updateProfile } = useUserStore();
async function handleSave() {
if (!usernamePattern.test(username.value)) {
const toast = await toastController.create({
message: "用户名格式不正确",
duration: 2000,
position: "bottom",
color: "danger",
});
await toast.present();
return;
}
const { data } = await safeClient(authClient.updateUser({
username: username.value,
}));
if (data) {
updateProfile();
const toast = await toastController.create({
message: "用户名更新成功",
duration: 2000,
position: "bottom",
color: "success",
});
await toast.present();
}
}
</script>
<template>
<ion-page>
<ion-header>
<ion-toolbar class="ui-toolbar">
<ion-buttons slot="start">
<ion-button @click="$router.back()">
<ion-icon slot="icon-only" :icon="arrowBackOutline" />
</ion-button>
</ion-buttons>
<ion-title>用户设置</ion-title>
</ion-toolbar>
</ion-header>
<ion-content :fullscreen="true" class="ion-padding">
<div class="space-y-3">
<ui-input
v-model="username"
placeholder="请输入用户名"
class="w-full"
/>
<div class="text-xs text-gray-500">
仅支持字母数字下划线长度 3-20 个字符
</div>
<ion-button expand="block" class="mt-5" @click="handleSave">
保存
</ion-button>
</div>
</ion-content>
</ion-page>
</template>
<style lang='css' scoped></style>