首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >《仿盒马》app开发技术分享-- 订单结合优惠券结算(60)

《仿盒马》app开发技术分享-- 订单结合优惠券结算(60)

原创
作者头像
用户10696402
发布2025-06-28 14:09:09
发布2025-06-28 14:09:09
960
举报

## 技术栈

Appgallery connect

## 开发准备

上一节我们已经实现了优惠券的选择,并且成功的把券后的价格也展示给用户,不能使用的优惠券我们也用友好的方式告知用户,这一节我们来实现优惠券内容的下一步,优惠券内容结合订单进行结算提交

## 功能分析

因为我们之前的订单列表是订单相关商品相关是分开的,所以在这里我们同样要把优惠券的内容分开,只存储id进去后续再查询出对应的券金额,我们首先就是要修改订单表,然后在券选择的同时拿到优惠券的相关内容,提交订单时把优惠券内容一起提交,方便我们后续的订单详情内查询券后价

## 代码实现

首先修改orderlist的表内容

```css

{

"CloudDBZoneName": "default",

"objectTypeName": "order_list",

"fields": [

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

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

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

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

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

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

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

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

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

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

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

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

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

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

{"fieldName": "order_over_time", "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"]}

]

}

```

然后我们在选择券的时候拿到券的id,这里我们用回调的方式实现

```css

//自定义弹窗页面

onItemSelected: (coupon_id:number) => void= () => {

};

//结算页

@State coupon_id:number=0

couponController: CustomDialogController| null = new CustomDialogController({

builder: CouponCheckDialog({

couponPrice:this.couponPrice,

price:this.price(),

onItemSelected:(coupon_id:number)=>{

this.coupon_id=coupon_id

}

}),

alignment: DialogAlignment.Bottom,

customStyle:true

});

```

结算订单时合并信息提交

```css

Text("提交订单")

.fontColor(Color.White)

.padding(10)

.borderRadius(10)

.backgroundColor("#d81e06")

.fontSize(14)

.onClick(async ()=>{

if (this.addressInfo!=null) {

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

try {

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

let productPush = new order_product_list();

productPush.id=this.codeId+i

productPush.order_product_id=this.codeId

productPush.img=this.productList[i].productImgAddress

productPush.price=this.productList[i].productPrice

productPush.name=this.productList[i].productName

productPush.originalPrice=this.productList[i].productOriginalPrice

productPush.spec=this.productList[i].productSpecName

productPush.buyAmount=this.productList[i].buyAmount

let num = await databaseZone.upsert(productPush);

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

}

}catch (e) {

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

}

let orderPush = new order_list();

orderPush.id=Math.floor(Math.random() * 1000000)

orderPush.user_id=this.user!.user_id

orderPush.order_product_id=String(this.codeId)

orderPush.order_code=this.generateOrderNo(10)

orderPush.order_status=0

if (this.remark!='') {

orderPush.order_remark=this.remark

}

orderPush.coupon_id=this.coupon_id

orderPush.address=this.addressInfo.address

orderPush.nickname=this.addressInfo.nikeName

orderPush.phone=this.addressInfo.phone

orderPush.order_create_time=this.formatCurrentDate()

orderPush.order_pay_time=this.formatCurrentDate()

let num = await databaseZone.upsert(orderPush);

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

if (num>0) {

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

if (this.productList[i].isNeedPay) {

let item = new cart_product_list();

item.id=this.productList[i].id

let listData = await databaseZone.delete(item);

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

}

}

let eventData: emitter.EventData = {

data: {}

};

let innerEvent: emitter.InnerEvent = {

eventId: 1012,

priority: emitter.EventPriority.HIGH

};

emitter.emit(innerEvent, eventData);

router.replaceUrl({url:'pages/view/OrderSuccessPage',params:orderPush})

}

} else {

showToast("请先选择地址")

}

})

```

到这里我们就实现了结算订单跟优惠券的关联

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档