From 9c7bf8c1cb2dc72765648bef22d0d2e0f12f95b9 Mon Sep 17 00:00:00 2001 From: callmeyan Date: Mon, 29 Jul 2024 01:26:03 +0800 Subject: [PATCH] feat:bill type confirm completed --- src/components/bill/search-form.tsx | 3 + .../bill/components/bill_type_confirm.tsx | 57 +++++++++++++++++++ src/pages/bill/query.tsx | 52 +++++++---------- src/service/api/bill.ts | 6 +- src/types/bill.d.ts | 3 +- vite.config.ts | 3 +- 6 files changed, 90 insertions(+), 34 deletions(-) create mode 100644 src/pages/bill/components/bill_type_confirm.tsx diff --git a/src/components/bill/search-form.tsx b/src/components/bill/search-form.tsx index 498950f..abc5bf3 100644 --- a/src/components/bill/search-form.tsx +++ b/src/components/bill/search-form.tsx @@ -60,6 +60,9 @@ const SearchForm: React.FC = (props) => { const [field, order] = value.sort_by.split(' ') params.sort_field = field params.sort_order = order?.toUpperCase() || 'DESC' + }else{ + params.sort_field = 'id' + params.sort_order = 'DESC' } props.onSearch?.(params); } diff --git a/src/pages/bill/components/bill_type_confirm.tsx b/src/pages/bill/components/bill_type_confirm.tsx new file mode 100644 index 0000000..3cfbc21 --- /dev/null +++ b/src/pages/bill/components/bill_type_confirm.tsx @@ -0,0 +1,57 @@ +import {Button, Select, Popconfirm, Space, Tag} from "@douyinfe/semi-ui"; +import React, {useState} from "react"; +import {useSetState} from "ahooks"; +import MoneyFormat from "@/components/money-format.tsx"; +import {confirmBillType} from "@/service/api/bill.ts"; +import {useTranslation} from "react-i18next"; +import {BillTypes} from "@/service/bill-types.ts"; + +type BillTypeConfirmProps = { + data: BillDetail +} + +export const BillTypeConfirm: React.FC = (props) => { + const [it,setItem] = useState(props.data) + const {t} = useTranslation() + const [state,setState] = useSetState({ + loading:false, + bill_type: props.data.bill_type + }) + const onConfirmBill = () => { + setState({loading:true}) + confirmBillType({id:it.id,type:state.bill_type}).then(() => { + setState({loading:false}) + setItem({...it,confirm_status:'CONFIRMED'}) + }).catch(() => { + setState({loading:false}) + }) + } + return
+
+
{it.bill_type}
+
+ +
+
+
+ + {it.confirm_status != 'CONFIRMED' && } + { + it.confirm_status == 'CONFIRMED' ? {state.bill_type} : <> + onConfirmBill()} + position={'topRight'} + content={`${t('bill.confirm_bill_type')}?`} + > + + } + +
+
+} \ No newline at end of file diff --git a/src/pages/bill/query.tsx b/src/pages/bill/query.tsx index c05e172..304370c 100644 --- a/src/pages/bill/query.tsx +++ b/src/pages/bill/query.tsx @@ -1,4 +1,4 @@ -import {Button, Modal, Notification, Popconfirm, Space, Tag, Toast} from "@douyinfe/semi-ui"; +import {Button, Divider, Modal, Notification, Popconfirm, Toast} from "@douyinfe/semi-ui"; import {useState} from "react"; import {useRequest, useSetState} from "ahooks"; import {useTranslation} from "react-i18next"; @@ -10,8 +10,8 @@ import {billList, BillQueryParams, modifyBillStatus} from "@/service/api/bill.ts import {BillStatus, BizError} from "@/service/types.ts"; import {useDownloadReceiptPDF} from "@/service/generate-pdf.ts"; import {BillDetailItems} from "@/components/bill"; -import MoneyFormat from "@/components/money-format.tsx"; import {BillPaidModal} from "@/pages/bill/components/bill_paid_modal.tsx"; +import {BillTypeConfirm} from "@/pages/bill/components/bill_type_confirm.tsx"; const DownloadButton = ({bill, text}: { bill: BillModel; text: string }) => { @@ -27,12 +27,14 @@ const DownloadButton = ({bill, text}: { bill: BillModel; text: string }) => { const BillQuery = () => { const [state, setState] = useSetState<{ updateBill?: BillModel - updateLoading?: boolean confirmBill?: BillModel - }>({}) + updateLoading?: boolean + confirmBillId: number + }>({confirmBillId: 0}) const [showBill, setShowBill] = useState() const [queryParams, setBillQueryParams] = useState({ - sort_field: 'id', sort_order: 'DESC' + sort_field: 'id', + sort_order: 'DESC' }); const {data, loading, refresh} = useRequest(() => billList(queryParams), { refreshDeps: [queryParams], @@ -42,7 +44,7 @@ const BillQuery = () => { }) const {t} = useTranslation() - const onConfirmCancel = (bill: BillModel) => { + const onCancelBill = (bill: BillModel) => { modifyBillStatus(bill.id, 'CANCELLED').then(() => { Notification.success({title: 'Notice', content: t('bill.cancel_success')}) refresh() @@ -55,7 +57,6 @@ const BillQuery = () => { } const operation = (bill: BillModel) => { - return (
{bill.status != BillStatus.PAID && @@ -77,9 +76,10 @@ const BillQuery = () => { { bill.status == BillStatus.PAID && <> - + {bill.confirm_status == 'UNCONFIRMED' && } }
) @@ -109,10 +109,10 @@ const BillQuery = () => { setState({updateBill:undefined})} + onCancel={() => setState({updateBill: undefined})} bill={state.updateBill!} - onConfirm={()=>{ - setState({updateBill:undefined}) + onConfirm={() => { + setState({updateBill: undefined}) refresh() }} /> @@ -121,28 +121,20 @@ const BillQuery = () => { visible={!!state.confirmBill} closeOnEsc={true} onCancel={() => { + refresh() setState({confirmBill: undefined}) }} + width={500} footer={null} > {state.confirmBill && <>
{ - state.confirmBill.details.map((it, idx) => ( -
- - {it.id}. - {it.bill_type} -
- -
-
-
- {it.confirm_status == 'CONFIRMED' ? CONFIRMED : - } -
-
)) + state.confirmBill.details.map((it, idx) => (
+ + +
)) }
} diff --git a/src/service/api/bill.ts b/src/service/api/bill.ts index e14d63c..8ceff2f 100644 --- a/src/service/api/bill.ts +++ b/src/service/api/bill.ts @@ -52,6 +52,10 @@ export function modifyBillStatus(id: number,status: BillStatus) { return put(`/bills/${id}/cancel`,{status}) } +export function confirmBillType({id,type}: {id:number,type: string}) { + return post(`/bill/detail/${id}/confirm`, {type}) +} + export function confirmBills(bill_ids: number[]) { return post(`/bills/apply`, {bill_ids}) } @@ -69,7 +73,7 @@ type BillUpdateFormParams = { bill:BillModel; param:BillUpdateParams } -export async function finishAsiapay({bill,param}: BillUpdateFormParams){ +export async function finishAsiapay({param}: BillUpdateFormParams){ const paramUrl = `?prc=0&src=0&Ord=12345678&Ref=${param.merchant_ref}&PayRef=123456&successcode=0&Amt=10.00&Cur=344&Holder=Test Card&AuthId=123456&AlertCode=&remark= &eci=07&payerAuth=U&sourceIp=192.1.1.1&ipCountry=HK&payMethod=VISA x&cardIssuingCountry=HK&channelType=SPC&` diff --git a/src/types/bill.d.ts b/src/types/bill.d.ts index 61e22ee..1a0d58d 100644 --- a/src/types/bill.d.ts +++ b/src/types/bill.d.ts @@ -11,8 +11,7 @@ declare type ManualCreateBillParam = { student_number:string; } declare type BillDetail = { - id: string | number; - bill_id: string | number; + id: number; bill_type: string; confirm_status: ConfirmStatus; amount: decimal; diff --git a/vite.config.ts b/vite.config.ts index 2f427ce..83e68da 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -28,7 +28,8 @@ export default defineConfig(({mode}) => { port:10086, proxy: { '/api': { - target: 'https://test-payment-be.hkchc.team', // + // target: 'https://test-payment-be.hkchc.team', // + target: 'http://127.0.0.1:50000', // changeOrigin: true, //rewrite: (path) => path.replace(/^\/api/, '') }