技术栈
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 };
都生成之后我们在首页的新人优惠券模块,立即领取按钮添加对应的逻辑,因为券有多张,所以我们需要循环获取,并且上传到云数据库
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}`;
}
}
點擊查看更多內(nèi)容
為 TA 點贊
評論
評論
共同學(xué)習(xí),寫下你的評論
評論加載中...
作者其他優(yōu)質(zhì)文章
正在加載中
感謝您的支持,我會繼續(xù)努力的~
掃碼打賞,你說多少就多少
贊賞金額會直接到老師賬戶
支付方式
打開微信掃一掃,即可進(jìn)行掃碼打賞哦