├── static
└── .gitkeep
├── src
├── assets
│ └── static
│ │ ├── css
│ │ ├── el-main.css
│ │ ├── background_image.css
│ │ └── home.css
│ │ └── js
│ │ └── time.js
├── components
│ ├── admin
│ │ ├── File.vue
│ │ ├── Linkz.vue
│ │ ├── Settings.vue
│ │ ├── Page.vue
│ │ ├── Index.vue
│ │ ├── Admin.vue
│ │ ├── label.vue
│ │ ├── article.vue
│ │ └── Publish.vue
│ ├── front
│ │ ├── Links.vue
│ │ ├── Archives.vue
│ │ ├── Laboratory.vue
│ │ ├── About.vue
│ │ ├── Login.vue
│ │ └── Home.vue
│ └── Template.vue
├── App.vue
├── main.js
└── router
│ └── index.js
├── config
├── prod.env.js
├── dev.env.js
└── index.js
├── .editorconfig
├── .gitignore
├── .babelrc
├── .postcssrc.js
├── index.html
├── README.md
└── package.json
/static/.gitkeep:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/assets/static/css/el-main.css:
--------------------------------------------------------------------------------
1 | .el-main {
2 | padding: 15px 15px 15px 0px;
3 | }
--------------------------------------------------------------------------------
/config/prod.env.js:
--------------------------------------------------------------------------------
1 | 'use strict'
2 | module.exports = {
3 | NODE_ENV: '"production"'
4 | }
5 |
--------------------------------------------------------------------------------
/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 |
--------------------------------------------------------------------------------
/src/components/admin/File.vue:
--------------------------------------------------------------------------------
1 |
2 | 文件管理
3 |
4 |
5 |
10 |
11 |
14 |
--------------------------------------------------------------------------------
/src/components/admin/Linkz.vue:
--------------------------------------------------------------------------------
1 |
2 | 友链
3 |
4 |
5 |
10 |
11 |
14 |
--------------------------------------------------------------------------------
/.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 |
--------------------------------------------------------------------------------
/src/components/admin/Settings.vue:
--------------------------------------------------------------------------------
1 |
2 | 系统设置
3 |
4 |
5 |
10 |
11 |
14 |
--------------------------------------------------------------------------------
/.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 |
--------------------------------------------------------------------------------
/src/components/admin/Page.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
页面管理
4 |
5 |
6 |
7 |
8 |
16 |
17 |
19 |
--------------------------------------------------------------------------------
/.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/components/front/Links.vue:
--------------------------------------------------------------------------------
1 |
2 | 友链
3 |
4 |
5 |
13 |
14 |
17 |
--------------------------------------------------------------------------------
/src/components/front/Archives.vue:
--------------------------------------------------------------------------------
1 |
2 | 归档
3 |
4 |
5 |
13 |
14 |
17 |
--------------------------------------------------------------------------------
/src/components/front/Laboratory.vue:
--------------------------------------------------------------------------------
1 |
2 | 统计
3 |
4 |
5 |
13 |
14 |
17 |
--------------------------------------------------------------------------------
/src/components/front/About.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 | 关于
4 |
5 |
6 |
7 |
15 |
16 |
19 |
--------------------------------------------------------------------------------
/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | 博客后台管理
7 |
8 |
9 |
10 |
11 |
12 |
13 |
--------------------------------------------------------------------------------
/src/components/admin/Index.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
数据统计
4 |
5 |
6 |
7 |
8 |
19 |
20 |
22 |
--------------------------------------------------------------------------------
/src/assets/static/css/background_image.css:
--------------------------------------------------------------------------------
1 | /*背景图*/
2 |
3 | #background_image {
4 | position: absolute;
5 | width: 100%;
6 | height: 100%;
7 | top: 0;
8 | left: 0;
9 | overflow-y: auto;
10 | background-size: 20px 20px;
11 | background-image: linear-gradient( 90deg, rgba(37, 82, 110, 0.1) 1px, transparent 0), linear-gradient(180deg, rgba(37, 82, 110, 0.1) 1px, transparent 0);
12 | }
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # vuepro
2 |
3 | > A Vue.js project
4 |
5 | ## Build Setup
6 |
7 | ``` bash
8 | # install dependencies
9 | npm install
10 |
11 | # serve with hot reload at localhost:8080
12 | npm run dev
13 |
14 | # build for production with minification
15 | npm run build
16 |
17 | # build for production and view the bundle analyzer report
18 | npm run build --report
19 | ```
20 |
21 | For a detailed explanation on how things work, check out the [guide](http://vuejs-templates.github.io/webpack/) and [docs for vue-loader](http://vuejs.github.io/vue-loader).
22 |
--------------------------------------------------------------------------------
/src/App.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
31 |
32 |
43 |
--------------------------------------------------------------------------------
/src/assets/static/js/time.js:
--------------------------------------------------------------------------------
1 | export function formatDate(date, fmt) {
2 | if (/(y+)/.test(fmt)) {
3 | fmt = fmt.replace(
4 | RegExp.$1,
5 | (date.getFullYear() + "").substr(4 - RegExp.$1.length)
6 | );
7 | }
8 | let o = {
9 | "M+": date.getMonth() + 1,
10 | "d+": date.getDate(),
11 | "h+": date.getHours(),
12 | "m+": date.getMinutes(),
13 | "s+": date.getSeconds()
14 | };
15 | for (let k in o) {
16 | if (new RegExp(`(${k})`).test(fmt)) {
17 | let str = o[k] + "";
18 | fmt = fmt.replace(
19 | RegExp.$1,
20 | RegExp.$1.length === 1 ? str : padLeftZero(str)
21 | );
22 | }
23 | }
24 | return fmt;
25 | }
26 |
27 | function padLeftZero(str) {
28 | return ("00" + str).substr(str.length);
29 | }
--------------------------------------------------------------------------------
/src/main.js:
--------------------------------------------------------------------------------
1 | import Vue from 'vue'
2 | import App from './App'
3 | import router from './router'
4 | import ElementUI from 'element-ui' // 引入element-ui 所有组件
5 | import 'element-ui/lib/theme-chalk/index.css' // 引入element-ui CSS样式
6 | import axios from '../node_modules/axios'
7 |
8 | import Router from 'vue-router'; //如果已引用,不需要重复引用
9 | const VueRouterPush = Router.prototype.push
10 | Router.prototype.push = function push(to) {
11 | return VueRouterPush.call(this, to).catch(err => err)
12 | }
13 | import mavonEditor from 'mavon-editor' // 引入markdown 所有组件
14 | import 'mavon-editor/dist/css/index.css'
15 |
16 |
17 |
18 |
19 | Vue.prototype.$axios = axios;
20 | Vue.config.productionTip = false
21 |
22 | Vue.use(ElementUI); // 在vue脚手架中使用ElementUI
23 | Vue.use(mavonEditor) // markdown 挂在到全局
24 | // Vue.use(router)
25 |
26 | /* eslint-disable no-new */
27 | new Vue({
28 | el: '#app',
29 | router,
30 | components: { App },
31 | template: ''
32 | })
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "vuepro",
3 | "version": "1.0.0",
4 | "description": "A Vue.js project",
5 | "author": "Lz12 <212225353@qq.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 | "axios": "^0.19.2",
14 | "element-ui": "^2.13.1",
15 | "mavon-editor": "^2.9.0",
16 | "vue": "^2.5.2",
17 | "vue-router": "^3.0.1"
18 | },
19 | "devDependencies": {
20 | "autoprefixer": "^7.1.2",
21 | "babel-core": "^6.22.1",
22 | "babel-helper-vue-jsx-merge-props": "^2.0.3",
23 | "babel-loader": "^7.1.1",
24 | "babel-plugin-syntax-jsx": "^6.18.0",
25 | "babel-plugin-transform-runtime": "^6.22.0",
26 | "babel-plugin-transform-vue-jsx": "^3.5.0",
27 | "babel-preset-env": "^1.3.2",
28 | "babel-preset-stage-2": "^6.22.0",
29 | "chalk": "^2.0.1",
30 | "copy-webpack-plugin": "^4.0.1",
31 | "css-loader": "^0.28.0",
32 | "extract-text-webpack-plugin": "^3.0.0",
33 | "file-loader": "^1.1.4",
34 | "friendly-errors-webpack-plugin": "^1.6.1",
35 | "html-webpack-plugin": "^2.30.1",
36 | "node-notifier": "^5.1.2",
37 | "optimize-css-assets-webpack-plugin": "^3.2.0",
38 | "ora": "^1.2.0",
39 | "portfinder": "^1.0.13",
40 | "postcss-import": "^11.0.0",
41 | "postcss-loader": "^2.0.8",
42 | "postcss-url": "^7.2.1",
43 | "rimraf": "^2.6.0",
44 | "semver": "^5.3.0",
45 | "shelljs": "^0.7.6",
46 | "uglifyjs-webpack-plugin": "^1.1.1",
47 | "url-loader": "^0.5.8",
48 | "vue-loader": "^13.3.0",
49 | "vue-style-loader": "^3.0.1",
50 | "vue-template-compiler": "^2.5.2",
51 | "webpack": "^3.6.0",
52 | "webpack-bundle-analyzer": "^2.9.0",
53 | "webpack-dev-server": "^2.9.1",
54 | "webpack-merge": "^4.1.0"
55 | },
56 | "engines": {
57 | "node": ">= 6.0.0",
58 | "npm": ">= 3.0.0"
59 | },
60 | "browserslist": [
61 | "> 1%",
62 | "last 2 versions",
63 | "not ie <= 8"
64 | ]
65 | }
66 |
--------------------------------------------------------------------------------
/src/components/Template.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
Lz12Code
10 |
11 | 首页
12 | 归档
13 | 统计
14 | 友链
15 | 关于
16 | 后台登录
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
55 |
56 |
59 |
--------------------------------------------------------------------------------
/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 |
--------------------------------------------------------------------------------
/src/router/index.js:
--------------------------------------------------------------------------------
1 | import Vue from 'vue'
2 | import Router from 'vue-router'
3 | // import Home from '@/components/Home' // 引入组件
4 |
5 | /*后台*/
6 | import Admin from '@/components/admin/Admin' // 后台管理模板
7 | import Index from '@/components/admin/Index' // 数据统计
8 | import Page from '@/components/admin/Page' // 页面管理
9 | import Publish from '@/components/admin/Publish' // 发布文章
10 | import Article from '@/components/admin/Article' // 文章管理
11 | import Label from '@/components/admin/Label' // 标签
12 | import File from '@/components/admin/File' // 文件管理
13 | import Linkz from '@/components/admin/Linkz' // 友链
14 | import Settings from '@/components/admin/Settings' // 系统设置
15 | /*前台*/
16 | import Template from '@/components/Template' // 首页模板
17 | import Home from '@/components/front/Home' // 首页
18 | import About from '@/components/front/About' // 关于
19 | import Login from '@/components/front/Login' // 后台登录
20 | import Archives from '@/components/front/Archives' // 归档
21 | import Links from '@/components/front/Links' // 友链
22 | import Laboratory from '@/components/front/Laboratory' // 统计
23 |
24 |
25 | Vue.use(Router)
26 |
27 | export default new Router({
28 | routes: [{
29 | // 前台展示页面
30 | path: '/',
31 | name: 'template',
32 | component: Template,
33 | redirect: '/',
34 | children: [
35 | { path: '/', name: 'home', component: Home },
36 | { path: '/about', name: 'about', component: About },
37 | { path: '/archives', name: 'archives', component: Archives },
38 | { path: '/link', name: 'link', component: Links },
39 | { path: '/laboratory', name: 'laboratory', component: Laboratory },
40 | ]
41 |
42 | },
43 |
44 | // 后台登录
45 | { path: '/login', name: 'login', component: Login },
46 |
47 |
48 | { // 后台页面管理
49 | path: '/admin',
50 | name: 'admin',
51 | component: Admin,
52 | redirect: '/admin/index',
53 | children: [
54 | { path: '/admin/index', name: 'index', component: Index },
55 | { path: '/admin/page', name: 'page', component: Page },
56 | { path: '/admin/publish', name: 'publish', component: Publish },
57 | { path: '/admin/article', name: 'article', component: Article },
58 | { path: '/admin/file', name: 'file', component: File },
59 | { path: '/admin/label', name: 'label', component: Label },
60 | { path: '/admin/linkz', name: 'linkz', component: Linkz },
61 | { path: '/admin/settings', name: 'settings', component: Settings },
62 | ]
63 | },
64 |
65 | ]
66 | })
--------------------------------------------------------------------------------
/src/components/front/Login.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | 系统登录
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
19 |
20 |
21 |
22 |
23 |
24 |
30 |
31 |
32 |
33 | 登录
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
84 |
85 |
105 |
--------------------------------------------------------------------------------
/src/components/admin/Admin.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
11 |
12 |
13 | 博客后台管理
14 |
15 |
16 |
17 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
97 |
98 |
135 |
--------------------------------------------------------------------------------
/src/assets/static/css/home.css:
--------------------------------------------------------------------------------
1 | /*头部布局*/
2 |
3 | .container {
4 | width: 100%;
5 | padding-right: 15px;
6 | padding-left: 15px;
7 | margin-right: auto;
8 | margin-left: auto;
9 | max-width: 1000px;
10 | }
11 |
12 | .shadow-sm {
13 | box-shadow: 0 .125rem .25rem rgba(0, 0, 0, .075)!important;
14 | }
15 |
16 | .bg-white {
17 | background-color: #fff!important;
18 | }
19 |
20 | .navbar {
21 | position: relative;
22 | padding: .5rem 1rem;
23 | }
24 |
25 | .navbar-brand {
26 | display: inline-block;
27 | padding-top: .3rem;
28 | padding-bottom: .3rem;
29 | /* margin-right: 1rem; */
30 | font-size: 1.25rem;
31 | line-height: inherit;
32 | white-space: nowrap;
33 | }
34 |
35 | a {
36 | color: #3490dc;
37 | text-decoration: none;
38 | background-color: transparent;
39 | }
40 |
41 | element.style {
42 | font-family: Nunito;
43 | font-weight: bold;
44 | font-size: 1.5rem;
45 | }
46 |
47 |
48 | /*正文界面整体布局*/
49 |
50 | .el-main {
51 | padding: 15px 15px 15px 0px;
52 | }
53 |
54 |
55 | /*轮播图*/
56 |
57 | .carousel-caption {
58 | position: absolute;
59 | right: 0;
60 | bottom: 0;
61 | left: 0;
62 | z-index: 10;
63 | text-align: left;
64 | padding: 10px;
65 | margin-right: 100px;
66 | overflow: hidden;
67 | text-overflow: ellipsis;
68 | white-space: nowrap;
69 | color: #fff;
70 | font-size: 16px;
71 | }
72 |
73 | .item img {
74 | width: auto;
75 | height: auto;
76 | max-width: 100%;
77 | max-height: 100%;
78 | }
79 |
80 | .carousel-bg {
81 | position: absolute;
82 | right: 0;
83 | bottom: 0;
84 | left: 0;
85 | height: 40px;
86 | z-index: 9;
87 | background-color: #000;
88 | filter: alpha(opacity=70);
89 | opacity: .7;
90 | }
91 |
92 |
93 | /*文章样式*/
94 |
95 | .excerpt-one {
96 | position: relative;
97 | }
98 |
99 | .excerpt {
100 | border-bottom: 1px solid #eee;
101 | position: relative;
102 | overflow: hidden;
103 | padding: 25px;
104 | margin-top: 25px;
105 | }
106 |
107 | .excerpt h2 {
108 | display: inline;
109 | font-size: 20px;
110 | margin: 0;
111 | font-weight: 400;
112 | position: relative;
113 | top: 1px;
114 | line-height: 25px;
115 | margin-left: 10px;
116 | }
117 |
118 |
119 | /*鼠标悬浮字体颜色渐变*/
120 |
121 | .excerpt h2 a {
122 | -moz-transition: all 1s ease;
123 | -webkit-transition: all 1s ease;
124 | transition: all 1s ease;
125 | color: #444;
126 | }
127 |
128 | .excerpt h2 a:hover {
129 | /* color: #FF5E52; */
130 | color: #0d6cbf;
131 | }
132 |
133 | .excerpt header .label {
134 | margin-right: 5px;
135 | position: relative;
136 | top: -2px;
137 | }
138 |
139 | .label {
140 | position: relative;
141 | display: inline-block;
142 | padding: 5px 7px;
143 | font-size: 12px;
144 | line-height: 14px;
145 | color: #ffffff;
146 | vertical-align: baseline;
147 | white-space: nowrap;
148 | /* background-color: #FF5E52; */
149 | background-color: #0d6cbf;
150 | }
151 |
152 | .label .label-arrow {
153 | top: 7px;
154 | right: -4px;
155 | /* border-left: 4px solid #FF5E52; */
156 | border-left: 4px solid #0d6cbf;
157 | border-top: 4px solid transparent;
158 | border-bottom: 4px solid transparent;
159 | }
160 |
161 | .label-arrow {
162 | position: absolute;
163 | width: 0;
164 | height: 0;
165 | vertical-align: top;
166 | content: "";
167 | }
168 |
169 | .excerpt .text-muted {
170 | font-size: 12px;
171 | }
172 |
173 | .text-muted {
174 | color: #999;
175 | }
176 |
177 | p {
178 | display: block;
179 | margin-block-start: 1em;
180 | margin-block-end: 1em;
181 | margin-inline-start: 0px;
182 | margin-inline-end: 0px;
183 | }
184 |
185 | .excerpt .note {
186 | color: #777;
187 | font-size: 14px;
188 | line-height: 22px;
189 | margin-bottom: 10px;
190 | }
191 |
192 | .excerpt-one .note {
193 | margin-top: 6px;
194 | padding-right: 15px;
195 | margin-right: 25.3%;
196 | }
197 |
198 | .excerpt p {
199 | margin-bottom: 0;
200 | }
201 |
202 | span {
203 | margin: 0 0 10px;
204 | margin-top: 10px;
205 | }
206 |
207 |
208 | /*文章封面*/
209 |
210 | .excerpt-one .focus {
211 | float: right;
212 | width: 25.3%;
213 | margin-top: 0;
214 | margin-right: 0;
215 | }
216 |
217 | .excerpt .focus {
218 | position: relative;
219 | margin: 10px -6px 0 0;
220 | overflow: hidden;
221 | }
222 |
223 | .focus .thumbnail .thumb {
224 | height: 132px;
225 | }
226 |
227 | .thumbnail .thumb {
228 | max-width: 240px;
229 | width: 100%;
230 | max-height: 132px;
231 | }
232 |
233 | img {
234 | vertical-align: middle;
235 | max-width: 100%;
236 | }
237 |
238 | img {
239 | border: 0;
240 | }
241 |
242 |
243 | /*文章预览 只显示5行
244 | 这里注意:
245 | 在拿到后端返回的文章内容时 预览内容只需要文章内容的前几行 并不是把全部文章都渲染
246 | 也就是说后端给的内容我们需要截断后在进行渲染 截断的部分如果超出预览框就以...显示
247 | 这只是文章的列表提供了预览文章内容 想要查看文章需要点击文章标题进入文章详情页查看
248 | */
249 |
250 | .excerpt .note {
251 | color: #777;
252 | font-size: 14px;
253 | line-height: 22px;
254 | margin-bottom: 10px;
255 | display: -webkit-box;
256 | -webkit-box-orient: vertical;
257 | -webkit-line-clamp: 5;
258 | overflow: hidden;
259 | }
260 |
261 | .excerpt-one .note {
262 | margin-top: 6px;
263 | padding-right: 15px;
264 | }
265 |
266 |
267 | /*阅读 评论 标签*/
268 |
269 | .excerpt .views>span,
270 | .excerpt .views>a {
271 | margin-right: 20px;
272 | }
273 |
274 |
275 | /*右侧侧边栏*/
276 |
277 | .sidebar {
278 | background-color: #74ffb2;
279 | width: 100%;
280 | height: 300px;
281 | margin-top: 30px;
282 | }
--------------------------------------------------------------------------------
/src/components/admin/label.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 | 分类
4 |
5 |
6 |
7 | 添加分类
8 |
9 |
10 |
11 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
39 |
40 |
41 |
42 |
43 |
44 | {{scope.row.create_time | formatDate}}
45 |
46 |
47 |
48 |
49 | {{scope.row.update_time | formatDate}}
50 |
51 |
52 |
53 |
54 |
55 | 删除
56 | 编辑
61 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
203 |
204 |
206 |
--------------------------------------------------------------------------------
/src/components/front/Home.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
44 |
45 | {{article.article_author}} 发布于
48 | {{article.article_release_time}}
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 | {{article.article_content}}
59 |
60 | 阅读({{article.article_views}})
61 |
62 |
63 | 标签:
64 | {{tag.tag}} /
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
185 |
186 |
191 |
--------------------------------------------------------------------------------
/src/components/admin/article.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | 文章管理
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 | {{scope.row.tag_name}}
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 | {{scope.row.create_time | formatDate}}
44 |
45 |
46 |
47 |
48 |
49 | {{scope.row.update_time | formatDate}}
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 | 删除
75 | 编辑
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 |
84 |
85 |
94 |
95 |
96 |
97 |
98 |
99 |
100 |
101 |
209 |
210 |
218 |
--------------------------------------------------------------------------------
/src/components/admin/Publish.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | 发布文章
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
21 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
48 | 上传文章封面图
49 | 只能上传jpg/png文件,且不超过500kb
50 |
51 |
52 |
64 |
65 |
66 |
67 |
74 |
75 |
76 |
77 |
78 |
79 | 文章发布
80 | 保存草稿
81 |
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
264 |
265 |
276 |
--------------------------------------------------------------------------------