Skip to content
Snippets Groups Projects
Commit 2fff1fd3 authored by yz's avatar yz
Browse files

feat: login1

parent 79ec9a8f
No related branches found
No related tags found
No related merge requests found
...@@ -59,12 +59,7 @@ export default class CommonConstants { ...@@ -59,12 +59,7 @@ export default class CommonConstants {
static readonly input_disc_height = '80%' static readonly input_disc_height = '80%'
static readonly input_margin_left = '5' static readonly input_margin_left = '5'
static readonly TODO_DATA: Array<string> = [ //颜色
"早起晨练", static readonly base_blue = '#0A59F7'
"准备早餐",
"阅读名著",
"学习ArkTS",
"看剧放松",
]
} }
\ No newline at end of file
entry/src/main/ets/media/startIcon.png

19.6 KiB

// 首页:导航栏+子页面 // 首页:导航栏+子页面
import CommonConstants from '../common/CommonConstant';
import {LocalPage} from '../pages/LocalPage' import {LocalPage} from '../pages/LocalPage'
import {Login} from '../pages/LoginPage' import {Login} from '../pages/LoginPage'
...@@ -17,7 +18,7 @@ struct Index { ...@@ -17,7 +18,7 @@ struct Index {
Text(title) Text(title)
.fontFamily('HarmonyHeiTi-Medium') .fontFamily('HarmonyHeiTi-Medium')
.fontSize(10) .fontSize(10)
.fontColor(this.currentIndex === targetIndex ? '#0A59F7' : 'rgba(0,0,0,0.60)') .fontColor(this.currentIndex === targetIndex ? CommonConstants.base_blue : 'rgba(0,0,0,0.60)')
.textAlign(TextAlign.Center) .textAlign(TextAlign.Center)
.lineHeight(14) .lineHeight(14)
.fontWeight(500) .fontWeight(500)
...@@ -37,6 +38,7 @@ struct Index { ...@@ -37,6 +38,7 @@ struct Index {
Tabs({ barPosition: BarPosition.End, controller: this.tabsController }) { Tabs({ barPosition: BarPosition.End, controller: this.tabsController }) {
TabContent() { TabContent() {
LocalPage() LocalPage()
// Login()
} }
.tabBar(this.tabBarBuilder('TodoList', 0, $r('app.media.ic_01_on'), $r('app.media.ic_01_off'))) .tabBar(this.tabBarBuilder('TodoList', 0, $r('app.media.ic_01_on'), $r('app.media.ic_01_off')))
......
...@@ -2,16 +2,12 @@ ...@@ -2,16 +2,12 @@
import ToDoItem from '../view/TodoItem' import ToDoItem from '../view/TodoItem'
import CommonConstants from '../common/CommonConstant' import CommonConstants from '../common/CommonConstant'
import TodoItemModel from '../viewmodel/TodoItemModel' import TodoItemModel from '../viewmodel/TodoItemModel'
import DataModel from '../viewmodel/DataModel'
import AddItem from '../view/AddItem'; import AddItem from '../view/AddItem';
import ItemDetail from '../view/ItemDetail';
@Component @Component
export struct LocalPage { export struct LocalPage {
@Provide('localPageStack') LocalPageStack: NavPathStack = new NavPathStack(); //router @Provide('localPageStack') LocalPageStack: NavPathStack = new NavPathStack(); //router
@State totalTasks: Array<ToDoItem> = []
@Builder @Builder
PageMap(name: string) { PageMap(name: string) {
if(name.substring(0, 10) == 'ItemDetail') { if(name.substring(0, 10) == 'ItemDetail') {
...@@ -22,6 +18,8 @@ export struct LocalPage { ...@@ -22,6 +18,8 @@ export struct LocalPage {
} }
} }
@State totalTasks: Array<ToDoItem> = [] //待获取的todolist数据
build() { build() {
Navigation(this.LocalPageStack) { Navigation(this.LocalPageStack) {
Row() { //顶栏 Row() { //顶栏
......
// 登陆页面 // 登陆页面
import { router, promptAction } from '@kit.ArkUI' import { router, promptAction } from '@kit.ArkUI'
import CommonConstants from '../common/CommonConstant'
import './RegisterPage'
import Register from './RegisterPage';
@Component @Component
export struct Login { export struct Login {
@State name: string = '' @Provide('loginPageStack') LoginPageStack: NavPathStack = new NavPathStack(); //router
@Builder
PageMap(name1: string) {
if(name1 == 'Register') {
Register()
}
}
@State phone: string = ''
@State pwd: string = '' @State pwd: string = ''
// 提交 // 提交
handleSubmit() { handleSubmit() {
if(this.name === '' || this.pwd === '') { if(this.phone === '' || this.pwd === '') {
promptAction.showToast({ message: '号或密码不能为空' }) promptAction.showToast({ message: '手机号或密码不能为空' })
}else { }else {
// 登录接口逻辑... // 登录接口逻辑...
...@@ -21,40 +33,49 @@ export struct Login { ...@@ -21,40 +33,49 @@ export struct Login {
} }
build() { build() {
Column() { Navigation(this.LoginPageStack) {
Column({space: 10}) { Column() {
Image('../../resources/base/media/startIcon.png').height(50).width(50) Column({space: 10}) {
Text('HarmonyOS-Chat').fontSize(18).fontColor('#0a59f7') Image('media/startIcon.png').height(40).width(40)
} Text('欢迎登录Todolist').fontSize(18).fontColor(CommonConstants.base_blue).margin({top:10})
.margin({top: 50}) }
Column({space: 15}) { .margin({top: 50})
TextInput({placeholder: '请输入账号'}) Column({space: 15}) {
.onChange((value) => { TextInput({placeholder: '手机号'})
this.name = value .onChange((value) => {
}) this.phone = value
TextInput({placeholder: '请输入密码'}).type(InputType.Password) })
.onChange((value) => { TextInput({placeholder: '密码'}).type(InputType.Password)
this.pwd = value .onChange((value) => {
}) this.pwd = value
Button('登录').height(45).width('100%') })
.linearGradient({ angle: 135, colors: [['#0a59f7', 0.1], ['#07c160', 1]] }) Button('登录').height(45).width('100%')
.onClick(() => { .onClick(() => {
this.handleSubmit() this.handleSubmit()
}) })
} .margin({top: 8})
.margin({top: 30}) }
.width('80%') .margin({top: 20})
Row({space: 15}) { .width('80%')
Text('忘记密码').fontSize(14).opacity(0.5) Row({space: 15}) {
Text('注册账号').fontSize(14).opacity(0.5) Text('忘记密码').fontSize(14).opacity(0.5)
.onClick(() => { .onClick(()=>{
// router.pushUrl({url: 'pages/views/auth/Register'}) promptAction.showToast({ message: '忘了就重新注册一个吧...' })
}) })
Text('注册账号').fontSize(14).opacity(0.5)
.onClick(() => {
this.LoginPageStack.pushDestination({name: 'Register', onPop: ()=> {
// this.totalTasks = DataModel.getData() //返回时更新数据(应对删除数据的情况)
}})
})
}
.margin({top: 20})
} }
.margin({top: 20}) .height('100%')
.width('100%')
} }
.height('100%') .hideTitleBar(true)
.width('100%') .navDestination(this.PageMap)
.expandSafeArea([SafeAreaType.SYSTEM], [SafeAreaEdge.TOP, SafeAreaEdge.BOTTOM]) .mode(NavigationMode.Stack)
} }
} }
\ No newline at end of file
// 注册页面
import { router, promptAction } from '@kit.ArkUI'
import CommonConstants from '../common/CommonConstant';
@Component
export default struct Register {
@Consume('loginPageStack') LoginPageStack: NavPathStack
@State name: string = ''
@State phone: string = ''
@State pwd: string = ''
@State pwd2: string = ''
// 提交
handleSubmit() {
if(this.name === '' || this.pwd === '' || this.phone === '' || this.pwd2 === '') {
promptAction.showToast({ message: '输入项不能为空' })
}
else if(this.pwd != this.pwd2) {
promptAction.showToast({ message: '密码不一致' })
}
else {
// 登录接口逻辑...
promptAction.showToast({ message: '登录成功' })
setTimeout(() => {
router.replaceUrl({ url: 'pages/Index' })
}, 2000)
}
}
build() {
NavDestination() {
Column() {
Column({space: 10}) {
Image('media/startIcon.png').height(40).width(40)
Text('欢迎注册Todolist').fontSize(18).fontColor(CommonConstants.base_blue).margin({top:10})
}
.margin({top: 50})
Column({space: 15}) {
TextInput({placeholder: '昵称'})
.onChange((value) => {
this.name = value
})
TextInput({placeholder: '手机号'})
.onChange((value) => {
this.phone = value
})
TextInput({placeholder: '密码'}).type(InputType.Password)
.onChange((value) => {
this.pwd = value
})
TextInput({placeholder: '确认密码'}).type(InputType.Password)
.onChange((value) => {
this.pwd2 = value
})
Button('注册').height(45).width('100%')
.onClick(() => {
this.handleSubmit()
})
.margin({top: 8})
}
.margin({top: 20})
.width('80%')
Row({space: 15}) {
Text('返回登录').fontSize(14).opacity(0.5)
.onClick(()=>{
this.LoginPageStack.pop()
})
}
.margin({top: 20})
}
.height('100%')
.width('100%')
}
.hideTitleBar(true)
}
}
\ No newline at end of file
// 原来作业要求的网页版,应该没啥用
import { webview } from '@kit.ArkWeb'
import TodoItemModel from '../viewmodel/TodoItemModel'
import { http } from '@kit.NetworkKit'
import { promptAction } from '@kit.ArkUI';
interface HttpError {
message: string;
code: number;
}
interface SysTimeResponse {
sysTime1: string;
sysTime2: string;
}
class TestClass {
totalTasks: Array<TodoItemModel>
myTask: TodoItemModel = new TodoItemModel('','','','',false)
constructor(totalTasks: Array<TodoItemModel>) {this.totalTasks = totalTasks}
getTasks(): Array<TodoItemModel> {
return this.totalTasks
}
async markComplete(myIndex:number) {
this.myTask = this.totalTasks[myIndex]
this.myTask.isCompleted = !this.myTask.isCompleted
if(this.myTask.isCompleted) { //已完成
//请求时间
let httpRequest = http.createHttp();
let finishTime = ''
let count = 0
while(finishTime == '' && count<10) {
count++
await httpRequest.request('http://quan.suning.com/getSysTime.do', { // 苏宁时间戳API
method: http.RequestMethod.GET,
}).then((data) => {
if (data.responseCode === 200) {
let response = data.result + "";
console.info('Response: ' + response);
const json_res = JSON.parse(data.result + "") as SysTimeResponse
finishTime = json_res.sysTime2.substring(0,10)
} else {
console.error('Request failed with response code: ' + data.responseCode);
}
}).catch((err:HttpError) => {
console.error('Request error: ' + JSON.stringify(err));
})
}
httpRequest.destroy(); // 销毁HTTP请求对象
//请求结果
if(finishTime == '') { //请求失败,不操作
this.myTask.isCompleted = !this.myTask.isCompleted
promptAction.showToast({
message: '时间请求失败,请重试!'
})
return
}
else {
this.myTask.completeTime = finishTime
}
}
else { //更新后状态:未完成
this.myTask.completeTime = ''
}
//替换原来的对象
this.myTask = JSON.parse(JSON.stringify(this.myTask))
this.totalTasks.splice(myIndex, 1, this.myTask)
promptAction.showToast({
message: '更新成功!'
})
//只更新对象的属性
// let result = DataModel.updateData(this.myTask)
// if(result==-1) {
// promptAction.showToast({
// message: '更新失败,请刷新页面后重新尝试!'
// })
// }
// else {
// promptAction.showToast({
// message: '更新成功!'
// })
// }
}
}
@Component
struct WebPage {
webController: WebviewController = new webview.WebviewController()
@Link @Watch('onUpdated') totalTasks: Array<TodoItemModel> //TodoList
onUpdated() {
// this.webController.runJavaScript('myRefresh()')
this.webController.runJavaScript('todoList.innerHTML = \'\'; myRefresh()')
}
myClass:TestClass = new TestClass(this.totalTasks)
build() {
Web({src: $rawfile('local/todo.html'), controller: this.webController})
.javaScriptProxy({
object: this.myClass,
name: "myClass",
methodList: ["getTasks", "markComplete"],
controller: this.webController
})
}
}
export { WebPage }
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment