《仿盒馬》app開發技術分享-- 邏輯優化第三彈(83)

技術棧

Appgallery connect

開發準備

現在我們的app功能已經趨近完善,bug和缺失的細節也越來越少了,我們繼續對app進行優化,首先是我們的積分頁面,我們只實現了全部的積分展示內容,對收入和支出的積分明細并沒有進行展示,這里我們要實現一下,然后就是我們的優惠券,我們已過期的優惠券并沒有修改狀態為已過期。

功能分析

要實現積分列表的細分展示,首先我們就要從獲取的全部數據中篩選出對應type的數據,在對應的自定義組件和列表中展示,針對已經過期的優惠券,在進入頁面時,我們先查詢出所有的數據,再根據日期對優惠券的類型進行修改,把修改后的數據展示到列表上

代碼實現

首先我們實現積分獲取展示列表

import { PointsInfo } from '../../../entity/PointsInfo'@Component
export struct GetPoints {@Prop  pointsList:PointsInfo[]=[]@State flag:boolean=falseaboutToAppear(): void {this.pointsList=filterPointsByType(this.pointsList)this.flag=true}@BuilderrecordList(){List({ space: 10 }) {ForEach(this.pointsList, (item:PointsInfo) => {ListItem() {this.allItem(item)}})}.backgroundColor("#f7f7f7").padding({ top: 10 }).sticky(StickyStyle.Header)}@BuilderallItem(item:PointsInfo){Row({space:10}){Image(item.points_type=='0'?$r('app.media.shouru'):$r('app.media.duihuan')).height(35).width(35).objectFit(ImageFit.Contain).interpolation(ImageInterpolation.High).borderRadius(25)Column({space:10}){Text(item.points_type=='0'?"獲得":"兌換").fontColor("#333333").fontSize(16)Text(item.address).fontColor("#999999").fontSize(14)}.alignItems(HorizontalAlign.Start)Blank()Column({space:10}){Text(item.points_type=='0'?"$"+item.points:"-$"+item.points).fontColor(item.points_type=='0'?"#00B644":"#EC2400").fontSize(16).margin({top:1})Text(item.create_time).fontColor("#999999").fontSize(14).margin({top:1})}.alignItems(HorizontalAlign.End)}.justifyContent(FlexAlign.SpaceBetween).padding({left:12,right:12}).width('100%').alignItems(VerticalAlign.Center).height(71).backgroundColor(Color.White)}build() {Column() {if (this.flag){this.recordList()}}.height('100%').layoutWeight(1).width('100%')}
}function filterPointsByType(pointsList: PointsInfo[]): PointsInfo[] {return pointsList.filter(item => item.points_type === '0');
}

我們實現了一個篩選方法,在進入頁面的時候把篩選的數據添加到list組件中進行展示。接下來我們如法炮制,實現兌換積分列表

import { PointsInfo } from '../../../entity/PointsInfo'@Component
export struct OutPoints {@Prop  pointsList:PointsInfo[]=[]@State flag:boolean=falseaboutToAppear(): void {this.pointsList=filterPointsByType(this.pointsList)this.flag=true}@BuilderrecordList(){List({ space: 10 }) {ForEach(this.pointsList, (item:PointsInfo) => {ListItem() {this.allItem(item)}})}.backgroundColor("#f7f7f7").padding({ top: 10 }).sticky(StickyStyle.Header)}@BuilderallItem(item:PointsInfo){Row({space:10}){Image(item.points_type=='0'?$r('app.media.shouru'):$r('app.media.duihuan')).height(35).width(35).objectFit(ImageFit.Contain).interpolation(ImageInterpolation.High).borderRadius(25)Column({space:10}){Text(item.points_type=='0'?"獲得":"兌換").fontColor("#333333").fontSize(16)Text(item.address).fontColor("#999999").fontSize(14)}.alignItems(HorizontalAlign.Start)Blank()Column({space:10}){Text(item.points_type=='0'?"$"+item.points:"-$"+item.points).fontColor(item.points_type=='0'?"#00B644":"#EC2400").fontSize(16).margin({top:1})Text(item.create_time).fontColor("#999999").fontSize(14).margin({top:1})}.alignItems(HorizontalAlign.End)}.justifyContent(FlexAlign.SpaceBetween).padding({left:12,right:12}).width('100%').alignItems(VerticalAlign.Center).height(71).backgroundColor(Color.White)}build() {Column() {if (this.flag){this.recordList()}}.height('100%').layoutWeight(1).width('100%')}
}function filterPointsByType(pointsList: PointsInfo[]): PointsInfo[] {return pointsList.filter(item => item.points_type === '1');
}

接下來我們實現優惠券過期條目的優化邏輯,我們根據優惠券的截止日期與當前日期進行對比,然后修改過期優惠券的type。

  thisTime(): 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}`;}compareDateTime(time1: string, time2: string): 1 | -1 | 0 {const date1 = new Date(time1.replace(' ', 'T')); // 轉換為ISO格式const date2 = new Date(time2.replace(' ', 'T'));const timestamp1 = date1.getTime();const timestamp2 = date2.getTime();if (timestamp1 > timestamp2) return 1;if (timestamp1 < timestamp2) return -1;return 0;
}async aboutToAppear(): Promise<void> {const value = await StorageUtils.getAll('user');if (value != "") {this.user=JSON.parse(value)}let databaseZone = cloudDatabase.zone('default');let condition = new cloudDatabase.DatabaseQuery(coupon_mall);condition.equalTo("user_id",this.user?.user_id)let listData = await databaseZone.query(condition);let json = JSON.stringify(listData)let data:CouponMall[]= JSON.parse(json)this.couponList = data.filter(item =>this.compareDateTime(this.thisTime(), item.end_time) !== 1);}

我們通過時間對比再篩選列表,就完成了我們的業務優化

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/86281.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/86281.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/86281.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

(七)Dockerfile文件20個命令大全詳解

目錄 1. FROM 基于基礎鏡像構建 1.1 FROM 指令開頭 1.2 ARG和FROM使用 1.3 FROM可以多個 1.4 AS name 1.5 tag和digest 2. RUN 執行任何命令 2.1 shell和exec兩種使用方式 2.2 [OPTIONS]參數 3. CMD 指定默認執行命令 3.1 使用格式shell和exec兩種使用方式 3.2 只…

攻防世界-MISC-4-2

知識點 1.字頻分析 步驟 下載附件是一段文本&#xff0c; 在線網站處理&#xff1a;quipqiup - cryptoquip and cryptogram solver flag{classical-cipher_is_not_security_hs}

Nordic nRF54L15 SoC對包含電池監測、中斷處理和電源軌控制的定制 nPM1300 示例

1&#xff1a;以下是適用于 nRF Connect SDK (NCS) 的基于 Zephyr 的示例應用程序&#xff0c;展示了&#xff1a; 讀取電池電壓和狀態處理來自 nPM1300 的中斷&#xff08;例如&#xff0c;電池或電源軌事件&#xff09;控制電源軌&#xff08;通過 GPIO 啟用/禁用&#xff0…

MySQL 單機部署

文章目錄 1、準備階段1.1、部署規劃1.2、硬件準備1.3、軟件準備1.4、環境清理 2、實施階段2.1、操作系統實施2.2、數據庫部署實施 3、完成 1、準備階段 1.1、部署規劃 本次部署用于測試環境&#xff0c;單機模式&#xff0c;不需要主備&#xff1b;MySQL數據庫版本要MySQL5.7…

小程序學習筆記:實現上拉觸底加載隨機顏色案例全解析

在前端開發中&#xff0c;上拉觸底加載數據是一個常見的交互需求。今天&#xff0c;我們就來詳細探討如何實現一個上拉觸底加載隨機顏色的案例&#xff0c;幫助大家更好地理解相關技術的應用。 案例效果展示 在這個案例里&#xff0c;我們最終要實現的效果是這樣的&#xff1…

Java+GcExcel,生成自定義工作表

引言 在當今數字化辦公和數據處理的時代&#xff0c;電子表格的應用無處不在。對于 Java 開發人員來說&#xff0c;如何高效地創建、操作和處理兼容 Microsoft Excel 的電子表格是一個常見的需求。GcExcel Java 作為葡萄城表格解決方案中的后端表格組件&#xff0c;為 Java 開…

跨平臺C++軟件開發之基本數據類型介紹

跨平臺C軟件開發過程中&#xff0c;原生數據類型的字節寬度差異是一個常見且關鍵的問題&#xff0c;不同操作系統、編譯器、硬件架構可能會為相同的數據類型分配不同的字節數&#xff0c;這可能導致代碼在移植過程中出現未定義的行為或兼容性問題。本文簡要介紹C原生數據類型字…

Java編程中的單例模式

在Java中實現單例模式有幾種方式&#xff0c;但最常見的是懶漢式和餓漢式。我們先來看一個簡單的懶漢式實現&#xff1a; public class Singleton {private static Singleton instance;private Singleton() {} // 構造方法私有化&#xff0c;防止外部實例化public static Sin…

原生微信小程序網絡請求與上傳接口封裝實戰指南

本文基于微信小程序原生 API&#xff0c;封裝 request 和 uploadFile 接口&#xff0c;最終實現統一請求管理、請求攔截、錯誤處理等能力。 &#x1f4e6; 一、為什么要封裝網絡請求&#xff1f; 微信小程序提供了 wx.request 和 wx.uploadFile 原生 API&#xff0c;但直接使用…

軟件測試基礎知識詳解

&#x1f345; 點擊文末小卡片 &#xff0c;免費獲取軟件測試全套資料&#xff0c;資料在手&#xff0c;漲薪更快 1、軟件測試定義 軟件測試是指在規定的條件下對程序進行操作&#xff0c;以發現程序錯誤&#xff0c;衡量軟件質量&#xff0c;并對其是否能滿足設計要求進行…

Spring Boot 文件上傳大小配置錯誤解決方案

問題描述 在Spring Boot應用中出現以下錯誤&#xff1a; Failed to bind properties under spring.servlet.multipart.max-file-size’ to org.springframework.util.unit.Datasize Property:spring.servlet.multipart.max-file-sizeValue: 10Mb Origin: URL [file:./applicat…

Matplotlib繪制矩陣圖,plt.matshow/imshow 與 ax.pcolor(pcolormesh)方法的使用

文章目錄 plt.matshow離散colorbar連續colorbar ax.pcolor簡單應用綜合應用 import matplotlib.pyplot as plt import numpy as np from matplotlib.colors import ListedColormap#data np.random.seed(42) data np.random.rand(4, 4)plt.matshow 可以把下面的matshow換成ims…

關于 ARM64 匯編:調用流程與棧幀結構解析

一、ARM64 函數調用分析&#xff08;匯編級&#xff09; 寄存器規則&#xff08;AArch64 ABI&#xff09; 用途寄存器參數傳遞x0 ~ x7返回值x0&#xff08;最多兩個&#xff1a;x0、x1&#xff09;棧指針sp鏈接寄存器x30&#xff08;lr&#xff09;幀指針x29&#xff08;fp&a…

Kafka vs RabbitMQ vs Redis:消息中間件全面對比與選型指南

Kafka vs RabbitMQ vs Redis&#xff1a;消息中間件全面對比與選型指南 一、各中間件消息流轉全過程Kafka 消息流轉全過程&#xff08;含機制詳解&#xff09;1. 核心組件2. 流程詳解 RabbitMQ 消息流轉全過程&#xff08;含機制詳解&#xff09;1. 核心組件2. 流程詳解 Redis …

【代碼級指南】從Zero-shot到Chain-of-Thought:Prompt工程全棧技術解析?

本文較長&#xff0c;建議點贊收藏&#xff0c;以免遺失。 從理論到實踐&#xff0c;掌握Zero-shot/Few-shot Prompt設計精髓。 一、Prompt Engineering 核心概念圖解 Prompt Engineering 三大支柱 二、Prompt 設計基礎框架 1. Prompt 核心四要素 prompt_template "&q…

sizeof()函數無法計算形參指針指向的字符串大小

給定的代碼中&#xff0c;func() 函數打印的 name_len 是 指針的大小&#xff0c;而不是字符串的長度。具體原因如下&#xff1a; 代碼分析 #include <stdio.h> #include <string.h>void func(char *name) {printf("name_len:%d", sizeof(name)); // 打…

Python打卡:Day37

知識點回顧&#xff1a; 過擬合的判斷&#xff1a;測試集和訓練集同步打印指標模型的保存和加載 僅保存權重保存權重和模型保存全部信息checkpoint&#xff0c;還包含訓練狀態 早停策略 浙大疏錦行

Android 9.0(API 28)后字重設置

在 Android 應用中設置字體字重&#xff08;Font Weight&#xff09;可以通過多種方式實現&#xff0c;下面詳細介紹各種方法及其適用場景。 1. 使用 XML 屬性設置字重 1.1 基本字重設置&#xff08;API 1&#xff09; <TextViewandroid:layout_width"wrap_content&…

WebRTC(十):RTP和SRTP

RTP&#xff08;Real-time Transport Protocol&#xff09; 作用 RTP 用于傳輸實時媒體流&#xff08;如音頻、視頻&#xff09;&#xff0c;它不提供可靠傳輸&#xff0c;而是關注低延遲、高實時性。 報文結構 整體結構 RTP 報文由以下部分組成&#xff1a; RTP Header …

微服務架構下面臨的安全、合規審計挑戰

微服務架構在帶來敏捷性、可擴展性等優勢的同時&#xff0c;也給安全和合規審計帶來了巨大的挑戰。這些挑戰主要源于微服務的 分布式特性、動態性以及數量龐大 等特點。 以下是微服務架構下安全和合規審計面臨的具體挑戰 一、安全審計挑戰 1. 攻擊面擴大和復雜性增加 服務數…