feat🔫: 搭建框架,完成bill图表展示
This commit is contained in:
parent
b478387979
commit
3c65054da3
8
src/model/index.ts
Normal file
8
src/model/index.ts
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
export interface IBill {
|
||||||
|
_id?: string,
|
||||||
|
date: string,
|
||||||
|
money: number,
|
||||||
|
cls: string,
|
||||||
|
label: string,
|
||||||
|
options?: string
|
||||||
|
}
|
12
src/pages/Home/Home.module.scss
Normal file
12
src/pages/Home/Home.module.scss
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
.home {
|
||||||
|
height: 100%;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
.total {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: row;
|
||||||
|
justify-content: flex-start;
|
||||||
|
gap: 10px;
|
||||||
|
align-items: flex-start;
|
||||||
|
}
|
||||||
|
}
|
63
src/pages/Home/Home.tsx
Normal file
63
src/pages/Home/Home.tsx
Normal file
|
@ -0,0 +1,63 @@
|
||||||
|
import styles from "./Home.module.scss"
|
||||||
|
import * as R from 'ramda'
|
||||||
|
import { IBill } from "../../model"
|
||||||
|
import Bar from "../../components/charts/bar"
|
||||||
|
import { useContext, useEffect, useState } from "react";
|
||||||
|
import { BillContext } from "../../store";
|
||||||
|
import { observer } from "mobx-react-lite";
|
||||||
|
import Pie from "../../components/charts/pie";
|
||||||
|
import { Card, ConfigProvider, DatePicker } from "antd";
|
||||||
|
import moment from 'moment';
|
||||||
|
import 'moment/locale/zh-cn';
|
||||||
|
import locale from 'antd/es/locale/zh_CN';
|
||||||
|
|
||||||
|
const Home = () => {
|
||||||
|
const billStore = useContext(BillContext)
|
||||||
|
|
||||||
|
const transformer = (record: Record<string, IBill[]>) => {
|
||||||
|
return R.map((key: string) => {
|
||||||
|
const moneys = record[key].map(bill => bill.money)
|
||||||
|
return {
|
||||||
|
x: key,
|
||||||
|
y: Number(R.sum(moneys).toFixed(2)),
|
||||||
|
}
|
||||||
|
})(R.keys(record))
|
||||||
|
}
|
||||||
|
|
||||||
|
const now = new Date();
|
||||||
|
const [year, setYear] = useState(now.getFullYear())
|
||||||
|
const [month, setMonth] = useState(now.getMonth() + 1)
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
billStore.fetch(year, month)
|
||||||
|
}, [year, month])
|
||||||
|
|
||||||
|
const changeDate = (date: moment.Moment | null, datestring: string) => {
|
||||||
|
const d = date?.toDate() ?? new Date()
|
||||||
|
setYear(d.getFullYear())
|
||||||
|
setMonth(d.getMonth() + 1)
|
||||||
|
}
|
||||||
|
|
||||||
|
const TotalMoney = () => <Card>
|
||||||
|
{"总金额"}
|
||||||
|
¥{billStore.totalMoney}
|
||||||
|
</Card>
|
||||||
|
|
||||||
|
return (
|
||||||
|
<div className={styles.home}>
|
||||||
|
<div className={styles.total}>
|
||||||
|
<DatePicker
|
||||||
|
picker="month"
|
||||||
|
value={moment(`${year}-${month}`, 'YYYY-MM')}
|
||||||
|
onChange={changeDate}
|
||||||
|
/>
|
||||||
|
<TotalMoney />
|
||||||
|
</div>
|
||||||
|
<Bar data={transformer(billStore.listAllByDate)} />
|
||||||
|
<Pie data={transformer(billStore.listAllByClass)} />
|
||||||
|
</div >
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
export default observer(Home)
|
0
src/pages/Record/Record.module.scss
Normal file
0
src/pages/Record/Record.module.scss
Normal file
9
src/pages/Record/Record.tsx
Normal file
9
src/pages/Record/Record.tsx
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
import styles from "./Record.module.scss"
|
||||||
|
|
||||||
|
|
||||||
|
export default function Record() {
|
||||||
|
|
||||||
|
return (
|
||||||
|
<></>
|
||||||
|
)
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user