一、首页整体结构MeCharts 首页HomeView承载了所有量表入口整体结构为顶部导航栏 可滚动内容区轮播图 分类网格。PreviewComponentV2exportstruct HomeView{LocalglobalInfoModel:GlobalInfoModelAppStorage.get(GlobalInfoModel)||newGlobalInfoModel()privatepageContext:PageContextAppStorage.get(pageContext)asPageContext;LocalimgHeight:number190LocalimgWidth:number264LocalimgList:Resource[]newArray(3).fill().map((item:string,index){return$r(app.media.banner_0${index1})})privateasdList:AbcModel[][newAbcModel($r(app.media.ic_item_abc),ABC量表,(自闭症行为评定量表),1),newAbcModel($r(app.media.ic_item_cars),CARS量表,(儿童期孤独症评定量表),2),newAbcModel($r(app.media.ic_item_move),多动症量表,(多动症诊断标准量表),3),]privatecareerList:AbcModel[][newAbcModel($r(app.media.ic_item_mbti),MBTI测试,(MBTI职业性格测试完整版),1),]privateemotionList:AbcModel[][newAbcModel($r(app.media.ic_item_depress),SDS量表,(抑郁自评量表),1),newAbcModel($r(app.media.ic_item_anxious),SAS量表,(焦虑症自评量表),2),newAbcModel($r(app.media.ic_item_relationship),ECR量表,(亲密关系经历量表),3),]build(){Column(){this.buildTopBar();this.buildContentView();}.height(100%).width(100%).backgroundColor($r(app.color.color_background))}}1.1 数据模型设计所有量表入口使用统一的AbcModel数据模型ObservedexportclassAbcModel{img:Resource|undefinedundefinedtitle:stringsubTitle:stringid:number0score?:stringtype?:number0constructor(img:Resource,title?:string,subTitle?:string,id?:number,score?:string,type?:number){// 构造函数赋值...}}Observed装饰器使该类的实例可被 ArkUI 框架观测当属性变化时自动触发 UI 刷新。这在历史记录页面中更新分数显示时非常关键。二、Swiper 轮播组件2.1 基本使用首页顶部使用UISwiperAGConnect 提供的增强轮播组件展示推荐量表UISwiper({imgWidth:this.imgWidth,imgHeight:this.imgHeight,imgList:this.imgList,isLoop:true,isCovered:false,onImageClick:(index:number){if(index0){this.pageContext.openPage({param:{title:MBTI测试}asResultParams,routerName:MbtiListPage,},true);}elseif(index1){this.pageContext.openPage({param:{title:ABC量表}asResultParams,routerName:AbcListPage,},true);}elseif(index2){this.pageContext.openPage({param:{title:SAS量表,type:FormType.TYPE_SDS}asResultParams,routerName:MoveListPage,},true);}}})轮播图的点击事件通过onImageClick回调处理根据索引跳转到不同量表页面。2.2 原生 Swiper 的使用方式如果使用原生 Swiper 组件基础用法如下Swiper(){ForEach(this.imgList,(img:Resource){Image(img).width(this.imgWidth).height(this.imgHeight).borderRadius(12).onClick((){// 点击跳转逻辑})})}.autoPlay(true).interval(3000).indicator(true).loop(true).cachedCount(2)原生 Swiper 的关键属性属性说明autoPlay是否自动播放interval自动播放间隔msindicator是否显示导航指示器loop是否循环播放cachedCount预缓存页面数三、Grid 网格布局3.1 分类网格实现首页使用 Grid 布局展示三大分类的量表入口BuilderbuildAbc(){// 分类标题Row({space:10}){Text().width(3).height(15).backgroundColor($r(app.color.color_default));Text(自闭症相关).fontWeight(FontWeight.Bold).fontSize(16)}.margin({left:12})// 量表网格Grid(){ForEach(this.asdList,(asd:AbcModel,index){GridItem(){Column({space:8}){Row({space:8}){Image(asd.img).width(24);Text(asd.title).fontWeight(FontWeight.Medium);};Text(asd.subTitle).fontSize(12);}.alignItems(HorizontalAlign.Center).justifyContent(FlexAlign.Center).borderRadius(15).width(100%).height(100%).backgroundColor($r(app.color.color_card))}.onClick((){// 跳转到对应量表页面})})}.padding(12).columnsTemplate(1fr 1fr)// 两列等宽.rowsTemplate(1fr 1fr)// 两行等高.columnsGap(10).rowsGap(10).width(100%).height(160)}3.2 Grid 核心属性columnsTemplate / rowsTemplate是 Grid 最核心的属性定义了网格的行列结构.columnsTemplate(1fr 1fr)// 两列每列等宽.rowsTemplate(1fr 1fr)// 两行每行等高fr是分数单位1fr 1fr表示两列各占 1/2。更复杂的布局如.columnsTemplate(1fr 2fr 1fr)// 三列中间列是两侧的两倍宽.rowsTemplate(auto auto)// 两行高度由内容决定columnsGap / rowsGap控制行列间距.columnsGap(10)// 列间距 10vp.rowsGap(10)// 行间距 10vp3.3 不同分类的布局差异MeCharts 根据量表数量灵活调整布局分类量表数量布局方式高度自闭症相关3个2列×2行160职业性格相关1个2列×1行80情绪相关3个2列×2行160职业性格分类只有一个量表使用单行布局其他分类使用 2×2 网格空位自然留白。四、TopBar 通用顶部导航栏4.1 组件设计TopBar 是全应用复用率最高的组件支持标题、返回按钮和右侧自定义内容ComponentV2exportstruct TopBar{privateglobalInfoModel:GlobalInfoModelAppStorage.get(GlobalInfoModel)||newGlobalInfoModel();Paramtitle:stringParamshowBackButton:booleantrueParambgColor:ResourceColor$r(app.color.color_default)ParamtitleColor:ResourceColorColor.WhiteParambarHeight:number80ParamstatusBarHeight:numberthis.globalInfoModel.statusBarHeightEventonBack?:()void|booleanBuilderParamrightContent?:()voidhandleBack(){if(this.onBack){constresultthis.onBack()if(resultfalse){return// 返回 false 可阻止默认行为}}}build(){RelativeContainer(){if(this.showBackButton){Image($r(app.media.ic_back)).width(20).height(20).id(backBtn).alignRules({left:{anchor:__container__,align:HorizontalAlign.Start},center:{anchor:__container__,align:VerticalAlign.Bottom}}).onClick((){this.handleBack()})}Text(this.title).fontSize(18).fontWeight(FontWeight.Bold).fontColor(this.titleColor).id(title).alignRules({center:{anchor:__container__,align:VerticalAlign.Bottom},middle:{anchor:__container__,align:HorizontalAlign.Center}})if(this.rightContent){Row(){this.rightContent()}.id(rightContent).alignRules({right:{anchor:__container__,align:HorizontalAlign.End},center:{anchor:__container__,align:VerticalAlign.Bottom}})}}.width(100%).height(this.barHeight).backgroundColor(this.bgColor).padding({top:this.statusBarHeight,bottom:20,left:12,right:12})}}4.2 RelativeContainer 相对布局TopBar 使用RelativeContainer实现左右中三栏布局这是 HarmonyOS 提供的相对定位容器返回按钮锚定容器左侧 垂直居中标题锚定容器水平居中 垂直居中右侧内容锚定容器右侧 垂直居中相比 Flex 布局RelativeContainer 在处理左右对齐 中间居中的场景时更简洁。4.3 使用示例首页使用 TopBar无返回按钮 自定义右侧TopBar({title:自测量表,showBackButton:false,rightContent:(){this.buildRightContent()},})子页面使用 TopBar有返回按钮TopBar({title:this.title,onBack:(){this.pageContext.popPage(true)}})五、ComponentV2 与 Component 的选择MeCharts 中两种组件声明方式并存ComponentV2新版本装饰器支持Param、Event、Local、Monitor等类型安全更好Component经典版本装饰器支持Prop、Link、State等特性ComponentComponentV2状态装饰器State, Prop, LinkLocal, Param, Event状态观测基于代理基于拦截器性能更优参数传递构造函数传入Param 声明式事件回调箭头函数Event 装饰器监听变化WatchMonitor新项目推荐优先使用ComponentV2。六、小结本篇讲解了首页的 Swiper 轮播、Grid 网格布局和 TopBar 通用组件的设计实现。通过组件化封装和统一数据模型首页的代码结构清晰、复用性强。下一篇将深入量表答题页面的实现讲解自定义 Radio 组件与表单交互。
企业数字化 ERP 产品动态
相关推荐
Linux运维入门实战:从系统安装到Docker部署的完整学习路径 1. 从零到能干活,Linux运维到底要学什么很多人想转行或者提升技能,看到“Linux运维”这个词,第一反应是命令太多、概念太杂,不知道从哪里下手。网上的资料要么太散,要么一上来就讲高深架构,对新手极不友好。… · 2026/10/20 14:51:42
操作系统内核架构深度解析:从宏内核到微内核的技术演进与选型指南 在实际项目开发、运维、系统选型乃至日常工作中,我们常常需要面对一个基础但至关重要的问题:选择哪个操作系统?是 Windows 的生态便利,macOS 的设计美学,Linux 的开源自由,还是鸿蒙的万物互联?这个问题看似简单,但背后涉及的是内核架构、设计哲学、应用生态、开发体验和… · 2026/10/20 11:27:08
Dify开源LLM应用平台:从零部署到构建知识库问答助手实战 Dify 是一个开源的 LLM 应用开发平台,它让开发者能够通过可视化的工作流编排,快速构建和部署基于大语言模型的 AI 应用。如果你正在寻找一个能整合模型、知识库、工具,并能通过 API 对外提供服务的“一站式”解决方案,Dify 值得你… · 2026/10/24 2:43:35
漯河电工证拿证保姆级教程:实操考试心里没底怕挂科?手把手教你拿证不慌 漯河电工证拿证保姆级教程:实操考试心里没底怕挂科?手把手教你拿证不慌 实操考试心里没底怕挂科?特别是像你这样在信阳从事中小型施工企业的负责人,每天忙于项目管理、人员调配、安全合规,一听说要考电工证,脑袋就开始发懵——“这证到底难不难考?有没… · 2026/11/15 19:16:56
电工证与上岗证多少钱?怕考不过白交培训费?别慌! 电工证与上岗证多少钱?怕考不过白交培训费?别慌! 你是不是也担心电工证和上岗证考试考不过,钱白交了?其实大多数培训机构都有退费政策,只要你符合条件, 多少钱… · 2026/11/15 19:16:56
电工证年审考试题目千万别踩坑怎么选靠谱培训机构 电工证年审考试题目千万别踩坑怎么选靠谱培训机构 你是不是还在为电工证年审考试题目发愁?担心自己找错了地方,被中间人坑了钱还学不到东西?别急,今天就来聊聊怎么选对机构,避开那些 千万别踩坑 的陷阱。 为什么要考电工证年审考试?… · 2026/11/15 19:16:56
同城特种工培训多少钱?含金量高的证怎么选? 同城特种工培训多少钱?含金量高的证怎么选? 你手头正缺证?着急上岗找工作?特种作业证在当下工地、工厂、电力、建筑等行业是硬门槛,没有证连面试机会都没有。别急,今天咱们就聊聊【同城特种工培训多少钱】这个最关心的问题,顺便说说哪个证的 含金量… · 2026/11/15 19:16:56
观山湖区电工证办理怕被坑?考前押题帮你避开这些坑 观山湖区电工证办理怕被坑?考前押题帮你避开这些坑 不知道去哪报名怕被中介坑,现在办电工证的人越来越多,但找错地方真的容易被坑。观山湖区电工证办理虽然看起来简单,但其中门道不少,尤其对于初次报考的小伙伴来说,选对报名渠道、了解清楚考试内容、掌… · 2026/11/15 19:15:53
长春初级电工证怎么考?通过率揭秘全在这里 长春初级电工证怎么考?通过率揭秘全在这里 之前考的证在外省能不能转过来?这几乎是每个想从事电工工作的人都会问的问题。特别是那些在外地打拼多年、手里握着一张“外地电工证”的人,到了长春想继续干这一行,第一反应就是“我的证能用吗?”。今天我们就… · 2026/11/15 0:00:50
国内电工证报考条件与考试时间 低压电工证怎么考?学历不高也能报名,官方报名入口全在这 你是不是经常听说“电工证是入行门槛”,但又担心自己学历不够、经验不足,根本报不了名?别急,今天就带你从零了解【国内电工证】的报考流程、考试内容,还有怎么在 官方报名入口… · 2026/11/15 0:00:50
电工作业时如何断电?电子证书到底能不能全国通用? 电工作业时如何断电?电子证书到底能不能全国通用? 实操考试心里没底怕挂科,特别是电工作业时如何断电这一操作,不仅关系到你能不能拿到证书,更关系到以后能不能顺利上岗。很多人觉得这不过就是“断个电”,但其实这里面的门道可不少,稍有不慎就可能出错… · 2026/11/15 0:00:50
长春初级电工证怎么考?通过率揭秘全在这里 长春初级电工证怎么考?通过率揭秘全在这里 之前考的证在外省能不能转过来?这几乎是每个想从事电工工作的人都会问的问题。特别是那些在外地打拼多年、手里握着一张“外地电工证”的人,到了长春想继续干这一行,第一反应就是“我的证能用吗?”。今天我们就… · 2026/11/15 0:00:50
国内电工证报考条件与考试时间 低压电工证怎么考?学历不高也能报名,官方报名入口全在这 你是不是经常听说“电工证是入行门槛”,但又担心自己学历不够、经验不足,根本报不了名?别急,今天就带你从零了解【国内电工证】的报考流程、考试内容,还有怎么在 官方报名入口… · 2026/11/15 0:00:50
电工作业时如何断电?电子证书到底能不能全国通用? 电工作业时如何断电?电子证书到底能不能全国通用? 实操考试心里没底怕挂科,特别是电工作业时如何断电这一操作,不仅关系到你能不能拿到证书,更关系到以后能不能顺利上岗。很多人觉得这不过就是“断个电”,但其实这里面的门道可不少,稍有不慎就可能出错… · 2026/11/15 0:00:50
双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/15 1:51:20
STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/15 4:02:19
DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/15 3:02:05