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 @@
<client-only>
<v-card class="guide-navigator" color="transparent" v-if="isShowNav()">
<v-icon small>mdi-text</v-icon>
<vridge-subtitle title="목차" :fontSize="14" class="font-weight-bold">
</vridge-subtitle>
목차
<v-card-text>
<v-row no-gutters
......@@ -251,9 +250,9 @@
<v-main>
<client-only>
<Nuxt class="nuxt-route-content active" />
<Nuxt/>
<vridge-dialog
<!-- <vridge-dialog
ref="newPageDialog"
>
......@@ -290,10 +289,8 @@
<v-btn @click="createGuide()">등록</v-btn>
</template>
</vridge-dialog>
</vridge-dialog> -->
</client-only>
<ChannelTalk/>
</v-main>
......@@ -306,8 +303,6 @@
</template>
<script>
import "~/assets/scss/guide.scss"
import ChannelTalk from '../components/channeltalk/ChannelTalk.vue'
export default{
head () {
......@@ -318,10 +313,6 @@ export default{
}
},
components:{
ChannelTalk
},
data:() => ({
//스크롤 헤더 트래커
navPositionList: [],
......@@ -369,7 +360,7 @@ export default{
async getGuideIndex() {
this.loadingPageList = true
await this.$axios.get('/guide/index')
await this.$axios.get('http://localhost:5000/index')
.then(res => {
this.guideIndex = res.data.body
})
......
......@@ -2,24 +2,9 @@
<div>
<v-container class="error-container">
<v-row no-gutters justify="center" align="center" class="py-16">
<v-col justify="center" align="center">
<v-row no-gutters class="error_img_box" >
<img src="/error_img.png" />
<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>
<NuxtLink to="/">
홈으로
</NuxtLink>
</v-row>
</v-container>
......@@ -36,7 +21,6 @@ export default {
},
data () {
return {
pageNotFound: "<h3>존재하지 않거나, 사용할 수 없는 페이지 입니다.</h3>"
}
},
head () {
......@@ -47,182 +31,3 @@ export default {
}
}
</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 {
]
},
// loading: '~/components/LoadingBar.vue',
loading:false,
// Global CSS: https://go.nuxtjs.dev/config-css
css: [
"~/assets/scss/common.scss",
"~/assets/scss/transition.scss",
"~/assets/scss/guide.scss",
],
// Plugins to run before rendering page: https://go.nuxtjs.dev/config-plugins
......@@ -48,29 +47,34 @@ export default {
// Auto import components: https://go.nuxtjs.dev/config-components
components: true,
// Modules for dev and build (recommended): https://go.nuxtjs.dev/config-modules
buildModules: [
// https://go.nuxtjs.dev/vuetify
'@nuxtjs/axios',
'@nuxtjs/vuetify',
'@nuxtjs/svg'
],
// Modules: https://go.nuxtjs.dev/config-modules
modules: [
'@nuxtjs/auth',
'@nuxtjs/axios',
'@nuxtjs/pwa',
'nuxt-route-meta',
['cookie-universal-nuxt', { alias: 'cookiz' }],
"vue2-editor/nuxt",
'nuxt-healthcheck',
'nuxt-i18n',
'nuxt-healthcheck'
],
// Vuetify module configuration: https://go.nuxtjs.dev/config-vuetify
vuetify: {
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: {
font: {
family: 'Noto Sans KR'
......@@ -94,15 +98,6 @@ export default {
removeComments: true, // 👈 add this line
},
},
plugins: [
new webpack.ProvidePlugin({
// global modules
$: 'jquery',
jQuery: 'jquery',
IScroll: 'iscroll',
// _: 'lodash'
})
],
extend (config, ctx) {
config.module.rules.push({
enforce: 'pre',
......@@ -114,7 +109,9 @@ export default {
},
axios:{
baseURL: 'http://localhost:5000'
host: "http://localhost",
port: "5000",
prefix: "/",
},
healthCheck: {
......@@ -123,10 +120,4 @@ export default {
return JSON.stringify({result: 'ok'})
}
},
generate: {
minify: {
collapseWhitespace: false
}
}
}
\ No newline at end of file
This source diff could not be displayed because it is too large. You can view the blob instead.
......@@ -10,30 +10,19 @@
},
"dependencies": {
"@nuxtjs/axios": "^5.13.6",
"@nuxtjs/pwa": "^3.3.5",
"@nuxtjs/vuetify": "^1.11.3",
"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",
"core-js": "^3.25.3",
"nuxt": "^2.15.8",
"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",
"vue": "^2.7.10",
"vue-no-ssr": "^1.1.1",
"vue-swatches": "^2.1.1",
"vue-upload-component": "^2.8.22",
"vue2-editor": "^2.10.3",
"vuex-persistedstate": "^4.0.0"
"vue-server-renderer": "^2.7.10",
"vue-template-compiler": "^2.7.10",
"vuetify": "^2.6.10"
},
"devDependencies": {
"@nuxtjs/svg": "^0.2.0",
"@nuxtjs/vuetify": "^1.12.3",
"raw-loader": "^4.0.2"
}
}
......@@ -164,7 +164,7 @@ export default {
methods:{
async getGuide(){
this.loading = true
await this.$axios.get('/guide',{
await this.$axios.get('http://localhost:5000/guide',{
params:{
guideId: this.$store.state.guideId
}
......
......@@ -38,7 +38,7 @@ export default {
getGuideIndex() {
this.$store.state.guideId = null
this.$store.commit('setGuide', {guideId:null, flag:false})
this.$axios.get('/docs/index')
this.$axios.get('http://localhost:5000/index')
.then(res => {
this.guideIndex = res.data.body
})
......
......@@ -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 = {
getString(key){
......@@ -534,7 +525,6 @@ export default ({app}, inject) => {
inject('utils', utils);
inject('regular', regular);
inject('rules', rules);
inject('env', env);
inject('lang', lang);
inject('properties', properties);
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