From f4ffe7748627d11e387d01954b391c52449de94f Mon Sep 17 00:00:00 2001 From: callmeyan Date: Sat, 10 Aug 2024 18:03:16 +0800 Subject: [PATCH] :rocket: feat: update confirm bill type batch --- src/components/bill/list.tsx | 9 ++++ src/i18n/translations/en.json | 1 + src/i18n/translations/sc.json | 1 + src/i18n/translations/tc.json | 1 + .../bill/components/bill_type_confirm.tsx | 7 ++- .../components/bill_type_confirm_batch.tsx | 52 +++++++++++++++++++ src/pages/bill/query.tsx | 21 +++----- 7 files changed, 75 insertions(+), 17 deletions(-) create mode 100644 src/pages/bill/components/bill_type_confirm_batch.tsx diff --git a/src/components/bill/list.tsx b/src/components/bill/list.tsx index 9c7cd70..363f692 100644 --- a/src/components/bill/list.tsx +++ b/src/components/bill/list.tsx @@ -17,6 +17,7 @@ type BillListProps = { operationRender?: (record: BillModel) => React.ReactNode; operationRenderWidth?: number; onRowSelection?: (selectedRowKeys: (string | number)[]) => void; + rowSelectionDisabled?: (record: BillModel) => boolean; source?: RecordList; onPageChange: (pageIndex: number) => void; tableFooter?: React.ReactNode; @@ -368,6 +369,14 @@ export const BillList: React.FC = (props) => { fixed: true, onChange: (selectedRowKeys) => { selectedRowKeys && props.onRowSelection?.(selectedRowKeys) + }, + getCheckboxProps: (record) => { + if(props.rowSelectionDisabled){ + return { + disabled: props.rowSelectionDisabled?.(record) + } + } + return {} } } : undefined} /> diff --git a/src/i18n/translations/en.json b/src/i18n/translations/en.json index 471c8c2..7704e4e 100644 --- a/src/i18n/translations/en.json +++ b/src/i18n/translations/en.json @@ -6,6 +6,7 @@ "cancel": "Cancel", "close": "Close", "confirm": "Confirm", + "confirm_next_operation": "Please confirm this operation", "confirm_paid": "Confirm paid", "operate_fail": "Operation failed", "operate_success": "Operation success", diff --git a/src/i18n/translations/sc.json b/src/i18n/translations/sc.json index ef2eb86..e13290a 100644 --- a/src/i18n/translations/sc.json +++ b/src/i18n/translations/sc.json @@ -6,6 +6,7 @@ "cancel": "取消", "close": "关闭", "confirm": "确定", + "confirm_next_operation": "请确认是否进行此操作", "confirm_paid": "确认已支付", "operate_fail": "操作失败", "operate_success": "操作成功", diff --git a/src/i18n/translations/tc.json b/src/i18n/translations/tc.json index 6647aa9..05e492b 100644 --- a/src/i18n/translations/tc.json +++ b/src/i18n/translations/tc.json @@ -6,6 +6,7 @@ "cancel": "取消", "close": "關閉", "confirm": "確定", + "confirm_next_operation": "請確認是否進行此操作", "confirm_paid": "確認已支付", "operate_fail": "操作失敗", "operate_success": "操作成功", diff --git a/src/pages/bill/components/bill_type_confirm.tsx b/src/pages/bill/components/bill_type_confirm.tsx index 7d81fd9..cf69182 100644 --- a/src/pages/bill/components/bill_type_confirm.tsx +++ b/src/pages/bill/components/bill_type_confirm.tsx @@ -1,5 +1,5 @@ import {Button, Select, Space, Divider, InputNumber, Modal,} from "@douyinfe/semi-ui"; -import React from "react"; +import React, {useEffect} from "react"; import {useSetState} from "ahooks"; import MoneyFormat from "@/components/money-format.tsx"; import {useTranslation} from "react-i18next"; @@ -21,7 +21,7 @@ export const BillTypeConfirm: React.FC = (props) => { const confirmed: ConfirmedBillDetail[] = props.bill.details.map(it=>({ bill_type: it.bill_type, bill_detail_id: it.id, - amount: it.amount + amount: Number(it.amount) })) const [state, setState] = useSetState({ confirm_application_number: '', confirmed @@ -49,6 +49,9 @@ export const BillTypeConfirm: React.FC = (props) => { setState({confirmed}) props.onChange?.(confirmed) } + useEffect(()=>{ + props.onChange?.(confirmed) + },[]) diff --git a/src/pages/bill/components/bill_type_confirm_batch.tsx b/src/pages/bill/components/bill_type_confirm_batch.tsx new file mode 100644 index 0000000..91e5886 --- /dev/null +++ b/src/pages/bill/components/bill_type_confirm_batch.tsx @@ -0,0 +1,52 @@ +import React from "react"; +import {Button, Popconfirm} from "@douyinfe/semi-ui"; +import {useTranslation} from "react-i18next"; +import {confirmBillType} from "@/service/api/bill.ts"; +import {useSetState} from "ahooks"; + +type BillTypeConfirmBatchProps = { + selectKeys: number[]; + data?: RecordList; + onConfirm: () => void; +} +export const BillTypeConfirmBatch: React.FC = (props) => { + const {t} = useTranslation() + const [state, setState] = useSetState({loading: false}) + const confirm = (confirmedBills: BillConfirmParams[]) => { + confirmBillType(confirmedBills).then(() => { + props.onConfirm() + }).finally(() => { + setState({loading: false}) + }) + } + const confirmBillTypeBatch = () => { + const bills: BillConfirmParams[] = []; + props.data?.list.filter(item => props.selectKeys.includes(item.id)).forEach(item => { + bills.push({ + id: item.id, + confirm_application_number: String(item.application_number), + confirm_student_number: item.student_number, + detail_confirms: item.details.map(d => { + return { + bill_type: d.bill_type, + bill_detail_id: d.id, + amount: d.amount + } + }) + }) + }) + if (bills.length == 0) return; + confirm(bills) + } + return (<> + {props.selectKeys.length == 0 || !props.data || props.data.list.length == 0 ? + : + confirmBillTypeBatch()} + > + + } + ) +} \ No newline at end of file diff --git a/src/pages/bill/query.tsx b/src/pages/bill/query.tsx index c18df83..3b5a9de 100644 --- a/src/pages/bill/query.tsx +++ b/src/pages/bill/query.tsx @@ -13,6 +13,7 @@ import {BillPaidModal} from "@/pages/bill/components/bill_paid_modal.tsx"; import {BillTypeConfirmModal} from "@/pages/bill/components/bill_type_confirm.tsx"; import {saveAs} from "file-saver"; import {AddBillModal} from "@/pages/bill/components/add_bill_modal.tsx"; +import {BillTypeConfirmBatch} from "@/pages/bill/components/bill_type_confirm_batch.tsx"; const DownloadButton = ({bill, text}: { bill: BillModel; text: string }) => { @@ -108,10 +109,8 @@ const BillQuery = () => { const onImportExcel = () => { Toast.warning({content: 'Not implemented'}) } - const [selectKeys, setSelectedKeys] = useState<(string | number)[]>([]) - const confirmBillTypeBatch = () => { - console.log(selectKeys) - } + const [selectKeys, setSelectedKeys] = useState([]) + const onBillConfirm = (reload?: boolean) => { setState({confirmBill: undefined}) @@ -124,16 +123,7 @@ const BillQuery = () => { type={'query'} loading={loading} source={data} operationRender={operation} operationRenderWidth={180} beforeTotalAmount={ - { - (selectKeys.length == 0) ? : - confirmBillTypeBatch()} - > - - - } + @@ -141,7 +131,8 @@ const BillQuery = () => { } - onRowSelection={setSelectedKeys} + onRowSelection={(keys)=>setSelectedKeys(keys as number[])} + rowSelectionDisabled={(r)=>(r.status != BillStatus.PAID || r.confirm_status == 'CONFIRMED')} onPageChange={(page_number) => { setBillQueryParams({ ...queryParams,