yjryu / KERIS star
류윤주 류윤주 2023-11-09
231109 류윤주 상세페이지 이전글 다음글 추가
@af15f8086dcfaafdb78a9e026d27dbbfa82e9995
client/resources/css/common.css
--- client/resources/css/common.css
+++ client/resources/css/common.css
@@ -67,6 +67,43 @@
   box-shadow: 2px 2px 2px #33333300 !important;
 }
 
+/* table 공통 */
+th {
+  padding: 1.5rem;
+  color: white;
+  background-color: #007aff;
+  font-size: 1.5rem;
+}
+td {
+  background-color: white;
+  padding: 2rem;
+  border-top: 1px solid rgb(187, 187, 187);
+  text-align: center;
+  font-size: 1.5rem;
+  font-weight: 500;
+  color: #333;
+  cursor: pointer;
+  font-family: "Pretendard-Regular";
+}
+
+.insert-table th,
+.mail-table th{
+  background-color: transparent;
+  color: #007aff;
+}
+
+.insert-table td,
+.mail-table td {
+  border-top: 0;
+}
+
+.category-zone{
+  color: #007aff;
+  background-color: #c8e3ff;
+  padding: 5px;
+  border-radius: 3px;
+}
+
 /* 게시판 상세보기 */
 .insert-table td {
   text-align: left;
@@ -75,7 +112,6 @@
 .title-zone {
   background-color: #eee;
   border-bottom: 1px solid #007aff;
-  border-top: 1px solid #007aff;
 }
 
 .post-title {
@@ -87,13 +123,30 @@
 }
 
 .writer,
-.view {
+.view,
+.next,
+.prev {
   color: #007aff;
   padding: 10px;
 }
 
 .viewer {
   min-height: 388px;
+}
+
+.article-list{
+  padding: 20px 0;
+}
+
+.article-list ul{
+  border-top: 1px solid #007aff;
+  border-bottom: 1px solid #007aff;
+}
+
+.article-list ul li{
+  padding: 10px 0;
+  background: #eee;
+  border-bottom: 1px solid #aaa;
 }
 
 /* 버튼 */
@@ -293,39 +346,3 @@
   padding: 15px 0;
 }
 
-/* table 공통 */
-th {
-  padding: 1.5rem;
-  color: white;
-  background-color: #007aff;
-  font-size: 1.5rem;
-}
-td {
-  background-color: white;
-  padding: 2rem;
-  border-top: 1px solid rgb(187, 187, 187);
-  text-align: center;
-  font-size: 1.5rem;
-  font-weight: 500;
-  color: #333;
-  cursor: pointer;
-  font-family: "Pretendard-Regular";
-}
-
-.insert-table th,
-.mail-table th{
-  background-color: transparent;
-  color: #007aff;
-}
-
-.insert-table td,
-.mail-table td {
-  border-top: 0;
-}
-
-.category-zone{
-  color: #007aff;
-  background-color: #c8e3ff;
-  padding: 5px;
-  border-radius: 3px;
-}
(No newline at end of file)
client/resources/css/reset.css
--- client/resources/css/reset.css
+++ client/resources/css/reset.css
@@ -67,7 +67,8 @@
   height: 100%;
   border-collapse: collapse;
   font-size: 1.4rem;
-  border-bottom: 2px solid #d6eaff;
+  border-top: 2px solid #007aff;
+  border-bottom: 2px solid #007aff;
 }
 
 input[type="text"],
client/views/component/pagination/PaginationButton.vue
--- client/views/component/pagination/PaginationButton.vue
+++ client/views/component/pagination/PaginationButton.vue
@@ -3,7 +3,7 @@
 		<div class="pagination-button-type">
 			<a class="first-page" @click="excute(1)" title="첫 번 째 페이지로 이동"></a>
 			<a class="prev" @click="excute(currentPage - 1)" title="이전 페이지로 이동"></a>
-			<a @click="excute(i)" v-for="i in createRange" :class="{'active': currentPage == i}">{{i}}</a>
+			<a @click="excute(i)" v-for="i in createRange" :class="{ 'active': currentPage == i }">{{ i }}</a>
 			<a class="next" @click="excute(currentPage + 1)" title="다음 페이지로 이동"></a>
 			<a class="end-page" @click="excute(maxEndPage)" title="마지막 페이지로 이동"></a>
 		</div>
@@ -11,148 +11,158 @@
 </template>
 
 <script>
-	export default {
-		/* model: {
-			prop: 'currentPage',
-			event: 'current-page-change'
-		}, */
-		props: {
-			currentPage: {
-				type: Number,
-				default: 0
-			},
-			perPage: {
-				type: Number,
-				default: 10
-			},
-			totalCount: {
-				type: Number,
-				default: 0
-			},
-			maxRange: {
-				type: Number,
-				default: 5
-			},
-			click: Function
+export default {
+	props: {
+		currentPage: {
+			type: Number,
+			default: 0
 		},
-		emits: ['update:currentPage'],
-		data: function () {
-			return {
-				//data
-			}
+		perPage: {
+			type: Number,
+			default: 10
 		},
-		methods: {
-			excute: function (i) {
-				if (i >= 1 && i <= this.maxEndPage) {
-					if (i != this.currentPage) {
-						this.$emit('update:currentPage', i);//부모 currentPage에 선택한 page번호 할당
-						this.click(i);//부모 function 실행
-					} else {
-						return;
-					}
-				} else {
-					alert('이동할 페이지가 없습니다.');
-				}
-			}
+		totalCount: {
+			type: Number,
+			default: 0
 		},
-		computed: {
-			startPage: function () {
-				return Math.floor((this.currentPage - 1) / this.maxRange) * this.maxRange + 1;
-			},
-			endPage: function () {
-				if (this.maxEndPage < this.currentEndPage) {
-					return this.maxEndPage;
-				} else {
-					return this.currentEndPage;
-				}
-			},
-			currentEndPage: function () {
-				return this.maxRange * Math.ceil((this.currentPage / this.maxRange));
-			},
-			maxEndPage: function () {
-				return Math.ceil(this.totalCount / this.perPage);
-			},
-			createRange: function () {
-				var range = [];
-				for (var i = this.startPage; i <= this.endPage; i++) {
-					range.push(i);
-				}
-				return range;
-			}
+		maxRange: {
+			type: Number,
+			default: 5
 		},
-		watch: {
-
-		},
-		//beforeCreate: function () {},
-		//created: function () {},
-		//beforeUpdate: function () {},
-		//updated: function () {},
-		mounted: function () {
+		click: Function
+	},
+	emits: ['update:currentPage'],
+	data: function () {
+		return {
+			//data
 		}
+	},
+	methods: {
+		excute: function (i) {
+			if (i >= 1 && i <= this.maxEndPage) {
+				if (i != this.currentPage) {
+					this.$emit('update:currentPage', i);//부모 currentPage에 선택한 page번호 할당
+					this.click(i);//부모 function 실행
+				} else {
+					return;
+				}
+			} else {
+				alert('이동할 페이지가 없습니다.');
+			}
+		}
+	},
+	computed: {
+		startPage: function () {
+			return Math.floor((this.currentPage - 1) / this.maxRange) * this.maxRange + 1;
+		},
+		endPage: function () {
+			if (this.maxEndPage < this.currentEndPage) {
+				return this.maxEndPage;
+			} else {
+				return this.currentEndPage;
+			}
+		},
+		currentEndPage: function () {
+			return this.maxRange * Math.ceil((this.currentPage / this.maxRange));
+		},
+		maxEndPage: function () {
+			return Math.ceil(this.totalCount / this.perPage);
+		},
+		createRange: function () {
+			var range = [];
+			for (var i = this.startPage; i <= this.endPage; i++) {
+				range.push(i);
+			}
+			return range;
+		}
+	},
+	watch: {
+
+	},
+	//beforeCreate: function () {},
+	//created: function () {},
+	//beforeUpdate: function () {},
+	//updated: function () {},
+	mounted: function () {
 	}
+}
 </script>
 
 <style scoped>
-	/*PAGINATION NEW START*/
-	.pagination-button-type
-	{
-		position: relative;
-		display: inline-block;
-		left:50%;
-		transform: translate(-50%);
+/*PAGINATION NEW START*/
+.component-pagination {
+	padding: 30px 0;
+}
+
+.pagination-button-type {
+	display: flex;
+    align-items: center;
+    justify-content: center;
+}
+
+.pagination-button-type a {
+	display: inline-block;
+	width: 40px;
+	height: 40px;
+	padding: 10px;
+	text-align: center;
+	line-height: 20px;
+	cursor: pointer;
+}
+
+/* 정우추가 */
+.pagination-button-type a.prev:after {
+	content: "\003C";
+	font-family: 'KoPub_Dotum';
+	font-weight: 900;
+}
+
+.pagination-button-type a.next:after {
+	content: "\003E";
+	font-family: 'KoPub_Dotum';
+	font-weight: 900;
+}
+
+.pagination-button-type a.first-page:after {
+	content: "\003C\003C";
+	font-family: 'KoPub_Dotum';
+	font-weight: 900;
+}
+
+.pagination-button-type a.end-page:after {
+	content: "\003E\003E";
+	font-family: 'KoPub_Dotum';
+	font-weight: 900;
+}
+
+.pagination-button-type a.active {
+	background-color: #3a84fb;
+	border: 1px solid #1b5ac2;
+	color: white;
+	cursor: default !important;
+	border-radius: 50px;
+}
+
+.pagination-button-type a:hover:not(.active) {
+	background-color: #5a81fa;
+	color: white;
+	border-radius: 50px;
+}
+
+.pagination-button-type a:first-child {
+	border-top-left-radius: 0px;
+	border-bottom-left-radius: 0px;
+}
+
+.pagination-button-type a:last-child {
+	border-top-right-radius: 0px;
+	border-bottom-right-radius: 0px;
+}
+
+/*PAGINATION NEW END*/
+
+@media screen and (max-width:479px) {
+	.pagination-button-type a {
+		margin: 3px;
 	}
-
-	.pagination-button-type a
-	{
-		float: left;
-		padding: 13px 17px;
-		margin: 5px;
-		text-decoration: none;
-		border:1px solid #ccc;
-		color:#333;
-		font-size: 17px;
-		font-family:"nanumgothicOTF";
-		font-weight: 400;
-		cursor: pointer;
-	}
-
-	/* 정우추가 */
-	.pagination-button-type a.prev:after {content: "\003C"; font-family: 'KoPub_Dotum'; font-weight: 900;}
-	.pagination-button-type a.next:after {content: "\003E"; font-family: 'KoPub_Dotum'; font-weight: 900;}
-
-	.pagination-button-type a.first-page:after {content: "\003C\003C"; font-family: 'KoPub_Dotum'; font-weight: 900;}
-	.pagination-button-type a.end-page:after {content: "\003E\003E"; font-family: 'KoPub_Dotum'; font-weight: 900;}
-
-	.pagination-button-type a.active
-	{
-		background-color: #1b5ac2;
-		border: 1px solid #1b5ac2;
-		color: white;
-		cursor: default !important;
-	}
-
-	.pagination-button-type a:hover:not(.active)
-	{
-		background-color: #5a81fa;
-		color:white;
-	}
-
-	.pagination-button-type a:first-child
-	{
-		border-top-left-radius: 0px;
-		border-bottom-left-radius: 0px;
-	}
-
-	.pagination-button-type a:last-child
-	{
-		border-top-right-radius: 0px;
-		border-bottom-right-radius: 0px;
-	}
-	/*PAGINATION NEW END*/
-
-	@media screen and (max-width:479px){
-		.pagination-button-type a{
-    margin: 3px;
-  }
-	}
-</style>
(No newline at end of file)
+}</style>
(No newline at end of file)
client/views/pages/admin/databook/DataSelectOne.vue
--- client/views/pages/admin/databook/DataSelectOne.vue
+++ client/views/pages/admin/databook/DataSelectOne.vue
@@ -35,6 +35,12 @@
                         </tr>
                     </tbody>
                 </table>
+                <div class="article-list">
+                    <ul>
+                    <li><span class="next">다음글</span><span></span></li>
+                    <li><span class="prev">이전글</span><span></span></li>
+                </ul>
+                </div>
                 <div class="btn-wrap">
                     <button class="red-btn" @click="postDelete()">삭제</button>
                     <button class="dark-gray-btn" @click="postSelectListPage()">목록</button>
client/views/pages/admin/networking/NetworkingSelectOne.vue
--- client/views/pages/admin/networking/NetworkingSelectOne.vue
+++ client/views/pages/admin/networking/NetworkingSelectOne.vue
@@ -36,6 +36,12 @@
                         </tr>
                     </tbody>
                 </table>
+                <div class="article-list">
+                    <ul>
+                    <li><span class="next">다음글</span><span></span></li>
+                    <li><span class="prev">이전글</span><span></span></li>
+                </ul>
+                </div>
                 <div class="btn-wrap">
                     <button class="red-btn" @click="postDelete()">삭제</button>
                     <button class="dark-gray-btn" @click="postSelectListPage()">목록</button>
client/views/pages/admin/news/NewsSelectOne.vue
--- client/views/pages/admin/news/NewsSelectOne.vue
+++ client/views/pages/admin/news/NewsSelectOne.vue
@@ -11,41 +11,64 @@
                 <table class="insert-table">
                     <tbody>
                         <tr>
-                            <th>제목</th>
-                            <td><input type="text" name="" id="newsTitle"></td>
+                            <td class="title-zone" colspan="2">
+                                <p class="flex"><span class="post-title">{{ post.post_title }}</span><span class="category-zone">카테고리란</span></p>
+                                <p class="flex-end"><span class="writer">작성자</span><span>{{ post.rgtr_id }}</span><span
+                                        class="view">조회수</span><span>{{ post.view_cnt }}</span></p>
+                            </td>
                         </tr>
                         <tr>
-                            <th>내용</th>
-                            <td><textarea name="" id="" cols="30" rows="10"></textarea></td>
+                            <td colspan="2" style="border-bottom: 1px solid #007aff;">
+                                <div id="viewer" ref="viewer" class="viewer"></div>
+                            </td>
+                        </tr>
+                        <tr>
+                            <th style="width: 10%;">첨부파일명</th>
+                            <td>
+                                <div v-if="fileList.length == 0">
+                                    <label>첨부된 파일이 없습니다.</label>
+                                </div>
+                                <ul v-else v-for="(item, idx) in fileList" :key="idx">
+                                    <li @click="downloadFile(item)">{{ item.real_file_nm }}</li>
+                                </ul>
+                            </td>
                         </tr>
                     </tbody>
                 </table>
+                <div class="article-list">
+                    <ul>
+                    <li><span class="next">다음글</span><span></span></li>
+                    <li><span class="prev">이전글</span><span></span></li>
+                </ul>
+                </div>
                 <div class="btn-wrap">
-                    <button class="red-btn" @click="selectList">삭제</button>
-                    <button class="dark-gray-btn" @click="selectList">목록</button>
-                    <button class="blue-btn">수정</button>
+                    <button class="red-btn" @click="postDelete()">삭제</button>
+                    <button class="dark-gray-btn" @click="postSelectListPage()">목록</button>
+                    <button class="blue-btn" @click="postUpdatePage()">수정</button>
                 </div>
             </div>
         </div>
     </div>
 </template>
 <script>
-
+import axios from 'axios';
+import COMMON_UTIL from '../../../../resources/js/commonUtil.js';
+import { useRoute } from 'vue-router';
+import Viewer from '@toast-ui/editor/dist/toastui-editor-viewer';
+import '@toast-ui/editor/dist/toastui-editor.css';
+import '@toast-ui/editor/dist/i18n/ko-kr';
 
 export default {
 
     data() {
         return {};
     },
-    methods: {
-        selectList:function(){
-            this.$router.push({ path: '/adm/newsSelectList.page'});
-        }
-    },
+    methods: {},
     watch: {},
     computed: {},
     components: {},
     mounted() {
+      
     }
 };
 </script>
@@ -58,17 +81,21 @@
 }
 
 .insert-table {
-    border-top: 3px solid #ddd;
-    border-bottom: 3px solid #ddd;
+    border-top: 2px solid #007aff;
+    border-bottom: 2px solid #007aff;
 }
 
-textarea{
+
+
+textarea {
     width: 100%;
     height: 450px;
 }
 
 .dark-gray-btn,
-.red-btn  {
+.red-btn {
     margin-right: 5px;
 }
-</style>
+
+
+</style>
(No newline at end of file)
client/views/pages/admin/notice/NoticeSelectOne.vue
--- client/views/pages/admin/notice/NoticeSelectOne.vue
+++ client/views/pages/admin/notice/NoticeSelectOne.vue
@@ -10,10 +10,6 @@
             <div class="content-wrap">
                 <table class="insert-table">
                     <tbody>
-                        <!-- <tr>
-                            <th>제목</th>
-                            <td><input type="text" name="" id="newsTitle"></td>
-                        </tr> -->
                         <tr>
                             <td class="title-zone" colspan="2">
                                 <p class="flex"><span class="post-title">{{ post.post_title }}</span></p>
@@ -21,10 +17,6 @@
                                         class="view">조회수</span><span>{{ post.view_cnt }}</span></p>
                             </td>
                         </tr>
-                        <!-- <tr>
-                            <th>내용</th>
-                            <td><textarea name="" id="" cols="30" rows="10"></textarea></td>
-                        </tr> -->
                         <tr>
                             <td colspan="2" style="border-bottom: 1px solid #007aff;">
                                 <div id="viewer" ref="viewer" class="viewer"></div>
@@ -43,6 +35,12 @@
                         </tr>
                     </tbody>
                 </table>
+                <div class="article-list">
+                    <ul>
+                    <li><span class="next">다음글</span><span></span></li>
+                    <li><span class="prev">이전글</span><span></span></li>
+                </ul>
+                </div>
                 <div class="btn-wrap">
                     <button class="red-btn" @click="postDelete()">삭제</button>
                     <button class="dark-gray-btn" @click="postSelectListPage()">목록</button>
client/views/pages/admin/user/UserSelectList.vue
--- client/views/pages/admin/user/UserSelectList.vue
+++ client/views/pages/admin/user/UserSelectList.vue
@@ -38,6 +38,11 @@
                                 </tr>
                             </tbody>
                         </table>
+                        <div class="flex-center">
+                            <PaginationButton v-if="userListCount > 0" v-model:currentPage="userListSearch.currentPage"
+                        :per-page="userListSearch.perPage" :total-count="userListCount" :max-range="5"
+                        :click="userSelectList" />
+                        </div>
                     </div>
                     <div v-show="currentTab == 1">
                         <table>
@@ -92,9 +97,6 @@
                         </table>
                         <div class="btn-wrap">
                             <button class="blue-btn" @click="modalType = 'userInsert'">등록</button>
-                        </div>
-                        <div class="flex-center">
-                            <PaginationButton />
                         </div>
                     </div>
                 </div>
client/views/pages/user/join/Join.vue
--- client/views/pages/user/join/Join.vue
+++ client/views/pages/user/join/Join.vue
@@ -79,8 +79,10 @@
                             <span>담당자 명함</span>
                         </div>
                         <div class="join-sub-input join-imgbox">
-                            <label for="businessCardImg" type="file" accept="image/*" ref="businessCardImg"
-                                @change="businessCardUpload">90x50</label>
+                            <label for="businessCardImg" type="file" accept="image/*" ref="businessCardImg">
+                                90x50
+                                <img v-if="cardPreview" :src="cardPreview" />
+                            </label>
                             <input type="file" accept="image/*" name="imgFile" id="businessCardImg" ref="businessCardImg"
                                 @change="businessCardUpload" style="display: none;" />
                         </div>
@@ -122,7 +124,6 @@
 
                                     <div class="uploaded-box-radius">
                                         <p>LOGO</p>
-                                        <!-- <img v-if="logo_img" :src="logo_img" alt="Selected Image"> -->
                                         <img v-if="logoPreview" :src="logoPreview" />
                                     </div>
                                     <div class="btn-upload-join" @click="openFileInput">
@@ -139,9 +140,9 @@
                                     <span>사업자등록번호</span>
                                 </div>
                                 <div>
-                                    <input type="text" v-model="company.company_id" @blur="validateBusinessNumber" class="id-input"
-                                        placeholder="사업자등록번호를 입력하세요." />
-                                        <p v-show="businessNumber != null">{{ businessNumber }}</p>
+                                    <input type="text" v-model="company.company_id" @blur="validateBusinessNumber"
+                                        class="id-input" placeholder="사업자등록번호를 입력하세요." />
+                                    <p v-show="businessNumber != null">{{ businessNumber }}</p>
                                 </div>
                                 <div>
                                     <button @click="businessNumCheck" class="blue-btn">중복확인</button>
@@ -188,7 +189,6 @@
                                 <span>회사소개글</span>
                             </div>
                             <div class="join-sub-input">
-                                <!-- <input type="text" v-model="company['company_info']"> -->
                                 <textarea name="smart" id="smart" v-model="company['company_info']"></textarea>
                             </div>
                         </div>
@@ -374,6 +374,7 @@
             selectedImage: null,
             oEditors: [],
             logoPreview: null,
+            cardPreview: null,
             combinedUserId: '',
             showModal: false,
             showModal2: false,
@@ -385,7 +386,6 @@
         }
     },
     methods: {
-
         // validateID
         validateID() {
             if (COMMON_UTIL.idCheck(this.user.user_id) === false) {
@@ -394,10 +394,10 @@
                 this.validateId = '';
             }
         },
-        validateBusinessNumber(){
+        validateBusinessNumber() {
             if (COMMON_UTIL.businessNumber(this.company.company_id) === false) {
                 this.businessNumber = '사업자등록번호를 다시 한번 확인해주세요.';
-            }else {
+            } else {
                 this.businessNumber = '';
             }
         },
@@ -409,20 +409,6 @@
         },
         removeTag(index) {
             this.tags.splice(index, 1);
-        },
-
-        // 사업자등록번호 모달
-        openModal() {
-            this.showModal = true;
-        },
-        closeModal() {
-            this.showModal = false;
-        },
-        openModal2() {
-            this.showModal2 = true;
-        },
-        closeModal2() {
-            this.showModal2 = false;
         },
         //비밀번호 매칭 확인
         passwordSyncCheck: function () {
@@ -480,7 +466,6 @@
                 alert("중복검사 오류, 다시 시도해주세요.");
             });
         },
-
         //user ID 중복 검사
         userIdCheck: function () {
             const vm = this;
@@ -621,8 +606,8 @@
                 vm.file.append('business_card_img', file);
                 var reader = new FileReader();
                 reader.onload = function (e) {
-                    var output = document.getElementById("businessCardImg");
-                    output.src = reader.result;
+                    //var output = document.getElementById("businessCardImg");
+                    vm.logoPreview = reader.result;
                 };
                 reader.readAsDataURL(file);
 
@@ -635,19 +620,6 @@
             }
         },
 
-        // companyProfileUpload: function (e) {
-        //     const vm = this;
-        //     vm.company_profile = new FormData()
-
-        //     for (const file of e.target.files) {
-        //         vm.company_profile.append('company_profile', file);
-        //     }
-        // },
-
-        // 사업자번호 중복 검사
-        businessNumCheck: function () {
-
-        },
         //유효성 검사
         joinInsertCheck: function () {
             if (COMMON_UTIL.isEmpty(this.user.user_id) === false) {
@@ -695,24 +667,6 @@
 
         },
 
-        initEditor: function (initData) {
-            // 스마트 에디터 적용
-            // const oEditors = this.oEditors;
-            // nhn.husky.EZCreator.createInIFrame({
-            //     oAppRef: oEditors,
-            //     elPlaceHolder: "smart",
-            //     sSkinURI: "/client/smarteditor2-2.8.2.3/SmartEditor2Skin.html",
-            //     htParams: {
-            //     bSkipXssFilter : true,
-            //     bUseVerticalResizer: true,	
-            //             bUseModeChanger: true	
-            //     },
-            //     fOnAppLoad:function(){
-            //     oEditors.getById["smart"].exec("PASTE_HTML", [initData]);  
-            //     },
-            //     fCreator: "createSEditor2"
-            // });
-        },
         showDiv: function () {
             this.isVisible = true;
         },
@@ -823,9 +777,7 @@
 }
 
 .join-text-bt {
-
     background-color: #00000000;
-
 }
 
 .join-text-bt2 {
@@ -839,7 +791,6 @@
     top: 50%;
     left: 50%;
     width: 20%;
-    /* height: 10%; */
     transform: translate(-50%, -50%);
     background: white;
     padding: 20px;
Add a comment
List