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

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

技术栈

Appgallery connect

开发准备

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

功能分析

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

代码实现

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

{
   
  "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类

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 {
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}`;

}
}

相关文章
|
6天前
|
前端开发 C++ 容器
2025高效开发:3个被低估的CSS黑科技
2025高效开发:3个被低估的CSS黑科技
126 95
|
20天前
|
JavaScript UED
用组件懒加载优化Vue应用性能
用组件懒加载优化Vue应用性能
|
6天前
|
缓存 监控 前端开发
告别卡顿!3大前端性能优化魔法 + CSS容器查询实战
告别卡顿!3大前端性能优化魔法 + CSS容器查询实战
156 95
|
26天前
|
机器学习/深度学习 存储 人工智能
RAG技巧与底层代码剖析
你是否还在用现成框架调包实现RAG?本文带你撕开技术黑箱,仅用numpy等Python基础库构建RAG系统,从零手撕RAG内核!从文本划分、向量化、相似度检索到生成优化,逐行代码解剖检索增强生成的核心逻辑,更深度解析9大实战技巧:从智能分块策略到动态上下文压缩,助你突破回答质量瓶颈。拒绝做调参工具人,这次彻底掌握RAG的底层基因!
228 17
|
14天前
|
存储
《仿盒马》app开发技术分享--未完成订单列表展示逻辑优化(61)
上一节我们实现订单与优惠券的联合提交时,我去到订单列表页面查看生成的订单信息,发现现在的订单从信息展示到价格计算全都是有问题的。所以紧急的把对应的问题修改一下。
104 70
|
14天前
《仿盒马》app开发技术分享--确认订单选择优惠券(59)
在上一节我们实现了在确认订单页查询优惠券,但是我们并没有其他优惠券相关的逻辑,我们的目的还是在订单结算的时候去使用我们对应的优惠券,现在我们要在确认订单页去进行优惠券的选择,为了方便用户操作,我们以弹窗的形式展现
26 10
|
9天前
|
数据库 数据安全/隐私保护
《仿盒马》app开发技术分享-- 账号注销(86)
上一节我们在欢迎页用户账号注销后给用户开通了一个账号恢复的功能,但是我们的账号注销一直都是从云数据库直接修改的。一直没有一个账号注销的入口,这一节我们来实现这样的一个入口,并且实现账号注销的功能
44 3