技术栈
Appgallery connect
开发准备
上一节我们已经实现了优惠券的选择,并且成功的把券后的价格也展示给用户,不能使用的优惠券我们也用友好的方式告知用户,这一节我们来实现优惠券内容的下一步,优惠券内容结合订单进行结算提交
功能分析
因为我们之前的订单列表是订单相关商品相关是分开的,所以在这里我们同样要把优惠券的内容分开,只存储id进去后续再查询出对应的券金额,我们首先就是要修改订单表,然后在券选择的同时拿到优惠券的相关内容,提交订单时把优惠券内容一起提交,方便我们后续的订单详情内查询券后价
代码实现
首先修改orderlist的表内容
{
"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,这里我们用回调的方式实现
//自定义弹窗页面
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
});
结算订单时合并信息提交
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("请先选择地址")
}
})
到这里我们就实现了结算订单跟优惠券的关联
點(diǎn)擊查看更多內(nèi)容
為 TA 點(diǎn)贊
評論
評論
共同學(xué)習(xí),寫下你的評論
評論加載中...
作者其他優(yōu)質(zhì)文章
正在加載中
感謝您的支持,我會繼續(xù)努力的~
掃碼打賞,你說多少就多少
贊賞金額會直接到老師賬戶
支付方式
打開微信掃一掃,即可進(jìn)行掃碼打賞哦