注册页面的食物偏好选项现在支持以下功能:
interface FoodOption {
id: string; // 食物唯一标识
label: string; // 显示的本地化名称
}
在 src/locale/*.json 中添加了 register.foods 部分:
{
"register": {
"foods": {
"sushi": "寿司",
"ramen": "ラーメン"
// ...
}
}
}
fetchFoodOptions()food.id,存储在 form.favoriteFoods 数组中在 src/views/login/register.vue 中,找到 fetchFoodOptions 函数:
// 当前代码(第 255-267 行)
const fetchFoodOptions = async () => {
try {
// TODO: 取消注释以下代码以启用 API
// const response = await getFoodPreferences(locale.value)
// foodOptions.value = response.data
// 暂时使用本地 fallback
foodOptions.value = getFallbackFoodOptions();
} catch (error) {
console.error("Failed to fetch food options:", error);
foodOptions.value = getFallbackFoodOptions();
}
};
修改为:
import { getFoodPreferences } from "@/api/preferences";
const fetchFoodOptions = async () => {
try {
// 从 API 获取
const response = await getFoodPreferences(locale.value);
foodOptions.value = response.data || response;
} catch (error) {
console.error("Failed to fetch food options:", error);
// API 失败时使用本地 fallback
foodOptions.value = getFallbackFoodOptions();
}
};
后端需要实现以下接口:
GET /app-api/member/preferences/foods
Query Parameters:
locale (可选): 语言代码 (ja, en, zh-Hans, zh-Hant)Response:
{
"code": 0,
"data": [
{
"id": "sushi",
"label": "寿司",
"category": "japanese",
"icon": "🍣"
},
{
"id": "ramen",
"label": "ラーメン",
"category": "japanese",
"icon": "🍜"
}
]
}
在 handleRegister 函数中,可以调用保存 API:
import { saveFoodPreferences } from "@/api/preferences";
const handleRegister = async () => {
if (!form.nickname || !form.contact) {
showToast(t("register.fillRequired"));
return;
}
loading.value = true;
try {
// 注册用户
// const userRes = await registerUser(form)
// 保存食物偏好
if (form.favoriteFoods.length > 0) {
await saveFoodPreferences(form.favoriteFoods);
}
showToast(t("register.success"));
router.push("/index");
} catch (error) {
console.error(error);
showToast(t("register.failed"));
} finally {
loading.value = false;
}
};
已添加的翻译键:
register.foods.sushi
register.foods.ramen
register.foods.gyoza
register.foods.tempura
register.foods.udon
register.foods.sashimi
register.foods.yakitori
如需添加新的食物选项,在所有语言文件中添加对应的翻译即可。
当用户切换语言时,食物选项会自动更新为对应语言的翻译:
// 监听语言变化(可选)
watch(locale, () => {
fetchFoodOptions();
});
src/views/login/register.vue - 注册页面组件src/api/preferences.ts - 偏好设置 API 接口src/locale/ja.json - 日语翻译src/locale/en.json - 英语翻译src/locale/zh-Hans.json - 简体中文翻译src/locale/zh-Hant.json - 繁体中文翻译