ITPub博客

首页 > 移动开发 > HTML5 > 《仿盒马》app开发技术分享-- 领取优惠券(56)

《仿盒马》app开发技术分享-- 领取优惠券(56)

原创 HTML5 作者:鸿蒙小林 时间:2025-06-27 21:10:13 0 删除 编辑


## 技术栈


Appgallery connect


## 开发准备

在之前的功能开发中,我们有些功能只有展示的能力并没有与云端产生任何的交互,后续经过我们的迭代,更多的能力有了交互能力,这一节我们就要开始着手给那些静态展示的模块添加业务逻辑,我们现在要实现的是首页的新人优惠券的领取



## 功能分析

新人优惠券我们在创建的时候给他赋予了一些字段,分别对应了优惠券的id,面额,最小可用金额等,那我们既然需要跟用户进行绑定,还是需要新建一个优惠券的表,把优惠券已有的数据填充进去,并且添加上userid,方便我们按用户查



## 代码实现


首先我们创建对应的优惠券表,进行字段的定义


```css

{

  "objectTypeName": "coupon_mall",

  "fields": [

    {"fieldName": "id", "fieldType": "Integer", "notNull": true, "belongPrimaryKey": true},

    {"fieldName": "user_id", "fieldType": "Integer"},

    {"fieldName": "coupon_id", "fieldType": "Integer", "notNull": true, "defaultValue": 0},

    {"fieldName": "price", "fieldType": "Double"},

    {"fieldName": "type", "fieldType": "Integer"},

    {"fieldName": "limit_amount", "fieldType": "Double"},

    {"fieldName": "start_time", "fieldType": "String"},

    {"fieldName": "end_time", "fieldType": "String"},

    {"fieldName": "type_str", "fieldType": "String"},

    {"fieldName": "txt", "fieldType": "String"}


  ],

  "indexes": [

    {"indexName": "field1Index", "indexList": [{"fieldName":"id","sortType":"ASC"}]}

  ],

  "permissions": [

    {"role": "World", "rights": ["Read", "Upsert", "Delete"]},

    {"role": "Authenticated", "rights": ["Read", "Upsert", "Delete"]},

    {"role": "Creator", "rights": ["Read", "Upsert", "Delete"]},

    {"role": "Administrator", "rights": ["Read", "Upsert", "Delete"]}

  ]

}

```

添加完我们需要的字段后,我们生成对应的实体和db类


```css

import { cloudDatabase } from '@kit.CloudFoundationKit';


class coupon_mall extends cloudDatabase.DatabaseObject {

  public id: number;

  public user_id: number;

  public coupon_id = 0;

  public price: number;

  public type: number;

  public limit_amount: number;

  public start_time: string;

  public end_time: string;

  public type_str: string;

  public txt: string;


  public naturalbase_ClassName(): string {

    return 'coupon_mall';

  }

}


export { coupon_mall };




/*

 * Copyright (c) Huawei Technologies Co., Ltd. 2020-2023. All rights reserved.

 * Generated by the CloudDB ObjectType compiler. DO NOT EDIT!

 */


class CouponMall {

    id: number;

    user_id: number;

    coupon_id: number = 0;

    price: number;

    type: number;

    limit_amount: number;

    start_time: string;

    end_time: string;

    type_str: string;

    txt: string;


    constructor() {

    }



    setId(id: number): void {

        this.id = id;

    }


    getId(): number  {

        return this.id;

    }


    setUser_id(user_id: number): void {

        this.user_id = user_id;

    }


    getUser_id(): number  {

        return this.user_id;

    }


    setCoupon_id(coupon_id: number): void {

        this.coupon_id = coupon_id;

    }


    getCoupon_id(): number  {

        return this.coupon_id;

    }


    setPrice(price: number): void {

        this.price = price;

    }


    getPrice(): number  {

        return this.price;

    }


    setType(type: number): void {

        this.type = type;

    }


    getType(): number  {

        return this.type;

    }


    setLimit_amount(limit_amount: number): void {

        this.limit_amount = limit_amount;

    }


    getLimit_amount(): number  {

        return this.limit_amount;

    }


    setStart_time(start_time: string): void {

        this.start_time = start_time;

    }


    getStart_time(): string  {

        return this.start_time;

    }


    setEnd_time(end_time: string): void {

        this.end_time = end_time;

    }


    getEnd_time(): string  {

        return this.end_time;

    }


    setType_str(type_str: string): void {

        this.type_str = type_str;

    }


    getType_str(): string  {

        return this.type_str;

    }


    setTxt(txt: string): void {

        this.txt = txt;

    }


    getTxt(): string  {

        return this.txt;

    }


}


export { CouponMall };

```

都生成之后我们在首页的新人优惠券模块,立即领取按钮添加对应的逻辑,因为券有多张,所以我们需要循环获取,并且上传到云数据库


```css

import { coupon_mall } from "../clouddb/coupon_mall"

import { couponInfo } from "../entity/couponInfo"

import { homeNewPeopleCoupon } from "../entity/homeNewPeopleCoupon"

import { cloudDatabase } from "@kit.CloudFoundationKit"

import { hilog } from "@kit.PerformanceAnalysisKit"

import showToast from "../utils/ToastUtils"

import { StorageUtils } from "../utils/StorageUtils"

import { User } from "../entity/User"


@Component

@Preview

export struct CouponComponent {

  @Link home_activity:homeNewPeopleCoupon|null

  @Link couponList:couponInfo[]

  @State user: User|null=null


  async aboutToAppear(): Promise<void> {

    const value = await StorageUtils.getAll('user');

    if (value!='') {

      this.user=JSON.parse(value)

    }

  }


  build() {

    Column() {

      Row() {

        Text(this.home_activity?.title)

          .fontSize(20)

          .fontColor('#FF0000')


        Text(this.home_activity?.msg)

          .fontSize(14)

          .fontColor('#888888')

          .margin({left:10})

      }

      .width('100%')

      .padding(16)


      List({ space: 10 }) {

        ForEach(this.couponList, (item:couponInfo) => {

          ListItem() {

            Column() {

              Text(item.price)

                .fontSize(22)

                .fontColor('#FF4444')

                .margin({ bottom: 8 })


              Text(item.type)

                .fontSize(12)

                .fontColor('#FF4444')

            }

            .padding(10)

            .backgroundColor("#ffffff")

            .borderRadius(8)

          }

        })

      }

      .margin({left:50})

      .listDirection(Axis.Horizontal)

      .width('100%')

      .height(80)


      Button('立即领取', { type: ButtonType.Normal })

        .width(240)

        .height(40)

        .backgroundColor('#FF0000')

        .fontColor(Color.White)

        .borderRadius(20)

        .margin({ bottom: 16 })

        .onClick(async ()=>{

          for (let i = 0; i < this.couponList.length; i++) {

            let coupon=new coupon_mall()

            coupon.id=Math.floor(Math.random() * 1000000);

            coupon.user_id=this.user!.user_id

            coupon.coupon_id=this.couponList[i].coupon_id

            coupon.price=Number(this.couponList[i].price)

            coupon.type=0

            coupon.limit_amount=this.couponList[i].limit_amount

            coupon.start_time=this.creatTime()

            coupon.end_time=this.endTime()

            coupon.type_str=this.couponList[i].type

            coupon.txt="全场商品通用"

            let databaseZone = cloudDatabase.zone('default');

            let num = await databaseZone.upsert(coupon);

            hilog.info(0x0000, 'testTag', `Succeeded in upserting data, result: ${num}`);

            if (num>0) {

              showToast("优惠券领取成功")

            }

          }

        })

    }

    .backgroundColor("#fffce2be")

    .width('95%')

    .margin({top:10})

    .borderRadius(20)

  }


  creatTime(): string {

    const now = new Date();


    const year = now.getFullYear();

    const month = String(now.getMonth() + 1).padStart(2, '0');

    const day = String(now.getDate()).padStart(2, '0');

    const hours = String(now.getHours()).padStart(2, '0');

    const minutes = String(now.getMinutes()).padStart(2, '0');

    const seconds = String(now.getSeconds()).padStart(2, '0');


    return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`;

  }


  endTime(): string {

    const now = new Date();


    const year = now.getFullYear();

    const month = String(now.getMonth() + 1).padStart(2, '0');

    const day = String(now.getDate()).padStart(2, '0');

    const hours = String(now.getHours()).padStart(2, '0');

    const minutes = String(now.getMinutes()).padStart(2, '0');

    const seconds = String(now.getSeconds()).padStart(2, '0');


    return `${year}-${month}-${day+7} ${hours}:${minutes}:${seconds}`;

  }

}


来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/70046889/viewspace-3089303/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2025-06-26

  • 博文量
    90
  • 访问量
    67437