购物应用

介绍

运行部署本示例前,请先参阅跨平台应用改造指南以熟悉相关概念。

基于HarmonyOS Next的购物应用进行跨平台改造适配,主要用于呈现ArkUI-X框架的基本能力。基于自适应和响应式布局,实现一次开发,多端部署的购物应用。

效果预览

鸿蒙平台 Android平台 iOS平台

使用说明

  • 分别在Android、iOS、HarmonyOSNext安装并打开应用。应用启动后进入启动页,之后进入应用首页。
  • 点击底部首页、新品、购物车、我的图片文字按钮,切换显示对应的标签页,默认显示首页标签页。
  • 点击首页标签页或购物车标签页的商品列表,跳转到商品详情页。
  • 点击商品详情页的立即购买按钮,跳转到订单确认页。
  • 点击订单确认页的提交订单,跳转到订单支付页。
  • 点击我的标签页的我的订单栏的按钮,跳转到订单列表页。
  • 其他按钮无实际点击事件或功能。

工程目录

MultiShopping
├── .arkui-x
│   ├── android					//Android 工程
│   ├── ios						//iOS 工程
│   └── arkui-x-config.json5
├── AppScope
│   ├── app.json5
│   └── resources
├── build-profile.json5
├── commons						// 公共能力层
│   └── utils
│       ├── build-profile.json5
│       ├── hvigorfile.ts
│       ├── index.ets
│       ├── oh-package.json5
│       └── src
│           └── main
│               ├── ets
│               │   ├── components
│               │   │   ├── CommodityList.ets	
│               │   │   ├── CounterProduct.ets	
│               │   │   └── EmptyComponent.ets	
│               │   ├── constants
│               │   │   ├── BreakpointConstants.ets  
│               │   │   ├── GridConstants.ets		
│               │   │   ├── PageConstants.ets
│               │   │   └── StyleConstants.ets
│               │   ├── utils
│               │   │   ├── BreakpointSystem.ets
│               │   │   ├── CommonDataSource.ets
│               │   │   ├── LocalDataManager.ets
│               │   │   ├── Logger.ets
│               │   │   ├── PlatformInfo.ets			//平台区分能力
│               │   │   └── Utils.ets
│               │   └── viewmodel
│               │       ├── CommodityModel.ets
│               │       ├── MainPageData.ets
│               │       ├── OrderModel.ets
│               │       ├── ProductModel.ets
│               │       └── ShopData.ets
│               ├── module.json5
│               └── resources
├── features
│   ├── home
│   │   ├── build-profile.json5
│   │   ├── hvigorfile.ts
│   │   ├── index.ets
│   │   ├── oh-package.json5
│   │   └── src
│   │       └── main
│   │           ├── ets
│   │           │   ├── components
│   │           │   │   └── Home.ets
│   │           │   └── viewmodel
│   │           │       └── HomeData.ets
│   │           ├── module.json5
│   │           └── resources
│   ├── newproduct
│   │   ├── build-profile.json5
│   │   ├── hvigorfile.ts
│   │   ├── index.ets
│   │   ├── oh-package.json5
│   │   └── src
│   │       └── main
│   │           ├── ets
│   │           │   ├── components
│   │           │   │   └── NewProduct.ets
│   │           │   └── viewmodel
│   │           │       └── NewProductData.ets
│   │           ├── module.json5
│   ├── orderdetail
│   │   ├── build-profile.json5
│   │   ├── hvigorfile.ts
│   │   ├── index.ets
│   │   ├── oh-package.json5
│   │   └── src
│   │       └── main
│   │           ├── ets
│   │           │   ├── components
│   │           │   │   ├── AddressInfo.ets
│   │           │   │   ├── CapsuleGroupButton.ets
│   │           │   │   ├── CommodityDetail.ets
│   │           │   │   ├── CommodityOrderItem.ets
│   │           │   │   ├── CommodityOrderList.ets
│   │           │   │   ├── ConfirmOrder.ets
│   │           │   │   ├── HeaderBar.ets
│   │           │   │   ├── OrderDetailList.ets
│   │           │   │   ├── OrderListContent.ets
│   │           │   │   ├── PayOrder.ets
│   │           │   │   └── SpecificationDialog.ets
│   │           │   ├── constants
│   │           │   │   ├── CommodityConstants.ets
│   │           │   │   └── OrderDetailConstants.ets
│   │           │   ├── viewmodel
│   │           │   │   ├── CommodityDetailData.ets
│   │           │   │   ├── OrderData.ets
│   │           │   │   └── TypeModel.ets
│   │           │   └── views
│   │           │       ├── CommodityDetailPage.ets
│   │           │       ├── ConfirmOrderPage.ets
│   │           │       ├── OrderDetailListPage.ets
│   │           │       └── PayOrderPage.ets
│   │           ├── module.json5
│   │           └── resources
│   ├── personal
│   │   ├── build-profile.json5
│   │   ├── hvigorfile.ts
│   │   ├── index.ets
│   │   ├── oh-package.json5
│   │   └── src
│   │       └── main
│   │           ├── ets
│   │           │   ├── components
│   │           │   │   ├── IconButton.ets
│   │           │   │   ├── LiveList.ets
│   │           │   │   └── Personal.ets
│   │           │   ├── constants
│   │           │   │   └── PersonalConstants.ets
│   │           │   └── viewmodel
│   │           │       ├── IconButtonModel.ets
│   │           │       └── PersonalData.ets
│   │           ├── module.json5
│   │           └── resources
│   └── shopcart
│       ├── build-profile.json5
│       ├── hvigorfile.ts
│       ├── index.ets
│       ├── oh-package.json5
│       └── src
│           └── main
│               ├── ets
│               │   ├── components
│               │   │   └── ShopCart.ets
│               │   └── constants
│               │       └── ShopCartConstants.ets
│               ├── module.json5
│               └── resources
├── hvigor
│   ├── hvigor-config.json5
│   └── hvigor-wrapper.js
├── hvigorfile.ts
├── oh-package.json5
├── products
│   └── phone
│       ├── build-profile.json5
│       ├── hvigorfile.ts
│       ├── obfuscation-rules.txt
│       ├── oh-package.json5
│       └── src
│           └── main
│               ├── ets
│               │   ├── entryability
│               │   │   └── EntryAbility.ets
│               │   └── pages
│               │       ├── MainPage.ets			 // 主页
│               │       └── SplashPage.ets			 // 启动过渡页
│               ├── module.json5
│               └── resources
├── README.md
└── screenshots

具体实现

应用整体结构分为3层,commons为公共能力层,features为功能模块层,products则为产品层。

  • 应用启动后首先进入启动页,然后进入应用主页
    • 启动页SplashPage.ets
      • 在工程pages目录中,选中Index.ets,点击鼠标右键 > Refactor > Rename,改名为SplashPage.ets。
      • 改名后,修改工程entryability目录下EntryAbility.ets文件中windowStage.loadContent方法第一个参数为pages/SplashPage。
      • 在该页面的周期函数aboutToAppear里添加一个2秒的定时任务跳转到主页实现。
    • 主页MainPage.ets
      • 主页由Tabs容器组件和四个TabContent子组件组成,四个TabContent页签的内容视图分别为首页(Home)、新品(NewProduct)、购物车(ShopCart)、我的(Personal)。
      • 根据用户使用场景,通过响应式布局的媒体查询,监听应用窗口宽度变化,获取当前应用所处的断点值。
    • 首页标签页通过自适应布局的均分、拉伸等能力实现搜索框、分类等布局,通过响应式布局的媒体查询、断点能力设置轮播图数、商品列表数。
    • 购物车标签页,由购物车列表和商品列表组成,商品列表实现逻辑同主页的商品列表,购物车列表使用自适应布局的均分能力实现。
    • 我的标签页主要由个人信息、我的订单、文字图片按钮、直播列表组成,直播列表实现方案同主页商品列表,其他则使用自适应布局的均分能力,Flex布局设置主轴上的对齐方式为FlexAlign.SpaceAround。

相关权限

不涉及。

依赖

不涉及

约束与限制

1.本示例仅支持标准Android/iOS/鸿蒙系统上运行。

2.本示例已适配API version 16及以上版本的ArkUI-X SDK。

3.本示例需要使用DevEco Studio 5.0.4 Release及以上版本才可编译运行。

4.本示例需要修改使用的DevEco Studio相关SDK的配置项,详见关于deveco-studio编译时报错问题解决

下载

如需单独下载本工程,执行如下命令:

git init
git config core.sparsecheckout true
echo /CodeLab/MultiShopping > .git/info/sparse-checkout
git remote add origin https://gitcode.com/arkui-x/samples.git
git pull origin master