| @@ -40,14 +40,10 @@ const PublicNoticeApplyForm = () => { | |||
| }), | |||
| onSubmit:values=>{ | |||
| console.log(values); | |||
| HttpUtils.post({ | |||
| url: UrlUtils.POST_PUBLIC_NOTICE_SAVE, | |||
| HttpUtils.postWithFiles({ | |||
| url: UrlUtils.POST_PUBLIC_NOTICE_APPLY, | |||
| params: { | |||
| id: 0, | |||
| group: values.chName, | |||
| groupTitle: values.groupTitle, | |||
| groupNo: values.groupNo, | |||
| issueId: values.issueId, | |||
| contactPerson: values.contactPerson, | |||
| contactTelNo: { | |||
| countryCode: values.tel_countryCode, | |||
| @@ -58,8 +54,8 @@ const PublicNoticeApplyForm = () => { | |||
| faxNumber: values.faxNumber | |||
| }, | |||
| remarks:values.remarks, | |||
| file: attachment | |||
| }, | |||
| files: [attachment], | |||
| onSuccess: function(){ | |||
| loadDataFun(); | |||
| } | |||
| @@ -137,6 +133,23 @@ const PublicNoticeApplyForm = () => { | |||
| form: formik | |||
| })} | |||
| <Grid item lg={4}></Grid> | |||
| <Grid item lg={4}></Grid> | |||
| {FieldUtils.getPhoneField({ | |||
| label:"Issue:", | |||
| valueName:{ | |||
| code: "issueId", | |||
| num:"issueId" | |||
| }, | |||
| form: formik | |||
| })} | |||
| <Grid item lg={4}></Grid> | |||
| <Grid item lg={4}></Grid> | |||
| {FieldUtils.getTextArea({ | |||
| label:"備註:", | |||
| valueName:"remarks", | |||
| form: formik | |||
| })} | |||
| <Grid item lg={4}></Grid> | |||
| <Grid item lg={12}> | |||
| <center> | |||
| <input | |||
| @@ -2,9 +2,10 @@ | |||
| import * as React from 'react'; | |||
| import { | |||
| DataGrid, | |||
| GridActionsCellItem, | |||
| } from "@mui/x-data-grid"; | |||
| import * as Icon from '../../../utils/IconUtils'; | |||
| import { | |||
| Button | |||
| } from '@mui/material'; | |||
| import * as DateUtils from "../../../utils/DateUtils" | |||
| // ==============================|| EVENT TABLE ||============================== // | |||
| @@ -51,16 +52,8 @@ export default function SubmittedTab({rows}) { | |||
| headerName: '', | |||
| width: 50, | |||
| cellClassName: 'actions', | |||
| getActions: (params) => { | |||
| return [ | |||
| <GridActionsCellItem | |||
| key="OutSave" | |||
| icon={<Icon.Download/>} | |||
| label="查看詳細" | |||
| className="textPrimary" | |||
| onClick={onDownloadClick(params.id, params.row.skey, params.row.filename)} | |||
| color="primary" | |||
| />] | |||
| renderCell: () => { | |||
| return <Button onClick={()=>{}}>查看詳細</Button>; | |||
| }, | |||
| } | |||
| ]; | |||
| @@ -2,12 +2,10 @@ | |||
| import * as React from 'react'; | |||
| import { | |||
| DataGrid, | |||
| GridActionsCellItem, | |||
| } from "@mui/x-data-grid"; | |||
| import { | |||
| Button | |||
| } from '@mui/material'; | |||
| import * as Icon from 'utils/IconUtils'; | |||
| import * as DateUtils from "utils/DateUtils" | |||
| // ==============================|| EVENT TABLE ||============================== // | |||
| @@ -54,16 +52,8 @@ export default function SubmittedTab({rows}) { | |||
| headerName: '', | |||
| width: 50, | |||
| cellClassName: 'actions', | |||
| getActions: (params) => { | |||
| return [ | |||
| <GridActionsCellItem | |||
| key="OutSave" | |||
| icon={<Icon.Download/>} | |||
| label="查看詳細" | |||
| className="textPrimary" | |||
| onClick={onDownloadClick(params.id, params.row.skey, params.row.filename)} | |||
| color="primary" | |||
| />] | |||
| renderCell: () => { | |||
| return <Button onClick={()=>{}}>查看詳細</Button>; | |||
| }, | |||
| } | |||
| ]; | |||
| @@ -2,9 +2,10 @@ | |||
| import * as React from 'react'; | |||
| import { | |||
| DataGrid, | |||
| GridActionsCellItem, | |||
| } from "@mui/x-data-grid"; | |||
| import * as Icon from 'utils/IconUtils'; | |||
| import { | |||
| Button | |||
| } from '@mui/material'; | |||
| import * as DateUtils from "utils/DateUtils" | |||
| // ==============================|| EVENT TABLE ||============================== // | |||
| @@ -51,16 +52,8 @@ export default function SubmittedTab({rows}) { | |||
| headerName: '', | |||
| width: 50, | |||
| cellClassName: 'actions', | |||
| getActions: (params) => { | |||
| return [ | |||
| <GridActionsCellItem | |||
| key="OutSave" | |||
| icon={<Icon.Download/>} | |||
| label="查看詳細" | |||
| className="textPrimary" | |||
| onClick={onDownloadClick(params.id, params.row.skey, params.row.filename)} | |||
| color="primary" | |||
| />] | |||
| renderCell: () => { | |||
| return <Button onClick={()=>{}}>查看詳細</Button>; | |||
| }, | |||
| } | |||
| ]; | |||
| @@ -2,10 +2,11 @@ | |||
| import * as React from 'react'; | |||
| import { | |||
| DataGrid, | |||
| GridActionsCellItem, | |||
| } from "@mui/x-data-grid"; | |||
| import * as Icon from '../../../utils/IconUtils'; | |||
| import * as DateUtils from "../../../utils/DateUtils" | |||
| import { | |||
| Button | |||
| } from '@mui/material'; | |||
| import * as DateUtils from "utils/DateUtils" | |||
| // ==============================|| EVENT TABLE ||============================== // | |||
| export default function SubmittedTab({rows}) { | |||
| @@ -24,7 +25,7 @@ export default function SubmittedTab({rows}) { | |||
| headerName: '提交日期', | |||
| flex: 1, | |||
| valueGetter:(params)=>{ | |||
| return DateUtils.datetimeStr(params.value); | |||
| return DateUtils.datetimeStr(params?.value); | |||
| } | |||
| }, | |||
| { | |||
| @@ -32,18 +33,12 @@ export default function SubmittedTab({rows}) { | |||
| field: 'remarks', | |||
| headerName: '我的備註', | |||
| flex: 1, | |||
| valueGetter:(params)=>{ | |||
| return DateUtils.datetimeStr(params.value); | |||
| } | |||
| }, | |||
| { | |||
| id: 'status', | |||
| field: 'status', | |||
| headerName: '狀態', | |||
| flex: 1, | |||
| valueGetter:(params)=>{ | |||
| return DateUtils.datetimeStr(params.value); | |||
| } | |||
| }, | |||
| { | |||
| field: 'actions', | |||
| @@ -51,16 +46,8 @@ export default function SubmittedTab({rows}) { | |||
| headerName: '', | |||
| width: 50, | |||
| cellClassName: 'actions', | |||
| getActions: (params) => { | |||
| return [ | |||
| <GridActionsCellItem | |||
| key="OutSave" | |||
| icon={<Icon.Download/>} | |||
| label="查看詳細" | |||
| className="textPrimary" | |||
| onClick={onDownloadClick(params.id, params.row.skey, params.row.filename)} | |||
| color="primary" | |||
| />] | |||
| renderCell: () => { | |||
| return <Button onClick={()=>{}}>查看詳細</Button>; | |||
| }, | |||
| } | |||
| ]; | |||
| @@ -47,12 +47,12 @@ const PublicNotice = () => { | |||
| const loadData = ()=>{ | |||
| setLoding(true); | |||
| HttpUtils.get({ | |||
| url: `${UrlUtils.GET_PUBLIC_NOTICE_LIST}`, | |||
| url: `${UrlUtils.GET_PUBLIC_NOTICE_LIST_ListByStatus}`, | |||
| onSuccess: function(response){ | |||
| setSubmittedList(response.data["submitted"]); | |||
| setInProgressList(response.data["inProgress"]); | |||
| setPendingPaymentList(response.data["pendingPayment"]); | |||
| setPendingPublishList(response.data["pendingPublish"]); | |||
| setSubmittedList(response["submitted"]); | |||
| setInProgressList(response["inProgress"]); | |||
| setPendingPaymentList(response["pendingPayment"]); | |||
| setPendingPublishList(response["pendingPublish"]); | |||
| } | |||
| }); | |||
| }; | |||
| @@ -85,10 +85,10 @@ const PublicNotice = () => { | |||
| <TabContext value={selectedTab}> | |||
| <Box sx={{ borderBottom: 1, borderColor: 'divider' }}> | |||
| <TabList onChange={handleChange} aria-label="lab API tabs example"> | |||
| <Tab label="已提交" value="1" /> | |||
| <Tab label="處理中" value="2" /> | |||
| <Tab label="待付款" value="3" /> | |||
| <Tab label="待發佈" value="4" /> | |||
| <Tab label={"已提交("+submittedList.length+")"} value="1" /> | |||
| <Tab label={"處理中("+inProgressList.length+")"} value="2" /> | |||
| <Tab label={"待付款("+pendingPaymentList.length+")"} value="3" /> | |||
| <Tab label={"待發佈("+pendingPublishList.length+")"} value="4" /> | |||
| <Tab label="搜尋申請記錄" value="5" /> | |||
| </TabList> | |||
| </Box> | |||
| @@ -50,7 +50,7 @@ export const GET_SET_UN_PRIMARY_USER = apiPath+'/user/un-primary'; | |||
| export const GET_PUBLIC_NOTICE_LIST = apiPath+'/application/list'; | |||
| export const GET_PUBLIC_NOTICE_LIST_ListByStatus = apiPath+'/application/status-list'; | |||
| export const GET_PUBLIC_NOTICE_getApplyUser = apiPath+'/application/get-apply-user'; | |||
| export const POST_PUBLIC_NOTICE_SAVE = apiPath+'/application/save'; | |||
| export const POST_PUBLIC_NOTICE_APPLY = apiPath+'/application/apply'; | |||
| //GLD User | |||
| export const POST_ADMIN_USER_REGISTER = apiPath+'/user/registry'; | |||
| @@ -43,6 +43,30 @@ export const getTextField=({label, valueName, form, disabled})=>{ | |||
| </Grid>; | |||
| } | |||
| export const getTextArea=({label, valueName, form, disabled, ...props})=>{ | |||
| return <Grid item lg={4} > | |||
| <Grid container alignItems={"center"}> | |||
| <Grid item xs={4} s={4} md={4} lg={4} | |||
| sx={{ml: 3, mr: 3, display: 'flex', alignItems: 'center'}}> | |||
| {label} | |||
| </Grid> | |||
| <Grid item xs={7} s={7} md={7} lg={6}> | |||
| {initField({ | |||
| type:"text", | |||
| valueName:valueName, | |||
| form:form, | |||
| disabled:disabled, | |||
| multiline: true, | |||
| row:10, | |||
| minRows: 4, | |||
| maxRows: 4, | |||
| props | |||
| })} | |||
| </Grid> | |||
| </Grid> | |||
| </Grid>; | |||
| } | |||
| export const getPhoneField=({label, valueName, form, disabled})=>{ | |||
| return <Grid item lg={4}> | |||
| <Grid container alignItems={"center"}> | |||
| @@ -155,11 +179,12 @@ export const getComboField=({label,dataList, valueName, form, disabled, getOptio | |||
| </Grid>; | |||
| } | |||
| export const initField=({type, valueName, form, disabled, placeholder, inputProps})=>{ | |||
| export const initField=({type, valueName, form, disabled, multiline, placeholder, inputProps, ...props})=>{ | |||
| let err = Boolean(form.errors[valueName]); | |||
| return <TextField | |||
| fullWidth | |||
| multiline={multiline} | |||
| id={valueName} | |||
| name={valueName} | |||
| type={type} | |||
| @@ -176,5 +201,6 @@ export const initField=({type, valueName, form, disabled, placeholder, inputProp | |||
| background: "#f8f8f8", | |||
| }, | |||
| }} | |||
| {...props} | |||
| /> | |||
| } | |||
| @@ -35,6 +35,29 @@ export const post = ({url, params, onSuccess, onFail, onError, headers}) =>{ | |||
| }); | |||
| }; | |||
| export const postWithFiles = ({url, params, files, onSuccess, onFail, onError}) =>{ | |||
| var formData = new FormData(); | |||
| for (let i = 0; i < files.length; i++){ | |||
| const file = files[i] | |||
| formData.append("multipartFileList", file); | |||
| } | |||
| for (var key in params) { | |||
| if(typeof(params[key]) ==='object'){ | |||
| formData.append(key, JSON.stringify(params[key])); | |||
| }else{ | |||
| formData.append(key, params[key]?params[key]:null); | |||
| } | |||
| } | |||
| axios.post(url,formData, | |||
| {headers: {"Content-Type":"multipart/form-data"}}) | |||
| .then( | |||
| (response)=>{onResponse(response, onSuccess, onFail);} | |||
| ).catch(error => { | |||
| return handleError(error,onError); | |||
| }); | |||
| }; | |||
| export const fileDownload = ({fileId, skey, filename, onError}) =>{ | |||
| axios.get( FILE_DOWN_GET+"/"+fileId+"/"+skey+"/"+filename, | |||
| { | |||
| @@ -56,29 +79,41 @@ export const fileDownload = ({fileId, skey, filename, onError}) =>{ | |||
| }); | |||
| }; | |||
| export const fileUpload = ({ refType, refId, files,refCode, onSuccess, onFail, onError}) =>{ | |||
| console.log(files); | |||
| var formData = new FormData(); | |||
| for (let i = 0; i < files.length; i++){ | |||
| const file = files[i] | |||
| formData.append("multipartFileList", file); | |||
| } | |||
| // formData.append("multipartFile", file); | |||
| formData.append("refType", refType); | |||
| formData.append("refId", refId); | |||
| if(refCode){ | |||
| formData.append("refCode", refCode); | |||
| } | |||
| console.log(formData) | |||
| axios.post(FILE_UP_POST,formData,{ | |||
| headers: { | |||
| "Content-Type":"multipart/form-data" | |||
| } | |||
| }).then( | |||
| (response)=>{ | |||
| onResponse(response,onSuccess,onFail); | |||
| } | |||
| ).catch(error => { return handleError(error, onError); }); | |||
| export const fileUpload = ({ refType, refId, files, refCode, onSuccess, onFail, onError}) =>{ | |||
| // console.log(files); | |||
| // var formData = new FormData(); | |||
| // for (let i = 0; i < files.length; i++){ | |||
| // const file = files[i] | |||
| // formData.append("multipartFileList", file); | |||
| // } | |||
| // // formData.append("multipartFile", file); | |||
| // formData.append("refType", refType); | |||
| // formData.append("refId", refId); | |||
| // if(refCode){ | |||
| // formData.append("refCode", refCode); | |||
| // } | |||
| // console.log(formData) | |||
| // axios.post(FILE_UP_POST,formData,{ | |||
| // headers: { | |||
| // "Content-Type":"multipart/form-data" | |||
| // } | |||
| // }).then( | |||
| // (response)=>{ | |||
| // onResponse(response,onSuccess,onFail); | |||
| // } | |||
| // ).catch(error => { return handleError(error, onError); }); | |||
| postWithFiles({ | |||
| url: FILE_UP_POST, | |||
| params:{ | |||
| refType: refType, | |||
| refId: refId, | |||
| refCode: refCode | |||
| }, | |||
| files: files, | |||
| onSuccess: onSuccess, | |||
| onFail:onFail, | |||
| onError:onError | |||
| }); | |||
| }; | |||