├── static
├── .gitkeep
└── favicon.png
├── config
├── prod.env.js
├── dev.env.js
└── index.js
├── src
├── assets
│ ├── img
│ │ ├── boy.png
│ │ ├── code.jpg
│ │ ├── life.jpg
│ │ ├── mores.png
│ │ ├── search.png
│ │ ├── tags.jpeg
│ │ ├── loading.gif
│ │ ├── message.png
│ │ ├── searchs.png
│ │ ├── boycontent.png
│ │ ├── error_img.jpg
│ │ ├── pexels-photo-747964.jpeg
│ │ └── pexels-pixabay-268533.jpg
│ └── css
│ │ ├── media.css
│ │ ├── common.less
│ │ ├── nav-pc.less
│ │ └── aos.css
├── views
│ ├── homeIndex
│ │ └── index.vue
│ ├── code
│ │ └── index.vue
│ ├── life
│ │ └── index.vue
│ ├── author
│ │ └── index.vue
│ ├── labels
│ │ └── index.vue
│ ├── home
│ │ └── index.vue
│ ├── message
│ │ └── index.vue
│ └── essaydetail
│ │ └── index.vue
├── utils
│ ├── base64.js
│ ├── highlight.js
│ ├── common.js
│ └── http.js
├── App.vue
├── components
│ ├── footer
│ │ └── index.vue
│ ├── card
│ │ └── index.vue
│ └── nav
│ │ └── index.vue
├── main.js
└── router
│ └── index.js
├── .editorconfig
├── .gitignore
├── .babelrc
├── .postcssrc.js
├── README.md
├── package.json
└── index.html
/static/.gitkeep:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/config/prod.env.js:
--------------------------------------------------------------------------------
1 | 'use strict'
2 | module.exports = {
3 | NODE_ENV: '"production"'
4 | }
5 |
--------------------------------------------------------------------------------
/static/favicon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huangjiangmin/vue_blog/HEAD/static/favicon.png
--------------------------------------------------------------------------------
/src/assets/img/boy.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huangjiangmin/vue_blog/HEAD/src/assets/img/boy.png
--------------------------------------------------------------------------------
/src/assets/img/code.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huangjiangmin/vue_blog/HEAD/src/assets/img/code.jpg
--------------------------------------------------------------------------------
/src/assets/img/life.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huangjiangmin/vue_blog/HEAD/src/assets/img/life.jpg
--------------------------------------------------------------------------------
/src/assets/img/mores.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huangjiangmin/vue_blog/HEAD/src/assets/img/mores.png
--------------------------------------------------------------------------------
/src/assets/img/search.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huangjiangmin/vue_blog/HEAD/src/assets/img/search.png
--------------------------------------------------------------------------------
/src/assets/img/tags.jpeg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huangjiangmin/vue_blog/HEAD/src/assets/img/tags.jpeg
--------------------------------------------------------------------------------
/src/assets/img/loading.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huangjiangmin/vue_blog/HEAD/src/assets/img/loading.gif
--------------------------------------------------------------------------------
/src/assets/img/message.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huangjiangmin/vue_blog/HEAD/src/assets/img/message.png
--------------------------------------------------------------------------------
/src/assets/img/searchs.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huangjiangmin/vue_blog/HEAD/src/assets/img/searchs.png
--------------------------------------------------------------------------------
/src/assets/img/boycontent.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huangjiangmin/vue_blog/HEAD/src/assets/img/boycontent.png
--------------------------------------------------------------------------------
/src/assets/img/error_img.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huangjiangmin/vue_blog/HEAD/src/assets/img/error_img.jpg
--------------------------------------------------------------------------------
/src/assets/img/pexels-photo-747964.jpeg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huangjiangmin/vue_blog/HEAD/src/assets/img/pexels-photo-747964.jpeg
--------------------------------------------------------------------------------
/src/assets/img/pexels-pixabay-268533.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huangjiangmin/vue_blog/HEAD/src/assets/img/pexels-pixabay-268533.jpg
--------------------------------------------------------------------------------
/config/dev.env.js:
--------------------------------------------------------------------------------
1 | 'use strict'
2 | const merge = require('webpack-merge')
3 | const prodEnv = require('./prod.env')
4 |
5 | module.exports = merge(prodEnv, {
6 | NODE_ENV: '"development"'
7 | })
8 |
--------------------------------------------------------------------------------
/.editorconfig:
--------------------------------------------------------------------------------
1 | root = true
2 |
3 | [*]
4 | charset = utf-8
5 | indent_style = space
6 | indent_size = 2
7 | end_of_line = lf
8 | insert_final_newline = true
9 | trim_trailing_whitespace = true
10 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | .DS_Store
2 | node_modules/
3 | /dist/
4 | npm-debug.log*
5 | yarn-debug.log*
6 | yarn-error.log*
7 |
8 | # Editor directories and files
9 | .idea
10 | .vscode
11 | *.suo
12 | *.ntvs*
13 | *.njsproj
14 | *.sln
15 |
--------------------------------------------------------------------------------
/.babelrc:
--------------------------------------------------------------------------------
1 | {
2 | "presets": [
3 | ["env", {
4 | "modules": false,
5 | "targets": {
6 | "browsers": ["> 1%", "last 2 versions", "not ie <= 8"]
7 | }
8 | }],
9 | "stage-2"
10 | ],
11 | "plugins": ["transform-vue-jsx", "transform-runtime"]
12 | }
13 |
--------------------------------------------------------------------------------
/.postcssrc.js:
--------------------------------------------------------------------------------
1 | // https://github.com/michael-ciniawsky/postcss-load-config
2 |
3 | module.exports = {
4 | "plugins": {
5 | "postcss-import": {},
6 | "postcss-url": {},
7 | // to edit target browsers: use "browserslist" field in package.json
8 | "autoprefixer": {}
9 | }
10 | }
11 |
--------------------------------------------------------------------------------
/src/views/homeIndex/index.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
21 |
22 |
--------------------------------------------------------------------------------
/src/assets/css/media.css:
--------------------------------------------------------------------------------
1 |
2 | /*
3 | 屏幕大于1200px
4 | */
5 | @media screen and (max-width: 2000px) {
6 | @import '../../assets/css/commons.css';
7 | }
8 | /*
9 | 屏幕在1200到1199之间的
10 | */
11 | @media screen and (min-width: 1200px) and (max-width:1199px) {
12 | /* @import '../../assets/css/common.less'; */
13 | @import '../../assets/css/commons.css';
14 | }
15 | /*
16 | 屏幕小于768px的
17 | */
18 | @media screen and (max-width:768px) {
19 | /* @import '../../assets/css/nav-h5.css'; */
20 | }
21 |
--------------------------------------------------------------------------------
/src/utils/base64.js:
--------------------------------------------------------------------------------
1 | const Base64 = {
2 | //加密
3 | encode(str) {
4 | return btoa(encodeURIComponent(str).replace(/%([0-9A-F]{2})/g,
5 | function toSolidBytes(match, p1) {
6 | return String.fromCharCode('0x' + p1);
7 | }));
8 | },
9 | //解密
10 | decode(str) {
11 | // Going backwards: from bytestream, to percent-encoding, to original string.
12 | return decodeURIComponent(atob(str).split('').map(function (c) {
13 | return '%' + ('00' + c.charCodeAt(0).toString(16)).slice(-2);
14 | }).join(''));
15 | }
16 | }
17 | export default Base64
--------------------------------------------------------------------------------
/src/App.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
12 |
13 |
38 |
--------------------------------------------------------------------------------
/src/utils/highlight.js:
--------------------------------------------------------------------------------
1 | // highlight.js 代码高亮指令
2 | import Hljs from 'highlight.js';
3 | import 'highlight.js/styles/tomorrow-night.css'; // 代码高亮风格,选择更多风格需导入 node_modules/hightlight.js/styles/ 目录下其它css文件
4 |
5 | let Highlight = {};
6 | // 自定义插件
7 | Highlight.install = function (Vue) {
8 | // 自定义指令 v-highlight
9 | Vue.directive('highlight', {
10 | // 被绑定元素插入父节点时调用
11 | inserted: function(el) {
12 | let blocks = el.querySelectorAll('pre code');
13 | for (let i = 0; i < blocks.length; i++) {
14 | Hljs.highlightBlock(blocks[i]);
15 | }
16 | },
17 | // 指令所在组件的 VNode 及其子 VNode 全部更新后调用
18 | componentUpdated: function(el) {
19 | let blocks = el.querySelectorAll('pre code');
20 | for (let i = 0; i < blocks.length; i++) {
21 | Hljs.highlightBlock(blocks[i]);
22 | }
23 | }
24 | })
25 | };
26 |
27 | export default Highlight;
--------------------------------------------------------------------------------
/src/components/footer/index.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
10 |
11 |
12 |
13 |
31 |
32 |
--------------------------------------------------------------------------------
/src/assets/css/common.less:
--------------------------------------------------------------------------------
1 | .l-banan{
2 | width: 100%;
3 | height: 15%;
4 | position: relative;
5 | }
6 | @media screen and (max-width: 2000px) and (min-width: 767px) {
7 | .img-content{
8 | position: absolute;
9 | left:45%;
10 | top:38%;
11 | transform: translate(-45%, -38%);
12 | color: #faf9f9;
13 | }
14 | }
15 | @media screen and (max-width:768px) and (min-width: 100px){
16 |
17 | .img-content{
18 | position: absolute;
19 | left:30%;
20 | top:30%;
21 | transform: translate(-45%, -45%);
22 | color: #faf9f9;
23 | }
24 | }
25 | .m-hero-content{
26 | color: rgb(218, 216, 216);
27 | }
28 | .l-image {
29 | height: 500px;
30 | width: 100%;
31 | }
32 | .image{
33 | width: 100%;
34 | height: 100%;
35 | object-fit: cover;
36 | }
37 | .l-content{
38 | width: 100%;
39 | height: 0%;
40 | background: #ffffff;
41 | margin-top: 15px;
42 | }
43 |
44 | .l-content-foot{
45 | font-size: 40px;
46 | margin-top: 50px;
47 | height: 120px;
48 | }
--------------------------------------------------------------------------------
/src/main.js:
--------------------------------------------------------------------------------
1 | // The Vue build version to load with the `import` command
2 | // (runtime-only or standalone) has been set in webpack.base.conf with an alias.
3 | import Vue from 'vue'
4 | import App from './App'
5 | import router from './router'
6 | import ElementUI from 'element-ui'
7 | import 'element-ui/lib/theme-chalk/index.css'
8 | import axios from 'axios'
9 | import {post,fetch,patch,put} from './utils/http'
10 | import Highlight from './utils/highlight'
11 | import Base64 from './utils/base64.js'
12 | import less from 'less'
13 | import VueLazyload from 'vue-lazyload'
14 |
15 |
16 | //定义全局变量
17 |
18 | Vue.prototype.$post=post;
19 |
20 | Vue.prototype.$fetch=fetch;
21 | Vue.prototype.$Base64 = Base64;
22 | Vue.prototype.$patch=patch;
23 | Vue.prototype.$put=put;
24 | Vue.prototype.$axios = axios
25 | Vue.config.productionTip = false
26 | Vue.use(Highlight)
27 | Vue.use(less)
28 | Vue.use(ElementUI)
29 | /* eslint-disable no-new */
30 | Vue.use(VueLazyload, {
31 | loading: require('./assets/img/loading.gif'),//加载中图片,一定要有,不然会一直重复加载占位图
32 | error: require('./assets/img//error_img.jpg') //加载失败图片
33 | });
34 | new Vue({
35 | el: '#app',
36 | router,
37 | components: { App },
38 | mounted () {
39 | // You'll need this for renderAfterDocumentEvent.
40 |
41 | document.dispatchEvent(new Event('render-event'))
42 | },
43 | template: '',
44 | })
45 |
--------------------------------------------------------------------------------
/src/router/index.js:
--------------------------------------------------------------------------------
1 | import Vue from 'vue'
2 | import Router from 'vue-router'
3 | import HomeIndex from '@/views/homeIndex'
4 |
5 | Vue.use(Router)
6 |
7 | export default new Router({
8 | routes: [
9 | {
10 | path: '/',
11 | redirect: '/home',
12 | },
13 | {
14 | path: '/home',
15 | component: HomeIndex,
16 | children: [
17 | {
18 | path: '/home',
19 | name: 'home',
20 | component:(resolve) =>require(['@/views/home'],resolve)
21 | },
22 | {
23 | path: '/essaydetail/:id',
24 | name: 'essaydetail',
25 | component:(resolve) =>require(['@/views/essaydetail'],resolve)
26 | }, {
27 | path: '/code',
28 | name: 'code',
29 | component:(resolve) =>require(['@/views/code'],resolve)
30 | }, {
31 | path: '/life',
32 | name: 'life',
33 | component:(resolve) =>require(['@/views/life'],resolve)
34 | }, {
35 | path: '/author',
36 | name: 'author',
37 | component:(resolve) =>require(['@/views/author'],resolve)
38 | },{
39 | path: '/labels/:labelId/:labelName',
40 | name: 'labels',
41 | component:(resolve) =>require(['@/views/labels'],resolve)
42 | }, {
43 | path: '/message',
44 | name: 'message',
45 | component:(resolve) =>require(['@/views/message'],resolve)
46 | }
47 | ]
48 | }
49 | ]
50 | })
51 | const originalPush = Router.prototype.push
52 | Router.prototype.push = function push(location) {
53 | return originalPush.call(this, location).catch(err => err)
54 | }
--------------------------------------------------------------------------------
/src/views/code/index.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
Code
6 |
7 | {{essayCount}} articles with this tag
8 |
9 |
10 |
11 |

12 |
13 |
14 |
15 |
16 |
17 |
26 |
27 |
28 |
29 |
68 |
69 |
--------------------------------------------------------------------------------
/src/views/life/index.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
Life
6 |
7 | Love life , stay safe
8 |
9 |
10 |
11 |

12 |
13 |
14 |
15 |
16 |
17 |
26 |
27 |
28 |
29 |
70 |
71 |
72 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # 开发一个简单的个人博客
2 |
3 | **整体风格上,我对设计没有太多的见解,做的时候参考了好多网上现有的博客,总体喜欢简约。**
4 | 
5 |
6 | 
7 | 
8 |
9 | # 项目结构
10 | -src
11 | -assets //公共 css js img
12 | -components //公共组件 封装
13 | -card //博客基本信息卡片组件
14 | -footer //页脚
15 | -nav //页头
16 | -router //路由
17 | -utils //工具类
18 | -views
19 | -author
20 | -code
21 | -essaydetail //博客信息页
22 | -home
23 | -labels
24 | -life
25 | -message //留言
26 |
27 | # 用到的技术
28 |
29 | ## 前端
30 |
31 | **vue + vue-router + axios + element ui框架的样式 + aos.css 动画 + less + media 媒体查询 自适应 Web+H5**
32 |
33 | **包含技术点:**
34 |
35 |
36 | 1. axios请求封装
37 | 2. aos动画的使用
38 | 3. 博客代码高亮highlight
39 | 4. 基本组件封装
40 | 5. 父子组件传值
41 | 6. 路由传参
42 | 7. 传参加密
43 | 8. 同界面路由变更回到顶部 watch()
44 | 9. 媒体查询@media
45 |
46 |
47 | # 后端
48 |
49 |
50 |
51 | ## Java
52 | **springboot + mysql + mybatis + redis**
53 |
54 | **包含技术点:(这对后端开发其实没啥技术点)**
55 |
56 | 1. springboot+mybatis 实现基本增删改查
57 | 2. redis工具类
58 | 3. aop规范控制台日志
59 | 4. 统一返回 (code,msg,data)
60 | 5. Dockerfile 编写
61 |
62 |
63 | ## 服务(部署Java)
64 | 阿里云服务器 **centos8 + docker + dockerfile + nginx+ mysql**
65 |
66 | **包含技术点:**
67 |
68 | 1. centos8 安装 docker。
69 | 2. docker + mysql 文件挂载、远程连接。
70 | 3. docker + nginx 文件挂载、负载、反向。
71 | 4. docker化 nginx后,SSL证书的配置。
72 | 6. dockerfile 文件,实现项目打包镜像。
73 |
74 | ## " 基本实现了一个简单的个人网页 : [https://www.dahuangzi.work/](https://www.dahuangzi.work/) "
75 |
76 | ## 1、获取项目到本地
77 | ## 2、vscode 终端 输入 npm i 下载package.json中的依赖包
78 | ## 3、npm run dev 启动
79 | ## 4、修改 utils 下 https 中封装的 baseURL 为自己的后端接口地址
--------------------------------------------------------------------------------
/config/index.js:
--------------------------------------------------------------------------------
1 | 'use strict'
2 | // Template version: 1.3.1
3 | // see http://vuejs-templates.github.io/webpack for documentation.
4 |
5 | const path = require('path')
6 |
7 | module.exports = {
8 | dev: {
9 |
10 | // Paths
11 | assetsSubDirectory: 'static',
12 | assetsPublicPath: '/',
13 | proxyTable: {},
14 |
15 | // Various Dev Server settings
16 | host: 'localhost', // can be overwritten by process.env.HOST
17 | port: 8080, // can be overwritten by process.env.PORT, if port is in use, a free one will be determined
18 | autoOpenBrowser: false,
19 | errorOverlay: true,
20 | notifyOnErrors: true,
21 | poll: false, // https://webpack.js.org/configuration/dev-server/#devserver-watchoptions-
22 |
23 |
24 | /**
25 | * Source Maps
26 | */
27 |
28 | // https://webpack.js.org/configuration/devtool/#development
29 | devtool: 'cheap-module-eval-source-map',
30 |
31 | // If you have problems debugging vue-files in devtools,
32 | // set this to false - it *may* help
33 | // https://vue-loader.vuejs.org/en/options.html#cachebusting
34 | cacheBusting: true,
35 |
36 | cssSourceMap: true
37 | },
38 |
39 | build: {
40 | // Template for index.html
41 | index: path.resolve(__dirname, '../dist/index.html'),
42 |
43 | // Paths
44 | assetsRoot: path.resolve(__dirname, '../dist'),
45 | assetsSubDirectory: 'static',
46 | assetsPublicPath: './',
47 |
48 | /**
49 | * Source Maps
50 | */
51 |
52 | productionSourceMap: true,
53 | // https://webpack.js.org/configuration/devtool/#production
54 | devtool: '#source-map',
55 |
56 | // Gzip off by default as many popular static hosts such as
57 | // Surge or Netlify already gzip all static assets for you.
58 | // Before setting to `true`, make sure to:
59 | // npm install --save-dev compression-webpack-plugin
60 | productionGzip: false,
61 | productionGzipExtensions: ['js', 'css'],
62 |
63 | // Run the build command with an extra argument to
64 | // View the bundle analyzer report after build finishes:
65 | // `npm run build --report`
66 | // Set to `true` or `false` to always turn it on or off
67 | bundleAnalyzerReport: process.env.npm_config_report
68 | }
69 | }
70 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "vuedemo",
3 | "version": "1.0.0",
4 | "description": "A Vue.js project",
5 | "author": "huangjiangmin <13520350513@163.com>",
6 | "private": true,
7 | "scripts": {
8 | "dev": "webpack-dev-server --inline --progress --config build/webpack.dev.conf.js",
9 | "start": "npm run dev",
10 | "build": "node build/build.js"
11 | },
12 | "dependencies": {
13 | "aos": "^2.3.4",
14 | "axios": "^0.20.0",
15 | "element-ui": "^2.13.2",
16 | "highlight.js": "^10.4.1",
17 | "less": "^3.13.0",
18 | "less-loader": "^4.1.0",
19 | "prerender-spa-plugin": "^3.4.0",
20 | "vue": "^2.5.2",
21 | "vue-axios": "^2.1.5",
22 | "vue-router": "^3.0.1"
23 | },
24 | "devDependencies": {
25 | "autoprefixer": "^7.1.2",
26 | "babel-core": "^6.22.1",
27 | "babel-helper-vue-jsx-merge-props": "^2.0.3",
28 | "babel-loader": "^7.1.1",
29 | "babel-plugin-syntax-jsx": "^6.18.0",
30 | "babel-plugin-transform-runtime": "^6.22.0",
31 | "babel-plugin-transform-vue-jsx": "^3.5.0",
32 | "babel-preset-env": "^1.3.2",
33 | "babel-preset-stage-2": "^6.22.0",
34 | "chalk": "^2.0.1",
35 | "copy-webpack-plugin": "^4.0.1",
36 | "css-loader": "^0.28.0",
37 | "extract-text-webpack-plugin": "^3.0.0",
38 | "file-loader": "^1.1.4",
39 | "friendly-errors-webpack-plugin": "^1.6.1",
40 | "html-webpack-plugin": "^2.30.1",
41 | "less": "^3.13.0",
42 | "node-notifier": "^5.1.2",
43 | "optimize-css-assets-webpack-plugin": "^3.2.0",
44 | "ora": "^1.2.0",
45 | "portfinder": "^1.0.13",
46 | "postcss-import": "^11.0.0",
47 | "postcss-loader": "^2.0.8",
48 | "postcss-url": "^7.2.1",
49 | "rimraf": "^2.6.0",
50 | "semver": "^5.3.0",
51 | "shelljs": "^0.7.6",
52 | "uglifyjs-webpack-plugin": "^1.1.1",
53 | "url-loader": "^0.5.8",
54 | "vue-lazyload": "^1.3.3",
55 | "vue-loader": "^13.3.0",
56 | "vue-style-loader": "^3.0.1",
57 | "vue-template-compiler": "^2.5.2",
58 | "webpack": "^3.6.0",
59 | "webpack-bundle-analyzer": "^2.9.0",
60 | "webpack-dev-server": "^2.9.1",
61 | "webpack-merge": "^4.1.0"
62 | },
63 | "engines": {
64 | "node": ">= 6.0.0",
65 | "npm": ">= 3.0.0"
66 | },
67 | "browserslist": [
68 | "> 1%",
69 | "last 2 versions",
70 | "not ie <= 8"
71 | ]
72 | }
73 |
--------------------------------------------------------------------------------
/src/utils/common.js:
--------------------------------------------------------------------------------
1 | export function before_time(dateTimeStamp) {
2 | var minute = 1000 * 60; //把分,时,天,周,半个月,一个月用毫秒表示
3 | var hour = minute * 60;
4 | var day = hour * 24;
5 | var week = day * 7;
6 | var halfamonth = day * 15;
7 | var month = day * 30;
8 | var year = day * 365;
9 | var now = new Date().getTime(); //获取当前时间毫秒
10 | // console.log(now);
11 | var diffValue = now - dateTimeStamp; //时间差
12 |
13 | if (diffValue < 0) {
14 | return;
15 | }
16 | var minC = diffValue / minute; //计算时间差的分,时,天,周,月
17 | var hourC = diffValue / hour;
18 | var dayC = diffValue / day;
19 | var weekC = diffValue / week;
20 | var monthC = diffValue / month;
21 | var yearC = diffValue / year;
22 | var result;
23 | if (yearC >= 1) {
24 | result = " " + parseInt(yearC) + " years ago";
25 | } else if (monthC >= 1 && monthC <= 12) {
26 | result = " " + parseInt(monthC) + " months ago";
27 | } else if (weekC >= 1 && weekC <= 4) {
28 | result = " " + parseInt(weekC) + " weeks ago";
29 | } else if (dayC >= 1 && dayC <= 7) {
30 | result = " " + parseInt(dayC) + " days ago";
31 | } else if (hourC >= 1 && hourC <= 24) {
32 | result = " " + parseInt(hourC) + " hours ago";
33 | } else if (minC >= 1 && minC <= 60) {
34 | result = " " + parseInt(minC) + " minutes ago";
35 | } else if (diffValue >= 0 && diffValue <= minute) {
36 | result = "Just Now";
37 | } else {
38 | var datetime = new Date();
39 | datetime.setTime(dateTimeStamp);
40 | var Nyear = datetime.getFullYear();
41 | var Nmonth =
42 | datetime.getMonth() + 1 < 10
43 | ? "0" + (datetime.getMonth() + 1)
44 | : datetime.getMonth() + 1;
45 | var Ndate =
46 | datetime.getDate() < 10
47 | ? "0" + datetime.getDate()
48 | : datetime.getDate();
49 | var Nhour =
50 | datetime.getHours() < 10
51 | ? "0" + datetime.getHours()
52 | : datetime.getHours();
53 | var Nminute =
54 | datetime.getMinutes() < 10
55 | ? "0" + datetime.getMinutes()
56 | : datetime.getMinutes();
57 | var Nsecond =
58 | datetime.getSeconds() < 10
59 | ? "0" + datetime.getSeconds()
60 | : datetime.getSeconds();
61 | result = Nyear + "-" + Nmonth + "-" + Ndate;
62 | }
63 | return result;
64 | }
--------------------------------------------------------------------------------
/src/assets/css/nav-pc.less:
--------------------------------------------------------------------------------
1 | .navs{
2 |
3 | /*
4 | 屏幕小于768px的
5 | */
6 | @media screen and (max-width:768px){
7 | width: 100%;
8 | height: 100px;
9 | /* line-height: 80px; */
10 | background: rgb(254, 254, 254);
11 | .nav{
12 | display: none;
13 | }
14 | .changeStyle{
15 | font-weight: bold;
16 | }
17 | .nav-image{
18 | float: left;
19 | display: inline;
20 | margin-top: 20px;
21 | margin-left: 15px;
22 | }
23 | .nav-search{
24 | float: left;
25 | margin-left: 5px;
26 | margin-top: 23px;
27 | }
28 | }
29 | @media screen and (max-width: 2000px) {
30 | width: 100%;
31 | height: 100px;
32 | /* line-height: 80px; */
33 | background: rgb(254, 254, 254);
34 | .nav{
35 | float:left;
36 | margin-left: 40px;
37 | font-size: 18px;
38 | cursor: pointer;
39 | margin-top: 30px;
40 | }
41 | .changeStyle{
42 | font-weight: bold;
43 | }
44 | .nav-image{
45 | margin-top: 20px;
46 | margin-left: 200px;
47 | }
48 | .nav-search{
49 | float: left;
50 | margin-left: 15px;
51 | margin-top: 23px;
52 | }
53 | }
54 |
55 | }
56 | .show-card{
57 | width: 100%;
58 | height: 400px;
59 | background: rgb(255, 255, 255);
60 | z-index: 100;
61 | position:absolute;
62 | margin-top: 100px;
63 | border-top: 0.5px solid rgb(214, 212, 212);
64 | .card-recent{
65 | margin-top: 20px;
66 | margin-right: 65%;
67 | }
68 | .small-card{
69 | width:75%;
70 | margin: 0 auto;
71 | .el-col{
72 | width:200px;
73 | height:200px;
74 | .nav-show-image{
75 | width: 100%;
76 | height:140px;
77 | object-fit: cover;
78 | transition: all 0.6s;
79 | }
80 | .nav-show-image:hover{
81 | transform: scale(1.2);
82 | }
83 | .card-massges{
84 | object-fit: cover;
85 | height: 20px;
86 | font-size: 15px;
87 | }
88 | }
89 | }
90 | .nav-tags{
91 | margin-top: 30px;
92 | margin-right: 72%;
93 | }
94 | .tags-div{
95 | margin-left: 200px;
96 | }
97 | .tags{
98 | float:left;
99 | margin-left:3%;
100 | font-size: 18px;
101 | cursor: pointer;
102 | margin-top: 10px;
103 | font-weight: bold;
104 | }
105 | }
--------------------------------------------------------------------------------
/src/utils/http.js:
--------------------------------------------------------------------------------
1 | import axios from 'axios'
2 |
3 | axios.defaults.timeout = 5000; //设置请求时间
4 | axios.defaults.baseURL ='http://localhost:8088'; //设置接口公共部分
5 |
6 | //http request 拦截器
7 |
8 | axios.interceptors.request.use(
9 |
10 | config => {
11 |
12 | config.data = JSON.stringify(config.data);
13 |
14 | config.headers = {
15 |
16 | 'Content-Type':'application/json'
17 |
18 | }
19 |
20 | return config;
21 |
22 | },
23 |
24 | error => {
25 |
26 | return Promise.reject(err);
27 |
28 | }
29 |
30 | );
31 |
32 | //http response 拦截器
33 |
34 | axios.interceptors.response.use(
35 |
36 | response => {
37 |
38 | if(response.data.errCode ==2){
39 |
40 | router.push({
41 |
42 | path:"/login",
43 |
44 | querry:{redirect:router.currentRoute.fullPath}//从哪个页面跳转
45 |
46 | })
47 |
48 | }
49 |
50 | return response;
51 |
52 | },
53 |
54 | error => {
55 |
56 | return Promise.reject(error)
57 |
58 | }
59 |
60 | )
61 |
62 | /**
63 |
64 | * 封装get方法
65 |
66 | * @param url
67 |
68 | * @param data
69 |
70 | * @returns {Promise}
71 |
72 | */
73 |
74 | export function fetch(url,params={}){
75 |
76 | return new Promise((resolve,reject) => {
77 |
78 | axios.get(url,{
79 |
80 | params:params
81 |
82 | })
83 |
84 | .then(response => {
85 |
86 | resolve(response.data);
87 |
88 | })
89 |
90 | .catch(err => {
91 |
92 | reject(err)
93 |
94 | })
95 |
96 | })
97 |
98 | }
99 |
100 | /**
101 |
102 | * 封装post请求
103 |
104 | * @param url
105 |
106 | * @param data
107 |
108 | * @returns {Promise}
109 |
110 | */
111 |
112 | export function post(url,data = {}){
113 |
114 | return new Promise((resolve,reject) => {
115 |
116 | axios.post(url,data)
117 |
118 | .then(response => {
119 |
120 | resolve(response.data);
121 |
122 | },err => {
123 |
124 | reject(err)
125 |
126 | })
127 |
128 | })
129 |
130 | }
131 |
132 | /**
133 |
134 | * 封装patch请求
135 |
136 | * @param url
137 |
138 | * @param data
139 |
140 | * @returns {Promise}
141 |
142 | */
143 |
144 | export function patch(url,data = {}){
145 |
146 | return new Promise((resolve,reject) => {
147 |
148 | axios.patch(url,data)
149 |
150 | .then(response => {
151 |
152 | resolve(response.data);
153 |
154 | },err => {
155 |
156 | reject(err)
157 |
158 | })
159 |
160 | })
161 |
162 | }
163 |
164 | /**
165 |
166 | * 封装put请求
167 |
168 | * @param url
169 |
170 | * @param data
171 |
172 | * @returns {Promise}
173 |
174 | */
175 |
176 | export function put(url,data = {}){
177 |
178 | return new Promise((resolve,reject) => {
179 |
180 | axios.put(url,data)
181 |
182 | .then(response => {
183 |
184 | resolve(response.data);
185 |
186 | },err => {
187 |
188 | reject(err)
189 |
190 | })
191 |
192 | })
193 |
194 | }
--------------------------------------------------------------------------------
/src/views/author/index.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
Author
6 |
7 | Sun was shining over me
8 |
9 |
10 |
11 |
![]()
15 |
16 |
17 |
18 |
19 |
20 |
29 |
30 |
31 |
32 |
86 |
87 |
88 |
--------------------------------------------------------------------------------
/src/views/labels/index.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
{{labelName}}
6 |
7 | {{essayCount}} articles with this tag
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
25 |
26 |
27 |
28 |
81 |
82 |
--------------------------------------------------------------------------------
/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 | 大黄子的博客
15 |
16 |
17 |
18 |
19 |
20 |
78 |
79 |
80 |
81 |
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
90 |
91 |
92 |
93 |
94 |
95 |
108 |
109 |
110 |
111 |
--------------------------------------------------------------------------------
/src/views/home/index.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
DaHuangzi
6 |
7 | Better late than never
8 |
9 |
10 |
11 |
![]()
15 |
16 |
17 |
18 |
19 |
20 |
29 |
30 |
31 |
32 |
83 |
84 |
85 |
--------------------------------------------------------------------------------
/src/components/card/index.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
9 |
10 |
{{item.labelName}}
11 |
12 |
13 |
{{item.essayTitle}}
14 |
{{item.essayAbout}}
15 |
16 |
17 |
18 | {{before_time(item.createTime)}}
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
68 |
69 |
--------------------------------------------------------------------------------
/src/views/message/index.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
Message Board
6 |
7 | Say what you want to say
8 |
9 |
10 |
11 |

12 |
13 |
14 |
15 |
16 |
17 |
18 |
20 |
21 |
22 |
23 | {{item.memberName}}:
24 | {{item.content}}
25 |
26 |
27 |
28 |
29 |
30 |
31 | 大黄子:
32 | 说点什么吧😁
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 | 留言
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
96 |
97 |
--------------------------------------------------------------------------------
/src/views/essaydetail/index.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
![]()
6 |
7 |
8 |
9 |
{{essayDetail.essayTitle}}
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |

21 |
26 |
27 |
28 |
29 |
31 |
32 |
33 |
34 | {{item.memberName}}:
35 | {{item.content}}
36 |
37 |
38 |
39 |
40 |
41 |
42 | 大黄子:
43 | 说点什么吧😁
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 | 留言
52 |
53 |
54 |
55 |
56 |
57 |
Recommended for you
58 |
59 |
60 |
61 |
62 |
No posts found
63 |
64 | Apparently there are no posts at the moment, check again later.
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
187 |
188 |
--------------------------------------------------------------------------------
/src/components/nav/index.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |

6 |
Home
7 |
Code
8 |
Life
9 |
Author
10 |
11 |
12 |
13 |

14 |
15 |
16 |
17 |
21 |
22 |
23 |
24 |
25 |
Recent articles
26 |
27 |
28 |
29 |
30 |
31 |
32 |
{{item.essayTitle}}
33 |
34 |
35 |
36 |
37 |
38 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
125 |
126 |
--------------------------------------------------------------------------------
/src/assets/css/aos.css:
--------------------------------------------------------------------------------
1 | [data-aos][data-aos][data-aos-duration="50"],body[data-aos-duration="50"] [data-aos]{transition-duration:50ms}[data-aos][data-aos][data-aos-delay="50"],body[data-aos-delay="50"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="50"].aos-animate,body[data-aos-delay="50"] [data-aos].aos-animate{transition-delay:50ms}[data-aos][data-aos][data-aos-duration="100"],body[data-aos-duration="100"] [data-aos]{transition-duration:.1s}[data-aos][data-aos][data-aos-delay="100"],body[data-aos-delay="100"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="100"].aos-animate,body[data-aos-delay="100"] [data-aos].aos-animate{transition-delay:.1s}[data-aos][data-aos][data-aos-duration="150"],body[data-aos-duration="150"] [data-aos]{transition-duration:.15s}[data-aos][data-aos][data-aos-delay="150"],body[data-aos-delay="150"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="150"].aos-animate,body[data-aos-delay="150"] [data-aos].aos-animate{transition-delay:.15s}[data-aos][data-aos][data-aos-duration="200"],body[data-aos-duration="200"] [data-aos]{transition-duration:.2s}[data-aos][data-aos][data-aos-delay="200"],body[data-aos-delay="200"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="200"].aos-animate,body[data-aos-delay="200"] [data-aos].aos-animate{transition-delay:.2s}[data-aos][data-aos][data-aos-duration="250"],body[data-aos-duration="250"] [data-aos]{transition-duration:.25s}[data-aos][data-aos][data-aos-delay="250"],body[data-aos-delay="250"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="250"].aos-animate,body[data-aos-delay="250"] [data-aos].aos-animate{transition-delay:.25s}[data-aos][data-aos][data-aos-duration="300"],body[data-aos-duration="300"] [data-aos]{transition-duration:.3s}[data-aos][data-aos][data-aos-delay="300"],body[data-aos-delay="300"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="300"].aos-animate,body[data-aos-delay="300"] [data-aos].aos-animate{transition-delay:.3s}[data-aos][data-aos][data-aos-duration="350"],body[data-aos-duration="350"] [data-aos]{transition-duration:.35s}[data-aos][data-aos][data-aos-delay="350"],body[data-aos-delay="350"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="350"].aos-animate,body[data-aos-delay="350"] [data-aos].aos-animate{transition-delay:.35s}[data-aos][data-aos][data-aos-duration="400"],body[data-aos-duration="400"] [data-aos]{transition-duration:.4s}[data-aos][data-aos][data-aos-delay="400"],body[data-aos-delay="400"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="400"].aos-animate,body[data-aos-delay="400"] [data-aos].aos-animate{transition-delay:.4s}[data-aos][data-aos][data-aos-duration="450"],body[data-aos-duration="450"] [data-aos]{transition-duration:.45s}[data-aos][data-aos][data-aos-delay="450"],body[data-aos-delay="450"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="450"].aos-animate,body[data-aos-delay="450"] [data-aos].aos-animate{transition-delay:.45s}[data-aos][data-aos][data-aos-duration="500"],body[data-aos-duration="500"] [data-aos]{transition-duration:.5s}[data-aos][data-aos][data-aos-delay="500"],body[data-aos-delay="500"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="500"].aos-animate,body[data-aos-delay="500"] [data-aos].aos-animate{transition-delay:.5s}[data-aos][data-aos][data-aos-duration="550"],body[data-aos-duration="550"] [data-aos]{transition-duration:.55s}[data-aos][data-aos][data-aos-delay="550"],body[data-aos-delay="550"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="550"].aos-animate,body[data-aos-delay="550"] [data-aos].aos-animate{transition-delay:.55s}[data-aos][data-aos][data-aos-duration="600"],body[data-aos-duration="600"] [data-aos]{transition-duration:.6s}[data-aos][data-aos][data-aos-delay="600"],body[data-aos-delay="600"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="600"].aos-animate,body[data-aos-delay="600"] [data-aos].aos-animate{transition-delay:.6s}[data-aos][data-aos][data-aos-duration="650"],body[data-aos-duration="650"] [data-aos]{transition-duration:.65s}[data-aos][data-aos][data-aos-delay="650"],body[data-aos-delay="650"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="650"].aos-animate,body[data-aos-delay="650"] [data-aos].aos-animate{transition-delay:.65s}[data-aos][data-aos][data-aos-duration="700"],body[data-aos-duration="700"] [data-aos]{transition-duration:.7s}[data-aos][data-aos][data-aos-delay="700"],body[data-aos-delay="700"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="700"].aos-animate,body[data-aos-delay="700"] [data-aos].aos-animate{transition-delay:.7s}[data-aos][data-aos][data-aos-duration="750"],body[data-aos-duration="750"] [data-aos]{transition-duration:.75s}[data-aos][data-aos][data-aos-delay="750"],body[data-aos-delay="750"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="750"].aos-animate,body[data-aos-delay="750"] [data-aos].aos-animate{transition-delay:.75s}[data-aos][data-aos][data-aos-duration="800"],body[data-aos-duration="800"] [data-aos]{transition-duration:.8s}[data-aos][data-aos][data-aos-delay="800"],body[data-aos-delay="800"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="800"].aos-animate,body[data-aos-delay="800"] [data-aos].aos-animate{transition-delay:.8s}[data-aos][data-aos][data-aos-duration="850"],body[data-aos-duration="850"] [data-aos]{transition-duration:.85s}[data-aos][data-aos][data-aos-delay="850"],body[data-aos-delay="850"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="850"].aos-animate,body[data-aos-delay="850"] [data-aos].aos-animate{transition-delay:.85s}[data-aos][data-aos][data-aos-duration="900"],body[data-aos-duration="900"] [data-aos]{transition-duration:.9s}[data-aos][data-aos][data-aos-delay="900"],body[data-aos-delay="900"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="900"].aos-animate,body[data-aos-delay="900"] [data-aos].aos-animate{transition-delay:.9s}[data-aos][data-aos][data-aos-duration="950"],body[data-aos-duration="950"] [data-aos]{transition-duration:.95s}[data-aos][data-aos][data-aos-delay="950"],body[data-aos-delay="950"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="950"].aos-animate,body[data-aos-delay="950"] [data-aos].aos-animate{transition-delay:.95s}[data-aos][data-aos][data-aos-duration="1000"],body[data-aos-duration="1000"] [data-aos]{transition-duration:1s}[data-aos][data-aos][data-aos-delay="1000"],body[data-aos-delay="1000"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="1000"].aos-animate,body[data-aos-delay="1000"] [data-aos].aos-animate{transition-delay:1s}[data-aos][data-aos][data-aos-duration="1050"],body[data-aos-duration="1050"] [data-aos]{transition-duration:1.05s}[data-aos][data-aos][data-aos-delay="1050"],body[data-aos-delay="1050"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="1050"].aos-animate,body[data-aos-delay="1050"] [data-aos].aos-animate{transition-delay:1.05s}[data-aos][data-aos][data-aos-duration="1100"],body[data-aos-duration="1100"] [data-aos]{transition-duration:1.1s}[data-aos][data-aos][data-aos-delay="1100"],body[data-aos-delay="1100"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="1100"].aos-animate,body[data-aos-delay="1100"] [data-aos].aos-animate{transition-delay:1.1s}[data-aos][data-aos][data-aos-duration="1150"],body[data-aos-duration="1150"] [data-aos]{transition-duration:1.15s}[data-aos][data-aos][data-aos-delay="1150"],body[data-aos-delay="1150"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="1150"].aos-animate,body[data-aos-delay="1150"] [data-aos].aos-animate{transition-delay:1.15s}[data-aos][data-aos][data-aos-duration="1200"],body[data-aos-duration="1200"] [data-aos]{transition-duration:1.2s}[data-aos][data-aos][data-aos-delay="1200"],body[data-aos-delay="1200"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="1200"].aos-animate,body[data-aos-delay="1200"] [data-aos].aos-animate{transition-delay:1.2s}[data-aos][data-aos][data-aos-duration="1250"],body[data-aos-duration="1250"] [data-aos]{transition-duration:1.25s}[data-aos][data-aos][data-aos-delay="1250"],body[data-aos-delay="1250"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="1250"].aos-animate,body[data-aos-delay="1250"] [data-aos].aos-animate{transition-delay:1.25s}[data-aos][data-aos][data-aos-duration="1300"],body[data-aos-duration="1300"] [data-aos]{transition-duration:1.3s}[data-aos][data-aos][data-aos-delay="1300"],body[data-aos-delay="1300"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="1300"].aos-animate,body[data-aos-delay="1300"] [data-aos].aos-animate{transition-delay:1.3s}[data-aos][data-aos][data-aos-duration="1350"],body[data-aos-duration="1350"] [data-aos]{transition-duration:1.35s}[data-aos][data-aos][data-aos-delay="1350"],body[data-aos-delay="1350"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="1350"].aos-animate,body[data-aos-delay="1350"] [data-aos].aos-animate{transition-delay:1.35s}[data-aos][data-aos][data-aos-duration="1400"],body[data-aos-duration="1400"] [data-aos]{transition-duration:1.4s}[data-aos][data-aos][data-aos-delay="1400"],body[data-aos-delay="1400"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="1400"].aos-animate,body[data-aos-delay="1400"] [data-aos].aos-animate{transition-delay:1.4s}[data-aos][data-aos][data-aos-duration="1450"],body[data-aos-duration="1450"] [data-aos]{transition-duration:1.45s}[data-aos][data-aos][data-aos-delay="1450"],body[data-aos-delay="1450"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="1450"].aos-animate,body[data-aos-delay="1450"] [data-aos].aos-animate{transition-delay:1.45s}[data-aos][data-aos][data-aos-duration="1500"],body[data-aos-duration="1500"] [data-aos]{transition-duration:1.5s}[data-aos][data-aos][data-aos-delay="1500"],body[data-aos-delay="1500"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="1500"].aos-animate,body[data-aos-delay="1500"] [data-aos].aos-animate{transition-delay:1.5s}[data-aos][data-aos][data-aos-duration="1550"],body[data-aos-duration="1550"] [data-aos]{transition-duration:1.55s}[data-aos][data-aos][data-aos-delay="1550"],body[data-aos-delay="1550"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="1550"].aos-animate,body[data-aos-delay="1550"] [data-aos].aos-animate{transition-delay:1.55s}[data-aos][data-aos][data-aos-duration="1600"],body[data-aos-duration="1600"] [data-aos]{transition-duration:1.6s}[data-aos][data-aos][data-aos-delay="1600"],body[data-aos-delay="1600"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="1600"].aos-animate,body[data-aos-delay="1600"] [data-aos].aos-animate{transition-delay:1.6s}[data-aos][data-aos][data-aos-duration="1650"],body[data-aos-duration="1650"] [data-aos]{transition-duration:1.65s}[data-aos][data-aos][data-aos-delay="1650"],body[data-aos-delay="1650"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="1650"].aos-animate,body[data-aos-delay="1650"] [data-aos].aos-animate{transition-delay:1.65s}[data-aos][data-aos][data-aos-duration="1700"],body[data-aos-duration="1700"] [data-aos]{transition-duration:1.7s}[data-aos][data-aos][data-aos-delay="1700"],body[data-aos-delay="1700"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="1700"].aos-animate,body[data-aos-delay="1700"] [data-aos].aos-animate{transition-delay:1.7s}[data-aos][data-aos][data-aos-duration="1750"],body[data-aos-duration="1750"] [data-aos]{transition-duration:1.75s}[data-aos][data-aos][data-aos-delay="1750"],body[data-aos-delay="1750"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="1750"].aos-animate,body[data-aos-delay="1750"] [data-aos].aos-animate{transition-delay:1.75s}[data-aos][data-aos][data-aos-duration="1800"],body[data-aos-duration="1800"] [data-aos]{transition-duration:1.8s}[data-aos][data-aos][data-aos-delay="1800"],body[data-aos-delay="1800"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="1800"].aos-animate,body[data-aos-delay="1800"] [data-aos].aos-animate{transition-delay:1.8s}[data-aos][data-aos][data-aos-duration="1850"],body[data-aos-duration="1850"] [data-aos]{transition-duration:1.85s}[data-aos][data-aos][data-aos-delay="1850"],body[data-aos-delay="1850"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="1850"].aos-animate,body[data-aos-delay="1850"] [data-aos].aos-animate{transition-delay:1.85s}[data-aos][data-aos][data-aos-duration="1900"],body[data-aos-duration="1900"] [data-aos]{transition-duration:1.9s}[data-aos][data-aos][data-aos-delay="1900"],body[data-aos-delay="1900"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="1900"].aos-animate,body[data-aos-delay="1900"] [data-aos].aos-animate{transition-delay:1.9s}[data-aos][data-aos][data-aos-duration="1950"],body[data-aos-duration="1950"] [data-aos]{transition-duration:1.95s}[data-aos][data-aos][data-aos-delay="1950"],body[data-aos-delay="1950"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="1950"].aos-animate,body[data-aos-delay="1950"] [data-aos].aos-animate{transition-delay:1.95s}[data-aos][data-aos][data-aos-duration="2000"],body[data-aos-duration="2000"] [data-aos]{transition-duration:2s}[data-aos][data-aos][data-aos-delay="2000"],body[data-aos-delay="2000"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="2000"].aos-animate,body[data-aos-delay="2000"] [data-aos].aos-animate{transition-delay:2s}[data-aos][data-aos][data-aos-duration="2050"],body[data-aos-duration="2050"] [data-aos]{transition-duration:2.05s}[data-aos][data-aos][data-aos-delay="2050"],body[data-aos-delay="2050"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="2050"].aos-animate,body[data-aos-delay="2050"] [data-aos].aos-animate{transition-delay:2.05s}[data-aos][data-aos][data-aos-duration="2100"],body[data-aos-duration="2100"] [data-aos]{transition-duration:2.1s}[data-aos][data-aos][data-aos-delay="2100"],body[data-aos-delay="2100"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="2100"].aos-animate,body[data-aos-delay="2100"] [data-aos].aos-animate{transition-delay:2.1s}[data-aos][data-aos][data-aos-duration="2150"],body[data-aos-duration="2150"] [data-aos]{transition-duration:2.15s}[data-aos][data-aos][data-aos-delay="2150"],body[data-aos-delay="2150"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="2150"].aos-animate,body[data-aos-delay="2150"] [data-aos].aos-animate{transition-delay:2.15s}[data-aos][data-aos][data-aos-duration="2200"],body[data-aos-duration="2200"] [data-aos]{transition-duration:2.2s}[data-aos][data-aos][data-aos-delay="2200"],body[data-aos-delay="2200"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="2200"].aos-animate,body[data-aos-delay="2200"] [data-aos].aos-animate{transition-delay:2.2s}[data-aos][data-aos][data-aos-duration="2250"],body[data-aos-duration="2250"] [data-aos]{transition-duration:2.25s}[data-aos][data-aos][data-aos-delay="2250"],body[data-aos-delay="2250"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="2250"].aos-animate,body[data-aos-delay="2250"] [data-aos].aos-animate{transition-delay:2.25s}[data-aos][data-aos][data-aos-duration="2300"],body[data-aos-duration="2300"] [data-aos]{transition-duration:2.3s}[data-aos][data-aos][data-aos-delay="2300"],body[data-aos-delay="2300"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="2300"].aos-animate,body[data-aos-delay="2300"] [data-aos].aos-animate{transition-delay:2.3s}[data-aos][data-aos][data-aos-duration="2350"],body[data-aos-duration="2350"] [data-aos]{transition-duration:2.35s}[data-aos][data-aos][data-aos-delay="2350"],body[data-aos-delay="2350"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="2350"].aos-animate,body[data-aos-delay="2350"] [data-aos].aos-animate{transition-delay:2.35s}[data-aos][data-aos][data-aos-duration="2400"],body[data-aos-duration="2400"] [data-aos]{transition-duration:2.4s}[data-aos][data-aos][data-aos-delay="2400"],body[data-aos-delay="2400"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="2400"].aos-animate,body[data-aos-delay="2400"] [data-aos].aos-animate{transition-delay:2.4s}[data-aos][data-aos][data-aos-duration="2450"],body[data-aos-duration="2450"] [data-aos]{transition-duration:2.45s}[data-aos][data-aos][data-aos-delay="2450"],body[data-aos-delay="2450"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="2450"].aos-animate,body[data-aos-delay="2450"] [data-aos].aos-animate{transition-delay:2.45s}[data-aos][data-aos][data-aos-duration="2500"],body[data-aos-duration="2500"] [data-aos]{transition-duration:2.5s}[data-aos][data-aos][data-aos-delay="2500"],body[data-aos-delay="2500"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="2500"].aos-animate,body[data-aos-delay="2500"] [data-aos].aos-animate{transition-delay:2.5s}[data-aos][data-aos][data-aos-duration="2550"],body[data-aos-duration="2550"] [data-aos]{transition-duration:2.55s}[data-aos][data-aos][data-aos-delay="2550"],body[data-aos-delay="2550"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="2550"].aos-animate,body[data-aos-delay="2550"] [data-aos].aos-animate{transition-delay:2.55s}[data-aos][data-aos][data-aos-duration="2600"],body[data-aos-duration="2600"] [data-aos]{transition-duration:2.6s}[data-aos][data-aos][data-aos-delay="2600"],body[data-aos-delay="2600"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="2600"].aos-animate,body[data-aos-delay="2600"] [data-aos].aos-animate{transition-delay:2.6s}[data-aos][data-aos][data-aos-duration="2650"],body[data-aos-duration="2650"] [data-aos]{transition-duration:2.65s}[data-aos][data-aos][data-aos-delay="2650"],body[data-aos-delay="2650"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="2650"].aos-animate,body[data-aos-delay="2650"] [data-aos].aos-animate{transition-delay:2.65s}[data-aos][data-aos][data-aos-duration="2700"],body[data-aos-duration="2700"] [data-aos]{transition-duration:2.7s}[data-aos][data-aos][data-aos-delay="2700"],body[data-aos-delay="2700"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="2700"].aos-animate,body[data-aos-delay="2700"] [data-aos].aos-animate{transition-delay:2.7s}[data-aos][data-aos][data-aos-duration="2750"],body[data-aos-duration="2750"] [data-aos]{transition-duration:2.75s}[data-aos][data-aos][data-aos-delay="2750"],body[data-aos-delay="2750"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="2750"].aos-animate,body[data-aos-delay="2750"] [data-aos].aos-animate{transition-delay:2.75s}[data-aos][data-aos][data-aos-duration="2800"],body[data-aos-duration="2800"] [data-aos]{transition-duration:2.8s}[data-aos][data-aos][data-aos-delay="2800"],body[data-aos-delay="2800"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="2800"].aos-animate,body[data-aos-delay="2800"] [data-aos].aos-animate{transition-delay:2.8s}[data-aos][data-aos][data-aos-duration="2850"],body[data-aos-duration="2850"] [data-aos]{transition-duration:2.85s}[data-aos][data-aos][data-aos-delay="2850"],body[data-aos-delay="2850"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="2850"].aos-animate,body[data-aos-delay="2850"] [data-aos].aos-animate{transition-delay:2.85s}[data-aos][data-aos][data-aos-duration="2900"],body[data-aos-duration="2900"] [data-aos]{transition-duration:2.9s}[data-aos][data-aos][data-aos-delay="2900"],body[data-aos-delay="2900"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="2900"].aos-animate,body[data-aos-delay="2900"] [data-aos].aos-animate{transition-delay:2.9s}[data-aos][data-aos][data-aos-duration="2950"],body[data-aos-duration="2950"] [data-aos]{transition-duration:2.95s}[data-aos][data-aos][data-aos-delay="2950"],body[data-aos-delay="2950"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="2950"].aos-animate,body[data-aos-delay="2950"] [data-aos].aos-animate{transition-delay:2.95s}[data-aos][data-aos][data-aos-duration="3000"],body[data-aos-duration="3000"] [data-aos]{transition-duration:3s}[data-aos][data-aos][data-aos-delay="3000"],body[data-aos-delay="3000"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="3000"].aos-animate,body[data-aos-delay="3000"] [data-aos].aos-animate{transition-delay:3s}[data-aos]{pointer-events:none}[data-aos].aos-animate{pointer-events:auto}[data-aos][data-aos][data-aos-easing=linear],body[data-aos-easing=linear] [data-aos]{transition-timing-function:cubic-bezier(.25,.25,.75,.75)}[data-aos][data-aos][data-aos-easing=ease],body[data-aos-easing=ease] [data-aos]{transition-timing-function:ease}[data-aos][data-aos][data-aos-easing=ease-in],body[data-aos-easing=ease-in] [data-aos]{transition-timing-function:ease-in}[data-aos][data-aos][data-aos-easing=ease-out],body[data-aos-easing=ease-out] [data-aos]{transition-timing-function:ease-out}[data-aos][data-aos][data-aos-easing=ease-in-out],body[data-aos-easing=ease-in-out] [data-aos]{transition-timing-function:ease-in-out}[data-aos][data-aos][data-aos-easing=ease-in-back],body[data-aos-easing=ease-in-back] [data-aos]{transition-timing-function:cubic-bezier(.6,-.28,.735,.045)}[data-aos][data-aos][data-aos-easing=ease-out-back],body[data-aos-easing=ease-out-back] [data-aos]{transition-timing-function:cubic-bezier(.175,.885,.32,1.275)}[data-aos][data-aos][data-aos-easing=ease-in-out-back],body[data-aos-easing=ease-in-out-back] [data-aos]{transition-timing-function:cubic-bezier(.68,-.55,.265,1.55)}[data-aos][data-aos][data-aos-easing=ease-in-sine],body[data-aos-easing=ease-in-sine] [data-aos]{transition-timing-function:cubic-bezier(.47,0,.745,.715)}[data-aos][data-aos][data-aos-easing=ease-out-sine],body[data-aos-easing=ease-out-sine] [data-aos]{transition-timing-function:cubic-bezier(.39,.575,.565,1)}[data-aos][data-aos][data-aos-easing=ease-in-out-sine],body[data-aos-easing=ease-in-out-sine] [data-aos]{transition-timing-function:cubic-bezier(.445,.05,.55,.95)}[data-aos][data-aos][data-aos-easing=ease-in-quad],body[data-aos-easing=ease-in-quad] [data-aos]{transition-timing-function:cubic-bezier(.55,.085,.68,.53)}[data-aos][data-aos][data-aos-easing=ease-out-quad],body[data-aos-easing=ease-out-quad] [data-aos]{transition-timing-function:cubic-bezier(.25,.46,.45,.94)}[data-aos][data-aos][data-aos-easing=ease-in-out-quad],body[data-aos-easing=ease-in-out-quad] [data-aos]{transition-timing-function:cubic-bezier(.455,.03,.515,.955)}[data-aos][data-aos][data-aos-easing=ease-in-cubic],body[data-aos-easing=ease-in-cubic] [data-aos]{transition-timing-function:cubic-bezier(.55,.085,.68,.53)}[data-aos][data-aos][data-aos-easing=ease-out-cubic],body[data-aos-easing=ease-out-cubic] [data-aos]{transition-timing-function:cubic-bezier(.25,.46,.45,.94)}[data-aos][data-aos][data-aos-easing=ease-in-out-cubic],body[data-aos-easing=ease-in-out-cubic] [data-aos]{transition-timing-function:cubic-bezier(.455,.03,.515,.955)}[data-aos][data-aos][data-aos-easing=ease-in-quart],body[data-aos-easing=ease-in-quart] [data-aos]{transition-timing-function:cubic-bezier(.55,.085,.68,.53)}[data-aos][data-aos][data-aos-easing=ease-out-quart],body[data-aos-easing=ease-out-quart] [data-aos]{transition-timing-function:cubic-bezier(.25,.46,.45,.94)}[data-aos][data-aos][data-aos-easing=ease-in-out-quart],body[data-aos-easing=ease-in-out-quart] [data-aos]{transition-timing-function:cubic-bezier(.455,.03,.515,.955)}@media screen{html:not(.no-js) [data-aos^=fade][data-aos^=fade]{opacity:0;transition-property:opacity,-webkit-transform;transition-property:opacity,transform;transition-property:opacity,transform,-webkit-transform}html:not(.no-js) [data-aos^=fade][data-aos^=fade].aos-animate{opacity:1;-webkit-transform:none;transform:none}html:not(.no-js) [data-aos=fade-up]{-webkit-transform:translate3d(0,100px,0);transform:translate3d(0,100px,0)}html:not(.no-js) [data-aos=fade-down]{-webkit-transform:translate3d(0,-100px,0);transform:translate3d(0,-100px,0)}html:not(.no-js) [data-aos=fade-right]{-webkit-transform:translate3d(-100px,0,0);transform:translate3d(-100px,0,0)}html:not(.no-js) [data-aos=fade-left]{-webkit-transform:translate3d(100px,0,0);transform:translate3d(100px,0,0)}html:not(.no-js) [data-aos=fade-up-right]{-webkit-transform:translate3d(-100px,100px,0);transform:translate3d(-100px,100px,0)}html:not(.no-js) [data-aos=fade-up-left]{-webkit-transform:translate3d(100px,100px,0);transform:translate3d(100px,100px,0)}html:not(.no-js) [data-aos=fade-down-right]{-webkit-transform:translate3d(-100px,-100px,0);transform:translate3d(-100px,-100px,0)}html:not(.no-js) [data-aos=fade-down-left]{-webkit-transform:translate3d(100px,-100px,0);transform:translate3d(100px,-100px,0)}html:not(.no-js) [data-aos^=zoom][data-aos^=zoom]{opacity:0;transition-property:opacity,-webkit-transform;transition-property:opacity,transform;transition-property:opacity,transform,-webkit-transform}html:not(.no-js) [data-aos^=zoom][data-aos^=zoom].aos-animate{opacity:1;-webkit-transform:translateZ(0) scale(1);transform:translateZ(0) scale(1)}html:not(.no-js) [data-aos=zoom-in]{-webkit-transform:scale(.6);transform:scale(.6)}html:not(.no-js) [data-aos=zoom-in-up]{-webkit-transform:translate3d(0,100px,0) scale(.6);transform:translate3d(0,100px,0) scale(.6)}html:not(.no-js) [data-aos=zoom-in-down]{-webkit-transform:translate3d(0,-100px,0) scale(.6);transform:translate3d(0,-100px,0) scale(.6)}html:not(.no-js) [data-aos=zoom-in-right]{-webkit-transform:translate3d(-100px,0,0) scale(.6);transform:translate3d(-100px,0,0) scale(.6)}html:not(.no-js) [data-aos=zoom-in-left]{-webkit-transform:translate3d(100px,0,0) scale(.6);transform:translate3d(100px,0,0) scale(.6)}html:not(.no-js) [data-aos=zoom-out]{-webkit-transform:scale(1.2);transform:scale(1.2)}html:not(.no-js) [data-aos=zoom-out-up]{-webkit-transform:translate3d(0,100px,0) scale(1.2);transform:translate3d(0,100px,0) scale(1.2)}html:not(.no-js) [data-aos=zoom-out-down]{-webkit-transform:translate3d(0,-100px,0) scale(1.2);transform:translate3d(0,-100px,0) scale(1.2)}html:not(.no-js) [data-aos=zoom-out-right]{-webkit-transform:translate3d(-100px,0,0) scale(1.2);transform:translate3d(-100px,0,0) scale(1.2)}html:not(.no-js) [data-aos=zoom-out-left]{-webkit-transform:translate3d(100px,0,0) scale(1.2);transform:translate3d(100px,0,0) scale(1.2)}html:not(.no-js) [data-aos^=slide][data-aos^=slide]{transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;visibility:hidden}html:not(.no-js) [data-aos^=slide][data-aos^=slide].aos-animate{visibility:visible;-webkit-transform:translateZ(0);transform:translateZ(0)}html:not(.no-js) [data-aos=slide-up]{-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0)}html:not(.no-js) [data-aos=slide-down]{-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0)}html:not(.no-js) [data-aos=slide-right]{-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}html:not(.no-js) [data-aos=slide-left]{-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}html:not(.no-js) [data-aos^=flip][data-aos^=flip]{-webkit-backface-visibility:hidden;backface-visibility:hidden;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform}html:not(.no-js) [data-aos=flip-left]{-webkit-transform:perspective(2500px) rotateY(-100deg);transform:perspective(2500px) rotateY(-100deg)}html:not(.no-js) [data-aos=flip-left].aos-animate{-webkit-transform:perspective(2500px) rotateY(0);transform:perspective(2500px) rotateY(0)}html:not(.no-js) [data-aos=flip-right]{-webkit-transform:perspective(2500px) rotateY(100deg);transform:perspective(2500px) rotateY(100deg)}html:not(.no-js) [data-aos=flip-right].aos-animate{-webkit-transform:perspective(2500px) rotateY(0);transform:perspective(2500px) rotateY(0)}html:not(.no-js) [data-aos=flip-up]{-webkit-transform:perspective(2500px) rotateX(-100deg);transform:perspective(2500px) rotateX(-100deg)}html:not(.no-js) [data-aos=flip-up].aos-animate{-webkit-transform:perspective(2500px) rotateX(0);transform:perspective(2500px) rotateX(0)}html:not(.no-js) [data-aos=flip-down]{-webkit-transform:perspective(2500px) rotateX(100deg);transform:perspective(2500px) rotateX(100deg)}html:not(.no-js) [data-aos=flip-down].aos-animate{-webkit-transform:perspective(2500px) rotateX(0);transform:perspective(2500px) rotateX(0)}}
--------------------------------------------------------------------------------