《伴时匣》app开发技术分享--表单提交页(5)

举报
yd_215151764 发表于 2025/06/30 13:10:07 2025/06/30
【摘要】 ## 技术栈Appgallery connect## 开发准备上一节我们已经实现了表单信息的创建,完成了首页跳转表单提交页的内容,这一节我们就要实现表单创建前的数据填充的页面。## 功能分析在表单提交前,我们要实现的静态内容有很多,分别有输入框,开关,时间选择器,表类型,是否置顶,是否设置结束时间,是否包含当天日期,事件的颜色选择,图标选择,当天的天气选择,心情选择,这些我们都需要去先有一个...


## 技术栈

Appgallery connect

## 开发准备
上一节我们已经实现了表单信息的创建,完成了首页跳转表单提交页的内容,这一节我们就要实现表单创建前的数据填充的页面。


## 功能分析
在表单提交前,我们要实现的静态内容有很多,分别有输入框,开关,时间选择器,表类型,是否置顶,是否设置结束时间,是否包含当天日期,事件的颜色选择,图标选择,当天的天气选择,心情选择,这些我们都需要去先有一个静态选择或者展示的入口

## 功能开发
我们先实现简单的静态页

```c
import { CommonTopBar } from '../widget/CommonTopBar';

@Entry
@Component
struct TablePushPage {
  @State title:string=''
  @State time_visibility:boolean=false
  @State top_visibility:boolean=false

  build() {
    Column({space:15}) {
      CommonTopBar({ title: "添加新日子", alpha: 0, titleAlignment: TextAlign.Center ,backButton:true})
      Row({space:10}){
        Image($r('app.media.mubiaoshijian'))
          .height(30)
          .width(30)
        TextInput({text:this.title,
          placeholder: '请输入事件名称'
        })
          .placeholderColor("#ff999595")
          .fontColor("#333333")
          .onChange((value: string) => {
            this.title=value
          })
      }
      .width('100%')
      .justifyContent(FlexAlign.Start)

      Row({space:10}){
        Image($r('app.media.mubiaori'))
          .height(30)
          .width(30)
        Text("目标日")
          .fontColor(Color.Gray)
          .fontSize(14)
        Blank()
      }
      .width('100%')
      .justifyContent(FlexAlign.SpaceBetween)
      Row({space:10}){
        Image($r('app.media.daoshuben'))
          .height(30)
          .width(30)
        Text("倒数本")
          .fontColor(Color.Gray)
          .fontSize(14)
        Blank()


        Text("生活")
          .fontColor(Color.Gray)
          .fontSize(14)
        Image($r('app.media.xiajiantou'))
          .height(15)
          .width(15)
      }
      .width('100%')
      .justifyContent(FlexAlign.SpaceBetween)

      Row({space:10}){
        Image($r('app.media.zhiding'))
          .height(30)
          .width(30)
        Text("置顶")
          .fontColor(Color.Gray)
          .fontSize(14)
        Blank()
        Image(this.top_visibility?$r('app.media.kai'):$r('app.media.guan'))
          .width(60)
          .height(30)
          .onClick(async ()=>{
            this.top_visibility=!this.top_visibility
          })
      }
      .width('100%')
      .justifyContent(FlexAlign.SpaceBetween)
      Row({space:10}){
        Image($r('app.media.jingqueshijian'))
          .height(30)
          .width(30)
        Text("显示精确时间")
          .fontColor(Color.Gray)
          .fontSize(14)
        Blank()
        Image(this.time_visibility?$r('app.media.kai'):$r('app.media.guan'))
          .width(60)
          .height(30)
          .onClick(async ()=>{
                this.time_visibility=!this.time_visibility
          })
      }
      .width('100%')
      .justifyContent(FlexAlign.SpaceBetween)
      Row({space:10}){
        Image($r('app.media.yanse'))
          .height(30)
          .width(30)
        Text("事件颜色")
          .fontColor(Color.Gray)
          .fontSize(14)
        Blank()
        Image($r('app.media.xiajiantou'))
          .height(15)
          .width(15)
      }
      .width('100%')
      .justifyContent(FlexAlign.SpaceBetween)

      Row({space:10}){
        Image($r('app.media.tubiao'))
          .height(30)
          .width(30)
        Text("事件图标")
          .fontColor(Color.Gray)
          .fontSize(14)

        Blank()
        Image($r('app.media.xiajiantou'))
          .height(15)
          .width(15)
      }
      .width('100%')
      .justifyContent(FlexAlign.SpaceBetween)

      Row({space:10}){
        Image($r('app.media.tianqi'))
          .height(30)
          .width(30)
        Text("天气")
          .fontColor(Color.Gray)
          .fontSize(14)
        Blank()
        Image($r('app.media.xiajiantou'))
          .height(15)
          .width(15)
      }
      .width('100%')
      .justifyContent(FlexAlign.SpaceBetween)

      Row({space:10}){
        Image($r('app.media.xinqing'))
          .height(30)
          .width(30)
        Text("心情")
          .fontColor(Color.Gray)
          .fontSize(14)
        Blank()
        Image($r('app.media.xiajiantou'))
          .height(15)
          .width(15)
      }
      .width('100%')
      .justifyContent(FlexAlign.SpaceBetween)

    }
    .padding(10)
    .backgroundColor(Color.White)
    .height('100%')
    .width('100%')
  }
}
```
接下来我们实现一个日期选择的弹窗

```c
  Row({space:10}){
        Image($r('app.media.mubiaori'))
          .height(30)
          .width(30)
        Text("目标日")
          .fontColor(Color.Gray)
          .fontSize(14)
        Blank()
      }
      .width('100%')
      .justifyContent(FlexAlign.SpaceBetween)
      .onClick(()=>{
        this.getUIContext().showDatePickerDialog({
          start: new Date("2000-1-1"),
          end: new Date("2100-12-31"),
          selected: this.selectedDate,
          disappearTextStyle: { color: '#297bec', font: { size: '20fp', weight: FontWeight.Bold } },
          textStyle: { color: Color.Black, font: { size: '18fp', weight: FontWeight.Normal } },
          selectedTextStyle: { color: Color.Blue, font: { size: '26fp', weight: FontWeight.Regular } },
          acceptButtonStyle: {
            type: ButtonType.Normal,
            style: ButtonStyleMode.NORMAL,
            role: ButtonRole.NORMAL,
            fontColor: 'rgb(81, 81, 216)',
            fontSize: '26fp',
            fontWeight: FontWeight.Bolder,
            fontStyle: FontStyle.Normal,
            fontFamily: 'sans-serif',
            backgroundColor: '#A6ACAF',
            borderRadius: 20
          },
          cancelButtonStyle: {
            type: ButtonType.Normal,
            style: ButtonStyleMode.NORMAL,
            role: ButtonRole.NORMAL,
            fontColor: Color.Blue,
            fontSize: '16fp',
            fontWeight: FontWeight.Normal,
            fontStyle: FontStyle.Italic,
            fontFamily: 'sans-serif',
            backgroundColor: '#50182431',
            borderRadius: 10
          },
          onDateAccept: (value: Date) => {
            this.selectedDate = value;
            console.info("时间" + value.toString());
          }
         
        });
      })
```
这样我们就实现了表单提交页和日期的选择器

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。