更新用户数据
This commit is contained in:
@@ -7,7 +7,7 @@
|
|||||||
"userNameNoFund":-41,
|
"userNameNoFund":-41,
|
||||||
"userPassIncorrect":-42,
|
"userPassIncorrect":-42,
|
||||||
"userCookieError":-44,
|
"userCookieError":-44,
|
||||||
"userCookieNotFund":-45,
|
"userCookieNotFund":-44,
|
||||||
"userCookieExpired":-46
|
"userCookieExpired":-44
|
||||||
|
|
||||||
}
|
}
|
||||||
+142
-32
@@ -65,17 +65,16 @@ type From_user_login struct {
|
|||||||
Remember bool `json:"remember"`
|
Remember bool `json:"remember"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func ApiUser(r *gin.RouterGroup) {
|
type From_user_updateinfo struct {
|
||||||
|
Username string `json:"username"`
|
||||||
|
Remark string `json:"remark"`
|
||||||
|
Birthday string `json:"birthday"`
|
||||||
|
}
|
||||||
|
|
||||||
r.GET("/test", func(ctx *gin.Context) {
|
func AuthenticationAuthority(ctx *gin.Context) (bool, models.TabUser_, map[string]interface{}) {
|
||||||
ReturnJson(ctx, "apiOK", nil)
|
var user models.TabUser_
|
||||||
})
|
|
||||||
r.POST("/test", func(ctx *gin.Context) {
|
data, cookieval := SeparateData(ctx)
|
||||||
ReturnJson(ctx, "apiOK", nil)
|
|
||||||
})
|
|
||||||
//通过cookie获取用户info
|
|
||||||
r.POST("/getinfo", func(ctx *gin.Context) {
|
|
||||||
_, cookieval := SeparateData(ctx)
|
|
||||||
//fmt.Println("cookieis" + cookieval)
|
//fmt.Println("cookieis" + cookieval)
|
||||||
if cookieval != "" {
|
if cookieval != "" {
|
||||||
cookie := models.TabCookie_{
|
cookie := models.TabCookie_{
|
||||||
@@ -85,25 +84,99 @@ func ApiUser(r *gin.RouterGroup) {
|
|||||||
//找到cookie,验证cookie有效性,以及更新cookie
|
//找到cookie,验证cookie有效性,以及更新cookie
|
||||||
if models.CheckCookiesAndUpdate(&cookie) {
|
if models.CheckCookiesAndUpdate(&cookie) {
|
||||||
//cookie有效
|
//cookie有效
|
||||||
//返回最新cookie
|
|
||||||
redata := map[string]interface{}{
|
|
||||||
"cookie": cookie,
|
|
||||||
}
|
|
||||||
//载入用户info
|
|
||||||
userInfo := models.TabFileInfo_{
|
|
||||||
UserID: cookie.UserID,
|
|
||||||
}
|
|
||||||
if models.DB.Where(&userInfo).First(&userInfo).Error == nil {
|
|
||||||
redata["userInfo"] = userInfo
|
|
||||||
} else {
|
|
||||||
redata["userInfo"] = nil
|
|
||||||
}
|
|
||||||
|
|
||||||
//载入user
|
//载入user
|
||||||
user := models.TabUser_{
|
user := models.TabUser_{
|
||||||
ID: cookie.UserID,
|
ID: cookie.UserID,
|
||||||
}
|
}
|
||||||
models.DB.Where(&user).First(&user)
|
models.DB.Where(&user).First(&user)
|
||||||
|
|
||||||
|
return true, user, data
|
||||||
|
|
||||||
|
} else {
|
||||||
|
ReturnJson(ctx, "userCookieExpired", nil)
|
||||||
|
return false, user, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
} else {
|
||||||
|
ReturnJson(ctx, "userCookieNotFund", nil)
|
||||||
|
return false, user, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
} else {
|
||||||
|
ReturnJson(ctx, "userCookieError", nil)
|
||||||
|
return false, user, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
//return false, user
|
||||||
|
}
|
||||||
|
|
||||||
|
func ApiUser(r *gin.RouterGroup) {
|
||||||
|
|
||||||
|
r.GET("/test", func(ctx *gin.Context) {
|
||||||
|
ReturnJson(ctx, "apiOK", nil)
|
||||||
|
})
|
||||||
|
r.POST("/test", func(ctx *gin.Context) {
|
||||||
|
ReturnJson(ctx, "apiOK", nil)
|
||||||
|
})
|
||||||
|
//更新用户info
|
||||||
|
r.POST("/updateInfo", func(ctx *gin.Context) {
|
||||||
|
isAuth, user, data := AuthenticationAuthority(ctx)
|
||||||
|
if isAuth {
|
||||||
|
var jsonData From_user_updateinfo
|
||||||
|
|
||||||
|
if err := mapstructure.Decode(data, &jsonData); err == nil {
|
||||||
|
// fmt.Println("updateinfo data is", jsonData)
|
||||||
|
// fmt.Println(user)
|
||||||
|
t, err := time.Parse("2006-01-02", jsonData.Birthday)
|
||||||
|
if err == nil {
|
||||||
|
var userinfo models.TabUserInfo_
|
||||||
|
userinfo.UserID = user.ID
|
||||||
|
|
||||||
|
var userinfoupdate models.TabUserInfo_
|
||||||
|
userinfoupdate.UserID = user.ID
|
||||||
|
userinfoupdate.CreatedAt = time.Now()
|
||||||
|
userinfoupdate.Username = jsonData.Username
|
||||||
|
userinfoupdate.Birthdate = t
|
||||||
|
userinfoupdate.FirstName = jsonData.Remark
|
||||||
|
|
||||||
|
//先查找是否有记录
|
||||||
|
if models.DB.Where(&userinfo).First(&userinfo).Error == nil {
|
||||||
|
//有记录,更新
|
||||||
|
models.DB.Model(&userinfo).Updates(&userinfoupdate)
|
||||||
|
} else {
|
||||||
|
//无记录,创建
|
||||||
|
models.DB.Create(&userinfoupdate) // 传入指针
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
ReturnJson(ctx, "apiOK", nil)
|
||||||
|
|
||||||
|
} else {
|
||||||
|
ReturnJson(ctx, "jsonErr", nil)
|
||||||
|
}
|
||||||
|
|
||||||
|
} else {
|
||||||
|
ReturnJson(ctx, "jsonErr", nil)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
})
|
||||||
|
|
||||||
|
//通过cookie获取用户info
|
||||||
|
r.POST("/getinfo", func(ctx *gin.Context) {
|
||||||
|
isAuth, user, _ := AuthenticationAuthority(ctx)
|
||||||
|
if isAuth {
|
||||||
|
//载入用户info
|
||||||
|
var userinfo models.TabUserInfo_
|
||||||
|
userinfo.UserID = user.ID
|
||||||
|
//fmt.Println(userInfo)
|
||||||
|
var redata map[string]interface{} = make(map[string]interface{})
|
||||||
|
if models.DB.Where(&userinfo).First(&userinfo).Error == nil {
|
||||||
|
redata["userInfo"] = userinfo
|
||||||
|
} else {
|
||||||
|
redata["userInfo"] = nil
|
||||||
|
}
|
||||||
|
|
||||||
user.Pass = ""
|
user.Pass = ""
|
||||||
user.Salt = ""
|
user.Salt = ""
|
||||||
|
|
||||||
@@ -111,17 +184,54 @@ func ApiUser(r *gin.RouterGroup) {
|
|||||||
|
|
||||||
ReturnJson(ctx, "apiOK", redata)
|
ReturnJson(ctx, "apiOK", redata)
|
||||||
|
|
||||||
} else {
|
|
||||||
ReturnJson(ctx, "userCookieExpired", nil)
|
|
||||||
}
|
}
|
||||||
|
// _, cookieval := SeparateData(ctx)
|
||||||
|
// //fmt.Println("cookieis" + cookieval)
|
||||||
|
// if cookieval != "" {
|
||||||
|
// cookie := models.TabCookie_{
|
||||||
|
// Value: cookieval,
|
||||||
|
// }
|
||||||
|
// if models.DB.Where(&cookie).First(&cookie).Error == nil {
|
||||||
|
// //找到cookie,验证cookie有效性,以及更新cookie
|
||||||
|
// if models.CheckCookiesAndUpdate(&cookie) {
|
||||||
|
// //cookie有效
|
||||||
|
// //返回最新cookie
|
||||||
|
// redata := map[string]interface{}{
|
||||||
|
// "cookie": cookie,
|
||||||
|
// }
|
||||||
|
// //载入用户info
|
||||||
|
// userInfo := models.TabFileInfo_{
|
||||||
|
// UserID: cookie.UserID,
|
||||||
|
// }
|
||||||
|
// if models.DB.Where(&userInfo).First(&userInfo).Error == nil {
|
||||||
|
// redata["userInfo"] = userInfo
|
||||||
|
// } else {
|
||||||
|
// redata["userInfo"] = nil
|
||||||
|
// }
|
||||||
|
|
||||||
} else {
|
// //载入user
|
||||||
ReturnJson(ctx, "userCookieNotFund", nil)
|
// user := models.TabUser_{
|
||||||
}
|
// ID: cookie.UserID,
|
||||||
|
// }
|
||||||
|
// models.DB.Where(&user).First(&user)
|
||||||
|
// user.Pass = ""
|
||||||
|
// user.Salt = ""
|
||||||
|
|
||||||
} else {
|
// redata["user"] = user
|
||||||
ReturnJson(ctx, "userCookieError", nil)
|
|
||||||
}
|
// ReturnJson(ctx, "apiOK", redata)
|
||||||
|
|
||||||
|
// } else {
|
||||||
|
// ReturnJson(ctx, "userCookieExpired", nil)
|
||||||
|
// }
|
||||||
|
|
||||||
|
// } else {
|
||||||
|
// ReturnJson(ctx, "userCookieNotFund", nil)
|
||||||
|
// }
|
||||||
|
|
||||||
|
// } else {
|
||||||
|
// ReturnJson(ctx, "userCookieError", nil)
|
||||||
|
// }
|
||||||
|
|
||||||
})
|
})
|
||||||
//用户登陆
|
//用户登陆
|
||||||
|
|||||||
Generated
+923
File diff suppressed because it is too large
Load Diff
@@ -26,6 +26,7 @@
|
|||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@vitejs/plugin-vue": "^6.0.1",
|
"@vitejs/plugin-vue": "^6.0.1",
|
||||||
|
"sass-embedded": "^1.93.3",
|
||||||
"vite": "^7.1.11",
|
"vite": "^7.1.11",
|
||||||
"vite-plugin-vue-devtools": "^8.0.3"
|
"vite-plugin-vue-devtools": "^8.0.3"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -184,9 +184,7 @@ onMounted(() => {
|
|||||||
>
|
>
|
||||||
<img
|
<img
|
||||||
:src="
|
:src="
|
||||||
userStore.userInfo
|
userStore.getUserAvatarPath()
|
||||||
? userStore.userInfo.AvatarPath
|
|
||||||
: '/ava.svg'
|
|
||||||
"
|
"
|
||||||
alt=""
|
alt=""
|
||||||
class="avatar avatar-sm"
|
class="avatar avatar-sm"
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
<script setup>
|
<script setup>
|
||||||
import { onMounted, ref, watch } from "vue";
|
import { onMounted, ref, watch ,defineProps} from "vue";
|
||||||
import Litepicker from "litepicker";
|
import Litepicker from "litepicker";
|
||||||
import { useI18n } from "vue-i18n";
|
import { useI18n } from "vue-i18n";
|
||||||
const { t, locale } = useI18n();
|
const { t, locale } = useI18n();
|
||||||
@@ -11,6 +11,12 @@ watch(locale, () => {
|
|||||||
picker?.setOptions({ lang: locale.value });
|
picker?.setOptions({ lang: locale.value });
|
||||||
});
|
});
|
||||||
|
|
||||||
|
defineProps({
|
||||||
|
setdef: {
|
||||||
|
type: String,
|
||||||
|
default: "",
|
||||||
|
},
|
||||||
|
})
|
||||||
onMounted(() => {
|
onMounted(() => {
|
||||||
// @formatter:off
|
// @formatter:off
|
||||||
|
|
||||||
@@ -37,6 +43,7 @@ defineExpose({
|
|||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
|
|
||||||
<div class="input-icon">
|
<div class="input-icon">
|
||||||
<span class="input-icon-addon"
|
<span class="input-icon-addon"
|
||||||
><!-- Download SVG icon from http://tabler-icons.io/i/calendar -->
|
><!-- Download SVG icon from http://tabler-icons.io/i/calendar -->
|
||||||
@@ -67,7 +74,7 @@ defineExpose({
|
|||||||
class="form-control"
|
class="form-control"
|
||||||
:placeholder="t('message.select_date')"
|
:placeholder="t('message.select_date')"
|
||||||
ref="datepicker"
|
ref="datepicker"
|
||||||
value=""
|
:value="setdef"
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@@ -46,7 +46,8 @@
|
|||||||
"user_settings": "Settings",
|
"user_settings": "Settings",
|
||||||
"preferences": "Preferences",
|
"preferences": "Preferences",
|
||||||
"administrator": "Administrator",
|
"administrator": "Administrator",
|
||||||
"select_date":"Select a date"
|
"select_date":"Select a date",
|
||||||
|
"save_ok":"Saved successfully"
|
||||||
},
|
},
|
||||||
"settings": {
|
"settings": {
|
||||||
"account_settings": "Account Settings",
|
"account_settings": "Account Settings",
|
||||||
|
|||||||
@@ -46,7 +46,8 @@
|
|||||||
"user_settings": "个人资料",
|
"user_settings": "个人资料",
|
||||||
"preferences": "偏好设置",
|
"preferences": "偏好设置",
|
||||||
"administrator": "管理员",
|
"administrator": "管理员",
|
||||||
"select_date":"选择日期"
|
"select_date":"选择日期",
|
||||||
|
"save_ok":"保存成功"
|
||||||
},
|
},
|
||||||
"settings": {
|
"settings": {
|
||||||
"account_settings": "个人设置",
|
"account_settings": "个人设置",
|
||||||
|
|||||||
@@ -54,12 +54,12 @@ export const my_network_func = {
|
|||||||
{
|
{
|
||||||
|
|
||||||
if(response.data.err_code==0){
|
if(response.data.err_code==0){
|
||||||
if(response.data.return.cookie){
|
// if(response.data.return.cookie){
|
||||||
|
|
||||||
userstore.cookieUpdata(response.data.return.cookie)
|
// userstore.cookieUpdata(response.data.return.cookie)
|
||||||
}
|
// }
|
||||||
|
|
||||||
}else if(response.data.err_code==-46){
|
}else if(response.data.err_code==-44){//后端返回的cookie错误码
|
||||||
//userCookieExpired
|
//userCookieExpired
|
||||||
userstore.logout()
|
userstore.logout()
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ import { my_network_func } from "@/my_network_func";
|
|||||||
export const useUserStore = defineStore("user", () => {
|
export const useUserStore = defineStore("user", () => {
|
||||||
// 状态 (State)
|
// 状态 (State)
|
||||||
const userInfo = ref(null);
|
const userInfo = ref(null);
|
||||||
const user =ref(null)
|
const user = ref(null);
|
||||||
const userCookie = ref(null);
|
const userCookie = ref(null);
|
||||||
const isLoggedIn = ref(false);
|
const isLoggedIn = ref(false);
|
||||||
|
|
||||||
@@ -23,6 +23,30 @@ export const useUserStore = defineStore("user", () => {
|
|||||||
return userCookie.value;
|
return userCookie.value;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const getUserBirthday = () => {
|
||||||
|
if (userInfo.value != null) {
|
||||||
|
const date = new Date(userInfo.value.Birthdate);
|
||||||
|
|
||||||
|
// 获取年月日并格式化
|
||||||
|
const year = date.getFullYear();
|
||||||
|
const month = String(date.getMonth() + 1).padStart(2, "0");
|
||||||
|
const day = String(date.getDate()).padStart(2, "0");
|
||||||
|
|
||||||
|
const formattedDate = `${year}-${month}-${day}`;
|
||||||
|
return formattedDate;
|
||||||
|
}
|
||||||
|
return "";
|
||||||
|
};
|
||||||
|
|
||||||
|
const getUserAvatarPath = () => {
|
||||||
|
if (userInfo.value != null) {
|
||||||
|
if (userInfo.value.AvatarPath != "") {
|
||||||
|
return userInfo.value.AvatarPath;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return "/ava.svg";
|
||||||
|
};
|
||||||
|
|
||||||
const getUserInfoFromCookie = () => {
|
const getUserInfoFromCookie = () => {
|
||||||
my_network_func.postJson("/users/getinfo", {}, (r) => {
|
my_network_func.postJson("/users/getinfo", {}, (r) => {
|
||||||
//console.log(r);
|
//console.log(r);
|
||||||
@@ -30,11 +54,11 @@ export const useUserStore = defineStore("user", () => {
|
|||||||
case 200:
|
case 200:
|
||||||
switch (r.data.err_code) {
|
switch (r.data.err_code) {
|
||||||
case 0:
|
case 0:
|
||||||
user.value=r.data.return.user
|
user.value = r.data.return.user;
|
||||||
if(r.data.return.userInfo){
|
if (r.data.return.userInfo) {
|
||||||
userInfo.value=r.data.return.userInfo
|
userInfo.value = r.data.return.userInfo;
|
||||||
}else{
|
} else {
|
||||||
userInfo.value=null
|
userInfo.value = null;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
@@ -92,6 +116,8 @@ export const useUserStore = defineStore("user", () => {
|
|||||||
userInfo,
|
userInfo,
|
||||||
userCookie,
|
userCookie,
|
||||||
isLoggedIn,
|
isLoggedIn,
|
||||||
|
getUserAvatarPath,
|
||||||
|
getUserBirthday,
|
||||||
logout,
|
logout,
|
||||||
login,
|
login,
|
||||||
loginFromStoreCookie,
|
loginFromStoreCookie,
|
||||||
|
|||||||
@@ -4,15 +4,20 @@ import settingNavigation from "@/components/settingNavigation.vue";
|
|||||||
import { useI18n } from "vue-i18n";
|
import { useI18n } from "vue-i18n";
|
||||||
import datePicker from "@/components/datePicker.vue";
|
import datePicker from "@/components/datePicker.vue";
|
||||||
import imageCropper from "@/components/imageCropper.vue";
|
import imageCropper from "@/components/imageCropper.vue";
|
||||||
|
import { useUserStore } from "@/stores/user";
|
||||||
|
import { my_network_func } from "@/my_network_func";
|
||||||
|
import MyOffcanvas from "@/components/MyOffcanvas.vue";
|
||||||
|
const mos = ref();
|
||||||
|
|
||||||
const { t } = useI18n();
|
const { t } = useI18n();
|
||||||
|
|
||||||
const birthday = ref();
|
const birthday = ref();
|
||||||
const username = ref();
|
const username = ref();
|
||||||
const userremark = ref();
|
const userremark = ref();
|
||||||
|
|
||||||
|
const userStore = useUserStore();
|
||||||
|
|
||||||
function updataInfo() {
|
function updataInfo() {
|
||||||
|
|
||||||
|
|
||||||
let isDataErr = false;
|
let isDataErr = false;
|
||||||
|
|
||||||
let birthdayValue = birthday.value.datepicker.value;
|
let birthdayValue = birthday.value.datepicker.value;
|
||||||
@@ -46,14 +51,43 @@ function updataInfo() {
|
|||||||
console.log("用户名:", usernameValue);
|
console.log("用户名:", usernameValue);
|
||||||
console.log("备注:", userremarkValue);
|
console.log("备注:", userremarkValue);
|
||||||
console.log("生日:", birthdayValue);
|
console.log("生日:", birthdayValue);
|
||||||
|
my_network_func.postJson(
|
||||||
|
"/users/updateInfo",
|
||||||
|
{
|
||||||
|
username: usernameValue,
|
||||||
|
remark: userremarkValue,
|
||||||
|
birthday: birthdayValue,
|
||||||
|
},
|
||||||
|
(r) => {
|
||||||
|
console.log(r);
|
||||||
|
switch (r.statusCode) {
|
||||||
|
case 200:
|
||||||
|
switch (r.data.err_code) {
|
||||||
|
case 0:
|
||||||
|
mos.value?.showAlert(
|
||||||
|
"success",
|
||||||
|
t("message.save_ok"),
|
||||||
|
1000
|
||||||
|
);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
mos.value?.showAlert("danger", t("message.server_error"), 5000);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
mos.value?.showAlert("danger", t("message.network_err"), 5000);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
onMounted(()=>{
|
onMounted(() => {
|
||||||
//console.log("account mounted");
|
//console.log("account mounted");
|
||||||
//username.value.value="Kevin";
|
//username.value.value="Kevin";
|
||||||
|
|
||||||
})
|
});
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
@@ -77,12 +111,13 @@ onMounted(()=>{
|
|||||||
</h3>
|
</h3>
|
||||||
<div class="row align-items-center">
|
<div class="row align-items-center">
|
||||||
<div class="col-auto">
|
<div class="col-auto">
|
||||||
<span
|
<img
|
||||||
|
:src="userStore.getUserAvatarPath()"
|
||||||
|
alt=""
|
||||||
class="avatar avatar-xl"
|
class="avatar avatar-xl"
|
||||||
style="background-image: url(./static/avatars/000m.jpg)"
|
/>
|
||||||
></span>
|
|
||||||
</div>
|
</div>
|
||||||
<imageCropper />
|
<!-- <imageCropper /> -->
|
||||||
<div class="col-auto">
|
<div class="col-auto">
|
||||||
<button class="btn">
|
<button class="btn">
|
||||||
{{ t("settings.change_avatar") }}
|
{{ t("settings.change_avatar") }}
|
||||||
@@ -93,15 +128,29 @@ onMounted(()=>{
|
|||||||
<div class="row g-3">
|
<div class="row g-3">
|
||||||
<div class="col-md">
|
<div class="col-md">
|
||||||
<div class="form-label">{{ t("settings.name") }}</div>
|
<div class="form-label">{{ t("settings.name") }}</div>
|
||||||
<input ref="username" type="text" class="form-control" />
|
<input
|
||||||
|
ref="username"
|
||||||
|
type="text"
|
||||||
|
class="form-control"
|
||||||
|
:value="
|
||||||
|
userStore.userInfo ? userStore.userInfo.Username : ''
|
||||||
|
"
|
||||||
|
/>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-md">
|
<div class="col-md">
|
||||||
<div class="form-label">{{ t("settings.remark") }}</div>
|
<div class="form-label">{{ t("settings.remark") }}</div>
|
||||||
<input ref="userremark" type="text" class="form-control" />
|
<input
|
||||||
|
ref="userremark"
|
||||||
|
type="text"
|
||||||
|
class="form-control"
|
||||||
|
:value="
|
||||||
|
userStore.userInfo ? userStore.userInfo.FirstName : ''
|
||||||
|
"
|
||||||
|
/>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-md">
|
<div class="col-md">
|
||||||
<div class="form-label">{{ t("settings.birthday") }}</div>
|
<div class="form-label">{{ t("settings.birthday") }}</div>
|
||||||
<datePicker ref="birthday" />
|
<datePicker ref="birthday" :setdef="userStore.getUserBirthday()"/>
|
||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
<button class="btn" @click="updataInfo">
|
<button class="btn" @click="updataInfo">
|
||||||
@@ -139,4 +188,5 @@ onMounted(()=>{
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
<MyOffcanvas ref="mos" />
|
||||||
</template>
|
</template>
|
||||||
|
|||||||
Reference in New Issue
Block a user