鸿蒙账单记录

 介绍

随着科技的发展,手机记账逐渐成为人们的日常习惯,记账系统便携于人们的日常生活,本篇文章将介绍如何在Dev软件中基于鸿蒙系统实现账目记录功能,包括多种活动的数据录入,展示,累加等功能。

通过Dev软件实现鸿蒙项目账单记录,项目主页面如下

 实现的功能包括对衣食出行娱乐医疗等许多日常行动消费的记录

部分源代码如下

界面视图源码

export struct BalanceViewer {
  @Link selectedDate: Date;
  @Link currentBillingInfo: string;
  @Link totalIncome: number;
  @Link totalBalance: number;

  build() {
    Column() {
      Row() {
        Column() {
          Row() {
            Text(StringUtils.formatDate(this.selectedDate, 'Y')).fontSize(12).fontColor($r('app.color.text_white'))
            Text($r("app.string.year")).fontSize(12).fontColor($r('app.color.text_white'))
          }
        }.width('20%')

        Column() {
          Text($r("app.string.income"))
            .fontColor($r('app.color.text_white'))
            .fontSize(12)
            .textAlign(TextAlign.Start)
            .width('100%')
        }.width('40%').margin({ left: 10 })

        Column() {
          Text($r("app.string.balance"))
            .fontColor($r('app.color.text_white'))
            .fontSize(12)
            .textAlign(TextAlign.Start)
            .width('100%')
        }.width('40%')
      }
      .height(12)
      .width('100%')
      .backgroundColor($r('app.color.main_theme_blue'))

      Row() {
        Column() {
          Button({ type: ButtonType.Normal }) {
            Row() {
              Text(StringUtils.formatDate(this.selectedDate, 'M'))
                .fontSize(22)
                .fontColor(Color.White)
              Text($r("app.string.month"))
                .fontColor($r('app.color.text_white'))
                .fontSize(12)
                .align(Alignment.Bottom)
                .height(22)
                .margin(2)
              Image($r("app.media.ic_public_extract_list_light"))
                .width(8).height(8).margin({ top: 6, left: 8 })
            }
          }.onClick(() => {
            DatePickerDialog.show({
              start: new Date(`2000-01-01`),
              selected: this.selectedDate,
              onAccept: (v) => {
                this.selectedDate.setFullYear(v.year, v.month, v.day);
              }
            });
          })
          .backgroundColor($r('app.color.main_theme_blue'))
          .width('100%')
          .borderRadius(4)
        }
        .width('20%')
        .border({
          style: BorderStyle.Solid,
          color: { right: "gray" },
          width: { right: 1 }
        })
        Column() {
          Text(this.totalIncome.toFixed(2))
            .fontColor(Color.White)
            .fontSize(20)
            .textAlign(TextAlign.Start)
            .width('100%')
        }.width('40%')
        .margin({ left: 10 })

账单记录

@Component
export struct PageEntries {
  private selectedDate: Date = new Date();

  build() {
    Row() {
      Flex({ justifyContent: FlexAlign.SpaceAround }) {
        Button({ type: ButtonType.Normal }) {
          Column() {
            Row() {
              Image($r("app.media.ic_public_budget"))
                .width(32)
                .height(32)
            }

            Row() {
              Text("账单")
                .fontSize(10)
                .width('100%')
                .textAlign(TextAlign.Center)
            }.height(12).width(48)
          }.width(48)
        }.backgroundColor(Color.Transparent).borderRadius(8).onClick(() => {
          router.pushUrl({
            url: "pages/BillInfoPage",
            params: {
              date: this.selectedDate
            }
          });
        })

        Button({ type: ButtonType.Normal }) {
          Column() {
            Row() {
              Image($r("app.media.ic_public_opensource_info"))
                .width(32)
                .height(32)
            }

            Row() {
              Text("开源信息")
                .fontSize(10)
                .width('100%')
                .textAlign(TextAlign.Center)
            }.height(12).width(48)
          }.width(48).alignItems(HorizontalAlign.Center)
        }.backgroundColor(Color.Transparent).onClick(() => {
          router.pushUrl({
            url: 'pages/Copyright'
          }, router.RouterMode.Standard, err => {
            return;
          })
        }).borderRadius(8)

        Button({ type: ButtonType.Normal }) {
          Column() {
            Row() {
              Image($r("app.media.ic_public_billing_graphic"))
                .width(32)
                .height(32)
            }

            Row() {
              Text("经济图表")
                .fontSize(10)
                .width('100%')
                .textAlign(TextAlign.Center)
            }.height(12).width(48)
          }.width(48).alignItems(HorizontalAlign.Center)
        }.backgroundColor(Color.Transparent).borderRadius(8).onClick(() => {
          promptAction.showToast({ message: "待开发" })
        })

        Button({ type: ButtonType.Normal }) {
          Column() {
            Row() {
              Image($r("app.media.ic_public_add_billing"))
                .width(32)
                .height(32)
            }

            Row() {
              Text("记账")
                .fontSize(10)
                .width('100%')
                .textAlign(TextAlign.Center)
            }.height(12).width(48)
          }.width(48).alignItems(HorizontalAlign.Center)
        }.stateEffect(false).backgroundColor(Color.Transparent).onClick(() => {
          router.pushUrl({
            url: "pages/addBalance",
            params: {
              year: this.selectedDate.getFullYear(),
              month: this.selectedDate.getMonth() + 1
            }
          })
        }).borderRadius(8)
      }
      .height(64)
      .width('100%')
      .backgroundColor(Color.White)
      .borderRadius(8)
      .padding(8)
      .shadow({ radius: 24, color: $r('app.color.main_theme_shadow') })
    }.linearGradient({
      angle: 180,
      colors: [
        [$r('app.color.main_theme_blue'), 0],
        ["#ffffff", 1]
      ],
      repeating: false
    }).padding({ top: 16, left: 8, right: 8, bottom: 8 })
  }
}

添加账单消息部分源码

  activeDate: Date = new Date();
  context = getContext(this) as common.UIAbilityContext;
  filesDir = this.context.filesDir;
  balanceInputUnits: IKeyboardUnit[] =
    [
      {
        content: "7",
        callback: () => {
          if (this.balanceAmount == "0") {
            this.balanceAmount = "7";
          } else {
            this.balanceAmount += "7";
          }
        }
      },
      {
        content: "8",
        callback: () => {
          if (this.balanceAmount == "0") {
            this.balanceAmount = "8";
          } else {
            this.balanceAmount += "8";
          }
        }
      },
      {
        content: "9",
        callback: () => {
          if (this.balanceAmount == "0") {
            this.balanceAmount = "9";
          } else {
            this.balanceAmount += "9";
          }
        }
      },
      {
        content: "×",
        callback: () => {
          this.calculateAction = 3;
          this.balanceTempAmount = this.balanceAmount;
          this.balanceAmount = "0";
        }
      },
      {
        content: "4",
        callback: () => {
          if (this.balanceAmount == "0") {
            this.balanceAmount = "4";
          } else {
            this.balanceAmount += "4";
          }
        }
      },
      {
        content: "5",
        callback: () => {
          if (this.balanceAmount == "0") {
            this.balanceAmount = "5";
          } else {
            this.balanceAmount += "5";
          }
        }
      },
      {
        content: "6",
        callback: () => {
          if (this.balanceAmount == "0") {
            this.balanceAmount = "6";
          } else {
            this.balanceAmount += "6";
          }
        }
      },
      {
        content: "+",
        callback: () => {
          if (this.balanceAmount.endsWith("."))
            this.balanceAmount += "0";
          this.balanceTempAmount = this.balanceAmount;
          this.balanceAmount = "0";
          this.calculateAction = 1;
          this.doneButtonText = "=";
        }
      },
      {
        content: "1",
        callback: () => {
          if (this.balanceAmount == "0") {
            this.balanceAmount = "1";
          } else {
            this.balanceAmount += "1";
          }
        }
      },
      {
        content: "2",
        callback: () => {
          if (this.balanceAmount == "0") {
            this.balanceAmount = "2";
          } else {
            this.balanceAmount += "2";
          }
        }

项目运行后主页面如下

实现部分功能如下

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值