阅读量:0
今天给大家分享一个非常好的实战项目,购物商城,购物商城是一个集购物、娱乐、服务于一体的综合性平台,致力于为消费者提供一站式的购物体验。各种功能都有涉及,最适合实现学习。
做好商城项目,肯定会把开发中遇到的百分之60的技术得到实战的经验。
下面介绍一下 商城的主要模块:
首页
1,搜索框,点击进入搜索页面
2,顶部分类,通过不同分类查询对应信息
3,广告轮播,自动切换图片,可以进行点击进入
4,商品列表,展示每个项目信息,点击可以进入商品详情页面
轮播图使用Swiper实现:
Swiper() { ForEach(swiperImage, (item: Resource) => { Image(item) .width('100%') .aspectRatio(2.25) .borderRadius($r('app.float.vp_sixteen')) .backgroundColor(Color.White) }, (item: Resource) => JSON.stringify(item)) } .indicatorStyle({ selectedColor: '#F74E42' }) // 切换选择项颜色 .autoPlay(true) // 自动播放 .itemSpace('14vp') .width('100%') .indicator(true) // 是否显示切换小点 .displayCount(1) .margin({ top: $r('app.float.vp_twelve') , bottom: $r('app.float.vp_twelve') })
推荐分类实现:
Flex({ justifyContent: FlexAlign.SpaceAround }) { // 通过ForEach方式实现分类显示 ForEach(activityTitle, (item: ActivityTitleModel, index?: number) => { Flex({ direction: FlexDirection.Column, justifyContent: FlexAlign.Center, alignItems: ItemAlign.Center }) { Text(item.title) .fontSize($r('app.float.small_font_size')) .fontWeight(500) .fontColor(Color.Black) Text(item.desc) .fontSize($r('app.float.small_font_size')) .fontWeight(400) .fontColor(this.activityTitleIndex === index ? '#e92f4f' : Color.Black) .opacity(this.activityTitleIndex === index ? 1 : 0.6) } .onClick(() => { if (index !== undefined) { this.activityTitleIndex = index; } }) .height('100%') }, (item: ActivityTitleModel) => JSON.stringify(item)) } .height($r('app.float.activity_title_height')) .width('100%') .padding($r('app.float.vp_twelve')) .margin({ bottom: $r('app.float.vp_six'), top: $r('app.float.vp_six') }) .backgroundColor('#f1f3f5') .borderRadius($r('app.float.vp_sixteen')) // 圆角效果
商品列表信息:
List({ space: 12 }) { // 通过懒加载 LazyForEach方式实现商品列表 LazyForEach(new CommonDataSource<Commodity>(this.commodityList), (item: Commodity) => { ListItem() { this.CommodityItem(item) } .margin({ left: $r('app.float.vp_six'), right: $r('app.float.vp_six') }) .onClick(() => { if (this.onClickItem !== undefined) { this.onClickItem(item); } }) }, (item: Commodity) => JSON.stringify(item)) } .margin({ left: -6, right: -6 }) .listDirection(Axis.Vertical) // 列表显示方式,垂直 .lanes(this.column) // 显示的行数
购物车
列表实现List:
Column() { List({ space: 15 }) { ForEach(this.shopCartData, (item: Product, index?: number) => { ListItem() { if (index !== undefined) { this.CartItem(item, index) } } .swipeAction({ end: this.ItemDelete(item) }) //自定義滑動刪除效果 }, (item: Product) => item.id) } } .height('100%')
列表item信息实现:
复选框:Checkbox
@Builder CartItem(item: Product, index: number) { Flex({ direction: FlexDirection.Row, alignItems: ItemAlign.Center }) { Checkbox({ name: `checkbox ${index}`, group: 'checkboxGroup' }) .width($r('app.float.vp_twenty_four')) .height($r('app.float.vp_twenty_four')) .selectedColor('#ed6f21') .select(this.selectProductChange(index)) .onClick(() => { console.log('=====' + index) let tempData: SelectProducts = { key: this.selectProducts[index].key, selected: !this.selectProducts[index].selected } this.selectProducts.splice(index, 1, tempData) }) Image($rawfile(item.img[0])) .height(80) .width(80) .objectFit(ImageFit.Cover) .margin({ left: $r('app.float.vp_sixteen') }) Flex({ direction: FlexDirection.Column, justifyContent: FlexAlign.SpaceAround }) { Text($r('app.string.commodity_piece_description', item.name, item.description)) .fontSize($r('app.float.small_font_size')) .margin({ bottom: $r('app.float.vp_eight') }) .textOverflow({ overflow: TextOverflow.Ellipsis }) .maxLines(2) .width('100%') Text(item.specifications.length === 2 ? item.specifications[0].value + ',' + item.specifications[1].value: item.specifications.length === 3 ? item.specifications[0].value + ',' + item.specifications[1].value + ',' + item.specifications[2].value : item.specifications.length === 4 ? item.specifications[0].value + ',' + item.specifications[1].value + ',' + item.specifications[2].value + ',' + item.specifications[3].value : '' ) .fontSize(12) .maxLines(1) .fontColor('#99000000') .textOverflow({ overflow: TextOverflow.Ellipsis }) .width('100%') Flex({ justifyContent: FlexAlign.SpaceBetween }) { Text() { Span("¥") .fontSize(12) .fontColor('#e92f4f') Span(`${item.price}`) .fontSize($r('app.float.middle_font_size')) .fontColor('#e92f4f') } CountProduct({ count: item.count, onNumberChange: (num: number) => { // this.onChangeCount(num, item); } }) } } .margin({ left: $r('app.float.vp_sixteen'), top: $r('app.float.vp_twelve'), bottom: $r('app.float.vp_twelve') }) .width('100%') } .padding({ left: $r('app.float.vp_twelve'), right: $r('app.float.vp_twelve') }) .borderRadius($r('app.float.vp_sixteen')) .backgroundColor(Color.White) .width('100%') .height(112) }
我的
我的-订单信息模块
Flex({ justifyContent: FlexAlign.SpaceAround, alignItems: ItemAlign.Center }) { ForEach(this.orderIconButton, (iconButton: IconButtonModel) => { this.IconButton(iconButton) }, (iconButton: IconButtonModel) => JSON.stringify(iconButton)) } .width('100%')
商品详情页面:
商品详情页面整体布局使用堆叠布局,头部返回和分享 不随界面滑动剩余布局使用GridRow和GridCol构成,网格组成。底部可以进行商品添加购物车,点击立即购买进入订单确认界面。
Stack({ alignContent: Alignment.TopStart }) { Flex({ direction: FlexDirection.Column }) { Scroll() { GridRow({ columns: { sm: 4, md: 8, lg: 12 }, gutter: 12 }) { GridCol({ span: { sm: 4, md: 8, lg: 12 } }) { this.CustomSwiper(this.commodity.images) } GridCol({ span: { sm: 4, md: 8, lg: 12 }, offset: { lg: 2 } }) { Column() { /*價格信息*/ DetailTitleBar() /*選這項*/ SpecifiSetting() /*服務和送貨地址*/ SpecialAddres_Service() /*評價*/ UserReviews() } } } } GridRow({ columns: { sm: 4, md: 8, lg: 12 }, gutter: 12 }) { GridCol({ span: { sm: 4, md: 8, lg: 12 }, offset: { lg: 2 } }) { ShoppingBottomMenu() } } } /*頭部返回和分享*/ Flex({ direction: FlexDirection.Row, justifyContent: FlexAlign.SpaceBetween }) { Button() { Image($r('app.media.ic_back')).height('100%').aspectRatio(1) } .titleButton() .onClick(() => router.back()) Button() { Image($r('app.media.ic_share')).height('100%').aspectRatio(1) } .titleButton() } .margin({ left: $r('app.float.vp_sixteen'), top: $r('app.float.vp_sixteen'), right: $r('app.float.vp_sixteen') }) } .backgroundColor('#e1e1e1') .height('100%')
如果大家还没有掌握鸿蒙,现在想要在最短的时间里吃透它,我这边特意整理了《鸿蒙语法ArkTS、TypeScript、ArkUI等…视频教程》以及《鸿蒙开发学习手册》(共计890页),希望对大家有所帮助:https://docs.qq.com/doc/DZVVBYlhuRkZQZlB3
鸿蒙语法ArkTS、TypeScript、ArkUI等…视频教程:https://docs.qq.com/doc/DZVVBYlhuRkZQZlB3
OpenHarmony APP应用开发教程步骤:https://docs.qq.com/doc/DZVVBYlhuRkZQZlB3
《鸿蒙开发学习手册》:
如何快速入门:https://docs.qq.com/doc/DZVVBYlhuRkZQZlB3
1.基本概念
2.构建第一个ArkTS应用
3.……
开发基础知识:https://docs.qq.com/doc/DZVVBYlhuRkZQZlB3
1.应用基础知识
2.配置文件
3.应用数据管理
4.应用安全管理
5.应用隐私保护
6.三方应用调用管控机制
7.资源分类与访问
8.学习ArkTS语言
9.……
基于ArkTS 开发:https://docs.qq.com/doc/DZVVBYlhuRkZQZlB3
1.Ability开发
2.UI开发
3.公共事件与通知
4.窗口管理
5.媒体
6.安全
7.网络与链接
8.电话服务
9.数据管理
10.后台任务(Background Task)管理
11.设备管理
12.设备使用信息统计
13.DFX
14.国际化开发
15.折叠屏系列
16.……