index.go
文件中的代码,我将为该文件中的主要功能和方法添加注释,并生成一篇 Markdown 格式的文章。这将包括对每个函数的用途、输入参数和返回值的简要说明。
index.go
包和导入
package adminimport ("context""errors""gf_new_web/api/common""gf_new_web/internal/service""github.com/gogf/gf/v2/frame/g"
)
- 包名:
admin
- 导入说明:
context
: 用于传递请求上下文。errors
: 用于处理错误。gf_new_web/api/common
和gf_new_web/internal/service
: 项目内部的 API 和服务层。github.com/gogf/gf/v2/frame/g
: GoFrame 框架的核心包。
登录功能
func (c *cIndex) Login(ctx context.Context, req *common.UserLoginReq) (*common.ReturnJsRes, error) {g.Log().Info(ctx, "收到登录请求", req)loginRes, err := service.User().Login(ctx, req)if err != nil {return nil, err}r := g.RequestFromCtx(ctx)loginRes.Msg = "登录成功"r.Response.WriteJson(loginRes)return loginRes, nil
}
- 功能: 处理用户登录请求。
- 参数:
ctx
: 请求的上下文。req
: 用户登录请求的详细信息。
- 返回:
*common.ReturnJsRes
: 登录操作的结果。error
: 错误信息。
注册功能
func (c *cIndex) Reg(ctx context.Context, req *common.UserRegisterReq) (*common.ResultRes[int64], error) {g.Log().Info(ctx, "收到注册请求", req)registerRes, err := service.User().Register(ctx, req)if err != nil {return nil, err}r := g.RequestFromCtx(ctx)r.Response.WriteJson(registerRes)return registerRes, nil
}
- 功能: 处理用户注册请求。
- 参数:
ctx
: 请求的上下文。req
: 用户注册请求的详细信息。
- 返回:
*common.ResultRes[int64]
: 注册操作的结果。error
: 错误信息。
获取用户信息
func (c *cIndex) GetInfo(ctx context.Context, req *common.UserInfoReq) (*common.ReturnJsRes, error) {g.Log().Info(ctx, "收到获取用户信息请求", req)infoRes, err := service.User().GetInfo(ctx, req)if err != nil {return nil, err}r := g.RequestFromCtx(ctx)infoRes.Msg = "获取用户信息成功"r.Response.WriteJson(infoRes)return infoRes, nil
}
- 功能: 获取用户的详细信息。
- 参数:
ctx
: 请求的上下文。req
: 用户信息请求的详细信息。
- 返回:
*common.ReturnJsRes
: 用户信息。error
: 错误信息。
获取验证码
func (c *cIndex) GetCaptcha(ctx context.Context, req *common.CodeReq) (*common.ReturnJsRes, error) {g.Log().Info(ctx, "收到获取验证码请求", req)captchaId, base64Image := service.Captcha().Get()if captchaId == "" || base64Image == "" {return nil, errors.New("获取验证码失败")}return &common.ReturnJsRes{Code: 0,Msg: "获取验证码成功",Data: g.Map{"captchaId": captchaId,"image": base64Image,},}, nil
}
- 功能: 生成并返回验证码。
- 参数:
ctx
: 请求的上下文。req
: 验证码请求的详细信息。
- 返回:
*common.ReturnJsRes
: 验证码信息。error
: 错误信息。
启动的端口为8555
vue-next-admin 中的相关配置 :
改为对应的端口。
api中进行改变:
import request from '/@/utils/request';/*** (不建议写成 request.post(xxx),因为这样 post 时,无法 params 与 data 同时传参)** 登录api接口集合* @method signIn 用户登录* @method signOut 用户退出登录*/
export function useLoginApi() {return {signIn: (data: object) => {return request({url: '/admin/login',method: 'post',data,});},getCode: () => {return request({url: '/admin/code',method: 'get'});},signOut: (data: object) => {return request({url: '/admin/signOut',method: 'post',data,});},};
}
界面进行引入验证码:
相关代码:
以下是从您提供的文件中提取的 getLoginCode
和 onSignIn
函数的详细说明:
getLoginCode
函数
这个函数负责异步获取登录验证码。它首先尝试调用登录API的 getCode
方法来获取验证码。如果成功,它会更新状态中的 captchaImg
和 captchaId
。如果失败,它会捕获错误并显示错误消息。
const getLoginCode = async () => {try {const res = await useLoginApi().getCode();if (res.data.data) {state.captchaImg = res.data.data.image;state.ruleForm.captchaId = res.data.data.captchaId;} else {throw new Error('验证码数据格式错误');}} catch (error: any) {ElMessage.error(error?.message || '获取验证码失败');}
};
onSignIn
函数
这个函数处理用户的登录操作。它首先验证用户输入的手机号和密码格式是否正确。如果格式验证失败,将显示相应的错误消息。如果格式验证成功,它将尝试通过API进行登录。登录成功后,会根据配置决定初始化前端或后端路由,并处理登录成功后的跳转和状态更新。如果登录失败,它会显示错误消息并重新获取验证码。
const onSignIn = async () => {state.loading.signIn = true;try {if (!verifyPhone(state.ruleForm.userName)) {ElMessage.error('手机号格式错误');return;}if (!verifyPasswordLengthNoSpaces(state.ruleForm.password)) {ElMessage.error('密码格式错误');return;}const res = await useLoginApi().signIn({username: state.ruleForm.userName,password: state.ruleForm.password,code: state.ruleForm.code,});if (res.code === 200) { // 假设200是成功状态码Session.set('token', res.data.token);Cookies.set('userName', state.ruleForm.userName);let isNoPower;if (!themeConfig.value.isRequestRoutes) {isNoPower = await initFrontEndControlRoutes();} else {isNoPower = await initBackEndControlRoutes();}signInSuccess(isNoPower);} else {ElMessage.error(res.msg || '登录失败');getLoginCode();}} catch (error) {ElMessage.error('登录失败,请重试');getLoginCode();} finally {state.loading.signIn = false;}
};
这两个函数是登录流程的核心部分,处理验证码获取和用户身份验证的逻辑。