
回复
在开发鸿蒙应用时,登录页面是一个常见的功能模块。通过登录页面,用户可以验证自己的身份并进入应用的主界面。以下是一个完整的登录页面实现,包括用户输入账号和密码、调用后端接口验证登录信息,并使用本地存储保存登录状态。
import { router } from '@kit.ArkUI';
import { httpRequestGet } from '../Utils/HttpUtils';
import { LoginModel, LoginModelUser } from '../model/LoginModel';
import promptAction from '@ohos.promptAction';
import { common } from '@kit.AbilityKit';
import { preferences } from '@kit.ArkData';
let dataPreference: preferences.Preferences | null = null;
dataPreference
,用于存储用户登录信息。
@Entry
@Component
struct Index {
@State message: string = 'Hello World';
@State username: string = "";
@State password: string = "";
private backtime: number = 0;
private loginurl: string = "http://42.192.45.45:8080/boss/user/validlogin?";
Index
的登录页面组件。@State
装饰器定义了username
和password
,用于存储用户输入的账号和密码。loginurl
,用于存储登录接口的URL。
async toLogin() {
let username = 'username=';
let password = '&password=';
let networkurl = this.loginurl + username + this.username + password + this.password;
console.log("networkurl===>" + networkurl);
await httpRequestGet(networkurl).then((data) =>
console.log("登录返回数据:" + data.toString());
let loginModel: LoginModel = JSON.parse(data.toString());
let msg = loginModel.msg;
let options: preferences.Options = { name: 'myStore' };
dataPreference = preferences.getPreferencesSync(getContext(), options);
if (loginModel.code == 200) {
router.pushUrl({
url: "pages/Home"
});
dataPreference.putSync("username", this.username);
dataPreference.putSync("password", this.password);
dataPreference.flush();
} else {
promptAction.showToast({
message: msg
});
}
});
}
toLogin
方法,用于处理用户登录逻辑。httpRequestGet
发送GET请求到后端接口。
build()
Column()
Image($r('app.media.icon2'))
.width(100)
.height(100)
.borderRadius(10)
.margin({ top: 140 })
Text("登录界面")
.fontSize(24)
.fontWeight(700)
.margin({ top: 10 })
Text("登录账号以使用更多服务")
.fontColor("#ff807b7b")
.margin({ top: 10 })
TextInput({ placeholder: "请输入账号" })
.type(InputType.Normal)
.onChange((value)
this.username = value;
})
.newLocalFancy()
TextInput({ placeholder: "请输入密码" })
.type(InputType.Password)
.onChange((value)
this.password = value;
})
.newLocalFancy()
Row({ space: 10 })
Button("登录").width("80%").height(40)
.onClick(()
this.toLogin();
console.log("账号:" + this.username);
console.log("密码:" + this.password);
}).layoutWeight(1)
Button("注册").width("80%").height(40)
.onClick(()
router.pushUrl({
url: "pages/Register"
});
}).layoutWeight(1)
}.margin({ top: 20, right: 20, left: 20 })
}
.height('100%')
.width('100%')
}
Column
和Row
布局组件,构建登录页面的UI。onChange
事件监听输入框的值变化,更新username
和password
。toLogin
方法,注册按钮点击时跳转到注册页面。
@Styles
newLocalFancy() {
.margin({ top: 20, left: 20, right: 20 })
}
newLocalFancy
,用于设置输入框的外边距。
onBackPress(): boolean | void {
let nowtime = Date.now();
if (nowtime - this.backtime < 1000) {
const mContext = getContext(this) as common.UIAbilityContext;
mContext.terminateSelf();
} else {
this.backtime = nowtime;
promptAction.showToast({
message: "再按一次退出应用"
});
}
return true;
}
onBackPress
方法,用于处理返回键事件。
export class LoginModel {
msg?: string = "";
code?: number = 0;
user?: LoginModelUser = new LoginModelUser();
token?: string = "";
}
export class LoginModelUser {
id?: number = 0;
username?: string = "";
password?: string = "";
phone?: string = "";
sex?: string = "";
}