게시판 상세 작업중
parent
a4a0491f0c
commit
86dc19ceaf
|
|
@ -3146,6 +3146,12 @@
|
||||||
"@types/node": "*"
|
"@types/node": "*"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"@types/cookie": {
|
||||||
|
"version": "0.6.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.6.0.tgz",
|
||||||
|
"integrity": "sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA==",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
"@types/d3-array": {
|
"@types/d3-array": {
|
||||||
"version": "3.2.1",
|
"version": "3.2.1",
|
||||||
"resolved": "https://registry.npmjs.org/@types/d3-array/-/d3-array-3.2.1.tgz",
|
"resolved": "https://registry.npmjs.org/@types/d3-array/-/d3-array-3.2.1.tgz",
|
||||||
|
|
@ -3260,6 +3266,16 @@
|
||||||
"@types/unist": "^2"
|
"@types/unist": "^2"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"@types/hoist-non-react-statics": {
|
||||||
|
"version": "3.3.5",
|
||||||
|
"resolved": "https://registry.npmjs.org/@types/hoist-non-react-statics/-/hoist-non-react-statics-3.3.5.tgz",
|
||||||
|
"integrity": "sha512-SbcrWzkKBw2cdwRTwQAswfpB9g9LJWfjtUeW/jvNwbhC8cpmmNYVePa+ncbUe0rGTQ7G3Ff6mYUN2VMfLVr+Sg==",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"@types/react": "*",
|
||||||
|
"hoist-non-react-statics": "^3.3.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
"@types/html-minifier-terser": {
|
"@types/html-minifier-terser": {
|
||||||
"version": "6.1.0",
|
"version": "6.1.0",
|
||||||
"resolved": "https://registry.npmjs.org/@types/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz",
|
"resolved": "https://registry.npmjs.org/@types/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz",
|
||||||
|
|
@ -5551,6 +5567,11 @@
|
||||||
"domelementtype": "^2.2.0"
|
"domelementtype": "^2.2.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"dompurify": {
|
||||||
|
"version": "3.1.5",
|
||||||
|
"resolved": "https://registry.npmjs.org/dompurify/-/dompurify-3.1.5.tgz",
|
||||||
|
"integrity": "sha512-lwG+n5h8QNpxtyrJW/gJWckL+1/DQiYMX8f7t8Z2AZTPw1esVrqjI63i7Zc2Gz0aKzLVMYC1V1PL/ky+aY/NgA=="
|
||||||
|
},
|
||||||
"domutils": {
|
"domutils": {
|
||||||
"version": "2.8.0",
|
"version": "2.8.0",
|
||||||
"resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz",
|
"resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz",
|
||||||
|
|
@ -11107,6 +11128,17 @@
|
||||||
"warning": "^4.0.3"
|
"warning": "^4.0.3"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"react-cookie": {
|
||||||
|
"version": "7.1.4",
|
||||||
|
"resolved": "https://registry.npmjs.org/react-cookie/-/react-cookie-7.1.4.tgz",
|
||||||
|
"integrity": "sha512-wDxxa/HYaSXSMlyWJvJ5uZTzIVtQTPf1gMksFgwAz/2/W3lCtY8r4OChCXMPE7wax0PAdMY97UkNJedGv7KnDw==",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"@types/hoist-non-react-statics": "^3.3.5",
|
||||||
|
"hoist-non-react-statics": "^3.3.2",
|
||||||
|
"universal-cookie": "^7.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
"react-copy-to-clipboard": {
|
"react-copy-to-clipboard": {
|
||||||
"version": "5.1.0",
|
"version": "5.1.0",
|
||||||
"resolved": "https://registry.npmjs.org/react-copy-to-clipboard/-/react-copy-to-clipboard-5.1.0.tgz",
|
"resolved": "https://registry.npmjs.org/react-copy-to-clipboard/-/react-copy-to-clipboard-5.1.0.tgz",
|
||||||
|
|
@ -12985,6 +13017,24 @@
|
||||||
"crypto-random-string": "^2.0.0"
|
"crypto-random-string": "^2.0.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"universal-cookie": {
|
||||||
|
"version": "7.1.4",
|
||||||
|
"resolved": "https://registry.npmjs.org/universal-cookie/-/universal-cookie-7.1.4.tgz",
|
||||||
|
"integrity": "sha512-Q+DVJsdykStWRMtXr2Pdj3EF98qZHUH/fXv/gwFz/unyToy1Ek1w5GsWt53Pf38tT8Gbcy5QNsj61Xe9TggP4g==",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"@types/cookie": "^0.6.0",
|
||||||
|
"cookie": "^0.6.0"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"cookie": {
|
||||||
|
"version": "0.6.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz",
|
||||||
|
"integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==",
|
||||||
|
"dev": true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"universalify": {
|
"universalify": {
|
||||||
"version": "2.0.0",
|
"version": "2.0.0",
|
||||||
"resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz",
|
||||||
|
|
|
||||||
|
|
@ -17,6 +17,7 @@
|
||||||
"apexcharts": "^3.45.2",
|
"apexcharts": "^3.45.2",
|
||||||
"bootstrap": "^5.3.2",
|
"bootstrap": "^5.3.2",
|
||||||
"date-fns": "^3.2.0",
|
"date-fns": "^3.2.0",
|
||||||
|
"dompurify": "^3.1.5",
|
||||||
"prop-types": "^15.8.1",
|
"prop-types": "^15.8.1",
|
||||||
"qs": "^6.11.0",
|
"qs": "^6.11.0",
|
||||||
"react": "^18.2.0",
|
"react": "^18.2.0",
|
||||||
|
|
@ -44,7 +45,8 @@
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@testing-library/jest-dom": "^5.16.4",
|
"@testing-library/jest-dom": "^5.16.4",
|
||||||
"@testing-library/react": "^13.3.0",
|
"@testing-library/react": "^13.3.0",
|
||||||
"@testing-library/user-event": "^13.5.0"
|
"@testing-library/user-event": "^13.5.0",
|
||||||
|
"react-cookie": "^7.1.4"
|
||||||
},
|
},
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"start": "react-scripts start",
|
"start": "react-scripts start",
|
||||||
|
|
|
||||||
|
|
@ -35,7 +35,7 @@ const URL = {
|
||||||
SUPPORT : "/support", // 고객지원
|
SUPPORT : "/support", // 고객지원
|
||||||
SUPPORT_QNA : "/support/qna", // 게시판/QNA 소개
|
SUPPORT_QNA : "/support/qna", // 게시판/QNA 소개
|
||||||
SUPPORT_LIST : "/support/list/:BbsCode", // 게시판/리스트
|
SUPPORT_LIST : "/support/list/:BbsCode", // 게시판/리스트
|
||||||
SUPPORT_DETAIL : "/support/detail/:BbsCode", // 게시판/상세보기
|
SUPPORT_DETAIL : "/support/detail/:bbsContSeq", // 게시판/상세보기
|
||||||
SUPPORT_CREATE : "/support/create/:BbsCode", // 게시판/글쓰기
|
SUPPORT_CREATE : "/support/create/:BbsCode", // 게시판/글쓰기
|
||||||
SUPPORT_LIST_NOCODE : "/support/list",
|
SUPPORT_LIST_NOCODE : "/support/list",
|
||||||
SUPPORT_DETAIL_NOCODE : "/support/detail", // 게시판/상세보기
|
SUPPORT_DETAIL_NOCODE : "/support/detail", // 게시판/상세보기
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
import React, { useState } from 'react';
|
import React, { useState } from 'react';
|
||||||
import {Link, useNavigate} from 'react-router-dom';
|
import {Link, useLocation, useNavigate, useParams} from 'react-router-dom';
|
||||||
|
|
||||||
import * as EgovNet from 'api/egovFetch';
|
import * as EgovNet from 'api/egovFetch';
|
||||||
import URL from 'constants/url';
|
import URL from 'constants/url';
|
||||||
|
|
@ -7,10 +7,20 @@ import URL from 'constants/url';
|
||||||
import Row from 'react-bootstrap/Row';
|
import Row from 'react-bootstrap/Row';
|
||||||
import Col from 'react-bootstrap/Col';
|
import Col from 'react-bootstrap/Col';
|
||||||
import Button from 'react-bootstrap/Button';
|
import Button from 'react-bootstrap/Button';
|
||||||
|
import {format} from "date-fns";
|
||||||
|
import DOMPurify from 'dompurify';
|
||||||
|
|
||||||
|
|
||||||
function Detail(){
|
function Detail(){
|
||||||
const navigate = useNavigate();
|
const navigate = useNavigate();
|
||||||
|
|
||||||
|
const {bbsContSeq} = useParams();
|
||||||
|
console.log("@@@ bbsContSeq : " + bbsContSeq);
|
||||||
|
|
||||||
|
const location = useLocation();
|
||||||
|
const item = location.state?.item;
|
||||||
|
console.log("@@@ item : " + JSON.stringify(item));
|
||||||
|
|
||||||
const goToList = () => {
|
const goToList = () => {
|
||||||
navigate('/support/list/KCSC-QA');
|
navigate('/support/list/KCSC-QA');
|
||||||
};
|
};
|
||||||
|
|
@ -45,38 +55,34 @@ function Detail(){
|
||||||
</dd>
|
</dd>
|
||||||
<dt>등록일자</dt>
|
<dt>등록일자</dt>
|
||||||
<dd>
|
<dd>
|
||||||
2011-08-08 11:11:11
|
{format(new Date(item.frstCrtDt), 'yyyy-MM-dd HH:mm:ss')}
|
||||||
</dd>
|
</dd>
|
||||||
</dl>
|
</dl>
|
||||||
<dl>
|
<dl>
|
||||||
<dt>작성자</dt>
|
<dt>작성자</dt>
|
||||||
<dd>
|
<dd>
|
||||||
박성환
|
{item.frstCrtId}
|
||||||
</dd>
|
</dd>
|
||||||
<dt>조회</dt>
|
<dt>조회</dt>
|
||||||
<dd>
|
<dd>
|
||||||
100
|
{item.bbsReadCnt}
|
||||||
</dd>
|
</dd>
|
||||||
</dl>
|
</dl>
|
||||||
<dl>
|
<dl>
|
||||||
<dt>첨부파일</dt>
|
<dt>첨부파일</dt>
|
||||||
<dd>
|
<dd>
|
||||||
<span className="file_attach">
|
<span className="file_attach">
|
||||||
<Link to="">file_name.hwp</Link> <span>[3626] byte</span>
|
<Link to="">{item.fileGrpId}</Link> <span>[3626] byte</span>
|
||||||
</span>
|
</span>
|
||||||
</dd>
|
</dd>
|
||||||
</dl>
|
</dl>
|
||||||
<dl>
|
<dl>
|
||||||
<dd>[공지] jsp파일을 못찼습니다. 제목 뿌려주세요.</dd>
|
<dd>{item.bbsContTitle}</dd>
|
||||||
</dl>
|
</dl>
|
||||||
</div>
|
</div>
|
||||||
<div className="qna_q">
|
<div className="qna_q">
|
||||||
<span>Q</span>
|
<span>Q</span>
|
||||||
안녕하세요 웹호스팅에 올렸더니 jsp파일에서 이런에러로그가 남았는데요 jsp파일을 못찾는것같습니다? xml을 수정해야하나요?<br/>
|
<div dangerouslySetInnerHTML={{ __html: DOMPurify.sanitize(item.bbsContents) }}></div>
|
||||||
심각: Servlet.service() for servlet action threw exception<br/>
|
|
||||||
javax.servlet.ServletException: Could not get RequestDispatcher for [/WEB-INF/jsp/egovframework//main/main.jsp]: check that
|
|
||||||
this file exists within your WAR<br/>
|
|
||||||
at org.springframework.web.servlet.view.InternalResourceView.renderMergedOutputModel(InternalResourceView.java:217)
|
|
||||||
</div>
|
</div>
|
||||||
<div className="qna_a">
|
<div className="qna_a">
|
||||||
<span>A</span>
|
<span>A</span>
|
||||||
|
|
|
||||||
|
|
@ -9,6 +9,7 @@ import Col from 'react-bootstrap/Col';
|
||||||
import Button from 'react-bootstrap/Button';
|
import Button from 'react-bootstrap/Button';
|
||||||
import {format} from "date-fns";
|
import {format} from "date-fns";
|
||||||
import EgovPaging from "../../components/EgovPaging";
|
import EgovPaging from "../../components/EgovPaging";
|
||||||
|
import Detail from "./Detail";
|
||||||
|
|
||||||
function List(){
|
function List(){
|
||||||
const navigate = useNavigate();
|
const navigate = useNavigate();
|
||||||
|
|
@ -31,6 +32,12 @@ function List(){
|
||||||
|
|
||||||
console.log("@@@ BbsCode : " + BbsCode);
|
console.log("@@@ BbsCode : " + BbsCode);
|
||||||
|
|
||||||
|
function Detail(item) {
|
||||||
|
const detailUrl = '/support/detail/' + item.bbsContSeq;
|
||||||
|
console.log(detailUrl);
|
||||||
|
navigate(detailUrl, {state : {item}});
|
||||||
|
}
|
||||||
|
|
||||||
const retrieveList = useCallback((searchCondition) => {
|
const retrieveList = useCallback((searchCondition) => {
|
||||||
handleClose();
|
handleClose();
|
||||||
const params = EgovNet.convParams(searchCondition);
|
const params = EgovNet.convParams(searchCondition);
|
||||||
|
|
@ -62,7 +69,7 @@ function List(){
|
||||||
mutListTag.push(
|
mutListTag.push(
|
||||||
<div className="list_item">
|
<div className="list_item">
|
||||||
<div>공지</div>
|
<div>공지</div>
|
||||||
<div className="al">{item?.bbsContTitle}</div>
|
<div className="al" onClick={()=>{Detail(item)}}>{item?.bbsContTitle}</div>
|
||||||
<div>{item?.frstCrtId}</div>
|
<div>{item?.frstCrtId}</div>
|
||||||
<div>{item?.bbsReadCnt}</div>
|
<div>{item?.bbsReadCnt}</div>
|
||||||
<div>{formattedDate}</div>
|
<div>{formattedDate}</div>
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue