You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

206 lines
7.8 KiB

  1. // material-ui
  2. import {
  3. Button,
  4. CardContent,
  5. Grid, TextField,
  6. Autocomplete,
  7. Typography
  8. } from '@mui/material';
  9. import MainCard from "components/MainCard";
  10. import { useForm } from "react-hook-form";
  11. import * as React from "react";
  12. import * as DateUtils from "utils/DateUtils";
  13. import * as ComboData from "utils/ComboData";
  14. import {PNSPS_BUTTON_THEME} from "../../../themes/buttonConst";
  15. import {ThemeProvider} from "@emotion/react";
  16. import {FormattedMessage} from "react-intl";
  17. // ==============================|| DASHBOARD - DEFAULT ||============================== //
  18. const SearchPublicNoticeForm = ({ applySearch, searchCriteria }) => {
  19. const [minDate, setMinDate] = React.useState(searchCriteria.dateFrom);
  20. const [maxDate, setMaxDate] = React.useState(searchCriteria.dateTo);
  21. const [status, setStatus] = React.useState(ComboData.paymentStatus[0]);
  22. const _sx = {
  23. padding: "4 2 4 2",
  24. boxShadow: 1,
  25. border: 1,
  26. borderColor: '#DDD',
  27. '& .MuiDataGrid-cell': {
  28. borderTop: 1,
  29. borderBottom: 1,
  30. borderColor: "#EEE"
  31. },
  32. '& .MuiDataGrid-footerContainer': {
  33. border: 1,
  34. borderColor: "#EEE"
  35. }
  36. }
  37. const { reset, register, handleSubmit } = useForm()
  38. const onSubmit = (data) => {
  39. const temp = {
  40. code: data.code,
  41. tarnsNo: data.tarnsNo,
  42. dateFrom: data.dateFrom,
  43. dateTo: data.dateTo,
  44. status : (status?.type && status?.type != 'all') ? status?.type : "",
  45. };
  46. applySearch(temp);
  47. };
  48. function resetForm() {
  49. reset();
  50. }
  51. return (
  52. <MainCard xs={12} md={12} lg={12}
  53. border={false}
  54. content={false}
  55. sx={_sx}
  56. >
  57. <form onSubmit={handleSubmit(onSubmit)}>
  58. {/*row 1*/}
  59. <CardContent sx={{ px: 2.5, pt: 3 }}>
  60. <Grid item justifyContent="space-between" alignItems="center" >
  61. <Typography variant="h4">搜尋</Typography>
  62. </Grid>
  63. </CardContent>
  64. {/*row 2*/}
  65. <Grid container alignItems={"center"}>
  66. <Grid item xs={12} s={6} md={5} lg={3} sx={{ ml: 3, mr: 3, mb: 3 }}>
  67. <TextField
  68. fullWidth
  69. {...register("code")}
  70. id='code'
  71. label="申請編號:"
  72. defaultValue={searchCriteria.code}
  73. InputLabelProps={{
  74. shrink: true
  75. }}
  76. />
  77. </Grid>
  78. <Grid item xs={12} s={6} md={5} lg={3} sx={{ ml: 3, mr: 3, mb: 3 }}>
  79. <Grid container>
  80. <Grid item xs={5.25} s={5.25} md={5.25} lg={5.5}>
  81. <TextField
  82. fullWidth
  83. {...register("dateFrom")}
  84. id="dateFrom"
  85. type="date"
  86. label="付款日期(從)"
  87. defaultValue={searchCriteria.dateFrom}
  88. InputProps={{ inputProps: { max: maxDate } }}
  89. onChange={(newValue) => {
  90. setMinDate(DateUtils.dateStr(newValue));
  91. }}
  92. InputLabelProps={{
  93. shrink: true
  94. }}
  95. />
  96. </Grid>
  97. <Grid item xs={1.5} s={1.5} md={1.5} lg={1} sx={{mt:1.3, display: 'flex', justifyContent:"center", alignItems: 'flex-start'}}>
  98. </Grid>
  99. <Grid item xs={5.25} s={5.25} md={5.25} lg={5.5}>
  100. <TextField
  101. fullWidth
  102. InputLabelProps={{
  103. shrink: true
  104. }}
  105. {...register("dateTo")}
  106. InputProps={{ inputProps: { min: minDate } }}
  107. onChange={(newValue) => {
  108. setMaxDate(DateUtils.dateStr(newValue));
  109. }}
  110. id="dateTo"
  111. type="date"
  112. //label="付款日期(到)"
  113. defaultValue={searchCriteria.dateTo}
  114. />
  115. </Grid>
  116. </Grid>
  117. </Grid>
  118. <Grid item xs={12} s={6} md={5} lg={3} sx={{ ml: 3, mr: 3, mb: 3 }}>
  119. <TextField
  120. fullWidth
  121. {...register("tarnsNo")}
  122. id='tarnsNo'
  123. label="付款編號:"
  124. defaultValue={searchCriteria.tarnsNo}
  125. InputLabelProps={{
  126. shrink: true
  127. }}
  128. />
  129. </Grid>
  130. <Grid item xs={12} s={6} md={5} lg={3} sx={{ ml: 3, mr: 3, mb: 3 }}>
  131. <Autocomplete
  132. {...register("status")}
  133. disablePortal={false}
  134. id="status"
  135. size="small"
  136. filterOptions={(options) => options}
  137. options={ComboData.paymentStatus}
  138. value={status}
  139. getOptionLabel={(option) => option.labelCht}
  140. inputValue={status?.labelCht ? status?.labelCht : ""}
  141. onChange={(event, newValue) => {
  142. if (newValue !== null) {
  143. setStatus(newValue);
  144. }
  145. }}
  146. renderInput={(params) => (
  147. <TextField {...params}
  148. label="狀態"
  149. />
  150. )}
  151. InputLabelProps={{
  152. shrink: true
  153. }}
  154. />
  155. </Grid>
  156. </Grid>
  157. {/*last row*/}
  158. <Grid container maxWidth justifyContent="flex-end">
  159. <ThemeProvider theme={PNSPS_BUTTON_THEME}>
  160. <Grid item sx={{mr: 3, mb: 3 }}>
  161. <Button
  162. variant="contained"
  163. onClick={resetForm}
  164. >
  165. <FormattedMessage id="reset"/>
  166. </Button>
  167. </Grid>
  168. <Grid item sx={{ ml: 3, mr: 3, mb: 3 }}>
  169. <Button
  170. variant="contained"
  171. type="submit"
  172. >
  173. <FormattedMessage id="submit"/>
  174. </Button>
  175. </Grid>
  176. </ThemeProvider>
  177. </Grid>
  178. </form>
  179. </MainCard>
  180. );
  181. };
  182. export default SearchPublicNoticeForm;