Merge branch 'main' of http://192.168.0.251:3000/localnet/localhost-front
This commit is contained in:
commit
f020d33fe2
143
index.html
143
index.html
@ -1,83 +1,88 @@
|
||||
<!doctype html>
|
||||
<html lang="" class="light-style layout-navbar-fixed layout-menu-fixed layout-compact" dir="ltr"
|
||||
data-theme="theme-default" data-assets-path="/" data-template="vertical-menu-template" data-style="light">
|
||||
<html
|
||||
lang=""
|
||||
class="light-style layout-navbar-fixed layout-menu-fixed layout-compact"
|
||||
dir="ltr"
|
||||
data-theme="theme-default"
|
||||
data-assets-path="/"
|
||||
data-template="vertical-menu-template"
|
||||
data-style="light"
|
||||
>
|
||||
<head>
|
||||
<meta charset="UTF-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
|
||||
<head>
|
||||
<meta charset="UTF-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
<!-- favicon -->
|
||||
<link rel="apple-touch-icon" sizes="180x180" href="/img/favicon/apple-touch-icon.png" />
|
||||
<link rel="icon" type="image/png" sizes="32x32" href="img/favicon/favicon-32x32.png" />
|
||||
<link rel="icon" type="image/png" sizes="16x16" href="/img/favicon/favicon-16x16.png" />
|
||||
<link rel="manifest" href="/img/favicon/site.webmanifest" />
|
||||
|
||||
<!-- favicon -->
|
||||
<link rel="apple-touch-icon" sizes="180x180" href="/img/favicon/apple-touch-icon.png" />
|
||||
<link rel="icon" type="image/png" sizes="32x32" href="img/favicon/favicon-32x32.png" />
|
||||
<link rel="icon" type="image/png" sizes="16x16" href="/img/favicon/favicon-16x16.png" />
|
||||
<link rel="manifest" href="/img/favicon/site.webmanifest" />
|
||||
<meta content="" name="description" />
|
||||
<meta content="" name="keywords" />
|
||||
<title>LOCALNET</title>
|
||||
|
||||
<meta content="" name="description" />
|
||||
<meta content="" name="keywords" />
|
||||
<title>LOCALNET</title>
|
||||
<!-- Fonts -->
|
||||
<link rel="preconnect" href="https://fonts.googleapis.com/" />
|
||||
<link rel="preconnect" href="https://fonts.gstatic.com/" crossorigin />
|
||||
<link
|
||||
href="https://fonts.googleapis.com/css2?family=Public+Sans:ital,wght@0,300;0,400;0,500;0,600;0,700;1,300;1,400;1,500;1,600;1,700&display=swap"
|
||||
rel="stylesheet"
|
||||
/>
|
||||
|
||||
<!-- Fonts -->
|
||||
<link rel="preconnect" href="https://fonts.googleapis.com/" />
|
||||
<link rel="preconnect" href="https://fonts.gstatic.com/" crossorigin />
|
||||
<link
|
||||
href="https://fonts.googleapis.com/css2?family=Public+Sans:ital,wght@0,300;0,400;0,500;0,600;0,700;1,300;1,400;1,500;1,600;1,700&display=swap"
|
||||
rel="stylesheet" />
|
||||
<link rel="stylesheet" href="/css/font.css" />
|
||||
<link rel="stylesheet" href="/css/custom.css" />
|
||||
|
||||
<link rel="stylesheet" href="/css/font.css" />
|
||||
<link rel="stylesheet" href="/css/custom.css" />
|
||||
<!-- Icons -->
|
||||
<link rel="stylesheet" href="/vendor/fonts/boxicons.css" />
|
||||
<link rel="stylesheet" href="/vendor/fonts/fontawesome.css" />
|
||||
<link rel="stylesheet" href="/vendor/fonts/flag-icons.css" />
|
||||
|
||||
<!-- Icons -->
|
||||
<link rel="stylesheet" href="/vendor/fonts/boxicons.css" />
|
||||
<link rel="stylesheet" href="/vendor/fonts/fontawesome.css" />
|
||||
<link rel="stylesheet" href="/vendor/fonts/flag-icons.css" />
|
||||
<!-- Core CSS -->
|
||||
<link rel="stylesheet" href="/vendor/css/rtl/core.css" class="template-customizer-core-css" />
|
||||
<link rel="stylesheet" href="/vendor/css/rtl/theme-default.css" class="template-customizer-theme-css" />
|
||||
<link rel="stylesheet" href="/css/demo.css" />
|
||||
|
||||
<!-- Core CSS -->
|
||||
<link rel="stylesheet" href="/vendor/css/rtl/core.css" class="template-customizer-core-css" />
|
||||
<link rel="stylesheet" href="/vendor/css/rtl/theme-default.css" class="template-customizer-theme-css" />
|
||||
<link rel="stylesheet" href="/css/demo.css" />
|
||||
<!-- Vendors CSS -->
|
||||
<link rel="stylesheet" href="/vendor/libs/perfect-scrollbar/perfect-scrollbar.css" />
|
||||
<link rel="stylesheet" href="/vendor/libs/typeahead-js/typeahead.css" />
|
||||
<link rel="stylesheet" href="/vendor/libs/apex-charts/apex-charts.css" />
|
||||
|
||||
<!-- Vendors CSS -->
|
||||
<link rel="stylesheet" href="/vendor/libs/perfect-scrollbar/perfect-scrollbar.css" />
|
||||
<link rel="stylesheet" href="/vendor/libs/typeahead-js/typeahead.css" />
|
||||
<link rel="stylesheet" href="/vendor/libs/apex-charts/apex-charts.css" />
|
||||
<!-- Helpers -->
|
||||
<script src="/vendor/js/helpers.js"></script>
|
||||
<!--! Template customizer & Theme config files MUST be included after core stylesheets and helpers.js in the <head> section -->
|
||||
<!--? Template customizer: To hide customizer set displayCustomizer value false in config.js. -->
|
||||
<!-- <script src="/vendor/js/template-customizer.js"></script> -->
|
||||
<!--? Config: Mandatory theme config file contain global vars & default theme options, Set your preferred theme option in this file. -->
|
||||
<script src="/js/config.js"></script>
|
||||
|
||||
<!-- Helpers -->
|
||||
<script src="/vendor/js/helpers.js"></script>
|
||||
<!--! Template customizer & Theme config files MUST be included after core stylesheets and helpers.js in the <head> section -->
|
||||
<!--? Template customizer: To hide customizer set displayCustomizer value false in config.js. -->
|
||||
<script src="/vendor/js/template-customizer.js"></script>
|
||||
<!--? Config: Mandatory theme config file contain global vars & default theme options, Set your preferred theme option in this file. -->
|
||||
<script src="/js/config.js"></script>
|
||||
<!-- Include the highlight.js library -->
|
||||
<link href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.9.0/styles/atom-one-dark.min.css" rel="stylesheet" />
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.9.0/highlight.min.js"></script>
|
||||
</head>
|
||||
|
||||
<!-- Include the highlight.js library -->
|
||||
<link href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.9.0/styles/atom-one-dark.min.css"
|
||||
rel="stylesheet">
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.9.0/highlight.min.js"></script>
|
||||
</head>
|
||||
<body>
|
||||
<div id="app"></div>
|
||||
|
||||
<body>
|
||||
<div id="app"></div>
|
||||
<!-- Core JS -->
|
||||
<!-- build:js assets/vendor/js/core.js -->
|
||||
<script src="/vendor/libs/jquery/jquery.js"></script>
|
||||
<script src="/vendor/libs/popper/popper.js"></script>
|
||||
<script src="/vendor/js/bootstrap.js"></script>
|
||||
<script src="/vendor/libs/perfect-scrollbar/perfect-scrollbar.js"></script>
|
||||
<script src="/vendor/libs/hammer/hammer.js"></script>
|
||||
<script src="/vendor/libs/i18n/i18n.js"></script>
|
||||
<script src="/vendor/libs/typeahead-js/typeahead.js"></script>
|
||||
<!-- <script src="/vendor/js/menu.js"></script> -->
|
||||
<!-- endbuild -->
|
||||
|
||||
<!-- Core JS -->
|
||||
<!-- build:js assets/vendor/js/core.js -->
|
||||
<script src="/vendor/libs/jquery/jquery.js"></script>
|
||||
<script src="/vendor/libs/popper/popper.js"></script>
|
||||
<script src="/vendor/js/bootstrap.js"></script>
|
||||
<script src="/vendor/libs/perfect-scrollbar/perfect-scrollbar.js"></script>
|
||||
<script src="/vendor/libs/hammer/hammer.js"></script>
|
||||
<script src="/vendor/libs/i18n/i18n.js"></script>
|
||||
<script src="/vendor/libs/typeahead-js/typeahead.js"></script>
|
||||
<!-- <script src="/vendor/js/menu.js"></script> -->
|
||||
<!-- endbuild -->
|
||||
<!-- Vendors JS -->
|
||||
<script src="/vendor/libs/apex-charts/apexcharts.js"></script>
|
||||
<!-- Main JS -->
|
||||
<!-- <script src="/js/main.js"></script> -->
|
||||
<!-- Page JS -->
|
||||
<!-- <script src="/js/dashboards-analytics.js"></script> -->
|
||||
|
||||
<!-- Vendors JS -->
|
||||
<script src="/vendor/libs/apex-charts/apexcharts.js"></script>
|
||||
<!-- Main JS -->
|
||||
<!-- <script src="/js/main.js"></script> -->
|
||||
<!-- Page JS -->
|
||||
<!-- <script src="/js/dashboards-analytics.js"></script> -->
|
||||
|
||||
<script type="module" src="/src/main.js"></script>
|
||||
</body>
|
||||
|
||||
</html>
|
||||
<script type="module" src="/src/main.js"></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@ -4,9 +4,10 @@
|
||||
"title": "타이틀1",
|
||||
"content": "헌법재판소가 윤석열 대통령 탄핵심판 사건의 첫 변론 준비 기일을 27일 오후 2시에 연다고 밝혔다. 헌재는 이번 사건의 주심 배당도 마쳤지만 비공개 원칙에 따라 공개하지 않기로 했다.이진 헌재 공보관은 16일 언론브리핑에서 “(윤 대통령 탄핵 사건을) 변론 준비 절차에 회부하고, 1차 변론 준비 기일을 27일 오후 2시로 지정했다”고 밝혔다. ",
|
||||
"date": "2024.12.16 18:01",
|
||||
"img": "https://picsum.photos/id/21/250/250",
|
||||
"img": "https://picsum.photos/id/21/229/229",
|
||||
"viewCount": 10,
|
||||
"cmtCount": 2
|
||||
"cmtCount": 2,
|
||||
"type": 1
|
||||
},
|
||||
{
|
||||
"id": 2,
|
||||
@ -14,14 +15,16 @@
|
||||
"content": "헌법재판소가 윤석열 대통령 탄핵심판 사건의 첫 변론 준비 기일을 27일 오후 2시에 연다고 밝혔다. 헌재는 이번 사건의 주심 배당도 마쳤지만 비공개 원칙에 따라 공개하지 않기로 했다.이진 헌재 공보관은 16일 언론브리핑에서 “(윤 대통령 탄핵 사건을) 변론 준비 절차에 회부하고, 1차 변론 준비 기일을 27일 오후 2시로 지정했다”고 밝혔다. 이어 “변론 준비 기일에서 검찰과 경찰 등의 수사기록을 조기에 확보하기로 했다”고 덧붙였다. 헌법재판관들은 이날 오전 10시에 재판관 회의를 열고 이같은 내용을 결정했다.",
|
||||
"date": "2024.12.16 18:02",
|
||||
"viewCount": 10,
|
||||
"cmtCount": 2
|
||||
"cmtCount": 2,
|
||||
"type": 2
|
||||
},
|
||||
{
|
||||
"id": 3,
|
||||
"title": "타이틀3",
|
||||
"content": "헌법재판소가 윤석열 대통령 탄핵심판 사건의 첫 변론 준비 기일을 27일 오후 2시에 연다고 밝혔다. 헌재는 이번 사건의 주심 배당도 마쳤지만 비공개 원칙에 따라 공개하지 않기로 했다.이진 헌재 공보관은 16일 언론브리핑에서 “(윤 대통령 탄핵 사건을) 변론 준비 절차에 회부하고, 1차 변론 준비 기일을 27일 오후 2시로 지정했다”고 밝혔다. 이어 “변론 준비 기일에서 검찰과 경찰 등의 수사기록을 조기에 확보하기로 했다”고 덧붙였다. 헌법재판관들은 이날 오전 10시에 재판관 회의를 열고 이같은 내용을 결정했다.",
|
||||
"date": "2024.12.16 18:03",
|
||||
"img": "https://picsum.photos/id/23/250/250"
|
||||
"img": "https://picsum.photos/id/23/250/250",
|
||||
"type": 2
|
||||
},
|
||||
{
|
||||
"id": 4,
|
||||
@ -30,42 +33,48 @@
|
||||
"date": "2024.12.16 18:04",
|
||||
"img": "https://picsum.photos/id/24/250/250",
|
||||
"viewCount": 100,
|
||||
"cmtCount": 22
|
||||
"cmtCount": 22,
|
||||
"type": 3
|
||||
},
|
||||
{
|
||||
"id": 5,
|
||||
"title": "타이틀5",
|
||||
"content": "헌법재판소가 윤석열 대통령 탄핵심판 사건의 첫 변론 준비 기일을 27일 오후 2시에 연다고 밝혔다. 헌재는 이번 사건의 주심 배당도 마쳤지만 비공개 원칙에 따라 공개하지 않기로 했다.이진 헌재 공보관은 16일 언론브리핑에서 “(윤 대통령 탄핵 사건을) 변론 준비 절차에 회부하고, 1차 변론 준비 기일을 27일 오후 2시로 지정했다”고 밝혔다. 이어 “변론 준비 기일에서 검찰과 경찰 등의 수사기록을 조기에 확보하기로 했다”고 덧붙였다. 헌법재판관들은 이날 오전 10시에 재판관 회의를 열고 이같은 내용을 결정했다.",
|
||||
"date": "2024.12.16 18:05",
|
||||
"img": "https://picsum.photos/id/25/250/250"
|
||||
"img": "https://picsum.photos/id/25/250/250",
|
||||
"type": 3
|
||||
},
|
||||
{
|
||||
"id": 6,
|
||||
"title": "타이틀6",
|
||||
"content": "헌법재판소가 윤석열 대통령 탄핵심판 사건의 첫 변론 준비 기일을 27일 오후 2시에 연다고 밝혔다. 헌재는 이번 사건의 주심 배당도 마쳤지만 비공개 원칙에 따라 공개하지 않기로 했다.이진 헌재 공보관은 16일 언론브리핑에서 “(윤 대통령 탄핵 사건을) 변론 준비 절차에 회부하고, 1차 변론 준비 기일을 27일 오후 2시로 지정했다”고 밝혔다. 이어 “변론 준비 기일에서 검찰과 경찰 등의 수사기록을 조기에 확보하기로 했다”고 덧붙였다. 헌법재판관들은 이날 오전 10시에 재판관 회의를 열고 이같은 내용을 결정했다.",
|
||||
"date": "2024.12.16 18:06",
|
||||
"img": "https://picsum.photos/id/26/250/250"
|
||||
"img": "https://picsum.photos/id/26/250/250",
|
||||
"type": 2
|
||||
},
|
||||
{
|
||||
"id": 7,
|
||||
"title": "타이틀7",
|
||||
"content": "헌법재판소가 윤석열 대통령 탄핵심판 사건의 첫 변론 준비 기일을 27일 오후 2시에 연다고 밝혔다. 헌재는 이번 사건의 주심 배당도 마쳤지만 비공개 원칙에 따라 공개하지 않기로 했다.이진 헌재 공보관은 16일 언론브리핑에서 “(윤 대통령 탄핵 사건을) 변론 준비 절차에 회부하고, 1차 변론 준비 기일을 27일 오후 2시로 지정했다”고 밝혔다. 이어 “변론 준비 기일에서 검찰과 경찰 등의 수사기록을 조기에 확보하기로 했다”고 덧붙였다. 헌법재판관들은 이날 오전 10시에 재판관 회의를 열고 이같은 내용을 결정했다.",
|
||||
"date": "2024.12.16 18:07",
|
||||
"img": "https://picsum.photos/id/27/250/250"
|
||||
"img": "https://picsum.photos/id/27/250/250",
|
||||
"type": 2
|
||||
},
|
||||
{
|
||||
"id": 8,
|
||||
"title": "타이틀8",
|
||||
"content": "헌법재판소가 윤석열 대통령 탄핵심판 사건의 첫 변론 준비 기일을 27일 오후 2시에 연다고 밝혔다. 헌재는 이번 사건의 주심 배당도 마쳤지만 비공개 원칙에 따라 공개하지 않기로 했다.이진 헌재 공보관은 16일 언론브리핑에서 “(윤 대통령 탄핵 사건을) 변론 준비 절차에 회부하고, 1차 변론 준비 기일을 27일 오후 2시로 지정했다”고 밝혔다. 이어 “변론 준비 기일에서 검찰과 경찰 등의 수사기록을 조기에 확보하기로 했다”고 덧붙였다. 헌법재판관들은 이날 오전 10시에 재판관 회의를 열고 이같은 내용을 결정했다.",
|
||||
"date": "2024.12.16 18:08",
|
||||
"img": "https://picsum.photos/id/28/250/250"
|
||||
"img": "https://picsum.photos/id/28/250/250",
|
||||
"type": 2
|
||||
},
|
||||
{
|
||||
"id": 9,
|
||||
"title": "타이틀9",
|
||||
"content": "헌법재판소가 윤석열 대통령 탄핵심판 사건의 첫 변론 준비 기일을 27일 오후 2시에 연다고 밝혔다. 헌재는 이번 사건의 주심 배당도 마쳤지만 비공개 원칙에 따라 공개하지 않기로 했다.이진 헌재 공보관은 16일 언론브리핑에서 “(윤 대통령 탄핵 사건을) 변론 준비 절차에 회부하고, 1차 변론 준비 기일을 27일 오후 2시로 지정했다”고 밝혔다. 이어 “변론 준비 기일에서 검찰과 경찰 등의 수사기록을 조기에 확보하기로 했다”고 덧붙였다. 헌법재판관들은 이날 오전 10시에 재판관 회의를 열고 이같은 내용을 결정했다.",
|
||||
"date": "2024.12.16 18:09",
|
||||
"img": "https://picsum.photos/id/29/250/250"
|
||||
"img": "https://picsum.photos/id/29/229/229",
|
||||
"type": 2
|
||||
},
|
||||
{
|
||||
"id": 10,
|
||||
@ -74,34 +83,7 @@
|
||||
"date": "2024.12.16 18:10",
|
||||
"img": "https://picsum.photos/id/210/250/250",
|
||||
"viewCount": 22,
|
||||
"cmtCount": 33
|
||||
},
|
||||
{
|
||||
"id": 11,
|
||||
"title": "타이틀11",
|
||||
"content": "헌법재판소가 윤석열 대통령 탄핵심판 사건의 첫 변론 준비 기일을 27일 오후 2시에 연다고 밝혔다. 헌재는 이번 사건의 주심 배당도 마쳤지만 비공개 원칙에 따라 공개하지 않기로 했다.이진 헌재 공보관은 16일 언론브리핑에서 “(윤 대통령 탄핵 사건을) 변론 준비 절차에 회부하고, 1차 변론 준비 기일을 27일 오후 2시로 지정했다”고 밝혔다. 이어 “변론 준비 기일에서 검찰과 경찰 등의 수사기록을 조기에 확보하기로 했다”고 덧붙였다. 헌법재판관들은 이날 오전 10시에 재판관 회의를 열고 이같은 내용을 결정했다.",
|
||||
"date": "2024.12.16 18:11",
|
||||
"img": "https://picsum.photos/id/211/250/250"
|
||||
},
|
||||
{
|
||||
"id": 12,
|
||||
"title": "타이틀12",
|
||||
"content": "헌법재판소가 윤석열 대통령 탄핵심판 사건의 첫 변론 준비 기일을 27일 오후 2시에 연다고 밝혔다. 헌재는 이번 사건의 주심 배당도 마쳤지만 비공개 원칙에 따라 공개하지 않기로 했다.이진 헌재 공보관은 16일 언론브리핑에서 “(윤 대통령 탄핵 사건을) 변론 준비 절차에 회부하고, 1차 변론 준비 기일을 27일 오후 2시로 지정했다”고 밝혔다. 이어 “변론 준비 기일에서 검찰과 경찰 등의 수사기록을 조기에 확보하기로 했다”고 덧붙였다. 헌법재판관들은 이날 오전 10시에 재판관 회의를 열고 이같은 내용을 결정했다.",
|
||||
"date": "2024.12.16 18:12",
|
||||
"img": "https://picsum.photos/id/212/250/250"
|
||||
},
|
||||
{
|
||||
"id": 13,
|
||||
"title": "타이틀13",
|
||||
"content": "헌법재판소가 윤석열 대통령 탄핵심판 사건의 첫 변론 준비 기일을 27일 오후 2시에 연다고 밝혔다. 헌재는 이번 사건의 주심 배당도 마쳤지만 비공개 원칙에 따라 공개하지 않기로 했다.이진 헌재 공보관은 16일 언론브리핑에서 “(윤 대통령 탄핵 사건을) 변론 준비 절차에 회부하고, 1차 변론 준비 기일을 27일 오후 2시로 지정했다”고 밝혔다. 이어 “변론 준비 기일에서 검찰과 경찰 등의 수사기록을 조기에 확보하기로 했다”고 덧붙였다. 헌법재판관들은 이날 오전 10시에 재판관 회의를 열고 이같은 내용을 결정했다.",
|
||||
"date": "2024.12.16 18:13",
|
||||
"img": "https://picsum.photos/id/213/250/250"
|
||||
},
|
||||
{
|
||||
"id": 14,
|
||||
"title": "타이틀14",
|
||||
"content": "헌법재판소가 윤석열 대통령 탄핵심판 사건의 첫 변론 준비 기일을 27일 오후 2시에 연다고 밝혔다. 헌재는 이번 사건의 주심 배당도 마쳤지만 비공개 원칙에 따라 공개하지 않기로 했다.이진 헌재 공보관은 16일 언론브리핑에서 “(윤 대통령 탄핵 사건을) 변론 준비 절차에 회부하고, 1차 변론 준비 기일을 27일 오후 2시로 지정했다”고 밝혔다. 이어 “변론 준비 기일에서 검찰과 경찰 등의 수사기록을 조기에 확보하기로 했다”고 덧붙였다. 헌법재판관들은 이날 오전 10시에 재판관 회의를 열고 이같은 내용을 결정했다.",
|
||||
"date": "2024.12.16 18:14",
|
||||
"img": "https://picsum.photos/id/214/250/250"
|
||||
"cmtCount": 33,
|
||||
"type": 3
|
||||
}
|
||||
]
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
<template>
|
||||
<ul class="list-unstyled">
|
||||
<li>
|
||||
<BoardProfile profileName=곤데리 :showDetail="false" />
|
||||
<BoardProfile profileName=곤데리 :showDetail="false" :author="true" />
|
||||
<div class="mt-2">저도 궁금합니다.</div>
|
||||
<button type="button" class="btn btn-text-primary" @click="toggleComment">답변달기</button>
|
||||
<BoardComentArea v-if="comment" />
|
||||
|
||||
@ -27,7 +27,7 @@
|
||||
</div>
|
||||
<!-- 좋아요 섹션 -->
|
||||
<div class="text-center">
|
||||
<BoardRecommendBtn />
|
||||
<BoardRecommendBtn :bigBtn="true" />
|
||||
</div>
|
||||
</template>
|
||||
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
<template>
|
||||
<div class="d-flex align-items-center">
|
||||
<div class="d-flex align-items-center flex-wrap">
|
||||
<div class="d-flex align-items-center">
|
||||
<div class="avatar me-2" v-if="unknown">
|
||||
<img src="/img/avatars/2.png" alt="Avatar" class="rounded-circle" />
|
||||
@ -22,7 +22,7 @@
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="ms-auto">
|
||||
<div class="ms-auto btn-area">
|
||||
<template v-if="showDetail">
|
||||
<button class="btn btn-label-primary btn-icon">
|
||||
<i class='bx bx-edit-alt'></i>
|
||||
@ -32,6 +32,14 @@
|
||||
</button>
|
||||
</template>
|
||||
<template v-else>
|
||||
<template v-if="author">
|
||||
<button class="btn author btn-label-primary btn-icon">
|
||||
<i class='bx bx-edit-alt'></i>
|
||||
</button>
|
||||
<button class="btn author btn-label-primary btn-icon">
|
||||
<i class='bx bx-trash' ></i>
|
||||
</button>
|
||||
</template>
|
||||
<BoardRecommendBtn :likeClicked="true" :dislikeClicked="false"/>
|
||||
</template>
|
||||
</div>
|
||||
@ -53,6 +61,10 @@ defineProps({
|
||||
showDetail : {
|
||||
type: Boolean,
|
||||
default: true,
|
||||
},
|
||||
author : {
|
||||
type: Boolean,
|
||||
default: false,
|
||||
}
|
||||
});
|
||||
|
||||
@ -66,5 +78,16 @@ defineProps({
|
||||
|
||||
.ms-auto button + button {
|
||||
margin-left: 5px;
|
||||
}
|
||||
}
|
||||
|
||||
.btn.author {
|
||||
height: 30px;
|
||||
}
|
||||
|
||||
@media screen and (max-width:450px) {
|
||||
.btn-area {
|
||||
margin-top: 10px;
|
||||
width: 100%;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
@ -1,8 +1,8 @@
|
||||
<template>
|
||||
<button class="btn btn-label-primary btn-icon" :class="likeClicked ? 'clicked' : '' ">
|
||||
<button class="btn btn-label-primary btn-icon" :class="likeClicked ? 'clicked' : '', bigBtn ? 'big' : '' ">
|
||||
<i class="fa-regular fa-thumbs-up"></i> <span class="num">1</span>
|
||||
</button>
|
||||
<button class="btn btn-label-danger btn-icon" :class="dislikeClicked ? 'clicked' : '' ">
|
||||
<button class="btn btn-label-danger btn-icon" :class="dislikeClicked ? 'clicked' : '', bigBtn ? 'big' : '' ">
|
||||
<i class="fa-regular fa-thumbs-down"></i> <span class="num">1</span>
|
||||
</button>
|
||||
</template>
|
||||
@ -16,6 +16,10 @@ defineProps({
|
||||
dislikeClicked : {
|
||||
type : Boolean,
|
||||
default : false,
|
||||
},
|
||||
bigBtn : {
|
||||
type :Boolean,
|
||||
default : false,
|
||||
}
|
||||
});
|
||||
</script>
|
||||
@ -46,4 +50,23 @@ defineProps({
|
||||
.btn-label-primary.clicked span {
|
||||
color : #fff;
|
||||
}
|
||||
|
||||
.btn {
|
||||
width: 55px;
|
||||
height: 30px;
|
||||
}
|
||||
|
||||
.btn.big {
|
||||
width: 70px;
|
||||
height: 70px;
|
||||
font-size: 18px;
|
||||
}
|
||||
|
||||
@media screen and (max-width:450px) {
|
||||
.btn {
|
||||
width: 50px;
|
||||
height: 20px;
|
||||
font-size: 12px;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
@ -1,18 +1,21 @@
|
||||
<template>
|
||||
<div class="" role="button">
|
||||
<div class="card">
|
||||
<div class="d-flex">
|
||||
<div v-if="data.item.img" class="col-3">
|
||||
<img class="card-img card-img-left" :src="data.item.img" alt="" />
|
||||
<div class="d-sm-flex">
|
||||
<div v-if="img">
|
||||
<img class="card-img card-img-left" :src="img" alt="" style="width: 200px; height: 200px; object-fit: cover" />
|
||||
</div>
|
||||
<div lass="col-9">
|
||||
<div class="col">
|
||||
<div class="card-body">
|
||||
<h5 class="card-title">{{ data.item.title }}</h5>
|
||||
<p class="card-text str_wrap">
|
||||
{{ data.item.content }}
|
||||
<h5 class="card-title align-items-center">
|
||||
<slot name="badgeType"></slot>
|
||||
{{ title }}
|
||||
</h5>
|
||||
<p class="card-text str_wrap pt-5">
|
||||
{{ content }}
|
||||
</p>
|
||||
<p class="card-text">
|
||||
<small class="text-muted">{{ data.item.date }}</small>
|
||||
<small class="text-muted">{{ date }}</small>
|
||||
<slot name="optInfo"></slot>
|
||||
</p>
|
||||
</div>
|
||||
@ -23,8 +26,34 @@
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
const data = defineProps(['item']);
|
||||
// const data = defineProps(['item']);
|
||||
const prop = defineProps({
|
||||
title: {
|
||||
type: String,
|
||||
default: '제목',
|
||||
required: true,
|
||||
},
|
||||
content: {
|
||||
type: String,
|
||||
default: '내용',
|
||||
required: true,
|
||||
},
|
||||
date: {
|
||||
type: String,
|
||||
default: 'date',
|
||||
required: true,
|
||||
},
|
||||
img: {
|
||||
type: String,
|
||||
required: false,
|
||||
},
|
||||
});
|
||||
|
||||
const colSetting = () => {
|
||||
img ? 'col-9' : '';
|
||||
};
|
||||
</script>
|
||||
|
||||
<style>
|
||||
.str_wrap {
|
||||
overflow: hidden;
|
||||
|
||||
@ -7,13 +7,13 @@
|
||||
<!-- <li class="page-item prev">
|
||||
<a class="page-link" href="javascript:void(0);"><i class="tf-icon bx bx-chevron-left bx-sm"></i></a>
|
||||
</li> -->
|
||||
<li class="page-item">
|
||||
<li class="page-item active">
|
||||
<a class="page-link" href="javascript:void(0);">1</a>
|
||||
</li>
|
||||
<li class="page-item">
|
||||
<a class="page-link" href="javascript:void(0);">2</a>
|
||||
</li>
|
||||
<li class="page-item active">
|
||||
<li class="page-item">
|
||||
<a class="page-link" href="javascript:void(0);">3</a>
|
||||
</li>
|
||||
<li class="page-item">
|
||||
|
||||
@ -1,12 +1,27 @@
|
||||
<template>
|
||||
<div class="input-group mb-3">
|
||||
<div class="input-group-text">
|
||||
<!-- <input class="form-check-input mt-0" type="checkbox" value="" aria-label="Checkbox for following text input" /> -->
|
||||
<i class="bx bx-search bx-md"></i>
|
||||
</div>
|
||||
<input type="text" class="form-control" placeholder="Search" />
|
||||
<button type="button" class="btn btn-primary">검색</button>
|
||||
<div class="input-group mb-3 d-flex">
|
||||
<input type="text" class="form-control bg-white" placeholder="Search" @change="search" />
|
||||
<button type="button" class="btn btn-primary"><i class="bx bx-search bx-md"></i></button>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup></script>
|
||||
<script setup>
|
||||
import { defineEmits } from 'vue';
|
||||
|
||||
const props = defineProps({
|
||||
maxlength: {
|
||||
type: Number,
|
||||
default: 30,
|
||||
required: false,
|
||||
},
|
||||
});
|
||||
|
||||
const emits = defineEmits(['update:data']);
|
||||
const search = function (event) {
|
||||
//Type Number 일때 maxlength 적용 안됨 방지
|
||||
if (event.target.value.length > props.maxlength) {
|
||||
event.target.value = event.target.value.slice(0, props.maxlength);
|
||||
}
|
||||
emits('update:data', event.target.value);
|
||||
};
|
||||
</script>
|
||||
|
||||
@ -1,22 +1,29 @@
|
||||
<template>
|
||||
<div class="container-xxl flex-grow-1 container-p-y">
|
||||
<search-bar />
|
||||
<search-bar @update:data="search" />
|
||||
|
||||
<div class="row g-3">
|
||||
<div class="mt-8">
|
||||
<router-link to="/board/write">
|
||||
<button type="button" class="btn btn-primary float-end">글쓰기</button>
|
||||
<button class="btn btn-label-primary btn-icon float-end">
|
||||
<i class="bx bx-edit-alt"></i>
|
||||
</button>
|
||||
</router-link>
|
||||
</div>
|
||||
<template v-for="(item, index) in list" :key="item.id">
|
||||
<board-card :item="item" @click="goDetail(item.id)">
|
||||
<board-card :title="item.title" :content="item.content" :img="item.img" :date="item.date" @click="goDetail(item.id)">
|
||||
<template #badgeType>
|
||||
<span v-if="item.type == 1" class="badge rounded-pill bg-label-danger">공지</span>
|
||||
<span v-else-if="item.type == 2" class="badge rounded-pill bg-label-primary">자유</span>
|
||||
<span v-else-if="item.type == 3" class="badge rounded-pill bg-label-success">익명</span>
|
||||
</template>
|
||||
<template #optInfo>
|
||||
<span v-show="item.viewCount" style="padding-left: 10px" class="text-muted"
|
||||
><i class="fa-regular fa-eye"></i> {{ item.viewCount }}</span
|
||||
>
|
||||
<span v-show="item.cmtCount" style="padding-left: 10px" class="text-muted"
|
||||
<small v-show="item.viewCount" style="padding-left: 10px" class="text-muted"
|
||||
><i class="fa-regular fa-eye"></i> {{ item.viewCount }}
|
||||
</small>
|
||||
<small v-show="item.cmtCount" style="padding-left: 10px" class="text-muted"
|
||||
><i class="fa-regular fa-comment-dots"></i> {{ item.cmtCount }}
|
||||
</span>
|
||||
</small>
|
||||
</template>
|
||||
</board-card>
|
||||
</template>
|
||||
@ -36,11 +43,16 @@
|
||||
import dummy from '@a/boardDummy.json';
|
||||
|
||||
const list = ref(dummy);
|
||||
const searchText = ref('');
|
||||
|
||||
/** 상세로 이동 */
|
||||
const goDetail = idx => {
|
||||
router.push(`/board/get/${idx}`);
|
||||
};
|
||||
|
||||
const search = e => {
|
||||
console.log('검색:', e);
|
||||
};
|
||||
</script>
|
||||
|
||||
<style></style>
|
||||
|
||||
Loading…
Reference in New Issue
Block a user