Skip to content

Commit 91d3882

Browse files
authored
Merge pull request #51 from yigger/dev
feat: 添加账单更新事件监听及显示信息优化
2 parents d7143de + 3bc7e71 commit 91d3882

4 files changed

Lines changed: 59 additions & 34 deletions

File tree

src/components/Home/IndexPage/index.tsx

Lines changed: 15 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import React, { useEffect, useState, useContext } from 'react'
2-
import { useDidShow } from '@tarojs/taro'
2+
import Taro from '@tarojs/taro'
33
import { View, Text } from '@tarojs/components'
44
import Statements from '@/components/Statements'
55
import { Button } from '@/src/components/UiComponents'
@@ -8,24 +8,32 @@ import { HomeStoreContext } from "@/src/stores"
88
import { observer } from 'mobx-react'
99
import EmptyTips from '@/components/EmptyTips'
1010
import jz from '@/jz'
11-
import Taro from '@tarojs/taro';
1211

1312
export const IndexPage = observer(() => {
1413
const store: HomeStoreContext = useContext(HomeStoreContext)
15-
const [shouldFetch, setShouldFetch] = useState<boolean>(true)
1614
const [activeRange, setActiveRange] = useState('today')
1715
const ranges = [
1816
{ key: 'today', name: '今日' },
1917
{ key: 'yesterday', name: '昨日' },
2018
{ key: 'week', name: '本周' },
2119
{ key: 'month', name: '本月' }
2220
]
21+
2322
useEffect(() => {
24-
if (shouldFetch) {
25-
store.fetchHomeData()
26-
setShouldFetch(false)
23+
// 监听账单创建事件
24+
jz.event.on('statement:updated', () => {
25+
store.fetchHomeData(activeRange)
26+
})
27+
28+
// 组件卸载时移除监听
29+
return () => {
30+
jz.event.off('statement:updated')
2731
}
28-
}, [shouldFetch])
32+
}, [activeRange])
33+
34+
useEffect(() => {
35+
store.fetchHomeData()
36+
}, [])
2937

3038
useEffect(() => {
3139
if (store.indexHeader.message) {
@@ -44,10 +52,6 @@ export const IndexPage = observer(() => {
4452
}
4553
}, [store.indexHeader])
4654

47-
useDidShow(() => {
48-
setShouldFetch(true);
49-
})
50-
5155
return (
5256
<View className='jz-pages__index'>
5357
<Header header={store.indexHeader}></Header>

src/components/Statement/index.jsx

Lines changed: 20 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,25 @@ const getMoodColor = (mood) => {
3636
}
3737

3838
export default function Statement({ statement, editable = true }) {
39+
const getDisplayInfo = () => {
40+
const infoParts = []
41+
42+
// 添加日期
43+
infoParts.push(isTheYear(statement.date) ? statement.timeStr : statement.date)
44+
45+
// 添加备注
46+
if (statement.remark) {
47+
infoParts.push(statement.remark)
48+
}
49+
50+
// 添加收款人
51+
if (statement.payee) {
52+
infoParts.push(statement.payee.name)
53+
}
54+
55+
return infoParts.filter(Boolean).join(' · ')
56+
}
57+
3958
return (
4059
<View className={`statement-component__item ${statement.type}`}>
4160
<View className='d-flex pb-3 pt-3 flex-between flex-center' onClick={() => { editable && jz.router.navigateTo({ url: `/pages/statement_detail/index?statement_id=${statement.id}` }) }}>
@@ -72,29 +91,16 @@ export default function Statement({ statement, editable = true }) {
7291
</View>
7392

7493
<View className='d-flex flex-center fs-12 col-text-mute'>
75-
<Text>{isTheYear(statement.date) ? statement.timeStr : statement.date}</Text>
76-
{
77-
statement.payee && (
78-
<Text className='fs-12 col-text-mute text-ellipsis'>·{statement.payee.name}</Text>
79-
)
80-
}
94+
<Text>{getDisplayInfo()}</Text>
8195
{statement.has_pic && (
8296
<Text className='fs-18 ml-1 iconfont jcon-pic1 col-text-mute'></Text>
8397
)}
84-
85-
86-
{/* {statement.location && (
87-
<Text className='ml-2'>📍 {statement.location}</Text>
88-
)} */}
8998
</View>
9099
</View>
91100
</View>
92101

93102
<View className='d-flex flex-center-center flex-column'>
94103
<View className={`col-${getColorClass(statement.type)}`}>{statement.money}</View>
95-
{statement.tags && statement.tags.length > 0 && (
96-
<View className='fs-10 col-text-mute mt-1'>{statement.tags.join(' · ')}</View>
97-
)}
98104
</View>
99105
</View>
100106
</View>

src/components/statementForm/baseForm.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -246,6 +246,7 @@ export default function BaseForm({
246246
const { data } = await jz.api.statements.create(form)
247247
Taro.hideLoading()
248248
if(data.status === 200) {
249+
jz.event.emit('statement:updated')
249250
// 上传图片...
250251
for (let file of form.upload_files) {
251252
if (file.file) {

src/pages/statement_detail/index.tsx

Lines changed: 23 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,8 @@ type StatementDetail = {
2828
id: number;
2929
name: string
3030
},
31-
can_edit: boolean
31+
can_edit: boolean,
32+
remark: string;
3233
}
3334

3435
const initialStatement: StatementDetail = {
@@ -262,6 +263,7 @@ const StatementDetail: React.FC = () => {
262263
jz.toastError(res.data.msg)
263264
} else {
264265
await getStatementDetail()
266+
jz.event.emit('statement:updated')
265267
jz.toastSuccess('修改成功')
266268
}
267269
} catch (error) {
@@ -363,6 +365,7 @@ const StatementDetail: React.FC = () => {
363365
{ statement.amount }
364366
</View>
365367
</View>
368+
366369
{statement.target_object && (
367370
<View className='target-object-text'>
368371
<Text className='label'>{getTargetObjectLabel(statement.type)}</Text>
@@ -374,31 +377,42 @@ const StatementDetail: React.FC = () => {
374377
!isEditMode &&
375378
<View
376379
className={`time-text ${isEditMode ? 'clickable' : ''}`}
377-
onClick={isEditMode ? () => handleEdit('time') : undefined}
380+
onClick={isEditMode ? () => handleEdit('date') : undefined}
378381
>
379-
{ statement.time }
382+
{ statement.date } { statement.time }
380383
</View>
381384
}
382385

383386
{
384387
isEditMode &&
385388
<Picker
386389
mode='date'
387-
value={statement.time}
390+
value={statement.date}
388391
onChange={async (e) => {
389-
const time = new Date(statement.time)
390-
const date = new Date(e.detail.value)
391-
updateStatement({ date: format(date, 'yyyy-MM-dd'), time: format(time, 'HH:mm:ss') })
392+
updateStatement({ date: format(new Date(e.detail.value), 'yyyy-MM-dd'), time: new Date(statement.time) })
392393
}}
393394
>
394-
<View className='picker'>{statement.time}</View>
395-
395+
<View className='picker'>{statement.date}</View>
396396
</Picker>
397397
}
398398
</View>
399399

400400
{/* 详情信息列表 */}
401401
<View className='detail-content'>
402+
{
403+
statement.remark && (
404+
<View className='detail-item'>
405+
<View className='item-label'>
406+
<View className='iconfont jcon-user'></View>
407+
<Text>记账用户</Text>
408+
</View>
409+
<View className='item-value'>
410+
{ statement.remark }
411+
</View>
412+
</View>
413+
)
414+
}
415+
402416
<View className='detail-item'>
403417
<View className='item-label'>
404418
<View className='iconfont jcon-category'></View>

0 commit comments

Comments
 (0)