| @@ -12,7 +12,8 @@ import { getSearchCriteria, checkSearchCriteriaPath } from "auth/utils"; | |||||
| export function FiDataGrid({ rows, columns, sx, autoHeight, | export function FiDataGrid({ rows, columns, sx, autoHeight, | ||||
| hideFooterSelectedRowCount, rowModesModel, editMode, | hideFooterSelectedRowCount, rowModesModel, editMode, | ||||
| pageSizeOptions, filterItems, customPageSize, doLoad, applyGridOnReady, applySearch, tab, ...props }) { | |||||
| pageSizeOptions, filterItems, customPageSize, doLoad, applyGridOnReady, applySearch, | |||||
| tab, ...props }) { | |||||
| const intl = useIntl(); | const intl = useIntl(); | ||||
| const [_rows, set_rows] = useState([]); | const [_rows, set_rows] = useState([]); | ||||
| const [_doLoad, set_doLoad] = useState({}); | const [_doLoad, set_doLoad] = useState({}); | ||||
| @@ -1,14 +1,17 @@ | |||||
| // material-ui | // material-ui | ||||
| import * as React from 'react'; | import * as React from 'react'; | ||||
| import * as DateUtils from "utils/DateUtils"; | import * as DateUtils from "utils/DateUtils"; | ||||
| import {PAYMENT_LIST} from "utils/ApiPathConst"; | |||||
| import {PAYMENT_LIST, PAYMENT_BIB} from "utils/ApiPathConst"; | |||||
| import * as HttpUtils from "utils/HttpUtils"; | |||||
| import * as FormatUtils from "utils/FormatUtils" | import * as FormatUtils from "utils/FormatUtils" | ||||
| import * as PaymentStatus from "utils/statusUtils/PaymentStatus" | import * as PaymentStatus from "utils/statusUtils/PaymentStatus" | ||||
| import { useNavigate } from "react-router-dom"; | import { useNavigate } from "react-router-dom"; | ||||
| import { FiDataGrid } from "components/FiDataGrid"; | import { FiDataGrid } from "components/FiDataGrid"; | ||||
| import { clickableLink } from 'utils/CommonFunction'; | import { clickableLink } from 'utils/CommonFunction'; | ||||
| import { | import { | ||||
| Checkbox | |||||
| Checkbox, | |||||
| Dialog, DialogTitle, DialogContent, DialogActions, | |||||
| Button,Typography | |||||
| // MenuItem | // MenuItem | ||||
| } from '@mui/material'; | } from '@mui/material'; | ||||
| // ==============================|| EVENT TABLE ||============================== // | // ==============================|| EVENT TABLE ||============================== // | ||||
| @@ -16,6 +19,14 @@ import { | |||||
| export default function SearchPaymentTable({ searchCriteria, applyGridOnReady, applySearch}) { | export default function SearchPaymentTable({ searchCriteria, applyGridOnReady, applySearch}) { | ||||
| const [_searchCriteria, set_searchCriteria] = React.useState(searchCriteria); | const [_searchCriteria, set_searchCriteria] = React.useState(searchCriteria); | ||||
| const navigate = useNavigate() | const navigate = useNavigate() | ||||
| const [isPopUp, setIsPopUp] = React.useState(false); | |||||
| const [bibId, setBibId] = React.useState(); | |||||
| const [bib, setBib] = React.useState(); | |||||
| const [refreshTrigger, setRefreshTrigger] = React.useState(0); | |||||
| const forceRefresh = () => { | |||||
| setRefreshTrigger(prev => prev + 1); | |||||
| }; | |||||
| const _sx = { | const _sx = { | ||||
| padding: "4 2 4 2", | padding: "4 2 4 2", | ||||
| @@ -41,6 +52,23 @@ export default function SearchPaymentTable({ searchCriteria, applyGridOnReady, a | |||||
| navigate('/paymentPage/details/' + params.row.id); | navigate('/paymentPage/details/' + params.row.id); | ||||
| }; | }; | ||||
| const doBIB = () => { | |||||
| setIsPopUp(false); | |||||
| console.log(refreshTrigger) | |||||
| HttpUtils.post({ | |||||
| url: PAYMENT_BIB + "/" + bibId, | |||||
| onSuccess: function () { | |||||
| forceRefresh() | |||||
| } | |||||
| }); | |||||
| } | |||||
| const popUPBib = (id, bibFlag) => { | |||||
| setBibId(id) | |||||
| setBib(bibFlag) | |||||
| setIsPopUp(true); | |||||
| } | |||||
| const columns = [ | const columns = [ | ||||
| { | { | ||||
| id: 'appNos', | id: 'appNos', | ||||
| @@ -88,7 +116,7 @@ export default function SearchPaymentTable({ searchCriteria, applyGridOnReady, a | |||||
| headerName: 'BIB', | headerName: 'BIB', | ||||
| width: 150, | width: 150, | ||||
| renderCell: (params) => { | renderCell: (params) => { | ||||
| return <Checkbox checked={params.row.bib} onChange={() => {set_paymentMethod("demandNote")}}/>; | |||||
| return <Checkbox checked={params.row.bib} onChange={() => {popUPBib(params.row.id, params.row.bib)}}/>; | |||||
| } | } | ||||
| }, | }, | ||||
| { | { | ||||
| @@ -127,8 +155,30 @@ export default function SearchPaymentTable({ searchCriteria, applyGridOnReady, a | |||||
| doLoad={React.useMemo(() => ({ | doLoad={React.useMemo(() => ({ | ||||
| url: PAYMENT_LIST, | url: PAYMENT_LIST, | ||||
| params: _searchCriteria, | params: _searchCriteria, | ||||
| }), [_searchCriteria])} | |||||
| }), [_searchCriteria, refreshTrigger])} | |||||
| /> | /> | ||||
| <div> | |||||
| <Dialog | |||||
| open={isPopUp} | |||||
| onClose={() => setIsPopUp(false)} | |||||
| PaperProps={{ | |||||
| sx: { | |||||
| minWidth: '40vw', | |||||
| maxWidth: { xs: '90vw', s: '90vw', m: '70vw', lg: '70vw' }, | |||||
| maxHeight: { xs: '90vh', s: '70vh', m: '70vh', lg: '60vh' } | |||||
| } | |||||
| }} | |||||
| > | |||||
| <DialogTitle>Bank-in-bank</DialogTitle> | |||||
| <DialogContent style={{ display: 'flex', }}> | |||||
| <Typography variant="h5" style={{ padding: '16px' }}>{bib?"Cancel Bank-in-bank?":"Is Bank-in-bank?"}</Typography> | |||||
| </DialogContent> | |||||
| <DialogActions> | |||||
| <Button onClick={() => setIsPopUp(false)}><Typography variant="h5">Cancel</Typography></Button> | |||||
| <Button onClick={() => doBIB()}><Typography variant="h5">Confirm</Typography></Button> | |||||
| </DialogActions> | |||||
| </Dialog> | |||||
| </div> | |||||
| </div> | </div> | ||||
| ); | ); | ||||
| } | } | ||||
| @@ -24,6 +24,7 @@ const SearchPublicNoticeForm = ({ applySearch, searchCriteria, onGridReady }) => | |||||
| const [minDate, setMinDate] = React.useState(searchCriteria.dateFrom); | const [minDate, setMinDate] = React.useState(searchCriteria.dateFrom); | ||||
| const [maxDate, setMaxDate] = React.useState(searchCriteria.dateTo); | const [maxDate, setMaxDate] = React.useState(searchCriteria.dateTo); | ||||
| const [status, setStatus] = React.useState(ComboData.paymentStatus[0]); | const [status, setStatus] = React.useState(ComboData.paymentStatus[0]); | ||||
| const [payMethod, setPayMethod] = React.useState(ComboData.payMethod[0]); | |||||
| const { reset, register, handleSubmit } = useForm() | const { reset, register, handleSubmit } = useForm() | ||||
| const marginBottom = 2.5; | const marginBottom = 2.5; | ||||
| @@ -66,6 +67,7 @@ const SearchPublicNoticeForm = ({ applySearch, searchCriteria, onGridReady }) => | |||||
| dateFrom: sentDateFrom, | dateFrom: sentDateFrom, | ||||
| dateTo: sentDateTo, | dateTo: sentDateTo, | ||||
| status : (status?.type && status?.type != 'all') ? status?.type : "", | status : (status?.type && status?.type != 'all') ? status?.type : "", | ||||
| payMethod : (payMethod?.type && payMethod?.type != 'all') ? payMethod?.type : "", | |||||
| }; | }; | ||||
| applySearch(temp); | applySearch(temp); | ||||
| }; | }; | ||||
| @@ -209,6 +211,35 @@ const SearchPublicNoticeForm = ({ applySearch, searchCriteria, onGridReady }) => | |||||
| }} | }} | ||||
| /> | /> | ||||
| </Grid> | </Grid> | ||||
| <Grid item xs={9} s={6} md={5} lg={3} sx={{ ml: 3, mr: 3, mb: marginBottom }}> | |||||
| <Autocomplete | |||||
| {...register("payMethod")} | |||||
| disablePortal={false} | |||||
| size="small" | |||||
| id="payMethod" | |||||
| filterOptions={(options) => options} | |||||
| options={ComboData.payMethod} | |||||
| value={payMethod} | |||||
| getOptionLabel={(option) => option.label} | |||||
| inputValue={payMethod?.label ? payMethod?.label : ""} | |||||
| onChange={(event, newValue) => { | |||||
| if(newValue==null){ | |||||
| setPayMethod(ComboData.payMethod[0]); | |||||
| }else{ | |||||
| setPayMethod(newValue); | |||||
| } | |||||
| }} | |||||
| renderInput={(params) => ( | |||||
| <TextField {...params} | |||||
| label="Payment Means" | |||||
| /> | |||||
| )} | |||||
| InputLabelProps={{ | |||||
| shrink: true | |||||
| }} | |||||
| /> | |||||
| </Grid> | |||||
| </Grid> | </Grid> | ||||
| </Grid> | </Grid> | ||||
| @@ -173,6 +173,7 @@ export const PAYMENT_LIST = apiPath+'/payment/list';//GET | |||||
| export const PAYMENT_LOAD = apiPath+'/payment/load';//GET | export const PAYMENT_LOAD = apiPath+'/payment/load';//GET | ||||
| export const PAYMENT_APP_LIST = apiPath+'/payment/applist';//POST | export const PAYMENT_APP_LIST = apiPath+'/payment/applist';//POST | ||||
| export const PAYMENT_CHECK = apiPath+'/payment/check-payment';//GET | export const PAYMENT_CHECK = apiPath+'/payment/check-payment';//GET | ||||
| export const PAYMENT_BIB = apiPath+'/payment/set-bib';//POST | |||||
| export const PAYMENT_LIMIT_SETTING_LIST = apiPath+'/settings/payment';//GET | export const PAYMENT_LIMIT_SETTING_LIST = apiPath+'/settings/payment';//GET | ||||
| // export const PAYMENT_AVAILABLE_PAYMENT = paymentPath+'/api/payment/availability';//POST | // export const PAYMENT_AVAILABLE_PAYMENT = paymentPath+'/api/payment/availability';//POST | ||||
| @@ -136,6 +136,15 @@ export const paymentStatus = [ | |||||
| { key: 4, i18nLabel: 'inProgress', labelCht: '進行中', label:'In Progress', type: 'INPR' }, | { key: 4, i18nLabel: 'inProgress', labelCht: '進行中', label:'In Progress', type: 'INPR' }, | ||||
| ]; | ]; | ||||
| export const payMethod = [ | |||||
| { key: 0, labelCht: '全部', label: 'All', type: 'all' }, | |||||
| { key: 1, labelCht: '繳費靈', label: 'PPS', type: '01,PPSB,PPS' }, | |||||
| { key: 2, labelCht: '信用卡', label:'Credit Card', type: '02,BCMP,CreditCard' }, | |||||
| { key: 3, labelCht: '銀聯', label:'UnionPay', type: '03,BCMP,CreditCard' }, | |||||
| { key: 4, labelCht: '轉數快', label:'FPS', type: '04,BCFP,FPS' }, | |||||
| ]; | |||||
| export const denmandNoteStatus = [ | export const denmandNoteStatus = [ | ||||
| { key: 0, labelCht: '全部', label: 'All', type: 'all' }, | { key: 0, labelCht: '全部', label: 'All', type: 'all' }, | ||||