进度到更新userinfo

This commit is contained in:
2025-07-11 20:59:48 +08:00
parent 6e719f52d4
commit 85d59b2799
7 changed files with 357 additions and 292 deletions
+174 -145
View File
@@ -1,8 +1,8 @@
package routers package routers
import ( import (
"fmt"
"saas/models" "saas/models"
"strings"
"time" "time"
"github.com/gin-gonic/gin" "github.com/gin-gonic/gin"
@@ -11,16 +11,14 @@ import (
func V1_user_api(r *gin.RouterGroup) { func V1_user_api(r *gin.RouterGroup) {
var err_code = Error_code["api_ok"]
var err_msg string
r.POST("/add", func(ctx *gin.Context) { r.POST("/add", func(ctx *gin.Context) {
//返回前端的数据 //返回前端的数据
//转换传进来的数据 //转换传进来的数据
//转换传进来的数据 //转换传进来的数据
var jsonData Add_user_from var jsonData From_user_add
data, _ := ctx.Get("data") data, is_have_data := ctx.Get("data")
if is_have_data {
if err := mapstructure.Decode(data, &jsonData); err == nil { if err := mapstructure.Decode(data, &jsonData); err == nil {
//转换字段 //转换字段
newUser := models.User{ newUser := models.User{
@@ -57,7 +55,9 @@ func V1_user_api(r *gin.RouterGroup) {
} else { } else {
Return_json(ctx, "json_error", nil) Return_json(ctx, "json_error", nil)
} }
//Return_json(ctx, "api_err", nil) } else {
Return_json(ctx, "json_error", nil)
}
}) })
@@ -65,8 +65,9 @@ func V1_user_api(r *gin.RouterGroup) {
//返回前端的数据 //返回前端的数据
//转换传进来的数据 //转换传进来的数据
var jsonData Login_from var jsonData From_user_loggin
data, _ := ctx.Get("data") data, is_have_data := ctx.Get("data")
if is_have_data {
if err := mapstructure.Decode(data, &jsonData); err == nil { if err := mapstructure.Decode(data, &jsonData); err == nil {
if jsonData.Username != "" { if jsonData.Username != "" {
//转换字段 //转换字段
@@ -151,8 +152,9 @@ func V1_user_api(r *gin.RouterGroup) {
} else { } else {
Return_json(ctx, "json_error", nil) Return_json(ctx, "json_error", nil)
} }
} else {
//Return_json(ctx, "api_err", nil) Return_json(ctx, "json_error", nil)
}
}) })
@@ -190,180 +192,207 @@ func V1_user_api(r *gin.RouterGroup) {
}) })
r.POST("/updata_info", func(ctx *gin.Context) { r.POST("/updata_info", func(ctx *gin.Context) {
//返回前端的数据 _, is_login := ctx.Get("user_info")
err_msg = "user_api_error" if is_login {
err_code = Error_code[err_msg]
//先判断是否已经登录
//获取中间件处理的结果
is_login, _ := ctx.Get("is_login")
if is_login == true {
//转换传进来的数据 //转换传进来的数据
var jsonData map[string]interface{} var json_data From_user_updata_info
if err := ctx.ShouldBindJSON(&jsonData); err == nil { data, is_have_data := ctx.Get("data")
if is_have_data {
if err := mapstructure.Decode(data, &json_data); err == nil {
fmt.Println(json_data)
//先判断头像是否合法
if json_data.Avatar_id != 0 {
user_info_, _ := ctx.Get("user_info")
user_info, _ := user_info_.(*models.User_info) //这个数据本身就是从数据库读出来的,理论上结构转换不会出错
user_info_find := models.User_info{
ID: user_info.ID,
} }
new_user_info := models.User_info{ Return_json(ctx, "api_ok", nil)
AvatarPath: jsonData["avatar"].(string), } else {
FirstName: jsonData["first_name"].(string), Return_json(ctx, "json_error", nil)
Username: jsonData["username"].(string), }
Birthdate: models.Time_date_str_to_time(jsonData["birthday"].(string)), } else {
Return_json(ctx, "json_error", nil)
} }
//需要验证传入数据的合法性 例如头像url是否站内的 //var user_info models.User_info{}{}
if strings.HasPrefix(new_user_info.AvatarPath, models.Configs_user.Avatar_ginrouter_path) {
} else { } else {
new_user_info.AvatarPath = models.Configs_user.Avatar_path Return_json(ctx, "user_no_sign", nil)
} }
// //返回前端的数据
// err_msg = "user_api_error"
// err_code = Error_code[err_msg]
//fmt.Printf("%%#v: %#v\n", new_user_info) // //先判断是否已经登录
models.DB.Where(&user_info_find).Updates(&new_user_info) // //获取中间件处理的结果
// is_login, _ := ctx.Get("is_login")
// if is_login == true {
// //转换传进来的数据
// var jsonData map[string]interface{}
// if err := ctx.ShouldBindJSON(&jsonData); err == nil {
err_msg = "api_ok" // user_info_, _ := ctx.Get("user_info")
err_code = Error_code[err_msg] // user_info, _ := user_info_.(*models.User_info) //这个数据本身就是从数据库读出来的,理论上结构转换不会出错
// user_info_find := models.User_info{
// ID: user_info.ID,
// }
} else { // new_user_info := models.User_info{
err_msg = "json_error" // AvatarPath: jsonData["avatar"].(string),
err_code = Error_code[err_msg] // FirstName: jsonData["first_name"].(string),
} // Username: jsonData["username"].(string),
// Birthdate: models.Time_date_str_to_time(jsonData["birthday"].(string)),
// }
} else { // //需要验证传入数据的合法性 例如头像url是否站内的
//fmt.Println("no loged") // if strings.HasPrefix(new_user_info.AvatarPath, models.Configs_user.Avatar_ginrouter_path) {
err_msg = "user_no_sign"
err_code = Error_code[err_msg]
}
ctx.JSON(200, map[string]interface{}{ // } else {
"api": "ok", // new_user_info.AvatarPath = models.Configs_user.Avatar_path
"err_code": err_code, // }
"err_msg": err_msg,
}) // //fmt.Printf("%%#v: %#v\n", new_user_info)
// models.DB.Where(&user_info_find).Updates(&new_user_info)
// err_msg = "api_ok"
// err_code = Error_code[err_msg]
// } else {
// err_msg = "json_error"
// err_code = Error_code[err_msg]
// }
// } else {
// //fmt.Println("no loged")
// err_msg = "user_no_sign"
// err_code = Error_code[err_msg]
// }
// ctx.JSON(200, map[string]interface{}{
// "api": "ok",
// "err_code": err_code,
// "err_msg": err_msg,
// })
}) })
r.POST("/change_email", func(ctx *gin.Context) { r.POST("/change_email", func(ctx *gin.Context) {
//返回前端的数据 // //返回前端的数据
err_msg = "user_api_error" // err_msg = "user_api_error"
err_code = Error_code[err_msg] // err_code = Error_code[err_msg]
//先判断是否已经登录 // //先判断是否已经登录
//获取中间件处理的结果 // //获取中间件处理的结果
is_login, _ := ctx.Get("is_login") // is_login, _ := ctx.Get("is_login")
if is_login == true { // if is_login == true {
//转换传进来的数据 // //转换传进来的数据
var jsonData map[string]interface{} // var jsonData map[string]interface{}
if err := ctx.ShouldBindJSON(&jsonData); err == nil { // if err := ctx.ShouldBindJSON(&jsonData); err == nil {
//需要验证传入数据的合法性 // //需要验证传入数据的合法性
if models.Is_email_valid(jsonData["new_email"].(string)) { // if models.Is_email_valid(jsonData["new_email"].(string)) {
user_, _ := ctx.Get("user") // user_, _ := ctx.Get("user")
user, _ := user_.(*models.User) // user, _ := user_.(*models.User)
user_find := models.User{ // user_find := models.User{
ID: user.ID, // ID: user.ID,
} // }
user_new := models.User{ // user_new := models.User{
Email: jsonData["new_email"].(string), // Email: jsonData["new_email"].(string),
} // }
models.DB.Where(&user_find).Updates(&user_new) // models.DB.Where(&user_find).Updates(&user_new)
err_msg = "api_ok" // err_msg = "api_ok"
err_code = Error_code[err_msg] // err_code = Error_code[err_msg]
} else { // } else {
err_msg = "email_error" // err_msg = "email_error"
err_code = Error_code[err_msg] // err_code = Error_code[err_msg]
} // }
} else { // } else {
err_msg = "json_error" // err_msg = "json_error"
err_code = Error_code[err_msg] // err_code = Error_code[err_msg]
} // }
} else { // } else {
//fmt.Println("no loged") // //fmt.Println("no loged")
err_msg = "user_no_sign" // err_msg = "user_no_sign"
err_code = Error_code[err_msg] // err_code = Error_code[err_msg]
} // }
ctx.JSON(200, map[string]interface{}{ // ctx.JSON(200, map[string]interface{}{
"api": "ok", // "api": "ok",
"err_code": err_code, // "err_code": err_code,
"err_msg": err_msg, // "err_msg": err_msg,
}) // })
}) })
r.POST("/change_pass", func(ctx *gin.Context) { r.POST("/change_pass", func(ctx *gin.Context) {
//返回前端的数据 // //返回前端的数据
err_msg = "user_api_error" // err_msg = "user_api_error"
err_code = Error_code[err_msg] // err_code = Error_code[err_msg]
//先判断是否已经登录 // //先判断是否已经登录
//获取中间件处理的结果 // //获取中间件处理的结果
is_login, _ := ctx.Get("is_login") // is_login, _ := ctx.Get("is_login")
if is_login == true { // if is_login == true {
//转换传进来的数据 // //转换传进来的数据
var jsonData map[string]interface{} // var jsonData map[string]interface{}
if err := ctx.ShouldBindJSON(&jsonData); err == nil { // if err := ctx.ShouldBindJSON(&jsonData); err == nil {
//需要验证传入数据的合法性 // //需要验证传入数据的合法性
//读取已登录的用户信息 // //读取已登录的用户信息
user_, _ := ctx.Get("user") // user_, _ := ctx.Get("user")
user, _ := user_.(*models.User) // user, _ := user_.(*models.User)
user_find := models.User{ // user_find := models.User{
ID: user.ID, // ID: user.ID,
} // }
models.DB.Where(&user_find).First(&user_find) // models.DB.Where(&user_find).First(&user_find)
pass_old := jsonData["pass_old"].(string) // pass_old := jsonData["pass_old"].(string)
pass_new := jsonData["pass_new"].(string) // pass_new := jsonData["pass_new"].(string)
//对用户的密码进行哈希替换 // //对用户的密码进行哈希替换
pass_old = models.Hash_user_pass(pass_old) // pass_old = models.Hash_user_pass(pass_old)
pass_new = models.Hash_user_pass(pass_new) // pass_new = models.Hash_user_pass(pass_new)
if user_find.Pass == pass_old { // if user_find.Pass == pass_old {
new_user := models.User{ // new_user := models.User{
Pass: pass_new, // Pass: pass_new,
} // }
//修改密码 // //修改密码
models.DB.Where(&user_find).Updates(&new_user) // models.DB.Where(&user_find).Updates(&new_user)
//密码修改后所有cookie都应该失效 // //密码修改后所有cookie都应该失效
cookie_find := models.Cookie{ // cookie_find := models.Cookie{
UserID: user.ID, // UserID: user.ID,
} // }
models.DB.Where(&cookie_find).Delete(&cookie_find) // models.DB.Where(&cookie_find).Delete(&cookie_find)
err_msg = "api_ok" // err_msg = "api_ok"
err_code = Error_code[err_msg] // err_code = Error_code[err_msg]
} else { // } else {
err_msg = "user_password_err" // err_msg = "user_password_err"
err_code = Error_code[err_msg] // err_code = Error_code[err_msg]
} // }
} else { // } else {
err_msg = "json_error" // err_msg = "json_error"
err_code = Error_code[err_msg] // err_code = Error_code[err_msg]
} // }
} else { // } else {
//fmt.Println("no loged") // //fmt.Println("no loged")
err_msg = "user_no_sign" // err_msg = "user_no_sign"
err_code = Error_code[err_msg] // err_code = Error_code[err_msg]
} // }
ctx.JSON(200, map[string]interface{}{ // ctx.JSON(200, map[string]interface{}{
"api": "ok", // "api": "ok",
"err_code": err_code, // "err_code": err_code,
"err_msg": err_msg, // "err_msg": err_msg,
}) // })
}) })
} }
+9 -2
View File
@@ -1,13 +1,20 @@
package routers package routers
type Login_from struct { type From_user_loggin struct {
Is_keep_login bool `json:"is_keep_login"` Is_keep_login bool `json:"is_keep_login"`
Username string `json:"username"` Username string `json:"username"`
Password string `json:"password"` Password string `json:"password"`
} }
type Add_user_from struct { type From_user_add struct {
Useremail string `json:"useremail"` Useremail string `json:"useremail"`
Username string `json:"username"` Username string `json:"username"`
Userpass string `json:"userpass"` Userpass string `json:"userpass"`
} }
type From_user_updata_info struct {
Avatar_id uint `json:"avatar_id"`
Username string `json:"username"`
First_name string `json:"first_name"`
Birthday string `json:"birthday"`
}
+2 -8
View File
@@ -1,8 +1,6 @@
package routers package routers
import ( import (
"saas/models"
"github.com/gin-gonic/gin" "github.com/gin-gonic/gin"
"github.com/mitchellh/mapstructure" "github.com/mitchellh/mapstructure"
) )
@@ -18,13 +16,9 @@ func Router_api(r *gin.RouterGroup) {
var jsonData map[string]interface{} var jsonData map[string]interface{}
if err := ctx.ShouldBindJSON(&jsonData); err == nil { if err := ctx.ShouldBindJSON(&jsonData); err == nil {
//分离数据 //分离数据
var cookie_t models.Cookie
if err = mapstructure.Decode(jsonData["cookie"], &cookie_t); err == nil {
if cookie_t.Value != "" {
cookie_vel := cookie_t.Value
ctx.Set("cookie_value", cookie_vel)
}
if jsonData["cookie"] != "" {
ctx.Set("cookie_value", jsonData["cookie"])
} }
var data_t map[string]interface{} var data_t map[string]interface{}
+4
View File
@@ -0,0 +1,4 @@
package routers
var Url_flie_download_from_id_head string = "/file/download/id"
var Url_flie_preview_from_id_head string = "/file/preview/id"
+11 -2
View File
@@ -167,7 +167,7 @@ func Router_file(r *gin.RouterGroup) {
models.DB.Where(&fund_file_info).Find(&fund_file_info2) models.DB.Where(&fund_file_info).Find(&fund_file_info2)
if fund_file_info2.ID != 0 { if fund_file_info2.ID != 0 {
fmt.Println(fund_file_info2) //fmt.Println(fund_file_info2)
fund_file_info2.Const += 1 fund_file_info2.Const += 1
models.DB.Where(&fund_file_info).Updates(&fund_file_info2) models.DB.Where(&fund_file_info).Updates(&fund_file_info2)
} else { } else {
@@ -176,8 +176,17 @@ func Router_file(r *gin.RouterGroup) {
fund_file_info2 = fund_file_info fund_file_info2 = fund_file_info
} }
//url_download:=fmt.Sprintf("")
file_id_str := fmt.Sprintf("%d", fund_file_info2.ID)
url_download := path.Join(Url_flie_download_from_id_head, file_id_str)
url_preview := path.Join(Url_flie_preview_from_id_head, file_id_str)
red := map[string]interface{}{ red := map[string]interface{}{
"data": fund_file_info2, "id": fund_file_info2.ID,
"name": fund_file_info2.Name,
"sha256": fund_file_info2.Sha256,
"download": url_download,
"preview": url_preview,
} }
Return_json(ctx, "api_ok", red) Return_json(ctx, "api_ok", red)
+1 -1
View File
@@ -78,7 +78,7 @@ function post_json(path, json, callback) {
data["data"] = json; data["data"] = json;
var cookie = load_json("cookie"); var cookie = load_json("cookie");
if (cookie) { if (cookie) {
data["cookie"] = cookie; data["cookie"] = cookie.Value;
} }
var re_data = {}; var re_data = {};
+55 -33
View File
@@ -149,7 +149,7 @@
</div> </div>
<!-- 消息提示 --> <!-- 消息提示 -->
<div id="message" class="alert"></div> <div id="message" class="alertavater"></div>
<div class="preview-stats"> <div class="preview-stats">
<!-- <p>当前缩放: <span id="zoomValue">100%</span></p> --> <!-- <p>当前缩放: <span id="zoomValue">100%</span></p> -->
@@ -378,26 +378,24 @@
} }
/* 消息提示 */ /* 消息提示 */
.alert { .alertavater {
padding: 15px; padding: 15px;
border-radius: 6px; border-radius: 6px;
margin-top: 20px; margin-top: 20px;
display: none; display: none;
} }
.alert-success { .alertavater-success {
background: #dff0d8; background: #dff0d8;
color: #3c763d; color: #3c763d;
} }
.alert-error { .alertavater-error {
background: #f2dede; background: #f2dede;
color: var(--error-color); color: var(--error-color);
} }
input[type="file"] {
display: none;
}
</style> </style>
<!-- lib --> <!-- lib -->
@@ -453,6 +451,7 @@
const image = document.getElementById('cropper-image'); const image = document.getElementById('cropper-image');
const message = document.getElementById('message'); const message = document.getElementById('message');
let currentScale = 1; let currentScale = 1;
var avatar_id = 0;
// 初始化Cropper // 初始化Cropper
function initCropper(imageSrc) { function initCropper(imageSrc) {
@@ -562,10 +561,11 @@
post_file("/image", blob, `avatar.png`, (c) => { post_file("/image", blob, `avatar.png`, (c) => {
if (c.statusCode == 200) { if (c.statusCode == 200) {
if (c.data.err_code == 0) { if (c.data.err_code == 0) {
//banner_alert('success', "更换成功", 950)
showMessage(`✅ 上传成功!`, 'success'); showMessage(`✅ 上传成功!`, 'success');
//avatar_toolt.hide(); avatar_id = c.data.return.id;
set_user_avatar(c.data.return.preview);
avatar_toolt.hide();
} else { } else {
showMessage(`❌ 上传失败:` + c.data.err_msg, 'error'); showMessage(`❌ 上传失败:` + c.data.err_msg, 'error');
//banner_alert('warning', "服务错误", 3000) //banner_alert('warning', "服务错误", 3000)
@@ -631,36 +631,58 @@
//更新用户资料 //更新用户资料
function updata_user_info() { function updata_user_info() {
const url = '/api/v1/user/updata_info'; post_json("/user/updata_info", {
const sumt_data = { avatar_id: avatar_id,
avatar: get_user_avatar(),
username: document.getElementById("username").value, username: document.getElementById("username").value,
first_name: document.getElementById("first_name").value, first_name: document.getElementById("first_name").value,
birthday: document.getElementById("birthday-picker").value, birthday: document.getElementById("birthday-picker").value,
}, (c) => {
if (c.statusCode == 200) {
if (c.data.err_code == 0) {
}; banner_alert('success', "更新成功", 950)
try {
const response = axios.post(url, sumt_data, {
headers: {
'Content-Type': 'application/json'
}
}).then(response => {
//console.log(response)
if (response.data.err_code == 0) {
location.reload()
} else { } else {
console.log(response.data) banner_alert('warning', "错误:"+c.data.err_msg, 1000)
} }
} else {
banner_alert('danger', "网络连接错误:" + c.error, 10000)
}
}); });
} catch (error) { // const url = '/api/v1/user/updata_info';
if (error.response) { // const sumt_data = {
// 服务器返回了错误状态码(如 4xx, 5xx) // avatar: get_user_avatar(),
console.error('服务器错误:', error.response.data); // avatar_id:avatar_id,
} else { // username: document.getElementById("username").value,
console.error('请求未完成:', error.message); // first_name: document.getElementById("first_name").value,
} // birthday: document.getElementById("birthday-picker").value,
}
// };
// try {
// const response = axios.post(url, sumt_data, {
// headers: {
// 'Content-Type': 'application/json'
// }
// }).then(response => {
// //console.log(response)
// if (response.data.err_code == 0) {
// location.reload()
// } else {
// console.log(response.data)
// }
// });
// } catch (error) {
// if (error.response) {
// // 服务器返回了错误状态码(如 4xx, 5xx)
// console.error('服务器错误:', error.response.data);
// } else {
// console.error('请求未完成:', error.message);
// }
// }
} }
</script> </script>