Init call
23
.gitignore
vendored
Executable file
@@ -0,0 +1,23 @@
|
||||
.DS_Store
|
||||
node_modules
|
||||
/dist
|
||||
|
||||
|
||||
# local env files
|
||||
.env.local
|
||||
.env.*.local
|
||||
|
||||
# Log files
|
||||
npm-debug.log*
|
||||
yarn-debug.log*
|
||||
yarn-error.log*
|
||||
pnpm-debug.log*
|
||||
|
||||
# Editor directories and files
|
||||
.idea
|
||||
.vscode
|
||||
*.suo
|
||||
*.ntvs*
|
||||
*.njsproj
|
||||
*.sln
|
||||
*.sw?
|
||||
24
README.md
Executable file
@@ -0,0 +1,24 @@
|
||||
# app
|
||||
|
||||
## Project setup
|
||||
```
|
||||
npm install
|
||||
```
|
||||
|
||||
### Compiles and hot-reloads for development
|
||||
```
|
||||
npm run serve
|
||||
```
|
||||
|
||||
### Compiles and minifies for production
|
||||
```
|
||||
npm run build
|
||||
```
|
||||
|
||||
### Lints and fixes files
|
||||
```
|
||||
npm run lint
|
||||
```
|
||||
|
||||
### Customize configuration
|
||||
See [Configuration Reference](https://cli.vuejs.org/config/).
|
||||
5
babel.config.js
Executable file
@@ -0,0 +1,5 @@
|
||||
module.exports = {
|
||||
presets: [
|
||||
'@vue/cli-plugin-babel/preset'
|
||||
]
|
||||
}
|
||||
19
jsconfig.json
Executable file
@@ -0,0 +1,19 @@
|
||||
{
|
||||
"compilerOptions": {
|
||||
"target": "es5",
|
||||
"module": "esnext",
|
||||
"baseUrl": "./",
|
||||
"moduleResolution": "node",
|
||||
"paths": {
|
||||
"@/*": [
|
||||
"src/*"
|
||||
]
|
||||
},
|
||||
"lib": [
|
||||
"esnext",
|
||||
"dom",
|
||||
"dom.iterable",
|
||||
"scripthost"
|
||||
]
|
||||
}
|
||||
}
|
||||
11464
package-lock.json
generated
Executable file
57
package.json
Executable file
@@ -0,0 +1,57 @@
|
||||
{
|
||||
"name": "app",
|
||||
"version": "0.1.0",
|
||||
"private": true,
|
||||
"scripts": {
|
||||
"serve": "vue-cli-service serve",
|
||||
"build": "vue-cli-service build",
|
||||
"lint": "vue-cli-service lint",
|
||||
"watch": "vue-cli-service build --watch"
|
||||
},
|
||||
"dependencies": {
|
||||
"core-js": "^3.8.3",
|
||||
"vue": "^2.6.14",
|
||||
"vue-material-design-icons": "^5.2.0",
|
||||
"vue-meta": "^2.4.0",
|
||||
"vue-router": "^3.5.1",
|
||||
"vuetify": "^2.6.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@babel/core": "^7.12.16",
|
||||
"@babel/eslint-parser": "^7.12.16",
|
||||
"@vue/cli-plugin-babel": "~5.0.0",
|
||||
"@vue/cli-plugin-eslint": "~5.0.0",
|
||||
"@vue/cli-plugin-router": "~5.0.0",
|
||||
"@vue/cli-service": "~5.0.0",
|
||||
"axios": "^0.18.0",
|
||||
"eslint": "^7.32.0",
|
||||
"eslint-plugin-vue": "^8.0.3",
|
||||
"sass": "~1.32.0",
|
||||
"sass-loader": "^10.0.0",
|
||||
"vue-cli-plugin-axios": "~0.0.4",
|
||||
"vue-cli-plugin-vuetify": "~2.5.8",
|
||||
"vue-template-compiler": "^2.6.14",
|
||||
"vuetify-loader": "^1.7.0"
|
||||
},
|
||||
"eslintConfig": {
|
||||
"root": true,
|
||||
"env": {
|
||||
"node": true
|
||||
},
|
||||
"extends": [
|
||||
"plugin:vue/essential",
|
||||
"eslint:recommended"
|
||||
],
|
||||
"parserOptions": {
|
||||
"parser": "@babel/eslint-parser"
|
||||
},
|
||||
"rules": {
|
||||
"no-unused-vars": "off"
|
||||
}
|
||||
},
|
||||
"browserslist": [
|
||||
"> 1%",
|
||||
"last 2 versions",
|
||||
"not dead"
|
||||
]
|
||||
}
|
||||
12
public/.htaccess
Executable file
@@ -0,0 +1,12 @@
|
||||
<IfModule mod_rewrite.c>
|
||||
RewriteEngine On
|
||||
RewriteBase /
|
||||
|
||||
RewriteCond %{HTTPS} off
|
||||
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
|
||||
|
||||
RewriteRule ^index\.html$ - [L]
|
||||
RewriteCond %{REQUEST_FILENAME} !-f
|
||||
RewriteCond %{REQUEST_FILENAME} !-d
|
||||
RewriteRule . /index.html [L]
|
||||
</IfModule>
|
||||
BIN
public/favicon.png
Executable file
|
After Width: | Height: | Size: 13 KiB |
49
public/index.html
Executable file
@@ -0,0 +1,49 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||
<meta name="viewport" content="width=device-width,initial-scale=1.0">
|
||||
<link rel="icon" type="image/x-icon" href="favicon.ico">
|
||||
<!-- <title><%= htmlWebpackPlugin.options.title %></title> -->
|
||||
<title>Stella Amor | Discover Your Dream Date Today</title>
|
||||
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:100,300,400,500,700,900">
|
||||
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@mdi/font@latest/css/materialdesignicons.min.css">
|
||||
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.4/css/all.min.css" crossorigin="anonymous" />
|
||||
<link rel="canonical" href="https://stellaamor.com">
|
||||
<link rel="icon" type="image/x-icon" href="favicon.ico">
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<meta name="description" content="Discover endless possibilities for meaningful connections at Stella Amor, the innovative dating platform designed to cater to every preference. With our comprehensive filtering system, finding your perfect match has never been easier. Explore a diverse community and unlock your path to love and companionship today">
|
||||
<meta property="og:title" content="Stella Amor | Discover Your Dream Date Today">
|
||||
<meta property="og:description" content="Discover endless possibilities for meaningful connections at Stella Amor, the innovative dating platform designed to cater to every preference. With our comprehensive filtering system, finding your perfect match has never been easier. Explore a diverse community and unlock your path to love and companionship today">
|
||||
<meta property="og:image" content="https://api.stellaamor.com/static/logo2.png">
|
||||
<meta property="og:url" content="https://stellaamor.com">
|
||||
<meta property="og:type" content="website">
|
||||
<meta name="twitter:title" content="Stella Amor | Discover Your Dream Date Today">
|
||||
<meta name="twitter:description" content="Discover endless possibilities for meaningful connections at Stella Amor, the innovative dating platform designed to cater to every preference. With our comprehensive filtering system, finding your perfect match has never been easier. Explore a diverse community and unlock your path to love and companionship today">
|
||||
<meta name="twitter:image" content="https://api.stellaamor.com/static/logo2.png">
|
||||
<meta name="twitter:card" content="summary_large_image">
|
||||
<meta name="author" content="Stella Amor">
|
||||
<meta name="keywords" content="Dating">
|
||||
<meta name="robots" content="index,follow">
|
||||
<meta httpequiv="expires" content="0">
|
||||
<meta httpequiv="pragma" content="no-cache"></head>
|
||||
<!-- Google tag (gtag.js) -->
|
||||
<script async src="https://www.googletagmanager.com/gtag/js?id=G-486MZV8H9M"></script>
|
||||
<script>
|
||||
window.dataLayer = window.dataLayer || [];
|
||||
function gtag(){dataLayer.push(arguments);}
|
||||
gtag('js', new Date());
|
||||
|
||||
gtag('config', 'G-486MZV8H9M');
|
||||
</script>
|
||||
</head>
|
||||
<body>
|
||||
<noscript>
|
||||
<strong>We're sorry but <%= htmlWebpackPlugin.options.title %> doesn't work properly without JavaScript enabled. Please enable it to continue.</strong>
|
||||
</noscript>
|
||||
<div id="app"></div>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
BIN
public/rss/img/logo.png
Executable file
|
After Width: | Height: | Size: 176 KiB |
68
src/App.vue
Executable file
@@ -0,0 +1,68 @@
|
||||
<template>
|
||||
<div id="app">
|
||||
<v-app>
|
||||
<keep-alive>
|
||||
<router-view/>
|
||||
</keep-alive>
|
||||
</v-app>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<style lang="scss">
|
||||
#app {
|
||||
font-family: 'Poppins', sans-serif;
|
||||
-webkit-font-smoothing: antialiased;
|
||||
-moz-osx-font-smoothing: grayscale;
|
||||
text-align: center;
|
||||
// color: #2c3e50;
|
||||
color:#353535;
|
||||
}
|
||||
|
||||
nav {
|
||||
padding: 30px;
|
||||
|
||||
a {
|
||||
font-weight: bold;
|
||||
color: #fff;
|
||||
|
||||
&.router-link-exact-active {
|
||||
color: #42b983;
|
||||
}
|
||||
}
|
||||
}
|
||||
</style>
|
||||
|
||||
<style>
|
||||
@import url('https://fonts.googleapis.com/css2?family=Niconne&family=Poly:ital@0;1&family=Poppins:ital,wght@0,100;0,200;0,300;0,400;0,500;0,600;0,700;0,800;0,900;1,100;1,200;1,300;1,400;1,500;1,600;1,700;1,800;1,900&display=swap');
|
||||
|
||||
.font-niconne{font-family: 'Niconne', cursive;}
|
||||
.font-niconne{font-family: 'Poly', serif;}
|
||||
.poppins{font-family: 'Poppins', sans-serif;}
|
||||
|
||||
body{
|
||||
font-family: 'Poppins', sans-serif;
|
||||
}
|
||||
img{
|
||||
max-width: 100%;
|
||||
}
|
||||
</style>
|
||||
<style lang="scss">
|
||||
.main{
|
||||
padding-top:60px;
|
||||
@media (min-width: 960px){
|
||||
padding-top:70px;
|
||||
}
|
||||
}
|
||||
*{
|
||||
text-align: left;
|
||||
}
|
||||
.app-main{
|
||||
margin-top: 60px;
|
||||
position: relative;
|
||||
min-height: calc(100vh - 60px);
|
||||
}
|
||||
.top-bar{
|
||||
z-index:10;
|
||||
position: fixed;
|
||||
}
|
||||
</style>
|
||||
BIN
src/assets/background-1.jpg
Executable file
|
After Width: | Height: | Size: 96 KiB |
BIN
src/assets/cash.jpg
Executable file
|
After Width: | Height: | Size: 274 KiB |
BIN
src/assets/celebration.jpg
Executable file
|
After Width: | Height: | Size: 204 KiB |
84146
src/assets/countries.json
Executable file
BIN
src/assets/couple-background.jpg
Executable file
|
After Width: | Height: | Size: 202 KiB |
BIN
src/assets/couple-background2.jpg
Executable file
|
After Width: | Height: | Size: 297 KiB |
BIN
src/assets/favicon.png
Executable file
|
After Width: | Height: | Size: 13 KiB |
BIN
src/assets/fireworks.jpg
Executable file
|
After Width: | Height: | Size: 199 KiB |
BIN
src/assets/handshake.jpg
Executable file
|
After Width: | Height: | Size: 336 KiB |
BIN
src/assets/homeHeroBackground.jpg
Executable file
|
After Width: | Height: | Size: 121 KiB |
BIN
src/assets/homeHeroBackground34.png
Executable file
|
After Width: | Height: | Size: 434 KiB |
BIN
src/assets/logo.png
Executable file
|
After Width: | Height: | Size: 176 KiB |
1
src/assets/logo.svg
Executable file
@@ -0,0 +1 @@
|
||||
<svg id="Layer_1" data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 87.5 100"><defs><style>.cls-1{fill:#1697f6;}.cls-2{fill:#7bc6ff;}.cls-3{fill:#1867c0;}.cls-4{fill:#aeddff;}</style></defs><title>Artboard 46</title><polyline class="cls-1" points="43.75 0 23.31 0 43.75 48.32"/><polygon class="cls-2" points="43.75 62.5 43.75 100 0 14.58 22.92 14.58 43.75 62.5"/><polyline class="cls-3" points="43.75 0 64.19 0 43.75 48.32"/><polygon class="cls-4" points="64.58 14.58 87.5 14.58 43.75 100 43.75 62.5 64.58 14.58"/></svg>
|
||||
|
After Width: | Height: | Size: 539 B |
BIN
src/assets/logo2.png
Executable file
|
After Width: | Height: | Size: 31 KiB |
BIN
src/assets/logoW.png
Executable file
|
After Width: | Height: | Size: 69 KiB |
BIN
src/assets/new_logo.png
Normal file
|
After Width: | Height: | Size: 63 KiB |
BIN
src/assets/stellaContest.png
Executable file
|
After Width: | Height: | Size: 588 KiB |
BIN
src/assets/sunset.jpg
Executable file
|
After Width: | Height: | Size: 127 KiB |
76
src/components/contactForm.vue
Executable file
@@ -0,0 +1,76 @@
|
||||
<template>
|
||||
<v-dialog v-model="contactDialog" max-width="500px">
|
||||
<v-card>
|
||||
<v-card-title>Contact</v-card-title>
|
||||
<v-card-text v-if="send_status == false">
|
||||
<v-col cols="12">
|
||||
<v-text-field label="Title" dense outlined hide-details required v-model="title"></v-text-field>
|
||||
</v-col>
|
||||
<v-col cols="12">
|
||||
<v-text-field label="Your email" dense outlined hide-details required v-model="u_email"></v-text-field>
|
||||
</v-col>
|
||||
<v-col cols="12">
|
||||
<v-textarea label="Message" dense required outlined hide-details v-model="message"></v-textarea>
|
||||
</v-col>
|
||||
</v-card-text>
|
||||
<v-card-text v-else>
|
||||
<v-alert
|
||||
text
|
||||
type="success"
|
||||
>
|
||||
Your message have been delivered.</v-alert>
|
||||
</v-card-text>
|
||||
<v-card-actions>
|
||||
<v-btn color="red darken-1" text @click="contactDialog = false">Close</v-btn>
|
||||
<v-spacer></v-spacer>
|
||||
<v-btn color="blue darken-1" text @click="sendEmail()" v-if="send_status == false">Send</v-btn>
|
||||
</v-card-actions>
|
||||
</v-card>
|
||||
</v-dialog>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import axios from 'axios';
|
||||
|
||||
export default {
|
||||
data() {
|
||||
return {
|
||||
APIEndPoint: '',
|
||||
contactDialog: false,
|
||||
title: '',
|
||||
message: '',
|
||||
u_email: '',
|
||||
send_status: false,
|
||||
send_error: false,
|
||||
};
|
||||
},
|
||||
methods:{
|
||||
setOpen(){
|
||||
this.contactDialog = true;
|
||||
},
|
||||
sendEmail(){
|
||||
var postFields = {
|
||||
title: this.title,
|
||||
u_email: this.u_email,
|
||||
message: this.message,
|
||||
action: 'sendMessage',
|
||||
}
|
||||
axios.post(this.APIEndPoint + 'core.php', postFields)
|
||||
.then(response => {
|
||||
if (response.data.status === 'fail') {
|
||||
this.send_error = true;
|
||||
} else {
|
||||
this.send_status = true;
|
||||
this.title = '';
|
||||
this.message = '';
|
||||
this.u_email = '';
|
||||
}
|
||||
})
|
||||
}
|
||||
},
|
||||
created(){
|
||||
this.APIEndPoint = this.$hostname;
|
||||
}
|
||||
};
|
||||
</script>
|
||||
|
||||
93
src/components/loginHeader.vue
Executable file
@@ -0,0 +1,93 @@
|
||||
<template>
|
||||
<nav class="top-bar">
|
||||
<v-app-bar app fixed color="white">
|
||||
<img src="../assets/new_logo.png" width="100px">
|
||||
<v-spacer></v-spacer>
|
||||
<v-btn icon @click="openConversations" :class="{ 'unreadMessages': unread_messages }">
|
||||
<v-icon>mdi-message</v-icon>
|
||||
</v-btn>
|
||||
<v-btn icon @click="toggleDrawer" class="ml-2">
|
||||
<v-icon>mdi-menu</v-icon>
|
||||
</v-btn>
|
||||
</v-app-bar>
|
||||
<v-navigation-drawer v-model="drawer" app right>
|
||||
<v-list>
|
||||
<v-list-item @click="openProfile">
|
||||
<v-list-item-icon>
|
||||
<v-icon>mdi-account</v-icon>
|
||||
</v-list-item-icon>
|
||||
<v-list-item-content>
|
||||
<v-list-item-title>My Profile</v-list-item-title>
|
||||
</v-list-item-content>
|
||||
</v-list-item>
|
||||
<v-list-item @click="openUserSettings">
|
||||
<v-list-item-icon>
|
||||
<v-icon>mdi-cog</v-icon>
|
||||
</v-list-item-icon>
|
||||
<v-list-item-content>
|
||||
<v-list-item-title>Settings</v-list-item-title>
|
||||
</v-list-item-content>
|
||||
</v-list-item>
|
||||
<v-list-item>
|
||||
<v-list-item-icon>
|
||||
<v-icon>mdi-account</v-icon>
|
||||
</v-list-item-icon>
|
||||
<v-list-item-content>
|
||||
<v-list-item-title><a href="https://billing.stripe.com/p/login/7sI3ct4zoceDcec8ww" target="_blank" style="color:inherit; text-decoration:none;">Subscription</a></v-list-item-title>
|
||||
</v-list-item-content>
|
||||
</v-list-item>
|
||||
<v-list-item @click="logout()">
|
||||
<v-list-item-icon>
|
||||
<v-icon>mdi-logout</v-icon>
|
||||
</v-list-item-icon>
|
||||
<v-list-item-content>
|
||||
<v-list-item-title>Logout</v-list-item-title>
|
||||
</v-list-item-content>
|
||||
</v-list-item>
|
||||
</v-list>
|
||||
</v-navigation-drawer>
|
||||
</nav>
|
||||
</template>
|
||||
|
||||
|
||||
|
||||
<script>
|
||||
import axios from 'axios';
|
||||
import router from '@/router';
|
||||
export default {
|
||||
props:{
|
||||
'unread_messages': Boolean
|
||||
},
|
||||
name: 'loginHeader',
|
||||
data() {
|
||||
return {
|
||||
drawer: false,
|
||||
};
|
||||
},
|
||||
methods: {
|
||||
openUserSettings() {
|
||||
this.$emit('open-user-settings');
|
||||
},
|
||||
openProfile() {
|
||||
this.$emit('open-user-profile');
|
||||
},
|
||||
openConversations() {
|
||||
this.$emit('open-conversations');
|
||||
},
|
||||
toggleDrawer() {
|
||||
this.drawer = !this.drawer;
|
||||
},
|
||||
async logout() {
|
||||
const response = await axios.get(this.APIEndPoint + 'users.php?logout=true', { withCredentials: true });
|
||||
localStorage.clear();
|
||||
sessionStorage.clear();
|
||||
window.location = 'https://stellaamor.com/signin'
|
||||
window.location.reload();
|
||||
},
|
||||
},
|
||||
created(){
|
||||
this.APIEndPoint = this.$hostname;
|
||||
}
|
||||
};
|
||||
</script>
|
||||
|
||||
87
src/components/pageFooter.vue
Executable file
@@ -0,0 +1,87 @@
|
||||
<template>
|
||||
<footer class="footer">
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class="col-sm-4">
|
||||
<h4>About Us</h4>
|
||||
<p>Stella Amor is a dating platform with the goal to let the users search for whatever they desire, with one of the most advanced filters.</p>
|
||||
</div>
|
||||
<div class="col-sm-4">
|
||||
<h4>Contact Us</h4>
|
||||
<p>Email: <a href="mailto:info@stellaamor.com" class="mailLink">info@stellaamor.com</a><br>
|
||||
Support: <a href="mailto:support@stellaamor.com" class="mailLink">support@stellaamor.com</a></p>
|
||||
</div>
|
||||
<!-- <div class="col-sm-4">
|
||||
<h4>Follow Us</h4>
|
||||
<p>Stay connected with us on social media</p>
|
||||
<ul class="social-icons">
|
||||
<li><a href="#"><i class="fab fa-facebook"></i></a></li>
|
||||
<li><a href="#"><i class="fab fa-twitter"></i></a></li>
|
||||
<li><a href="#"><i class="fab fa-instagram"></i></a></li>
|
||||
</ul>
|
||||
</div> -->
|
||||
</div>
|
||||
</div>
|
||||
</footer>
|
||||
</template>
|
||||
|
||||
|
||||
<script>
|
||||
export default{
|
||||
name: 'pageFooter',
|
||||
|
||||
data(){
|
||||
return{
|
||||
}
|
||||
},
|
||||
methods:{
|
||||
},
|
||||
computed:{
|
||||
},
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang="scss">
|
||||
.mailLink{
|
||||
color: inherit !important;
|
||||
text-decoration:none;
|
||||
}
|
||||
|
||||
.footer {
|
||||
background-color: #ffffff;
|
||||
padding: 50px 0;
|
||||
}
|
||||
|
||||
.footer h4 {
|
||||
color: #333333;
|
||||
}
|
||||
|
||||
.footer p {
|
||||
color: #666666;
|
||||
}
|
||||
|
||||
.social-icons {
|
||||
list-style: none;
|
||||
padding: 0 !important;
|
||||
margin: 10px 0 0;
|
||||
}
|
||||
|
||||
.social-icons li {
|
||||
display: inline-block;
|
||||
margin-right: 10px;
|
||||
}
|
||||
|
||||
.social-icons li:last-child {
|
||||
margin-right: 0;
|
||||
}
|
||||
|
||||
.social-icons a {
|
||||
color: #333333;
|
||||
font-size: 20px;
|
||||
}
|
||||
|
||||
.social-icons a:hover {
|
||||
color: #666666;
|
||||
}
|
||||
|
||||
</style>
|
||||
187
src/components/pageHeader.vue
Executable file
@@ -0,0 +1,187 @@
|
||||
<template>
|
||||
<nav>
|
||||
<!-- Desktop Menu -->
|
||||
<div class="desktop-menu" v-show="!mobile_menu">
|
||||
<div class="menu-row">
|
||||
<div class="brand">
|
||||
<router-link to="/">
|
||||
<img src="../assets/logo2.png" width="100px">
|
||||
</router-link>
|
||||
</div>
|
||||
<div class="menu-items">
|
||||
<li v-for="(link) in menuItems" :key="link.to">
|
||||
<router-link class="menu-item" :to="link.to">{{ link.label }}</router-link>
|
||||
</li>
|
||||
<li>
|
||||
<button class="menu-item" @click="openContact">Contact</button>
|
||||
</li>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Mobile Menu -->
|
||||
<div class="mobile-menu">
|
||||
<div class="menu-item">
|
||||
<router-link to="/">
|
||||
<img src="../assets/logo2.png" width="100px">
|
||||
</router-link>
|
||||
</div>
|
||||
<div class="menu-item">
|
||||
<button @click="mobileMenu()">
|
||||
<v-icon class="menu-button">mdi-menu</v-icon>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Mobile Drawer -->
|
||||
<v-navigation-drawer v-model="mobile_menu" fixed temporary right class="mobile-drawer">
|
||||
<div class="close-inner">
|
||||
<button class="close" @click="mobileMenu"><v-icon>mdi-close</v-icon></button>
|
||||
</div>
|
||||
<v-list dense v-for="link in menuItems" :key="link.to">
|
||||
<v-list-item :to="link.to" link>
|
||||
<v-list-item-content>
|
||||
{{ link.label }}
|
||||
</v-list-item-content>
|
||||
</v-list-item>
|
||||
</v-list>
|
||||
<v-list dense>
|
||||
<v-list-item>
|
||||
<v-list-item-content>
|
||||
<button class="menu-item" @click="openContact">Contact</button>
|
||||
</v-list-item-content>
|
||||
</v-list-item>
|
||||
</v-list>
|
||||
</v-navigation-drawer>
|
||||
|
||||
<!-- Contact Form -->
|
||||
<contact-form ref="contactForm"></contact-form>
|
||||
</nav>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import ContactForm from '@/components/contactForm.vue';
|
||||
|
||||
export default {
|
||||
components: {
|
||||
ContactForm
|
||||
},
|
||||
name: 'pageHeader',
|
||||
data() {
|
||||
return {
|
||||
mobile_menu: false,
|
||||
menuItems: [
|
||||
{ to: '/', label: 'Home' },
|
||||
{ to: '/affiliates', label: 'Affiliates' },
|
||||
{ to: '/#features', label: 'Features' },
|
||||
{ to: '/signup', label: 'Sign Up' },
|
||||
{ to: '/signin', label: 'Sign In' },
|
||||
],
|
||||
};
|
||||
},
|
||||
methods: {
|
||||
mobileMenu() {
|
||||
this.mobile_menu = !this.mobile_menu;
|
||||
},
|
||||
openContact() {
|
||||
this.mobile_menu = false;
|
||||
this.$refs.contactForm.setOpen();
|
||||
},
|
||||
},
|
||||
};
|
||||
</script>
|
||||
|
||||
<style lang="scss">
|
||||
nav{
|
||||
padding:0;
|
||||
|
||||
a{
|
||||
font-weight: 400;
|
||||
}
|
||||
.desktop-menu{
|
||||
display:none;
|
||||
|
||||
@media (min-width:960px){
|
||||
background-color: #fff;
|
||||
box-shadow: 0 4px 8px rgba(0, 0, 0, 0.2);
|
||||
position:fixed;
|
||||
height:70px;
|
||||
width:100%;
|
||||
display: flex;
|
||||
padding:20px;
|
||||
z-index:9999999;
|
||||
|
||||
.menu-row{
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
flex-direction: row;
|
||||
align-items: center;
|
||||
width:100%;
|
||||
|
||||
.brand{
|
||||
margin-right:18px;
|
||||
}
|
||||
.menu-items{
|
||||
color:inherit;
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
padding-top: 3px;
|
||||
|
||||
li{
|
||||
text-decoration: none;
|
||||
list-style: none;
|
||||
}
|
||||
|
||||
.menu-item{
|
||||
color:inherit;
|
||||
text-decoration: none;
|
||||
margin-right:18px;
|
||||
font-weight: 400;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
.mobile-menu{
|
||||
display:flex;
|
||||
height:60px;
|
||||
justify-content: space-between;
|
||||
padding: 0px 20px;
|
||||
align-items: center;
|
||||
box-shadow: 0 4px 8px rgba(0, 0, 0, 0.2);
|
||||
top:0;
|
||||
left: 0;
|
||||
width:100%;
|
||||
z-index:10;
|
||||
position: fixed;
|
||||
background-color:#fff;
|
||||
.menu-button{
|
||||
color:rgba(0,0,0,0.7);
|
||||
}
|
||||
@media (min-width: 960px){
|
||||
display:none;
|
||||
}
|
||||
}
|
||||
.mobile-drawer{
|
||||
position: fixed;
|
||||
top: 0;
|
||||
right: 0;
|
||||
z-index: 999;
|
||||
|
||||
@media(min-width:960px){
|
||||
display:none;
|
||||
}
|
||||
|
||||
.close-inner{
|
||||
display: flex;
|
||||
justify-content: flex-end;
|
||||
margin-bottom: 0;
|
||||
padding-bottom: 0px;
|
||||
.close{
|
||||
padding-top: 5px;
|
||||
padding-right:5px
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
</style>
|
||||
30
src/main.js
Executable file
@@ -0,0 +1,30 @@
|
||||
import Vue from 'vue'
|
||||
import './plugins/axios'
|
||||
import App from './App.vue'
|
||||
import vuetify from './plugins/vuetify'
|
||||
import router from './router'
|
||||
// import Vue from 'vue';
|
||||
import Meta from 'vue-meta';
|
||||
|
||||
Vue.use(Meta);
|
||||
|
||||
const hostname = window.location.hostname;
|
||||
if (hostname === 'stellaamor.com') {
|
||||
// Production environment
|
||||
Vue.prototype.$hostname = 'https://api.stellaamor.com/';
|
||||
Vue.prototype.$imageDomain = 'https://api.stellaamor.com/uploads/';
|
||||
} else {
|
||||
// Local environment
|
||||
Vue.prototype.$hostname = 'http://api.stellaamor.com.local/';
|
||||
Vue.prototype.$imageDomain = 'http://api.stellaamor.com.local/uploads/';
|
||||
}
|
||||
|
||||
|
||||
Vue.config.productionTip = false
|
||||
|
||||
new Vue({
|
||||
vuetify,
|
||||
router,
|
||||
Meta,
|
||||
render: h => h(App)
|
||||
}).$mount('#app')
|
||||
61
src/plugins/axios.js
Executable file
@@ -0,0 +1,61 @@
|
||||
"use strict";
|
||||
|
||||
import Vue from 'vue';
|
||||
import axios from "axios";
|
||||
|
||||
// Full config: https://github.com/axios/axios#request-config
|
||||
// axios.defaults.baseURL = process.env.baseURL || process.env.apiUrl || '';
|
||||
// axios.defaults.headers.common['Authorization'] = AUTH_TOKEN;
|
||||
// axios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded';
|
||||
|
||||
let config = {
|
||||
// baseURL: process.env.baseURL || process.env.apiUrl || ""
|
||||
// timeout: 60 * 1000, // Timeout
|
||||
// withCredentials: true, // Check cross-site Access-Control
|
||||
};
|
||||
|
||||
const _axios = axios.create(config);
|
||||
|
||||
_axios.interceptors.request.use(
|
||||
function(config) {
|
||||
// Do something before request is sent
|
||||
return config;
|
||||
},
|
||||
function(error) {
|
||||
// Do something with request error
|
||||
return Promise.reject(error);
|
||||
}
|
||||
);
|
||||
|
||||
// Add a response interceptor
|
||||
_axios.interceptors.response.use(
|
||||
function(response) {
|
||||
// Do something with response data
|
||||
return response;
|
||||
},
|
||||
function(error) {
|
||||
// Do something with response error
|
||||
return Promise.reject(error);
|
||||
}
|
||||
);
|
||||
|
||||
Plugin.install = function(Vue, options) {
|
||||
Vue.axios = _axios;
|
||||
window.axios = _axios;
|
||||
Object.defineProperties(Vue.prototype, {
|
||||
axios: {
|
||||
get() {
|
||||
return _axios;
|
||||
}
|
||||
},
|
||||
$axios: {
|
||||
get() {
|
||||
return _axios;
|
||||
}
|
||||
},
|
||||
});
|
||||
};
|
||||
|
||||
Vue.use(Plugin)
|
||||
|
||||
export default Plugin;
|
||||
7
src/plugins/vuetify.js
Executable file
@@ -0,0 +1,7 @@
|
||||
import Vue from 'vue';
|
||||
import Vuetify from 'vuetify/lib/framework';
|
||||
|
||||
Vue.use(Vuetify);
|
||||
|
||||
export default new Vuetify({
|
||||
});
|
||||
37
src/router/index.js
Executable file
@@ -0,0 +1,37 @@
|
||||
import Vue from 'vue'
|
||||
import VueRouter from 'vue-router'
|
||||
// import Home from '../views/HomeView.vue'
|
||||
// import Features from '../views/FeaturesView.vue'
|
||||
// import Signup from '../views/SignupView.vue'
|
||||
// import Signin from '../views/SigninView.vue'
|
||||
import appHome from '../views/AppHome.vue'
|
||||
// import stellaAffiliate from '@/views/stellaAffiliate.vue'
|
||||
|
||||
Vue.use(VueRouter)
|
||||
|
||||
const routes = [
|
||||
// { path: '/', component: Home },
|
||||
// { path: '/signup', component: Signup },
|
||||
// { path: '/signin', component: Signin },
|
||||
{ path: '/', component: appHome },
|
||||
// { path: '/affiliates', component: stellaAffiliate }
|
||||
]
|
||||
|
||||
|
||||
const router = new VueRouter({
|
||||
mode: 'history',
|
||||
base: process.env.BASE_URL,
|
||||
routes,
|
||||
scrollBehavior(to, from, savedPosition) {
|
||||
if (to.hash) {
|
||||
return { selector: to.hash };
|
||||
} else if (savedPosition) {
|
||||
return savedPosition;
|
||||
} else {
|
||||
return { x: 0, y: 0 };
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
export default router
|
||||
3937
src/views/AppHome.vue
Executable file
33
src/views/AppProfile.vue
Executable file
@@ -0,0 +1,33 @@
|
||||
<template>
|
||||
<div>
|
||||
<loginHeader></loginHeader>
|
||||
<div class="app-main">
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import axios from 'axios';
|
||||
import loginHeader from '@/components/loginHeader.vue'
|
||||
export default{
|
||||
name: 'appHome',
|
||||
components:{
|
||||
loginHeader,
|
||||
},
|
||||
data(){
|
||||
return{
|
||||
APIEndPoint: '',
|
||||
}
|
||||
},
|
||||
methods:{
|
||||
|
||||
},
|
||||
mounted(){
|
||||
|
||||
},
|
||||
created(){
|
||||
this.APIEndPoint = this.$hostname;
|
||||
},
|
||||
}
|
||||
</script>
|
||||
8
vue.config.js
Executable file
@@ -0,0 +1,8 @@
|
||||
const { defineConfig } = require('@vue/cli-service')
|
||||
module.exports = defineConfig({
|
||||
transpileDependencies: [
|
||||
'vuetify'
|
||||
],
|
||||
outputDir: 'dist',
|
||||
publicPath: '/home/'
|
||||
})
|
||||