Commit 1c36c884 authored by Gyeongho Park's avatar Gyeongho Park

[ADD] front 프로젝트 추가

parent a2132183
import express from 'express'
// Create express router
const router = express.Router()
const app = express()
router.use((req, res, next) => {
Object.setPrototypeOf(req, app.request);
Object.setPrototypeOf(res, app.response);
req.res = res;
res.req = req;
next();
});
// Export the server middleware
export default {
path: '/apis',
handler: router
};
\ No newline at end of file
@charset "utf-8";
@import url('https://fonts.googleapis.com/css2?family=Noto+Sans+KR:wght@300;400;700;900&display=swap');
.v-application{
&.default-guide-wrap{
//background-color: #fff !important;
}
}
.default-guide-wrap {
//background-color: #fff !important;
overflow-x: hidden;
font-size: 16px !important;
*{
-webkit-font-smoothing: antialiased;
font-weight: 400;
letter-spacing: -0.25px;;
}
.guide-wrap-container{
padding-right: 240px;
}
.guide-wrap {
min-height: 100vh !important;
max-width: 1280px !important;
margin:0 auto;
margin-top:36px;
margin-bottom: 36px;
padding : 36px;
background-color: #fff !important;
position: relative;
.guide-wrap-header{
position: absolute;
top:0;
left:0;
width:100%;
min-height:120px;
padding:36px;
color:#fff;
background-color: #1E88E5;
.v-breadcrumbs{
color:#ddd;
font-size:0.95rem;
}
}
.guide-content{
margin-top:200px;
width:100% !important;
h2{
font-weight: bold;
border-bottom: 1px solid rgba(128,128,128,0.2);
padding-top:12px;
padding-bottom:12px;
margin-top:48px;
margin-bottom:24px;
}
img{
max-width: 100% !important;
display: block;
margin:0 auto !important;
}
> div{
width:100%;
}
hr{
opacity: 0.2;
margin-top:6px;
margin-bottom:6px;
}
}
}
@media screen and (max-width: 1080px){
.guide-wrap-container{
padding:0;
}
.guide-wrap{
margin: 0px !important;
padding:24px;
width: 100%;
}
}
@media screen and (max-width: 600px){
.guide-wrap-header{
h1{
font-size: 28px;
}
span{
font-size:12px;
}
}
}
@media screen and (max-width: 400px){
.guide-wrap-header{
h1{
font-size: 18px;
}
span{
font-size:10px;
}
}
}
.guide-navigator{
display: block;
box-shadow: none !important;
min-width:230px;
min-height: 200px;
height:calc(100vh - 15vh);
position:fixed !important;
right:0;
top:90px;
z-index: 1;
font-size: 13px !important;
.guide-navigator-item{
cursor: pointer;
position: relative;
height: 30px;
line-height: 30px;
.guide-navigator-item-selector{
position: absolute;
height: 100%;
width: 1px;
left:-14px;
background-color: rgba(128,128,128,0.2);
&.active{
width: 2px;
background-color: #1E88E5;
}
}
.guide-navigator-item-text{
font-size: 13px !important;
&.active{
color: #1E88E5;
font-weight: bold;
}
}
}
}
.topBtn {
position: fixed;
bottom: 95px;
right: 24px;
z-index: 9;
.mdi-chevron-up::before {
font-size: 2.9em;
font-weight: lighter;
/* 굵기조절x... */
text-align: center;
color: #777;
width: 60px;
height: 60px;
line-height: 60px;
background-color: #fff;
border-radius: 25px;
box-shadow: 0 3px 9px rgba(0, 0, 0, 0.1);
}
}
// navigation-drawer
.navigation-wrap {
overflow-x: hidden;
border-right:1px solid rgba(0,0,0,0.05) !important;
.v-list-item{
* {
font-size: 14px !important;
}
&.active{
*{
font-weight: bold !important;
color: #1E88E5;
}
&.theme--dark{
background-color: rgba(128,128,128,0.07) !important;
}
&.theme--light{
background-color: rgba(128,128,128,0.07) !important;
}
}
&::before{
}
}
.v-navigation-drawer__border {
display: none;
}
.modile-logo-wrap {
display: none;
}
}
//app-bar
.app-bar-wrap {
background-color: #fff !important;
//background-color: #1A237E !important;
-webkit-touch-callout: none;
-webkit-user-select: none;
-khtml-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
.logout-btn-wrap {
position: relative;
align-items: center;
display: flex;
flex-direction: row;
justify-content: flex-end;
text-align: right;
}
.modile-logo-wrap {
display: none;
}
.mobile-hide {
display:inline-block;
}
}
}
...@@ -5,8 +5,7 @@ ...@@ -5,8 +5,7 @@
<client-only> <client-only>
<v-card class="guide-navigator" color="transparent" v-if="isShowNav()"> <v-card class="guide-navigator" color="transparent" v-if="isShowNav()">
<v-icon small>mdi-text</v-icon> <v-icon small>mdi-text</v-icon>
<vridge-subtitle title="목차" :fontSize="14" class="font-weight-bold"> 목차
</vridge-subtitle>
<v-card-text> <v-card-text>
<v-row no-gutters <v-row no-gutters
...@@ -251,9 +250,9 @@ ...@@ -251,9 +250,9 @@
<v-main> <v-main>
<client-only> <client-only>
<Nuxt class="nuxt-route-content active" /> <Nuxt/>
<vridge-dialog <!-- <vridge-dialog
ref="newPageDialog" ref="newPageDialog"
> >
...@@ -290,10 +289,8 @@ ...@@ -290,10 +289,8 @@
<v-btn @click="createGuide()">등록</v-btn> <v-btn @click="createGuide()">등록</v-btn>
</template> </template>
</vridge-dialog> </vridge-dialog> -->
</client-only> </client-only>
<ChannelTalk/>
</v-main> </v-main>
...@@ -306,8 +303,6 @@ ...@@ -306,8 +303,6 @@
</template> </template>
<script> <script>
import "~/assets/scss/guide.scss"
import ChannelTalk from '../components/channeltalk/ChannelTalk.vue'
export default{ export default{
head () { head () {
...@@ -318,10 +313,6 @@ export default{ ...@@ -318,10 +313,6 @@ export default{
} }
}, },
components:{
ChannelTalk
},
data:() => ({ data:() => ({
//스크롤 헤더 트래커 //스크롤 헤더 트래커
navPositionList: [], navPositionList: [],
...@@ -369,7 +360,7 @@ export default{ ...@@ -369,7 +360,7 @@ export default{
async getGuideIndex() { async getGuideIndex() {
this.loadingPageList = true this.loadingPageList = true
await this.$axios.get('/guide/index') await this.$axios.get('http://localhost:5000/index')
.then(res => { .then(res => {
this.guideIndex = res.data.body this.guideIndex = res.data.body
}) })
......
...@@ -2,24 +2,9 @@ ...@@ -2,24 +2,9 @@
<div> <div>
<v-container class="error-container"> <v-container class="error-container">
<v-row no-gutters justify="center" align="center" class="py-16"> <v-row no-gutters justify="center" align="center" class="py-16">
<v-col justify="center" align="center"> <NuxtLink to="/">
<v-row no-gutters class="error_img_box" > 홈으로
<img src="/error_img.png" /> </NuxtLink>
<v-col cols="12" v-if="error.statusCode === 404" v-html="pageNotFound" justify="center" align="center" class="mb-16 error_text"></v-col>
<v-col cols="12" v-else justify="center" v-html="otherError" style="text-align:center;" align="center" class="mb-16 error_text">
</v-col>
<v-col cols="12" justify="center" align="start">
<span class="error_number">{{error.statusCode}}</span>
</v-col>
</v-row>
<v-row no-gutters justify="center" align="center">
<NuxtLink to="/" class="home-btn" style="margin-right: 16px; margin-top: 50px:">
홈으로
</NuxtLink>
</v-row>
</v-col>
</v-row> </v-row>
</v-container> </v-container>
...@@ -36,7 +21,6 @@ export default { ...@@ -36,7 +21,6 @@ export default {
}, },
data () { data () {
return { return {
pageNotFound: "<h3>존재하지 않거나, 사용할 수 없는 페이지 입니다.</h3>"
} }
}, },
head () { head () {
...@@ -47,182 +31,3 @@ export default { ...@@ -47,182 +31,3 @@ export default {
} }
} }
</script> </script>
<style lang="scss">
.error-container{
margin-top: 64px;
}
@font-face {
font-family: 'EF_MACHO';
src: url('https://cdn.jsdelivr.net/gh/projectnoonnu/noonfonts_2206-01@1.0/EF_MACHO.woff2') format('woff2');
font-weight: normal;
font-style: normal;
}
.home-btn {
height: 42px;
line-height: 42px;
width: 120px;
text-align: center;
border-radius: 5px;
color:#fff !important;
// background-color: #4f4f4f;
background: linear-gradient(70deg, #d16ac2, 30%, #6347e2);
background: -webkit-linear-gradient(70deg, #d16ac2, 30%, #6347e2);
}
.cont_center_error {
position: relative;
}
.cont_box_error {
min-width: 100%;
}
.cont_error {
position: absolute;
top: 38%;
left: 50%;
transform: translate(-50%, -50%);
padding-bottom: 0 !important;
}
.error_img_box {
position: relative;
img {
margin:auto;
height: 400px;
}
}
.error_text {
text-align: center;
margin-bottom: 65px !important;
h3 {
margin-top: 20px;
font-size: 1.4em;
}
}
.error_number {
color: #fff;
letter-spacing: 10px;
font-size: 4.6em;
line-height: 1.1;
text-shadow: 0 2px 5px #fff;
position: absolute;
top: calc(60% - 25px);
left: calc(50% - 193px);
font-family: 'EF_MACHO' !important;
animation: error_number 2.2s linear infinite;
}
@keyframes error_number {
0% {
opacity: 1;
}
10% {
opacity: .5;
}
20% {
opacity: 1;
}
100% {
opacity: 1;
}
}
@media screen and (max-width: 1024px) {
.cont_center_error {
.cont_box_error {
min-height: 680px;
}
.cont_error {
margin-top: 0px;
}
img {
height: 250px;
object-fit: cover;
margin-top: 0;
}
.error_number {
font-size: 2.3em !important;
top: 50%;
left: calc(50% - 119px);
}
.error_text {
h3 {
font-size: 1.2em;
}
}
}//.cont_center_error end
}//@media screen and (max-width: 1024px) end
@media screen and (max-width: 820px) {
.cont_center_error {
.cont_box_error {
min-height: 680px;
}
.cont_error {
margin-top: 0px;
}
img {
height: 350px;
}
.error_number {
font-size: 3.6em !important;
top: calc(55% - 6px);
left: calc(50% - 170px);
}
.error_text {
h3 {
font-size: 1.2em;
}
}
}//.cont_center_error end
}
@media screen and (max-width: 466px) {
.cont_center_error {
.cont_error {
top: 45%;
}
img {
height: 220px;
}
.error_number {
font-size: 2em !important;
top: 161px;
left: calc(50% - 105px);
}
.error_text {
h3 {
font-size: 1em;
}
}
}//.cont_center_error end
}//@media screen and (max-width: 466px) end
@media screen and (max-width: 360px) {
.cont_center_error {
.cont_error {
top: 41%;
}
img {
height: 170px;
}
.error_number {
font-size: 1.4em !important;
top: 124px;
left: calc(50% - 82px);
}
.error_text {
text-align: center;
padding: 0 15px;
h3 {
font-size: 1em;
}
}
}//.cont_center_error end
}//@media screen and (max-width: 360px) end
</style>
import webpack from 'webpack' import colors from 'vuetify/es5/util/colors'
...@@ -31,13 +31,12 @@ export default { ...@@ -31,13 +31,12 @@ export default {
] ]
}, },
// loading: '~/components/LoadingBar.vue',
loading:false, loading:false,
// Global CSS: https://go.nuxtjs.dev/config-css // Global CSS: https://go.nuxtjs.dev/config-css
css: [ css: [
"~/assets/scss/common.scss", "~/assets/scss/common.scss",
"~/assets/scss/transition.scss", "~/assets/scss/guide.scss",
], ],
// Plugins to run before rendering page: https://go.nuxtjs.dev/config-plugins // Plugins to run before rendering page: https://go.nuxtjs.dev/config-plugins
...@@ -48,29 +47,34 @@ export default { ...@@ -48,29 +47,34 @@ export default {
// Auto import components: https://go.nuxtjs.dev/config-components // Auto import components: https://go.nuxtjs.dev/config-components
components: true, components: true,
// Modules for dev and build (recommended): https://go.nuxtjs.dev/config-modules
buildModules: [ buildModules: [
// https://go.nuxtjs.dev/vuetify '@nuxtjs/axios',
'@nuxtjs/vuetify', '@nuxtjs/vuetify',
'@nuxtjs/svg' '@nuxtjs/svg'
], ],
// Modules: https://go.nuxtjs.dev/config-modules // Modules: https://go.nuxtjs.dev/config-modules
modules: [ modules: [
'@nuxtjs/auth', 'nuxt-healthcheck'
'@nuxtjs/axios',
'@nuxtjs/pwa',
'nuxt-route-meta',
['cookie-universal-nuxt', { alias: 'cookiz' }],
"vue2-editor/nuxt",
'nuxt-healthcheck',
'nuxt-i18n',
], ],
// Vuetify module configuration: https://go.nuxtjs.dev/config-vuetify // Vuetify module configuration: https://go.nuxtjs.dev/config-vuetify
vuetify: { vuetify: {
customVariables: ['~/assets/variables.scss'], customVariables: ['~/assets/variables.scss'],
treeShake: true, heme: {
dark: true,
themes: {
dark: {
primary: colors.blue.darken2,
accent: colors.grey.darken3,
secondary: colors.amber.darken3,
info: colors.teal.lighten1,
warning: colors.amber.base,
error: colors.deepOrange.accent4,
success: colors.green.accent3
}
}
},
defaultAssets: { defaultAssets: {
font: { font: {
family: 'Noto Sans KR' family: 'Noto Sans KR'
...@@ -94,15 +98,6 @@ export default { ...@@ -94,15 +98,6 @@ export default {
removeComments: true, // 👈 add this line removeComments: true, // 👈 add this line
}, },
}, },
plugins: [
new webpack.ProvidePlugin({
// global modules
$: 'jquery',
jQuery: 'jquery',
IScroll: 'iscroll',
// _: 'lodash'
})
],
extend (config, ctx) { extend (config, ctx) {
config.module.rules.push({ config.module.rules.push({
enforce: 'pre', enforce: 'pre',
...@@ -114,7 +109,9 @@ export default { ...@@ -114,7 +109,9 @@ export default {
}, },
axios:{ axios:{
baseURL: 'http://localhost:5000' host: "http://localhost",
port: "5000",
prefix: "/",
}, },
healthCheck: { healthCheck: {
...@@ -123,10 +120,4 @@ export default { ...@@ -123,10 +120,4 @@ export default {
return JSON.stringify({result: 'ok'}) return JSON.stringify({result: 'ok'})
} }
}, },
generate: {
minify: {
collapseWhitespace: false
}
}
} }
\ No newline at end of file
This diff is collapsed.
...@@ -10,30 +10,19 @@ ...@@ -10,30 +10,19 @@
}, },
"dependencies": { "dependencies": {
"@nuxtjs/axios": "^5.13.6", "@nuxtjs/axios": "^5.13.6",
"@nuxtjs/pwa": "^3.3.5", "core-js": "^3.25.3",
"@nuxtjs/vuetify": "^1.11.3", "nuxt": "^2.15.8",
"atob": "^2.1.2",
"axios": "^0.21.1",
"body-parser": "^1.19.0",
"cookie-universal-nuxt": "^2.1.5",
"core-js": "^3.9.1",
"express": "^4.17.1",
"express-session": "^1.17.2",
"js-cookie": "^2.2.1",
"nuxt": "^2.15.3",
"nuxt-healthcheck": "^1.0.1", "nuxt-healthcheck": "^1.0.1",
"nuxt-i18n": "^6.28.1",
"nuxt-route-meta": "^2.2.1",
"nuxt-vuex-localstorage": "^1.3.0",
"sass-loader": "^10.2.0", "sass-loader": "^10.2.0",
"vue": "^2.7.10",
"vue-no-ssr": "^1.1.1", "vue-no-ssr": "^1.1.1",
"vue-swatches": "^2.1.1", "vue-server-renderer": "^2.7.10",
"vue-upload-component": "^2.8.22", "vue-template-compiler": "^2.7.10",
"vue2-editor": "^2.10.3", "vuetify": "^2.6.10"
"vuex-persistedstate": "^4.0.0"
}, },
"devDependencies": { "devDependencies": {
"@nuxtjs/svg": "^0.2.0", "@nuxtjs/svg": "^0.2.0",
"@nuxtjs/vuetify": "^1.12.3",
"raw-loader": "^4.0.2" "raw-loader": "^4.0.2"
} }
} }
...@@ -164,7 +164,7 @@ export default { ...@@ -164,7 +164,7 @@ export default {
methods:{ methods:{
async getGuide(){ async getGuide(){
this.loading = true this.loading = true
await this.$axios.get('/guide',{ await this.$axios.get('http://localhost:5000/guide',{
params:{ params:{
guideId: this.$store.state.guideId guideId: this.$store.state.guideId
} }
......
...@@ -38,7 +38,7 @@ export default { ...@@ -38,7 +38,7 @@ export default {
getGuideIndex() { getGuideIndex() {
this.$store.state.guideId = null this.$store.state.guideId = null
this.$store.commit('setGuide', {guideId:null, flag:false}) this.$store.commit('setGuide', {guideId:null, flag:false})
this.$axios.get('/docs/index') this.$axios.get('http://localhost:5000/index')
.then(res => { .then(res => {
this.guideIndex = res.data.body this.guideIndex = res.data.body
}) })
......
...@@ -356,15 +356,6 @@ const rules = { ...@@ -356,15 +356,6 @@ const rules = {
} }
const env = {
getPaymentCallbackUrl(){
if(typeof process.env.PAYMENT_CALLBACK_URL === 'undefined'){
return 'http://localhost:3000/console/admin/pay'
} else {
return process.env.PAYMENT_CALLBACK_URL
}
}
}
const lang = { const lang = {
getString(key){ getString(key){
...@@ -534,7 +525,6 @@ export default ({app}, inject) => { ...@@ -534,7 +525,6 @@ export default ({app}, inject) => {
inject('utils', utils); inject('utils', utils);
inject('regular', regular); inject('regular', regular);
inject('rules', rules); inject('rules', rules);
inject('env', env);
inject('lang', lang); inject('lang', lang);
inject('properties', properties); inject('properties', properties);
inject('colors', colors); inject('colors', colors);
......
import createPersistedState from 'vuex-persistedstate'
export default ({store}) => {
createPersistedState({
})(store)
}
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment