yjryu / KERIS star
류윤주 류윤주 2023-10-24
231024 류윤주 사용자 관리 커밋
@9062faf8a5b427bc48a01eba6e096493c651acbd
client/resources/css/common.css
--- client/resources/css/common.css
+++ client/resources/css/common.css
@@ -18,40 +18,20 @@
     align-items: center;
 }
 
+.main-wrap > div{
+    height: 100%;
+}
 
 .content-box {
     width: 100%;
-    padding: 15px;
+    height: 100%;
+    padding: 30px;
     background-color: #fff;
     height: 100%;
 }
 
-.content-head {
-    width: 100%;
-    border-bottom: 1px solid #eee;
-    padding: 15px 0;
-}
-
-.content-subtitle {
-    color: #aaa;
-    margin-bottom: 15px;
-}
-
-.content-body {
-    padding: 30px 0;
-}
-
-.content-simple{
-    font-size: 1.4rem;
-    font-weight: 700;
-    margin-bottom: 15px;
-    line-height: 160%;
-}
-
-.item-box li {
-    background-color: #fff;
-    padding: 30px;
-    border: 1px solid #ddd;
+.main-title{
+    padding: 10px 0;
 }
 
 /* btn */
@@ -102,142 +82,3 @@
     margin-left: 5px;
 }
 
-
-/*  토글 */
-.toggle_box {
-    display: flex;
-    justify-content: center;
-    align-items: center;
-}
-
-.custom_input {
-    display: none;
-}
-
-.custom_input+label.toggle_btn_label {
-    position: relative;
-    width: 100px;
-    height: 30px;
-}
-
-.custom_input+label.toggle_btn_label>span {
-    position: absolute;
-    cursor: pointer;
-    top: 0;
-    left: 0;
-    right: 0;
-    bottom: 0;
-    background-color: #ccc;
-    transition: all .4s;
-
-}
-
-.custom_input+label.toggle_btn_label>span:before {
-    display: flex;
-    position: absolute;
-    height: 30px;
-    width: fit-content;
-    padding: 0 15px;
-    left: 0;
-    bottom: 0;
-    background-color: #5cb85c;
-    color: #fff;
-    content: "ON";
-    align-items: center;
-    font-weight: bold;
-    color: rgb(29, 29, 29);
-    -webkit-transition: all .4s;
-    transition: all .4s;
-}
-
-.custom_input:checked+label.toggle_btn_label>span {
-    background-color: black;
-}
-
-.custom_input:checked+label.toggle_btn_label>span:before {
-    -webkit-transform: translateX(calc(10rem - 100%));
-    -ms-transform: translateX(calc(10rem - 100%));
-    transform: translateX(calc(10rem - 100%));
-    right: 0;
-    bottom: 0;
-    content: "OFF";
-    background-color: #f8f8f8;
-}
-
-.custom_input:disabled+label.toggle_btn_label {
-    display: none;
-}
-
-.toggle_box>span {
-    font-size: 1.2rem;
-    margin-right: 10px;
-}
-
-/* input */
-
-.input-half {
-    width: 45%;
-    height: 35px;
-    padding: 12px;
-    border-radius: 4px;
-    border: 1.5px solid lightgrey;
-    outline: none;
-    transition: all 0.3s cubic-bezier(0.19, 1, 0.22, 1);
-    box-shadow: 0px 0px 20px -18px;
-}
-
-.input-full {
-    width: 100%;
-    height: 35px;
-    padding: 12px;
-    border-radius: 4px;
-    border: 1.5px solid lightgrey;
-    outline: none;
-    transition: all 0.3s cubic-bezier(0.19, 1, 0.22, 1);
-    box-shadow: 0px 0px 20px -18px;
-}
-
-.input-full:hover,
-.input-half:hover {
-    border: 2px solid lightgrey;
-    box-shadow: 0px 0px 20px -17px;
-}
-
-.input-full:active,
-.input-half:active {
-    transform: scale(0.95);
-}
-
-.input-full:focus,
-.input-half:focus {
-    border: 2px solid grey;
-}
-
-
-/* icon */
-
-.icon span {
-    border-radius: 50px;
-    border: 1px solid #333;
-    padding: 4px 7px;
-    margin-left: 5px;
-}
-
-.icon-red span {
-    border: 1px solid red;
-}
-
-.icon-red span i {
-    color: red;
-}
-
-input[type="checkbox"],
-input[type="radio"]{
-    margin-right: 5px;
-}
-
-.check-box{
-    display: flex;
-    align-items: center;
-    margin-right: 10px;
-}
(No newline at end of file)
client/views/index.html
--- client/views/index.html
+++ client/views/index.html
@@ -7,10 +7,9 @@
         <meta name="description" content="Node Vue Web">
         <link rel="stylesheet" href="/client/resources/css/reset.css">
         <link rel="stylesheet" href="/client/resources/css/common.css">
-        <link rel="stylesheet" href="/client/resources/css/main.css">
         <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.2/css/all.min.css">
         <script src="/client/resources/js/jquery-2.1.1.min.js"></script>
-        <title>웰라인 시스템</title>
+        <title>AI 디지털교과서 통합지원센터</title>
     </head>
 
     <body>
client/views/layout/Menu.vue
--- client/views/layout/Menu.vue
+++ client/views/layout/Menu.vue
@@ -1,60 +1,17 @@
 <template>
   <nav class="main-menu">
-    <div class="menu-head">
-      <div><i class="fa-solid fa-bars"></i></div>
-      <h1 class="logo"><router-link to="/">웰라인</router-link></h1>
+    <div class="logo-wrap">
+      <h1 class="logo"><router-link to="/">AI 디지털교과서 통합지원센터</router-link></h1>
     </div>
-    <ul class="menu-body">
-      <li class="menu-title">Dashboard</li>
-      <li><router-link to="/"><i class="fa-solid fa-layer-group"></i>Dashboard</router-link></li>
-      <li class="menu-title">DR자원관리</li>
-      <li><router-link to="/management.page"><i class="fa-solid fa-folder-open"></i>수요반응자원 관리</router-link></li>
-      <li><router-link to="/contract.page"><i class="fa-solid fa-copy"></i>참여고객 관리</router-link></li>
-      <li @click="toggleSubMenu('rrmse')">
-        <a class="flex"><span class="flex"><i class="fa-solid fa-flag"></i>RRMSE(제안용)</span><span><i
-              :class="{ 'fa-solid fa-chevron-up': !isRRMSESubMenuOpen, 'fa-solid fa-chevron-down': isRRMSESubMenuOpen }"></i></span>
-        </a>
-        <ul class="sub-menu" :style="{ 'max-height': isRRMSESubMenuOpen ? '200px' : '0' }">
-          <li @click="stopToggleSubMenuClick"><router-link to="/rrmsePropose.page">산출의뢰</router-link></li>
-          <li @click="stopToggleSubMenuClick"><router-link to="/rrmseCalculationLog.page">산출이력</router-link></li>
+    <ul>
+      <li v-for="(menu, index) in menuList" :key="index" @click="toggleMenu(menu)">
+        <router-link :to="menu.path">{{ menu.pathName }}<span v-html="menu.icon"></span></router-link>
+        <ul v-if="menu.subMenu" class="sub-menu" :style="{ 'max-height': menu.isOpen ? '200px' : '0' }">
+          <li v-for="(subMenu, subIndex) in menu.subMenu" :key="subIndex">
+            <router-link :to="subMenu.path">{{ subMenu.pathName }}</router-link>
+          </li>
         </ul>
       </li>
-      <li class="menu-title">DR이벤트관리</li>
-      <li><router-link to="/reduceState.page"><i class="fa-solid fa-chart-simple"></i>감축현황</router-link></li>
-      <li><router-link to="/reduceReport.page"><i class="fa-solid fa-print"></i>감축결과보고서</router-link></li>
-      <li class="menu-title">전력사용현황</li>
-      <li @click="toggleSubMenu('translate')">
-        <a class="flex"><span><i class="fa-solid fa-clock-rotate-left"></i>데이터송수신현황</span><span><i
-              :class="{ 'fa-solid fa-chevron-up': !isTranslateSubMenuOpen, 'fa-solid fa-chevron-down': isTranslateSubMenuOpen }"></i></span></a>
-        <ul class="sub-menu" :style="{ 'max-height': isTranslateSubMenuOpen ? '200px' : '0' }">
-          <li @click="stopToggleSubMenuClick"><router-link to="/translateDay.page">일별</router-link></li>
-          <li @click="stopToggleSubMenuClick"><router-link to="/translateContract.page">참여고객별</router-link></li>
-          <li @click="stopToggleSubMenuClick"><router-link to="/dataStatus.page">데이터수집현황</router-link></li>
-        </ul>
-      </li>
-      <li><router-link to="/analysis.page"><i class="fa-solid fa-chart-line"></i>전력사용량/CBL 통계</router-link></li>
-      <li><router-link to="/cblAnalysis.page"><i class="fa-solid fa-code-fork"></i>CBL분석</router-link></li>
-      <li><router-link to="/device.page"><i class="fa-solid fa-location-crosshairs"></i>5분검침기 현황</router-link></li>
-      <li class="menu-title">수요사업자관리</li>
-      <li @click="toggleSubMenu('sms')">
-        <a class="flex"><span><i class="fa-solid fa-comment"></i>SMS 발송관리</span><span><i
-              :class="{ 'fa-solid fa-chevron-up': !isSMSSubMenuOpen, 'fa-solid fa-chevron-down': isSMSSubMenuOpen }"></i></span></a>
-        <ul class="sub-menu" :style="{ 'max-height': isSMSSubMenuOpen ? '200px' : '0' }">
-          <li @click="stopToggleSubMenuClick"><router-link to="/smsAutoSend.page">자동발송설정</router-link></li>
-          <li @click="stopToggleSubMenuClick"><router-link to="/smsManualSend.page">수동발송</router-link></li>
-          <li @click="stopToggleSubMenuClick"><router-link to="/smsLog.page">발송이력</router-link></li>
-        </ul>
-      </li>
-      <li @click="toggleSubMenu('email')">
-        <a class="flex"><span><i class="fa-solid fa-envelope"></i>E-mail발송관리</span><span><i
-              :class="{ 'fa-solid fa-chevron-up': !isEmailSubMenuOpen, 'fa-solid fa-chevron-down': isEmailSubMenuOpen }"></i></span></a>
-        <ul class="sub-menu" :style="{ 'max-height': isEmailSubMenuOpen ? '200px' : '0' }">
-          <li @click="stopToggleSubMenuClick"><router-link to="/emailAutoSend.page">자동발송설정</router-link></li>
-          <li @click="stopToggleSubMenuClick"><router-link to="/emailLog.page">발송이력</router-link></li>
-        </ul>
-      </li>
-      <li class="menu-title">시스템관리</li>
-      <li><router-link to="/system.page"><i class="fa-solid fa-user"></i>회원관리</router-link></li>
     </ul>
   </nav>
 </template>
@@ -63,25 +20,32 @@
 export default {
   data() {
     return {
-      isRRMSESubMenuOpen: false,
-      isTranslateSubMenuOpen: false,
-      isEmailSubMenuOpen: false,
-      isSMSSubMenuOpen: false,
+      menuList: [
+        { path: "/main.page", pathName: "대시보드" },
+        { path: "/notice.page", pathName: "커뮤니티", subMenu: [{ path: "/notice.page", pathName: "공지사항" }, { path: "/new.page", pathName: "홍보/뉴스" }], icon: "<i class='fa-solid fa-angle-right'></i>", isOpen: false },
+        { path: "/document.page", pathName: "자료실", subMenu: [{ path: "/document.page", pathName: "기술문서" }, { path: "/reference.page", pathName: "자료집" }], icon: "<i class='fa-solid fa-angle-right'></i>", isOpen: false },
+        { path: "/statistics.page", pathName: "통계서비스" },
+        { path: "/corporatePR.page", pathName: "네트워킹", subMenu: [{ path: "/corporatePR.page", pathName: "기업홍보관" }], icon: "<i class='fa-solid fa-angle-right'></i>", isOpen: false },
+        { path: "/modal.page", pathName: "팝업관리" },
+        { path: "/email.page", pathName: "메일발송" },
+        { path: "/userSelectList.page", pathName: "사용자관리" },
+        { path: "/subscription .page", pathName: "구독서비스" },
+      ]
     };
   },
   methods: {
-    toggleSubMenu(menu) {
-      if (menu === 'rrmse') {
-        this.isRRMSESubMenuOpen = !this.isRRMSESubMenuOpen;
-      } else if (menu === 'translate') {
-        this.isTranslateSubMenuOpen = !this.isTranslateSubMenuOpen;
-      } else if (menu === 'email') {
-        this.isEmailSubMenuOpen = !this.isEmailSubMenuOpen;
-      } else if (menu === 'sms') {
-        this.isSMSSubMenuOpen = !this.isSMSSubMenuOpen;
+    //토글 메뉴
+    toggleMenu(menu) {
+      console.log(menu);
+      if (menu.hasOwnProperty('isOpen')) {
+        menu.isOpen = !menu.isOpen;
+        if (menu.isOpen) {
+          menu.icon = "<i class='fa-solid fa-angle-down'></i>";
+        } else {
+          menu.icon = "<i class='fa-solid fa-angle-right'></i>";
+        }
       }
     },
-
     // 하위메뉴 클릭 시 메뉴 닫힘 방지
     stopToggleSubMenuClick(event) {
       event.stopPropagation();
@@ -121,80 +85,39 @@
   box-shadow: inset 0px 0px 5px white;
 }
 
-.menu-head {
-  width: 100%;
-  padding: 15px 25px;
-  display: flex;
-  justify-content: flex-start;
-  align-items: center;
-}
-
-.menu-head i {
-  font-size: 1.2rem;
-  color: #fff;
-  margin-right: 20px;
-}
-
-.menu-head .logo {
-  font-size: 2rem;
-  font-weight: 800;
-}
-
-.menu-head .logo a {
-  color: #fff;
-}
-
-.menu-body li.menu-title {
-  color: #6e82a5;
-  font-size: 1.3rem;
-  padding: 10px 15px;
-}
-
-.menu-body li a {
+.logo-wrap h1 a {
   display: block;
-  padding: 10px 15px;
-  color: #eee;
-  font-family: Nunito, sans-serif;
-  font-size: 1.3rem;
+  font-size: 2rem;
+  font-weight: 900;
+  color: #fff;
+  padding: 30px 15px;
 }
 
-.menu-body li a.router-link-active {
-  background-color: #F5F6FA;
-  color: #333;
-  border-radius: 50px 0 0 50px;
-}
-
-.menu-body li a.flex {
-  display: flex;
-  justify-content: space-between;
-  align-items: center;
-}
-
-.menu-body {
+.main-menu>ul {
   padding: 30px 0;
 }
 
-.menu-body .fa-solid {
-  width: 20px;
-  font-size: 1.3rem;
+.main-menu>ul>li>a,
+.sub-menu>li>a {
+  display: block;
+  color: #fff;
+  padding: 10px 15px;
+}
+
+.main-menu>ul>li>a {
+  font-size: 1.6rem;
+  display: flex;
+  justify-content: space-between;
 }
 
 .sub-menu {
-  background-color: #1d2c3f;
-  max-height: 0;
+  background-color: #203248;
   overflow: hidden;
-  transition: max-height 0.3s ease;
+  transition: all 0.5s ease-in-out;
 }
 
-.sub-menu li a {
-  display: block;
-  padding: 10px 35px;
-}
-
-.menu-body .fa-solid.fa-chevron-up,
-.menu-body .fa-solid.fa-chevron-down {
-  font-size: 1.2rem;
-  display: inline-block;
-  text-align: right;
+.sub-menu>li>a {
+  font-size: 1.3rem;
+  padding: 10px 30px;
 }
 </style>
client/views/pages/App.vue
--- client/views/pages/App.vue
+++ client/views/pages/App.vue
@@ -59,7 +59,7 @@
 }
 
 .main-wrap {
-   padding: 10px;
+   padding: 30px;
    grid-area: main;
 }
 </style>
(No newline at end of file)
client/views/pages/AppRouter.js
--- client/views/pages/AppRouter.js
+++ client/views/pages/AppRouter.js
@@ -1,13 +1,17 @@
 import { createWebHistory, createRouter } from "vue-router";
 
 import Main from "../pages/main/Main.vue";
-
 import Login from "../pages/login/Login.vue";
+import UserSelectList from "../pages/user/UserSelectList.vue";
+import UserSelectOne from "../pages/user/UserSelectOne.vue";
+
 
 const routes = [
   /* 메인화면 */
   { path: "/", name: "Main", component: Main },
   { path: "/login.page", name: "Login", component: Login },
+  { path: "/userSelectList.page", name: "UserSelectList", component: UserSelectList },
+  { path: "/userSelectOne.page", name: "UserSelectOne", component: UserSelectOne },
 ];
 
 const AppRouter = createRouter({
client/views/pages/login/Login.vue
--- client/views/pages/login/Login.vue
+++ client/views/pages/login/Login.vue
@@ -14,47 +14,3 @@
     mounted() { },
 };
 </script>
-
-.login-wrap,
-.login-wrap>div,
-.login-content,
-.img-content {
-    width: 100%;
-    height: 100%;
-}
-
-.login-content,
-.img-content {
-    flex: 0 0 50%;
-}
-
-
-.login-content {
-    background: #fff;
-    padding: 50px;
-}
-
-.login-content p{
-    font-size: 2rem;
-    font-weight: 800;
-}
-
-.login{
-    min-width: 50%;
-    max-width: 400px;
-    margin: 0 auto;
-    text-align: center;
-    padding: 150px 0;
-}
-
-.login h2 img{
-    width: 50%;
-    margin-bottom: 30px;
-}
-
-input[type="text"],
-input[type="password"]{
-    display: block;
-    margin-bottom: 10px;
-}
-</style>
(No newline at end of file)
client/views/pages/main/Main.vue
--- client/views/pages/main/Main.vue
+++ client/views/pages/main/Main.vue
@@ -17,63 +17,3 @@
     mounted() {}
 }
 </script>
-
-.grid {
-    display: grid;
-    grid-template-columns: 1.3fr 0.7fr;
-    grid-template-rows: 0.5fr 1fr;
-    gap: 10px;
-}
-
-.absorption {
-    grid-column: 1/3;
-}
-
-.content-head h2 {
-    flex: 0 0 65%;
-}
-
-.content-head .select-wrap {
-    flex: 0 0 35%;
-}
-
-select {
-    min-width: 33%;
-}
-
-.conten-sumarry p {
-    font-size: 1.4rem;
-    text-align: center;
-}
-
-.conten-sumarry p span {
-    font-size: 3rem;
-    font-weight: 800;
-    color: #006dd3;
-}
-
-.content-body .base {
-    font-size: 1.2rem;
-    text-align: right;
-    color: #aaa;
-    margin-bottom: 10px;
-}
-
-.content-body ul li{
-    margin-bottom: 20px;
-}
-
-.content-body ul li:last-child{
-    margin-bottom: 0;
-}
-
-.content-body table td {
-    padding: 5px;
-    font-size: 1.2rem;
-}
-
-.content-body table .topic td {
-    font-size: 1.4rem;
-    font-weight: 800;
-}
-</style>
(No newline at end of file)
 
client/views/pages/user/UserInsert.vue (added)
+++ client/views/pages/user/UserInsert.vue
@@ -0,0 +1,0 @@
 
client/views/pages/user/UserSelectList.vue (added)
+++ client/views/pages/user/UserSelectList.vue
@@ -0,0 +1,143 @@
+<template>
+    <div class="user-wrap">
+        <div class="content-box">
+            <div class="title-wrap">
+                <h2 class="main-title">회원관리</h2>
+            </div>
+            <div class="content-wrap">
+                <ul class="tab-menu">
+                    <li v-for="(tab, index) in tabMenu" :key="index">
+                        <a @click="currentTab = index" :class="{ active: currentTab === index }">{{ tab }}</a>
+                    </li>
+                </ul>
+                <div class="tab-content">
+                    <div v-show="currentTab == 0">
+                        <table>
+                            <thead>
+                                <tr>
+                                    <th>아이디</th>
+                                    <th>기업명</th>
+                                    <th>담당자명</th>
+                                    <th>이메일</th>
+                                </tr>
+                            </thead>
+                            <tbody>
+                                <tr v-for="(user,index) in user1" :key="index">
+                                    <td>{{ user.id }}</td>
+                                    <td>{{ user.company }}</td>
+                                    <td>{{ user.name }}</td>
+                                    <td>{{ user.email }}</td>
+                                </tr>
+                            </tbody>
+                        </table>
+                    </div>
+                    <div v-show="currentTab == 1">
+                        <table>
+                            <thead>
+                                <tr>
+                                    <th>아이디</th>
+                                    <th>기업명</th>
+                                    <th>담당자명</th>
+                                    <th>이메일</th>
+                                </tr>
+                            </thead>
+                            <tbody>
+                                <tr v-for="(user,index) in user2" :key="index">
+                                    <td>{{ user.id }}</td>
+                                    <td>{{ user.company }}</td>
+                                    <td>{{ user.name }}</td>
+                                    <td>{{ user.email }}</td>
+                                </tr>
+                            </tbody>
+                        </table>
+                    </div>
+                    <div v-show="currentTab == 2">
+                        <table>
+                            <thead>
+                                <tr>
+                                    <th>아이디</th>
+                                    <th>기업명</th>
+                                    <th>담당자명</th>
+                                    <th>이메일</th>
+                                </tr>
+                            </thead>
+                            <tbody>
+                                <tr v-for="(user,index) in user3" :key="index">
+                                    <td>{{ user.id }}</td>
+                                    <td>{{ user.company }}</td>
+                                    <td>{{ user.name }}</td>
+                                    <td>{{ user.email }}</td>
+                                </tr>
+                            </tbody>
+                        </table>
+                        <div class="btn-wrap">
+                            <button class="blue-btn">등록</button>
+                        </div>
+                    </div>
+                </div>
+            </div>
+        </div>
+        
+    </div>
+</template>
+<script>
+export default {
+    data() {
+        return {
+            currentTab: 0,
+            tabMenu: ['일반회원', '기관회원', '관리자'],
+            user1:[
+                {id:"test1",company:"test1C",name:"user1",email:"[email protected]"},
+                {id:"teste2",company:"test2C",name:"user2",email:"[email protected]"},
+                {id:"test3",company:"test3C",name:"user3",email:"[email protected]"},
+            ],
+            user2:[
+                {id:"test1",company:"test1C",name:"user1",email:"[email protected]"},
+                {id:"teste2",company:"test2C",name:"user2",email:"[email protected]"},
+                {id:"test3",company:"test3C",name:"user3",email:"[email protected]"},
+            ],
+            user3:[
+                {id:"test1",company:"test1C",name:"user1",email:"[email protected]"},
+                {id:"teste2",company:"test2C",name:"user2",email:"[email protected]"},
+                {id:"test3",company:"test3C",name:"user3",email:"[email protected]"},
+            ]
+        };
+    },
+    methods: {},
+    watch: {},
+    computed: {},
+    components: {},
+    mounted() { },
+};
+</script>
+<style scoped>
+.tab-menu{
+    display: flex;
+    justify-content: flex-start;
+    align-items: center;
+}
+.tab-menu li a{
+    padding: 10px 15px;
+    display: block;
+    font-size: 1.6rem;
+    border-radius: 5px 5px 0 0;
+    cursor: pointer;
+    border: 1px solid #ddd;
+    border-bottom: 0;
+}
+
+.tab-menu li a.active{
+    background-color: #f8f8f8;
+    color: #2b7cff;
+    font-weight: 800;
+    border: 0;
+}
+
+.tab-content{
+    width: 100%;
+    height: 100%;
+    background-color: #f8f8f8;
+    padding: 15px;
+
+}
+</style>
 
client/views/pages/user/UserSelectOne.vue (added)
+++ client/views/pages/user/UserSelectOne.vue
@@ -0,0 +1,38 @@
+<template>
+    <div class="user-wrap">
+        <div class="content-box">
+            <div class="title-wrap">
+                <h2 class="main-title">회원관리</h2>
+            </div>
+            <div class="content-wrap">
+                <ul class="tab-menu">
+                    <li v-for="(tab, index) in tabMenu" :key="index" :class="{ active: currentTab === index }">
+                        <a href="#" v-on:click="currentTab = index">{{ tab }}</a>
+                    </li>
+                </ul>
+                <div class="tab-content">
+                    <div v-show="currentTab == 0">1</div>
+                    <div v-show="currentTab == 1">2</div>
+                    <div v-show="currentTab == 2">3</div>
+                </div>
+            </div>
+        </div>
+
+    </div>
+</template>
+<script>
+export default {
+    data() {
+        return {
+            currentTab: 0,
+            tabMenu: ['일반회원', '기관회원', '관리자']
+        };
+    },
+    methods: {},
+    watch: {},
+    computed: {},
+    components: {},
+    mounted() { },
+};
+</script>
+<style scoped></style>>
Add a comment
List