Browse Source

qna 사용자 문의 상세 api 연결

pull/2/head
hhjk00 11 months ago
parent
commit
e251ccb490
  1. 45
      src/components/cstmrService/inquiry/InquiryWrite.js
  2. 56
      src/containers/cstmrService/inquiry/UserInquiryContainer.js
  3. 2
      src/modules/cstmrService/inquiry/reducers/index.ts

45
src/components/cstmrService/inquiry/InquiryWrite.js

@ -19,7 +19,7 @@ import {
import classnames from 'classnames'; import classnames from 'classnames';
import { X } from 'react-feather'; import { X } from 'react-feather';
function InquiryWrite({ isInquiryModalOpen, handlerInquiryModal }) { function InquiryWrite({ isInquiryModalOpen, handlerInquiryModal, detail }) {
const fileInputRef = useRef(null); const fileInputRef = useRef(null);
const [value, setValue] = useState(''); const [value, setValue] = useState('');
const [selectedFile, setSelectedFile] = useState(null); const [selectedFile, setSelectedFile] = useState(null);
@ -33,6 +33,7 @@ function InquiryWrite({ isInquiryModalOpen, handlerInquiryModal }) {
setSelectedFile(null); setSelectedFile(null);
}; };
console.log('데이터 보시겟습니당', detail);
return ( return (
<Modal <Modal
isOpen={isInquiryModalOpen} isOpen={isInquiryModalOpen}
@ -48,12 +49,17 @@ function InquiryWrite({ isInquiryModalOpen, handlerInquiryModal }) {
<Label for='test'> <Label for='test'>
<span className='necessary'>*</span> <span className='necessary'>*</span>
</Label> </Label>
<Input type='select' size='sm'> <Input
<option value=''>칭찬</option> type='select'
<option value=''>불만</option> bsSize='sm'
<option value=''>문의</option> value={detail.category}
<option value=''>제안</option> onChange={() => {}}
<option value=''>기타</option> >
<option value='칭찬'>칭찬</option>
<option value='불만'>불만</option>
<option value='문의'>문의</option>
<option value='제안'>제안</option>
<option value='기타'>기타</option>
</Input> </Input>
</FormGroup> </FormGroup>
</Col> </Col>
@ -62,8 +68,12 @@ function InquiryWrite({ isInquiryModalOpen, handlerInquiryModal }) {
<Label for='test'> <Label for='test'>
<span className='necessary'>*</span> <span className='necessary'>*</span>
</Label> </Label>
<Input type='number' size='sm' placeholder='' /> <Input
<div class='feedback'> type='number'
bsSize='sm'
defaultValue={detail.contact || ''}
/>
<div className='feedback'>
<p> <p>
* 확인이 필요할 경우 연락을 드릴 있으니, 정확히 입력 * 확인이 필요할 경우 연락을 드릴 있으니, 정확히 입력
부탁드립니다. 부탁드립니다.
@ -76,9 +86,9 @@ function InquiryWrite({ isInquiryModalOpen, handlerInquiryModal }) {
<Label for='test'>생성 사용자</Label> <Label for='test'>생성 사용자</Label>
<Input <Input
type='text' type='text'
size='sm' bsSize='sm'
placeholder='' placeholder=''
value='홍길동' defaultValue={detail.createUserNm || ''}
disabled disabled
/> />
</FormGroup> </FormGroup>
@ -88,9 +98,8 @@ function InquiryWrite({ isInquiryModalOpen, handlerInquiryModal }) {
<Label for='test'>생성 일자</Label> <Label for='test'>생성 일자</Label>
<Input <Input
type='text' type='text'
size='sm' bsSize='sm'
placeholder='' defaultValue={detail.createDt.slice(0, -3) || ''}
value='2023-10-15 00:00'
disabled disabled
/> />
</FormGroup> </FormGroup>
@ -100,7 +109,7 @@ function InquiryWrite({ isInquiryModalOpen, handlerInquiryModal }) {
<Label for='test'> <Label for='test'>
<span className='necessary'>*</span> <span className='necessary'>*</span>
</Label> </Label>
<Input type='text' size='sm' placeholder='' /> <Input type='text' bsSize='sm' defaultValue={detail.title} />
</FormGroup> </FormGroup>
</Col> </Col>
<Col className='list-input' md='12'> <Col className='list-input' md='12'>
@ -111,8 +120,8 @@ function InquiryWrite({ isInquiryModalOpen, handlerInquiryModal }) {
<Input <Input
className='faq-textarea' className='faq-textarea'
type='textarea' type='textarea'
placeholder=''
onChange={e => setValue(e.target.value)} onChange={e => setValue(e.target.value)}
defaultValue={detail.content}
/> />
{/* 하단 필요없으면제거 */} {/* 하단 필요없으면제거 */}
<span <span
@ -122,7 +131,7 @@ function InquiryWrite({ isInquiryModalOpen, handlerInquiryModal }) {
> >
{`${value.length}/300`} {`${value.length}/300`}
</span> </span>
<div class='feedback'> <div className='feedback'>
<p> <p>
* 주민번호, 이메일 불필요한 개인정보는 기재하지 마시기 * 주민번호, 이메일 불필요한 개인정보는 기재하지 마시기
바랍니다. 바랍니다.
@ -163,7 +172,7 @@ function InquiryWrite({ isInquiryModalOpen, handlerInquiryModal }) {
: '선택된 파일이 없습니다.'} : '선택된 파일이 없습니다.'}
</Label> </Label>
</div> </div>
<div class='feedback'> <div className='feedback'>
<p> <p>
* 파일 형식은 jpg, png, jpeg, gif 형식만 가능합니다. * 파일 형식은 jpg, png, jpeg, gif 형식만 가능합니다.
<br />* 최대 허용 용량 : 3MB까지 가능합니다. <br />* 최대 허용 용량 : 3MB까지 가능합니다.

56
src/containers/cstmrService/inquiry/UserInquiryContainer.js

@ -1,19 +1,29 @@
import { Button, Badge } from 'reactstrap'; import { Button, Badge } from 'reactstrap';
import AppCollapse from '@components/app-collapse'; import AppCollapse from '@components/app-collapse';
import { useDispatch, useSelector } from 'react-redux'; import { useDispatch, useSelector } from 'react-redux';
import { USER_LIST } from '../../../modules/cstmrService/inquiry/action'; import {
ADMIN_DETAIL,
ADMIN_DETAIL_INITAL,
USER_LIST
} from '../../../modules/cstmrService/inquiry/action';
import { useEffect, useState } from 'react'; import { useEffect, useState } from 'react';
import moment from 'moment'; import moment from 'moment';
import InquiryWrite from '../../../components/cstmrService/inquiry/InquiryWrite'; import InquiryWrite from '../../../components/cstmrService/inquiry/InquiryWrite';
export default function UserInquiryContainer() { export default function UserInquiryContainer() {
const dispatch = useDispatch(); const dispatch = useDispatch();
const { userList: lists } = useSelector(state => state.qnaState); const { userList: lists, adminDetail: detail } = useSelector(
state => state.qnaState
);
const [isInquiryModalOpen, setIsInquiryModalOpen] = useState(false); const [isInquiryModalOpen, setIsInquiryModalOpen] = useState(false);
useEffect(() => {
dispatch(USER_LIST.request({ category: '', searchType: '', word: '' }));
}, []);
const textLineBreaks = text => { const textLineBreaks = text => {
return text.replace((/\n/g, '<br>')); return text.replace((/\n/g, '<br/>'));
}; };
const handlerQnaList = () => { const handlerQnaList = () => {
@ -36,7 +46,10 @@ export default function UserInquiryContainer() {
<div> <div>
<Button.Ripple <Button.Ripple
color='flat-primary' color='flat-primary'
onClick={() => handlerInquiryModal()} onClick={e => {
e.stopPropagation();
handlerInquiryModal(i.qnaSno);
}}
> >
수정하기 수정하기
</Button.Ripple> </Button.Ripple>
@ -58,18 +71,15 @@ export default function UserInquiryContainer() {
</span> </span>
</div> </div>
{i.anserStatus === 'Y' && ( {i.anserStatus === 'Y' && (
<> <div className='faq-a' style={{ marginTop: '7px' }}>
<br /> <span className='faq-icon-a'>A</span>
<div className='faq-a'> <span
<span className='faq-icon-a'>A</span> className='faq-a-text'
<span dangerouslySetInnerHTML={{
className='faq-a-text' __html: textLineBreaks(i.anserContent)
dangerouslySetInnerHTML={{ }}
__html: textLineBreaks(i.anserContent) ></span>
}} </div>
></span>
</div>
</>
)} )}
</> </>
) )
@ -78,16 +88,15 @@ export default function UserInquiryContainer() {
}; };
const handlerInquiryModal = qnaSno => { const handlerInquiryModal = qnaSno => {
// if (!isInquiryModalOpen) { if (!isInquiryModalOpen && qnaSno) {
// dispatch(ADMIN_DETAIL.request(qnaSno)); console.log(isInquiryModalOpen);
// } dispatch(ADMIN_DETAIL.request(qnaSno));
} else {
dispatch(ADMIN_DETAIL_INITAL());
}
setIsInquiryModalOpen(!isInquiryModalOpen); setIsInquiryModalOpen(!isInquiryModalOpen);
}; };
useEffect(() => {
dispatch(USER_LIST.request({ category: '', searchType: '', word: '' }));
}, []);
return ( return (
<div className='faq'> <div className='faq'>
<div className='my-faq'> <div className='my-faq'>
@ -108,6 +117,7 @@ export default function UserInquiryContainer() {
<InquiryWrite <InquiryWrite
isInquiryModalOpen={isInquiryModalOpen} isInquiryModalOpen={isInquiryModalOpen}
handlerInquiryModal={handlerInquiryModal} handlerInquiryModal={handlerInquiryModal}
detail={detail}
/> />
</div> </div>
); );

2
src/modules/cstmrService/inquiry/reducers/index.ts

@ -23,7 +23,7 @@ export const qnaReducer = createReducer<IQnaState, Actions.QnaAction>(
// 관리자 상세 초기화 // 관리자 상세 초기화
.handleAction(Actions.ADMIN_DETAIL_INITAL, (state, action) => .handleAction(Actions.ADMIN_DETAIL_INITAL, (state, action) =>
produce(state, draft => { produce(state, draft => {
draft.adminDetail = state.adminDetail; draft.adminDetail = initalState.adminDetail;
}) })
) )
// 사용자 목록 // 사용자 목록

Loading…
Cancel
Save