• 【鸿蒙应用】理财App


    项目地址
    https://gitee.com/cheng_yong_xu/managemoney

    第一节项目讲解

    项目介绍

    这款专为个人财务管理而设计的强大应用。通过智能化的技术和用户友好的界面,我们致力于帮助您轻松管理
    财务、掌握支出和收入,从而更好地规划您的财务未来。课程中内容包括页面搭建以及服务端编写。服务端完
    全使用鸿蒙提供的serverless也就是端云-体化的能力。课程中这款应用部分页面采用webView ,可以详细了
    解鸿蒙中使用webView相关注意点。

    在这里插入图片描述

    设计稿
    在这里插入图片描述

    第二节:项目创建+登录静态框架编写

    登录页面设稿

    在这里插入图片描述

    新建项目

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    在这里插入图片描述
    在这里插入图片描述

    控制台添加项目

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    在这里插入图片描述
    需要安装模拟器
    在这里插入图片描述
    根据设计搞写页面
    在这里插入图片描述

    Login页面

    先写个Login页面,修改程序入口
    在这里插入图片描述
    在这里插入图片描述

    删除一些初始化的文件,并引入一些资源(图片图标)

    封装标题组件

    // src/main/ets/components/TitleComponent.ets
    
    @Component
    export default struct TitleComponent {
      @Prop title: string
      isBack = false
    
      build() {
        Flex({ justifyContent: FlexAlign.SpaceBetween, alignItems: ItemAlign.Center }) {
          Image(this.isBack ? $r('app.media.Button_left') : "")
            .width(44)
            .height(44)
            .objectFit(ImageFit.ScaleDown)
          Text(this.title)
            .fontColor('rgb(1,23,73)')
            .fontWeight(700)
            .fontSize(20)
          Text('')
            .width(44)
            .height(44)
        }
        .padding({left:20, right: 20, top: 12, bottom: 12 })
      }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24

    Login

    
    // src/main/ets/pages/Login.ets
    
    import TitleComponent from '../components//TitleComponent'
    
    @Entry
    @Component
    struct Login {
      @State message: string = '你好'
    
      build() {
        Flex({wrap: FlexWrap.Wrap, justifyContent: FlexAlign.Center}){
          // 标题
          TitleComponent({ title: '登录' })
          // 表单内容
          Column(){
            // 钱币Logo浮在上面层叠布局
            Stack(){
              Image($r('app.media.Login_icon'))
                .width(88)
                .height(88)
                .offset({ y: -44 })  // 向上偏移
            }
          }
          .width('90%')
          .height('100%')
          .borderRadius(20)
          .backgroundColor(Color.White)
          .margin({top:44})
          .padding({left:14, right:14})
        }
        .width('100%')
        .height('100%')
        .backgroundColor($r('app.color.base_background'))
      }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36

    效果
    在这里插入图片描述

    第三节:登录页静态表单编写

    详细修改查看git分支 03 【第三节:登录页静态表单编写】

    1. 创建Input组件
    2. 在Login页面中使用

    效果
    在这里插入图片描述

    第四节—内容页架构分析+底部栏组件

    详细修改查看git分支 04 【第四节—内容页架构分析+底部栏组件】
    在这里插入图片描述

    效果
    在这里插入图片描述

    第五节—底部栏组件切换

    详细修改查看git分支 05 【第五节—底部栏组件切换】

    效果
    在这里插入图片描述

    第六节:首页静态页编写

    详细修改查看git分支 06 【第六节:首页静态页编写】

    效果
    在这里插入图片描述

    第七节:钱包+银行卡静态页

    详细修改查看git分支 07 【第七节:钱包+银行卡静态页】

    钱包页面设计稿
    在这里插入图片描述
    银行卡静态页计稿
    在这里插入图片描述

    效果
    在这里插入图片描述

    在这里插入图片描述

    第八节:个人中心静态页编写

    详细修改查看git分支 08 【第八节:个人中心静态页编写】

    设计稿
    在这里插入图片描述

    效果
    在这里插入图片描述

    第九节:编辑资料+二维码生成

    详细修改查看git分支 09 【第九节:编辑资料+二维码生成】

    效果

    在这里插入图片描述
    在这里插入图片描述

    第十节:支付页静态编写

    详细修改查看git分支 10【第十节:支付页静态编写】

    设计稿
    在这里插入图片描述

    效果
    在这里插入图片描述

    第十一节:邮箱认证服务开通流程

    按照官网流程走
    在这里插入图片描述

    官网指南里有文档
    在这里插入图片描述

    选择一个认证服务

    在这里插入图片描述

    下载文件agconnect- services.json

    在这里插入图片描述

    添加应用配置文件

    在这里插入图片描述

    配置SDK依赖

    在这里插入图片描述

    在这里插入图片描述

    第十二节:发送验证码+校验

    12 发送验证码+校验
    在这里插入图片描述
    在这里插入图片描述
    验证登录
    在这里插入图片描述

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    错误信息显示用户已经注册过了
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    新增存储区

    在这里插入图片描述

    在这里插入图片描述

    第十三节:云函数+云数据库基本使用

    查看云函数
    在这里插入图片描述
    在本地创建云函数
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    本地调试
    在这里插入图片描述
    在这里插入图片描述
    查看云函数
    在这里插入图片描述

    可以看到日志
    在这里插入图片描述

    在这里插入图片描述

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    调试
    在这里插入图片描述
    可以看到data是个空数组
    我们开始在数据库里添加数据

    在这里插入图片描述

    再次查询
    在这里插入图片描述
    在这里插入图片描述

    第十四节:注册功能实现

    分支 14 【第十四节:注册功能实现】
    目前还没有了解怎么配置忽略文件导致git提交的变化太多,主要是一些包可以忽略

    变化的是这4个文件
    在这里插入图片描述

    使用邮箱注册,注册成功会看到新增用户
    注意你如果只有一个邮箱账号测试,现在认证服务,用户里把邮箱删了再运行注册代码
    在这里插入图片描述

    第十五节:登录+自动登录功能实现

    分支15 第十五节:登录+自动登录功能实现

    /**
       * 登录
       */
      async doLogin() {
        // 使用APPGallery connect 进行用户身份登录
    
        // 多使用try catch app开发程序崩溃直接闪退,使用try catch及时发现原因
        try {
          // 使用邮箱密码登录
          const credential = EmailAuthProvider.credentialWithPassword(this.email, this.password)
          // 执行登录
          const user = await agconnect.auth().signIn(credential)
          // 如果用户已经登录那么可以你直接进入app
          if (user) {
            this.goMain()
          }
        }catch(err){
          console.error(err, '登录失败')
        }
    
      }
    
      goMain () {
        try {
          router.replaceUrl({url: 'pages/MainPage/MainPage'})
        } catch (err) {
          console.log(err, '错误')
        }
      }
      /**
       * 判断当前用户是否登录
       * @returns
       */
    
      async checkIfLogin () {
        const user = await agconnect.auth().getCurrentUser()
        return user !== null
      }
    
      async onPageShow() {
        try {
          const ifLogin = await this.checkIfLogin()
          if (ifLogin) {
            // 已经登录
            this.goMain()
          }
        } catch (err) {
          console.log(err, '未登录')
        }
      }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50

    第十六节:添加银行卡功能实现

    新建表
    在这里插入图片描述

    字段
    在这里插入图片描述

    注意: 这里amount 的类型,我设置错了,导致后面加减计算出现问题

    创建云函数并添加配置文件,下载对应的包
    在这里插入图片描述
    上传云函数
    在这里插入图片描述

    端侧使用云函数

    控制台查看数据
    在这里插入图片描述

    第十七节:银行卡内容获取

    分支 17 第十七节:银行卡内容获取

    云侧:编写查询数据库的代码
    端侧:获取云测给的数据,渲染到页面

    注意:云侧代码写完后接的上传云函数

    效果
    在这里插入图片描述

    第十八节:个人数据获取

    分支 18 第十八节:个人数据获取

    云侧:编写查询数据库的代码
    端侧:获取云测给的数据,渲染到页面

    注意:云侧代码写完后接的上传云函数

    在这里插入图片描述

    第十九节:修改个人资料

    分支19 第十九节:修改个人资料

    第二十节:流程梳理+支付事务编写

    主要流程

    • 现在有两个用户分别称为用户A和用户B
    • 用户A和用户B都通过邮箱注册账号
    • 注册完后都可以去个人页面进行名称修改
    • 去钱包页面通过添加按钮进行银行卡的添加
    • 用户A和用户B都添加完银行卡后,去往用户A的个人页面
    • 打开A的二维码,进行扫码获取到用户的uid
    • 切换到B,在用户B主页-转账 把跳转参数修改为用户A的uid
    • 点击转账此时会显示支付弹框
    • 支付弹框内会显示A的姓名、邮箱、银行卡信息
    • 点击支付支付完成后回到主页
    • 此时、用户B的卡片余额会减少,切换到 数据页面 可以看到 最近联系人 支付记录 收入支出汇总
    • 切换到用户A 切换到 数据页面 可以看到 最近联系人 支付记录 收入支出汇总

    添加支付记录表
    在这里插入图片描述

    在这里插入图片描述

    第二十一节:支付功能走通

    分支21 第二十一节:支付功能走通

    如果你要本地调试请使用

      const {payload, action} = event.body
    
    • 1

    /**

    • 本地调试不需要序列化
    • 远程需要序列化
      */
      // const {payload, action} = JSON.parse(event.body)
      const {payload, action} = event.body
      在这里插入图片描述

    注意: 只要修改云函数,必须上传云函数

    如果使用

    const {payload, action} = JSON.parse(event.body)
    
    • 1

    在本地调试,会报错
    在这里插入图片描述

    第二十二节:交易信息查询

    分支22 第二十二节:交易信息查询

    查询两个用户的信息,分页,排序

    在这里插入图片描述

    第二十三节:上传头像

    分支 23 第二十三节:上传头像

    需要从文件里读取图片,转成base64

    在这里插入图片描述

    第二十四节:Server端汇总数据实现

    分支 24 二十四节:Server端汇总数据实现
    在这里插入图片描述

    第二十五节:WebView传值原理

    分支 25 第二十五节:WebView传值原理、页面编写

    1. 在WebView里无法操作外部数据,所以我们需要将外部数据传给WebView所在的页面,再从页面传给WebView

    2. 使用vue,js不能用cdn,所以在项目中直接放的vue,js源码

    3. 我们不可以使用浏览器调试,所以调试的时候需要监听onConsole,才能在日志打印调试信息

    第二十六节:webView页面编写

    分支 25 第二十五节:WebView传值原理、页面编写

    和我们正常的写前端页面是一样的

    有个bug
    由于在数据库设置字段的时候,amount设置成String类型
    导致操作数据库,拿到amount进行加减的时候出现了字符加减的情况,
    试图将amount设置成integer,但是在获取数据的时候拿不到amount,拿到的是null,不知道是为什么
    在这里插入图片描述

    在这里插入图片描述

    二十八七:分页功能

    分支 26 二十八七:分页功能
    监听列表下拉刷新

  • 相关阅读:
    基于python-socket构建任务服务器(基于socket发送指令创建、停止任务)
    Linux基础概念--进程、子进程、进程组和会话
    js 处理数组合并vs对象合并
    黑猫带你学UFS协议第16篇:UFS命令队列详解(CMDQ)
    基于Web html的“我的家乡”网站前端设计
    kivy教程之在 Kivy 中支持中文以构建跨平台应用程序(教程含源码)
    Mysql索引优化1
    基于HTML美食餐饮文化项目的设计与实现 HTML+CSS上海美食介绍网页(8页) 大学生美食文化网站制作 简单餐饮文化网页设计成品
    JAVA经典百题之排序算法
    某商业银行核心存储选型实践经验
  • 原文地址:https://blog.csdn.net/pacong/article/details/137915084