🎉 init:

This commit is contained in:
john 2024-07-10 14:57:22 +08:00
commit 9c8766a1a4
195 changed files with 11844 additions and 0 deletions

13
.editorconfig Normal file
View File

@ -0,0 +1,13 @@
# editorconfig.org
root = true
[*]
indent_style = space
indent_size = 2
end_of_line = lf
charset = utf-8
trim_trailing_whitespace = true
insert_final_newline = true
[*.md]
trim_trailing_whitespace = false

92
.gitignore vendored Normal file
View File

@ -0,0 +1,92 @@
# Created by .ignore support plugin (hsz.mobi)
### Node template
# Logs
/logs
*.log
npm-debug.log*
yarn-debug.log*
yarn-error.log*
/server
*.zip
# Runtime data
pids
*.pid
*.seed
*.pid.lock
# Directory for instrumented libs generated by jscoverage/JSCover
lib-cov
# Coverage directory used by tools like istanbul
coverage
# nyc test coverage
.nyc_output
# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files)
.grunt
# Bower dependency directory (https://bower.io/)
bower_components
# node-waf configuration
.lock-wscript
# Compiled binary addons (https://nodejs.org/api/addons.html)
build/Release
# Dependency directories
node_modules/
jspm_packages/
# TypeScript v1 declaration files
typings/
# Optional npm cache directory
.npm
# Optional eslint cache
.eslintcache
# Optional REPL history
.node_repl_history
# Output of 'npm pack'
*.tgz
# Yarn Integrity file
.yarn-integrity
# dotenv environment variables file
.env
# parcel-bundler cache (https://parceljs.org/)
.cache
# next.js build output
.next
# nuxt.js build output
.nuxt
# Nuxt generate
dist
# vuepress build output
.vuepress/dist
# Serverless directories
.serverless
# IDE / Editor
.idea
# Service worker
sw.*
# macOS
.DS_Store
# Vim swap files
*.swp

69
README.md Normal file
View File

@ -0,0 +1,69 @@
# demo
## Build Setup
```bash
# install dependencies
$ yarn install
# serve with hot reload at localhost:3000
$ yarn dev
# build for production and launch server
$ yarn build
$ yarn start
# generate static project
$ yarn generate
```
For detailed explanation on how things work, check out the [documentation](https://nuxtjs.org).
## Special Directories
You can create the following extra directories, some of which have special behaviors. Only `pages` is required; you can delete them if you don't want to use their functionality.
### `assets`
The assets directory contains your uncompiled assets such as Stylus or Sass files, images, or fonts.
More information about the usage of this directory in [the documentation](https://nuxtjs.org/docs/2.x/directory-structure/assets).
### `components`
The components directory contains your Vue.js components. Components make up the different parts of your page and can be reused and imported into your pages, layouts and even other components.
More information about the usage of this directory in [the documentation](https://nuxtjs.org/docs/2.x/directory-structure/components).
### `layouts`
Layouts are a great help when you want to change the look and feel of your Nuxt app, whether you want to include a sidebar or have distinct layouts for mobile and desktop.
More information about the usage of this directory in [the documentation](https://nuxtjs.org/docs/2.x/directory-structure/layouts).
### `pages`
This directory contains your application views and routes. Nuxt will read all the `*.vue` files inside this directory and setup Vue Router automatically.
More information about the usage of this directory in [the documentation](https://nuxtjs.org/docs/2.x/get-started/routing).
### `plugins`
The plugins directory contains JavaScript plugins that you want to run before instantiating the root Vue.js Application. This is the place to add Vue plugins and to inject functions or constants. Every time you need to use `Vue.use()`, you should create a file in `plugins/` and add its path to plugins in `nuxt.config.js`.
More information about the usage of this directory in [the documentation](https://nuxtjs.org/docs/2.x/directory-structure/plugins).
### `static`
This directory contains your static files. Each file inside this directory is mapped to `/`.
Example: `/static/robots.txt` is mapped as `/robots.txt`.
More information about the usage of this directory in [the documentation](https://nuxtjs.org/docs/2.x/directory-structure/static).
### `store`
This directory contains your Vuex store files. Creating a file in this directory automatically activates Vuex.
More information about the usage of this directory in [the documentation](https://nuxtjs.org/docs/2.x/directory-structure/store).

1
assets/data/q3.json Normal file

File diff suppressed because one or more lines are too long

Binary file not shown.

Binary file not shown.

128
assets/js/static.js Normal file
View File

@ -0,0 +1,128 @@
export const tabs=[
{
name:'index',
title:'Home',
icon:'home'
},
{
name:'startups',
icon:'startups',
title:'Startups'
}, {
name:'innovation',
icon:'innovationInsights',
title:'Innovation Insights'
}, {
name:'LPLogin',
icon:'LPLogin',
title:'LP Login'
},
{
name:'joinUs',
icon:'joinLightLimX',
title:'Join LightLimX'
},
{
name:'contact',
icon:'contactUs',
title:'Contact Us'
},
]
export const footerLink=[
{
name:'startups',
title:'Startups',
type:'link'
},
{
name:'LPLogin',
title:'LP Login',
type:'link'
},
{
name:'partners',
title:'Partners',
type:'href',
link:'/'
},
{
name:'portfolio',
title:'Portfolio',
type:'href',
link:'/'
},
{
name:'focusAreas',
title:'Focus Areas',
type:'href',
link:'/'
},
{
name:'aboutUs',
title:'About Us',
type:'href',
link:'/'
}, {
name:'innovation',
title:'Innovation Insights',
type:'link'
},
{
name:'joinUs',
title:'Join LightLimX',
type:'link'
},
{
name:'contact',
title:'Contact Us',
type:'link'
},
]
export const portfolios=[
{
time:'.3s',
img:'Accelerator',
title:'Accelerator',
content:'We leverage proprietary processes to build market-leading companies from scratch. Our extensive operational support team accelerates the growth of ventures we partner with.',
link:'/startups'
},{
time:'.6s',
img:'Investment',
title:'Investment',
content:'We bring our wealth of venture experience and leverage our global resources to help projects and maximize their potential.',
link:'/startups'
},{
time:'.9s',
img:'Growth',
title:'Growth',
content:'We drive strategic growth, shorten the time to reach global scale, facilitate introductions, but we dont stop there. ',
link:'/startups'
},
]
export const partners=[
{
img:'images/1.png',
link:''
}, {
img:'images/2.png',
link:''
}, {
img:'images/3.png',
link:''
}, {
img:'images/4.png',
link:''
}, {
img:'images/5.png',
link:''
}
]
export const banners=[
{
img:'images/b.png',
},{
img:'images/1.png',
},{
img:'images/2.png',
},
]

2866
assets/style/animate.css vendored Normal file

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

63
assets/style/reset.less Normal file
View File

@ -0,0 +1,63 @@
@font-face {
font-family: 'Manrope'; /*给自定义字体命名*/
src: url('~/assets/fonts/Manrope-Regular.ttf') format('truetype');
font-weight:normal;
font-style: normal;
}
@font-face {
font-family: 'Manrope'; /*给自定义字体命名*/
src: url('~/assets/fonts/Manrope-Bold.ttf') format('truetype');
font-weight:Bold;
font-style: normal;
}
body,dl,dt,dd,ul,ol,li,pre,form,fieldset,input,p,blockquote,th,td{;font-weight:400;margin:0;padding:0}h1,h2,h3,h4,h4,h5{margin:0;padding:0}body{background-color:#f7f7f7;color:#666;font-family:Helvetica,Arial,sans-serif;font-size:14px;text-align:left}select{font-size:14px}table{border-collapse:collapse}fieldset,img{border:0 none}fieldset{margin:0;padding:0}fieldset p{margin:0;padding:0 0 0 8px}legend{display:none}address,caption,em,strong,th,i{font-style:normal;font-weight:400}table caption{margin-left:-1px}hr{border-bottom:1px solid #fff;border-top:1px solid #eee;border-width:1px 0;clear:both;height:2px;margin:5px 0;overflow:hidden}ol,ul{list-style-image:none;list-style-position:outside;list-style-type:none}caption,th{text-align:left}q:before,q:after,blockquote:before,blockquote:after{content:''}.clearfix{clear: both;}.fl{float: left;}.fr{float: right;}html,body{height: 100%}
#__layout,#__nuxt{
height: 100%;
display: block;
}
body{
overflow-x: hidden !important;
}
div[class*="-h5-wrap"]{
width: 100%;
max-width: 13rem;
margin: 0 auto;
}
@media screen and (max-width: 1300px) {
div[class*="-h5-wrap"]{
padding: 0 .15rem;
box-sizing: border-box;
white-space:pre-wrap;
//overflow--y: visible;
}
}
@media screen and (max-width: 768px) {
div[class*="-h5-wrap"]{
padding: 0 .15rem;
box-sizing: border-box;
white-space:pre-wrap;
overflow-x:hidden ;
height: auto !important;
}
}
.h5-scroll-bar{
overflow-y: auto;
}
.h5-scroll-bar::-webkit-scrollbar{
width:4px;
height:4px;
}
.h5-scroll-bar::-webkit-scrollbar-track{
background: #f6f6f6;
border-radius:2px;
}
.h5-scroll-bar::-webkit-scrollbar-thumb{
background: #aaa;
border-radius:2px;
}
.h5-scroll-bar::-webkit-scrollbar-thumb:hover{
background: #747474;
}
.h5-scroll-bar::-webkit-scrollbar-corner{
background: #f6f6f6;
}

1
assets/svg/LPLogin.svg Normal file
View File

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="34.001" height="28.237" viewBox="0 0 34.001 28.237"><g transform="translate(-0.007 -86.803)"><path d="M297.4,421.875l-7.347,7.9,2.14,1.992,3.679-3.959v11.174h3.06V427.814l3.679,3.957,2.139-1.992Z" transform="translate(-280.419 -323.946)"/><path d="M29.3,86.8H4.713A4.706,4.706,0,0,0,.007,91.509v18.825a4.706,4.706,0,0,0,4.706,4.706H9.948v-2.656H4.713a2.052,2.052,0,0,1-2.05-2.05V91.509a2.052,2.052,0,0,1,2.05-2.05H29.3a2.052,2.052,0,0,1,2.05,2.05v18.825a2.052,2.052,0,0,1-2.05,2.05H24.067v2.656H29.3a4.706,4.706,0,0,0,4.706-4.706V91.509A4.706,4.706,0,0,0,29.3,86.8Z"/></g></svg>

After

Width:  |  Height:  |  Size: 625 B

1
assets/svg/arrow.svg Normal file
View File

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="7.121" height="11.414" viewBox="0 0 7.121 11.414"><defs><style>.a{fill:none;stroke:#000;stroke-width:2px;}</style></defs><path class="a" d="M378.216,431.015l5,5,5-5" transform="translate(437.429 -377.509) rotate(90)"/></svg>

After

Width:  |  Height:  |  Size: 271 B

1
assets/svg/close.svg Normal file
View File

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="34" height="34" viewBox="0 0 34 34"><defs><style>.a{fill:#929292;}</style></defs><path class="a" d="M43.977,42.025,29.335,27.383a1.38,1.38,0,1,0-1.952,1.952L42.025,43.977,27.383,58.619a1.38,1.38,0,1,0,1.952,1.952L43.977,45.929,58.619,60.571a1.38,1.38,0,1,0,1.952-1.952L45.929,43.977,60.571,29.335a1.38,1.38,0,1,0-1.952-1.952Z" transform="translate(-26.977 -26.977)"/></svg>

After

Width:  |  Height:  |  Size: 420 B

1
assets/svg/contactUs.svg Normal file
View File

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="34" height="30.385" viewBox="0 0 34 30.385"><g transform="translate(-95.645 -160.6)"><path d="M585.8,697.5m-1.6,0a1.6,1.6,0,1,0,1.6-1.6A1.6,1.6,0,0,0,584.2,697.5Z" transform="translate(-469.015 -513.89)"/><path d="M129.468,168.271l-.644-2.06a8.521,8.521,0,0,0-2.576-3.892,6.865,6.865,0,0,0-4.412-1.72H103.454a6.873,6.873,0,0,0-4.412,1.72,8.552,8.552,0,0,0-2.576,3.892l-.644,2.06a3.823,3.823,0,0,0,3.648,4.964h2.344l-2.544,9.015a6.5,6.5,0,0,0,6.1,8.735h14.539a6.5,6.5,0,0,0,6.1-8.735l-2.544-9.015h2.344a3.828,3.828,0,0,0,3.652-4.964Zm-6.187,14.811a.985.985,0,0,0,.04.116,3.638,3.638,0,0,1-3.4,4.924H105.378a3.638,3.638,0,0,1-3.4-4.924c.016-.04.028-.076.04-.116l2.78-9.851h1.4a3.829,3.829,0,0,0,3.78-4.412h5.36a3.829,3.829,0,0,0,3.78,4.412h1.4Zm3.48-12.979a1.152,1.152,0,0,1-.94.476H119.1a1.166,1.166,0,0,1-1.112-1.516l.364-1.168a1.323,1.323,0,0,0-1.264-1.72H108.21a1.326,1.326,0,0,0-1.268,1.72l.364,1.168a1.166,1.166,0,0,1-1.112,1.516H99.475a1.166,1.166,0,0,1-1.112-1.516l.644-2.06a5.127,5.127,0,0,1,4.452-3.752h18.386A5.127,5.127,0,0,1,126.3,167l.644,2.06A1.168,1.168,0,0,1,126.76,170.1Z" transform="translate(0)"/><path d="M373.127,482a6.327,6.327,0,1,0,0,12.655,1.216,1.216,0,1,0,0-2.432,3.9,3.9,0,1,1,3.9-3.9,1.216,1.216,0,0,0,2.432,0A6.339,6.339,0,0,0,373.127,482Z" transform="translate(-260.31 -308.545)"/></g></svg>

After

Width:  |  Height:  |  Size: 1.3 KiB

1
assets/svg/copy.svg Normal file
View File

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="24.21" height="24.319" viewBox="0 0 24.21 24.319"><defs><style>.a{fill:#7b7b7b;}</style></defs><path class="a" d="M83.819,66.311A2.188,2.188,0,0,1,86.008,68.5V82.13a2.188,2.188,0,0,1-2.188,2.188H70.188A2.188,2.188,0,0,1,68,82.13V68.5a2.188,2.188,0,0,1,2.188-2.188H83.819Zm-6.8,4a.813.813,0,0,0-.813.8v3.406H72.8a.813.813,0,0,0,.006,1.625h3.406v3.38a.813.813,0,0,0,1.625-.006V76.143h3.38a.813.813,0,0,0-.006-1.625H77.832V71.106a.813.813,0,0,0-.813-.794ZM89.206,60a3,3,0,0,1,3,2.954V73.018a3,3,0,0,1-2.954,3h-1.14A.814.814,0,0,1,88.1,74.4h1.11a1.377,1.377,0,0,0,1.377-1.354V63a1.377,1.377,0,0,0-1.354-1.377H79.192a1.377,1.377,0,0,0-1.377,1.354V64.29a.814.814,0,0,1-1.627.019V63a3,3,0,0,1,2.954-3H89.206Z" transform="translate(-68 -60)"/></svg>

After

Width:  |  Height:  |  Size: 788 B

1
assets/svg/cuarr.svg Normal file
View File

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="21.414" height="12.121" viewBox="0 0 21.414 12.121"><defs><style>.a{fill:none;stroke:#f49f00;stroke-miterlimit:10;stroke-width:2px;}</style></defs><path class="a" d="M871.933,321.933l10,10-10,10" transform="translate(342.64 -871.226) rotate(90)"/></svg>

After

Width:  |  Height:  |  Size: 300 B

1
assets/svg/filter-ar.svg Normal file
View File

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="30" height="30" viewBox="0 0 30 30"><defs><style>.a,.b{fill:none;}.b{stroke:#000;stroke-width:2px;}</style></defs><g transform="translate(-373 -411)"><g transform="translate(373 411)"><rect class="a" width="30" height="30"/></g><path class="b" d="M378.216,431.015l5,5,5-5" transform="translate(5.096 -7.203)"/></g></svg>

After

Width:  |  Height:  |  Size: 367 B

1
assets/svg/filter.svg Normal file
View File

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="48" height="48" viewBox="0 0 48 48"><defs><style>.a{fill:none;}.b{fill:#1c1717;}</style></defs><g transform="translate(-373 -411)"><rect class="a" width="48" height="48" transform="translate(373 411)"/><path class="b" d="M156.915,265.944v-1.657h6.629v1.657H176.8v3.315H163.544v1.657h-6.629v-1.657H153.6v-3.315Zm9.944-8.287V256h6.629v1.657H176.8v3.315h-3.315v1.657h-6.629v-1.657H153.6v-3.315Z" transform="translate(231.601 171.629)"/></g></svg>

After

Width:  |  Height:  |  Size: 490 B

1
assets/svg/flower.svg Normal file

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 8.5 KiB

View File

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="154.197" height="26.408" viewBox="0 0 154.197 26.408"><defs><style>.a{fill:#fff;}.b{fill:#f49f00;}</style></defs><g transform="translate(3127.067 -1675.422)"><path class="a" d="M-3127.067,1680.121h2.115v17.1h11.68l-.349,1.886h-13.447Z" transform="translate(0 -3.588)"/><rect class="a" width="2.014" height="2.922" transform="translate(-3110.01 1675.422)"/><rect class="a" width="2.014" height="13.408" transform="translate(-3110.01 1682.108)"/><path class="a" d="M-3018.195,1714.083c0,5.11-1.531,8.142-7.019,8.142-5.06,0-6.148-2.95-6.41-4.555h2.067c.427,1.512,1.479,2.858,4.453,2.858,4.264,0,4.926-2.749,4.926-6.362v-.78c-.822,1.707-2.376,2.775-5.216,2.775-3.756,0-6.381-2.948-6.381-6.791,0-4.331,3.155-7.239,6.7-7.239,3.143,0,4.461,1.473,4.892,2.6,0-.7.031-1.836.08-2.223h1.93c-.027,1.292-.027,2.584-.027,3.877Zm-11.5-4.806a4.752,4.752,0,0,0,4.765,5.1c3,0,4.814-1.875,4.814-5.255,0-3.4-1.733-5.219-4.663-5.219C-3028.164,1703.9-3029.7,1706.653-3029.7,1709.277Z" transform="translate(-72.766 -20.395)"/><path class="a" d="M-2952.7,1675.422v9.31c.466-1.055,1.728-3,5.1-3,2.995,0,5.038,1.878,5.038,5.67v8.11h-2.022v-7.76c0-2.413-.915-4.249-3.586-4.249-3.079,0-4.53,2.5-4.53,5.377v6.632h-2.014v-20.094Z" transform="translate(-131.614)"/><path class="a" d="M-2893.207,1689.418h2.739V1685h2.018v4.423h3.611v1.666h-3.611v7.836c0,1.652.437,2.382,1.945,2.382a6.205,6.205,0,0,0,1.37-.125v1.547a5.37,5.37,0,0,1-1.9.231c-2.623,0-3.434-1.183-3.434-3.83v-8.04h-2.739Z" transform="translate(-178.578 -7.31)"/><path class="a" d="M-2844.413,1681.016h4.552v15.12h10.509l-.6,3.651h-14.463Z" transform="translate(-215.838 -4.272)"/><path class="a" d="M-2769.927,1676.477h4.355v3.479h-4.355Zm0,6.072h4.355v13.772h-4.355Z" transform="translate(-272.716 -0.806)"/><path class="a" d="M-2736.067,1704.517c0-1.194,0-2.363-.026-3.556h4.164c.077.536.1,1.131.124,1.629a4.914,4.914,0,0,1,4.193-2c2.434,0,3.612,1.066,4.155,2.256a5.222,5.222,0,0,1,4.637-2.256c2.884,0,5.154,1.721,5.154,5.826v8.319h-4.284v-8.215c0-1.2-.419-2.64-2.226-2.64-1.564,0-2.512.981-2.512,3.251v7.6H-2727V1706.5c0-1.36-.493-2.621-2.229-2.621-1.765,0-2.532,1.272-2.532,3.262v7.593h-4.308Z" transform="translate(-298.552 -19.217)"/><g transform="translate(-3005.732 1678.467)"><path class="b" d="M-2606.187,1691.912c.386.318.886.766,1.487,1.328l1.848,1.886,4.236-4.125-2.771-2.7s-.005,0-.009,0h-12.385a17.619,17.619,0,0,1,3.334,1.033A18.454,18.454,0,0,1-2606.187,1691.912Z" transform="translate(2613.781 -1688.303)"/><path class="b" d="M-2589.642,1699.35l-3.042-2.963.026-.026,3.058-3.122c.6-.562,1.1-1.01,1.487-1.328a18.449,18.449,0,0,1,4.26-2.575,17.63,17.63,0,0,1,3.334-1.033H-2592.9s-.009,0-.009,0l-11.345,11.047q-1.485,1.367-2.97,2.5a17.686,17.686,0,0,1-6.029,2.532s.963.974.963.974h10.46l4.86-4.763.024-.023.023.023,4.86,4.763h10.46s.967-.974.963-.974a17.69,17.69,0,0,1-6.029-2.532Q-2588.157,1700.722-2589.642,1699.35Z" transform="translate(2613.381 -1688.303)"/></g></g></svg>

After

Width:  |  Height:  |  Size: 2.9 KiB

1
assets/svg/home.svg Normal file
View File

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="34" height="32.818" viewBox="0 0 34 32.818"><defs><style>.a{fill:#2e2c2c;}</style></defs><path class="a" d="M33.567,34.168,18.1,18.258a1.509,1.509,0,0,0-1.091-.46h-.032a1.51,1.51,0,0,0-1.119.462L.443,34.17a1.852,1.852,0,0,0-.32,1.843,1.672,1.672,0,0,0,1.415,1.119H3.852v11.6a2.082,2.082,0,0,0,1.782,1.884h6.79c.873,0,1.414-.93,1.414-1.791V43.36H19.3v5.372a1.973,1.973,0,0,0,.609,1.259,1.931,1.931,0,0,0,1.251.625h6.686a1.344,1.344,0,0,0,1.135-.725,2.323,2.323,0,0,0,.336-1.158v-11.6h3.161a1.673,1.673,0,0,0,1.415-1.12,1.854,1.854,0,0,0-.322-1.844ZM26.2,35.508V47.5H22.41v-6a1.223,1.223,0,0,0-.328-.949,1.3,1.3,0,0,0-.926-.273H12.28a1.924,1.924,0,0,0-.956.2,1.116,1.116,0,0,0-.569,1.025v6H6.935V35.253a1.13,1.13,0,0,0-1.3-1.236H5.182l11.8-12.178,11.84,12.178h-.806A1.732,1.732,0,0,0,26.2,35.508Z" transform="translate(-0.006 -17.798)"/></svg>

After

Width:  |  Height:  |  Size: 888 B

1
assets/svg/hstart.svg Normal file

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 388 KiB

View File

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="34" height="34" viewBox="0 0 34 34"><defs><style>.a{fill:#333;}</style></defs><g transform="translate(-102.4 -102.4)"><path class="a" d="M127.9,130.557V102.4H108.244a5.844,5.844,0,0,0-5.844,5.844v22.313a5.844,5.844,0,0,0,5.844,5.844h13.813A5.844,5.844,0,0,0,127.9,130.557Zm-19.656-24.969h16.469v24.969a2.657,2.657,0,0,1-2.656,2.656H108.244a2.657,2.657,0,0,1-2.656-2.656V108.244A2.657,2.657,0,0,1,108.244,105.588Z" transform="translate(0 0)"/><path class="a" d="M716.8,102.4h2.125v2.125H716.8Z" transform="translate(-588.9 0)"/><path class="a" d="M258.712,115.6a1.594,1.594,0,0,1,.021,2.253l-6.4,6.524-.03.023-.145.132-.006.006.181-.159a1.587,1.587,0,0,1-.344.266l-.051.028a1.581,1.581,0,0,1-1.577-.051l-.076-.051a1.233,1.233,0,0,1-.113-.085l-.07-.064-2.871-2.716a1.594,1.594,0,1,1,2.189-2.317l1.732,1.641,5.306-5.406a1.594,1.594,0,0,1,2.253-.021ZM268.9,102.4a5.844,5.844,0,0,0-5.844,5.844v10.094H268.9a5.844,5.844,0,0,0,5.844-5.844v-4.25A5.844,5.844,0,0,0,268.9,102.4Zm0,3.188a2.657,2.657,0,0,1,2.656,2.656v4.25l-.013.272a2.656,2.656,0,0,1-2.644,2.384h-2.656v-6.906A2.657,2.657,0,0,1,268.9,105.588Z" transform="translate(-138.343 0)"/></g></svg>

After

Width:  |  Height:  |  Size: 1.2 KiB

View File

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="34" height="33.301" viewBox="0 0 34 33.301"><g transform="translate(-131.586 -139.307)"><path d="M162.248,318.732H134.924a3.337,3.337,0,0,1-2.431-1.068,3.429,3.429,0,0,1-.9-2.6l1.592-19.678a3.384,3.384,0,0,1,3.327-3.118h24.139a3.384,3.384,0,0,1,3.327,3.118l1.592,19.668a3.429,3.429,0,0,1-.9,2.6,3.31,3.31,0,0,1-2.431,1.077Zm-25.731-23.605a.506.506,0,0,0-.477.486l-1.583,19.678a.593.593,0,0,0,.143.439.46.46,0,0,0,.334.153h27.314a.46.46,0,0,0,.334-.153.577.577,0,0,0,.143-.439l-1.592-19.668a.5.5,0,0,0-.477-.486H136.516Z" transform="translate(0 -146.124)"/><path d="M236.691,147.573h-2.86V144.2a2.233,2.233,0,0,0-2.383-2.031h-9.534a2.226,2.226,0,0,0-2.383,2.031v3.375h-2.86V144.2a5.083,5.083,0,0,1,5.244-4.891h9.534a5.083,5.083,0,0,1,5.244,4.891v3.375Zm-23.358,6.035h26.694v2.86H213.333Z" transform="translate(-78.094)"/><path d="M380.17,507.743a6.209,6.209,0,0,1-6.2-6.2h2.86a3.337,3.337,0,1,0,6.674,0h2.86a6.2,6.2,0,0,1-6.2,6.2Z" transform="translate(-231.555 -346.051)"/></g></svg>

After

Width:  |  Height:  |  Size: 1.0 KiB

1
assets/svg/loading.svg Normal file
View File

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 750.26 389.25"><defs><style>.cls-1{fill:#f49f00;}</style></defs><title>资源 17</title><g id="图层_2" data-name="图层 2"><g id="图层_1-2" data-name="图层 1"><path class="cls-1" d="M173.39,82.39c8.82,7.27,20.23,17.49,33.94,30.33l42.19,43.06,96.71-94.17L283,0s-.12.07-.19,0H0A403,403,0,0,1,76.12,23.6C107.08,37.62,144.32,57.53,173.39,82.39Z"/><path class="cls-1" d="M542,252.22,472.5,184.58l.6-.59,69.83-71.27c13.71-12.84,25.12-23.06,33.94-30.33,29.07-24.86,66.3-44.77,97.27-58.79A403,403,0,0,1,750.26,0H467.49c-.07.07-.19,0-.19,0l-259,252.22q-33.9,31.21-67.81,57A403.66,403.66,0,0,1,2.83,367c-.09,0,22,22.25,22,22.25H263.63l111-108.73.54-.53.53.53,111,108.73H725.44s22.08-22.25,22-22.25a403.66,403.66,0,0,1-137.65-57.82Q575.88,283.53,542,252.22Z"/></g></g></svg>

After

Width:  |  Height:  |  Size: 823 B

1
assets/svg/logo.svg Normal file
View File

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="154.197" height="26.408" viewBox="0 0 154.197 26.408"><defs><style>.a{fill:#fff;}.b{fill:#f49f00;}</style></defs><g transform="translate(3127.067 -1675.422)"><path class="a" d="M-3127.067,1680.121h2.115v17.1h11.68l-.349,1.886h-13.447Z" transform="translate(0 -3.588)"/><rect class="a" width="2.014" height="2.922" transform="translate(-3110.01 1675.422)"/><rect class="a" width="2.014" height="13.408" transform="translate(-3110.01 1682.108)"/><path class="a" d="M-3018.195,1714.083c0,5.11-1.531,8.142-7.019,8.142-5.06,0-6.148-2.95-6.41-4.555h2.067c.427,1.512,1.479,2.858,4.453,2.858,4.264,0,4.926-2.749,4.926-6.362v-.78c-.822,1.707-2.376,2.775-5.216,2.775-3.756,0-6.381-2.948-6.381-6.791,0-4.331,3.155-7.239,6.7-7.239,3.143,0,4.461,1.473,4.892,2.6,0-.7.031-1.836.08-2.223h1.93c-.027,1.292-.027,2.584-.027,3.877Zm-11.5-4.806a4.752,4.752,0,0,0,4.765,5.1c3,0,4.814-1.875,4.814-5.255,0-3.4-1.733-5.219-4.663-5.219C-3028.164,1703.9-3029.7,1706.653-3029.7,1709.277Z" transform="translate(-72.766 -20.395)"/><path class="a" d="M-2952.7,1675.422v9.31c.466-1.055,1.728-3,5.1-3,2.995,0,5.038,1.878,5.038,5.67v8.11h-2.022v-7.76c0-2.413-.915-4.249-3.586-4.249-3.079,0-4.53,2.5-4.53,5.377v6.632h-2.014v-20.094Z" transform="translate(-131.614)"/><path class="a" d="M-2893.207,1689.418h2.739V1685h2.018v4.423h3.611v1.666h-3.611v7.836c0,1.652.437,2.382,1.945,2.382a6.205,6.205,0,0,0,1.37-.125v1.547a5.37,5.37,0,0,1-1.9.231c-2.623,0-3.434-1.183-3.434-3.83v-8.04h-2.739Z" transform="translate(-178.578 -7.31)"/><path class="a" d="M-2844.413,1681.016h4.552v15.12h10.509l-.6,3.651h-14.463Z" transform="translate(-215.838 -4.272)"/><path class="a" d="M-2769.927,1676.477h4.355v3.479h-4.355Zm0,6.072h4.355v13.772h-4.355Z" transform="translate(-272.716 -0.806)"/><path class="a" d="M-2736.067,1704.517c0-1.194,0-2.363-.026-3.556h4.164c.077.536.1,1.131.124,1.629a4.914,4.914,0,0,1,4.193-2c2.434,0,3.612,1.066,4.155,2.256a5.222,5.222,0,0,1,4.637-2.256c2.884,0,5.154,1.721,5.154,5.826v8.319h-4.284v-8.215c0-1.2-.419-2.64-2.226-2.64-1.564,0-2.512.981-2.512,3.251v7.6H-2727V1706.5c0-1.36-.493-2.621-2.229-2.621-1.765,0-2.532,1.272-2.532,3.262v7.593h-4.308Z" transform="translate(-298.552 -19.217)"/><g transform="translate(-3005.732 1678.467)"><path class="b" d="M-2606.187,1691.912c.386.318.886.766,1.487,1.328l1.848,1.886,4.236-4.125-2.771-2.7s-.005,0-.009,0h-12.385a17.619,17.619,0,0,1,3.334,1.033A18.454,18.454,0,0,1-2606.187,1691.912Z" transform="translate(2613.781 -1688.303)"/><path class="b" d="M-2589.642,1699.35l-3.042-2.963.026-.026,3.058-3.122c.6-.562,1.1-1.01,1.487-1.328a18.449,18.449,0,0,1,4.26-2.575,17.63,17.63,0,0,1,3.334-1.033H-2592.9s-.009,0-.009,0l-11.345,11.047q-1.485,1.367-2.97,2.5a17.686,17.686,0,0,1-6.029,2.532s.963.974.963.974h10.46l4.86-4.763.024-.023.023.023,4.86,4.763h10.46s.967-.974.963-.974a17.69,17.69,0,0,1-6.029-2.532Q-2588.157,1700.722-2589.642,1699.35Z" transform="translate(2613.381 -1688.303)"/></g></g></svg>

After

Width:  |  Height:  |  Size: 2.9 KiB

1
assets/svg/menu.svg Normal file
View File

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="34" height="29.055" viewBox="0 0 34 29.055"><defs><style>.a{fill:#929292;}</style></defs><path class="a" d="M186.756,235.667h30.7a1.648,1.648,0,0,0,0-3.3h-30.7a1.517,1.517,0,0,0-1.649,1.648A1.625,1.625,0,0,0,186.756,235.667Zm30.7,9.685h-30.7A1.517,1.517,0,0,0,185.107,247a1.625,1.625,0,0,0,1.649,1.648h30.7a1.648,1.648,0,0,0,0-3.3Zm0,12.776h-30.7a1.517,1.517,0,0,0-1.649,1.648,1.625,1.625,0,0,0,1.649,1.648h30.7a1.648,1.648,0,1,0,0-3.3Z" transform="translate(-185.107 -232.37)"/></svg>

After

Width:  |  Height:  |  Size: 532 B

1
assets/svg/start.svg Normal file
View File

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="331.023" height="243.18" viewBox="0 0 331.023 243.18"><defs><style>.a,.b,.c,.d,.e,.f{fill:none;stroke:#f49f00;stroke-miterlimit:10;}.a,.b,.c,.d,.e{stroke-width:0.75px;}.a{opacity:0.1;}.b{opacity:0.2;}.c{opacity:0.3;}.d{opacity:0.4;}.e{opacity:0.5;}.g{fill:#f49f00;}</style></defs><g transform="translate(0.91 0.375)"><path class="a" d="M-2110.917-3433.463l-122.114-121.215,122.114-121.215h-84.974l-79.627,79.04-79.627-79.04h-84.974l122.114,121.215-122.114,121.215h84.974l79.627-79.041,79.627,79.041Z" transform="translate(2440.12 3675.894)"/><path class="b" d="M-2123.787-3442.941l-103.644-102.881,103.644-102.882h-72.122l-67.583,67.086-67.583-67.086H-2403.2l103.644,102.882L-2403.2-3442.941h72.122l67.583-67.085,67.583,67.085Z" transform="translate(2428.094 3667.038)"/><path class="c" d="M-2136.658-3452.419l-85.174-84.546,85.174-84.548h-59.269l-55.539,55.131-55.539-55.131h-59.27l85.174,84.548-85.174,84.546h59.27l55.539-55.13,55.539,55.13Z" transform="translate(2416.068 3658.181)"/><path class="d" d="M-2149.528-3461.9l-66.7-66.213,66.7-66.213h-46.417l-43.5,43.175-43.5-43.175h-46.417l66.7,66.213-66.7,66.213h46.417l43.5-43.175,43.5,43.175Z" transform="translate(2404.042 3649.325)"/><path class="e" d="M-2162.4-3471.375l-48.234-47.878,48.234-47.879h-33.564l-31.452,31.22-31.452-31.22h-33.564l48.233,47.879-48.233,47.878h33.564l31.452-31.22,31.452,31.22Z" transform="translate(2392.016 3640.469)"/><path class="f" d="M-2175.27-3539.942h-20.711l-19.407,19.265-19.408-19.265h-20.711l29.764,29.544-29.764,29.544h20.711l19.408-19.264,19.407,19.264h20.711l-29.764-29.544Z" transform="translate(2379.99 3631.612)"/><g transform="translate(118.095 86.968)"><path class="g" d="M-2171.967-3478.422h-24.009l-69-68.5h24.009Z" transform="translate(2264.98 3546.917)"/><path class="g" d="M-2264.98-3478.422h24.009l69-68.5h-24.009Z" transform="translate(2264.98 3546.917)"/></g></g></svg>

After

Width:  |  Height:  |  Size: 1.9 KiB

1
assets/svg/startups.svg Normal file
View File

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="34" height="35.976" viewBox="0 0 34 35.976"><defs><style>.a{fill:#2e2c2c;}</style></defs><g transform="translate(-85.334 -64.643)"><path class="a" d="M559.115,312.532l14.254,2.818a.857.857,0,0,1,.677.691l.014.149v21.5a.858.858,0,0,1-.7.844l-.154.014H559.1l.01-26.011Zm3.427,4.173-.007,18.408h8.1V318.3l-8.088-1.6Z" transform="translate(-454.726 -237.924)"/><path class="a" d="M107.793,65.288a.858.858,0,0,1,.026.213V99.8a.818.818,0,0,1-.818.816H86.191a.858.858,0,0,1-.858-.858V70.823a.858.858,0,0,1,.645-.83l20.77-5.322a.858.858,0,0,1,1.045.617Zm-3.4,3.528-15.625,4v24.37h15.625Z" transform="translate(0)"/><path class="a" d="M400.983,288.384h3.087v8.576h-3.43v-8.576Z" transform="translate(-302.631 -214.747)"/></g></svg>

After

Width:  |  Height:  |  Size: 769 B

1
assets/svg/sun.svg Normal file

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 460 KiB

View File

@ -0,0 +1,202 @@
<template>
<section class="section-view" :style="isCssStyle" >
<div class="section-view-h5-wrap">
<h1 class="section-view-title wow fadeInUpBig">About Us</h1>
<div class="section-view-content">
<div class="section-view-circle wow fadeInUpBig" data-wow-delay=".5s">
<slot></slot>
</div>
<div class="section-view-article">
<h1 class="section-view-title wow fadeInUpBig" style="text-align: center">About Us</h1>
<p class="section-view-article-p wow fadeInUpBig" data-wow-delay=".3s" >LightLimX is an early-stage investment platform. We focus on markets where technology, innovation, and LightLimX can unlock long-term value and drive economic growth.</p>
<p class="section-view-article-w wow fadeInUpBig" data-wow-delay=".4s">"To create miracles and give insight into the future together with entrepreneurs" is the original aspiration of LightLimX. As an investment institution with strong curiosity and corporate responsibility, we catalyze technological advancement by connecting blue chip corporations with the brightest startups across the globe.</p>
<p class="section-view-article-w wow fadeInUpBig" data-wow-delay=".5s">In addition to making direct venture investments,LightLimX provides financing& insigths& operating expertise to promising the most compelling companies to flourish.To-date, LightLimX has provided advice and support for more than 20 companies, raised more than $15 million in seed and later-stage funding,valued at over $1 billion dollars.</p>
<div class="section-view-flower-wrap wow fadeInUpBig" data-wow-delay=".5s">
<svg-icon icon-class="flower"></svg-icon>
</div>
</div>
</div>
</div>
</section>
</template>
<script>
export default {
name: "AboutUs",
props:{
cssStyle:{
type:Object,
default:()=>{
return {}
}
}
},
computed:{
isCssStyle(){
return this.cssStyle
}
}
}
</script>
<style scoped lang="less">
.section-view{
width: 100%;
min-height: 100vh;
box-sizing: border-box;
background-color: #fff;
&-content{
display: flex;
}
&-flower-wrap{
margin-top: 0;
.svg-icon{
width: 1.76rem;
height: .21rem;
}
}
&-title{
padding-top: 1.21rem;
margin-bottom: .74rem;
font-size: .6rem;
font-family: Manrope;
font-weight: bold;
line-height: .84rem;
color: #302D2C;
text-align: center;
}
&-flower-wrap{
margin-top: 1.28rem;
.svg-icon{
width: 1.76rem;
height: .21rem;
}
}
&-article{
padding-top: .39rem;
padding-bottom: 1.55rem;
.section-view-title{
display: none;
}
&-w{
margin-top: .27rem;
width: 6.12rem;
font-size: .16rem;
font-family: Manrope;
font-weight: 400;
line-height: .32rem;
color: #302D2C;
}
&-p{
width: 5.79rem;
position: relative;
padding-left: .33rem;
font-size: .16rem;
font-family: Manrope;
font-weight: 400;
line-height: .32rem;
color: #302D2C;
&:before{
position: absolute;
content: '';
display: block;
width: .08rem;
height: .77rem;
background-color: #F49F00;
left: 0;
top: .1rem;
}
}
}
&-circle{
margin-right: 1.96rem;
>div{
transition: all 1s ease-in;
width: 100%;
height: 100%;
max-width: 5.92rem;
max-height: 5.92rem;
}
}
}
@media screen and (max-width: 1250px) {
.section-view{
&-circle{
margin-right: 0;
}
&-content{
justify-content: center;
}
}
}
@media screen and (max-width: 830px) {
.section-view{
&-content{
flex-direction: column;
justify-content: center;
align-items: center;
}
}
}
@media screen and (max-width: 768px){
.section-view{
margin-top: 0;
&-content{
flex-direction: column;
padding-top: 1rem;
padding-bottom: 1rem;
}
&-flower-wrap{
margin-top: .9rem;
.svg-icon{
width: 3.43rem;
height: .41rem;
}
}
&-title{
display: none;
}
&-article{
padding: 0 .3rem ;
box-sizing: border-box;
.section-view-title{
display: block;
padding-top: 0;
margin-top: 0;
margin-bottom: .47rem;
font-size: .6rem;
font-weight: bold;
line-height:.84rem;
}
&-w{
margin-top: .39rem;
width: 100%;
font-size: .24rem;
line-height: .34rem;
}
&-p{
box-sizing: border-box;
width: 100%;
padding-left: .25rem;
font-size: .24rem;
font-weight: 400;
line-height: .34rem;
&:before{
width: .08rem;
height: .9rem;
left: 0;
top: .05rem;
}
}
}
&-circle{
margin: 0 .3rem;
>div{
width: 100%;
}
}
}
}
</style>

View File

@ -0,0 +1,160 @@
<template>
<div class="axchange-banner">
<div class="banner-prev" @click="handleChange('prev')">
<van-icon name="arrow-left" class="banner-prev-icon" />
</div>
<div class="axchange-banner-container">
<van-swipe class="axchange-banner" ref="myVanSwipe" :autoplay="6000" :loop="true" >
<van-swipe-item v-for="(item, index) in images" :key="index+'_'" @click="handleLink(item.id)">
<img v-lazy="assetsUri(item.logo)" style="width: 100%;height: 100%" />
</van-swipe-item>
<template #indicator>
<div ></div>
</template>
</van-swipe>
</div>
<div class="banner-next" @click="handleChange('next')">
<van-icon name="arrow" class="banner-next-icon" />
</div>
</div>
</template>
<script>
import {assetsUri} from "../../utils";
export default {
name: 'Banner',
data(){
return {
assetsUri
}
},
props: {
images: {
default: () => {
return []
},
type: Array
}
},
beforeDestroy(){
window.removeEventListener('resize',this.handleResize)
},
mounted(){
window.addEventListener('resize',this.handleResize)
},
methods: {
handleResize(){
this.$refs.myVanSwipe.resize();
},
handleChange(method){
this.$nextTick(()=>{
if(method==='next'){
this.$refs.myVanSwipe.next()
}else{
this.$refs.myVanSwipe.prev()
}
})
},
handleLink (id) {
return
// this.$router.push({ path: 'detail', query: { type: 'banner', id } })
}
}
}
</script>
<style lang="less" scoped>
.axchange-banner{
display: flex;
align-items: center;
}
.banner-prev,.banner-next{
cursor: pointer;
flex-shrink: 0;
width: .9rem;
height: .9rem;
background-color: #342927;
border-radius: 50%;
display: flex;
align-items: center;
justify-content: center;
&:hover{
background-color: #F49F00;
.banner-next-icon{
color: #FFFFFF;
}
.banner-prev-icon{
color: #FFFFFF;
}
}
&-icon{
font-size: .4rem;
color: #9B9B9B ;
}
}
.banner-prev{
margin-right: .74rem;
} .banner-next{
margin-left: .74rem;
}
.axchange-banner{
justify-content: center;
width: 100%;
position: relative;
height: 100%;
.van-swipe-item{
width: 100% !important;
}
.van-icon-volume-o:before{
color: #0f4493;
}
.axchange-banner-container{
max-width: 9.72rem;
max-height: 6.28rem;
flex: 1;
height: 100%;
box-sizing: border-box;
}
}
@media screen and (max-width: 1280px) {
.axchange-banner{
.axchange-banner-container{
max-width: 8rem;
}
.banner-prev,.banner-next{
width: .7rem;
height: .7rem;
&-icon{
font-size: .3rem;
}
}
.banner-prev{
margin-right: .35rem;
}
.banner-next{
margin-left: .35rem;
}
}
}
@media screen and (max-width: 768px) {
.axchange-banner{
.axchange-banner-container{
max-width: 5.20rem;
max-height: 3.35rem;
}
.banner-prev,.banner-next{
width: .5rem;
height: .5rem;
&-icon{
font-size: .4rem;
}
}
.banner-prev{
margin-right: .35rem;
}
.banner-next{
margin-left: .35rem;
}
}
}
</style>

View File

@ -0,0 +1,173 @@
<template>
<div class="email-footer">
<h1 class="situation-h1">info@lightlimx.com</h1>
<span class="situation-tips">Email us to connect</span>
<ul class="situation-ul">
<li class="situation-li wow fadeInUp" data-wow-delay=".5s" @click="handleLink('https://t.me/lightlimx')">
<div class="situation-li-d">
<img class="situation-li-img" v-lazy="assetsUri('images/tw.png')" alt="">
<span class="situation-li-s">Twitter</span>
</div>
<p class="situation-li-p">Follow our latest news on Twitter</p>
</li> <li class="situation-li wow fadeInUp" data-wow-delay=".5s" @click="handleLink('https://twitter.com/LimXCapital')">
<div class="situation-li-d">
<img class="situation-li-img" v-lazy="assetsUri('images/te.png')" alt="">
<span class="situation-li-s">Telegram</span>
</div>
<p class="situation-li-p">Subscribe to our Telegram Channel</p>
</li> <li class="situation-li wow fadeInUp" data-wow-delay=".5s" @click="handleLink('https://medium.com/@lightlimx')">
<div class="situation-li-d">
<img class="situation-li-img" v-lazy="assetsUri('images/me.png')" alt="">
<span class="situation-li-s">Medium</span>
</div>
<p class="situation-li-p">Browse our content on Medium</p>
</li>
</ul>
</div>
</template>
<script>
import {
assetsUri
} from "../../utils";
export default {
name: "EmailFooter",
data(){
return {
assetsUri
}
},
methods:{
handleLink(link){
if(!link){
return
}
window.location.href=link
}
}
}
</script>
<style scoped lang="less">
.situation{
&-h1,&-tips{
text-align: center;
}
&-h1{
margin-top: 1.28rem;
font-size: .68rem;
font-family: Manrope;
font-weight: bold;
color: #302D2C;
cursor: pointer;
&:hover{
/*text-shadow: 0 0 .05rem #FF0000, 0 0 .05rem #6bf403;*/
text-stroke:1px #F49F00;
-webkit-text-stroke:1px #F49F00;
color: #Fff;
}
}
&-ul{
margin-top: 1rem;
padding-bottom: 1.48rem;
display: flex;
align-items: center;
justify-content: space-around;
flex-wrap: wrap;
}
&-li{
margin-bottom: .3rem;
cursor: pointer;
width: 3.46rem;
height: 1.86rem;
background: #FFFFFF;
display: flex;
flex-direction: column;
justify-content: center;
padding-left: .56rem;
box-sizing: border-box;
transition: all .3s ease-in;
&-d{
display: flex;
align-items: center;
}
&-img{
display: block;
width: .36rem;
height: .36rem;
margin-right: .12rem;
}
&-s{
font-size: .18rem;
font-family: Manrope;
font-weight: bold;
color: #302D2C;
}
&-p{
margin-top: .1rem;
font-size: .16rem;
font-family: Manrope;
font-weight: 400;
color: #302D2C;
}
&:hover{
box-shadow: 0 .03rem .2rem rgba(0, 0, 0, 0.06);
border-radius:.1rem;
transform: scale(1.01);
}
}
&-tips{
display: block;
margin-top: .35rem;
font-size: .24rem;
font-family: Manrope;
font-weight: 400;
line-height: .48rem;
color: #302D2C;
}
}
@media screen and (max-width: 768px) {
.situation{
&-h1{
margin-top: 1.49rem;
font-size: .6rem;
line-height: .62rem;
}
&-ul{
margin-top: .49rem;
padding-bottom: 1.01rem;
flex-direction: column;
justify-content: center;
align-items: center;
}
&-li{
margin-bottom: .3rem;
width: 6.90rem;
height: 2.60rem;
padding-left: .6rem;
&-img{
width: .86rem;
height: .86rem;
margin-right: .29rem;
}
&-s{
font-size: .43rem;
}
&-p{
margin-top: .21rem;
font-size: .3rem;
}
&:hover{
box-shadow: 0 .03rem .2rem rgba(0, 0, 0, 0.06);
border-radius:.1rem;
}
}
&-tips{
margin-top: .2rem;
font-size: .3rem;
line-height: .48rem;
}
}
}
</style>

View File

@ -0,0 +1,231 @@
<template>
<div class="filter-input-wrap">
<van-field class="filter-input" readonly label-width="auto" placeholder="Filter" v-model="text" >
<template #label>
<div class="filter-input-label">
<svg-icon icon-class="filter"></svg-icon>
</div>
</template>
<template #extra>
<div class="filter-input-extra" >
<div class="filter-input-icon-wrap" @click="handleOptionsShow">
<svg-icon icon-class="filter-ar" :class="{active:blockShow}"></svg-icon>
</div>
<span @click="handleOptionsShow">{{activeText}}</span>
<ul class="filter-options" :style="{'display':!blockShow?'none':'block'}" >
<li class="filter-options-item" @click="handleItemClick(item)" :class="{'active':active===item.id}" v-for="(item,index) in locations" :key="'local_'+index">{{item.name}}</li>
</ul>
</div>
</template>
</van-field>
</div>
</template>
<script>
export default {
name: "FilterInput",
props:{
locations:{
default:()=>[],
type:Array
},
active:{
default:'',
type:String
},
},
methods:{
handleOptionsShow(){
this.blockShow=!this.blockShow
},
handleItemClick(item){
this.blockShow=false
this.$emit('select',item)
}
},
computed:{
activeText(){
if(!this.locations){
return 'Locations'
}
const location= this.locations.find((item)=>{
return item.id===this.active
})
return location?location.name:'Locations'
}
},
data(){
return {
blockShow:false,
text:''
}
}
}
</script>
<style scoped lang="less">
.filter-options{
min-width: 100%;
position: absolute;
min-height: 1.6rem;
background: #FFFFFF;
padding-left: .24rem;
box-shadow: 0 .03rem .06rem rgba(0, 0, 0, 0.16);
bottom: 0;
transform: translateY(100%);
box-sizing: content-box;
left: -.2rem;
transition: all .3s ease-in;
z-index: 1;
&-item{
width: 100%;
font-family: Manrope;
font-weight: 400;
line-height: .4rem;
color: #302D2C;
box-sizing: content-box;
padding-left: .24rem;
min-height: .4rem;
font-size: .16rem;
margin-left: -.24rem;
background-color: #fff;
cursor: pointer;
&.active{
background-color: #F49F00;
color: #Fff;
}
}
}
.filter-input{
height: .6rem;
box-sizing: border-box;
padding: .06rem 0 .06rem .14rem;
overflow: initial;
&-wrap{
margin-top: -.3rem;
position: relative;
z-index: 1;
width: 100%;
height: .6rem;
background: #FFFFFF;
box-shadow: 0 .03rem .06rem rgba(0, 0, 0, 0.16);
}
&-extra{
display: flex;
align-items: center;
position: relative;
padding-right: .14rem;
box-sizing: border-box;
min-width: 1.53rem;
>span{
cursor: pointer;
user-select: unset;
}
}
&-label{
display: flex;
align-items: center;
justify-content: center;
.svg-icon{
width: .48rem;
height: .48rem;
}
}
&-icon-wrap{
cursor: pointer;
margin-right: .17rem;
display: flex;
align-items: center;
.svg-icon{
transition: all .3s ease-in;
width: .3rem;
height: .3rem;
&.active{
transform: rotate(180deg);
}
}
}
}
@media screen and (max-width: 768px) {
.filter-options{
min-height: 3.2rem;
padding-left: 0;
left: 50%;
min-width: 2rem;
transform: translateX(-50%) translateY(100%);
box-sizing: border-box;
&-item{
line-height: .8rem;
box-sizing: border-box;
padding-left: .5rem;
margin-left: 0;
min-height: .8rem;
font-size: .26rem;
}
}
.filter-input{
height: 100%;
min-height: .8rem;
padding: 0;
box-sizing: border-box;
&-extra{
min-width: 2.46rem;
padding-right: .32rem;
}
&-wrap{
margin-top: -.4rem;
margin-left: .15rem;
margin-right: .15rem;
box-sizing: border-box;
height: .8rem;
width: auto;
display: block;
}
&-label{
.svg-icon{
width: .8rem;
height: .8rem;
}
}
&-icon-wrap{
margin-right: 0;
.svg-icon{
width: .8rem;
height: .8rem;
}
}
}
}
</style>
<style lang="less">
.filter-input{
.van-field__body{
height: 100%;
}
.van-field__control{
font-size: .18rem;
font-family: Manrope;
font-weight: 400;
color: #302D2C;
&::placeholder{
font-size: .16rem;
font-family: Manrope;
font-weight: 400;
color: #302D2C;
}
}
}
@media screen and (max-width: 768px) {
.filter-input{
.van-field__control{
font-size: .26rem;
&::placeholder{
font-size: .26rem;
}
}
}
}
</style>

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,264 @@
#home-circles,.spin-circle-container{
width: 100%;
height: 100%;
margin: 0 auto;
}
#home-hero {
overflow-x: hidden;
overflow-y: hidden;
min-height: 100%;
width: 100%;
height: 100%;
position: relative;
padding-top: 0;
// background-color: #010101;
color: #fff;
// background-image: url("../images/home-hero-mobile.jpg");
background-size: cover;
background-position: center bottom;
display: flex;
flex-direction: column;
// min-height: 1000px;
}
#home-hero .primary {
font-size: 1.125rem;
line-height: 1.8125rem;
font-weight: 700;
letter-spacing: 0.06em;
}
#home-hero .hero-circle-text {
text-align: center;
z-index: 1;
// padding: 4rem 2rem;
}
#home-hero .hero-circle-text p {
margin-left: auto;
margin-right: auto;
margin-bottom: 0;
font-size: 0.2rem;
font-family: Manrope;
font-weight: bold;
color: #FFFFFF;
opacity: 1;
line-height: 0.4rem;
}
@media (max-width: 991px) {
#home-content {
// padding-top: 8rem;
}
.hero-circle-text-container {
// padding-top: 18rem;
}
#home-hero .hero-circle-text{
bottom: 0.5rem !important;
}
.home-hero-mobile {
padding: 0 1rem;
}
.home-hero-mobile img {
width: 100%;
height: auto;
}
.heading {
max-width: 490px;
}
.primary,
.secondary {
max-width: 500px;
}
}
@media (max-width: 1024px) {
#home-hero .container {
max-width: 80%;
}
}
@media (min-width: 992px) {
#home-hero {
//overflow: hidden;
// background-image: url("../images/home-hero.jpg");
background-size: cover;
background-position: center bottom;
}
#home-hero .heading {
max-width: 560px;
}
#home-hero .primary {
max-width: 540px;
}
#home-hero .secondary {
max-width: 500px;
}
#home-hero .hero-circle-text {
background: none;
position: absolute;
// max-width: 520px;
left: 0;
right: 0;
bottom: 0.7rem ;
margin: 0 auto;
text-align: center;
}
#home-hero .hero-circle-text p {
max-width: none;
}
}
/* Spin Circle Containers */
.spin-circle-container {
position: relative;
display: flex;
flex-grow: 1;
text-align: center;
width: 100%;
}
.spin-outer-container,
.spin-inner-container {
position: absolute;
left: 0;
right: 0;
margin: 0 auto;
}
#spinOuterCircle,
#spinInnerCircle {
margin: 10px auto;
border: 2px solid #F49F00;
position: relative;
border-radius: 50%;
}
.inner-item,
.outer-item {
text-align: center;
border-radius: 50%;
position: absolute;
display: flex;
align-items: center;
justify-content: center;
}
.inner-item img,
.outer-item img {
width: 100%;
height: auto;
border-radius: 100%;
}
#spinOuterCircle {
width: 600px;
height: 600px;
}
#spinInnerCircle {
width: 600px;
height: 600px;
}
.outer-item,
.inner-item {
width: 42px;
height: 42px;
line-height: 42px;
}
@media screen and (max-width: 768px){
#home-hero .hero-circle-text{
bottom: 0.65rem !important
}
#home-hero{
min-height: 530px;
}
}
@media (min-width: 768px) {
.outer-item {
width: 68px;
height: 68px;
line-height: 68px;
}
.inner-item {
width: 48px;
height: 48px;
line-height: 48px;
}
}
@media (min-width: 992px) {
.outer-item {
width: 60px;
height: 60px;
line-height: 60px;
}
.inner-item {
width: 51px;
height: 51px;
line-height: 51px;
}
}
@media (min-width: 1024px) {
.outer-item {
width: 80px;
height: 80px;
line-height: 80px;
}
.inner-item {
width: 68px;
height: 68px;
line-height: 68px;
}
#home-hero .hero-circle-text{
// bottom: 5rem;
}
}
@media (min-width: 1399px) {
.outer-item {
width: 109px;
height: 109px;
line-height: 109px;
}
.inner-item {
width: 93px;
height: 93px;
line-height: 93px;
}
}
#home-hero .hero-circle-text {
background: none;
position: absolute;
// max-width: 520px;
left: 0;
right: 0;
margin: 0 auto;
z-index: 1;
text-align: center;
// bottom: 2.8rem;
}
#home-hero .hero-circle-text p {
max-width: none;
}
@media (min-width: 1500px) {
#home-hero {
// min-height: 790px;
}
#home-hero .container {
width: 90%;
max-width: 1500px;
}
#home-hero .hero-circle-text{
bottom: 1rem;
}
}

View File

@ -0,0 +1,331 @@
<template>
<section class="focus-areas-view" :style="isCssStyle">
<div class="focus-areas-view-wrap">
<h1 class="focus-areas-view-h1 wow fadeInUpBig">Focus Areas</h1>
<h6 class="focus-areas-view-h6 wow fadeInUp" data-wow-delay=".3s">The future is crafted by people who understand where things are heading.</h6>
<p class="focus-areas-view-p wow fadeIn" data-wow-delay=".5s">The next innovation is already here.We believe that decentralization has the power to transform the global economy and create the largest one time shift in wealth.</p>
<div class="focus-areas-view-wheel">
<div id="home-hero" class="hero">
<div id="home-circles" class="container flex-grow-1 d-flex">
<div class="spin-circle-container">
<div class="spin-outer-container">
<div id="spinOuterCircle">
<div class="outer-item">
<img v-lazy="assetsUri('images/FocusAreas/5.png')">
</div>
<div class="outer-item">
<img v-lazy="assetsUri('images/FocusAreas/2.png')">
</div>
<div class="outer-item">
<img v-lazy="assetsUri('images/FocusAreas/3.png')">
</div>
<div class="outer-item">
<img v-lazy="assetsUri('images/FocusAreas/4.png')">
</div>
<div class="outer-item">
<img v-lazy="assetsUri('images/FocusAreas/5.png')">
</div>
<div class="outer-item">
<img v-lazy="assetsUri('images/FocusAreas/6.png')">
</div>
<div class="outer-item">
<img v-lazy="assetsUri('images/FocusAreas/1.png')">
</div>
<div class="outer-item">
<img v-lazy="assetsUri('images/FocusAreas/2.png')">
</div>
<div class="outer-item">
<img v-lazy="assetsUri('images/FocusAreas/4.png')">
</div>
<div class="outer-item">
<img v-lazy="assetsUri('images/FocusAreas/6.png')">
</div>
</div>
</div>
<div class="spin-inner-container">
<div id="spinInnerCircle">
<div class="inner-item">
<img v-lazy="assetsUri('images/FocusAreas/7.png')">
</div>
<div class="inner-item">
<img v-lazy="assetsUri('images/FocusAreas/8.png')">
</div>
<div class="inner-item">
<img v-lazy="assetsUri('images/FocusAreas/9.png')">
</div>
<div class="inner-item">
<img v-lazy="assetsUri('images/FocusAreas/10.png')">
</div>
<div class="inner-item">
<img v-lazy="assetsUri('images/FocusAreas/8.png')">
</div>
<div class="inner-item">
<img v-lazy="assetsUri('images/FocusAreas/9.png')">
</div>
</div>
</div>
</div>
</div>
<div class="hero-circle-text-container">
<div class="hero-circle-text">
<div id="hero-text-1">
<p class="wow fadeInUp" data-wow-delay=".3s">We focused exclusively on disruptive innovations related</p>
<p class="wow fadeInUp" data-wow-delay=".3s">to the Public chain ecosystem, Web3, NFT, GameFi, Layer2,</p>
<p class="wow fadeInUp" data-wow-delay=".3s">DeFi , Metaverse and other fields.</p>
</div>
</div>
</div>
</div>
</div>
</div>
</section>
</template>
<script>
import { assetsUri } from "../../utils";
import gsap from 'gsap'
import ScrollTrigger from './ScrollTrigger.js'
import Jquery from 'jquery'
gsap.registerPlugin(ScrollTrigger)
export default {
name: "FocusAreas",
props:{
cssStyle:{
type:Object,
default:()=>{
return {}
}
}
},
data() {
return {
assetsUri,
};
},
mounted () {
const _this = this// vuethis
Jquery(window).on('resize', function () {
_this.setCircleSizes()
ScrollTrigger.refresh()
if (window.innerWidth < 992) {
Jquery('.remove-for-mobile').remove()
}
}).resize()
/* Register ScrollTrigger */
/* Circle Timeline - Always & First for Speed Controls on Desktop */
const circleTimeline = gsap.timeline({
repeat: -1
})
circleTimeline
.to('#spinInnerCircle', {
duration: 120,
rotation: 360,
ease: 'none'
})
.to('#spinOuterCircle', {
duration: 120,
rotation: -360,
ease: 'none'
}, 0)
.to('.inner-item', {
duration: 120,
rotation: -360,
ease: 'none'
}, 0)
.to('.outer-item', {
duration: 120,
rotation: 360,
ease: 'none'
}, 0)
ScrollTrigger.matchMedia({
// DESKTOP
'(min-width: 992px)': function () {
/* Testimonials */
ScrollTrigger.create({
trigger: '#home-testimonials',
markers: false,
toggleClass: 'active',
pin: '#home-testimonials .content',
scrub: true,
invalidateOnRefresh: true
})
/* Posts */
gsap.defaults({ ease: 'power3' })
gsap.set('.post-item', { y: 100 })
ScrollTrigger.batch('.post-item', {
onEnter: batch => gsap.to(batch, { opacity: 1, y: 0, stagger: { each: 0.15, grid: [1, 3] }, overwrite: true }),
onLeave: batch => gsap.set(batch, { opacity: 0, y: -100, overwrite: true }),
onEnterBack: batch => gsap.to(batch, { opacity: 1, y: 0, stagger: 0.15, overwrite: true }),
onLeaveBack: batch => gsap.set(batch, { opacity: 0, y: 100, overwrite: true }),
markers: false,
end: 'bottom+=100px',
invalidateOnRefresh: true
})
},
// TABLET OR PHONE
'(min-width: 400px) and (max-width: 991px)': function () {
/* Testimonials */
gsap.set('.testimonials-container', { y: 0 })
ScrollTrigger.create({
trigger: '#home-testimonials .content',
markers: false,
pin: true,
anticipatePin: true,
start: 'top-=120',
invalidateOnRefresh: true
})
gsap.set('.testimonial-item', { y: 200 })
ScrollTrigger.batch('.testimonial-item', {
onEnter: batch => gsap.to(batch, { y: 0, overwrite: true }),
onLeave: batch => gsap.set(batch, { y: 200, overwrite: true }),
onEnterBack: batch => gsap.to(batch, { y: 0, overwrite: true }),
onLeaveBack: batch => gsap.set(batch, { y: 200, overwrite: true }),
invalidateOnRefresh: true
})
/* Posts */
gsap.defaults({ ease: 'power3' })
gsap.set('.post-item', { y: 50, opacity: 0 })
ScrollTrigger.batch('.post-item', {
onEnter: batch => gsap.to(batch, { opacity: 1, y: 0, stagger: { each: 0.15, grid: [1, 3] }, overwrite: true }),
invalidateOnRefresh: true
})
}
})
},
methods: {
setCircleSizes () {
const containerWidth = Jquery('.spin-circle-container').width()
const innerCircleSize = containerWidth * 0.75
const outerCircleOverflow = containerWidth * 0.1
const innerCircleOverflow = Math.round((containerWidth - innerCircleSize) * 0.9)
const circleSize = containerWidth * 0.05
Jquery('#spinOuterCircle').css({ width: containerWidth, height: containerWidth })
Jquery('.spin-outer-container').css({ top: outerCircleOverflow })
Jquery('#spinInnerCircle').css({ width: innerCircleSize, height: innerCircleSize })
Jquery('.spin-inner-container').css({ top: innerCircleOverflow })
this.setupSpinContainer('#spinOuterCircle', '.outer-item', containerWidth / 2)
this.setupSpinContainer('#spinInnerCircle', '.inner-item', innerCircleSize / 2)
},
setupSpinContainer (spinContainer, spinContainerItem, spinRadius) {
const radius = spinRadius
const fields = Jquery(spinContainerItem)
const container = Jquery(spinContainer)
const width = container.width()
const height = container.height()
let angle = 0
const step = (2 * Math.PI) / fields.length
fields.each(function () {
const x = Math.round(width / 2 + radius * Math.cos(angle) - Jquery(this).width() / 2)
const y = Math.round(height / 2 + radius * Math.sin(angle) - Jquery(this).height() / 2)
Jquery(this).css({
left: x + 'px',
top: y + 'px'
})
angle += step
})
}
},
computed:{
isCssStyle(){
return this.cssStyle
}
}
}
</script>
<style scoped lang="less">
@import './index.less';
.focus-areas-view{
background: url("~/static/images/FocusAreas/FocusAreas_bj.png") no-repeat;
width: 100%;
background-size: 100% 100%;
min-height: 100vh;
box-sizing: border-box;
padding-top: .77rem;
&-wrap{
width: 100%;
max-width: 13rem;
margin: 0 auto;
}
&-wheel{
margin-top: 0;
width: 100%;
height: 7.32rem;
}
&-h1{
font-size: .6rem;
font-family: Manrope;
font-weight: bold;
line-height: .82rem;
color: #FFFFFF;
text-align: center;
}
&-h6{
margin-top: .1rem;
margin-bottom: 0;
font-size: .16rem;
font-family: Manrope;
font-weight: 400;
line-height: .22rem;
color: #FFFFFF;
text-align: center;
}
&-p{
font-size: .22rem;
font-family: Manrope;
font-weight: bold;
line-height: .44rem;
color: #FFFFFF;
text-align: center;
max-width: 11.22rem;
margin: .74rem auto 0;
}
}
@media screen and (max-width: 768px){
.focus-areas-view{
padding-top: .88rem;
&-wheel{
margin-top: 1.5rem;
height: auto;
min-height: 5.30rem;
}
&-h1{
font-size: .6rem;
line-height: .82rem;
}
&-h6{
max-width: 5.5rem;
margin: 0 auto;
margin-top: .27rem;
font-size: .24rem;
line-height: .32rem;
}
&-p{
max-width: 6.9rem;
font-size: .3rem;
line-height: .4rem;
text-align: center;
margin: .29rem auto 0;
}
}
}
</style>

View File

@ -0,0 +1,162 @@
<template>
<div class="innovation-block">
<h3 class="innovation-block-h3">Articles</h3>
<div class="innovation-block-lists">
<div class="innovation-block-item wow fadeInUp" v-for="(item,index) in staticData" :key="'in_'+index" @click="handleLink(item.url)">
<img v-lazy="item.logo" class="innovation-block-item-img" alt="">
<h4 class="innovation-block-item-t">{{item.title}}</h4>
<p class="innovation-block-item-p">{{item.introduce}}</p>
<span>{{item.auth}}</span>
<small>{{item.created_at}}</small>
</div>
<div class="innovation-block-item" v-if="staticData.length%3>0">
<img src="" style="opacity: 0" class="innovation-block-item-img" alt="">
</div>
</div>
</div>
</template>
<script>
export default {
name: "InnovationBlock",
props:{
staticData:{
default:()=>[],
type:Array
}
},
data(){
return {
}
},
methods:{
handleLink(link){
if(!link){
return
}
window.location.href=link
}
}
}
</script>
<style scoped lang="less">
.innovation-block{
padding-top: 1.17rem;
&-h3{
font-size: .2rem;
font-family: Manrope;
font-weight: bold;
color: #302D2C;
}
&-lists{
margin-top: .58rem;
display: flex;
flex-wrap: wrap;
justify-content: space-between;
}
&-item{
margin-bottom: .72rem;
&-img{
display: block;
width: 3.9rem;
height: 2.92rem;
}
&-t{
margin-top: .33rem;
font-size: .2rem;
font-family: Manrope;
font-weight: bold;
line-height: .36rem;
color: #302D2C;
max-width: 3.45rem;
}
&-p{
max-width: 3.74rem;
margin-top: .16rem;
font-size: .16rem;
font-family: Manrope;
font-weight: 400;
line-height: .26rem;
color: #9B9B9B;
}
>span{
margin-top: .24rem;
display: block;
font-size: .14rem;
font-family: Manrope;
font-weight: 400;
line-height: .3rem;
color: #9B9B9B;
}
>small{
font-size: .14rem;
font-family: Manrope;
font-weight: 400;
line-height: .3rem;
color: #9B9B9B;
}
}
}
@media screen and (max-width:1200px ) {
.innovation-block{
&-h3{
padding-left: .3rem;
}
&-lists{
justify-content: space-around;
}
}
}
@media screen and (max-width:802px ) {
.innovation-block{
&-lists{
justify-content: space-around;
}
}
}
@media screen and (max-width:768px ) {
.innovation-block{
padding-top: .5rem;
&-h3{
margin-top: 0;
font-size: .4rem;
padding-left: .3rem;
}
&-lists{
margin-top: .42rem;
justify-content: space-around;
}
&-item{
width: 100%;
margin-bottom: 1rem;
padding: 0 .3rem;
&-img{
width: 100%;
}
&-t{
margin-top: .2rem;
font-size: .2rem;
line-height: .36rem;
max-width: 6.21rem;
}
&-p{
max-width: 6.62rem;
margin-top: .18rem;
font-size: .28rem;
line-height: .34rem;
}
>span{
margin-top: .5rem;
font-size: .24rem;
line-height: .3rem;
}
>small{
font-size: .24rem;
line-height: .3rem;
}
}
}
}
</style>

View File

@ -0,0 +1,188 @@
<template>
<div class="join-us-tabs " :class="{'mask':isMobile,'expand':isExpand}" >
<div class="join-us-tabs-options">
<h3 class="join-us-tabs-title">Position</h3>
<ul>
<li class="join-us-tabs-item" @click="handleSelect(item)" v-for="(item,index) in options" :key="'option_'+index" :class="{'active':active===item.id}">
{{item.name}}
</li>
</ul>
</div>
<!-- <div class='join-mask' :class="{'isExpand':isExpand}" v-if="isMobile" @click="isExpand=!isExpand">-->
<!-- <van-icon name="arrow-down" class="join-mask-arrow" />-->
<!-- </div>-->
<div class="join-us-tabs-content" v-html="content"></div>
</div>
</template>
<script>
export default {
name: "JoinUsTabs",
data(){
return {
isMobile:false,
isExpand:true,
}
},
mounted(){
this.handleIsMobile()
window.addEventListener('resize',this.handleIsMobile)
},
props:{
options:{
default:()=>[],
type:Array
},
active:{
default:'',
type:String
},
content:{
default:'',
type:String
}
},
methods:{
handleSelect(item){
this.$emit('handleSelect',item)
},
handleIsMobile(){
const clientWidth=document.documentElement.clientWidth;
this.isMobile=clientWidth<=750
}
}
}
</script>
<style scoped lang="less">
.join-us-tabs{
padding-top: .97rem;
padding-bottom: 1.57rem;
&-options{
display: inline-block;
max-width: 3.02rem;
width: 100%;
margin-right: 1.28rem;
}
&-content{
padding-top: .5rem;
vertical-align: top;
max-width: 8.7rem;
display: inline-block;
width: calc( 100% - 4.38rem );
min-height: 2rem;
}
.join-mask{
display: none;
}
&-item{
font-size: .16rem;
font-family: Manrope;
font-weight: 400;
color: #302D2C;
border-bottom: 1px solid #EDEDED;
min-height: .7rem;
display: flex;
align-items: center;
padding-left: .14rem;
cursor: pointer;
&.active,&:hover{
color: #F49F00;
text-decoration: underline;
}
}
&-title{
display: flex;
align-items: center;
justify-content: center;
width: 100%;
height: .58rem;
background: #342927;
font-size: .16rem;
font-family: Manrope;
font-weight: 400;
color: #FFFFFF;
}
}
@media screen and (max-width: 768px){
.join-us-tabs{
padding-top: .5rem;
&.mask{
height: 3.5rem;
position: relative;
overflow-y: hidden;
overflow-x: visible;
&.expand{
height:auto;
overflow-y: visible;
}
}
.join-mask{
display: block;
position: absolute;
bottom: 0;
left: 0;
right: 0;
text-align: center;
&.isExpand{
.join-mask-arrow{
transform: rotate(-180deg);
}
}
&-arrow{
transition: all .3s ease-in;
line-height: .4rem;
position: absolute;
bottom: 0;
left: 0;
right: 0;
}
&:before{
content: '';
display: block;
height: .85rem;
background: linear-gradient(to bottom,transparent 2%,#F8F9F9);
background: -ms-linear-gradient(to bottom,transparent 2%,#F8F9F9);
background:-moz-linear-gradient(to bottom,transparent 2%,#F8F9F9);/*火狐*/
background: -webkit-linear-gradient(to bottom,transparent 2%,#F8F9F9);
background: -o-linear-gradient(to bottom,transparent 2%,#F8F9F9)
}
&:after{
content: '';
display: block;
min-height: .4rem;
background-color: #eee;
border-radius: .5rem;
}
}
&-options{
display: block;
max-width: 100%;
width: 5.18rem;
margin: 0 auto;
}
&-content{
max-width: 100%;
padding-left: .15rem;
padding-right: .15rem;
width: 100%;
box-sizing: border-box;
margin: 0 auto;
min-height: 2rem;
}
&-item{
font-size: .26rem;
min-height: .88rem;
padding-left: .16rem;
border-color: #EDEDED;
&.active,&:hover{
text-decoration: none;
}
}
&-title{
height: .96rem;
font-size: .38rem;
}
}
}
</style>

View File

@ -0,0 +1,96 @@
<template lang="html">
<div class="public-loading" v-if="loading">
<div class="public-loading-block">
<div class="public-loading-block-loader"></div>
<div class="public-loading-block-img">
<svg-icon icon-class="loading"></svg-icon>
</div>
</div>
</div>
</template>
<script>
export default {
name: 'loading',
components: { },
data: () => ({
loading: false
}),
methods: {
start() {
this.loading = true
},
finish() {
this.loading = false
},
getLoadingState(){
return this.loading
}
}
}
</script>
<style scoped lang="less">
.public-loading-block-loader {
display: block;
border: .04rem solid rgba(252,228,199,.3);
border-radius: 50%;
width: 1.28rem;
height: 1.28rem;
box-sizing: border-box;
-webkit-animation: spin 2s linear infinite;
animation: spin 2s linear infinite;
&:after{
content: '';
display: block;
width: .12rem;
height:.12rem;
border-radius: 50%;
overflow: hidden;
background-color: #F5A23D ;
margin-top: .22rem;
}
}
@-webkit-keyframes spin {
0% { -webkit-transform: rotate(0deg); }
100% { -webkit-transform: rotate(360deg); }
}
@keyframes spin {
0% { transform: rotate(0deg); }
100% { transform: rotate(360deg); }
}
.public-loading{
display: flex;
justify-content: center;
margin: 0 auto;
height: 100%;
align-items: center;
background-color: #292727;
position: fixed;
z-index: 100;
left: 0;
top: 0;
bottom: 0;
right: 0;
&-block{
/*margin-top: -100%;*/
position: relative;
text-align: center;
}
&-block-img{
position: absolute;
left: 50%;
top: 50%;
transform: translateX(-50%) translateY(-50%);
display: flex;
justify-content: center;
align-items: center;
.svg-icon{
width: .76rem;
height: .76rem;
}
}
}
</style>

View File

@ -0,0 +1,161 @@
<template>
<section class="layout-footer">
<div class="layout-footer-h5-wrap">
<div class="layout-footer-d">
<div class="layout-footer-d-l">
<div class="layout-footer-d-l-l-w">
<svg-icon icon-class="footerLogo"></svg-icon>
</div>
<p>© 2022 LightLimX Ventures Management Co Ltd. All Rights Reserved.</p>
</div>
<ul class="layout-footer-d-r">
<li class="layout-footer-d-r-i" v-for="item in tabs" :key="item.name" @click="handleClick(item)">{{item.title}}</li>
</ul>
</div>
</div>
</section>
</template>
<script>
import {footerLink} from "~/assets/js/static";
export default {
name: "MyFooter",
mounted(){
},
methods:{
handleClick(item){
if(item.name==='innovation'){
return;
}
if(item.type==='href'){
if(item.link&&this.$route.path!==item.link){
this.$router.push({path:'/#'+item.name})
return;
}
document.getElementById(item.name).scrollIntoView();
// console.log(document.getElementById(item.name))
return
}
this.$router.push({path:'/'+item.name})
}
},
data(){
return {
tabs:[
...footerLink
]
}
}
}
</script>
<style scoped lang="less">
.layout-footer{
background: #292727;
min-height: 2.33rem;
&-h5-wrap{
display: flex;
align-items: center;
height: 100%;
width: 100%;
}
&-d{
display: flex;
justify-content: space-between;
align-items: center;
height: 100%;
width: 100%;
&-r{
padding-top: .64rem;
padding-bottom: .4rem;
display: flex;
flex-wrap: wrap;
&-i{
font-size: .14rem;
font-family: Manrope;
font-weight: bold;
color: #9B9B9B;
width: 25%;
margin-bottom: .24rem;
cursor: pointer;
&:active{
color: #fff;
}
}
}
&-l{
&-l-w{
padding-bottom: .17rem;
.svg-icon{
width: 1.54rem;
height: .26rem;
}
}
>p{
font-size: .12rem;
font-family: Manrope;
font-weight: 400;
color: #9B9B9B;
}
}
}
}
@media screen and (max-width: 768px) {
.layout-footer{
&-h5-wrap{
}
&-d{
flex-direction: column;
height: 100%;
width: 100%;
&-r{
align-self: flex-start;
padding-top: .98rem;
padding-bottom: .37rem;
display: flex;
flex-direction: column;
flex-wrap: wrap;
box-sizing: border-box;
&-i{
display: flex;
align-items: flex-start;
justify-content: flex-start;
font-size: .24rem;
font-weight: bold;
width: 100%;
box-sizing: border-box;
margin-bottom: .3rem;
height: .33rem;
line-height: .33rem;
padding-left: .15rem;
&:active{
color: #fff;
}
}
}
&-l{
padding-top: .5rem;
&-l-w{
padding-bottom: .3rem;
text-align: center;
.svg-icon{
width: 3rem;
height: .5rem;
}
}
>p{
text-align: center;
max-width: 4.5rem;
font-size: .24rem;
}
}
}
}
}
</style>

View File

@ -0,0 +1,273 @@
<template>
<div class="layout-header" id="layout-header" >
<div class="layout-header-h5-wrap" :style="{'position':'relative','z-index':'100'}">
<div class="layout-header-nav">
<div class="logo">
<svg-icon icon-class="logo"></svg-icon>
</div>
<div class="layout-header-tabs" >
<van-tabs v-model="active" @change="handleChange"
background="transparent"
title-inactive-color="#9B9B9B"
color="#F49F00"
title-active-color="#FFFFFF" >
<van-tab
:title="item.title"
:name="item.name"
v-for="(item) in tabs "
:key="item.name"></van-tab>
</van-tabs>
</div>
<div class="layout-header-menu" @click="handleToggle">
<svg-icon v-if="!isShow" icon-class="menu"></svg-icon>
<svg-icon v-if="isShow" icon-class="close"></svg-icon>
</div>
</div>
</div>
<van-popup v-model="isShow" class="layout-header-popup" :overlay="false" :get-container="getContainer" position="top" :style="{ 'min-height': 'auto' ,'z-index':'99 !important'}" >
<div class="layout-header-menu-lists">
<van-cell-group>
<van-cell
clickable
:class="{'active':item.name===active}"
class="layout-header-menu-item"
title-class="layout-header-menu-t"
:is-link="false"
:title="item.title"
:name="item.name"
v-for="(item) in tabs"
@click="handleClick(item)"
:key="item.name">
<template #icon>
<div class="layout-header-menu-icon">
<svg-icon :icon-class="item.icon"></svg-icon>
</div>
</template>
<template #extra>
<div class="layout-header-menu-extra">
<van-icon name="arrow" size=".2rem" color="#CBCBCB" />
</div>
</template>
</van-cell>
</van-cell-group>
</div>
</van-popup>
</div>
</template>
<script>
import {tabs} from "~/assets/js/static";
export default {
name: "MyHeader",
watch:{
'$route'(old,val){
if(old!==val){
if(this.$route.name == 'contact-id'){
return;
}else{
this.active=this.$route.name;
this.isShow=false
}
}
}
},
methods:{
handleMenu(){
const clientWidth=document.documentElement.clientWidth;
if(clientWidth>768){
this.isShow=false
}
},
getContainer() {
return document.querySelector('.layout-header');
},
handleClick(item){
if(item.name==='innovation'){
return;
}
if(this.$route.name===item.name){
return
}
this.isShow=!this.isShow
this.$router.push({name:item.name})
},
handleChange(name,title){
if(name==='innovation'){
return;
}
if(this.$route.name===name){
return
}
this.$router.push({name:name})
},
handleToggle(){
this.isShow=!this.isShow
}
},
created(){
this.active=this.$route.name
},
destroyed(){
this.handleMenu()
window.removeEventListener('resize',this.handleMenu)
},
mounted(){
window.addEventListener('resize',this.handleMenu)
},
data() {
return {
isShow:false,
active: '',
tabs:tabs
};
},
}
</script>
<style scoped lang="less">
.layout-header{
position: fixed;
top: 0;
left: 0;
right: 0;
height: .96rem;
z-index: 2;
overflow: hidden;
background-color: #363231;
&-menu{
display: none;
}
&-popup{
z-index: 99 !important;
}
&-nav{
display: flex;
width: 100%;
align-items: center;
justify-content: space-between;
height: 100%;
position: relative;
}
&-tabs{
display: flex;
height: 100%;
align-items: flex-end;
}
.logo{
display: flex;
align-items: center;
height: 100%;
.svg-icon{
width: 1.54rem;
height: .26rem;
}
}
&-h5-wrap{
height: 100% !important;
display: block;
background-color: #363231;
overflow-x: initial;
}
}
@media screen and (max-width: 768px) {
.layout-header{
height: .88rem;
&-menu{
display: block;
position: absolute;
right: 0;
padding: .3rem;
&-item{
padding-left: .3rem;
min-height: 1.09rem;
&:after{
left: 0;
right: 0;
border-color: #E3E3E3;
}
&:active,&.active{
background-color: #F1F1F1;
.layout-header-menu-t{
font-family: Manrope;
font-weight: bold;
font-size: .4rem;
color: #2E2C2C;
}
}
}
&-t{
display: flex;
align-items: center;
font-size: .3rem;
font-family: Manrope;
font-weight: 400;
color: #302D2C;
}
&-extra{
display: flex;
align-items: center;
}
&-icon{
padding-right: .3rem;
display: flex;
align-items: center;
.svg-icon{
width: .34rem;
height: .34rem;
}
}
&-lists{
padding-top: .88rem;
padding-bottom: .89rem;
&-item{
}
}
.svg-icon{
width: .34rem;
height: .3rem;
}
&:active{
background-color: #eee;
}
}
&-nav{
justify-content: center;
}
&-tabs{
display: none;
}
.logo{
.svg-icon{
width: 2.12rem;
height: .36rem;
}
}
}
}
</style>
<style lang="less">
.layout-header-tabs{
.van-tab{
font-size: .14rem;
font-weight: bold;
font-family: Manrope;
color: #9B9B9B;
&:hover .van-tab__text{
font-family: Manrope;
color: #FFFFFF;
}
&.van-tab--active .van-tab__text{
color: #9B9B9B !important;
}
}
.van-tabs{
height: 100%;
}
.van-tabs__wrap{
height: 100%;
}
}
</style>

View File

@ -0,0 +1,101 @@
<template>
<div class="pagination">
<el-pagination
background
:hide-on-single-page="true"
@current-change="handleCurrentChange"
layout="prev, pager, next"
:total="total">
</el-pagination>
</div>
</template>
<script>
export default {
name: "MyPagination",
props:{
pagerCount:{
type:Number,
default:6
},
//
limit:{
type:Number,
default:10
},
//
page:{
type:Number,
default:1
},
//
total:{
type:Number,
default:100
}
},
computed:{
isCurrent:{
get(){
return this.page
},
set(val){
return this.$emit('update:current',val)
}
},
},
methods:{
handleClick(item){
this.$emit('update:current',item)
},
handleCurrentChange(val) {
this.$emit('change',val)
},
myCallback(VAL){
}
}
}
</script>
<style scoped lang="less">
.pagination{
display: flex;
justify-content: center;
align-items: center;
&-lists{
display: flex;
align-items: center;
}
&-prev{
margin-right: .1rem;
}
&-next{
margin-left: .1rem;
.svg-icon{
transform: rotate(180deg);
}
}
&-prev,&-next,&-list{
width: .48rem;
height: .48rem;
display: flex;
align-items: center;
justify-content: center;
cursor: pointer;
&:active,&:hover{
background: #F3F3F3;
border-radius: .05rem;
}
}
&-list{
margin-right: .08rem;
&:last-child{
margin-right: 0;
}
&.active{
background: #F3F3F3;
border-radius: .05rem;
}
}
}
</style>

View File

@ -0,0 +1,62 @@
<template>
<div class="our-founders">
<h2 class="our-founders-t">Our Founders Are Global</h2>
<p class="our-founders-d">LightLimX now has offices located in Tokyo,Dubai,Singapore,North America, Asia , allowing us to reach out resources globally.</p>
<slot></slot>
</div>
</template>
<script>
export default {
name: "OurFounders"
}
</script>
<style scoped lang="less">
.our-founders{
padding-top: 2rem;
padding-bottom: 1.92rem;
&-banners{
width: 100%;
padding: 0 ;
}
&-t,&-d{
text-align: center;
font-family: Manrope;
}
&-t{
font-size: .48rem;
font-weight: bold;
line-height: .84rem;
color: #FFFFFF;
}
&-d{
max-width: 9rem;
width: 100%;
margin: 0 auto 1.08rem;
font-size: .24rem;
font-weight: 400;
line-height: .48rem;
color: #FFFFFF;
}
}
@media screen and (max-width: 768px) {
.our-founders{
padding-bottom: .44rem;
padding-top: .7rem;
&-banners{
padding: 0 .3rem;
}
&-t{
font-size: .4rem;
line-height: .84rem;
}
&-d{
max-width: 5.6rem;
font-size: .24rem;
line-height: .34rem;
margin-bottom: .49rem;
}
}
}
</style>

View File

@ -0,0 +1,92 @@
<template>
<section class="our-portfolio-view" :style="isCssStyle">
<div class="our-portfolio-view-wrap">
<h1 class="our-portfolio-view-h1-1 wow fadeInUp" data-wow-delay=".4s" >We Drive Real Value To</h1>
<h1 class="our-portfolio-view-h1-1 wow fadeInUp" data-wow-delay=".5s">Our Portfolio</h1>
<div class="our-portfolio-view-card">
<slot></slot>
</div>
</div>
</section>
</template>
<script>
export default {
name: "OurPortfolio",
props:{
cssStyle:{
type:Object,
default:()=>{
return {}
}
}
},
computed:{
isCssStyle(){
return this.cssStyle
}
}
}
</script>
<style scoped lang="less">
.our-portfolio-view{
width: 100%;
box-sizing: border-box;
padding-top: 1.65rem;
padding-bottom: 1.57rem;
&-card{
margin-top: 1.40rem;
width: 100%;
display: flex;
justify-content: space-between;
}
&-h1-1{
font-weight: bold;
text-align: center;
height: .65rem;
font-size: .48rem;
font-family: Manrope;
color: #302D2C;
&:last-child{
margin-top: .16rem;
}
}
&-wrap{
width: 100%;
max-width: 13rem;
margin: 0 auto;
}
}
@media screen and (max-width: 1250px) {
.our-portfolio-view{
&-card{
flex-wrap: wrap;
justify-content: space-around;
}
}
}
@media screen and (max-width: 768px){
.our-portfolio-view{
padding-top: .51rem;
padding-bottom: .51rem;
&-h5-wrap{
height: 100% !important;
}
&-card{
margin-top: .47rem;
flex-direction: column;
padding-left: .3rem;
padding-right: .3rem;
box-sizing: border-box;
}
&-h1-1{
height: .82rem;
font-size: .6rem;
&:last-child{
margin-top: 0;
}
}
}
}
</style>

View File

@ -0,0 +1,156 @@
<template>
<div class="our-portfolio-item wow fadeInUp" :data-wow-delay="item.time" >
<img v-lazy="assetsUri('images/'+item.img+'.png')" class="our-portfolio-item-img" alt="">
<h3 class="our-portfolio-item-title">{{item.title}}</h3>
<p class="our-portfolio-item-content">{{item.content}}</p>
<nuxt-link :to="item.link" tag="a" class="our-portfolio-item-a">Read more<van-icon name="arrow" color="#F49F00" ></van-icon></nuxt-link>
</div>
</template>
<script>
import {
assetsUri
} from "../../utils";
export default {
name: "OurPortfolioItem",
data(){
return {
assetsUri
}
},
props:{
item:{
default:()=>{},
type:Object
}
}
}
</script>
<style scoped lang="less">
.our-portfolio-item{
max-width: 4.09rem;
width: 100%;
min-height: 4.97rem;
opacity: 1;
text-align: center;
cursor: pointer;
transition: all .3s ease-in;
&-a{
display: block;
margin: 0 auto;
font-size: .16rem;
font-family: Manrope;
font-weight: 400;
line-height: .32rem;
color: #F49F00;
text-decoration: underline;
padding-bottom: .70rem;
margin-top: .32rem;
>i{
font-size: .12rem;
}
}
&:hover{
box-shadow: 0 3px 20px rgba(0, 0, 0, 0.06);
transform: scale(1.05);
}
&-title{
margin-top: .25rem;
font-size: .24rem;
font-family: Manrope;
font-weight: bold;
line-height: .84rem;
color: #342927;
}
&-content{
margin: 0 auto;
max-width: 3.52rem;
min-height: 1.18rem;
padding-left: .3rem;
padding-right: .3rem;
font-size: .16rem;
font-family: Manrope;
font-weight: 400;
line-height: .32rem;
color: #302D2C;
}
&-img{
display: block;
width: .88rem;
height: .88rem;
margin: 77px auto 0;
}
}
@media screen and (max-width: 1250px) {
.our-portfolio-item{
margin-top: .5rem;
width: 4.09rem;
&:first-child{
margin-top: 0;
}
}
}
@media screen and (max-width: 830px) {
.our-portfolio-item{
margin-top: .5rem;
width: 100%;
&:first-child{
margin-top: 0;
}
}
}
@media screen and (max-width: 768px) {
.our-portfolio-item{
margin-top: .5rem;
max-width: 100%;
min-height: 4.97rem;
text-align: center;
&:first-child{
margin-top: 0;
}
&-a{
margin: .45rem auto 0;
font-size: .3rem;
font-weight: 400;
line-height: .32rem;
padding-bottom: 1.1rem;
display: flex;
align-items: center;
justify-content: center;
>i{
font-size: .24rem;
}
}
&:hover{
box-shadow: 0 .03rem .2rem rgba(0, 0, 0, 0.06);
}
&-title{
margin-top: .52rem;
font-size: .4rem;
font-weight: bold;
line-height: .84rem;
}
&-content{
margin: .6rem auto 0;
max-width: 6.30rem;
min-height: 1.35rem;
padding-left: .3rem;
padding-right: .3rem;
font-weight: 400;
font-size: .24rem;
line-height: .34rem;
}
&-img{
display: block;
width: 2.42rem;
height: 2.42rem;
margin: .99rem auto 0;
}
}
}
</style>

View File

@ -0,0 +1,122 @@
<template>
<div class="partners" id="partners">
<h2 class="partners-t">Partners</h2>
<h3 class="partners-t-sub">We Partner With The Extraordinary</h3>
<p class="partners-d">We are well versed within crypto space with strong partner backing</p>
<ul class="partners-l">
<li class="partners-l-i wow flipInX" data-wow-delay="0.6s" v-for="(item,index) in partners" :key="'partners_'+index">
<img class="partners-l-i-img " v-lazy="assetsUri(item.logo)" alt="">
</li>
<li class="partners-l-i" v-if="partners.length%4<3||partners.length%3<2"></li>
</ul>
</div>
</template>
<script>
import {
assetsUri
} from "../../utils";
export default {
name: "Partners",
props:{
partners:{
default:()=>[],
type:Array
},
showPartners:{
default:false,
type:Boolean
},
},
data(){
return {
assetsUri,
}
}
}
</script>
<style scoped lang="less">
.partners{
width: 100%;
&-t,&-t-sub,&-d{
text-align: center;
color: #Fff;
}
&-t{
font-size: .6rem;
font-family: Manrope;
font-weight: bold;
line-height: .84rem;
color: #FFFFFF;
&-sub{
font-size: .36rem;
font-family: Manrope;
font-weight: bold;
line-height: .84rem;
color: #FFFFFF;
}
}
&-d{
font-size: .24rem;
font-family: Manrope;
font-weight: 400;
line-height: .33rem;
color: #FFFFFF;
}
&-l{
padding-top: 1rem;
width: 100%;
display: flex;
justify-content: space-between;
flex-wrap: wrap;
&-i{
width: 100%;
height: 100%;
max-width: 2.80rem;
max-height: 1.8rem;
margin-bottom: .6rem;
cursor: pointer;
&-img{
width: 100%;
height: 100%;
}
}
}
}
@media screen and (max-width: 1200px){
.partners{
&-l{
justify-content: space-around;
}
}
}
@media screen and (max-width: 768px){
.partners{
&-t{
font-size: .6rem;
line-height: .84rem;
&-sub{
font-size: .36rem;
line-height: .84rem;
}
}
&-d{
max-width: 4.54rem;
font-size: .24rem;
line-height: .32rem;
margin: 0 auto;
}
&-l{
padding-top: .5rem;
&-i{
margin-bottom: .3rem;
max-width: 2.06rem;
max-height: 1.33rem;
}
}
}
}
</style>

View File

@ -0,0 +1,343 @@
<template>
<div class="portfolio" >
<h2 class="portfolio-t wow fadeInUp" >Portfolio</h2>
<div class="portfolio-c" id="iPortfolio">
<div class="portfolio-c-l">
<!-- :style="{'position':position}"-->
<div class="portfolio-c-l-fixed" id="ball"
:style="{'position':position,'top':top,'bottom':bottom}"
>
<img class="portfolio-c-l-fixed-img" v-lazy="assetsUri('images/ball.png')" alt="">
<span>At LightLimX we believe tomorrow is built today.</span>
</div>
</div>
<div class="portfolio-c-r">
<ul class="portfolio-c-r-u">
<li class="portfolio-c-r-l" v-for="(group,index) in staticData" :key="'_'+index">
<h5 class="portfolio-c-r-l-t wow fadeInUp">{{group.title}}</h5>
<div class="portfolio-c-r-l-d" >
<img v-lazy="assetsUri(item)" data-wow-delay=".4s" class="wow fadeInRight" v-for="(item,ind) in group.images" :key="ind+'_'" alt="">
<img v-if="group.images&&(group.images.length%3<3)" style="opacity: 0" alt="">
</div>
</li>
</ul>
</div>
</div>
<div class="portfolio-card">
<div class="portfolio-card-item wow fadeInUp" :data-wow-delay="`${0.4+(index*0.2)}s`" v-for="(item,index) in cards" :key="'cards_'+index">
<img v-lazy="assetsUri(item.img)" v-if="item.img" class="portfolio-card-item-img" alt="">
<span class="portfolio-card-item-btn" @click="$router.push({path:item.link})">
{{item.btnText}}
<van-icon name="arrow" class="portfolio-card-item-btn-icon"></van-icon>
</span>
<p>{{item.text}}</p>
</div>
</div>
</div>
</template>
<script>
import {assetsUri} from "../../utils";
export default {
name: "Portfolio",
props:{
// staticData:{
// default:()=>[],
// type:Array
// },
position:{
default:'sticky',
type:String
},
top:{
default:'0px',
type:String
},
bottom:{
default:'initial',
type:String
}
},
data(){
return {
assetsUri,
cards:[
{
img:'images/apply.png',
btnText:'Apply For Investment',
text:'We invert and partner with projects outside of our accelerator',
link:'/contact'
},
{
img:'images/invest.png',
btnText:'Invest With Us',
text:'Join our 1000-strong deal-sharing investor network',
link:'/contact'
},
],
staticData:[
{
title:'Infrastructure',
images:[
'images/portfolio/组 723@2x.png',
'images/portfolio/组 698@2x.png',
'images/portfolio/组 699@2x.png',
'images/portfolio/组 722@2x.png',
]
}, {
title:'Web 3.0',
images:[
'images/portfolio/组 713@2x.png',
'images/portfolio/组 714@2x.png',
'images/portfolio/组 715@2x.png',
'images/portfolio/组 718@2x.png',
'images/portfolio/组 717@2x.png',
'images/portfolio/组 716@2x.png',
'images/portfolio/组 864@2x.png',
'images/portfolio/组 719@2x.png',
]
}, {
title:'GameFi',
images:[
'images/portfolio/组 712@2x.png',
'images/portfolio/组 711@2x.png',
'images/portfolio/组 710@2x.png',
'images/portfolio/组 707@2x.png',
'images/portfolio/组 708@2x.png',
'images/portfolio/组 709@2x.png',
'images/portfolio/组 706@2x.png',
'images/portfolio/组 705@2x.png'
]
},
{
title:'SocialFi',
images:[
'images/portfolio/组 702@2x.png',
'images/portfolio/组 703@2x.png',
'images/portfolio/组 704@2x.png',
'images/portfolio/组 701@2x.png',
]
}
]
}
}
}
</script>
<style scoped lang="less">
.portfolio{
padding-bottom: 1.04rem;
&-card{
margin-top: 1.86rem;
display: flex;
justify-content: space-around;
flex-wrap: wrap;
&-item{
display: flex;
flex-direction: column;
align-items: center;
margin-bottom: .99rem;
>p{
text-align: center;
max-width: 4.76rem;
margin-top: .42rem;
font-size: .24rem;
font-family: Manrope;
font-weight: 400;
line-height: .48rem;
color: #9B9B9B;
}
&-img{
display: block;
width: 2.24rem;
height: 2.24rem;
}
&-btn{
display: flex;
align-items: center;
justify-content: center;
margin-top: .67rem;
width: 3.80rem;
height: .6rem;
background: #EDEDED;
border-radius: .1rem;
font-size: .24rem;
font-family: Manrope;
font-weight: bold;
color: #302D2C;
line-height: .6rem;
cursor: pointer;
&-icon{
display: inline-block;
margin-left: .2rem;
color: #342927 ;
font-size: .12rem;
}
&:hover{
background-color: #F49F00;
transition: background-color .3s ease-in;
}
}
}
}
&-t{
padding-top: 1.38rem;
padding-bottom: .94rem;
text-align: center;
font-size: .6rem;
font-family: Manrope;
font-weight: bold;
line-height: .84rem;
color: #FFFFFF;
}
&-c{
display: flex;
position: relative;
justify-content: flex-end;
&-l{
&-fixed{
width: calc(100% - 7.8rem);
position: absolute;
top: 0;
left: 0;
transition: all .3s ease-in;
&-img{
display: block;
width: 100%;
height: 100%;
max-width: 5.53rem;
max-height: 5.53rem;
margin: 0 auto;
}
>span{
display: block;
max-width: 3.07rem;
font-size: .30rem;
font-family: Manrope;
text-align: center;
font-weight: 400;
line-height: .6rem;
color: #9B9B9B;
margin: 0 auto;
margin-top: -.6rem;
}
}
}
&-r{
max-width: 7.8rem;
flex: 1;
&-u{
overflow-x: hidden;
padding: 0 .3rem;
padding-top: .37rem;
display: flex;
flex-direction: column;
}
&-l{
margin-top: .27rem;
display: flex;
flex-direction: column;
justify-content: center;
&-t{
display: inline-block;
margin: 0 auto .54rem;
border: 1px solid #393939;
border-radius: .29rem;
font-size: .24rem;
font-family: Manrope;
font-weight: bold;
color: #F49F00;
padding: 10px .35rem;
box-sizing: border-box;
}
&-d{
display: flex;
flex-wrap: wrap;
justify-content: space-between;
img{
display: block;
width: 2.06rem;
height: 1.33rem;
margin-bottom: .36rem;
cursor: pointer;
transition: all .3s ease-in;
&:hover{
transform: scale(1.1);
}
}
}
}
}
}
}
@media screen and (max-width: 1250px) {
.portfolio{
&-c{
&-l{
&-fixed{
>span{
display: none;
}
}
}
}
}
}
@media screen and (max-width: 768px) {
.portfolio{
padding-bottom: 1.04rem;
&-card{
margin-top: 1.43rem;
display: flex;
flex-direction: column;
justify-content: space-around;
flex-wrap: wrap;
}
&-t{
padding-top: 1.43rem;
padding-bottom: 0;
}
&-c{
display: flex;
flex-direction: column;
position: relative;
&-l{
&-fixed{
width: 100% !important;
img{
margin: 0 auto;
}
>span{
display: none;
}
}
}
&-r{
flex: 1;
&-u{
padding-top: 0;
display: flex;
flex-direction: column;
}
&-l{
margin-top: .6rem;
&:first-child{
margin-top: -0rem;
}
&-t{
margin: 0 auto .54rem;
border-radius: .4rem;
font-size: .4rem;
padding: .10rem .35rem;
}
}
}
}
}
}
</style>

View File

@ -0,0 +1,103 @@
<template>
<div class="select-div">
<div class="select-div-text-wrap" @click="isShow=!isShow">
<span class="select-div-text">{{text}}</span>
<slot></slot>
</div>
<ul class="select-ul" :style="{'display':!isShow?'none':'block'}" >
<li class="select-item" :class="{'active':select===item.id}" @click="handleSelect(item)" v-for="(item,index) in options" :key="'select_'+index">{{item.name}}</li>
</ul>
</div>
</template>
<script>
export default {
props:{
options:{
default:()=>[],
type:Array
},
select:{
default:'',
type:String
}
},
name: "PublicSelect",
computed:{
text(){
const findItem=this.options.find((item)=>item.id===this.select);
return findItem?findItem.name:''
}
},
methods:{
handleSelect(item){
this.isShow=false
this.$emit('select',item)
}
},
data(){
return {
isShow:false
}
}
}
</script>
<style scoped lang="less">
.select{
&-div{
display: block;
position: relative;
&-text{
&-wrap{
cursor: pointer;
display: flex;
align-items: center;
justify-content: space-between;
height: 100%;
}
}
}
&-ul{
position: absolute;
left: 0;
bottom: 0;
right: 0;
transform: translateY(100%);
min-height: 2rem;
background-color: #FFFFFF;
box-shadow: 0 .03rem .06rem rgba(0, 0, 0, 0.16);
z-index: 2;
}
&-item{
cursor: pointer;
height: .4rem;
background-color: #fff;
font-size: .16rem;
font-family: Manrope;
font-weight: 400;
line-height: .4rem;
color: #302D2C;
padding-left: .33rem;
box-sizing: border-box;
&.active{
background-color: #F49F00;
color: #fff;
}
}
}
@media screen and (max-width: 768px) {
.select{
&-ul{
bottom: -.06rem;
min-height: 4rem;
z-index: 1;
}
&-item{
height: .8rem;
font-size: .26rem;
line-height: .8rem;
}
}
}
</style>

View File

@ -0,0 +1,178 @@
<template>
<div class="section-limit" >
<div class="section-limit-h5-wrap">
<!-- <ball class="b-ball"></ball>-->
<!-- <svg-icon icon-class="hstart" ></svg-icon>-->
<img v-lazy="'/images/hstart.png'" class="section-limit-start b-ball" alt="">
<div class="section-limit-div">
<h1 class="section-limit-title wow fadeInDown" >
<span>We are LightLimX</span>
<!-- <svg-icon icon-class="start" class="section-limit-title-img"></svg-icon>-->
</h1>
<div class="section-limit-c">
<p class="section-limit-title-desc wow fadeInDownBig">
We Make The
<br/>Impossible Possible.
</p>
</div>
</div>
<div class="section-limit-flower-wrap wow fadeInDownBig">
<svg-icon icon-class="hstart" class="section-limit-start c-ball"></svg-icon>
</div>
<!-- <div class="section-limit-flower-wrap wow fadeInDown">-->
<!-- <svg-icon icon-class="flower"></svg-icon>-->
<!-- </div>-->
</div>
</div>
</template>
<script>
import {assetsUri} from '~/utils/index.js'
export default {
name: "SectionLimitX",
data(){
return {
assetsUri
}
},
}
</script>
<style scoped lang="less">
.section-limit{
width: 100%;
height: 100%;
/*min-height: 100vh;*/
box-sizing: border-box;
padding-top: .96rem;
&-div{
margin-right: .16rem;
}
&-start{
}
&-flower-wrap{
margin-top: 1rem;
.svg-icon{
width: 8.95rem;
height: 6.59rem;
}
}
.b-ball{
display: none;
}
.c-ball{
/*transform: scale(2.2);*/
}
&-c{
padding-top: 1.1rem;
display: flex;
align-items: center;
}
&-h5-wrap{
height: 100%;
display: flex;
align-items: center;
/*overflow: hidden;*/
}
&-title{
padding-top: 1.05rem;
font-size: 1.10rem;
font-family: Manrope;
font-weight: bold;
color: #FFFFFF;
display: flex;
align-items: center;
word-break: keep-all;
white-space: nowrap;
&-img{
display: block;
width: 3.29rem;
height: 2.42rem;
margin-left: -.88rem;
}
>span{
font-size: .68rem;
font-family: Manrope;
font-weight: bold;
line-height: 1.31rem;
color: #FFFFFF;
position: relative;
word-break: keep-all;
}
&-desc{
word-break: keep-all;
white-space: nowrap;
margin-top: 0;
font-weight: bold;
color: #FFFFFF;
font-size: .44rem;
font-family: Manrope;
line-height: .72rem;
}
}
}
@media screen and (max-width: 768px){
.section-limit{
padding-top: .88rem;
&-c{
padding-top: .57rem;
justify-content: center;
}
.b-ball{
display: block;
}
&-flower-wrap{
.c-ball{
display: none;
}
}
&-h5-wrap{
padding-left: 0;
padding-right: 0;
box-sizing: border-box;
padding-top: .78rem;
flex-direction: column;
.b-ball{
width: calc( 7.49rem - .3rem);
height: 5.51rem;
margin: 0 auto;
box-sizing: content-box;
}
}
&-flower-wrap{
margin-top: .77rem;
.svg-icon{
width: 1.57rem;
height: .2rem;
}
}
&-title{
padding-top: 1.03rem;
font-size: .62rem;
color: #FFFFFF;
&-img{
width: 2.32rem;
height: 1.64rem;
margin-left: -.6rem;
}
>span{
font-size: .6rem;
font-family: Manrope;
font-weight: bold;
line-height: 1.31rem;
color: #FFFFFF;
}
&-desc{
margin-top: 0;
text-align: center;
font-size: .42rem;
font-family: Manrope;
font-weight: bold;
line-height: .68rem;
color: #FFFFFF;
}
}
}
}
</style>

View File

@ -0,0 +1,52 @@
<template>
<div class="section-view" :style="isCssStyle">
<div class="section-view-h5-wrap">
<slot></slot>
</div>
</div>
</template>
<script>
export default {
name: "SectionView",
props:{
cssStyle:{
type:Object,
default:()=>{
return {}
}
}
},
computed:{
isCssStyle(){
return this.cssStyle
}
},
mounted() {
// First we get the viewport height and we multiple it by 1% to get a value for a vh unit
// let vh = window.innerHeight * 0.01
// // Then we set the value in the --vh custom property to the root of the document
// document.documentElement.style.setProperty('--vh', `${vh}px`)
//
// // We listen to the resize event
// window.addEventListener('resize', () => {
// // We execute the same script as before
// let vh = window.innerHeight * 0.01
// console.log(vh);
// document.documentElement.style.setProperty('--vh', `${vh}px`)
// })
}
}
</script>
<style scoped lang="less">
.section-view{
width: 100%;
min-height: 100vh;
box-sizing: border-box;
&-h5-wrap{
display: block;
height: 100%;
}
}
</style>

View File

@ -0,0 +1,85 @@
<template>
<div class="situation">
<h2 class="situation-t wow fadeInUp" data-wow-delay=".8s">Win-win Situation</h2>
<h3 class="situation-t situation-t-h3 wow fadeInUp" data-wow-delay=".8s">Not Just An Investor But A Partner</h3>
<p class="situation-d situation-d-first wow fadeInUp" data-wow-delay=".8s">Follow us for worthwhile content. Each week we uncover insights and learnings by entrepreneurs for entrepreneurs.</p>
<p class="situation-d situation-d-second wow fadeInUp" data-wow-delay=".8s">In order to ensure multi-party benefits, we will pool our capabilities and resources with our partners to gain insight into market opportunities, and to provide differentiated investment programs to our investors, as well as innovative solutions to our target enterprises.
</p>
<slot></slot>
</div>
</template>
<script>
import {
assetsUri
} from "../../utils";
export default {
name: "situation",
data(){
return {
assetsUri
}
}
}
</script>
<style scoped lang="less">
.situation{
&-t,&-d{
text-align: center;
}
&-t{
font-size: .48rem;
font-family: Manrope;
font-weight: bold;
line-height: .84rem;
color: #000000;
&:first-child{
padding-top: 1.38rem;
}
}
&-d{
margin: 0 auto;
width: 100%;
max-width: 9.19rem;
font-size: .24rem;
font-family: Manrope;
font-weight: 400;
line-height: .48rem;
color: #302D2C;
&-first{
padding-top: .55rem;
}
}
}
@media screen and (max-width: 768px) {
.situation{
&-t{
margin: 0 auto;
max-width: 6.86rem;
font-size: .6rem;
line-height: .62rem;
&-h3{
margin-top: -.3rem;
}
&:first-child{
padding-top: 1.43rem;
}
}
&-d{
font-size: .24rem;
line-height: .34rem;
max-width: 6.9rem;
&-first{
padding-top: .27rem;
}
&-second{
margin-top: -.28rem;
}
}
}
}
</style>

View File

@ -0,0 +1,72 @@
<template>
<div class="startup-block">
<h2 class="startup-block-h2 wow fadeInUp" data-wow-delay=".3s">
Accelerator Your Startup
</h2>
<p class="startup-block-p wow fadeInUp" data-wow-delay=".3s">Investing Beyond Investment. From aspiring founders to early stage entrepreneurs,LightLimX are dedicated to creating a thriving atmosphere for all pioneers within our ecosystem.</p>
<small class="startup-block-small wow fadeInUp" data-wow-delay=".3s">As serial entrepreneurs, we know what it takes to build innovative businesses from scratch in the difficult markets of Crypto,and we have built a team of 40+ experts, including economists, quants, developers, lawyers, UX experts, and more to provide active investor side support through mentorship and network integration. We know the landscape and keep up with the latest developments.Therefore, we can guide teams when it comes to ideation, tokenomics, and communication.We strive to leverage our experience to help ventures grow from Seed Stage to later round of capital and maximise their value creation.The blockchain world is moving fast,and we help you move faster.</small>
</div>
</template>
<script>
export default {
name: "StartupBlock"
}
</script>
<style scoped lang="less">
.startup-block{
&-h2{
padding-top: 1.83rem;
max-width:8.12rem;
margin: 0 auto;
font-size: .76rem;
font-family: Manrope;
font-weight: bold;
line-height: 1.1rem;
color: #FFFFFF;
text-align: center;
}
&-p{
max-width: 6.34rem;
text-align: center;
margin: 0 auto;
margin-top: 1rem;
font-size: .24rem;
font-family: Manrope;
font-weight: bold;
line-height: .44rem;
color: #FFFFFF;
}
&-small{
display: block;
margin-top: .54rem;
text-align: center;
font-size: .14rem;
font-family: Manrope;
font-weight: 400;
line-height: .28rem;
color: #9B9B9B;
}
}
@media screen and (max-width: 768px) {
.startup-block{
&-h2{
padding-top: 1.6rem;
max-width:6.12rem;
font-size: .6rem;
line-height: 1;
}
&-p{
max-width: 6.9rem;
margin-top: 1.77rem;
font-size: .24rem;
line-height: .4rem;
}
&-small{
margin-top: 2.26rem;
font-size: .24rem;
line-height: .34rem;
}
}
}
</style>

View File

@ -0,0 +1,207 @@
<template>
<div class="startup-content">
<h2 class="startup-content-h2 wow fadeInUp" data-wow-delay=".3s">Join Accelerator</h2>
<p class="startup-content-p wow fadeInUp" data-wow-delay=".3s">Each year,we choose over 30 early-stage programs to join our 3-month mentorship-driven accelerators.Once you're selected for an accelerator, you'll be part of the LightLimX community for life.That means you have a hyperconnected platform to expand your business and expand your network with access to a talented group of founders, investors, mentors, and industry leaders.</p>
<span class="startup-content-btn wow fadeInUp" @click="$router.push({path:'/contact'})" data-wow-delay=".3s">Apply Now</span>
<h2 class="startup-content-h2 startup-content-h2-2 wow fadeInUp" data-wow-delay=".3s">
Your Startup Needs Are Covered
</h2>
<p class="startup-content-desc wow fadeInUp" data-wow-delay=".3s">
Modeled after the most effective global programs and built by accelerator veterans, LightLimX will bring you exactly what you need, when you need it.
</p>
<ul class="startup-content-ul">
<li class="startup-content-li wow fadeInUp" data-wow-delay=".5s" v-for="(item,index) in staticData" :key="index+'_startup'">
<img v-lazy="assetsUri(item.img)" v-if="item.img" class="startup-content-li-img" alt="" />
<h3 class="startup-content-li-h3" >{{item.title}}</h3>
<p class="startup-content-li-p" v-html="item.desc"></p>
</li>
<li class="startup-content-li" style="opacity: 0" v-if="staticData.length%3==2">
</li>
</ul>
</div>
</template>
<script>
import {
assetsUri
} from "../../utils";
export default {
name: "StartupContent",
props:{
staticData:{
type:Array,
default:()=>[]
}
},
data(){
return {
assetsUri,
}
}
}
</script>
<style scoped lang="less">
.startup-content{
&-desc{
font-size: .24rem;
font-family: Manrope;
font-weight: bold;
line-height: .44rem;
text-align: center;
color: #302D2C;
max-width: 9.67rem;
margin: .72rem auto 0;
}
&-h2{
padding-top: 1.5rem;
font-size: .6rem;
font-family: Manrope;
font-weight: bold;
line-height: 1.1rem;
color: #302D2C;
text-align: center;
}
&-p{
margin-top: .72rem;
font-size: .2rem;
font-family: Manrope;
font-weight: 400;
line-height: .4rem;
color: #302D2C;
text-align: center;
}
&-btn{
display: flex;
justify-content: center;
align-items: center;
margin: 1.22rem auto 0;
width: 3.24rem;
height: .6rem;
border: 1px solid #9B9B9B;
border-radius: .1rem;
font-size: .24rem;
font-family: Manrope;
font-weight: bold;
color: #302D2C;
cursor: pointer;
margin-bottom: .7rem;
&:hover{
background-color: #F49F00;
transition: background-color .3s ease-in;
border-color: #fff;
}
}
&-ul{
margin-top: .93rem;
display: flex;
flex-wrap: wrap;
justify-content: space-between;
}
&-li{
cursor: pointer;
width: 4.09rem;
height: 4.23rem;
display: flex;
align-items: center;
flex-direction: column;
padding-top: .76rem;
box-sizing: border-box;
padding-left: .29rem;
padding-right: .29rem;
margin-bottom: .32rem;
transition: all .3s ease-in;
&-h3{
margin-top: .32rem;
font-size: .24rem;
font-family: Manrope;
font-weight: bold;
color: #342927;
text-align: center;
}
&-p{
margin-top: .32rem;
font-size: .16rem;
font-family: Manrope;
font-weight: 400;
line-height: .32rem;
color: #302D2C;
text-align: center;
}
&-img{
display: block;
width: .88rem;
height: .88rem;
}
&:hover{
transform: scale(1.01);
box-shadow: 0 .03rem .2rem rgba(0, 0, 0, 0.06);
}
}
}
@media screen and (max-width: 820px) {
.startup-content{
&-ul{
justify-content: space-around;
}
}
}
@media screen and (max-width: 768px) {
.startup-content{
&-desc{
font-size: .3rem;
line-height: .4rem;
max-width: 6.9rem;
margin: .28rem auto 0;
}
&-h2{
padding-top: .5rem;
&-2{
max-width: 6.5rem;
margin: 0 auto;
line-height: .7rem;
}
}
&-p{
margin-top: .28rem;
font-size: .24rem;
line-height: .4rem;
padding: 0 .3rem;
}
&-btn{
margin: .65rem auto 0;
width: 5.18rem;
height: .96rem;
font-size: .24rem;
margin-bottom: 1rem;
}
&-ul{
margin-top: .49rem;
}
&-li{
margin: 0 .3rem;
width: 100%;
min-height: 7rem;
padding-top: 1.2rem;
padding-left: .29rem;
padding-right: .29rem;
margin-bottom: .32rem;
&-h3{
margin-top: .73rem;
font-size: .4rem;
}
&-p{
margin-top: .6rem;
font-size: .24rem;
line-height: .34rem;
}
&-img{
width: 2rem;
height: 2rem;
}
}
}
}
</style>

43
components/SvgIcon.vue Normal file
View File

@ -0,0 +1,43 @@
<template>
<svg :class="svgClass" v-on="$listeners">
<use :xlink:href="iconName" />
</svg>
</template>
<script>
export default {
name: 'SvgIcon',
props: {
iconClass: {
type: String,
required: true
},
className: {
type: String,
default: ''
}
},
computed: {
iconName () {
return `#icon-${this.iconClass}`
},
svgClass () {
if (this.className) {
return 'svg-icon ' + this.className
} else {
return 'svg-icon'
}
}
}
}
</script>
<style lang="less" scoped>
.svg-icon {
width: 1em;
height: 1em;
vertical-align: -0.15em;
fill:currentColor;
overflow: hidden;
}
</style>

22
ecosystem.config.js Normal file
View File

@ -0,0 +1,22 @@
module.exports = {
apps : [{
name: "Limix",
script: "./node_modules/nuxt/bin/nuxt.js",
// watch: ["src"],
//ignore_watch: ["node_modules", "logger"],
//max_memory_restart: "300M",
exec_mode: "cluster", // 开启多线程模式,用于负载均衡
instances: "max", // 启用多少个实例,可用于负载均衡
//autorestart: true,
//pm2:true,
args: 'start',
//kill_timeout: 3000,
//instance_var: "INSTANCE_ID",
//env: {
// NODE_ENV: "development",
//},
//env_production: {
// NODE_ENV: "production",
//}
}]
}

44
layouts/index.vue Normal file
View File

@ -0,0 +1,44 @@
<template>
<div class="my-layout" v-if="loading" >
<my-header ></my-header>
<Nuxt />
<my-footer></my-footer>
</div>
</template>
<script>
import MyHeader from "../components/MyHeader/index";
import MyFooter from "../components/MyFooter/index";
export default {
name: "index",
components: {MyFooter, MyHeader },
data(){
return {
loading:false
}
},
mixins:[],
mounted(){
this.$nextTick(() => {
this.$nuxt.$loading.start()
setTimeout(async () =>{
await this.$nuxt.$loading.finish();
this.loading=!this.$nuxt.$loading.getLoadingState();
}, 2000)
})
},
async asyncData(data) {
const { params, $http }=data;
// const post = await $http.$get(`https://api.nuxtjs.dev/posts/${params.id}`)
return { post:'121' }
}
}
</script>
<style scoped lang="less">
.my-layout{
display: block;
height: 100%;
}
</style>

View File

@ -0,0 +1,9 @@
export default function ({ store, redirect }) {
// If the user is not authenticated
// if (store.state.loading) {
// return redirect('/loading')
// }
// if (!store.state.loading) {
// return redirect('/')
// }
}

21
middleware/i18n.js Normal file
View File

@ -0,0 +1,21 @@
export default function ({ isHMR, app, store, route, params, error, redirect }) {
const defaultLocale = app.i18n.fallbackLocale
// If middleware is called from hot module replacement, ignore it
if (isHMR) return
// Get locale from params
const locale = params.lang || defaultLocale
if (store.state.locales.indexOf(locale) === -1) {
return error({ message: 'This page could not be found.', statusCode: 404 })
}
// Set locale
store.commit('SET_LANG', locale || 'en-US')
app.i18n.locale = store.state.locale
// If route is /<defaultLocale>/... -> redirect to /...
if (locale === defaultLocale && route.fullPath.indexOf('/' + defaultLocale) === 0) {
const toReplace = '^/' + defaultLocale + (route.fullPath.indexOf('/' + defaultLocale + '/') === 0 ? '/' : '')
const re = new RegExp(toReplace)
return redirect(
route.fullPath.replace(re, '/')
)
}
}

130
nuxt.config.js Normal file
View File

@ -0,0 +1,130 @@
import redirectSSL from 'redirect-ssl'
import serveStatic from 'serve-static'
import {resolve} from "path";
const baseUrl = process.env.BASE_URL || 'https://api.lightlimx.live/api'
export default {
loading: '~/components/Loading/index.vue',
serverMiddleware: [
// redirectSSL.create({
// enabled: process.env.NODE_ENV === 'production'
// }),
{ path: '/static', handler: serveStatic(__dirname + '/static') }
],
telemetry:false,
publicRuntimeConfig: {
baseURL: baseUrl,
axios: {
baseURL: baseUrl
}
},
env: {
baseUrl: process.env.BASE_URL || 'http://localhost:3000',
apiUrl: '/api'
},
alias: {
'@': resolve(__dirname),
'~': resolve(__dirname),
style: resolve(__dirname, './assets/style'),
images: resolve(__dirname, './assets/images'),
data: resolve(__dirname, './assets/data')
},
// Global page headers: https://go.nuxtjs.dev/config-head
head: {
title: 'LightLimX',
htmlAttrs: {
lang: 'en',
},
bodyAttrs: {
class: 'h5-scroll-bar'
},
meta: [
{ charset: 'utf-8' },
//width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no
{ name: 'viewport', content: 'width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no,minimal-ui,viewport-fit=cover' },
{ hid: 'description', name: 'description', content: '' },
{ name: 'format-detection', content: 'telephone=no' }
],
link: [
{ rel: 'icon', type: 'image/x-icon', href: '/favicon.png' }
]
},
// Global CSS: https://go.nuxtjs.dev/config-css
css: [
'~/assets/style/reset.less',
'~/assets/style/animate.css',
'vant/lib/index.css'
],
// Plugins to run before rendering page: https://go.nuxtjs.dev/config-plugins
plugins: [
{ src: '~/plugins/remJs.js', mode: 'client' },
'@/plugins/vant',
'~/plugins/axios.js',
'~/plugins/vueTooltip.js',
// { src: '~/plugins/vueAnimate.js', mode: 'client' },
{ src: '~/plugins/vueClipboard.js', mode: 'client' },
{ src: '~/plugins/lottieWeb.js', mode: 'client' },
{ src: '~/plugins/svgIcon.js', mode: 'client' },
{ src: '~/plugins/wow.js', mode: 'client' },
{ src: '~/plugins/element.js', mode: 'client' },
],
router: {
// base: '/assets/',
middleware: ['authenticated']
},
// Auto import components: https://go.nuxtjs.dev/config-components
components: true,
// Modules for dev and build (recommended): https://go.nuxtjs.dev/config-modules
buildModules: [
],
// Modules: https://go.nuxtjs.dev/config-modules
modules: [
['nuxt-svg-sprite-loader', {
symbolId: 'icon-[name]'
}],
'@nuxtjs/axios'
],
// Build Configuration: https://go.nuxtjs.dev/config-build
build: {
transpile: ['vue-tooltip'],
extractCSS: {
// allChunks: true,
filename: '[name].css',
chunkFilename: '[id].css',
ignoreOrder: true
},
babel: {
plugins: [
[
'component',
{
'libraryName': 'element-ui',
// 'style': false // 不引入对应的css文件
'styleLibraryName': 'theme-chalk'
}
]
]
},
extend (config, { isDev, isClient }) {
if (isClient) {
// 排除 nuxt 原配置的影响,Nuxt 默认有vue-loader,会处理svg,img等
// 找到匹配.svg的规则,然后将存放svg文件的目录排除
const svgRule = config.module.rules.find(rule => rule.test.test('.svg'))
svgRule.exclude = [resolve('assets/svg')]
// 添加loader规则
}
config.module.rules.push({
test: /\.(mpg|ts|pm4)$/i,
loader: 'url-loader',
options: {
outputPath: '/static/video/',
publicPath: '/static/video/'
}
})
}
}
}

49
package.json Normal file
View File

@ -0,0 +1,49 @@
{
"name": "demo",
"version": "1.0.0",
"private": true,
"scripts": {
"dev": "nuxt",
"build": "nuxt build",
"start": "nuxt start",
"generate": "nuxt generate",
"pm2": "pm2 start",
"deylop": "node ./script/deploy/index.js"
},
"dependencies": {
"@nuxtjs/axios": "^5.13.6",
"animate.css": "^4.1.1",
"core-js": "^3.19.3",
"element-ui": "^2.15.6",
"gsap": "^3.9.1",
"jquery": "^3.6.0",
"js-cookie": "^3.0.1",
"nuxt": "^2.15.8",
"vant": "^2.12.36",
"vue": "^2.6.14",
"vue-pagination-2": "^3.0.91",
"vue-server-renderer": "^2.6.14",
"vue-template-compiler": "^2.6.14",
"webpack": "^4.46.0"
},
"devDependencies": {
"archiver": "^4.0.1",
"babel-plugin-component": "^1.1.1",
"chalk": "^4.0.0",
"crypto-js": "^4.1.1",
"fs-extra": "^9.0.0",
"less": "^4.1.2",
"less-loader": "^7.1.0",
"lottie-web": "^5.8.1",
"lottie-web-vue": "^1.2.1",
"moment": "^2.29.1",
"node-cmd": "^5.0.0",
"node-ssh": "^8.0.0",
"nuxt-svg-sprite-loader": "^2.0.7",
"redirect-ssl": "^3.0.0",
"svg-sprite-loader": "^6.0.11",
"v-tooltip": "^2.1.3",
"vue-animate-plugin": "^1.0.1",
"vue-clipboard2": "^0.3.3"
}
}

229
pages/LPLogin/index.vue Normal file
View File

@ -0,0 +1,229 @@
<template>
<div class="fullpage-container">
<SectionView>
<div class="LP-login-conten">
<h1>Sign In</h1>
<div class="LP-login-input-conten">
<div class="LP-login-input"><p>Email address <span style="color:#F49F00">*</span></p><input type="text" name="" id=""></div>
<div class="LP-login-input"><p class="Password">Password<span style="color:#F49F00">*</span></p><input class="password-font" type="password" name="" id=""></div></div>
<div class="LP-login-confirm-conten">
<div class="confirm">
<span>LOGIN</span>
</div>
<p>Forgot password?</p>
</div>
</div>
</SectionView>
</div>
</template>
<script>
import animateMixin from '../../utils/animateMixin'
import SectionView from "../../components/SectionView/index";
export default {
name: 'IndexPage',
layout:'index',
components:{
SectionView
},
mixins:[animateMixin],
head() {
return {
title: this.title,
meta: [
{
hid: 'description',
name: 'description',
content: 'My custom description'
}
]
}
},
async asyncData(data) {
const { params, $http }=data;
// const post = await $http.$get(`https://api.nuxtjs.dev/posts/${params.id}`)
return { post:'121' }
},
data() {
return {
title:'LightLimX-LPLogin',
opts: {
}
}
}
}
</script>
<style scoped lang="less">
.LP-login-conten{
margin-top: 1.9rem;
h1{
font-size: 0.36rem;
font-family: Manrope;
font-weight: bold;
color: #302D2C;
opacity: 1;
text-align: center;
}
.LP-login-input-conten{
display: flex;
flex-direction: column;
width: 100%;
margin-top: 1.2rem;
.LP-login-input{
margin: 0 auto;
input{
padding-left: 0.2rem;
font-size: 0.2rem;
font-family: Manrope;
font-weight: 400;
width: 4.3rem;
height: 0.58rem;
display: block;
background: #FFFFFF;
border: 1px solid #9B9B9B;
opacity: 1;
border-radius: 0.1rem;
margin-top: 0.15rem;
}
.password-font{
font-family: none;
}
input:focus {
border: 1px solid #F49F00;
box-shadow: 0px 3px 6px rgba(244, 159, 0, 0.12);
}
p{
font-size: 0.16rem;
font-family: Manrope;
font-weight: 400;
color: #302D2C;
opacity: 1;
}
.Password{
margin-top: 0.35rem;
}
}
}
.LP-login-confirm-conten{
margin-top: 0.95rem;
.confirm{
margin: 0 auto;
cursor: pointer;
width: 2.42rem;
height: 0.58rem;
background: #F49F00;
opacity: 1;
border-radius: 0.1rem;
span{
display: block;
font-size: 0.2rem;
font-family: Manrope;
font-weight: 400;
line-height: 0.58rem;
color: #302D2C;
opacity: 1;
text-align: center;
}
}
p{
text-align: center;
font-size: 0.14rem;
font-family: Manrope;
font-weight: 400;
color: #000000;
opacity: 1;
margin-top: 0.25rem;
}
}
}
@media screen and (max-width: 768px) {
.LP-login-conten{
margin-top: 1.9rem;
h1{
font-size: 0.6rem;
font-family: Manrope;
font-weight: bold;
color: #302D2C;
opacity: 1;
text-align: center;
}
.LP-login-input-conten{
display: flex;
flex-direction: column;
width: 100%;
margin-top: 0.5rem;
.LP-login-input{
margin: 0 auto;
input{
padding-left: 0.2rem;
font-size: 0.2rem;
font-family: Manrope;
font-weight: 400;
width: 6.5rem;
height: 0.8rem;
display: block;
background: #FFFFFF;
border: 1px solid #9B9B9B;
opacity: 1;
border-radius: 0.1rem;
margin-top: 0.15rem;
}
.password-font{
font-family: none;
}
input:focus {
border: 1px solid #F49F00;
box-shadow: 0px 3px 6px rgba(244, 159, 0, 0.12);
}
p{
font-size: 0.3rem;
font-family: Manrope;
font-weight: 400;
color: #302D2C;
opacity: 1;
}
.Password{
margin-top: 0.35rem;
}
}
}
.LP-login-confirm-conten{
margin-top: 0.95rem;
.confirm{
margin: 0 auto;
cursor: pointer;
width: 5.18rem;
height: 0.96rem;
background: #F49F00;
opacity: 1;
border-radius: 0.1rem;
span{
display: block;
font-size: 0.38rem;
font-family: Manrope;
font-weight: bold;
line-height: 0.96rem;
color: #302D2C;
opacity: 1;
text-align: center;
}
}
p{
text-align: center;
font-size: 0.24rem;
font-family: Manrope;
font-weight: 400;
color: #000000;
opacity: 1;
margin-top: 0.25rem;
}
}
}
}
</style>

115
pages/contact/_id.vue Normal file
View File

@ -0,0 +1,115 @@
<template>
<div class="fullpage-container">
<section-view :css-style="{'background-color':'#fff'}">
<div class="Details-conten-img">
<img v-lazy="assetsUri('images/ContactUs/Details.png')" alt="">
<div class="Details-text">
<p>Thank you for submitting</p>
<p>the information.</p>
<p>We will contact you as soon as possible.</p>
</div>
</div>
</section-view>
</div>
</template>
<script>
import animateMixin from '../../utils/animateMixin'
import SectionView from "../../components/SectionView/index";
import {assetsUri} from '~/utils/index.js'
export default {
name: 'IndexPage',
layout:'index',
components:{
SectionView
},
mixins:[animateMixin],
head() {
return {
title: this.title,
meta: [
{
hid: 'description',
name: 'description',
content: 'My custom description'
}
]
}
},
async asyncData(data) {
const { params, $http }=data;
// const post = await $http.$get(`https://api.nuxtjs.dev/posts/${params.id}`)
return { post:'121' }
},
data() {
return {
assetsUri,
title:'LightLimX',
opts: {
}
}
}
}
</script>
<style scoped lang="less">
.Details-conten-img{
margin-top: 0.96rem;
padding-top: 2rem;
img{
display: block;
width: 20%;
margin: 0 auto;
}
.Details-text{
margin-top: .6rem;
p{
font-size: 0.28rem;
font-family: Manrope;
font-weight: bold;
line-height: 0.5rem;
color: #302D2C;
opacity: 1;
text-align: center;
}
}
}
@media screen and (max-width: 768px){
.section-view{
min-height: 0vh;
}
.Details-conten-img{
margin-top: 0.96rem;
padding-top: 2rem;
padding-bottom: 3rem;
img{
display: block;
width: 30%;
margin: 0 auto;
}
.Details-text{
margin-top: .6rem;
p{
font-size: 0.28rem;
font-family: Manrope;
font-weight: bold;
line-height: 0.5rem;
color: #302D2C;
opacity: 1;
text-align: center;
}
}
}
}
</style>

487
pages/contact/index.vue Normal file
View File

@ -0,0 +1,487 @@
<template>
<div class="fullpage-container">
<section-view :css-style="{'background-color':'#000'}" v-lazy:background-image="assetsUri('images/ContactUs/ContactUs_banner.png')" class="contactUs-section-view">
<div class="contactUs-div wow fadeInUp">
<img v-lazy="assetsUri('images/ContactUs/ContactUs_c.png')" alt="">
<h2 class="contactUs-div-t">Contact Us</h2>
</div>
</section-view>
<section-view :css-style="{'background-color':'#fff'}">
<div class="contactUs-Why-conten wow fadeInUpBig" data-wow-delay=".8s" >
<h1 >Why Partner with us?</h1><p >The original intention of LightLimX is "Create miracles and lead the future together with entrepreneurs". We are investors and entrepreneurs,full of passion, active exploration and persistence in entrepreneurship.Such spirit makes LightLimX and investees the most solid partners. Such core value is also reflected in the value we live by.</p>
</div>
<div class="contactUs-Why-brie wow fadeInUpBig" data-wow-delay=".8s" >
<p >Please contact us if you have an innovative idea.</p>
<p >We are willing to turn your dream into real business with our support.</p>
</div>
<div class="situation-h1 wow fadeInUpBig">Email:info@lightlimx.com</div>
<div class="LP-login-input-conten ">
<div class="LP-login-input wow fadeInUpBig" data-wow-delay=".3s" >
<p>Name<span style="color:#F49F00">*</span></p>
<input class="inputClass" v-model="from.name" type="text" name="" id="">
</div>
<div class="LP-login-input wow fadeInUpBig" data-wow-delay=".3s">
<p class="Password">mail<span style="color:#F49F00">*</span></p>
<input v-model="from.email" class="password-font inputClass" name="" id="">
</div>
<div class="LP-login-input wow fadeInUpBig" data-wow-delay=".3s">
<p class="Password">Organization<span style="color:#F49F00">*</span></p>
<input v-model="from.company" class="password-font inputClass" name="" id="">
</div>
<div class="LP-login-input wow fadeInUpBig" data-wow-delay=".3s">
<p class="Password">Project<span style="color:#F49F00">*</span></p>
<public-select @select="handleSelect" class="password-font inputClass" :select.sync="from.project_id" :options="staticData">
<div class="svg-icon-wrap" style="padding-right: .35rem">
<svg-icon icon-class="cuarr"></svg-icon>
</div>
</public-select>
</div>
<div class="LP-login-input wow fadeInUpBig" data-wow-delay=".3s">
<p class="Password">More informationt<span style="color:#F49F00">*</span></p>
<div class="input-btn-conten">
<van-field
v-model="from.information"
class="input-btn-conten-textarea"
rows="1"
autosize
label=""
type="textarea"
placeholder=""
/>
<div class="input-btn-conten-box">
<img v-lazy="assetsUri('images/ContactUs/file.png')" alt="">
<van-uploader :after-read="onRead" :accept="'.pdf'">
<span class="btnx_hover">{{file_name}}</span>
</van-uploader>
</div>
</div>
</div>
</div>
<div class="LP-login-input-btnFile wow fadeInUp" data-wow-delay=".3s">
<span @click="contactUsBtn">Submit</span>
</div>
</section-view>
</div>
</template>
<script>
import animateMixin from '../../utils/animateMixin'
import SectionView from "../../components/SectionView/index";
import {assetsUri} from '~/utils/index.js'
import PublicSelect from "../../components/PublicSelect/index";
export default {
name: 'IndexPage',
layout:'index',
mixins:[animateMixin],
components:{
PublicSelect,
SectionView
},
head() {
return {
title: this.title,
meta: [
{
hid: 'description',
name: 'description',
content: 'My custom description'
}
]
}
},
async asyncData(data) {
const { params, $http }=data;
// const post = await $http.$get(`https://api.nuxtjs.dev/posts/${params.id}`)
return { post:'121' }
},
data() {
return {
staticData:[],
from:{
name:'',
email:'',
company:'',
project_id:'',
logo:'',
information:''
},
file_name:'Attachment Files(.PDF)',
assetsUri,
title:'LightLimX-Contract Us',
opts: {
}
}
},
created(){
this.handleLists()
},
methods:{
handleSelect(item){
this.from.project_id=item.id
},
async handleLists(){
const {baseURL}=this.$config;
const res= await this.$axios(baseURL+'/projectType/index?page=1&size=100')
if(res.status!==200){
return this.$toast(res.data.msg)
}
const {content,totalElements}=res.data
this.staticData=content.map((item)=>{return {...item,id:item.id.toString()}});
},
//
contactUsBtn(){
if(this.from.name == ''){
return this.$toast('Please enter name');
}
if(this.from.email == ''){
return this.$toast('Please enter mail');
}
if(this.from.company == ''){
return this.$toast('Please enter Organization');
}
if(this.from.project_id == ''){
return this.$toast('Please select Project');
}
if(this.from.information==''){
return this.$toast('Please enter More informationt text');
}
if(this.from.logo == ''){
return this.$toast('Please enter More informationt');
}
const {baseURL}=this.$config;
console.log('this.form',this.from)
this.$axios.post(baseURL+'/contact/save', this.from, {headers: {
'Content-Type': 'application/json'
}}).then(res => {
this.$toast('Submitted successfully');
setTimeout(() => {
this.$router.push('/contact/one')
}, 500);
}).catch(err => {
alert(err)
})
},
//
onRead(file) {
const {baseURL}=this.$config;
let fd = new FormData()
fd.append('file', file.file)
this.$axios.post(baseURL+'/uploads/store', fd, {headers: {
'Content-Type': 'multipart/form-data'
}}).then(res => {
this.file_name = res.data.data.name;
this.from.logo= res.data.data.image.uri;
}).catch(err => {
alert(err)
})
},
},
}
</script>
<style scoped lang="less">
.contactUs-section-view{
background-position: center bottom;
background-size: 100% 100%;
background-repeat: no-repeat;
margin-top: 0.95rem;
min-height:6.25rem !important;
.contactUs-div{
display: flex;
justify-content: center;
align-items: center;
padding-top: 1.6rem;
img{
display: block;
width: 15%;
}
.contactUs-div-t{
font-size: 0.72rem;
font-family: Manrope;
font-weight: bold;
color: #FFFFFF;
opacity: 1;
}
}
}
.contactUs-Why-conten{
padding-top: 1.5rem;
h1{
font-size: 0.48rem;
font-family: Manrope;
font-weight: bold;
color: #302D2C;
text-align: center;
margin-bottom: 0.7rem;
}
p{
font-size: 0.2rem;
font-family: Manrope;
font-weight: 400;
color: #302D2C;
text-align: center;
line-height: 0.4rem;
}
}
.contactUs-Why-brie{
margin-top: 1rem;
p{
text-align: center;
font-size: 0.2rem;
font-family: Manrope;
font-weight: bold;
line-height: 0.4rem;
color: #302D2C;
}
}
.situation-h1{
margin-top: 1.5rem;
font-size: 0.62rem;
font-family: Manrope;
font-weight: bold;
color: #302D2C;
cursor: pointer;
text-align: center;
}
.situation-h1:hover{
/*text-shadow: 0 0 5px #FF0000, 0 0 5px #6bf403;*/
text-stroke:1px #F49F00;
-webkit-text-stroke:1px #F49F00;
color: #Fff;
}
.LP-login-input-conten{
display: flex;
flex-direction: column;
width: 100%;
margin-top: 2rem;
.LP-login-input{
margin: 0 auto;
.inputClass{
padding-left: 0.2rem;
font-size: 0.2rem;
font-family: Manrope;
font-weight: 400;
width: 8.8rem;
height: 0.58rem;
display: block;
background: #FFFFFF;
border: 1px solid #9B9B9B;
opacity: 1;
border-radius: 0.1rem;
margin-top: 0.15rem;
}
select{
outline: none;
padding: 0 .2rem;
appearance:none;
-moz-appearance:none;
-webkit-appearance:none;
font-size: 0.2rem;
font-family: Manrope;
font-weight: 400;
height: 0.58rem;
width: 9rem;
margin-top: 0.15rem;
border-radius: 0.1rem;
border: solid 1px #9B9B9B;
background: url("~/static/images/ContactUs/arrow.png") no-repeat 95% center !important;
}
select::-ms-expand { display: none; }
select:focus{
border: 1px solid #F49F00;
box-shadow: 0px 3px 6px rgba(244, 159, 0, 0.12);
}
.password-font{
// font-family: none;
}
input:focus {
border: 1px solid #F49F00;
box-shadow: 0px 3px 6px rgba(244, 159, 0, 0.12);
}
p{
font-size: 0.16rem;
font-family: Manrope;
font-weight: 400;
color: #302D2C;
opacity: 1;
}
.Password{
margin-top: 0.35rem;
}
}
}
.input-btn-conten{
margin-top: 0.15rem;
width: 9rem;
min-height: 1.94rem;
border: 1px solid #9B9B9B;
border-radius: 0.1rem;
display: flex;
position: relative;
&-textarea{
padding:.2rem .2rem 1rem;
background-color: transparent;
font-size: 0.2rem;
font-family: Manrope;
font-weight: 400;
&:after{
border-bottom: 0;
}
}
.input-btn-conten-box{
display: flex;
align-items: center;
margin-bottom: 0.2rem;
position: absolute;
left: 0;
bottom: 0;
img{
margin-left: 0.25rem;
width: 10%;
}
span{
font-size: 0.2rem;
font-family: Manrope;
font-weight: 400;
color: #302D2C;
opacity: 1;
cursor: pointer;
margin-left: 0.15rem;
}
}
}
.LP-login-input-btnFile{
margin-top: 1.2rem;
padding-bottom: 2.2rem;
span{
margin: 0 auto;
cursor: pointer;
display: block;
width: 3.5rem;
height: .6rem;
background: #F49F00;
border-radius: .1rem;
text-align: center;
line-height: .6rem;
font-size: .24rem;
font-family: Manrope;
font-weight: bold;
color: #302D2C;
}
}
@media screen and (max-width: 768px){
.contactUs-section-view{
margin-top: 0.5rem;
background-image: url('~/static/images/ContactUs/ContactUs_banner_h5.jpg') !important;
}
.contactUs-section-view .contactUs-div img{
width: 28%;
}
.contactUs-Why-conten{
padding: 0 0.3rem;
padding-top: 0.5rem;
}
.contactUs-Why-conten h1{
font-size: 0.6rem;
}
.contactUs-Why-conten p{
font-size: 0.24rem;
font-family: Manrope;
font-weight: 400;
line-height: 0.35rem;
color: #302D2C;
opacity: 1;
}
.contactUs-Why-brie{
padding: 0 0.3rem;
}
.contactUs-Why-brie p{
font-size: 0.3rem;
font-family: Manrope;
font-weight: bold;
line-height: 0.4rem;
color: #302D2C;
opacity: 1;
}
.situation-h1{
font-size: 0.52rem;
}
.LP-login-input-conten .LP-login-input{
width: 85%;
}
.LP-login-input-conten .LP-login-input .inputClass{
width: 100%;
height: 0.8rem;
}
.LP-login-input-conten{
margin-top: 1rem;
}
.LP-login-input-conten .LP-login-input p{
font-size: 0.3rem;
font-family: Manrope;
font-weight: 400;
}
.input-btn-conten{
width: 100%;
padding-right: 0.2rem;
}
.LP-login-input-btnFile{
margin-top: 1rem;
padding-bottom: 1rem;
}
.input-btn-conten .input-btn-conten-box span{
font-size: 0.22rem;
}
.LP-login-input-btnFile span{
width: 70%;
height: 0.96rem;
line-height: 0.96rem;
font-size: 0.38rem;
}
select{
height: 0.96rem !important;
width: 104% !important;
}
.LP-login-input-conten .LP-login-input input{
font-size: 0.24rem;
}
.LP-login-input-conten .LP-login-input select{
font-size: 0.24rem;
}
}
</style>
<style lang="less">
.van-uploader:hover span.btnx_hover{
color: #F49F00;
text-decoration: underline;
font-size: .2rem;
font-family: Manrope;
font-weight: 400;
color: #F49F00;
}
</style>

310
pages/index.vue Normal file
View File

@ -0,0 +1,310 @@
<template>
<div class="fullpage-container">
<section-view :css-style="{'background-color':bgColors[0],'transition': 'background-color .3s ease-in'}">
<section-limit-x >
</section-limit-x>
</section-view>
<about-us id="aboutUs" :css-style="{'background-color':activeColor,'transition': 'background-color .3s ease-in'}" >
<lottie-animation
:style="{'opacity':activeColor===bgColors[1]?'1':'0'}"
:loop="true"
:speed="1000"
:autoPlay="true"
ref="anim"
:animationData="require('@/assets/data/q3.json')"
/>
</about-us>
<focus-areas id="focusAreas" :css-style="{backgroundColor:bgColors[2],'transition': 'background-color .3s ease-in'}"></focus-areas>
<our-portfolio id="ourPortfolio" :css-style="{'position':'relative','z-index':'1',backgroundColor:activeColor2,'transition': 'background-color .3s ease-in'}">
<our-portfolio-item :style="{'opacity':activeColor2==='#fff'?'1':'0'}" v-for="(item) in portfolios" :key="item.title" :item="item"></our-portfolio-item>
</our-portfolio>
<div id="portfolio" :style="{'background-color':bgColors[4],'transition': 'background-color .3s ease-in'}">
<div class="home-wrap">
<portfolio :position="position" :top="top" :bottom="bottom" :staticData="portfolio"></portfolio>
<partners :partners="partners" :showPartners="showPartners" ></partners>
<our-founders><banner :images="banners"></banner></our-founders>
</div>
</div>
<section-view id="situation" :css-style="{'background-color':activeColor3,'transition': 'background-color .3s ease-in'}">
<situation :style="{'opacity':activeColor3=='#fff'?'1':'0'}">
<email-footer ></email-footer>
</situation>
</section-view>
</div>
</template>
<script>
import LottieAnimation from 'lottie-web-vue'
import SectionLimitX from "../components/SectionLimitX/index";
import AboutUs from "../components/AboutUs/index";
import FocusAreas from "../components/FocusAreas/index";
import OurPortfolio from "../components/OurPortfolio/index";
import {portfolios} from "../assets/js/static";
import OurPortfolioItem from "../components/OurPortfolioItem/index";
import SectionView from "../components/SectionView/index";
import Portfolio from "../components/Portfolio/index";
import Partners from "../components/Partners/index";
import OurFounders from "../components/OurFounders/index";
import Banner from "../components/Banners/index";
import Situation from "../components/Situation/index";
import EmailFooter from "../components/EmailFooter/index";
import {hanldePortflioData} from "../utils/filter";
import animateMixin from '../utils/animateMixin'
export default {
name: 'IndexPage',
layout:'index',
mixins:[animateMixin],
components:{
EmailFooter,
Situation,
Banner,
OurFounders,
Partners,
Portfolio,
SectionView,
OurPortfolioItem,
OurPortfolio,
FocusAreas,
AboutUs,
SectionLimitX,
LottieAnimation
},
head() {
return {
title: this.title,
meta: [
{
hid: 'description',
name: 'description',
content: 'My custom description'
}
]
}
},
created(){
this.activeColor=this.bgColors[1]
this.activeColor2=this.bgColors[3]
this.activeColor3=this.bgColors[5]
},
mounted(){
this.handleScroll()
window.addEventListener('scroll',this.handleScroll)
},
async asyncData(config) {
const {$axios,$config,payload}=config;
if(payload){
return
}
// const {baseURL}=$config
// const result=await Promise.all([
// $axios.$get(`${baseURL}/partners/index?page=1&size=10`),
// $axios.$get(`${baseURL}/portfolio/index?page=1&size=99`),
// $axios.$get(`${baseURL}/carousel/index?page=1&size=10`),
// ])
// if(!result.length){
// return {}
// }
// console.log(result[1].content,'result',result[2].content)
// if(!result[1].content){
// return {partners:result[0].content, banners:result[2].content,}
// }
// const myPortfolio=await hanldePortflioData(result[1].content)
// return {partners:result[0].content, banners:result[2].content,portfolio:myPortfolio}
},
methods:{
handleScroll(){
let scrollTop = window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop;
// const opacity = Math.abs(Math.round(scrollTop)) / 300;
const clientWidth=document.documentElement.clientWidth;
if(clientWidth>768){
if(scrollTop>300){
this.activeColor=this.bgColors[1]
}else if(scrollTop<=300){
this.activeColor=this.bgColors[0]
}
}else{
this.activeColor=this.bgColors[1]
}
if(clientWidth<751){
this.position='sticky'
this.top='0'
this.bottom='initial';
return
}
const focusAreasDom= document.getElementById('focusAreas');
const ourPortfolioDom= document.getElementById('ourPortfolio');
const situationDom= document.getElementById('situation');
const focusAreasSetTop=focusAreasDom.offsetTop;
const ourPortfolioDomSetTop=ourPortfolioDom.offsetTop;
const situationDomTop=situationDom.offsetTop;
if(scrollTop>(focusAreasSetTop-300)){
this.activeColor=this.bgColors[0]
this.activeColor2=this.bgColors[4]
}
if(scrollTop>(ourPortfolioDomSetTop-300)){
this.activeColor2='#fff'
}
if(scrollTop<(situationDomTop-300)){
this.activeColor3=this.bgColors[4]
}
if(scrollTop>(situationDomTop-300)){
this.activeColor3='#fff'
}
// else if(scrollTop<=300){
// this.activeColor=this.bgColors[0]
// }
const portfolioDom= document.getElementById('iPortfolio');
const portfolioOffSetTop=portfolioDom.offsetTop;
const portfolioHeight=portfolioDom.offsetHeight;
const partnersDom= document.getElementById('partners');
const partnersSetTop=partnersDom.offsetTop;
this.showPartners=scrollTop>(partnersSetTop-300)
const layoutHeight= document.getElementById('layout-header').offsetHeight;
const ballHeight= document.getElementById('ball').offsetHeight;
const portfolioTop=portfolioOffSetTop;
if(scrollTop>portfolioTop){
if(scrollTop>(portfolioHeight+portfolioTop-ballHeight)){
this.position='absolute'
this.bottom=0+'px';
this.top='initial';
return;
}
this.position='fixed'
this.top=layoutHeight+'px';
this.bottom='initial';
}else if(scrollTop<=portfolioTop){
this.position='absolute'
this.top='0'
this.bottom='initial';
}
// console.log(portfolioTop,'offSetTop',scrollTop,'clientWidth')
}
},
destroyed(){
window.removeEventListener('scroll',this.handleScroll)
},
data() {
return {
top:'0',
bottom:'initial',
position:'sticky',
activeColor:'#2E2C2C',
activeColor2:'#2E2C2C',
activeColor3:'#2E2C2C',
showPartners:false,
bgColors:[
'#2E2C2C','#fff','#000','#fff','#292727','#fff'
],
partners:[
{
logo:'images/partners/组 764@2x.png',
}, {
logo:'images/partners/组 761@2x.png',
}, {
logo:'images/partners/组 762@2x.png',
}, {
logo:'images/partners/组 763@2x.png',
}, {
logo:'images/partners/组 756@2x.png',
}, {
logo:'images/partners/组 757@2x.png',
}, {
logo:'images/partners/组 758@2x.png',
}, {
logo:'images/partners/组 759@2x.png',
}, {
logo:'images/partners/组 755@2x.png',
}, {
logo:'images/partners/组 752@2x.png',
}, {
logo:'images/partners/组 753@2x.png',
}, {
logo:'images/partners/组 754@2x.png',
}, {
logo:'images/partners/组 751@2x.png',
}, {
logo:'images/partners/组 750@2x.png',
}, {
logo:'images/partners/组 749@2x.png',
}, {
logo:'images/partners/组 748@2x.png',
}, {
logo:'images/partners/组 744@2x.png',
}, {
logo:'images/partners/组 745@2x.png',
}, {
logo:'images/partners/组 746@2x.png',
}, {
logo:'images/partners/组 747@2x.png',
},
{
logo:'images/partners/组 743@2x.png',
},
// ------------------------------------
{
logo:'images/partners/组 742@2x.png',
},{
logo:'images/partners/组 741@2x.png',
},{
logo:'images/partners/组 740@2x.png',
},{
logo:'images/partners/组 736@2x.png',
},{
logo:'images/partners/组 737@2x.png',
},{
logo:'images/partners/组 738@2x.png',
},{
logo:'images/partners/组 739@2x.png',
},{
logo:'images/partners/组 732@2x.png',
},{
logo:'images/partners/组 733@2x.png',
},{
logo:'images/partners/组 734@2x.png',
},{
logo:'images/partners/组 735@2x.png',
},{
logo:'images/partners/组 731@2x.png',
},{
logo:'images/partners/组 730@2x.png',
},
// --------------------------------
{
logo:'images/partners/组 729@2x.png',
},{
logo:'images/partners/组 728@2x.png',
},{
logo:'images/partners/组 727@2x.png',
},{
logo:'images/partners/组 726@2x.png',
},{
logo:'images/partners/组 725@2x.png',
}
],
banners:[
{
logo:'images/banners/图层 1@2x.png'
}, {
logo:'images/banners/图层 2@2x.png'
}, {
logo:'images/banners/图层 3@2x.png'
}, {
logo:'images/banners/图层-4@2x.png'
},
],
portfolio:[],
title:'LightLimX',
portfolios
}
}
}
</script>
<style lang="less" scoped>
.home-wrap{
/*max-width: 12;*/
max-width: 13rem;
margin: 0 auto;
}
</style>

123
pages/innovation/index.vue Normal file
View File

@ -0,0 +1,123 @@
<template>
<div class="fullpage-container">
<section-view :css-style="{'background-color':'#000'}" v-lazy:background-image="assetsUri('images/innovation/innovation.png')" class="innovation-section-view">
<div class="innovation-div">
<h2 class="innovation-div-t">Innovation Insights</h2>
</div>
</section-view>
<section-view :css-style="{'background-color':'#fff'}">
<p v-if="$fetchState.pending">Fetching mountains...</p>
<p v-else-if="$fetchState.error">An error occurred :</p>
<innovation-block v-else :static-data="staticData"></innovation-block>
<my-pagination @change="handleLists" v-if="staticData.length" :page.sync="page" :total="total" :pager-count="9"></my-pagination>
<email-footer></email-footer>
</section-view>
<div class="windows">
<span></span>
</div>
</div>
</template>
<script>
import animateMixin from '../../utils/animateMixin'
import {
assetsUri
} from "../../utils";
import SectionView from "../../components/SectionView/index";
import EmailFooter from "../../components/EmailFooter/index";
import InnovationBlock from "../../components/InnovationBlock/index";
import MyPagination from "../../components/MyPagination/index";
export default {
name: "innovation",
components: {MyPagination, InnovationBlock, EmailFooter, SectionView},
layout:'index',
watch: {
'$route.query': '$fetch'
},
mixins:[animateMixin],
async fetch() {
const {query:{page,size}}=this.$route;
if(page){
this.page=page
}
if(size){
this.size=size
}
await this.handleLists(this.page)
},
fetchOnServer: false,
methods:{
async handleLists(val){
this.page=val;
const {baseURL}=this.$config;
const res= await this.$axios(baseURL+'/innovation/index?page='+this.page+'&size='+this.size)
if(res.status!==200){
return this.$toast(res.data.msg)
}
const {content,totalElements}=res.data
this.total=totalElements;
this.staticData=content;
}
},
head() {
return {
title: this.title,
meta: [
{
hid: 'description',
name: 'description',
content: 'My custom description'
}
]
}
},
data(){
return {
title:'LightLimX-Innovation Insights',
assetsUri,
page:1,
size:9,
total:0,
staticData:[]
}
}
}
</script>
<style scoped lang="less">
.innovation{
&-section-view{
background-position: center bottom;
background-size: 100% 2.92rem;
background-repeat: no-repeat;
/*background-size: ;*/
padding-top: .95rem;
min-height:3.87rem !important;
}
&-div{
padding-top: 1.14rem;
text-align: center;
&-t{
font-size: .48rem;
font-family: Manrope;
font-weight: bold;
line-height: .32rem;
color: #FFFFFF;
}
}
}
@media screen and (max-width: 768px){
.innovation{
&-section-view{
background-size: auto 6.24rem;
padding-top: .88rem;
min-height: 6.24rem !important;
}
&-div{
padding-top: 1.99rem;
&-t{
font-size: .6rem;
}
}
}
}
</style>

156
pages/joinUs/index.vue Normal file
View File

@ -0,0 +1,156 @@
<template>
<div class="fullpage-container">
<section-view :css-style="{'background-color':'#000'}" v-lazy:background-image="assetsUri('images/join/join.png')" class="join-section-view">
<div class="join-div">
<h2 class="join-div-t">Join LightLimX</h2>
</div>
</section-view>
<div class="join-2-section-view" :style="{'position':'relative','z-index':'1','min-height':'100%','padding-bottom':'.5rem','box-sizing':'border-box'}" >
<div class="join-2-section-view-wrap">
<filter-input :locations="locations" @select="handleFilterSelect" :active.sync="activeLocation"></filter-input>
<join-us-tabs @handleSelect="handleSelect" :active="active" :content="content" :options="positionType"></join-us-tabs>
</div>
</div>
</div>
</template>
<script>
import animateMixin from '../../utils/animateMixin'
import {
assetsUri
} from "../../utils";
import SectionView from "../../components/SectionView/index";
import JoinUsTabs from "../../components/JoinUsTabs/index";
import FilterInput from "../../components/FilterInput/index";
export default {
name: "join",
components: {FilterInput, JoinUsTabs, SectionView},
layout:'index',
mixins:[animateMixin],
async asyncData(config) {
const {$axios,$config,payload}=config;
if(payload){
return
}
const {baseURL}=$config
const {content} =await $axios.$get(`${baseURL}/locations/index?page=1&size=99`)
const locations=content.map((item)=>{
return {
...item,
id:item.id.toString()
}
})
return {locations}
},
mounted(){
this.activeLocation=this.locations[0].id;
this.handlePositions().then((type)=>{
this.active=type.length?type[0].id:''
this.handlePositionOne()
})
},
methods:{
async handlePositions(){
const {baseURL}=this.$config;
const {data:{content,msg},status} = await this.$axios(`${baseURL}/join/index?page=1&size=99&locations_id=${this.activeLocation}`)
if(status!==200){
return this.$toast(msg)
}
this.positionType=content.map((item)=>{
return {
...item.position_type,
id:item.id.toString()
}
})
return this.positionType
},
async handlePositionOne(){
const {baseURL}=this.$config;
const res= await this.$axios(baseURL+'/join/one?id='+this.active)
if(res.status!==200){
return this.$toast(res.data.msg)
}
const {data}=res.data
this.content=data?data.introduce:'';
},
handleSelect(item){
this.active=item.id;
this.handlePositionOne()
},
handleFilterSelect(item){
this.activeLocation=item.id;
this.handlePositions().then((type)=>{
this.active=type.length?type[0].id:''
this.handlePositionOne()
})
}
},
head() {
return {
title: this.title,
meta: [
{
hid: 'description',
name: 'description',
content: 'My custom description'
}
]
}
},
data(){
return {
title:'LightLimX-Join Us',
active:'',
locations:[],
activeLocation:'1',
content:'',
assetsUri,
positionType:[]
}
}
}
</script>
<style scoped lang="less">
.join-2-section-view{
.join-2-section-view-wrap{
max-width: 13rem;
margin: 0 auto;
}
}
.join{
&-section-view{
background-position: center bottom;
background-size: 100% 4.4rem;
background-repeat: no-repeat;
/*background-size: ;*/
padding-top: .95rem;
min-height:5.35rem !important;
}
&-div{
padding-top: 1.78rem;
text-align: center;
&-t{
font-size: .48rem;
font-family: Manrope;
font-weight: bold;
color: #FFFFFF;
}
}
}
@media screen and (max-width: 768px){
.join{
&-section-view{
background-size: auto 6.24rem;
padding-top: .88rem;
min-height: 6.24rem !important;
}
&-div{
padding-top: 1.99rem;
&-t{
font-size: .6rem;
}
}
}
}
</style>

116
pages/startups/index.vue Normal file
View File

@ -0,0 +1,116 @@
<template>
<div class="fullpage-container">
<section-view class="startup-section-view" :css-style="{'background-color':'#000000','background-repeat':'no-repeat'}" v-lazy:background-image="assetsUri('images/startUp.png')">
<startup-block></startup-block>
</section-view>
<section-view :css-style="{'background-color':'#fff'}">
<startup-content :static-data="staticData"></startup-content>
<email-footer></email-footer>
</section-view>
</div>
</template>
<script>
import animateMixin from '../../utils/animateMixin'
import {assetsUri} from "../../utils";
import SectionView from "../../components/SectionView/index";
import StartupBlock from "../../components/StartUpBlock/index";
import EmailFooter from "../../components/EmailFooter/index";
import StartupContent from "../../components/StartupContent/index";
export default {
name: "StartupsPage",
mixins:[animateMixin],
head() {
return {
title: this.title,
meta: [
{
hid: 'description',
name: 'description',
content: 'My custom description'
}
]
}
},
components: {StartupContent, EmailFooter, StartupBlock, SectionView},
layout:'index',
// async asyncData(config) {
// const {$axios,$config,payload}=config;
// if(payload){
// return
// }
// const {baseURL}=$config
// const {content} = await $axios.$get(`${baseURL}/startup/index?page=1&size=10`)
// return { staticData:content }
// },
data(){
return {
title:'LightLimX-Startups',
assetsUri,
isMobile:false,
staticData:[
{
img:'images/startup/1.png',
title:'Enterprise & Startup',
desc:'Advising well-established enterprises and newly-founded startups for zero-to-one market entry and market expansion strategies.'
},
{
img:'images/startup/2.png',
title:'Strategic Planning',
desc:'Define your target market,branding & marketing Strategy and plan your roadmap.'
},
{
img:'images/startup/3.png',
title:'Tokenomics',
desc:'Design mechanisms to create and capture value with tokenomics.'
},{
img:'images/startup/4.png',
title:'Governance',
desc:'Set up robust community governance with progressive decentralization.'
},{
img:'images/startup/5.png',
title:'Fundraising',
desc:'Pitch Coaching,pitch Deck Design Support,fundraising Strategy.'
},{
img:'images/startup/6.png',
title:'Developer Hub',
desc:`Receive guidance from more than 60+top-class</br>developers from leading ecosystems.`
},{
img:'images/startup/7.png',
title:'Community growth',
desc:'Build communities while monitoring and improving their social media performance, protecting their reputation.'
},{
img:'images/startup/8.png',
title:'Workshops With Experts',
desc:'Get a front-row seat to learn from crypto experts, authors, and successful entrepreneurs.'
},{
img:'images/startup/9.png',
title:'Network of 30+ Mentors',
desc:'Our mentors bring a diverse set of skills from various industries to give you key feedback and push you to the next level. They are your long-term allies and champions.'
},
]
}
}
}
</script>
<style scoped lang="less">
.fullpage-container{
.startup-section-view{
background-size:100% calc(100% - .15rem);
background-position: center .96rem;
}
}
@media screen and (max-width: 768px) {
.fullpage-container{
.startup-section-view{
background-size:300% 100%;
padding-bottom: .65rem;
background-position: center .88rem;
}
}
}
</style>

53
plugins/axios.js Normal file
View File

@ -0,0 +1,53 @@
export default function ({ store, redirect, req, router, app: { $axios } }) {
// 数据访问前缀
$axios.defaults.headers = {
Authorization: store.getters.myAuthorization||''
}
// request拦截器
// $axios.onRequest(config => {
// if(process.client){
// 客户端下,请求进度条开始
// NProgress.start();
// }
// 将获取到token加入到请求头中
// });
// response拦截器数据返回后可以先在这里进行一个简单的判断
$axios.interceptors.response.use(
response => {
if (process.client) {
// 客户端下, 请求进度条结束
// NProgress.done();
}
// return response
if (response.data.code == 401) {
// 返回401token验证失败清除客户端cookie
// Cookie.remove("token");
// 重定向到登录页面, 这里做一个判断容错req.url 未定义
// if(req.url){
// redirect("/sign?ref="+req.url)
// }else{
// redirect("/sign")
// }
} else if (response.data.code == 404) {
// 重定向到404页面
// redirect("/")
} else {
// 请求接口数据正常,返回数据
return response
}
},
error => {
if (process.client) {
// NProgress.done();
}
if (error.response.status == 500) {
// http状态500服务器内部错误重定向到500页面
// redirect("/500.htm")
}
if (error.response.status == 404) {
// http状态500请求API找不到重定向到404页面
// redirect("/404.html")
}
return Promise.reject(error.response) // 返回接口返回的错误信息
})
}

3
plugins/element.js Normal file
View File

@ -0,0 +1,3 @@
import Vue from 'vue';
import { Pagination as ElPagination } from 'element-ui';
Vue.use(ElPagination)

3
plugins/lottieWeb.js Normal file
View File

@ -0,0 +1,3 @@
import Vue from 'vue'
import LottieAnimation from 'lottie-web-vue'
Vue.use(LottieAnimation); // add lottie-animation to your global scope

25
plugins/remJs.js Normal file
View File

@ -0,0 +1,25 @@
(function(){
function bindEvent(type){
return (data)=>{
const e = new Event(type);
e.data = data;
window.dispatchEvent(e);
}
}
const event_trigger = bindEvent("hadSetRem")
function remCurrent(){
const clientWidth=document.documentElement.clientWidth;
let fontSize = clientWidth / 19.2 +'px';
if(clientWidth<=750){
fontSize = clientWidth / 7.5 + 'px';
}else if(750<clientWidth&&clientWidth<=1920){
fontSize=clientWidth / 19.2 +'px';
}
document.documentElement.style.fontSize = fontSize;
}
window.addEventListener('resize',remCurrent)
remCurrent()
setTimeout(()=>{
event_trigger(true)
},1000)
})()

9
plugins/svgIcon.js Normal file
View File

@ -0,0 +1,9 @@
// plugins/svgIcon.js
import Vue from 'vue'
import SvgIcon from '@/components/SvgIcon.vue'// Nuxt 默认@指向根目录
// 注册组件
Vue.component('svg-icon', SvgIcon)
// 预请求svg组件(通过之前的svg-sprite-loader加载)
const req = require.context('@/assets/svg', false, /\.svg$/)
req.keys().map(req)

8
plugins/vant.js Normal file
View File

@ -0,0 +1,8 @@
import Vue from 'vue'
import Vant,{Lazyload } from 'vant'
Vue.use(Vant)
Vue.use(Lazyload)
Vue.use(Lazyload, {
lazyComponent: true,
});

9
plugins/vueAnimate.js Normal file
View File

@ -0,0 +1,9 @@
import Vue from 'vue';
import VueAnimate from 'vue-animate-plugin';
Vue.use(VueAnimate, {
valueof: ':', // 表示v-animate指令修饰符中键与值使用什么字符分割默认使用':'
begin: 'begin', // 表示v-animate指令修饰符中动画开始之前的挂钩点的名称可以通过方式`.begin:onBegin`注入钩子函数它可以是async function
after: 'complete', // 表示v-animate指令修饰符中动画结束之后的挂钩点的名称`.complete:onComplete`方式注入钩子它可以是async function
callback: null // 表示v-animate指令中动画部分包括之后的衔接部分完全执行完毕后的钩子函数注入口
});

4
plugins/vueClipboard.js Normal file
View File

@ -0,0 +1,4 @@
import Vue from 'vue'
import VueClipboard from 'vue-clipboard2'
VueClipboard.config.autoSetContainer = true
Vue.use(VueClipboard)

4
plugins/vueFullPage.js Normal file
View File

@ -0,0 +1,4 @@
import 'animate.css'
import 'vue-fullpage/vue-fullpage.css'
import VueFullpage from 'vue-fullpage'
Vue.use(VueFullpage)

4
plugins/vueTooltip.js Normal file
View File

@ -0,0 +1,4 @@
import Vue from 'vue'
import VTooltip from 'v-tooltip'
Vue.use(VTooltip)

514
plugins/wow.js Normal file
View File

@ -0,0 +1,514 @@
(function () {
var MutationObserver; var Util; var WeakMap; var getComputedStyle; var getComputedStyleRX
var bind = function (fn, me) { return function () { return fn.apply(me, arguments) } }
var indexOf = [].indexOf || function (item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i } return -1 }
Util = (function () {
function Util () {}
Util.prototype.extend = function (custom, defaults) {
var key, value
for (key in defaults) {
value = defaults[key]
if (custom[key] == null) {
custom[key] = value
}
}
return custom
}
Util.prototype.isMobile = function (agent) {
return /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(agent)
}
Util.prototype.createEvent = function (event, bubble, cancel, detail) {
var customEvent
if (bubble == null) {
bubble = false
}
if (cancel == null) {
cancel = false
}
if (detail == null) {
detail = null
}
if (document.createEvent != null) {
customEvent = document.createEvent('CustomEvent')
customEvent.initCustomEvent(event, bubble, cancel, detail)
} else if (document.createEventObject != null) {
customEvent = document.createEventObject()
customEvent.eventType = event
} else {
customEvent.eventName = event
}
return customEvent
}
Util.prototype.emitEvent = function (elem, event) {
if (elem.dispatchEvent != null) {
return elem.dispatchEvent(event)
} else if (event in (elem != null)) {
return elem[event]()
} else if (('on' + event) in (elem != null)) {
return elem['on' + event]()
}
}
Util.prototype.addEvent = function (elem, event, fn) {
if (elem.addEventListener != null) {
return elem.addEventListener(event, fn, false)
} else if (elem.attachEvent != null) {
return elem.attachEvent('on' + event, fn)
} else {
return elem[event] = fn
}
}
Util.prototype.removeEvent = function (elem, event, fn) {
if (elem.removeEventListener != null) {
return elem.removeEventListener(event, fn, false)
} else if (elem.detachEvent != null) {
return elem.detachEvent('on' + event, fn)
} else {
return delete elem[event]
}
}
Util.prototype.innerHeight = function () {
if ('innerHeight' in window) {
return window.innerHeight
} else {
return document.documentElement.clientHeight
}
}
return Util
})()
WeakMap = this.WeakMap || this.MozWeakMap || (WeakMap = (function () {
function WeakMap () {
this.keys = []
this.values = []
}
WeakMap.prototype.get = function (key) {
var i, item, j, len, ref
ref = this.keys
for (i = j = 0, len = ref.length; j < len; i = ++j) {
item = ref[i]
if (item === key) {
return this.values[i]
}
}
}
WeakMap.prototype.set = function (key, value) {
var i, item, j, len, ref
ref = this.keys
for (i = j = 0, len = ref.length; j < len; i = ++j) {
item = ref[i]
if (item === key) {
this.values[i] = value
return
}
}
this.keys.push(key)
return this.values.push(value)
}
return WeakMap
})())
MutationObserver = this.MutationObserver || this.WebkitMutationObserver || this.MozMutationObserver || (MutationObserver = (function () {
function MutationObserver () {
if (typeof console !== 'undefined' && console !== null) {
console.warn('MutationObserver is not supported by your browser.')
}
if (typeof console !== 'undefined' && console !== null) {
console.warn('WOW.js cannot detect dom mutations, please call .sync() after loading new content.')
}
}
MutationObserver.notSupported = true
MutationObserver.prototype.observe = function () {}
return MutationObserver
})())
getComputedStyle = this.getComputedStyle || function (el, pseudo) {
this.getPropertyValue = function (prop) {
var ref
if (prop === 'float') {
prop = 'styleFloat'
}
if (getComputedStyleRX.test(prop)) {
prop.replace(getComputedStyleRX, function (_, _char) {
return _char.toUpperCase()
})
}
return ((ref = el.currentStyle) != null ? ref[prop] : void 0) || null
}
return this
}
getComputedStyleRX = /(\-([a-z]){1})/g
this.WOW = (function () {
WOW.prototype.defaults = {
boxClass: 'wow',
animateClass: 'animated',
offset: 0,
mobile: true,
live: true,
callback: null,
scrollContainer: null
}
function WOW (options) {
if (options == null) {
options = {}
}
this.scrollCallback = bind(this.scrollCallback, this)
this.scrollHandler = bind(this.scrollHandler, this)
this.resetAnimation = bind(this.resetAnimation, this)
this.start = bind(this.start, this)
this.scrolled = true
this.config = this.util().extend(options, this.defaults)
if (options.scrollContainer != null) {
this.config.scrollContainer = document.querySelector(options.scrollContainer)
}
this.animationNameCache = new WeakMap()
this.wowEvent = this.util().createEvent(this.config.boxClass)
}
WOW.prototype.init = function () {
var ref
this.element = window.document.documentElement
if ((ref = document.readyState) === 'interactive' || ref === 'complete') {
this.start()
} else {
this.util().addEvent(document, 'DOMContentLoaded', this.start)
}
return this.finished = []
}
WOW.prototype.start = function () {
var box, j, len, ref
this.stopped = false
this.boxes = (function () {
var j, len, ref, results
ref = this.element.querySelectorAll('.' + this.config.boxClass)
results = []
for (j = 0, len = ref.length; j < len; j++) {
box = ref[j]
results.push(box)
}
return results
}.call(this))
this.all = (function () {
var j, len, ref, results
ref = this.boxes
results = []
for (j = 0, len = ref.length; j < len; j++) {
box = ref[j]
results.push(box)
}
return results
}.call(this))
if (this.boxes.length) {
if (this.disabled()) {
this.resetStyle()
} else {
ref = this.boxes
for (j = 0, len = ref.length; j < len; j++) {
box = ref[j]
this.applyStyle(box, true)
}
}
}
if (!this.disabled()) {
this.util().addEvent(this.config.scrollContainer || window, 'scroll', this.scrollHandler)
this.util().addEvent(window, 'resize', this.scrollHandler)
this.interval = setInterval(this.scrollCallback, 50)
}
if (this.config.live) {
return new MutationObserver((function (_this) {
return function (records) {
var k, len1, node, record, results
results = []
for (k = 0, len1 = records.length; k < len1; k++) {
record = records[k]
results.push(function () {
var l, len2, ref1, results1
ref1 = record.addedNodes || []
results1 = []
for (l = 0, len2 = ref1.length; l < len2; l++) {
node = ref1[l]
results1.push(this.doSync(node))
}
return results1
}.call(_this))
}
return results
}
})(this)).observe(document.body, {
childList: true,
subtree: true
})
}
}
WOW.prototype.stop = function () {
this.stopped = true
this.util().removeEvent(this.config.scrollContainer || window, 'scroll', this.scrollHandler)
this.util().removeEvent(window, 'resize', this.scrollHandler)
if (this.interval != null) {
return clearInterval(this.interval)
}
}
WOW.prototype.sync = function (element) {
if (MutationObserver.notSupported) {
return this.doSync(this.element)
}
}
WOW.prototype.doSync = function (element) {
var box, j, len, ref, results
if (element == null) {
element = this.element
}
if (element.nodeType !== 1) {
return
}
element = element.parentNode || element
ref = element.querySelectorAll('.' + this.config.boxClass)
results = []
for (j = 0, len = ref.length; j < len; j++) {
box = ref[j]
if (indexOf.call(this.all, box) < 0) {
this.boxes.push(box)
this.all.push(box)
if (this.stopped || this.disabled()) {
this.resetStyle()
} else {
this.applyStyle(box, true)
}
results.push(this.scrolled = true)
} else {
results.push(void 0)
}
}
return results
}
WOW.prototype.show = function (box) {
this.applyStyle(box)
box.className = box.className + ' ' + this.config.animateClass
if (this.config.callback != null) {
this.config.callback(box)
}
this.util().emitEvent(box, this.wowEvent)
this.util().addEvent(box, 'animationend', this.resetAnimation)
this.util().addEvent(box, 'oanimationend', this.resetAnimation)
this.util().addEvent(box, 'webkitAnimationEnd', this.resetAnimation)
this.util().addEvent(box, 'MSAnimationEnd', this.resetAnimation)
return box
}
WOW.prototype.applyStyle = function (box, hidden) {
var delay, duration, iteration
duration = box.getAttribute('data-wow-duration')
delay = box.getAttribute('data-wow-delay')
iteration = box.getAttribute('data-wow-iteration')
return this.animate((function (_this) {
return function () {
return _this.customStyle(box, hidden, duration, delay, iteration)
}
})(this))
}
WOW.prototype.animate = (function () {
if ('requestAnimationFrame' in window) {
return function (callback) {
return window.requestAnimationFrame(callback)
}
} else {
return function (callback) {
return callback()
}
}
})()
WOW.prototype.resetStyle = function () {
var box, j, len, ref, results
ref = this.boxes
results = []
for (j = 0, len = ref.length; j < len; j++) {
box = ref[j]
results.push(box.style.visibility = 'visible')
}
return results
}
WOW.prototype.resetAnimation = function (event) {
var target
if (event.type.toLowerCase().indexOf('animationend') >= 0) {
target = event.target || event.srcElement
return target.className = target.className.replace(this.config.animateClass, '').trim()
}
}
WOW.prototype.customStyle = function (box, hidden, duration, delay, iteration) {
if (hidden) {
this.cacheAnimationName(box)
}
box.style.visibility = hidden ? 'hidden' : 'visible'
if (duration) {
this.vendorSet(box.style, {
animationDuration: duration
})
}
if (delay) {
this.vendorSet(box.style, {
animationDelay: delay
})
}
if (iteration) {
this.vendorSet(box.style, {
animationIterationCount: iteration
})
}
this.vendorSet(box.style, {
animationName: hidden ? 'none' : this.cachedAnimationName(box)
})
return box
}
WOW.prototype.vendors = ['moz', 'webkit']
WOW.prototype.vendorSet = function (elem, properties) {
var name, results, value, vendor
results = []
for (name in properties) {
value = properties[name]
elem['' + name] = value
results.push(function () {
var j, len, ref, results1
ref = this.vendors
results1 = []
for (j = 0, len = ref.length; j < len; j++) {
vendor = ref[j]
results1.push(elem['' + vendor + (name.charAt(0).toUpperCase()) + (name.substr(1))] = value)
}
return results1
}.call(this))
}
return results
}
WOW.prototype.vendorCSS = function (elem, property) {
var j, len, ref, result, style, vendor
style = getComputedStyle(elem)
result = style.getPropertyCSSValue(property)
ref = this.vendors
for (j = 0, len = ref.length; j < len; j++) {
vendor = ref[j]
result = result || style.getPropertyCSSValue('-' + vendor + '-' + property)
}
return result
}
WOW.prototype.animationName = function (box) {
var animationName, error
try {
animationName = this.vendorCSS(box, 'animation-name').cssText
} catch (error) {
animationName = getComputedStyle(box).getPropertyValue('animation-name')
}
if (animationName === 'none') {
return ''
} else {
return animationName
}
}
WOW.prototype.cacheAnimationName = function (box) {
return this.animationNameCache.set(box, this.animationName(box))
}
WOW.prototype.cachedAnimationName = function (box) {
return this.animationNameCache.get(box)
}
WOW.prototype.scrollHandler = function () {
return this.scrolled = true
}
WOW.prototype.scrollCallback = function () {
var box
if (this.scrolled) {
this.scrolled = false
this.boxes = (function () {
var j, len, ref, results
ref = this.boxes
results = []
for (j = 0, len = ref.length; j < len; j++) {
box = ref[j]
if (!(box)) {
continue
}
if (this.isVisible(box)) {
this.show(box)
continue
}
results.push(box)
}
return results
}.call(this))
if (!(this.boxes.length || this.config.live)) {
return this.stop()
}
}
}
WOW.prototype.offsetTop = function (element) {
var top
while (element.offsetTop === void 0) {
element = element.parentNode
}
top = element.offsetTop
while (element = element.offsetParent) {
top += element.offsetTop
}
return top
}
WOW.prototype.isVisible = function (box) {
var bottom, offset, top, viewBottom, viewTop
offset = box.getAttribute('data-wow-offset') || this.config.offset
viewTop = (this.config.scrollContainer && this.config.scrollContainer.scrollTop) || window.pageYOffset
viewBottom = viewTop + Math.min(this.element.clientHeight, this.util().innerHeight()) - offset
top = this.offsetTop(box)
bottom = top + box.clientHeight
return top <= viewBottom && bottom >= viewTop
}
WOW.prototype.util = function () {
return this._util != null ? this._util : this._util = new Util()
}
WOW.prototype.disabled = function () {
return !this.config.mobile && this.util().isMobile(navigator.userAgent)
}
return WOW
})()
}).call(this)
window.WOW=this.WOW

63
script/deploy/file.js Normal file
View File

@ -0,0 +1,63 @@
/* eslint-disable */
const path = require('path');
const fsEx = require('fs-extra');
const chalk = require('chalk')
const archiver = require('archiver');
const fs = require('fs');
const root = process.cwd()
const moment=require('moment')
console.log(chalk.green(`root path :${root}`))
const resolve = (url) => {
return path.join(root, url)
}
const copy = async (from, to) => {
try {
await fsEx.copy(resolve(from), resolve(to));
console.log(chalk.green(`success:${from}===>${to}`));
} catch (error) {
console.log(chalk.red(`errors:=>${error}`));
}
};
const copyFile = async () => {
await Promise.all([
copy('/static/', '/server/static/'),
copy('/.nuxt/', '/server/.nuxt/'),
copy('/ecosystem.config.js', '/server/ecosystem.config.js'),
copy('/package.json', '/server/package.json'),
copy('/nuxt.config.js', '/server/nuxt.config.js'),
]);
};
function zipFile() {
return new Promise((resolve, reject) => {
const archive = archiver('zip', {
zlib: {
level: 5,
},
}).on('error', (err) => {
reject(err)
});
const output = fs.createWriteStream(`${root}/Limx${moment(new Date()).format('HH时mm分ss秒')}.zip`)
.on('close', (err) => {
if (err) {
reject(err)
}
resolve();
});
archive.pipe(output);
archive.directory(path.join(root, `/server`), `/server`);
archive.finalize();
})
}
// copyFile();
module.exports = {
copy,
copyFile,
zipFile
}

47
script/deploy/index.js Normal file
View File

@ -0,0 +1,47 @@
/* eslint-disable */
const {
copyFile,
zipFile,
} = require('./file');
const chalk = require('chalk');
const path = require('path');
const root = process.cwd();
const node_ssh = require('node-ssh');
const ssh = new node_ssh();
const deploy = async() => {
await copyFile();
await zipFile();
// await ssh.connect({
// host : '---',
// username: '----',
// password: '----',
// port : --,
// });
//
// await ssh.putFile(`${root}/server/server.zip`, '/usr/local/smart-library/server-pkg/server.zip').then(() => {
// console.log('The File thing is done');
// }, (error) => {
// console.log('Something\'s wrong');
// console.log(error);
// });
//
//
// await ssh.exec('sh', ['./deploy.sh'], {
// cwd: '/usr/local/smart-library/server-pkg',
// onStdout(chunk) {
// console.log(chalk.green(chunk.toString('utf8')));
// },
// onStderr(chunk) {
// console.log(chalk.red(chunk.toString('utf8')));
// },
// });
// console.log('success');
process.exit(0);
};
deploy().catch((e) => {
console.log(e);
process.exit(0);
});

2
startScript.js Normal file
View File

@ -0,0 +1,2 @@
const cmd=require('node-cmd');
cmd.run('yarn start');

BIN
static/favicon.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 293 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 65 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 194 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.3 KiB

Some files were not shown because too many files have changed in this diff Show More