《仿盒马》app开发技术分享-- 优惠券展示页(57)

举报
yd_215151764 发表于 2025/06/30 10:42:36 2025/06/30
【摘要】 ## 技术栈Appgallery connect## 开发准备上一节我们实现了优惠券的领取功能,并且在云端已经成功查询出优惠券信息,那么我们需要来实现一个优惠券展示的页面来向用户展示当前账号下的优惠券信息,辅助用户更好的去购买需要的商品,因为优惠券会有多种状态,在展示时也要注意不同状态的区分如何处理## 功能分析要实现优惠券的展示我们首先要获取当前登录的用户,因为我们在领取优惠券的时候插入了...


## 技术栈

Appgallery connect

## 开发准备
上一节我们实现了优惠券的领取功能,并且在云端已经成功查询出优惠券信息,那么我们需要来实现一个优惠券展示的页面来向用户展示当前账号下的优惠券信息,辅助用户更好的去购买需要的商品,因为优惠券会有多种状态,在展示时也要注意不同状态的区分如何处理


## 功能分析
要实现优惠券的展示我们首先要获取当前登录的用户,因为我们在领取优惠券的时候插入了领券用户的userid,所以在查询的时候也要根据userid进行查询,在进入页面时就要查询出云端对应的优惠券内容展示到list列表中。


## 代码实现

首先我们需要在新建的优惠券展示页面新增topbar

```css
      CommonTopBar({ title: "优惠券", alpha: 0, titleAlignment: TextAlign.Center ,backButton:true})

```
我们获取当前已存储的用户信息

```css
 @State user: User|null=null
 const value = await StorageUtils.getAll('user');
    if (value != "") {
      this.user=JSON.parse(value)
    }
```
根据当前用户id去查询对应的优惠券列表

```css
  @State couponList:CouponMall[]=[]

let databaseZone = cloudDatabase.zone('default');
    let condition = new cloudDatabase.DatabaseQuery(coupon_mall);
    condition.equalTo("user_id",this.user?.user_id)
    let listData = await databaseZone.query(condition);
    let json = JSON.stringify(listData)
    let data:CouponMall[]= JSON.parse(json)
    this.couponList=data
```
查询到数据之后,添加list组件

```css
List({space:10}){
        ForEach(this.couponList,(item:CouponMall,index:number)=>{
          ListItem(){
         
          }
        })
      }
      .padding(10)
```
然后我们使用 @Builder 来实现条目的布局

```css
  @Builder
  Item(item:CouponMall){
    Column({space:10}){
      Row({space:10}){
        Column(){
          Text("¥"+item.price)
            .fontSize(30)
            .fontColor(Color.Red)
            .fontWeight(FontWeight.Bold)
          Text("满"+item.limit_amount+"元可用")
            .fontColor(Color.Red)
            .fontWeight(FontWeight.Bold)
            .fontSize(12)
        }

        Column({space:10}){
          Text(item.type_str)
            .fontColor(Color.Black)
            .fontWeight(FontWeight.Bold)
            .fontSize(16)

          Text(item.txt)
            .fontColor(Color.Grey)
            .fontSize(12)

        }
        Blank()
        Text("待使用")
          .width(80)
          .height(80)
          .borderRadius(40)
          .fontSize(14)
          .textAlign(TextAlign.Center)
          .fontColor(Color.White)
          .backgroundColor(Color.Red)
      }
      .width('100%')
      .justifyContent(FlexAlign.SpaceBetween)
      Divider().width('100%').height(0.8)
        .color("#e6e6e6")
      Text("有效期至"+item.start_time+"至"+item.end_time)
        .fontSize(12)
        .fontColor(Color.Grey)
    }.padding(10)
    .backgroundColor(Color.White)
    .borderRadius(10)
  }
```
然后把条目布局引用到listitem中

```css
 List({space:10}){
        ForEach(this.couponList,(item:CouponMall,index:number)=>{
          ListItem(){
            this.Item(item)
          }
        })
      }
      .padding(10)
```
执行代码查看当前优惠券列表的展示效果

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

评论(0

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

全部回复

上滑加载中

设置昵称

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

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

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