├── static
└── .gitkeep
├── server
├── init.js
├── static
│ └── .gitkeep
├── favicon.ico
├── utils
│ ├── auth-required.js
│ ├── locals.js
│ ├── time.js
│ ├── mailer.js
│ ├── logger.js
│ └── hbs-helper.js
├── models
│ ├── blog
│ │ ├── tags.js
│ │ ├── users.js
│ │ ├── messages.js
│ │ └── articles.js
│ ├── comment.js
│ ├── post.js
│ └── user.js
├── routes
│ ├── index.js
│ ├── messages.js
│ └── articles.js
└── server.js
├── src
├── assets
│ ├── theme
│ │ ├── theme-darkblue
│ │ │ ├── submenu.css
│ │ │ ├── button-group.css
│ │ │ ├── form-item.css
│ │ │ ├── menu-item.css
│ │ │ ├── radio-button.css
│ │ │ ├── radio-group.css
│ │ │ ├── tab-pane.css
│ │ │ ├── breadcrumb-item.css
│ │ │ ├── checkbox-group.css
│ │ │ ├── collapse-item.css
│ │ │ ├── dropdown-item.css
│ │ │ ├── dropdown-menu.css
│ │ │ ├── menu-item-group.css
│ │ │ ├── fonts
│ │ │ │ ├── element-icons.ttf
│ │ │ │ └── element-icons.woff
│ │ │ ├── steps.css
│ │ │ ├── option-group.css
│ │ │ ├── card.css
│ │ │ ├── rate.css
│ │ │ ├── spinner.css
│ │ │ ├── badge.css
│ │ │ ├── carousel-item.css
│ │ │ ├── option.css
│ │ │ ├── row.css
│ │ │ ├── collapse.css
│ │ │ ├── breadcrumb.css
│ │ │ ├── scrollbar.css
│ │ │ ├── alert.css
│ │ │ ├── select-dropdown.css
│ │ │ ├── loading.css
│ │ │ ├── message.css
│ │ │ ├── notification.css
│ │ │ ├── dialog.css
│ │ │ ├── form.css
│ │ │ ├── tree.css
│ │ │ ├── tag.css
│ │ │ ├── carousel.css
│ │ │ ├── progress.css
│ │ │ ├── switch.css
│ │ │ ├── popover.css
│ │ │ ├── icon.css
│ │ │ ├── step.css
│ │ │ ├── tooltip.css
│ │ │ ├── checkbox.css
│ │ │ └── reset.css
│ │ └── theme-green
│ │ │ ├── form-item.css
│ │ │ ├── menu-item.css
│ │ │ ├── submenu.css
│ │ │ ├── tab-pane.css
│ │ │ ├── breadcrumb-item.css
│ │ │ ├── button-group.css
│ │ │ ├── checkbox-group.css
│ │ │ ├── collapse-item.css
│ │ │ ├── dropdown-item.css
│ │ │ ├── dropdown-menu.css
│ │ │ ├── menu-item-group.css
│ │ │ ├── radio-button.css
│ │ │ ├── radio-group.css
│ │ │ ├── fonts
│ │ │ ├── element-icons.ttf
│ │ │ └── element-icons.woff
│ │ │ ├── steps.css
│ │ │ ├── option-group.css
│ │ │ ├── card.css
│ │ │ ├── rate.css
│ │ │ ├── spinner.css
│ │ │ ├── badge.css
│ │ │ ├── carousel-item.css
│ │ │ ├── option.css
│ │ │ ├── row.css
│ │ │ ├── collapse.css
│ │ │ ├── breadcrumb.css
│ │ │ ├── scrollbar.css
│ │ │ ├── alert.css
│ │ │ ├── select-dropdown.css
│ │ │ ├── loading.css
│ │ │ ├── message.css
│ │ │ ├── notification.css
│ │ │ ├── dialog.css
│ │ │ ├── form.css
│ │ │ ├── tree.css
│ │ │ ├── tag.css
│ │ │ ├── carousel.css
│ │ │ ├── progress.css
│ │ │ ├── switch.css
│ │ │ ├── popover.css
│ │ │ ├── icon.css
│ │ │ ├── step.css
│ │ │ ├── tooltip.css
│ │ │ ├── checkbox.css
│ │ │ └── reset.css
│ ├── bg1.jpg
│ ├── card.jpg
│ ├── logo.png
│ ├── logo4.png
│ ├── user.png
│ ├── xiyang.gif
│ ├── bingguo.jpg
│ ├── favicon.ico
│ └── images
│ │ ├── bg1.jpg
│ │ ├── bg6.jpg
│ │ ├── bg7.jpg
│ │ ├── card.jpg
│ │ ├── dq.jpg
│ │ ├── border.png
│ │ ├── dahai.jpg
│ │ ├── dahai1.jpg
│ │ ├── icons.png
│ │ ├── xiyang.gif
│ │ ├── bingguo.jpg
│ │ ├── border1.png
│ │ ├── border2.png
│ │ ├── controls.png
│ │ ├── favicon.ico
│ │ ├── loading.gif
│ │ ├── login-bg.jpg
│ │ ├── overlay.png
│ │ ├── pattern.jpg
│ │ ├── pattern.png
│ │ ├── pattern1.jpg
│ │ ├── sort_asc.png
│ │ ├── sort_both.png
│ │ ├── sort_desc.png
│ │ ├── spritemap.png
│ │ ├── login-cloud.png
│ │ ├── meteorshower1.jpg
│ │ ├── meteorshower2.jpg
│ │ ├── spritemap@2x.png
│ │ ├── ie6
│ │ ├── borderTopCenter.png
│ │ ├── borderTopLeft.png
│ │ ├── borderTopRight.png
│ │ ├── borderBottomLeft.png
│ │ ├── borderBottomRight.png
│ │ ├── borderMiddleLeft.png
│ │ ├── borderMiddleRight.png
│ │ └── borderBottomCenter.png
│ │ ├── loading_background.png
│ │ ├── sort_asc_disabled.png
│ │ └── sort_desc_disabled.png
├── api
│ ├── index.js
│ └── api.js
├── mock
│ ├── index.js
│ └── data
│ │ └── user.js
├── images
│ ├── mac.png
│ ├── cat.jpeg
│ ├── cloud.png
│ ├── banner.jpeg
│ ├── favicon.ico
│ └── default-avatar.jpeg
├── vuex
│ ├── getters.js
│ ├── actions.js
│ └── store.js
├── views
│ ├── demo
│ │ ├── components
│ │ │ ├── nav2
│ │ │ │ ├── Page5.vue
│ │ │ │ └── Page4.vue
│ │ │ ├── nav3
│ │ │ │ └── Page6.vue
│ │ │ ├── sys
│ │ │ │ ├── Log.vue
│ │ │ │ ├── AccessMon.vue
│ │ │ │ ├── User.vue
│ │ │ │ ├── Permission.vue
│ │ │ │ ├── Menu.vue
│ │ │ │ ├── DataMon.vue
│ │ │ │ └── Bridge.vue
│ │ │ ├── 404.vue
│ │ │ └── nav1
│ │ │ │ ├── Main.vue
│ │ │ │ ├── user.vue
│ │ │ │ └── Form.vue
│ │ ├── index.js
│ │ └── app.vue
│ ├── blog
│ │ ├── components
│ │ │ ├── sideSection.vue
│ │ │ ├── Footer.vue
│ │ │ ├── About.vue
│ │ │ ├── Header.vue
│ │ │ ├── runTime.vue
│ │ │ └── articleList.vue
│ │ ├── app.vue
│ │ ├── router
│ │ │ └── index.js
│ │ └── index.js
│ ├── error.html
│ ├── 404.vue
│ ├── test
│ │ ├── router
│ │ │ └── index.js
│ │ ├── main.js
│ │ ├── App.vue
│ │ └── components
│ │ │ └── HelloWorld.vue
│ ├── index.html
│ └── blogadmin
│ │ ├── app.vue
│ │ ├── router
│ │ └── index.js
│ │ ├── index.js
│ │ └── components
│ │ ├── loading.vue
│ │ └── admin.vue
├── javascripts
│ ├── common.js
│ ├── posts.js
│ ├── admin-post.js
│ ├── unique.js
│ ├── home-post.js
│ ├── runTime.js
│ ├── account.js
│ └── util.js
├── router
│ ├── qims-routes.js
│ ├── index.js
│ ├── test-router.js
│ └── blog-routes.js
└── styles
│ ├── side.css
│ ├── admin.css
│ ├── container.css
│ ├── account.css
│ ├── global.css
│ ├── blog.css
│ ├── index.css
│ ├── article.css
│ └── vars.scss
├── .eslintignore
├── .gitattributes
├── config
├── prod.env.js
├── dev.env.js
└── index.js
├── dist
├── static
│ ├── img
│ │ ├── dq.300298b.jpg
│ │ └── dahai.8ec2694.jpg
│ ├── fonts
│ │ ├── fontello.068ca2b.ttf
│ │ ├── fontello.e73a064.eot
│ │ ├── element-icons.6f0a763.ttf
│ │ ├── fontawesome-webfont.674f50d.eot
│ │ ├── fontawesome-webfont.af7ae50.woff2
│ │ ├── fontawesome-webfont.b06871f.ttf
│ │ └── fontawesome-webfont.fee66e7.woff
│ ├── css
│ │ ├── test.ca5e6e05b6084173f88cf3e1a20ca3b5.css
│ │ └── test.ca5e6e05b6084173f88cf3e1a20ca3b5.css.map
│ └── js
│ │ ├── manifest.0098f8ac3d0979b71c7d.js
│ │ ├── 6.af307ff456dbfe28fccc.js
│ │ ├── 8.9c254b1a97383e9c1acd.js
│ │ ├── 9.a6eca05e6f7b77ec8d5d.js
│ │ ├── blog.faaefe1c9142e1178169.js
│ │ └── blogadmin.16387c43da20612153c5.js
├── index.html
├── blog.html
├── demo.html
├── test.html
└── blogadmin.html
├── .editorconfig
├── .gitignore
├── .babelrc
├── .postcssrc.js
├── index.html
├── multiSpa.iml
├── .eslintrc.js
└── README.md
/static/.gitkeep:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/server/init.js:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/server/static/.gitkeep:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/assets/theme/theme-darkblue/submenu.css:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/assets/theme/theme-green/form-item.css:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/assets/theme/theme-green/menu-item.css:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/assets/theme/theme-green/submenu.css:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/assets/theme/theme-green/tab-pane.css:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/assets/theme/theme-darkblue/button-group.css:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/assets/theme/theme-darkblue/form-item.css:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/assets/theme/theme-darkblue/menu-item.css:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/assets/theme/theme-darkblue/radio-button.css:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/assets/theme/theme-darkblue/radio-group.css:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/assets/theme/theme-darkblue/tab-pane.css:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/assets/theme/theme-green/breadcrumb-item.css:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/assets/theme/theme-green/button-group.css:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/assets/theme/theme-green/checkbox-group.css:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/assets/theme/theme-green/collapse-item.css:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/assets/theme/theme-green/dropdown-item.css:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/assets/theme/theme-green/dropdown-menu.css:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/assets/theme/theme-green/menu-item-group.css:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/assets/theme/theme-green/radio-button.css:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/assets/theme/theme-green/radio-group.css:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/assets/theme/theme-darkblue/breadcrumb-item.css:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/assets/theme/theme-darkblue/checkbox-group.css:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/assets/theme/theme-darkblue/collapse-item.css:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/assets/theme/theme-darkblue/dropdown-item.css:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/assets/theme/theme-darkblue/dropdown-menu.css:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/assets/theme/theme-darkblue/menu-item-group.css:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/.eslintignore:
--------------------------------------------------------------------------------
1 | /build/
2 | /config/
3 | /dist/
4 | /*.js
5 |
--------------------------------------------------------------------------------
/src/api/index.js:
--------------------------------------------------------------------------------
1 | import * as api from './api';
2 |
3 | export default api;
--------------------------------------------------------------------------------
/src/mock/index.js:
--------------------------------------------------------------------------------
1 | import mock from './mock';
2 |
3 | export default mock;
4 |
--------------------------------------------------------------------------------
/.gitattributes:
--------------------------------------------------------------------------------
1 | *.css linguist-language=vue
2 | *.html linguist-language=vue
3 |
--------------------------------------------------------------------------------
/server/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/csuduan/vue-mpa/HEAD/server/favicon.ico
--------------------------------------------------------------------------------
/src/assets/bg1.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/csuduan/vue-mpa/HEAD/src/assets/bg1.jpg
--------------------------------------------------------------------------------
/src/images/mac.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/csuduan/vue-mpa/HEAD/src/images/mac.png
--------------------------------------------------------------------------------
/src/assets/card.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/csuduan/vue-mpa/HEAD/src/assets/card.jpg
--------------------------------------------------------------------------------
/src/assets/logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/csuduan/vue-mpa/HEAD/src/assets/logo.png
--------------------------------------------------------------------------------
/src/assets/logo4.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/csuduan/vue-mpa/HEAD/src/assets/logo4.png
--------------------------------------------------------------------------------
/src/assets/user.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/csuduan/vue-mpa/HEAD/src/assets/user.png
--------------------------------------------------------------------------------
/src/assets/xiyang.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/csuduan/vue-mpa/HEAD/src/assets/xiyang.gif
--------------------------------------------------------------------------------
/src/images/cat.jpeg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/csuduan/vue-mpa/HEAD/src/images/cat.jpeg
--------------------------------------------------------------------------------
/src/images/cloud.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/csuduan/vue-mpa/HEAD/src/images/cloud.png
--------------------------------------------------------------------------------
/config/prod.env.js:
--------------------------------------------------------------------------------
1 | 'use strict'
2 | module.exports = {
3 | NODE_ENV: '"production"'
4 | }
5 |
--------------------------------------------------------------------------------
/src/assets/bingguo.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/csuduan/vue-mpa/HEAD/src/assets/bingguo.jpg
--------------------------------------------------------------------------------
/src/assets/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/csuduan/vue-mpa/HEAD/src/assets/favicon.ico
--------------------------------------------------------------------------------
/src/images/banner.jpeg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/csuduan/vue-mpa/HEAD/src/images/banner.jpeg
--------------------------------------------------------------------------------
/src/images/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/csuduan/vue-mpa/HEAD/src/images/favicon.ico
--------------------------------------------------------------------------------
/src/assets/images/bg1.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/csuduan/vue-mpa/HEAD/src/assets/images/bg1.jpg
--------------------------------------------------------------------------------
/src/assets/images/bg6.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/csuduan/vue-mpa/HEAD/src/assets/images/bg6.jpg
--------------------------------------------------------------------------------
/src/assets/images/bg7.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/csuduan/vue-mpa/HEAD/src/assets/images/bg7.jpg
--------------------------------------------------------------------------------
/src/assets/images/card.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/csuduan/vue-mpa/HEAD/src/assets/images/card.jpg
--------------------------------------------------------------------------------
/src/assets/images/dq.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/csuduan/vue-mpa/HEAD/src/assets/images/dq.jpg
--------------------------------------------------------------------------------
/src/vuex/getters.js:
--------------------------------------------------------------------------------
1 | //test
2 | export const getCount = state => {
3 | return state.count
4 | }
5 |
--------------------------------------------------------------------------------
/src/assets/images/border.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/csuduan/vue-mpa/HEAD/src/assets/images/border.png
--------------------------------------------------------------------------------
/src/assets/images/dahai.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/csuduan/vue-mpa/HEAD/src/assets/images/dahai.jpg
--------------------------------------------------------------------------------
/src/assets/images/dahai1.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/csuduan/vue-mpa/HEAD/src/assets/images/dahai1.jpg
--------------------------------------------------------------------------------
/src/assets/images/icons.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/csuduan/vue-mpa/HEAD/src/assets/images/icons.png
--------------------------------------------------------------------------------
/src/assets/images/xiyang.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/csuduan/vue-mpa/HEAD/src/assets/images/xiyang.gif
--------------------------------------------------------------------------------
/src/views/demo/components/nav2/Page5.vue:
--------------------------------------------------------------------------------
1 |
2 |
4 |
--------------------------------------------------------------------------------
/src/views/demo/components/nav3/Page6.vue:
--------------------------------------------------------------------------------
1 |
2 |
4 |
--------------------------------------------------------------------------------
/dist/static/img/dq.300298b.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/csuduan/vue-mpa/HEAD/dist/static/img/dq.300298b.jpg
--------------------------------------------------------------------------------
/src/assets/images/bingguo.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/csuduan/vue-mpa/HEAD/src/assets/images/bingguo.jpg
--------------------------------------------------------------------------------
/src/assets/images/border1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/csuduan/vue-mpa/HEAD/src/assets/images/border1.png
--------------------------------------------------------------------------------
/src/assets/images/border2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/csuduan/vue-mpa/HEAD/src/assets/images/border2.png
--------------------------------------------------------------------------------
/src/assets/images/controls.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/csuduan/vue-mpa/HEAD/src/assets/images/controls.png
--------------------------------------------------------------------------------
/src/assets/images/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/csuduan/vue-mpa/HEAD/src/assets/images/favicon.ico
--------------------------------------------------------------------------------
/src/assets/images/loading.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/csuduan/vue-mpa/HEAD/src/assets/images/loading.gif
--------------------------------------------------------------------------------
/src/assets/images/login-bg.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/csuduan/vue-mpa/HEAD/src/assets/images/login-bg.jpg
--------------------------------------------------------------------------------
/src/assets/images/overlay.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/csuduan/vue-mpa/HEAD/src/assets/images/overlay.png
--------------------------------------------------------------------------------
/src/assets/images/pattern.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/csuduan/vue-mpa/HEAD/src/assets/images/pattern.jpg
--------------------------------------------------------------------------------
/src/assets/images/pattern.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/csuduan/vue-mpa/HEAD/src/assets/images/pattern.png
--------------------------------------------------------------------------------
/src/assets/images/pattern1.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/csuduan/vue-mpa/HEAD/src/assets/images/pattern1.jpg
--------------------------------------------------------------------------------
/src/assets/images/sort_asc.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/csuduan/vue-mpa/HEAD/src/assets/images/sort_asc.png
--------------------------------------------------------------------------------
/src/assets/images/sort_both.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/csuduan/vue-mpa/HEAD/src/assets/images/sort_both.png
--------------------------------------------------------------------------------
/src/assets/images/sort_desc.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/csuduan/vue-mpa/HEAD/src/assets/images/sort_desc.png
--------------------------------------------------------------------------------
/src/assets/images/spritemap.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/csuduan/vue-mpa/HEAD/src/assets/images/spritemap.png
--------------------------------------------------------------------------------
/src/images/default-avatar.jpeg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/csuduan/vue-mpa/HEAD/src/images/default-avatar.jpeg
--------------------------------------------------------------------------------
/dist/static/img/dahai.8ec2694.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/csuduan/vue-mpa/HEAD/dist/static/img/dahai.8ec2694.jpg
--------------------------------------------------------------------------------
/src/assets/images/login-cloud.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/csuduan/vue-mpa/HEAD/src/assets/images/login-cloud.png
--------------------------------------------------------------------------------
/src/views/demo/components/sys/Log.vue:
--------------------------------------------------------------------------------
1 |
2 | 404 page not found
3 |
--------------------------------------------------------------------------------
/src/assets/images/meteorshower1.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/csuduan/vue-mpa/HEAD/src/assets/images/meteorshower1.jpg
--------------------------------------------------------------------------------
/src/assets/images/meteorshower2.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/csuduan/vue-mpa/HEAD/src/assets/images/meteorshower2.jpg
--------------------------------------------------------------------------------
/src/assets/images/spritemap@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/csuduan/vue-mpa/HEAD/src/assets/images/spritemap@2x.png
--------------------------------------------------------------------------------
/src/views/demo/components/sys/AccessMon.vue:
--------------------------------------------------------------------------------
1 |
2 | 404 page not found
3 |
--------------------------------------------------------------------------------
/src/views/demo/components/sys/User.vue:
--------------------------------------------------------------------------------
1 |
2 | 404 page not found
3 |
--------------------------------------------------------------------------------
/dist/static/fonts/fontello.068ca2b.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/csuduan/vue-mpa/HEAD/dist/static/fonts/fontello.068ca2b.ttf
--------------------------------------------------------------------------------
/dist/static/fonts/fontello.e73a064.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/csuduan/vue-mpa/HEAD/dist/static/fonts/fontello.e73a064.eot
--------------------------------------------------------------------------------
/src/views/demo/components/sys/Permission.vue:
--------------------------------------------------------------------------------
1 |
2 | 404 page not found
3 |
--------------------------------------------------------------------------------
/src/assets/images/ie6/borderTopCenter.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/csuduan/vue-mpa/HEAD/src/assets/images/ie6/borderTopCenter.png
--------------------------------------------------------------------------------
/src/assets/images/ie6/borderTopLeft.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/csuduan/vue-mpa/HEAD/src/assets/images/ie6/borderTopLeft.png
--------------------------------------------------------------------------------
/src/assets/images/ie6/borderTopRight.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/csuduan/vue-mpa/HEAD/src/assets/images/ie6/borderTopRight.png
--------------------------------------------------------------------------------
/src/assets/images/loading_background.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/csuduan/vue-mpa/HEAD/src/assets/images/loading_background.png
--------------------------------------------------------------------------------
/src/assets/images/sort_asc_disabled.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/csuduan/vue-mpa/HEAD/src/assets/images/sort_asc_disabled.png
--------------------------------------------------------------------------------
/src/assets/images/sort_desc_disabled.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/csuduan/vue-mpa/HEAD/src/assets/images/sort_desc_disabled.png
--------------------------------------------------------------------------------
/dist/static/fonts/element-icons.6f0a763.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/csuduan/vue-mpa/HEAD/dist/static/fonts/element-icons.6f0a763.ttf
--------------------------------------------------------------------------------
/src/assets/images/ie6/borderBottomLeft.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/csuduan/vue-mpa/HEAD/src/assets/images/ie6/borderBottomLeft.png
--------------------------------------------------------------------------------
/src/assets/images/ie6/borderBottomRight.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/csuduan/vue-mpa/HEAD/src/assets/images/ie6/borderBottomRight.png
--------------------------------------------------------------------------------
/src/assets/images/ie6/borderMiddleLeft.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/csuduan/vue-mpa/HEAD/src/assets/images/ie6/borderMiddleLeft.png
--------------------------------------------------------------------------------
/src/assets/images/ie6/borderMiddleRight.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/csuduan/vue-mpa/HEAD/src/assets/images/ie6/borderMiddleRight.png
--------------------------------------------------------------------------------
/src/assets/images/ie6/borderBottomCenter.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/csuduan/vue-mpa/HEAD/src/assets/images/ie6/borderBottomCenter.png
--------------------------------------------------------------------------------
/dist/static/fonts/fontawesome-webfont.674f50d.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/csuduan/vue-mpa/HEAD/dist/static/fonts/fontawesome-webfont.674f50d.eot
--------------------------------------------------------------------------------
/dist/static/fonts/fontawesome-webfont.af7ae50.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/csuduan/vue-mpa/HEAD/dist/static/fonts/fontawesome-webfont.af7ae50.woff2
--------------------------------------------------------------------------------
/dist/static/fonts/fontawesome-webfont.b06871f.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/csuduan/vue-mpa/HEAD/dist/static/fonts/fontawesome-webfont.b06871f.ttf
--------------------------------------------------------------------------------
/dist/static/fonts/fontawesome-webfont.fee66e7.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/csuduan/vue-mpa/HEAD/dist/static/fonts/fontawesome-webfont.fee66e7.woff
--------------------------------------------------------------------------------
/src/assets/theme/theme-green/fonts/element-icons.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/csuduan/vue-mpa/HEAD/src/assets/theme/theme-green/fonts/element-icons.ttf
--------------------------------------------------------------------------------
/src/assets/theme/theme-green/fonts/element-icons.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/csuduan/vue-mpa/HEAD/src/assets/theme/theme-green/fonts/element-icons.woff
--------------------------------------------------------------------------------
/src/assets/theme/theme-darkblue/fonts/element-icons.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/csuduan/vue-mpa/HEAD/src/assets/theme/theme-darkblue/fonts/element-icons.ttf
--------------------------------------------------------------------------------
/src/assets/theme/theme-darkblue/fonts/element-icons.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/csuduan/vue-mpa/HEAD/src/assets/theme/theme-darkblue/fonts/element-icons.woff
--------------------------------------------------------------------------------
/src/views/demo/components/sys/Menu.vue:
--------------------------------------------------------------------------------
1 |
2 | 404 page not found
3 |
4 |
--------------------------------------------------------------------------------
/src/vuex/actions.js:
--------------------------------------------------------------------------------
1 | //test
2 | export const increment = ({commit}) => {
3 | commit('INCREMENT')
4 | }
5 | export const decrement = ({commit}) => {
6 | commit('DECREMENT')
7 | }
8 |
--------------------------------------------------------------------------------
/dist/index.html:
--------------------------------------------------------------------------------
1 |
Webpack App
--------------------------------------------------------------------------------
/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 |
--------------------------------------------------------------------------------
/server/utils/auth-required.js:
--------------------------------------------------------------------------------
1 |
2 | module.exports = function (req, res, next) {
3 | if (req.user && req.user.active) return next();
4 |
5 | res.redirect('/account/login?next=' + req.originalUrl);
6 | };
7 |
--------------------------------------------------------------------------------
/src/assets/theme/theme-green/steps.css:
--------------------------------------------------------------------------------
1 | @charset "UTF-8";.el-steps{font-size:0}.el-steps>:last-child .el-step__line{display:none}.el-steps.is-horizontal{white-space:nowrap}.el-steps.is-horizontal.is-center{text-align:center}
--------------------------------------------------------------------------------
/src/javascripts/common.js:
--------------------------------------------------------------------------------
1 | /**
2 | * Created by harttle on 1/8/15.
3 | */
4 |
5 |
6 | marked.setOptions({
7 | highlight: function (code) {
8 | return hljs.highlightAuto(code).value;
9 | }
10 | });
--------------------------------------------------------------------------------
/server/models/blog/tags.js:
--------------------------------------------------------------------------------
1 | var mongoose = require('mongoose')
2 | var schema = mongoose.Schema
3 |
4 | var tagsSchema = new schema({
5 | "name": String,
6 | })
7 |
8 | module.exports = mongoose.model('Tag', tagsSchema)
9 |
--------------------------------------------------------------------------------
/src/assets/theme/theme-darkblue/steps.css:
--------------------------------------------------------------------------------
1 | @charset "UTF-8";.el-steps{font-size:0}.el-steps>:last-child .el-step__line{display:none}.el-steps.is-horizontal{white-space:nowrap}.el-steps.is-horizontal.is-center{text-align:center}
--------------------------------------------------------------------------------
/src/views/blog/components/sideSection.vue:
--------------------------------------------------------------------------------
1 |
2 |
7 |
8 |
--------------------------------------------------------------------------------
/.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/views/error.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | 404
7 |
8 |
9 | {{status}} {{message}}
10 | {{stack}}
11 |
12 |
13 |
--------------------------------------------------------------------------------
/src/views/demo/components/sys/DataMon.vue:
--------------------------------------------------------------------------------
1 |
2 | 数据监控
3 |
4 |
5 |
--------------------------------------------------------------------------------
/src/router/qims-routes.js:
--------------------------------------------------------------------------------
1 | import Login from '../views/qims/Login.vue'
2 |
3 | let routes = [
4 | {
5 | path: '/qims/login',
6 | component: Login,
7 | name: '',
8 | hidden: true
9 | },
10 | ];
11 |
12 | export default routes;
--------------------------------------------------------------------------------
/server/models/blog/users.js:
--------------------------------------------------------------------------------
1 | var mongoose = require('mongoose')
2 | var schema = mongoose.Schema
3 |
4 | var userSchema = new schema({
5 | "userId": String,
6 | "account": String,
7 | "password": String
8 | })
9 |
10 | module.exports = mongoose.model('User', userSchema)
11 |
--------------------------------------------------------------------------------
/src/views/404.vue:
--------------------------------------------------------------------------------
1 |
2 | 404 page not found
3 |
4 |
5 |
--------------------------------------------------------------------------------
/.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/views/demo/components/sys/Bridge.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/server/utils/locals.js:
--------------------------------------------------------------------------------
1 | /**
2 | * Created by harttle on 1/12/15.
3 | */
4 |
5 | var cfg = require('../config');
6 |
7 | module.exports = function (req, res, next) {
8 |
9 | res.locals.req = req;
10 | res.locals.res = res;
11 | res.locals.config = cfg;
12 |
13 | next();
14 | };
--------------------------------------------------------------------------------
/src/javascripts/posts.js:
--------------------------------------------------------------------------------
1 | /**
2 | * Created by harttle on 1/7/15.
3 | */
4 |
5 | function delPost(id) {
6 | $.ajax({
7 | url: '/admin/post/' + id,
8 | type: 'DELETE',
9 | success: function (result) {
10 | location.reload();
11 | }
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/demo/components/404.vue:
--------------------------------------------------------------------------------
1 |
2 | 404 page not found
3 |
4 |
5 |
--------------------------------------------------------------------------------
/src/assets/theme/theme-darkblue/option-group.css:
--------------------------------------------------------------------------------
1 | @charset "UTF-8";.el-select-group{margin:0;padding:0}.el-select-group .el-select-dropdown__item{padding-left:20px}.el-select-group__wrap{list-style:none;margin:0;padding:0}.el-select-group__title{padding-left:10px;font-size:12px;color:#999;height:30px;line-height:30px}
--------------------------------------------------------------------------------
/src/assets/theme/theme-green/option-group.css:
--------------------------------------------------------------------------------
1 | @charset "UTF-8";.el-select-group{margin:0;padding:0}.el-select-group .el-select-dropdown__item{padding-left:20px}.el-select-group__wrap{list-style:none;margin:0;padding:0}.el-select-group__title{padding-left:10px;font-size:12px;color:#999;height:30px;line-height:30px}
--------------------------------------------------------------------------------
/src/views/demo/components/nav1/Main.vue:
--------------------------------------------------------------------------------
1 |
2 |
5 |
6 |
7 |
16 |
17 |
--------------------------------------------------------------------------------
/src/assets/theme/theme-green/card.css:
--------------------------------------------------------------------------------
1 | @charset "UTF-8";.el-card{border:1px solid rgb(209, 229, 227);border-radius:4px;background-color:#fff;overflow:hidden;box-shadow:0 2px 4px 0 rgba(0,0,0,.12),0 0 6px 0 rgba(0,0,0,.04)}.el-card__header{padding:18px 20px;border-bottom:1px solid rgb(209, 229, 227);box-sizing:border-box}.el-card__body{padding:20px}
--------------------------------------------------------------------------------
/src/router/index.js:
--------------------------------------------------------------------------------
1 | import Vue from 'vue'
2 | import Router from 'vue-router'
3 | import HelloWorld from '@/components/HelloWorld'
4 |
5 | Vue.use(Router)
6 |
7 | export default new Router({
8 | routes: [
9 | {
10 | path: '/',
11 | name: 'HelloWorld',
12 | component: HelloWorld
13 | }
14 | ]
15 | })
16 |
--------------------------------------------------------------------------------
/src/assets/theme/theme-darkblue/card.css:
--------------------------------------------------------------------------------
1 | @charset "UTF-8";.el-card{border:1px solid rgb(209, 219, 229);border-radius:4px;background-color:#fff;overflow:hidden;box-shadow:0 2px 4px 0 rgba(0,0,0,.12),0 0 6px 0 rgba(0,0,0,.04)}.el-card__header{padding:18px 20px;border-bottom:1px solid rgb(209, 219, 229);box-sizing:border-box}.el-card__body{padding:20px}
--------------------------------------------------------------------------------
/src/router/test-router.js:
--------------------------------------------------------------------------------
1 | import Vue from 'vue'
2 | import Router from 'vue-router'
3 | import HelloWorld from '@/components/HelloWorld'
4 |
5 | Vue.use(Router)
6 |
7 | export default new Router({
8 | routes: [
9 | {
10 | path: '/',
11 | name: 'HelloWorld',
12 | component: HelloWorld
13 | }
14 | ]
15 | })
16 |
--------------------------------------------------------------------------------
/server/models/blog/messages.js:
--------------------------------------------------------------------------------
1 | var mongoose = require('mongoose')
2 | var schema = mongoose.Schema
3 |
4 | var messageSchema = new schema({
5 | "messageId": String,
6 | "name": String,
7 | "email": String,
8 | "content": String,
9 | "createDate": String
10 | })
11 |
12 | module.exports = mongoose.model('Message', messageSchema)
13 |
--------------------------------------------------------------------------------
/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | <%= htmlWebpackPlugin.options.title %>
7 |
8 |
9 |
10 |
11 |
12 |
13 |
--------------------------------------------------------------------------------
/src/views/test/router/index.js:
--------------------------------------------------------------------------------
1 | import Vue from 'vue'
2 | import Router from 'vue-router'
3 | import HelloWorld from '../components/HelloWorld'
4 |
5 | Vue.use(Router)
6 |
7 | export default new Router({
8 | mode: 'history',
9 | base: '/test/',
10 | routes: [
11 | {
12 | path: '/',
13 | name: 'HelloWorld',
14 | component: HelloWorld
15 | }
16 | ]
17 | })
18 |
--------------------------------------------------------------------------------
/server/models/comment.js:
--------------------------------------------------------------------------------
1 | /**
2 | * Created by harttle on 1/12/15.
3 | */
4 |
5 | var mongoose = require('mongoose');
6 | var Schema = mongoose.Schema;
7 |
8 | var CommentSchema = new Schema({
9 | content: {type: String, required: true},
10 | date: {type: Date, default:Date.now},
11 | author: {type: String, ref: 'User'}
12 | });
13 |
14 | module.exports = mongoose.model('Comment', CommentSchema);
--------------------------------------------------------------------------------
/src/views/test/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 |
7 | Vue.config.productionTip = false
8 |
9 | /* eslint-disable no-new */
10 | new Vue({
11 | el: '#app',
12 | router,
13 | components: { App },
14 | template: ''
15 | })
16 |
--------------------------------------------------------------------------------
/server/models/post.js:
--------------------------------------------------------------------------------
1 | /**
2 | * Created by harttle on 1/5/15.
3 | */
4 |
5 | var mongoose = require('mongoose');
6 | var Schema = mongoose.Schema;
7 |
8 | var PostSchema = new Schema({
9 | title: {type: String, required: true},
10 | content: String,
11 | date: {type: Date, default:Date.now},
12 | author: {type: String, ref: 'User'},
13 | comments: [{type: String, ref: 'Comment'}]
14 | });
15 |
16 | module.exports = mongoose.model('Post', PostSchema);
17 |
--------------------------------------------------------------------------------
/dist/static/css/test.ca5e6e05b6084173f88cf3e1a20ca3b5.css:
--------------------------------------------------------------------------------
1 | #app{font-family:Avenir,Helvetica,Arial,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-align:center;color:#2c3e50;margin-top:60px}h1[data-v-3fccdafc],h2[data-v-3fccdafc]{font-weight:400}ul[data-v-3fccdafc]{list-style-type:none;padding:0}li[data-v-3fccdafc]{display:inline-block;margin:0 10px}a[data-v-3fccdafc]{color:#42b983}
2 | /*# sourceMappingURL=test.ca5e6e05b6084173f88cf3e1a20ca3b5.css.map */
--------------------------------------------------------------------------------
/src/views/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | <%= htmlWebpackPlugin.options.title %>
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
--------------------------------------------------------------------------------
/src/views/test/App.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |

4 |
5 |
6 |
7 |
8 |
13 |
14 |
24 |
--------------------------------------------------------------------------------
/dist/blog.html:
--------------------------------------------------------------------------------
1 | blog
--------------------------------------------------------------------------------
/dist/demo.html:
--------------------------------------------------------------------------------
1 | demo
--------------------------------------------------------------------------------
/dist/test.html:
--------------------------------------------------------------------------------
1 | Webpack App
--------------------------------------------------------------------------------
/src/javascripts/admin-post.js:
--------------------------------------------------------------------------------
1 | /**
2 | * Created by harttle on 1/7/15.
3 | */
4 |
5 | function save(){// validation
6 | if($('#title').val().trim()==='')
7 | return $('.alert-danger').html('标题不能为空').show();
8 | $('form').submit();
9 | }
10 |
11 | $(function(){
12 | if($('body#edit').length === 0) return;
13 |
14 | $('#content').bind('input propertychange', function(){
15 | $('#preview').html(marked($('#content').val()));
16 | });
17 | $('#content').trigger('input');
18 | });
--------------------------------------------------------------------------------
/dist/blogadmin.html:
--------------------------------------------------------------------------------
1 | blogadmin
--------------------------------------------------------------------------------
/src/assets/theme/theme-green/rate.css:
--------------------------------------------------------------------------------
1 | @charset "UTF-8";.el-rate__icon,.el-rate__item{position:relative;display:inline-block}.el-rate{height:20px;line-height:1}.el-rate__item{font-size:0;vertical-align:middle}.el-rate__icon{font-size:18px;margin-right:6px;color:rgb(191, 217, 214);transition:.3s}.el-rate__decimal,.el-rate__icon .path2{position:absolute;top:0;left:0}.el-rate__icon.hover{-ms-transform:scale(1.15);transform:scale(1.15)}.el-rate__decimal{display:inline-block;overflow:hidden}.el-rate__text{font-size:14px;vertical-align:middle}
--------------------------------------------------------------------------------
/src/assets/theme/theme-darkblue/rate.css:
--------------------------------------------------------------------------------
1 | @charset "UTF-8";.el-rate__icon,.el-rate__item{position:relative;display:inline-block}.el-rate{height:20px;line-height:1}.el-rate__item{font-size:0;vertical-align:middle}.el-rate__icon{font-size:18px;margin-right:6px;color:rgb(191, 203, 217);transition:.3s}.el-rate__decimal,.el-rate__icon .path2{position:absolute;top:0;left:0}.el-rate__icon.hover{-ms-transform:scale(1.15);transform:scale(1.15)}.el-rate__decimal{display:inline-block;overflow:hidden}.el-rate__text{font-size:14px;vertical-align:middle}
--------------------------------------------------------------------------------
/src/views/blog/app.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
12 |
13 |
25 |
--------------------------------------------------------------------------------
/src/assets/theme/theme-green/spinner.css:
--------------------------------------------------------------------------------
1 | @charset "UTF-8";.el-time-spinner{width:100%;white-space:nowrap}.el-spinner{display:inline-block;vertical-align:middle}.el-spinner-inner{animation:rotate 2s linear infinite;width:50px;height:50px}.el-spinner-inner .path{stroke:#ececec;stroke-linecap:round;animation:dash 1.5s ease-in-out infinite}@keyframes rotate{100%{transform:rotate(360deg)}}@keyframes dash{0%{stroke-dasharray:1,150;stroke-dashoffset:0}50%{stroke-dasharray:90,150;stroke-dashoffset:-35}100%{stroke-dasharray:90,150;stroke-dashoffset:-124}}
--------------------------------------------------------------------------------
/src/views/blogadmin/app.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
12 |
13 |
25 |
--------------------------------------------------------------------------------
/src/assets/theme/theme-darkblue/spinner.css:
--------------------------------------------------------------------------------
1 | @charset "UTF-8";.el-time-spinner{width:100%;white-space:nowrap}.el-spinner{display:inline-block;vertical-align:middle}.el-spinner-inner{animation:rotate 2s linear infinite;width:50px;height:50px}.el-spinner-inner .path{stroke:#ececec;stroke-linecap:round;animation:dash 1.5s ease-in-out infinite}@keyframes rotate{100%{transform:rotate(360deg)}}@keyframes dash{0%{stroke-dasharray:1,150;stroke-dashoffset:0}50%{stroke-dasharray:90,150;stroke-dashoffset:-35}100%{stroke-dasharray:90,150;stroke-dashoffset:-124}}
--------------------------------------------------------------------------------
/src/vuex/store.js:
--------------------------------------------------------------------------------
1 | import Vue from 'vue'
2 | import Vuex from 'vuex'
3 | import * as actions from './actions'
4 | import * as getters from './getters'
5 |
6 | Vue.use(Vuex)
7 |
8 | // 应用初始状态
9 | const state = {
10 | count: 10
11 | }
12 |
13 | // 定义所需的 mutations
14 | const mutations = {
15 | INCREMENT(state) {
16 | state.count++
17 | },
18 | DECREMENT(state) {
19 | state.count--
20 | }
21 | }
22 |
23 | // 创建 store 实例
24 | export default new Vuex.Store({
25 | actions,
26 | getters,
27 | state,
28 | mutations
29 | })
--------------------------------------------------------------------------------
/src/javascripts/unique.js:
--------------------------------------------------------------------------------
1 | // 数组去重
2 | // export function unique (array) {
3 | // var n = []; //一个新的临时数组
4 | // //遍历当前数组
5 | // for(var i = 0; i < array.length; i++){
6 | // //如果当前数组的第i已经保存进了临时数组,那么跳过,
7 | // //否则把当前项push到临时数组里面
8 | // if (n.indexOf(array[i]) == -1) n.push(array[i]);
9 | // }
10 | // return n;
11 | // }
12 |
13 | // 数组中对象去重
14 | export function unique (arr) {
15 | var unique = {};
16 | arr.forEach(function(a){ unique[ JSON.stringify(a) ] = 1 });
17 | arr= Object.keys(unique).map(function(u){return JSON.parse(u) });
18 | return arr
19 | }
20 |
--------------------------------------------------------------------------------
/src/assets/theme/theme-green/badge.css:
--------------------------------------------------------------------------------
1 | @charset "UTF-8";.el-badge{position:relative;vertical-align:middle;display:inline-block}.el-badge__content{background-color:#ff4949;border-radius:10px;color:#fff;display:inline-block;font-size:12px;height:18px;line-height:18px;padding:0 6px;text-align:center;white-space:nowrap;border:1px solid #fff}.el-badge__content.is-dot{width:8px;height:8px;padding:0;right:0;border-radius:50%}.el-badge__content.is-fixed{top:0;right:10px;position:absolute;-ms-transform:translateY(-50%) translateX(100%);transform:translateY(-50%) translateX(100%)}.el-badge__content.is-fixed.is-dot{right:5px}
--------------------------------------------------------------------------------
/src/assets/theme/theme-darkblue/badge.css:
--------------------------------------------------------------------------------
1 | @charset "UTF-8";.el-badge{position:relative;vertical-align:middle;display:inline-block}.el-badge__content{background-color:#ff4949;border-radius:10px;color:#fff;display:inline-block;font-size:12px;height:18px;line-height:18px;padding:0 6px;text-align:center;white-space:nowrap;border:1px solid #fff}.el-badge__content.is-dot{width:8px;height:8px;padding:0;right:0;border-radius:50%}.el-badge__content.is-fixed{top:0;right:10px;position:absolute;-ms-transform:translateY(-50%) translateX(100%);transform:translateY(-50%) translateX(100%)}.el-badge__content.is-fixed.is-dot{right:5px}
--------------------------------------------------------------------------------
/src/styles/side.css:
--------------------------------------------------------------------------------
1 | .secondary .section {
2 | margin: 0 0 10px 0;
3 | /*padding: 0 0 25px 0;*/
4 | /*border-bottom: 1px solid #ddd;*/
5 | position: relative;
6 | padding: 15px;
7 | }
8 |
9 |
10 | /*.widget {
11 | margin-left: 10px;
12 | margin-right: 10px;
13 | -webkit-transition: all .2s linear;
14 | transition: all .2s linear;
15 | }
16 | .widget:hover {
17 | z-index: 2;
18 | -webkit-box-shadow: 0px 10px 30px rgba(0,0,0,0.1);
19 | box-shadow: 0px 10px 30px rgba(0,0,0,0.1);
20 | -webkit-transform: translate3d(0px,-5px,0);
21 | transform: translate3d(0px,-5px,0);
22 | }*/
23 |
--------------------------------------------------------------------------------
/src/assets/theme/theme-green/carousel-item.css:
--------------------------------------------------------------------------------
1 | @charset "UTF-8";.el-carousel__item,.el-carousel__mask{position:absolute;height:100%;top:0;left:0}.el-carousel__item{width:100%;display:inline-block;transition:.4s ease-in-out;overflow:hidden;z-index:0}.el-carousel__item.is-active{z-index:2}.el-carousel__item--card{width:50%}.el-carousel__item--card.is-in-stage{cursor:pointer;z-index:1}.el-carousel__item--card.is-in-stage.is-hover .el-carousel__mask,.el-carousel__item--card.is-in-stage:hover .el-carousel__mask{opacity:.12}.el-carousel__item--card.is-active{z-index:2}.el-carousel__mask{width:100%;background-color:#fff;opacity:.24;transition:.2s}
--------------------------------------------------------------------------------
/src/assets/theme/theme-darkblue/carousel-item.css:
--------------------------------------------------------------------------------
1 | @charset "UTF-8";.el-carousel__item,.el-carousel__mask{position:absolute;height:100%;top:0;left:0}.el-carousel__item{width:100%;display:inline-block;transition:.4s ease-in-out;overflow:hidden;z-index:0}.el-carousel__item.is-active{z-index:2}.el-carousel__item--card{width:50%}.el-carousel__item--card.is-in-stage{cursor:pointer;z-index:1}.el-carousel__item--card.is-in-stage.is-hover .el-carousel__mask,.el-carousel__item--card.is-in-stage:hover .el-carousel__mask{opacity:.12}.el-carousel__item--card.is-active{z-index:2}.el-carousel__mask{width:100%;background-color:#fff;opacity:.24;transition:.2s}
--------------------------------------------------------------------------------
/src/views/blog/components/Footer.vue:
--------------------------------------------------------------------------------
1 |
2 |
10 |
11 |
12 |
20 |
21 |
32 |
--------------------------------------------------------------------------------
/src/mock/data/user.js:
--------------------------------------------------------------------------------
1 | import Mock from 'mockjs';
2 | const LoginUsers = [
3 | {
4 | id: 1,
5 | username: 'admin',
6 | password: '123456',
7 | avatar: 'https://raw.githubusercontent.com/taylorchen709/markdown-images/master/vueadmin/user.png',
8 | name: '张某某'
9 | }
10 | ];
11 |
12 | const Users = [];
13 |
14 | for (let i = 0; i < 86; i++) {
15 | Users.push(Mock.mock({
16 | id: Mock.Random.guid(),
17 | name: Mock.Random.cname(),
18 | addr: Mock.mock('@county(true)'),
19 | 'age|18-60': 1,
20 | birth: Mock.Random.date(),
21 | sex: Mock.Random.integer(0, 1)
22 | }));
23 | }
24 |
25 | export { LoginUsers, Users };
26 |
--------------------------------------------------------------------------------
/src/assets/theme/theme-darkblue/option.css:
--------------------------------------------------------------------------------
1 | @charset "UTF-8";.el-select-dropdown__item{font-size:14px;padding:8px 10px;position:relative;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;color:rgb(72, 87, 106);height:36px;line-height:1.5;box-sizing:border-box;cursor:pointer}.el-select-dropdown__item.hover{background-color:rgb(228, 232, 241)}.el-select-dropdown__item.selected{color:#fff;background-color:#1d8ce0}.el-select-dropdown__item.selected.hover{background-color:rgb(26, 123, 197)}.el-select-dropdown__item span{line-height:1.5!important}.el-select-dropdown__item.is-disabled{color:rgb(191, 203, 217);cursor:not-allowed}.el-select-dropdown__item.is-disabled:hover{background-color:#fff}
--------------------------------------------------------------------------------
/src/assets/theme/theme-green/option.css:
--------------------------------------------------------------------------------
1 | @charset "UTF-8";.el-select-dropdown__item{font-size:14px;padding:8px 10px;position:relative;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;color:rgb(72, 106, 103);height:36px;line-height:1.5;box-sizing:border-box;cursor:pointer}.el-select-dropdown__item.hover{background-color:rgb(228, 241, 241)}.el-select-dropdown__item.selected{color:#fff;background-color:#18c79c}.el-select-dropdown__item.selected.hover{background-color:rgb(21, 175, 137)}.el-select-dropdown__item span{line-height:1.5!important}.el-select-dropdown__item.is-disabled{color:rgb(191, 217, 214);cursor:not-allowed}.el-select-dropdown__item.is-disabled:hover{background-color:#fff}
--------------------------------------------------------------------------------
/src/styles/admin.css:
--------------------------------------------------------------------------------
1 |
2 | #profile .container, #edit .container, #posts .container {
3 | margin-bottom: 20px;
4 | }
5 |
6 | #profile img.avatar {
7 | height: 65px;
8 | width: 65px;
9 | margin-right: 15px;
10 | }
11 |
12 | #edit #content {
13 | height: 385px;
14 | resize: vertical;
15 | }
16 |
17 | #edit #preview {
18 | border: solid 1px #ccc;
19 | height: 435px;
20 | overflow: auto;
21 | padding: 15px;
22 | }
23 |
24 | #posts .table {
25 | margin-top: 30px;
26 | }
27 |
28 | #posts .table .title {
29 |
30 | }
31 |
32 | #posts .table .date {
33 | width: 300px;
34 | vertical-align: middle;
35 | }
36 |
37 | #posts .table .operation {
38 | width: 100px;
39 | }
--------------------------------------------------------------------------------
/multiSpa.iml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
--------------------------------------------------------------------------------
/src/assets/theme/theme-green/row.css:
--------------------------------------------------------------------------------
1 | @charset "UTF-8";.el-row:after,.el-row:before{display:table;content:""}.el-row:after{clear:both}.el-row{position:relative;box-sizing:border-box}.el-row--flex{display:-ms-flexbox;display:flex}.el-row--flex:after,.el-row--flex:before{display:none}.el-row--flex.is-align-bottom{-ms-flex-align:end;align-items:flex-end}.el-row--flex.is-align-middle{-ms-flex-align:center;align-items:center}.el-row--flex.is-justify-space-around{-ms-flex-pack:distribute;justify-content:space-around}.el-row--flex.is-justify-space-between{-ms-flex-pack:justify;justify-content:space-between}.el-row--flex.is-justify-end{-ms-flex-pack:end;justify-content:flex-end}.el-row--flex.is-justify-center{-ms-flex-pack:center;justify-content:center}
--------------------------------------------------------------------------------
/src/assets/theme/theme-darkblue/row.css:
--------------------------------------------------------------------------------
1 | @charset "UTF-8";.el-row:after,.el-row:before{display:table;content:""}.el-row:after{clear:both}.el-row{position:relative;box-sizing:border-box}.el-row--flex{display:-ms-flexbox;display:flex}.el-row--flex:after,.el-row--flex:before{display:none}.el-row--flex.is-align-bottom{-ms-flex-align:end;align-items:flex-end}.el-row--flex.is-align-middle{-ms-flex-align:center;align-items:center}.el-row--flex.is-justify-space-around{-ms-flex-pack:distribute;justify-content:space-around}.el-row--flex.is-justify-space-between{-ms-flex-pack:justify;justify-content:space-between}.el-row--flex.is-justify-end{-ms-flex-pack:end;justify-content:flex-end}.el-row--flex.is-justify-center{-ms-flex-pack:center;justify-content:center}
--------------------------------------------------------------------------------
/src/styles/container.css:
--------------------------------------------------------------------------------
1 | .container {
2 | max-width: 80%;
3 | margin: 0 auto;
4 | position: relative;
5 | }
6 | .container.full {
7 | max-width: 66%;
8 | }
9 | .container:after {
10 | clear: both;
11 | content: "";
12 | display: table;
13 | }
14 |
15 | @media (max-width: 800px) {
16 | .container {
17 | max-width: 100%!important;
18 | }
19 | .container.full {
20 | max-width: 100%!important;
21 | }
22 | .back-to-top {
23 | display: none;
24 | }
25 | .main-full {
26 | border-radius: 0px!important;
27 | }
28 | .full-content header {
29 | width: 80%!important;
30 | }
31 | .post-content {
32 | width: 80%!important;
33 | margin: 0 auto;
34 | }
35 | }
36 |
--------------------------------------------------------------------------------
/server/models/blog/articles.js:
--------------------------------------------------------------------------------
1 | var mongoose = require('mongoose')
2 | var schema = mongoose.Schema
3 |
4 | var articleSchema = new schema({
5 | "articleId": String,
6 | "title": String,
7 | "tag": String,
8 | "describtion": String,
9 | "createDate": String,
10 | "content": String,
11 | "comment": [
12 | {
13 | "name": String,
14 | "email": String,
15 | "content": String,
16 | "dateTime": String,
17 | "comment_response": [
18 | {
19 | "response_name": String,
20 | "response_email": String,
21 | "response_content": String,
22 | "response_dateTime": String
23 | }
24 | ]
25 | }
26 | ]
27 | })
28 |
29 | module.exports = mongoose.model('Article', articleSchema)
30 |
--------------------------------------------------------------------------------
/server/utils/time.js:
--------------------------------------------------------------------------------
1 | /**
2 | * Created by jacksoft on 17/4/26.
3 | */
4 | Date.prototype.Format = function (fmt) {
5 | var o = {
6 | "M+": this.getMonth() + 1, //月份
7 | "d+": this.getDate(), //日
8 | "h+": this.getHours(), //小时
9 | "m+": this.getMinutes(), //分
10 | "s+": this.getSeconds(), //秒
11 | "q+": Math.floor((this.getMonth() + 3) / 3), //季度
12 | "S": this.getMilliseconds() //毫秒
13 | };
14 | if (/(y+)/.test(fmt)) fmt = fmt.replace(RegExp.$1, (this.getFullYear() + "").substr(4 - RegExp.$1.length));
15 | for (var k in o)
16 | if (new RegExp("(" + k + ")").test(fmt)) fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length)));
17 | return fmt;
18 | }
19 |
20 | module.exports = {};
21 |
--------------------------------------------------------------------------------
/src/javascripts/home-post.js:
--------------------------------------------------------------------------------
1 | /**
2 | * Created by harttle on 1/8/15.
3 | */
4 |
5 | $(function(){
6 | if($('body#post').length === 0) return;
7 |
8 | $('.post-content').each(function(i, ele){
9 | var $ele = $(ele);
10 | $ele.html(marked($ele.find('#content').html()));
11 | });
12 | });
13 |
14 | function comment(){
15 | var content = $('#new-comment').val();
16 | if(content.trim() === ''){
17 | return $('.alert').html('评论不能为空').show();
18 | }
19 | $('#new-comment').val('');
20 |
21 | $.post('', {content: content})
22 | .done(function(){
23 | location.reload();
24 | })
25 | .fail(function(data){
26 | return $('.alert').html('评论失败:'+data).show();
27 | });
28 | }
--------------------------------------------------------------------------------
/src/assets/theme/theme-darkblue/collapse.css:
--------------------------------------------------------------------------------
1 | @charset "UTF-8";.el-collapse{border:1px solid rgb(223, 230, 236);border-radius:0}.el-collapse-item:last-child{margin-bottom:-1px}.el-collapse-item.is-active>.el-collapse-item__header .el-collapse-item__header__arrow{-ms-transform:rotate(90deg);transform:rotate(90deg)}.el-collapse-item__header{height:43px;line-height:43px;padding-left:15px;background-color:#fff;color:rgb(72, 87, 106);cursor:pointer;border-bottom:1px solid rgb(223, 230, 236);font-size:13px}.el-collapse-item__header__arrow{margin-right:8px;transition:transform .3s}.el-collapse-item__wrap{will-change:height;background-color:rgb(250, 253, 254);overflow:hidden;box-sizing:border-box;border-bottom:1px solid rgb(223, 230, 236)}.el-collapse-item__content{padding:10px 15px;font-size:13px;color:rgb(31, 45, 61);line-height:1.769230769230769}
--------------------------------------------------------------------------------
/src/assets/theme/theme-green/collapse.css:
--------------------------------------------------------------------------------
1 | @charset "UTF-8";.el-collapse{border:1px solid rgb(223, 236, 234);border-radius:0}.el-collapse-item:last-child{margin-bottom:-1px}.el-collapse-item.is-active>.el-collapse-item__header .el-collapse-item__header__arrow{-ms-transform:rotate(90deg);transform:rotate(90deg)}.el-collapse-item__header{height:43px;line-height:43px;padding-left:15px;background-color:#fff;color:rgb(72, 106, 103);cursor:pointer;border-bottom:1px solid rgb(223, 236, 234);font-size:13px}.el-collapse-item__header__arrow{margin-right:8px;transition:transform .3s}.el-collapse-item__wrap{will-change:height;background-color:rgb(250, 254, 253);overflow:hidden;box-sizing:border-box;border-bottom:1px solid rgb(223, 236, 234)}.el-collapse-item__content{padding:10px 15px;font-size:13px;color:rgb(31, 61, 57);line-height:1.769230769230769}
--------------------------------------------------------------------------------
/src/assets/theme/theme-darkblue/breadcrumb.css:
--------------------------------------------------------------------------------
1 | @charset "UTF-8";.el-breadcrumb{font-size:13px;line-height:1}.el-breadcrumb:after,.el-breadcrumb:before{display:table;content:""}.el-breadcrumb:after{clear:both}.el-breadcrumb__separator{margin:0 8px;color:rgb(191, 203, 217)}.el-breadcrumb__item{float:left}.el-breadcrumb__item:last-child .el-breadcrumb__item__inner,.el-breadcrumb__item:last-child .el-breadcrumb__item__inner a,.el-breadcrumb__item:last-child .el-breadcrumb__item__inner a:hover,.el-breadcrumb__item:last-child .el-breadcrumb__item__inner:hover{color:rgb(151, 168, 190);cursor:text}.el-breadcrumb__item:last-child .el-breadcrumb__separator{display:none}.el-breadcrumb__item__inner,.el-breadcrumb__item__inner a{transition:color .15s linear;color:rgb(72, 87, 106)}.el-breadcrumb__item__inner a:hover,.el-breadcrumb__item__inner:hover{color:#1d8ce0;cursor:pointer}
--------------------------------------------------------------------------------
/src/assets/theme/theme-green/breadcrumb.css:
--------------------------------------------------------------------------------
1 | @charset "UTF-8";.el-breadcrumb{font-size:13px;line-height:1}.el-breadcrumb:after,.el-breadcrumb:before{display:table;content:""}.el-breadcrumb:after{clear:both}.el-breadcrumb__separator{margin:0 8px;color:rgb(191, 217, 214)}.el-breadcrumb__item{float:left}.el-breadcrumb__item:last-child .el-breadcrumb__item__inner,.el-breadcrumb__item:last-child .el-breadcrumb__item__inner a,.el-breadcrumb__item:last-child .el-breadcrumb__item__inner a:hover,.el-breadcrumb__item:last-child .el-breadcrumb__item__inner:hover{color:rgb(151, 190, 187);cursor:text}.el-breadcrumb__item:last-child .el-breadcrumb__separator{display:none}.el-breadcrumb__item__inner,.el-breadcrumb__item__inner a{transition:color .15s linear;color:rgb(72, 106, 103)}.el-breadcrumb__item__inner a:hover,.el-breadcrumb__item__inner:hover{color:#18c79c;cursor:pointer}
--------------------------------------------------------------------------------
/src/views/demo/components/nav2/Page4.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
vuex 测试
4 | Clicked: {{ getCount }} times
5 |
6 |
7 |
8 |
9 |
10 |
--------------------------------------------------------------------------------
/src/api/api.js:
--------------------------------------------------------------------------------
1 | import axios from 'axios';
2 |
3 | let base = '';
4 |
5 | export const requestLogin = params => {
6 | return axios.post(`${base}/login`, params).then(res => res.data);
7 | };
8 |
9 | export const getUserList = params => { return axios.get(`${base}/user/list`, { params: params }); };
10 |
11 | export const getUserListPage = params => { return axios.get(`${base}/user/listpage`, { params: params }); };
12 |
13 | export const removeUser = params => { return axios.get(`${base}/user/remove`, { params: params }); };
14 |
15 | export const batchRemoveUser = params => { return axios.get(`${base}/user/batchremove`, { params: params }); };
16 |
17 | export const editUser = params => { return axios.get(`${base}/user/edit`, { params: params }); };
18 |
19 | export const addUser = params => { return axios.get(`${base}/user/add`, { params: params }); };
--------------------------------------------------------------------------------
/dist/static/css/test.ca5e6e05b6084173f88cf3e1a20ca3b5.css.map:
--------------------------------------------------------------------------------
1 | {"version":3,"sources":["test.ca5e6e05b6084173f88cf3e1a20ca3b5.css"],"names":[],"mappings":"AACA,KACE,8CAAoD,AACpD,mCAAoC,AACpC,kCAAmC,AACnC,kBAAmB,AACnB,cAAe,AACf,eAAiB,CAClB,AAED,wCACE,eAAoB,CACrB,AACD,oBACE,qBAAsB,AACtB,SAAW,CACZ,AACD,oBACE,qBAAsB,AACtB,aAAe,CAChB,AACD,mBACE,aAAe,CAChB","file":"test.ca5e6e05b6084173f88cf3e1a20ca3b5.css","sourcesContent":["\n#app {\n font-family: 'Avenir', Helvetica, Arial, sans-serif;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n text-align: center;\n color: #2c3e50;\n margin-top: 60px;\n}\n\nh1[data-v-3fccdafc], h2[data-v-3fccdafc] {\n font-weight: normal;\n}\nul[data-v-3fccdafc] {\n list-style-type: none;\n padding: 0;\n}\nli[data-v-3fccdafc] {\n display: inline-block;\n margin: 0 10px;\n}\na[data-v-3fccdafc] {\n color: #42b983;\n}\n"]}
--------------------------------------------------------------------------------
/server/utils/mailer.js:
--------------------------------------------------------------------------------
1 | /**
2 | * Created by harttle on 1/5/15.
3 | */
4 |
5 | var nodemailer = require('nodemailer');
6 | var _ = require('lodash');
7 | var config = require('../config');
8 |
9 | var transporter = nodemailer.createTransport(config.smtp);
10 |
11 | var defaultMail = {
12 | from: '天马营教程 <' + config.smtp.auth.user + '>',
13 | subject: 'test',
14 | //to: 'bar@blurdybloop.com, baz@blurdybloop.com',
15 | //text: 'test text',
16 | html: 'test html'
17 | };
18 |
19 | function sendMail(mail){
20 | mail = _.merge({}, defaultMail, mail);
21 |
22 | transporter.sendMail(mail, function(error, info){
23 | if(error) return console.log('mail sent error', config.smtp, mail, error);
24 | console.log('Message sent: ' + info.response);
25 | });
26 | }
27 |
28 | module.exports = {
29 | send: sendMail
30 | };
31 |
--------------------------------------------------------------------------------
/src/styles/account.css:
--------------------------------------------------------------------------------
1 |
2 | .center-wrapper{
3 | display: table;
4 | text-align: center;
5 | height: 100%;
6 | width: 100%;
7 | }
8 |
9 | .center{
10 | display: table-cell;
11 | vertical-align: middle;
12 | }
13 |
14 | body#login, body#register{
15 | background: #3c3c3c;
16 | }
17 |
18 | #login, #register h3{
19 | color: #ffffff;
20 | margin-bottom: 30px;
21 | }
22 |
23 | #login form{
24 | margin-bottom: 0;
25 | }
26 | #login .operation{
27 | width: 450px;
28 | margin: 0 auto;
29 | text-align: right;
30 | }
31 | #login .alert{
32 | max-width: 400px;
33 | margin-top: 10px;
34 | display: inline-block;
35 | }
36 |
37 | #register form{
38 | max-width: 300px;
39 | margin: 0 auto;
40 | }
41 | #register input{
42 | margin-bottom: 5px;
43 | }
44 | #forgot #username{
45 | width: 300px;
46 | }
47 | #reset form{
48 | width: 400px;
49 | }
--------------------------------------------------------------------------------
/src/assets/theme/theme-green/scrollbar.css:
--------------------------------------------------------------------------------
1 | @charset "UTF-8";.el-scrollbar{overflow:hidden;position:relative}.el-scrollbar:active .el-scrollbar__bar,.el-scrollbar:focus .el-scrollbar__bar,.el-scrollbar:hover .el-scrollbar__bar{opacity:1;transition:opacity 340ms ease-out}.el-scrollbar__wrap{overflow:scroll}.el-scrollbar__wrap--hidden-default::-webkit-scrollbar{width:0;height:0}.el-scrollbar__thumb{position:relative;display:block;width:0;height:0;cursor:pointer;border-radius:inherit;background-color:rgba(151,168,190,.3);transition:.3s background-color}.el-scrollbar__thumb:hover{background-color:rgba(151,168,190,.5)}.el-scrollbar__bar{position:absolute;right:2px;bottom:2px;z-index:1;border-radius:4px;opacity:0;transition:opacity 120ms ease-out}.el-scrollbar__bar.is-horizontal{height:6px;left:2px}.el-scrollbar__bar.is-horizontal>div{height:100%}.el-scrollbar__bar.is-vertical{width:6px;top:2px}.el-scrollbar__bar.is-vertical>div{width:100%}
--------------------------------------------------------------------------------
/.eslintrc.js:
--------------------------------------------------------------------------------
1 | // https://eslint.org/docs/user-guide/configuring
2 |
3 | module.exports = {
4 | root: true,
5 | parserOptions: {
6 | parser: 'babel-eslint'
7 | },
8 | env: {
9 | browser: true,
10 | },
11 | extends: [
12 | // https://github.com/vuejs/eslint-plugin-vue#priority-a-essential-error-prevention
13 | // consider switching to `plugin:vue/strongly-recommended` or `plugin:vue/recommended` for stricter rules.
14 | 'plugin:vue/essential',
15 | // https://github.com/standard/standard/blob/master/docs/RULES-en.md
16 | 'standard'
17 | ],
18 | // required to lint *.vue files
19 | plugins: [
20 | 'vue'
21 | ],
22 | // add your custom rules here
23 | rules: {
24 | // allow async-await
25 | 'generator-star-spacing': 'off',
26 | // allow debugger during development
27 | 'no-debugger': process.env.NODE_ENV === 'production' ? 'error' : 'off'
28 | }
29 | }
30 |
--------------------------------------------------------------------------------
/src/assets/theme/theme-darkblue/scrollbar.css:
--------------------------------------------------------------------------------
1 | @charset "UTF-8";.el-scrollbar{overflow:hidden;position:relative}.el-scrollbar:active .el-scrollbar__bar,.el-scrollbar:focus .el-scrollbar__bar,.el-scrollbar:hover .el-scrollbar__bar{opacity:1;transition:opacity 340ms ease-out}.el-scrollbar__wrap{overflow:scroll}.el-scrollbar__wrap--hidden-default::-webkit-scrollbar{width:0;height:0}.el-scrollbar__thumb{position:relative;display:block;width:0;height:0;cursor:pointer;border-radius:inherit;background-color:rgba(151,168,190,.3);transition:.3s background-color}.el-scrollbar__thumb:hover{background-color:rgba(151,168,190,.5)}.el-scrollbar__bar{position:absolute;right:2px;bottom:2px;z-index:1;border-radius:4px;opacity:0;transition:opacity 120ms ease-out}.el-scrollbar__bar.is-horizontal{height:6px;left:2px}.el-scrollbar__bar.is-horizontal>div{height:100%}.el-scrollbar__bar.is-vertical{width:6px;top:2px}.el-scrollbar__bar.is-vertical>div{width:100%}
--------------------------------------------------------------------------------
/server/routes/index.js:
--------------------------------------------------------------------------------
1 | const articles = require('./articles')
2 | const messages = require('./messages')
3 | const admin = require('./admin')
4 | const config = require('../../config')
5 | const path = require('path')
6 |
7 | module.exports = (app) => {
8 | app.use(articles)
9 | app.use(messages)
10 | app.use(admin)
11 |
12 |
13 |
14 |
15 | app.use('/demo(/*)?', function (req, res) {
16 | console.log("/demo")
17 | res.sendFile(config.build.assetsRoot + '/demo.html')
18 | });
19 |
20 | app.use('/blog(/*)?', function (req, res) {
21 | console.log("/blog")
22 | res.sendFile(config.build.assetsRoot + '/blog.html')
23 | });
24 | app.use('/blogadmin(/*)?', function (req, res) {
25 | console.log("/blogadmin")
26 | res.sendFile(config.build.assetsRoot + '/blogadmin.html')
27 | });
28 |
29 | app.use('/test', function (req, res) {
30 | res.json({message: ' welcome to our api!'});
31 | });
32 |
33 |
34 |
35 | }
36 |
--------------------------------------------------------------------------------
/src/assets/theme/theme-green/alert.css:
--------------------------------------------------------------------------------
1 | @charset "UTF-8";.el-alert{width:100%;padding:8px 16px;margin:0;box-sizing:border-box;border-radius:4px;position:relative;background-color:#fff;overflow:hidden;color:#fff;opacity:1;display:table;transition:opacity .2s}.el-alert .el-alert__description{color:#fff;font-size:12px;margin:5px 0 0}.el-alert--success{background-color:#13ce66}.el-alert--info{background-color:#50bfff}.el-alert--warning{background-color:#f7ba2a}.el-alert--error{background-color:#ff4949}.el-alert__content{display:table-cell;padding:0 8px}.el-alert__icon{font-size:16px;width:16px;display:table-cell;color:#fff;vertical-align:middle}.el-alert__icon.is-big{font-size:28px;width:28px}.el-alert__title{font-size:13px;line-height:18px}.el-alert__title.is-bold{font-weight:700}.el-alert__closebtn{font-size:12px;color:#fff;opacity:1;top:12px;right:15px;position:absolute;cursor:pointer}.el-alert__closebtn.is-customed{font-style:normal;font-size:13px;top:9px}.el-alert-fade-enter,.el-alert-fade-leave-active{opacity:0}
--------------------------------------------------------------------------------
/src/assets/theme/theme-darkblue/alert.css:
--------------------------------------------------------------------------------
1 | @charset "UTF-8";.el-alert{width:100%;padding:8px 16px;margin:0;box-sizing:border-box;border-radius:4px;position:relative;background-color:#fff;overflow:hidden;color:#fff;opacity:1;display:table;transition:opacity .2s}.el-alert .el-alert__description{color:#fff;font-size:12px;margin:5px 0 0}.el-alert--success{background-color:#13ce66}.el-alert--info{background-color:#50bfff}.el-alert--warning{background-color:#f7ba2a}.el-alert--error{background-color:#ff4949}.el-alert__content{display:table-cell;padding:0 8px}.el-alert__icon{font-size:16px;width:16px;display:table-cell;color:#fff;vertical-align:middle}.el-alert__icon.is-big{font-size:28px;width:28px}.el-alert__title{font-size:13px;line-height:18px}.el-alert__title.is-bold{font-weight:700}.el-alert__closebtn{font-size:12px;color:#fff;opacity:1;top:12px;right:15px;position:absolute;cursor:pointer}.el-alert__closebtn.is-customed{font-style:normal;font-size:13px;top:9px}.el-alert-fade-enter,.el-alert-fade-leave-active{opacity:0}
--------------------------------------------------------------------------------
/src/assets/theme/theme-green/select-dropdown.css:
--------------------------------------------------------------------------------
1 | @charset "UTF-8";.el-select-dropdown{position:absolute;z-index:1001;border:1px solid rgb(209, 229, 227);border-radius:2px;background-color:#fff;box-shadow:0 2px 4px rgba(0,0,0,.12),0 0 6px rgba(0,0,0,.04);box-sizing:border-box;margin:5px 0}.el-select-dropdown .el-scrollbar.is-empty .el-select-dropdown__list{padding:0}.el-select-dropdown.is-multiple .el-select-dropdown__item.selected{color:#18c79c;background-color:#fff}.el-select-dropdown.is-multiple .el-select-dropdown__item.selected.hover{background-color:rgb(228, 241, 241)}.el-select-dropdown.is-multiple .el-select-dropdown__item.selected::after{position:absolute;right:10px;font-family:element-icons;content:"\E608";font-size:11px;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.el-select-dropdown__empty{padding:10px 0;margin:0;text-align:center;color:#999;font-size:14px}.el-select-dropdown__wrap{max-height:274px}.el-select-dropdown__list{list-style:none;padding:6px 0;margin:0;box-sizing:border-box}
--------------------------------------------------------------------------------
/src/assets/theme/theme-darkblue/select-dropdown.css:
--------------------------------------------------------------------------------
1 | @charset "UTF-8";.el-select-dropdown{position:absolute;z-index:1001;border:1px solid rgb(209, 219, 229);border-radius:2px;background-color:#fff;box-shadow:0 2px 4px rgba(0,0,0,.12),0 0 6px rgba(0,0,0,.04);box-sizing:border-box;margin:5px 0}.el-select-dropdown .el-scrollbar.is-empty .el-select-dropdown__list{padding:0}.el-select-dropdown.is-multiple .el-select-dropdown__item.selected{color:#1d8ce0;background-color:#fff}.el-select-dropdown.is-multiple .el-select-dropdown__item.selected.hover{background-color:rgb(228, 232, 241)}.el-select-dropdown.is-multiple .el-select-dropdown__item.selected::after{position:absolute;right:10px;font-family:element-icons;content:"\E608";font-size:11px;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.el-select-dropdown__empty{padding:10px 0;margin:0;text-align:center;color:#999;font-size:14px}.el-select-dropdown__wrap{max-height:274px}.el-select-dropdown__list{list-style:none;padding:6px 0;margin:0;box-sizing:border-box}
--------------------------------------------------------------------------------
/src/assets/theme/theme-darkblue/loading.css:
--------------------------------------------------------------------------------
1 | @charset "UTF-8";.el-loading-mask{position:absolute;z-index:10000;background-color:rgba(255,255,255,.9);margin:0;top:0;right:0;bottom:0;left:0;transition:opacity .3s}.el-loading-mask.is-fullscreen{position:fixed}.el-loading-mask.is-fullscreen .el-loading-spinner{margin-top:-25px}.el-loading-mask.is-fullscreen .el-loading-spinner .circular{width:50px;height:50px}.el-loading-spinner{top:50%;margin-top:-21px;width:100%;text-align:center;position:absolute}.el-loading-spinner .el-loading-text{color:#1d8ce0;margin:3px 0;font-size:14px}.el-loading-spinner .circular{width:42px;height:42px;animation:loading-rotate 2s linear infinite}.el-loading-spinner .path{animation:loading-dash 1.5s ease-in-out infinite;stroke-dasharray:90,150;stroke-dashoffset:0;stroke-width:2;stroke:#1d8ce0;stroke-linecap:round}.el-loading-fade-enter,.el-loading-fade-leave-active{opacity:0}@keyframes loading-rotate{100%{transform:rotate(360deg)}}@keyframes loading-dash{0%{stroke-dasharray:1,200;stroke-dashoffset:0}50%{stroke-dasharray:90,150;stroke-dashoffset:-40px}100%{stroke-dasharray:90,150;stroke-dashoffset:-120px}}
--------------------------------------------------------------------------------
/src/assets/theme/theme-green/loading.css:
--------------------------------------------------------------------------------
1 | @charset "UTF-8";.el-loading-mask{position:absolute;z-index:10000;background-color:rgba(255,255,255,.9);margin:0;top:0;right:0;bottom:0;left:0;transition:opacity .3s}.el-loading-mask.is-fullscreen{position:fixed}.el-loading-mask.is-fullscreen .el-loading-spinner{margin-top:-25px}.el-loading-mask.is-fullscreen .el-loading-spinner .circular{width:50px;height:50px}.el-loading-spinner{top:50%;margin-top:-21px;width:100%;text-align:center;position:absolute}.el-loading-spinner .el-loading-text{color:#18c79c;margin:3px 0;font-size:14px}.el-loading-spinner .circular{width:42px;height:42px;animation:loading-rotate 2s linear infinite}.el-loading-spinner .path{animation:loading-dash 1.5s ease-in-out infinite;stroke-dasharray:90,150;stroke-dashoffset:0;stroke-width:2;stroke:#18c79c;stroke-linecap:round}.el-loading-fade-enter,.el-loading-fade-leave-active{opacity:0}@keyframes loading-rotate{100%{transform:rotate(360deg)}}@keyframes loading-dash{0%{stroke-dasharray:1,200;stroke-dashoffset:0}50%{stroke-dasharray:90,150;stroke-dashoffset:-40px}100%{stroke-dasharray:90,150;stroke-dashoffset:-120px}}
--------------------------------------------------------------------------------
/src/views/blog/router/index.js:
--------------------------------------------------------------------------------
1 | import Vue from 'vue'
2 | import Router from 'vue-router'
3 |
4 |
5 | const Blog = resolve => require(['../components/Blog'], resolve)
6 | const About = resolve => require(['../components/About'], resolve)
7 | const Article = resolve => require(['../components/Article'], resolve)
8 | const Messages = resolve => require(['../components/messages'], resolve)
9 | const Test = resolve => require(['../components/test'], resolve)
10 |
11 | Vue.use(Router)
12 |
13 | export default new Router({
14 | mode: 'history',
15 | base: '/blog',
16 | routes: [
17 | {
18 | path: '/',
19 | name: 'Blog',
20 | component: Blog
21 | },
22 | {
23 | path: '/about',
24 | name: 'About',
25 | component: About
26 | },
27 | {
28 | path: '/test',
29 | name: 'Test',
30 | component: Test
31 | },
32 | {
33 | path: '/article',
34 | name: 'Article',
35 | component: Article
36 | },
37 | {
38 | path: '/messages',
39 | name: 'Messages',
40 | component: Messages
41 | }
42 | ]
43 | })
44 |
--------------------------------------------------------------------------------
/src/views/blog/components/About.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
11 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
40 |
41 |
51 |
--------------------------------------------------------------------------------
/src/assets/theme/theme-darkblue/message.css:
--------------------------------------------------------------------------------
1 | @charset "UTF-8";.el-message{box-shadow:0 2px 4px rgba(0,0,0,.12),0 0 6px rgba(0,0,0,.04);min-width:300px;padding:10px 12px;box-sizing:border-box;border-radius:2px;position:fixed;left:50%;top:20px;-ms-transform:translateX(-50%);transform:translateX(-50%);background-color:#fff;transition:opacity .3s,transform .4s;overflow:hidden}.el-message .el-icon-circle-check{color:#13ce66}.el-message .el-icon-circle-cross{color:#ff4949}.el-message .el-icon-information{color:#50bfff}.el-message .el-icon-warning{color:#f7ba2a}.el-message__group{margin-left:38px;position:relative;height:20px;line-height:20px}.el-message__group p{font-size:14px;margin:0 34px 0 0;white-space:nowrap;color:rgb(131, 145, 165);text-align:justify}.el-message__group.is-with-icon{margin-left:0}.el-message__img{width:40px;height:40px;position:absolute;left:0;top:0}.el-message__icon{vertical-align:middle;margin-right:8px}.el-message__closeBtn{top:3px;right:0;position:absolute;cursor:pointer;color:rgb(191, 203, 217);font-size:14px}.el-message__closeBtn:hover{color:rgb(151, 168, 190)}.el-message-fade-enter,.el-message-fade-leave-active{opacity:0;-ms-transform:translate(-50%,-100%);transform:translate(-50%,-100%)}
--------------------------------------------------------------------------------
/src/assets/theme/theme-green/message.css:
--------------------------------------------------------------------------------
1 | @charset "UTF-8";.el-message{box-shadow:0 2px 4px rgba(0,0,0,.12),0 0 6px rgba(0,0,0,.04);min-width:300px;padding:10px 12px;box-sizing:border-box;border-radius:2px;position:fixed;left:50%;top:20px;-ms-transform:translateX(-50%);transform:translateX(-50%);background-color:#fff;transition:opacity .3s,transform .4s;overflow:hidden}.el-message .el-icon-circle-check{color:#13ce66}.el-message .el-icon-circle-cross{color:#ff4949}.el-message .el-icon-information{color:#50bfff}.el-message .el-icon-warning{color:#f7ba2a}.el-message__group{margin-left:38px;position:relative;height:20px;line-height:20px}.el-message__group p{font-size:14px;margin:0 34px 0 0;white-space:nowrap;color:rgb(131, 165, 162);text-align:justify}.el-message__group.is-with-icon{margin-left:0}.el-message__img{width:40px;height:40px;position:absolute;left:0;top:0}.el-message__icon{vertical-align:middle;margin-right:8px}.el-message__closeBtn{top:3px;right:0;position:absolute;cursor:pointer;color:rgb(191, 217, 214);font-size:14px}.el-message__closeBtn:hover{color:rgb(151, 190, 187)}.el-message-fade-enter,.el-message-fade-leave-active{opacity:0;-ms-transform:translate(-50%,-100%);transform:translate(-50%,-100%)}
--------------------------------------------------------------------------------
/src/assets/theme/theme-green/notification.css:
--------------------------------------------------------------------------------
1 | @charset "UTF-8";.el-notification{width:330px;padding:20px;box-sizing:border-box;border-radius:2px;position:fixed;right:16px;background-color:#fff;box-shadow:0 2px 4px rgba(0,0,0,.12),0 0 6px rgba(0,0,0,.04);transition:opacity .3s,transform .3s,right .3s,top .4s;overflow:hidden}.el-notification .el-icon-circle-check{color:#13ce66}.el-notification .el-icon-circle-cross{color:#ff4949}.el-notification .el-icon-information{color:#50bfff}.el-notification .el-icon-warning{color:#f7ba2a}.el-notification__group{margin-left:0}.el-notification__group.is-with-icon{margin-left:55px}.el-notification__title{font-weight:400;font-size:16px;color:rgb(31, 61, 57);margin:0}.el-notification__content{font-size:14px;line-height:21px;margin:10px 0 0;color:rgb(131, 165, 162);text-align:justify}.el-notification__icon{width:40px;height:40px;font-size:40px;float:left;position:relative;top:3px}.el-notification__closeBtn{top:20px;right:20px;position:absolute;cursor:pointer;color:rgb(191, 217, 214);font-size:14px}.el-notification__closeBtn:hover{color:rgb(151, 190, 187)}.el-notification-fade-enter{-ms-transform:translateX(100%);transform:translateX(100%);right:0}.el-notification-fade-leave-active{opacity:0}
--------------------------------------------------------------------------------
/src/assets/theme/theme-darkblue/notification.css:
--------------------------------------------------------------------------------
1 | @charset "UTF-8";.el-notification{width:330px;padding:20px;box-sizing:border-box;border-radius:2px;position:fixed;right:16px;background-color:#fff;box-shadow:0 2px 4px rgba(0,0,0,.12),0 0 6px rgba(0,0,0,.04);transition:opacity .3s,transform .3s,right .3s,top .4s;overflow:hidden}.el-notification .el-icon-circle-check{color:#13ce66}.el-notification .el-icon-circle-cross{color:#ff4949}.el-notification .el-icon-information{color:#50bfff}.el-notification .el-icon-warning{color:#f7ba2a}.el-notification__group{margin-left:0}.el-notification__group.is-with-icon{margin-left:55px}.el-notification__title{font-weight:400;font-size:16px;color:rgb(31, 45, 61);margin:0}.el-notification__content{font-size:14px;line-height:21px;margin:10px 0 0;color:rgb(131, 145, 165);text-align:justify}.el-notification__icon{width:40px;height:40px;font-size:40px;float:left;position:relative;top:3px}.el-notification__closeBtn{top:20px;right:20px;position:absolute;cursor:pointer;color:rgb(191, 203, 217);font-size:14px}.el-notification__closeBtn:hover{color:rgb(151, 168, 190)}.el-notification-fade-enter{-ms-transform:translateX(100%);transform:translateX(100%);right:0}.el-notification-fade-leave-active{opacity:0}
--------------------------------------------------------------------------------
/server/utils/logger.js:
--------------------------------------------------------------------------------
1 | /**
2 | * Created by harttle on 1/5/15.
3 | */
4 |
5 |
6 | function requestLogger(req, res, next) {
7 | console.log('------------------------------');
8 | console.log('REQUEST');
9 | console.log(req.ip, req.method, req.protocol + '://' + req.get('host') + req.originalUrl);
10 | console.log(req.body);
11 | next();
12 | }
13 |
14 | function responseLogger(req, res, next) {
15 | var oldWrite = res.write,
16 | oldEnd = res.end;
17 | var chunks = [];
18 | res.write = function(chunk) {
19 | chunks.push(chunk);
20 | oldWrite.apply(res, arguments);
21 | };
22 | res.end = function(chunk) {
23 | if (chunk) chunks.push(chunk);
24 | var body = Buffer.concat(chunks).toString('utf8');
25 |
26 | console.log('------------------------------');
27 | console.log('RESPONSE');
28 | console.log(body);
29 |
30 | oldEnd.apply(res, arguments);
31 | };
32 | next();
33 | }
34 |
35 | function logger(){
36 | // 这里可以对log进行处理、存储等操作
37 | console.log.apply(this, arguments);
38 | }
39 |
40 | module.exports = {
41 | log: logger,
42 | request: requestLogger,
43 | response: responseLogger
44 | };
--------------------------------------------------------------------------------
/src/views/blogadmin/router/index.js:
--------------------------------------------------------------------------------
1 | import Vue from 'vue'
2 | import Router from 'vue-router'
3 |
4 |
5 |
6 |
7 | const login = resolve => require(['../components/login'], resolve)
8 | const admin = resolve => require(['../components/admin'], resolve)
9 | const adminArticle = resolve => require(['../components/adminArticle'], resolve)
10 | const adminChange = resolve => require(['../components/adminChange'], resolve)
11 | const adminArticleList = resolve => require(['../components/adminArticleList'], resolve)
12 |
13 | Vue.use(Router)
14 |
15 | export default new Router({
16 | mode: 'history',
17 | base: '/blogadmin',
18 | routes: [
19 | {
20 | path: '/',
21 | name: 'Admin',
22 | component: admin,
23 | redirect: { name: 'adminArticle'},
24 | children: [
25 | { path: '/admin/adminArticle', component: adminArticle, name: 'adminArticle'},
26 | { path: '/admin/adminChange', component: adminChange, name: 'adminChange'},
27 | { path: '/admin/adminArticleList', component: adminArticleList, name: 'adminArticleList'},
28 | ]
29 | },
30 | {
31 | path: '/login',
32 | name: 'Login',
33 | component: login,
34 | }
35 | ]
36 | })
37 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # To start
2 | This is a project template for [vue-cli](https://github.com/vuejs/vue-cli)
3 |
4 | 本系统采用多页面方式(每个页面是个独立SPA) 整合多个子系统系统。
5 |
6 | * 测试环境
7 | ``` bash
8 | # run server-side
9 | npm run server
10 |
11 | # run client-side
12 | npm run dev-client
13 |
14 |
15 | ```
16 |
17 | * 生产环境
18 | ```bash
19 | # install dependencies
20 | npm install
21 |
22 | # build for production with minification
23 | npm run build
24 |
25 | # run
26 | npm run server
27 |
28 | ```
29 |
30 |
31 |
32 | # 文件结构
33 | ```
34 | |--server - 服务端(提供API服务和生产环境的web服务)
35 | |--build - 构建
36 | |--dist - 构建结果目录
37 | |--config - 系统配置
38 | | |--dev.env.js
39 | | |--index.js
40 | | |--prod.env.js
41 | |--models - 数据库模型文件
42 | |--src - 客户端目录
43 | | |--api - 外部api
44 | | |--assets - 资产目录
45 | | |--images - 图片
46 | | |--js - js
47 | | |--sytels - 样式
48 | | |--uploads - 上传
49 | | |--views - 视图
50 | | |--router - 客户端路由
51 | | |--vuex - 状态
52 | |--packga.json - 项目信息
53 | |--index.html - 模板html
54 |
55 | ```
56 |
57 |
58 |
59 |
--------------------------------------------------------------------------------
/src/styles/global.css:
--------------------------------------------------------------------------------
1 | /* GLOBAL
2 | -------------------------------------------------- */
3 | body {
4 | color: #5a5a5a;
5 | }
6 | footer{
7 | background: #000000;
8 | padding: 15px;
9 | }
10 | footer a{
11 | color: white;
12 | }
13 |
14 | .banner{
15 | position: relative;
16 | height: 280px;
17 | background-image: url('/images/banner.jpeg');
18 | background-repeat: no-repeat;
19 | background-size: cover;
20 | background-position: 50% 30%;
21 | text-align: center;
22 | }
23 |
24 | .banner .blog-intro{
25 | margin-top: 120px;
26 | padding: 15px;
27 | color: white;
28 | }
29 | .banner .blog-intro .avatar{
30 | width: 50px;
31 | height: 50px;
32 | }
33 | .banner .blog-intro .title{
34 | font-size: 28px;
35 | }
36 | .banner .blog-intro .description{
37 | font-size: 18px;
38 | }
39 |
40 | .post .post-title a{
41 | color: #777;
42 | }
43 | .post .post-title a:hover{
44 | color: #333;
45 | text-decoration: none;
46 | }
47 |
48 | #home-header .navbar-nav>li>a, #home-header .navbar-brand{
49 | color: #ccc;
50 | }
51 | #home-header .navbar-nav>li>a:hover{
52 | color: white;
53 | }
54 |
55 | .comment img{
56 | height: 45px;
57 | width: 45px;
58 | border-radius: 45px;
59 | margin-right: 10px;
60 | }
--------------------------------------------------------------------------------
/src/views/demo/index.js:
--------------------------------------------------------------------------------
1 | import Vue from 'vue';
2 | import App from './app'
3 |
4 | import ElementUI from 'element-ui'
5 | import 'element-ui/lib/theme-chalk/index.css'
6 | import VueRouter from 'vue-router'
7 | import store from '@/vuex/store'
8 | import Vuex from 'vuex'
9 | import router from './router'
10 | import 'font-awesome/css/font-awesome.min.css'
11 | import Mock from '@/mock'
12 |
13 |
14 | Vue.use(ElementUI)
15 | Vue.use(Vuex)
16 | //NProgress.configure({ showSpinner: false });
17 |
18 |
19 |
20 |
21 | Mock.bootstrap();
22 | router.beforeEach((to, from, next) => {
23 | console.log( "GOTO =>"+to.path)
24 | //该内容每次跳转链接时才会执行
25 | //NProgress.start();
26 | //先清除已登录信息
27 |
28 | if (to.path == '/login') {
29 | sessionStorage.removeItem('user');
30 | }
31 | let user = JSON.parse(sessionStorage.getItem('user'));
32 | //无登录信息则跳转到登录
33 |
34 | if (!user && to.path != '/login') {
35 | sessionStorage.setItem('last',to.path)
36 | console.log("save:"+to.path)
37 | next({ path: '/login' })
38 | } else {
39 | next()
40 | }
41 | })
42 |
43 | //router.afterEach(transition => {
44 | //NProgress.done();
45 | //});
46 |
47 | new Vue({
48 | router,
49 | store,
50 | render: h => h(App)
51 | }).$mount('#app')
52 |
53 |
54 |
--------------------------------------------------------------------------------
/server/models/user.js:
--------------------------------------------------------------------------------
1 | var mongoose = require('mongoose');
2 | var Schema = mongoose.Schema;
3 | var passportLocalMongoose = require('passport-local-mongoose');
4 |
5 | var UserSchema = new Schema({
6 | username: String,
7 | password: String,
8 | isAdmin:{
9 | type:Boolean,
10 | default:false
11 | },
12 | avatar: {
13 | type: String,
14 | default: '/images/default-avatar.jpeg'
15 | },
16 | title: {
17 | type: String,
18 | default: '未命名博客'
19 | },
20 | description: {
21 | type: String,
22 | default: '博主很懒,还没有添加任何描述……'
23 | },
24 | active: {
25 | type: Boolean,
26 | default: false
27 | },
28 | activeToken: String,
29 | activeExpires: Date,
30 | resetPasswordToken: String,
31 | resetPasswordExpires: Date
32 | });
33 |
34 | // UserSchema.plugin(passportLocalMongoose, {
35 | // incorrectUsernameError: '用户名不正确',
36 | // incorrectPasswordError: '密码不正确',
37 | // userExistsError: '用户名已存在'
38 | // });
39 |
40 |
41 | // UserSchema.path('username').validate(function (email) {
42 | // var emailRegex = /^([\w-\.]+@([\w-]+\.)+[\w-]{2,4})?$/;
43 | // return emailRegex.test(email);
44 | // }, '用户名不是有效的电子邮件地址');
45 |
46 | module.exports = mongoose.model('User', UserSchema);
47 |
--------------------------------------------------------------------------------
/src/assets/theme/theme-green/dialog.css:
--------------------------------------------------------------------------------
1 | @charset "UTF-8";.v-modal-enter{animation:v-modal-in .2s ease}.v-modal-leave{animation:v-modal-out .2s ease forwards}@keyframes v-modal-in{0%{opacity:0}}@keyframes v-modal-out{100%{opacity:0}}.v-modal{position:fixed;left:0;top:0;width:100%;height:100%;opacity:.5;background:#000}.el-dialog{position:absolute;left:50%;-ms-transform:translateX(-50%);transform:translateX(-50%);background:#fff;border-radius:2px;box-shadow:0 1px 3px rgba(0,0,0,.3);box-sizing:border-box}.el-dialog--tiny{width:30%}.el-dialog--small{width:50%}.el-dialog--large{width:90%}.el-dialog--full{width:100%;top:0;height:100%;overflow:auto}.el-dialog__wrapper{top:0;right:0;bottom:0;left:0;position:fixed;overflow:auto;margin:0}.el-dialog__header{padding:20px 20px 0}.el-dialog__close{cursor:pointer;color:rgb(191, 217, 214)}.el-dialog__close:hover{color:#18c79c}.el-dialog__title{line-height:1;font-size:16px;font-weight:700;color:rgb(31, 61, 57)}.el-dialog__body{padding:30px 20px;color:rgb(72, 106, 103);font-size:14px}.el-dialog__headerbtn{float:right}.el-dialog__footer{padding:10px 20px 15px;text-align:right;box-sizing:border-box}.dialog-fade-enter-active{animation:dialog-fade-in .3s}.dialog-fade-leave-active{animation:dialog-fade-out .3s}@keyframes dialog-fade-in{0%{transform:translate3d(0,-20px,0);opacity:0}100%{transform:translate3d(0,0,0);opacity:1}}@keyframes dialog-fade-out{0%{transform:translate3d(0,0,0);opacity:1}100%{transform:translate3d(0,-20px,0);opacity:0}}
--------------------------------------------------------------------------------
/src/assets/theme/theme-darkblue/dialog.css:
--------------------------------------------------------------------------------
1 | @charset "UTF-8";.v-modal-enter{animation:v-modal-in .2s ease}.v-modal-leave{animation:v-modal-out .2s ease forwards}@keyframes v-modal-in{0%{opacity:0}}@keyframes v-modal-out{100%{opacity:0}}.v-modal{position:fixed;left:0;top:0;width:100%;height:100%;opacity:.5;background:#000}.el-dialog{position:absolute;left:50%;-ms-transform:translateX(-50%);transform:translateX(-50%);background:#fff;border-radius:2px;box-shadow:0 1px 3px rgba(0,0,0,.3);box-sizing:border-box}.el-dialog--tiny{width:30%}.el-dialog--small{width:50%}.el-dialog--large{width:90%}.el-dialog--full{width:100%;top:0;height:100%;overflow:auto}.el-dialog__wrapper{top:0;right:0;bottom:0;left:0;position:fixed;overflow:auto;margin:0}.el-dialog__header{padding:20px 20px 0}.el-dialog__close{cursor:pointer;color:rgb(191, 203, 217)}.el-dialog__close:hover{color:#1d8ce0}.el-dialog__title{line-height:1;font-size:16px;font-weight:700;color:rgb(31, 45, 61)}.el-dialog__body{padding:30px 20px;color:rgb(72, 87, 106);font-size:14px}.el-dialog__headerbtn{float:right}.el-dialog__footer{padding:10px 20px 15px;text-align:right;box-sizing:border-box}.dialog-fade-enter-active{animation:dialog-fade-in .3s}.dialog-fade-leave-active{animation:dialog-fade-out .3s}@keyframes dialog-fade-in{0%{transform:translate3d(0,-20px,0);opacity:0}100%{transform:translate3d(0,0,0);opacity:1}}@keyframes dialog-fade-out{0%{transform:translate3d(0,0,0);opacity:1}100%{transform:translate3d(0,-20px,0);opacity:0}}
--------------------------------------------------------------------------------
/src/javascripts/runTime.js:
--------------------------------------------------------------------------------
1 | export function runTime() {
2 | let seconds = 1000
3 | let minutes = seconds * 60
4 | let hours = minutes * 60
5 | let days = hours * 24
6 | let years = days * 365
7 | let today = new Date()
8 | let todayYear = today.getFullYear()
9 | let todayMonth = today.getMonth()
10 | let todayDate = today.getDate()
11 | let todayHour = today.getHours()
12 | let todayMinute = today.getMinutes()
13 | let todaySecond = today.getSeconds()
14 | /* Date.UTC() -- 返回date对象距世界标准时间(UTC)1970年1月1日午夜之间的毫秒数(时间戳)
15 | year - 作为date对象的年份,为4位年份值
16 | month - 0-11之间的整数,做为date对象的月份
17 | day - 1-31之间的整数,做为date对象的天数
18 | hours - 0(午夜24点)-23之间的整数,做为date对象的小时数
19 | minutes - 0-59之间的整数,做为date对象的分钟数
20 | seconds - 0-59之间的整数,做为date对象的秒数
21 | microseconds - 0-999之间的整数,做为date对象的毫秒数 */
22 | let t1 = Date.UTC(2014,0,14,11,19,0)
23 | let t2 = Date.UTC(todayYear,todayMonth,todayDate,todayHour,todayMinute,todaySecond)
24 | let diff = t2-t1
25 | let diffYears = Math.floor(diff/years)
26 | let diffDays = Math.floor((diff/days)-diffYears*365)
27 | let diffHours = Math.floor((diff-(diffYears*365+diffDays)*days)/hours)
28 | let diffMinutes = Math.floor((diff-(diffYears*365+diffDays)*days-diffHours*hours)/minutes)
29 | let diffSeconds = Math.floor((diff-(diffYears*365+diffDays)*days-diffHours*hours-diffMinutes*minutes)/seconds)
30 | time =" "+diffYears+" 年 "+diffDays+" 天 "+diffHours+" 小时 "+diffMinutes+" 分钟 "+diffSeconds+" 秒"
31 | return time
32 | }
33 |
--------------------------------------------------------------------------------
/src/assets/theme/theme-darkblue/form.css:
--------------------------------------------------------------------------------
1 | @charset "UTF-8";.el-form--inline .el-form-item,.el-form--inline .el-form-item__content{display:inline-block;vertical-align:top}.el-form-item:after,.el-form-item__content:after{clear:both}.el-form--label-left .el-form-item__label{text-align:left}.el-form--label-top .el-form-item__label{float:none;display:inline-block;padding:0 0 10px}.el-form--inline .el-form-item{margin-right:10px}.el-form--inline .el-form-item__label{float:none;display:inline-block}.el-form--inline.el-form--label-top .el-form-item__content{display:block}.el-form-item{margin-bottom:22px}.el-form-item:after,.el-form-item:before{display:table;content:""}.el-form-item .el-form-item{margin-bottom:0}.el-form-item .el-form-item .el-form-item__content{margin-left:0!important}.el-form-item.is-error .el-input-group__append .el-input__inner,.el-form-item.is-error .el-input-group__prepend .el-input__inner,.el-form-item.is-error .el-input__inner{border-color:transparent}.el-form-item.is-error .el-input__inner,.el-form-item.is-error .el-textarea__inner{border-color:#ff4949}.el-form-item.is-required .el-form-item__label:before{content:'*';color:#ff4949;margin-right:4px}.el-form-item__label{text-align:right;vertical-align:middle;float:left;font-size:14px;color:rgb(72, 87, 106);line-height:1;padding:11px 12px 11px 0;box-sizing:border-box}.el-form-item__content{line-height:36px;position:relative;font-size:14px}.el-form-item__content:after,.el-form-item__content:before{display:table;content:""}.el-form-item__error{color:#ff4949;font-size:12px;line-height:1;padding-top:4px;position:absolute;top:100%;left:0}
--------------------------------------------------------------------------------
/src/assets/theme/theme-green/form.css:
--------------------------------------------------------------------------------
1 | @charset "UTF-8";.el-form--inline .el-form-item,.el-form--inline .el-form-item__content{display:inline-block;vertical-align:top}.el-form-item:after,.el-form-item__content:after{clear:both}.el-form--label-left .el-form-item__label{text-align:left}.el-form--label-top .el-form-item__label{float:none;display:inline-block;padding:0 0 10px}.el-form--inline .el-form-item{margin-right:10px}.el-form--inline .el-form-item__label{float:none;display:inline-block}.el-form--inline.el-form--label-top .el-form-item__content{display:block}.el-form-item{margin-bottom:22px}.el-form-item:after,.el-form-item:before{display:table;content:""}.el-form-item .el-form-item{margin-bottom:0}.el-form-item .el-form-item .el-form-item__content{margin-left:0!important}.el-form-item.is-error .el-input-group__append .el-input__inner,.el-form-item.is-error .el-input-group__prepend .el-input__inner,.el-form-item.is-error .el-input__inner{border-color:transparent}.el-form-item.is-error .el-input__inner,.el-form-item.is-error .el-textarea__inner{border-color:#ff4949}.el-form-item.is-required .el-form-item__label:before{content:'*';color:#ff4949;margin-right:4px}.el-form-item__label{text-align:right;vertical-align:middle;float:left;font-size:14px;color:rgb(72, 106, 103);line-height:1;padding:11px 12px 11px 0;box-sizing:border-box}.el-form-item__content{line-height:36px;position:relative;font-size:14px}.el-form-item__content:after,.el-form-item__content:before{display:table;content:""}.el-form-item__error{color:#ff4949;font-size:12px;line-height:1;padding-top:4px;position:absolute;top:100%;left:0}
--------------------------------------------------------------------------------
/src/assets/theme/theme-green/tree.css:
--------------------------------------------------------------------------------
1 | @charset "UTF-8";.el-tree{cursor:default;background:#fff;border:1px solid rgb(209, 229, 227)}.el-tree__empty-block{position:relative;min-height:60px;text-align:center;width:100%;height:100%}.el-tree__empty-text{position:absolute;left:50%;top:50%;-ms-transform:translate(-50%,-50%);transform:translate(-50%,-50%);color:#5e7382}.el-tree-node{white-space:nowrap}.el-tree-node>.el-tree-node__children{overflow:hidden;background-color:transparent}.el-tree-node.is-expanded>.el-tree-node__children{display:block}.el-tree-node__expand-icon,.el-tree-node__label,.el-tree-node__loading-icon{display:inline-block;vertical-align:middle}.el-tree-node__content{line-height:36px;height:36px;cursor:pointer}.el-tree-node__content>.el-checkbox,.el-tree-node__content>.el-tree-node__expand-icon{margin-right:8px}.el-tree-node__content>.el-checkbox{vertical-align:middle}.el-tree-node__content:hover{background:rgb(228, 241, 241)}.el-tree-node__expand-icon{cursor:pointer;width:0;height:0;margin-left:10px;border:6px solid transparent;border-right-width:0;border-left-color:rgb(151, 190, 187);border-left-width:7px;-ms-transform:rotate(0);transform:rotate(0);transition:transform .3s ease-in-out}.el-tree-node__expand-icon:hover{border-left-color:#999}.el-tree-node__expand-icon.expanded{-ms-transform:rotate(90deg);transform:rotate(90deg)}.el-tree-node__expand-icon.is-leaf{border-color:transparent;cursor:default}.el-tree-node__label{font-size:14px}.el-tree-node__loading-icon{margin-right:4px;font-size:14px;color:rgb(151, 190, 187)}.el-tree--highlight-current .el-tree-node.is-current>.el-tree-node__content{background-color:rgb(237, 251, 247)}
--------------------------------------------------------------------------------
/src/assets/theme/theme-darkblue/tree.css:
--------------------------------------------------------------------------------
1 | @charset "UTF-8";.el-tree{cursor:default;background:#fff;border:1px solid rgb(209, 219, 229)}.el-tree__empty-block{position:relative;min-height:60px;text-align:center;width:100%;height:100%}.el-tree__empty-text{position:absolute;left:50%;top:50%;-ms-transform:translate(-50%,-50%);transform:translate(-50%,-50%);color:#5e7382}.el-tree-node{white-space:nowrap}.el-tree-node>.el-tree-node__children{overflow:hidden;background-color:transparent}.el-tree-node.is-expanded>.el-tree-node__children{display:block}.el-tree-node__expand-icon,.el-tree-node__label,.el-tree-node__loading-icon{display:inline-block;vertical-align:middle}.el-tree-node__content{line-height:36px;height:36px;cursor:pointer}.el-tree-node__content>.el-checkbox,.el-tree-node__content>.el-tree-node__expand-icon{margin-right:8px}.el-tree-node__content>.el-checkbox{vertical-align:middle}.el-tree-node__content:hover{background:rgb(228, 232, 241)}.el-tree-node__expand-icon{cursor:pointer;width:0;height:0;margin-left:10px;border:6px solid transparent;border-right-width:0;border-left-color:rgb(151, 168, 190);border-left-width:7px;-ms-transform:rotate(0);transform:rotate(0);transition:transform .3s ease-in-out}.el-tree-node__expand-icon:hover{border-left-color:#999}.el-tree-node__expand-icon.expanded{-ms-transform:rotate(90deg);transform:rotate(90deg)}.el-tree-node__expand-icon.is-leaf{border-color:transparent;cursor:default}.el-tree-node__label{font-size:14px}.el-tree-node__loading-icon{margin-right:4px;font-size:14px;color:rgb(151, 168, 190)}.el-tree--highlight-current .el-tree-node.is-current>.el-tree-node__content{background-color:rgb(237, 246, 253)}
--------------------------------------------------------------------------------
/server/utils/hbs-helper.js:
--------------------------------------------------------------------------------
1 | /**
2 | * Created by harttle on 1/7/15.
3 | */
4 |
5 | module.exports = function(hbs) {
6 | hbs.registerHelper('detailDate', function(date, block) {
7 | return dateFormat(date, 'yyyy-MM-dd hh:mm:ss');
8 | });
9 |
10 | hbs.registerHelper('excerpt', mdExcerpt);
11 |
12 | hbs.registerHelper('equal', function(v1, v2, opts) {
13 | return v1 == v2 ? opts.fn(this) : opts.inverse(this);
14 | });
15 |
16 | hbs.registerHelper('unless', function(v1, opts) {
17 | return v1 ? opts.inverse(this) : opts.fn(this);
18 | });
19 | };
20 |
21 | function mdExcerpt(content) {
22 | var result = content.replace(/[#\(\)\[\]\n!`]+/g, ' ');
23 | if (result.length > 300) result = result.slice(0, 300) + '...';
24 | return result;
25 | }
26 |
27 | function dateFormat(datetime, format) {
28 | var date = {
29 | "M+": datetime.getMonth() + 1,
30 | "d+": datetime.getDate(),
31 | "h+": datetime.getHours(),
32 | "m+": datetime.getMinutes(),
33 | "s+": datetime.getSeconds(),
34 | "q+": Math.floor((datetime.getMonth() + 3) / 3),
35 | "S+": datetime.getMilliseconds()
36 | };
37 | if (/(y+)/i.test(format)) {
38 | format = format.replace(RegExp.$1, (datetime.getFullYear() + '').substr(4 - RegExp.$1.length));
39 | }
40 | for (var k in date) {
41 | if (new RegExp("(" + k + ")").test(format)) {
42 | format = format.replace(RegExp.$1, RegExp.$1.length == 1 ?
43 | date[k] :
44 | ("00" + date[k]).substr(("" + date[k]).length));
45 | }
46 | }
47 | return format;
48 | }
--------------------------------------------------------------------------------
/src/assets/theme/theme-darkblue/tag.css:
--------------------------------------------------------------------------------
1 | @charset "UTF-8";.el-tag{background-color:rgb(131, 145, 165);display:inline-block;padding:0 5px;height:24px;line-height:22px;font-size:12px;color:#fff;border-radius:4px;box-sizing:border-box;border:1px solid transparent;white-space:nowrap}.el-tag .el-icon-close{border-radius:50%;text-align:center;position:relative;cursor:pointer;font-size:12px;-ms-transform:scale(.75,.75);transform:scale(.75,.75);height:18px;width:18px;line-height:18px;vertical-align:middle;top:-1px;right:-2px}.el-tag .el-icon-close:hover{background-color:#fff;color:rgb(131, 145, 165)}.el-tag--gray{background-color:rgb(228, 232, 241);border-color:rgb(228, 232, 241);color:rgb(72, 87, 106)}.el-tag--gray .el-tag__close:hover{background-color:rgb(72, 87, 106);color:#fff}.el-tag--gray.is-hit{border-color:rgb(72, 87, 106)}.el-tag--primary{background-color:rgba(32,160,255,.1);border-color:rgba(32,160,255,.2);color:#1d8ce0}.el-tag--primary .el-tag__close:hover{background-color:#1d8ce0;color:#fff}.el-tag--primary.is-hit{border-color:#1d8ce0}.el-tag--success{background-color:rgba(18,206,102,.1);border-color:rgba(18,206,102,.2);color:#13ce66}.el-tag--success .el-tag__close:hover{background-color:#13ce66;color:#fff}.el-tag--success.is-hit{border-color:#13ce66}.el-tag--warning{background-color:rgba(247,186,41,.1);border-color:rgba(247,186,41,.2);color:#f7ba2a}.el-tag--warning .el-tag__close:hover{background-color:#f7ba2a;color:#fff}.el-tag--warning.is-hit{border-color:#f7ba2a}.el-tag--danger{background-color:rgba(255,73,73,.1);border-color:rgba(255,73,73,.2);color:#ff4949}.el-tag--danger .el-tag__close:hover{background-color:#ff4949;color:#fff}.el-tag--danger.is-hit{border-color:#ff4949}
--------------------------------------------------------------------------------
/src/assets/theme/theme-green/tag.css:
--------------------------------------------------------------------------------
1 | @charset "UTF-8";.el-tag{background-color:rgb(131, 165, 162);display:inline-block;padding:0 5px;height:24px;line-height:22px;font-size:12px;color:#fff;border-radius:4px;box-sizing:border-box;border:1px solid transparent;white-space:nowrap}.el-tag .el-icon-close{border-radius:50%;text-align:center;position:relative;cursor:pointer;font-size:12px;-ms-transform:scale(.75,.75);transform:scale(.75,.75);height:18px;width:18px;line-height:18px;vertical-align:middle;top:-1px;right:-2px}.el-tag .el-icon-close:hover{background-color:#fff;color:rgb(131, 165, 162)}.el-tag--gray{background-color:rgb(228, 241, 241);border-color:rgb(228, 241, 241);color:rgb(72, 106, 103)}.el-tag--gray .el-tag__close:hover{background-color:rgb(72, 106, 103);color:#fff}.el-tag--gray.is-hit{border-color:rgb(72, 106, 103)}.el-tag--primary{background-color:rgba(32,160,255,.1);border-color:rgba(32,160,255,.2);color:#18c79c}.el-tag--primary .el-tag__close:hover{background-color:#18c79c;color:#fff}.el-tag--primary.is-hit{border-color:#18c79c}.el-tag--success{background-color:rgba(18,206,102,.1);border-color:rgba(18,206,102,.2);color:#13ce66}.el-tag--success .el-tag__close:hover{background-color:#13ce66;color:#fff}.el-tag--success.is-hit{border-color:#13ce66}.el-tag--warning{background-color:rgba(247,186,41,.1);border-color:rgba(247,186,41,.2);color:#f7ba2a}.el-tag--warning .el-tag__close:hover{background-color:#f7ba2a;color:#fff}.el-tag--warning.is-hit{border-color:#f7ba2a}.el-tag--danger{background-color:rgba(255,73,73,.1);border-color:rgba(255,73,73,.2);color:#ff4949}.el-tag--danger .el-tag__close:hover{background-color:#ff4949;color:#fff}.el-tag--danger.is-hit{border-color:#ff4949}
--------------------------------------------------------------------------------
/src/views/demo/app.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
5 |
6 |
7 |
8 |
9 |
10 |
18 |
19 |
--------------------------------------------------------------------------------
/dist/static/js/manifest.0098f8ac3d0979b71c7d.js:
--------------------------------------------------------------------------------
1 | !function(e){var n=window.webpackJsonp;window.webpackJsonp=function(r,c,a){for(var f,i,u,s=0,d=[];s {
31 | var exdate = new Date();
32 | exdate.setDate(exdate.getDate() + expiredays);
33 | document.cookie = c_name + "=" + escape(value) + ((expiredays == null) ? "" : ";expires=" + exdate.toGMTString());
34 | }
35 |
36 | Vue.prototype.setCookie = (c_name, value, expiredays) => {
37 | var exdate = new Date();
38 | exdate.setDate(exdate.getDate() + expiredays);
39 | document.cookie = c_name + "=" + escape(value) + ((expiredays == null) ? "" : ";expires=" + exdate.toGMTString());
40 | }
41 | function getCookie(name) {
42 | var arr, reg = new RegExp("(^| )" + name + "=([^;]*)(;|$)");
43 | if (arr = document.cookie.match(reg))
44 | return (arr[2]);
45 | else
46 | return null;
47 | }
48 | Vue.prototype.getCookie = getCookie;
49 | Vue.prototype.delCookie =(name) => {
50 | var exp = new Date();
51 | exp.setTime(exp.getTime() - 1);
52 | var cval = getCookie(name);
53 | if (cval != null)
54 | document.cookie = name + "=" + cval + ";expires=" + exp.toGMTString();
55 | }
56 |
57 | Vue.config.productionTip = false
58 |
59 |
60 |
61 |
62 | new Vue({
63 | router,
64 | store,
65 | render: h => h(App)
66 | }).$mount('#app')
67 |
--------------------------------------------------------------------------------
/src/views/blog/index.js:
--------------------------------------------------------------------------------
1 | import Vue from 'vue';
2 | import App from './app.vue'
3 |
4 | import ElementUI from 'element-ui'
5 | import 'element-ui/lib/theme-chalk/index.css'
6 | import 'font-awesome/css/font-awesome.min.css'
7 | import store from '@/vuex/store'
8 | import Vuex from 'vuex'
9 | import router from './router'
10 |
11 | import mavonEditor from 'mavon-editor'
12 | import 'mavon-editor/dist/css/index.css'
13 |
14 | import '@/styles/container.css'
15 | import '@/styles/header.css'
16 | import '@/styles/article.css'
17 | import '@/styles/side.css'
18 | import '@/styles/blog.css'
19 |
20 |
21 | Vue.use(ElementUI)
22 | Vue.use(mavonEditor)
23 | //Vue.use(Vuex)
24 |
25 |
26 |
27 |
28 |
29 |
30 | Vue.prototype.setCookie = (c_name, value, expiredays) => {
31 | var exdate = new Date();
32 | exdate.setDate(exdate.getDate() + expiredays);
33 | document.cookie = c_name + "=" + escape(value) + ((expiredays == null) ? "" : ";expires=" + exdate.toGMTString());
34 | }
35 |
36 | Vue.prototype.setCookie = (c_name, value, expiredays) => {
37 | var exdate = new Date();
38 | exdate.setDate(exdate.getDate() + expiredays);
39 | document.cookie = c_name + "=" + escape(value) + ((expiredays == null) ? "" : ";expires=" + exdate.toGMTString());
40 | }
41 | function getCookie(name) {
42 | var arr, reg = new RegExp("(^| )" + name + "=([^;]*)(;|$)");
43 | if (arr = document.cookie.match(reg))
44 | return (arr[2]);
45 | else
46 | return null;
47 | }
48 | Vue.prototype.getCookie = getCookie;
49 | Vue.prototype.delCookie =(name) => {
50 | var exp = new Date();
51 | exp.setTime(exp.getTime() - 1);
52 | var cval = getCookie(name);
53 | if (cval != null)
54 | document.cookie = name + "=" + cval + ";expires=" + exp.toGMTString();
55 | }
56 |
57 | Vue.config.productionTip = false
58 |
59 | new Vue({
60 | router,
61 | store,
62 | render: h => h(App)
63 | }).$mount('#app')
64 |
--------------------------------------------------------------------------------
/src/styles/index.css:
--------------------------------------------------------------------------------
1 | /* NAVBAR
2 | -------------------------------------------------- */
3 | .navbar-wrapper {
4 | position: absolute;
5 | top: 0;
6 | right: 0;
7 | left: 0;
8 | z-index: 20;
9 | }
10 | .navbar-wrapper > .container {
11 | padding-right: 0;
12 | padding-left: 0;
13 | }
14 | .navbar-wrapper .navbar {
15 | padding-right: 15px;
16 | padding-left: 15px;
17 | }
18 | .navbar-wrapper .navbar .container {
19 | width: auto;
20 | }
21 |
22 |
23 | /* CUSTOMIZE THE CAROUSEL
24 | -------------------------------------------------- */
25 | .carousel {
26 | height: 500px;
27 | margin-bottom: 60px;
28 | }
29 | .carousel-caption {
30 | z-index: 10;
31 | }
32 | .carousel .item {
33 | height: 500px;
34 | background-color: #777;
35 | }
36 | .carousel-inner > .item > img {
37 | position: absolute;
38 | top: 0;
39 | left: 0;
40 | min-width: 100%;
41 | height: 500px;
42 | filter: blur(20px);
43 | -ms-filter: blur(20px);
44 | -o-filter: blur(20px);
45 | -moz-filter: blur(20px);
46 | -webkit-filter: blur(20px);
47 | }
48 |
49 |
50 | /* MARKETING CONTENT
51 | -------------------------------------------------- */
52 | .marketing .col-lg-4 {
53 | margin-bottom: 20px;
54 | text-align: center;
55 | }
56 | .marketing h2 {
57 | font-weight: normal;
58 | }
59 | .marketing .col-lg-4 p {
60 | margin-right: 10px;
61 | margin-left: 10px;
62 | }
63 |
64 | /* RESPONSIVE CSS
65 | -------------------------------------------------- */
66 |
67 | @media (min-width: 768px) {
68 | .navbar-wrapper {
69 | margin-top: 20px;
70 | }
71 | .navbar-wrapper .container {
72 | padding-right: 15px;
73 | padding-left: 15px;
74 | }
75 | .navbar-wrapper .navbar {
76 | padding-right: 0;
77 | padding-left: 0;
78 | }
79 | .navbar-wrapper .navbar {
80 | border-radius: 4px;
81 | }
82 | .carousel-caption p {
83 | margin-bottom: 20px;
84 | font-size: 18px;
85 | line-height: 1.4;
86 | }
87 | }
--------------------------------------------------------------------------------
/dist/static/js/6.af307ff456dbfe28fccc.js:
--------------------------------------------------------------------------------
1 | webpackJsonp([6],{aMlH:function(t,e){},yAjE:function(t,e,i){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var a=i("mtWM"),n=i.n(a),s={data:function(){return{value:"",content:"",visible2:!1}},mounted:function(){this.getValue()},methods:{getContent:function(t,e){this.content=t},imgAdd:function(t,e){var i=this;(new FormData).append("image",e),n.a.post("/api/imgAdd",{image:e}).then(function(e){i.$refs.md.$img2Url(t,e.data)})},getValue:function(){var t=this,e={articleId:this.$route.query.articleId};n.a.get("/api/articleDetial",{params:e}).then(function(e){var i=e.data;"0"==i.status?t.value=i.result.content:t.value=""})},modifyArticle:function(){var t=this,e=this.$route.query.articleId;n.a.post("/api/articleModify",{articleId:e,content:this.content}).then(function(e){"0"==e.data.status?(t.$message({type:"success",message:"文章已修改"}),t.visible2=!1):t.$message.error("未修改")})}}},o={render:function(){var t=this,e=t.$createElement,i=t._self._c||e;return i("div",{staticClass:"admin-container"},[i("mavon-editor",{ref:"md",staticClass:"set",attrs:{ishljs:!0},on:{imgAdd:t.imgAdd,change:t.getContent},model:{value:t.value,callback:function(e){t.value=e},expression:"value"}}),t._v(" "),i("div",{staticClass:"footer"},[i("el-popover",{ref:"popover5",attrs:{placement:"top",width:"160"},model:{value:t.visible2,callback:function(e){t.visible2=e},expression:"visible2"}},[i("p",[t._v("确定提交吗?")]),t._v(" "),i("div",{staticStyle:{"text-align":"right",margin:"0"}},[i("el-button",{attrs:{size:"mini",type:"text"},on:{click:function(e){t.visible2=!1}}},[t._v("取消")]),t._v(" "),i("el-button",{attrs:{type:"primary",size:"mini"},on:{click:t.modifyArticle}},[t._v("确定")])],1)]),t._v(" "),i("el-button",{directives:[{name:"popover",rawName:"v-popover:popover5",arg:"popover5"}],staticClass:"submit"},[t._v("修改")]),t._v(" "),i("div",{staticClass:"left"},[i("el-button",[t._v("修改信息")]),t._v(" "),i("el-button",[t._v("修改分类")])],1)],1)],1)},staticRenderFns:[]};var r=i("VU/8")(s,o,!1,function(t){i("aMlH")},null,null);e.default=r.exports}});
2 | //# sourceMappingURL=6.af307ff456dbfe28fccc.js.map
--------------------------------------------------------------------------------
/dist/static/js/8.9c254b1a97383e9c1acd.js:
--------------------------------------------------------------------------------
1 | webpackJsonp([8],{"+dWO":function(t,e){},Bfhk:function(t,e,i){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var s={data:function(){return{isCollapse:!1}},watch:{$route:"checkLogin"},created:function(){this.checkLogin()},methods:{collapse:function(){this.isCollapse=!this.isCollapse},checkLogin:function(){sessionStorage.getItem("user")||this.$router.push("/login")},logout:function(){sessionStorage.removeItem("user"),this.$router.push("/login")}}},a={render:function(){var t=this,e=t.$createElement,i=t._self._c||e;return i("div",{attrs:{id:"app"}},[i("el-row",[i("el-menu",{staticClass:"el-menu",attrs:{theme:"dark","default-active":t.$router.path,mode:"horizontal",router:!1}},[i("el-menu-item",{attrs:{index:"1"},on:{click:t.collapse}},[t._v("管理系统")]),t._v(" "),i("el-submenu",{attrs:{index:"2"}},[i("template",{slot:"title"},[t._v("我的工作台")]),t._v(" "),i("el-menu-item",{attrs:{index:"2-1"}},[t._v("选项1")]),t._v(" "),i("el-menu-item",{attrs:{index:"2-2"}},[t._v("选项2")]),t._v(" "),i("el-menu-item",{attrs:{index:"2-3"}},[t._v("选项3")])],2),t._v(" "),i("el-menu-item",{attrs:{index:"3"}},[i("a",{attrs:{href:"https://www.baidu.com",target:"_blank"}},[t._v("baiu")])]),t._v(" "),i("el-menu-item",{attrs:{index:"4"}},[i("a",{attrs:{href:"javascript:;"},on:{click:t.logout}},[t._v("退出")])])],1)],1),t._v(" "),i("el-row",{attrs:{type:"flex"}},[i("el-menu",{attrs:{"default-active":t.$router.index,router:!0,mode:"vertical",collapse:t.isCollapse}},[i("el-menu-item",{attrs:{index:"/admin/adminArticleList"}},[i("i",{staticClass:"el-icon-menu"}),t._v(" "),i("span",{attrs:{slot:"title"},slot:"title"},[t._v("文章列表")])]),t._v(" "),i("el-menu-item",{attrs:{index:"/admin/adminArticle"}},[i("i",{staticClass:"el-icon-setting"}),t._v(" "),i("span",{attrs:{slot:"title"},slot:"title"},[t._v("新建文章")])])],1),t._v(" "),i("el-col",{staticClass:"row-bg",attrs:{span:24}},[i("transition",{attrs:{name:"fade",mode:"out-in"}},[i("router-view")],1)],1)],1)],1)},staticRenderFns:[]};var n=i("VU/8")(s,a,!1,function(t){i("+dWO")},null,null);e.default=n.exports}});
2 | //# sourceMappingURL=8.9c254b1a97383e9c1acd.js.map
--------------------------------------------------------------------------------
/dist/static/js/9.a6eca05e6f7b77ec8d5d.js:
--------------------------------------------------------------------------------
1 | webpackJsonp([9],{"218W":function(t,e,a){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var n=a("mtWM"),l=a.n(n),i={data:function(){return{pageSize:20,page:1,tableData:[]}},methods:{init:function(){var t=this,e={page:this.page,pageSize:this.pageSize};l.a.get("/api/articleList_admin",{params:e}).then(function(e){var a=e.data;"0"==a.status?t.tableData=a.result.list:t.tableData=[]})},handleDelete:function(t){var e=this,a=this.tableData[t].articleId;this.$confirm("将删除该文章, 是否继续?","警告",{confirmButtonText:"确定",cancelButtonText:"取消",type:"warning"}).then(function(){l.a.post("/api/articleDelete",{articleId:a}).then(function(t){"0"==t.data.status?(e.$message({type:"success",message:"文章已删除"}),e.init()):e.$message.error("未删除成功")})})},handle:function(t){var e=this.tableData[t].articleId;this.$router.push({path:"/admin/adminChange",query:{articleId:e}})}},mounted:function(){this.init()}},r={render:function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("div",[a("el-table",{staticStyle:{width:"100%"},attrs:{data:t.tableData,border:"","default-sort":{prop:"date",order:"descending"}}},[a("el-table-column",{attrs:{prop:"articleId",label:"编号",sortable:"",width:"150"}}),t._v(" "),a("el-table-column",{attrs:{prop:"title",label:"标题",width:"90"}}),t._v(" "),a("el-table-column",{attrs:{prop:"describtion",label:"描述",width:"150"}}),t._v(" "),a("el-table-column",{attrs:{prop:"tag",label:"标签",width:"70"}}),t._v(" "),a("el-table-column",{attrs:{prop:"createDate",label:"发布时间",width:"180"}}),t._v(" "),a("el-table-column",{attrs:{prop:"content",label:"摘要"}}),t._v(" "),a("el-table-column",{attrs:{label:"操作",width:"210"},scopedSlots:t._u([{key:"default",fn:function(e){return[a("el-button",{attrs:{type:"info",size:"small"},on:{click:function(a){t.handle(e.$index,e.row)}}},[t._v("查看/编辑\n ")]),t._v(" "),a("el-button",{attrs:{type:"danger",size:"small"},on:{click:function(a){t.handleDelete(e.$index,e.row)}}},[t._v("删除\n ")])]}}])})],1)],1)},staticRenderFns:[]};var s=a("VU/8")(i,r,!1,function(t){a("z/Ah")},null,null);e.default=s.exports},"z/Ah":function(t,e){}});
2 | //# sourceMappingURL=9.a6eca05e6f7b77ec8d5d.js.map
--------------------------------------------------------------------------------
/server/server.js:
--------------------------------------------------------------------------------
1 | var express = require('express');
2 | var path = require('path');
3 | var favicon = require('serve-favicon');
4 | var logger = require('morgan');
5 | var cookieParser = require('cookie-parser');
6 | var bodyParser = require('body-parser');
7 | var session = require('express-session');
8 | var swig = require('swig');
9 | var multipart = require('connect-multiparty');
10 |
11 |
12 | var mongoose = require('mongoose');
13 | var config = require('../config');
14 |
15 |
16 | // mongoose setup
17 | mongoose.connect(config.server.mongodb);
18 | mongoose.connection.on("connected", function () {
19 | console.log("MongoDB connect " + config.server.mongodb + " success");
20 | });
21 | mongoose.connection.on("error", function (error) {
22 | console.log("MongoDB connect " + config.server.mongodb + " fail:" + error);
23 | });
24 | mongoose.connection.on("disconnected", function () {
25 | console.log("MongoDB connect disconnected");
26 | });
27 |
28 |
29 | // passport setup
30 | //passport.use(User.createStrategy());
31 | //passport.serializeUser(User.serializeUser());
32 | //passport.deserializeUser(User.deserializeUser());
33 |
34 |
35 | // 默认开发模式,生产模式待开发
36 | var app = express();
37 |
38 | app.get('/', function (req, res) {
39 | console.log("redirect to /blog")
40 | res.redirect('/blog')
41 | });
42 |
43 | app.set('port', config.server.port);
44 |
45 |
46 | app.use(logger('dev'));
47 | app.use(bodyParser.json({limit: '50mb'}));
48 | app.use(bodyParser.urlencoded({limit: '50mb', extended: false}));
49 | app.use(cookieParser());
50 | //app.use(favicon(__dirname + '/favicon.ico'));
51 |
52 | app.use(express.static(config.build.assetsRoot));
53 |
54 | // routes
55 |
56 | var route = require('./routes')
57 | route(app)
58 |
59 |
60 | console.log('> Starting multiSpa server...')
61 |
62 |
63 | app.listen(app.get('port'), function () {
64 | var uri = 'http://localhost:' + app.get('port')
65 | console.log('> Server Started at uri:' + uri);
66 | });
67 |
68 |
69 | var _resolve
70 | var readyPromise = new Promise(resolve => {
71 | _resolve = resolve
72 | })
73 | module.exports = {
74 | ready: readyPromise,
75 | close: () => {
76 | server.close()
77 | }
78 | }
79 |
80 |
81 |
--------------------------------------------------------------------------------
/src/views/demo/components/nav1/user.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 |
30 |
31 |
32 |
33 |
34 |
35 |
76 |
77 |
80 |
--------------------------------------------------------------------------------
/src/assets/theme/theme-darkblue/icon.css:
--------------------------------------------------------------------------------
1 | @font-face{font-family:element-icons;src:url(fonts/element-icons.woff?t=1472440741) format('woff'),url(fonts/element-icons.ttf?t=1472440741) format('truetype');font-weight:400;font-style:normal}[class*=" el-icon-"],[class^=el-icon-]{font-family:element-icons!important;speak:none;font-style:normal;font-weight:400;font-variant:normal;text-transform:none;line-height:1;vertical-align:baseline;display:inline-block;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.el-icon-arrow-down:before{content:"\e600"}.el-icon-arrow-left:before{content:"\e601"}.el-icon-arrow-right:before{content:"\e602"}.el-icon-arrow-up:before{content:"\e603"}.el-icon-caret-bottom:before{content:"\e604"}.el-icon-caret-left:before{content:"\e605"}.el-icon-caret-right:before{content:"\e606"}.el-icon-caret-top:before{content:"\e607"}.el-icon-check:before{content:"\e608"}.el-icon-circle-check:before{content:"\e609"}.el-icon-circle-close:before{content:"\e60a"}.el-icon-circle-cross:before{content:"\e60b"}.el-icon-close:before{content:"\e60c"}.el-icon-upload:before{content:"\e60d"}.el-icon-d-arrow-left:before{content:"\e60e"}.el-icon-d-arrow-right:before{content:"\e60f"}.el-icon-d-caret:before{content:"\e610"}.el-icon-date:before{content:"\e611"}.el-icon-delete:before{content:"\e612"}.el-icon-document:before{content:"\e613"}.el-icon-edit:before{content:"\e614"}.el-icon-information:before{content:"\e615"}.el-icon-loading:before{content:"\e616"}.el-icon-menu:before{content:"\e617"}.el-icon-message:before{content:"\e618"}.el-icon-minus:before{content:"\e619"}.el-icon-more:before{content:"\e61a"}.el-icon-picture:before{content:"\e61b"}.el-icon-plus:before{content:"\e61c"}.el-icon-search:before{content:"\e61d"}.el-icon-setting:before{content:"\e61e"}.el-icon-share:before{content:"\e61f"}.el-icon-star-off:before{content:"\e620"}.el-icon-star-on:before{content:"\e621"}.el-icon-time:before{content:"\e622"}.el-icon-warning:before{content:"\e623"}.el-icon-delete2:before{content:"\e624"}.el-icon-upload2:before{content:"\e627"}.el-icon-view:before{content:"\e626"}.el-icon-loading{animation:rotating 1s linear infinite}.el-icon--right{margin-left:5px}.el-icon--left{margin-right:5px}@keyframes rotating{0%{transform:rotateZ(0)}100%{transform:rotateZ(360deg)}}
--------------------------------------------------------------------------------
/src/assets/theme/theme-green/icon.css:
--------------------------------------------------------------------------------
1 | @font-face{font-family:element-icons;src:url(fonts/element-icons.woff?t=1472440741) format('woff'),url(fonts/element-icons.ttf?t=1472440741) format('truetype');font-weight:400;font-style:normal}[class*=" el-icon-"],[class^=el-icon-]{font-family:element-icons!important;speak:none;font-style:normal;font-weight:400;font-variant:normal;text-transform:none;line-height:1;vertical-align:baseline;display:inline-block;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.el-icon-arrow-down:before{content:"\e600"}.el-icon-arrow-left:before{content:"\e601"}.el-icon-arrow-right:before{content:"\e602"}.el-icon-arrow-up:before{content:"\e603"}.el-icon-caret-bottom:before{content:"\e604"}.el-icon-caret-left:before{content:"\e605"}.el-icon-caret-right:before{content:"\e606"}.el-icon-caret-top:before{content:"\e607"}.el-icon-check:before{content:"\e608"}.el-icon-circle-check:before{content:"\e609"}.el-icon-circle-close:before{content:"\e60a"}.el-icon-circle-cross:before{content:"\e60b"}.el-icon-close:before{content:"\e60c"}.el-icon-upload:before{content:"\e60d"}.el-icon-d-arrow-left:before{content:"\e60e"}.el-icon-d-arrow-right:before{content:"\e60f"}.el-icon-d-caret:before{content:"\e610"}.el-icon-date:before{content:"\e611"}.el-icon-delete:before{content:"\e612"}.el-icon-document:before{content:"\e613"}.el-icon-edit:before{content:"\e614"}.el-icon-information:before{content:"\e615"}.el-icon-loading:before{content:"\e616"}.el-icon-menu:before{content:"\e617"}.el-icon-message:before{content:"\e618"}.el-icon-minus:before{content:"\e619"}.el-icon-more:before{content:"\e61a"}.el-icon-picture:before{content:"\e61b"}.el-icon-plus:before{content:"\e61c"}.el-icon-search:before{content:"\e61d"}.el-icon-setting:before{content:"\e61e"}.el-icon-share:before{content:"\e61f"}.el-icon-star-off:before{content:"\e620"}.el-icon-star-on:before{content:"\e621"}.el-icon-time:before{content:"\e622"}.el-icon-warning:before{content:"\e623"}.el-icon-delete2:before{content:"\e624"}.el-icon-upload2:before{content:"\e627"}.el-icon-view:before{content:"\e626"}.el-icon-loading{animation:rotating 1s linear infinite}.el-icon--right{margin-left:5px}.el-icon--left{margin-right:5px}@keyframes rotating{0%{transform:rotateZ(0)}100%{transform:rotateZ(360deg)}}
--------------------------------------------------------------------------------
/src/views/blog/components/Header.vue:
--------------------------------------------------------------------------------
1 |
2 |
23 |
24 |
25 |
71 |
--------------------------------------------------------------------------------
/src/views/blogadmin/components/loading.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
20 |
21 |
96 |
--------------------------------------------------------------------------------
/src/javascripts/account.js:
--------------------------------------------------------------------------------
1 | /**
2 | * Created by harttle on 1/6/15.
3 | */
4 |
5 | var msgMap = {
6 | "Unauthorized": '用户名或密码不正确',
7 | "Unactived": '该用户尚未激活'
8 | };
9 |
10 | function login(){
11 | if(!simpleValidate()) return;
12 | $.post('', $('form').serialize())
13 | .done(function(){
14 | window.location = getQueryStringValue('next') || '/home';
15 | })
16 | .fail(function(e){
17 | warn(msgMap[e.responseText] || '未知错误');
18 | });
19 |
20 | function getQueryStringValue (key) {
21 | return unescape(window.location.search.replace(new RegExp("^(?:.*[&\\?]" + escape(key).replace(/[\.\+\*]/g, "\\$&") + "(?:\\=([^&]*))?)?.*$", "i"), "$1"));
22 | }
23 | }
24 |
25 | function resetPassword(){
26 | var p = $('#password').val();
27 | var p1 = $('#password1').val();
28 | if(p===''){
29 | warn('密码不能为空');
30 | return false;
31 | }
32 | if(p !== p1){
33 | warn('两次输入的密码不一致');
34 | return false;
35 | }
36 | return true;
37 | }
38 |
39 | function signup(){
40 | if(!simpleValidate()) return;
41 |
42 | var password = $('[name=password]').val();
43 | var password1 = $('#password1').val();
44 | if(password != password1){
45 | warn('两次输入的密码不一致');
46 | return;
47 | }
48 | $.post('', $('form').serialize())
49 | .done(info)
50 | .fail(function(res){
51 | warn(res.responseText);
52 | });
53 | }
54 |
55 | function simpleValidate(){
56 | var username = $('[name=username]').val().trim();
57 | var password = $('[name=password]').val();
58 |
59 | if(username.length === 0){
60 | warn('邮件不能为空');
61 | return false;
62 | }
63 | if(!validateEmail(username)){
64 | warn('邮件不合法');
65 | return false;
66 | }
67 | if(password.length === 0){
68 | warn('密码不能为空');
69 | return false;
70 | }
71 | return true;
72 | }
73 |
74 | function warn(msg){
75 | $('.alert').hide();
76 | $('.alert-danger').html(msg).show();
77 | }
78 |
79 | function info(msg){
80 | $('.alert').hide();
81 | $('.alert-success').html(msg).show();
82 | }
83 |
84 | function validateEmail(email) {
85 | var re = /^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;
86 | return re.test(email);
87 | }
--------------------------------------------------------------------------------
/src/views/blogadmin/components/admin.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
15 |
16 |
17 |
18 |
19 |
20 |
21 | 文章列表
22 |
23 |
24 |
25 | 新建文章
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
66 |
67 |
80 |
--------------------------------------------------------------------------------
/src/views/demo/components/nav1/Form.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 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 | 立即创建
43 | 取消
44 |
45 |
46 |
47 |
48 |
--------------------------------------------------------------------------------
/src/assets/theme/theme-green/step.css:
--------------------------------------------------------------------------------
1 | @charset "UTF-8";.el-step.is-horizontal,.el-step.is-vertical .el-step__head,.el-step.is-vertical .el-step__main,.el-step__line{display:inline-block}.el-step{position:relative;vertical-align:top}.el-step.is-vertical .el-step__main{padding-left:10px}.el-step__line{position:absolute;border-color:inherit;background-color:rgb(191, 217, 214)}.el-step__line.is-vertical{width:2px;box-sizing:border-box;top:32px;bottom:0;left:15px}.el-step__line.is-horizontal{top:15px;height:2px;left:32px;right:0}.el-step__line.is-icon.is-horizontal{right:4px}.el-step__line-inner{display:block;border-width:1px;border-style:solid;border-color:inherit;transition:all 150ms;width:0;height:0}.el-step__icon{display:block;line-height:28px}.el-step__icon>*{line-height:inherit;vertical-align:middle}.el-step__head{width:28px;height:28px;border-radius:50%;background-color:transparent;text-align:center;line-height:28px;font-size:28px;vertical-align:top;transition:all 150ms}.el-step__head.is-finish{color:#18c79c;border-color:#18c79c}.el-step__head.is-error{color:#ff4949;border-color:#ff4949}.el-step__head.is-success{color:#13ce66;border-color:#13ce66}.el-step__head.is-process,.el-step__head.is-wait{color:rgb(191, 217, 214);border-color:rgb(191, 217, 214)}.el-step__head.is-text{font-size:14px;border-width:2px;border-style:solid}.el-step__head.is-text.is-finish{color:#fff;background-color:#18c79c;border-color:#18c79c}.el-step__head.is-text.is-error{color:#fff;background-color:#ff4949;border-color:#ff4949}.el-step__head.is-text.is-success{color:#fff;background-color:#13ce66;border-color:#13ce66}.el-step__head.is-text.is-wait{color:rgb(191, 217, 214);background-color:#fff;border-color:rgb(191, 217, 214)}.el-step__head.is-text.is-process{color:#fff;background-color:rgb(191, 217, 214);border-color:rgb(191, 217, 214)}.el-step__main{white-space:normal;padding-right:10px;text-align:left}.el-step__title{font-size:14px;line-height:32px;display:inline-block}.el-step__title.is-finish{font-weight:700;color:#18c79c}.el-step__title.is-error{font-weight:700;color:#ff4949}.el-step__title.is-success{font-weight:700;color:#13ce66}.el-step__title.is-wait{font-weight:400;color:rgb(151, 190, 187)}.el-step__title.is-process{font-weight:700;color:rgb(72, 106, 103)}.el-step__description{font-size:12px;font-weight:400;line-height:14px}.el-step__description.is-finish{color:#18c79c}.el-step__description.is-error{color:#ff4949}.el-step__description.is-success{color:#13ce66}.el-step__description.is-wait{color:rgb(191, 217, 214)}.el-step__description.is-process{color:rgb(131, 165, 162)}
--------------------------------------------------------------------------------
/src/assets/theme/theme-darkblue/step.css:
--------------------------------------------------------------------------------
1 | @charset "UTF-8";.el-step.is-horizontal,.el-step.is-vertical .el-step__head,.el-step.is-vertical .el-step__main,.el-step__line{display:inline-block}.el-step{position:relative;vertical-align:top}.el-step.is-vertical .el-step__main{padding-left:10px}.el-step__line{position:absolute;border-color:inherit;background-color:rgb(191, 203, 217)}.el-step__line.is-vertical{width:2px;box-sizing:border-box;top:32px;bottom:0;left:15px}.el-step__line.is-horizontal{top:15px;height:2px;left:32px;right:0}.el-step__line.is-icon.is-horizontal{right:4px}.el-step__line-inner{display:block;border-width:1px;border-style:solid;border-color:inherit;transition:all 150ms;width:0;height:0}.el-step__icon{display:block;line-height:28px}.el-step__icon>*{line-height:inherit;vertical-align:middle}.el-step__head{width:28px;height:28px;border-radius:50%;background-color:transparent;text-align:center;line-height:28px;font-size:28px;vertical-align:top;transition:all 150ms}.el-step__head.is-finish{color:#1d8ce0;border-color:#1d8ce0}.el-step__head.is-error{color:#ff4949;border-color:#ff4949}.el-step__head.is-success{color:#13ce66;border-color:#13ce66}.el-step__head.is-process,.el-step__head.is-wait{color:rgb(191, 203, 217);border-color:rgb(191, 203, 217)}.el-step__head.is-text{font-size:14px;border-width:2px;border-style:solid}.el-step__head.is-text.is-finish{color:#fff;background-color:#1d8ce0;border-color:#1d8ce0}.el-step__head.is-text.is-error{color:#fff;background-color:#ff4949;border-color:#ff4949}.el-step__head.is-text.is-success{color:#fff;background-color:#13ce66;border-color:#13ce66}.el-step__head.is-text.is-wait{color:rgb(191, 203, 217);background-color:#fff;border-color:rgb(191, 203, 217)}.el-step__head.is-text.is-process{color:#fff;background-color:rgb(191, 203, 217);border-color:rgb(191, 203, 217)}.el-step__main{white-space:normal;padding-right:10px;text-align:left}.el-step__title{font-size:14px;line-height:32px;display:inline-block}.el-step__title.is-finish{font-weight:700;color:#1d8ce0}.el-step__title.is-error{font-weight:700;color:#ff4949}.el-step__title.is-success{font-weight:700;color:#13ce66}.el-step__title.is-wait{font-weight:400;color:rgb(151, 168, 190)}.el-step__title.is-process{font-weight:700;color:rgb(72, 87, 106)}.el-step__description{font-size:12px;font-weight:400;line-height:14px}.el-step__description.is-finish{color:#1d8ce0}.el-step__description.is-error{color:#ff4949}.el-step__description.is-success{color:#13ce66}.el-step__description.is-wait{color:rgb(191, 203, 217)}.el-step__description.is-process{color:rgb(131, 145, 165)}
--------------------------------------------------------------------------------
/src/views/test/components/HelloWorld.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
{{ msg }}
4 |
Essential Links
5 |
48 |
Ecosystem
49 |
83 |
84 |
85 |
86 |
96 |
97 |
98 |
114 |
--------------------------------------------------------------------------------
/src/assets/theme/theme-green/tooltip.css:
--------------------------------------------------------------------------------
1 | @charset "UTF-8";.el-tooltip__popper{position:absolute;border-radius:4px;padding:10px;z-index:2000;font-size:12px;line-height:1.2}.el-tooltip__popper .popper__arrow,.el-tooltip__popper .popper__arrow::after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.el-tooltip__popper .popper__arrow{border-width:6px}.el-tooltip__popper .popper__arrow::after{content:" ";border-width:5px}.el-tooltip__popper[x-placement^=top]{margin-bottom:12px}.el-tooltip__popper[x-placement^=top] .popper__arrow{bottom:-6px;border-top-color:rgb(31, 61, 57);border-bottom-width:0}.el-tooltip__popper[x-placement^=top] .popper__arrow::after{bottom:1px;margin-left:-5px;border-top-color:rgb(31, 61, 57);border-bottom-width:0}.el-tooltip__popper[x-placement^=bottom]{margin-top:12px}.el-tooltip__popper[x-placement^=bottom] .popper__arrow{top:-6px;border-top-width:0;border-bottom-color:rgb(31, 61, 57)}.el-tooltip__popper[x-placement^=bottom] .popper__arrow::after{top:1px;margin-left:-5px;border-top-width:0;border-bottom-color:rgb(31, 61, 57)}.el-tooltip__popper[x-placement^=right]{margin-left:12px}.el-tooltip__popper[x-placement^=right] .popper__arrow{left:-6px;border-right-color:rgb(31, 61, 57);border-left-width:0}.el-tooltip__popper[x-placement^=right] .popper__arrow::after{bottom:-5px;left:1px;border-right-color:rgb(31, 61, 57);border-left-width:0}.el-tooltip__popper[x-placement^=left]{margin-right:12px}.el-tooltip__popper[x-placement^=left] .popper__arrow{right:-6px;border-right-width:0;border-left-color:rgb(31, 61, 57)}.el-tooltip__popper[x-placement^=left] .popper__arrow::after{right:1px;bottom:-5px;margin-left:-5px;border-right-width:0;border-left-color:rgb(31, 61, 57)}.el-tooltip__popper.is-light{background:#fff;border:1px solid rgb(31, 61, 57)}.el-tooltip__popper.is-light[x-placement^=top] .popper__arrow{border-top-color:rgb(31, 61, 57)}.el-tooltip__popper.is-light[x-placement^=top] .popper__arrow::after{border-top-color:#fff}.el-tooltip__popper.is-light[x-placement^=bottom] .popper__arrow{border-bottom-color:rgb(31, 61, 57)}.el-tooltip__popper.is-light[x-placement^=bottom] .popper__arrow::after{border-bottom-color:#fff}.el-tooltip__popper.is-light[x-placement^=left] .popper__arrow{border-left-color:rgb(31, 61, 57)}.el-tooltip__popper.is-light[x-placement^=left] .popper__arrow::after{border-left-color:#fff}.el-tooltip__popper.is-light[x-placement^=right] .popper__arrow{border-right-color:rgb(31, 61, 57)}.el-tooltip__popper.is-light[x-placement^=right] .popper__arrow::after{border-right-color:#fff}.el-tooltip__popper.is-dark{background:rgb(31, 61, 57);color:#fff}
--------------------------------------------------------------------------------
/src/assets/theme/theme-darkblue/tooltip.css:
--------------------------------------------------------------------------------
1 | @charset "UTF-8";.el-tooltip__popper{position:absolute;border-radius:4px;padding:10px;z-index:2000;font-size:12px;line-height:1.2}.el-tooltip__popper .popper__arrow,.el-tooltip__popper .popper__arrow::after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.el-tooltip__popper .popper__arrow{border-width:6px}.el-tooltip__popper .popper__arrow::after{content:" ";border-width:5px}.el-tooltip__popper[x-placement^=top]{margin-bottom:12px}.el-tooltip__popper[x-placement^=top] .popper__arrow{bottom:-6px;border-top-color:rgb(31, 45, 61);border-bottom-width:0}.el-tooltip__popper[x-placement^=top] .popper__arrow::after{bottom:1px;margin-left:-5px;border-top-color:rgb(31, 45, 61);border-bottom-width:0}.el-tooltip__popper[x-placement^=bottom]{margin-top:12px}.el-tooltip__popper[x-placement^=bottom] .popper__arrow{top:-6px;border-top-width:0;border-bottom-color:rgb(31, 45, 61)}.el-tooltip__popper[x-placement^=bottom] .popper__arrow::after{top:1px;margin-left:-5px;border-top-width:0;border-bottom-color:rgb(31, 45, 61)}.el-tooltip__popper[x-placement^=right]{margin-left:12px}.el-tooltip__popper[x-placement^=right] .popper__arrow{left:-6px;border-right-color:rgb(31, 45, 61);border-left-width:0}.el-tooltip__popper[x-placement^=right] .popper__arrow::after{bottom:-5px;left:1px;border-right-color:rgb(31, 45, 61);border-left-width:0}.el-tooltip__popper[x-placement^=left]{margin-right:12px}.el-tooltip__popper[x-placement^=left] .popper__arrow{right:-6px;border-right-width:0;border-left-color:rgb(31, 45, 61)}.el-tooltip__popper[x-placement^=left] .popper__arrow::after{right:1px;bottom:-5px;margin-left:-5px;border-right-width:0;border-left-color:rgb(31, 45, 61)}.el-tooltip__popper.is-light{background:#fff;border:1px solid rgb(31, 45, 61)}.el-tooltip__popper.is-light[x-placement^=top] .popper__arrow{border-top-color:rgb(31, 45, 61)}.el-tooltip__popper.is-light[x-placement^=top] .popper__arrow::after{border-top-color:#fff}.el-tooltip__popper.is-light[x-placement^=bottom] .popper__arrow{border-bottom-color:rgb(31, 45, 61)}.el-tooltip__popper.is-light[x-placement^=bottom] .popper__arrow::after{border-bottom-color:#fff}.el-tooltip__popper.is-light[x-placement^=left] .popper__arrow{border-left-color:rgb(31, 45, 61)}.el-tooltip__popper.is-light[x-placement^=left] .popper__arrow::after{border-left-color:#fff}.el-tooltip__popper.is-light[x-placement^=right] .popper__arrow{border-right-color:rgb(31, 45, 61)}.el-tooltip__popper.is-light[x-placement^=right] .popper__arrow::after{border-right-color:#fff}.el-tooltip__popper.is-dark{background:rgb(31, 45, 61);color:#fff}
--------------------------------------------------------------------------------
/src/javascripts/util.js:
--------------------------------------------------------------------------------
1 | var SIGN_REGEXP = /([yMdhsm])(\1*)/g;
2 | var DEFAULT_PATTERN = 'yyyy-MM-dd';
3 | function padding(s, len) {
4 | var len = len - (s + '').length;
5 | for (var i = 0; i < len; i++) { s = '0' + s; }
6 | return s;
7 | };
8 |
9 | export default {
10 | getQueryStringByName: function (name) {
11 | var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)", "i");
12 | var r = window.location.search.substr(1).match(reg);
13 | var context = "";
14 | if (r != null)
15 | context = r[2];
16 | reg = null;
17 | r = null;
18 | return context == null || context == "" || context == "undefined" ? "" : context;
19 | },
20 | formatDate: {
21 |
22 |
23 | format: function (date, pattern) {
24 | pattern = pattern || DEFAULT_PATTERN;
25 | return pattern.replace(SIGN_REGEXP, function ($0) {
26 | switch ($0.charAt(0)) {
27 | case 'y': return padding(date.getFullYear(), $0.length);
28 | case 'M': return padding(date.getMonth() + 1, $0.length);
29 | case 'd': return padding(date.getDate(), $0.length);
30 | case 'w': return date.getDay() + 1;
31 | case 'h': return padding(date.getHours(), $0.length);
32 | case 'm': return padding(date.getMinutes(), $0.length);
33 | case 's': return padding(date.getSeconds(), $0.length);
34 | }
35 | });
36 | },
37 | parse: function (dateString, pattern) {
38 | var matchs1 = pattern.match(SIGN_REGEXP);
39 | var matchs2 = dateString.match(/(\d)+/g);
40 | if (matchs1.length == matchs2.length) {
41 | var _date = new Date(1970, 0, 1);
42 | for (var i = 0; i < matchs1.length; i++) {
43 | var _int = parseInt(matchs2[i]);
44 | var sign = matchs1[i];
45 | switch (sign.charAt(0)) {
46 | case 'y': _date.setFullYear(_int); break;
47 | case 'M': _date.setMonth(_int - 1); break;
48 | case 'd': _date.setDate(_int); break;
49 | case 'h': _date.setHours(_int); break;
50 | case 'm': _date.setMinutes(_int); break;
51 | case 's': _date.setSeconds(_int); break;
52 | }
53 | }
54 | return _date;
55 | }
56 | return null;
57 | }
58 |
59 | }
60 |
61 | };
62 |
--------------------------------------------------------------------------------
/src/assets/theme/theme-darkblue/checkbox.css:
--------------------------------------------------------------------------------
1 | @charset "UTF-8";.el-checkbox,.el-checkbox__input{white-space:nowrap;cursor:pointer;display:inline-block;position:relative}.el-checkbox{color:rgb(31, 45, 61);-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none}.el-checkbox+.el-checkbox{margin-left:15px}.el-checkbox__input{outline:0;line-height:1;vertical-align:middle}.el-checkbox__input.is-indeterminate .el-checkbox__inner{background-color:#1d8ce0;border-color:rgb(1, 130, 228)}.el-checkbox__input.is-indeterminate .el-checkbox__inner::before{content:'';position:absolute;display:block;border:1px solid #fff;margin-top:-1px;left:3px;right:3px;top:50%}.el-checkbox__input.is-indeterminate .el-checkbox__inner::after{display:none}.el-checkbox__input.is-focus .el-checkbox__inner{border-color:#1d8ce0}.el-checkbox__input.is-checked .el-checkbox__inner{background-color:#1d8ce0;border-color:rgb(1, 130, 228)}.el-checkbox__input.is-checked .el-checkbox__inner::after{-ms-transform:rotate(45deg) scaleY(1);transform:rotate(45deg) scaleY(1)}.el-checkbox__input.is-disabled .el-checkbox__inner{background-color:rgb(238, 241, 246);border-color:rgb(209, 219, 229);cursor:not-allowed}.el-checkbox__input.is-disabled .el-checkbox__inner::after{cursor:not-allowed;border-color:rgb(238, 241, 246)}.el-checkbox__input.is-disabled .el-checkbox__inner+.el-checkbox__label{cursor:not-allowed}.el-checkbox__input.is-disabled.is-checked .el-checkbox__inner{background-color:rgb(209, 219, 229);border-color:rgb(209, 219, 229)}.el-checkbox__input.is-disabled.is-checked .el-checkbox__inner::after{border-color:#fff}.el-checkbox__input.is-disabled.is-indeterminate .el-checkbox__inner{background-color:rgb(209, 219, 229);border-color:rgb(209, 219, 229)}.el-checkbox__input.is-disabled.is-indeterminate .el-checkbox__inner::before{border-color:#fff}.el-checkbox__input.is-disabled+.el-checkbox__label{color:#bbb;cursor:not-allowed}.el-checkbox__inner{display:inline-block;position:relative;border:1px solid rgb(191, 203, 217);border-radius:4px;box-sizing:border-box;width:18px;height:18px;background-color:#fff;z-index:1;transition:border-color .25s cubic-bezier(.71,-.46,.29,1.46),background-color .25s cubic-bezier(.71,-.46,.29,1.46)}.el-checkbox__inner:hover{border-color:#1d8ce0}.el-checkbox__inner::after{box-sizing:content-box;content:"";border:2px solid #fff;border-left:0;border-top:0;height:8px;left:5px;position:absolute;top:1px;-ms-transform:rotate(45deg) scaleY(0);transform:rotate(45deg) scaleY(0);width:4px;transition:transform .15s cubic-bezier(.71,-.46,.88,.6) .05s;-ms-transform-origin:center;transform-origin:center}.el-checkbox__original{opacity:0;outline:0;position:absolute;margin:0;left:-999px}.el-checkbox__label{font-size:14px;padding-left:5px}
--------------------------------------------------------------------------------
/src/assets/theme/theme-green/checkbox.css:
--------------------------------------------------------------------------------
1 | @charset "UTF-8";.el-checkbox,.el-checkbox__input{white-space:nowrap;cursor:pointer;display:inline-block;position:relative}.el-checkbox{color:rgb(31, 61, 57);-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none}.el-checkbox+.el-checkbox{margin-left:15px}.el-checkbox__input{outline:0;line-height:1;vertical-align:middle}.el-checkbox__input.is-indeterminate .el-checkbox__inner{background-color:#18c79c;border-color:rgb(1, 203, 152)}.el-checkbox__input.is-indeterminate .el-checkbox__inner::before{content:'';position:absolute;display:block;border:1px solid #fff;margin-top:-1px;left:3px;right:3px;top:50%}.el-checkbox__input.is-indeterminate .el-checkbox__inner::after{display:none}.el-checkbox__input.is-focus .el-checkbox__inner{border-color:#18c79c}.el-checkbox__input.is-checked .el-checkbox__inner{background-color:#18c79c;border-color:rgb(1, 203, 152)}.el-checkbox__input.is-checked .el-checkbox__inner::after{-ms-transform:rotate(45deg) scaleY(1);transform:rotate(45deg) scaleY(1)}.el-checkbox__input.is-disabled .el-checkbox__inner{background-color:rgb(238, 246, 246);border-color:rgb(209, 229, 227);cursor:not-allowed}.el-checkbox__input.is-disabled .el-checkbox__inner::after{cursor:not-allowed;border-color:rgb(238, 246, 246)}.el-checkbox__input.is-disabled .el-checkbox__inner+.el-checkbox__label{cursor:not-allowed}.el-checkbox__input.is-disabled.is-checked .el-checkbox__inner{background-color:rgb(209, 229, 227);border-color:rgb(209, 229, 227)}.el-checkbox__input.is-disabled.is-checked .el-checkbox__inner::after{border-color:#fff}.el-checkbox__input.is-disabled.is-indeterminate .el-checkbox__inner{background-color:rgb(209, 229, 227);border-color:rgb(209, 229, 227)}.el-checkbox__input.is-disabled.is-indeterminate .el-checkbox__inner::before{border-color:#fff}.el-checkbox__input.is-disabled+.el-checkbox__label{color:#bbb;cursor:not-allowed}.el-checkbox__inner{display:inline-block;position:relative;border:1px solid rgb(191, 217, 214);border-radius:4px;box-sizing:border-box;width:18px;height:18px;background-color:#fff;z-index:1;transition:border-color .25s cubic-bezier(.71,-.46,.29,1.46),background-color .25s cubic-bezier(.71,-.46,.29,1.46)}.el-checkbox__inner:hover{border-color:#18c79c}.el-checkbox__inner::after{box-sizing:content-box;content:"";border:2px solid #fff;border-left:0;border-top:0;height:8px;left:5px;position:absolute;top:1px;-ms-transform:rotate(45deg) scaleY(0);transform:rotate(45deg) scaleY(0);width:4px;transition:transform .15s cubic-bezier(.71,-.46,.88,.6) .05s;-ms-transform-origin:center;transform-origin:center}.el-checkbox__original{opacity:0;outline:0;position:absolute;margin:0;left:-999px}.el-checkbox__label{font-size:14px;padding-left:5px}
--------------------------------------------------------------------------------
/src/views/blog/components/runTime.vue:
--------------------------------------------------------------------------------
1 |
2 | 已默默运行了
3 | {{moment}}
4 |
5 |
6 |
7 |
82 |
--------------------------------------------------------------------------------
/src/router/blog-routes.js:
--------------------------------------------------------------------------------
1 | import Vue from 'vue'
2 | import Router from 'vue-router'
3 | // import Index from '@/views/Index'
4 | // import Blog from '@/views/Blog'
5 | // import About from '@/views/About'
6 | // import Article from '@/views/Article'
7 | // import Messages from '@/views/Messages'
8 | // import admin from '@/admin/admin'
9 | // import adminArticle from '@/admin/adminArticle'
10 | // import change from '@/admin/change'
11 | // import adminArticleList from '@/admin/adminArticleList'
12 | import login from '@/views/blog/login'
13 |
14 | const Blog = resolve => require(['@/views/blog/Blog'], resolve)
15 | const About = resolve => require(['@/views/blog/About'], resolve)
16 | const Article = resolve => require(['@/views/blog/Article'], resolve)
17 | const Messages = resolve => require(['@/views/blog/messages'], resolve)
18 | const Test = resolve => require(['@/views/blog/test'], resolve)
19 |
20 | const admin = resolve => require(['@/views/blog/admin/admin'], resolve)
21 | const adminArticle = resolve => require(['@/views/blog/admin/adminArticle'], resolve)
22 | const adminChange = resolve => require(['@/views/blog/admin/adminChange'], resolve)
23 | const adminArticleList = resolve => require(['@/views/blog/admin/adminArticleList'], resolve)
24 |
25 | Vue.use(Router)
26 |
27 | export default new Router({
28 | mode: 'history',
29 | base: '/blog',
30 | routes: [
31 | {
32 | path: '/',
33 | name: 'Blog',
34 | component: Blog
35 | },
36 | {
37 | path: '/about',
38 | name: 'About',
39 | component: About
40 | },
41 | {
42 | path: '/test',
43 | name: 'Test',
44 | component: Test
45 | },
46 | {
47 | path: '/article',
48 | name: 'Article',
49 | component: Article
50 | },
51 | {
52 | path: '/messages',
53 | name: 'Messages',
54 | component: Messages
55 | },
56 | {
57 | path: '/admin',
58 | name: 'Admin',
59 | component: admin,
60 | redirect: { name: 'adminArticle'},
61 | children: [
62 | { path: '/admin/adminArticle', component: adminArticle, name: 'adminArticle'},
63 | { path: '/admin/adminChange', component: adminChange, name: 'adminChange'},
64 | { path: '/admin/adminArticleList', component: adminArticleList, name: 'adminArticleList'},
65 | ]
66 | },
67 | {
68 | path: '/login',
69 | name: 'Login',
70 | component: login,
71 | }
72 | ]
73 | })
74 |
--------------------------------------------------------------------------------
/dist/static/js/blog.faaefe1c9142e1178169.js:
--------------------------------------------------------------------------------
1 | webpackJsonp([13],{"57cR":function(t,n){},"6TR5":function(t,n){},OsYA:function(t,n){},PIDi:function(t,n,e){"use strict";Object.defineProperty(n,"__esModule",{value:!0});var o=e("7+uW"),u={render:function(){var t=this.$createElement,n=this._self._c||t;return n("div",{attrs:{id:"app"}},[n("router-view")],1)},staticRenderFns:[]};var c=e("VU/8")({name:"app"},u,!1,function(t){e("6TR5")},null,null).exports,i=e("zL8q"),a=e.n(i),r=(e("tvR6"),e("e0XP"),e("YtJ0")),f=(e("NYxO"),e("/ocq"));o.default.use(f.a);var s=new f.a({mode:"history",base:"/blog",routes:[{path:"/",name:"Blog",component:function(t){return e.e(1).then(function(){var n=[e("Aqrg")];t.apply(null,n)}.bind(this)).catch(e.oe)}},{path:"/about",name:"About",component:function(t){return e.e(4).then(function(){var n=[e("zfu0")];t.apply(null,n)}.bind(this)).catch(e.oe)}},{path:"/test",name:"Test",component:function(t){return e.e(2).then(function(){var n=[e("tOul")];t.apply(null,n)}.bind(this)).catch(e.oe)}},{path:"/article",name:"Article",component:function(t){return e.e(0).then(function(){var n=[e("Gj8k")];t.apply(null,n)}.bind(this)).catch(e.oe)}},{path:"/messages",name:"Messages",component:function(t){return e.e(3).then(function(){var n=[e("a2TI")];t.apply(null,n)}.bind(this)).catch(e.oe)}}]}),p=e("OS1Z"),l=e.n(p);e("pw1w"),e("ZRBX"),e("OsYA"),e("muqA"),e("TB7q"),e("57cR");function d(t){var n,e=new RegExp("(^| )"+t+"=([^;]*)(;|$)");return(n=document.cookie.match(e))?n[2]:null}o.default.use(a.a),o.default.use(l.a),o.default.prototype.setCookie=function(t,n,e){var o=new Date;o.setDate(o.getDate()+e),document.cookie=t+"="+escape(n)+(null==e?"":";expires="+o.toGMTString())},o.default.prototype.setCookie=function(t,n,e){var o=new Date;o.setDate(o.getDate()+e),document.cookie=t+"="+escape(n)+(null==e?"":";expires="+o.toGMTString())},o.default.prototype.getCookie=d,o.default.prototype.delCookie=function(t){var n=new Date;n.setTime(n.getTime()-1);var e=d(t);null!=e&&(document.cookie=t+"="+e+";expires="+n.toGMTString())},o.default.config.productionTip=!1,new o.default({router:s,store:r.a,render:function(t){return t(c)}}).$mount("#app")},TB7q:function(t,n){},YtJ0:function(t,n,e){"use strict";var o={};e.d(o,"increment",function(){return a}),e.d(o,"decrement",function(){return r});var u={};e.d(u,"getCount",function(){return f});var c=e("7+uW"),i=e("NYxO"),a=function(t){(0,t.commit)("INCREMENT")},r=function(t){(0,t.commit)("DECREMENT")},f=function(t){return t.count};c.default.use(i.a);n.a=new i.a.Store({actions:o,getters:u,state:{count:10},mutations:{INCREMENT:function(t){t.count++},DECREMENT:function(t){t.count--}}})},ZRBX:function(t,n){},e0XP:function(t,n){},muqA:function(t,n){},pw1w:function(t,n){},tvR6:function(t,n){}},["PIDi"]);
2 | //# sourceMappingURL=blog.faaefe1c9142e1178169.js.map
--------------------------------------------------------------------------------
/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 | server:{
9 | port:3001,
10 | mongodb: 'mongodb://192.168.1.16/tm-blog',
11 | },
12 | dev: {
13 |
14 | // Paths
15 | assetsSubDirectory: 'static',
16 | assetsPublicPath: '/',
17 | proxyTable: {
18 | '/api/*':{
19 | target: 'http://127.0.0.1:3001',
20 | },
21 | },
22 |
23 | // Various Dev Server settings
24 | host: 'localhost', // can be overwritten by process.env.HOST
25 | port: 3000, // can be overwritten by process.env.PORT, if port is in use, a free one will be determined
26 | autoOpenBrowser: false,
27 | errorOverlay: true,
28 | notifyOnErrors: true,
29 | poll: false, // https://webpack.js.org/configuration/dev-server/#devserver-watchoptions-
30 |
31 | // Use Eslint Loader?
32 | // If true, your code will be linted during bundling and
33 | // linting errors and warnings will be shown in the console.
34 | useEslint: false,
35 | // If true, eslint errors and warnings will also be shown in the error overlay
36 | // in the browser.
37 | showEslintErrorsInOverlay: false,
38 |
39 | /**
40 | * Source Maps
41 | */
42 |
43 | // https://webpack.js.org/configuration/devtool/#development
44 | devtool: 'cheap-module-eval-source-map',
45 |
46 | // If you have problems debugging vue-files in devtools,
47 | // set this to false - it *may* help
48 | // https://vue-loader.vuejs.org/en/options.html#cachebusting
49 | cacheBusting: true,
50 |
51 | cssSourceMap: true
52 | },
53 |
54 | build: {
55 | // Template for index.html
56 | index: path.resolve(__dirname, '../dist/index.html'),
57 |
58 | // Paths
59 | assetsRoot: path.resolve(__dirname, '../dist'),
60 | assetsSubDirectory: 'static',
61 | assetsPublicPath: '/',
62 |
63 | /**
64 | * Source Maps
65 | */
66 |
67 | productionSourceMap: true,
68 | // https://webpack.js.org/configuration/devtool/#production
69 | devtool: '#source-map',
70 |
71 | // Gzip off by default as many popular static hosts such as
72 | // Surge or Netlify already gzip all static assets for you.
73 | // Before setting to `true`, make sure to:
74 | // npm install --save-dev compression-webpack-plugin
75 | productionGzip: false,
76 | productionGzipExtensions: ['js', 'css'],
77 |
78 | // Run the build command with an extra argument to
79 | // View the bundle analyzer report after build finishes:
80 | // `npm run build --report`
81 | // Set to `true` or `false` to always turn it on or off
82 | bundleAnalyzerReport: process.env.npm_config_report
83 | }
84 | }
85 |
--------------------------------------------------------------------------------
/dist/static/js/blogadmin.16387c43da20612153c5.js:
--------------------------------------------------------------------------------
1 | webpackJsonp([12],{"57cR":function(n,t){},H4UM:function(n,t){},OsYA:function(n,t){},TB7q:function(n,t){},YtJ0:function(n,t,e){"use strict";var o={};e.d(o,"increment",function(){return c}),e.d(o,"decrement",function(){return r});var i={};e.d(i,"getCount",function(){return f});var u=e("7+uW"),a=e("NYxO"),c=function(n){(0,n.commit)("INCREMENT")},r=function(n){(0,n.commit)("DECREMENT")},f=function(n){return n.count};u.default.use(a.a);t.a=new a.a.Store({actions:o,getters:i,state:{count:10},mutations:{INCREMENT:function(n){n.count++},DECREMENT:function(n){n.count--}}})},ZRBX:function(n,t){},e0XP:function(n,t){},muqA:function(n,t){},pw1w:function(n,t){},tvR6:function(n,t){},wJBr:function(n,t,e){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=e("7+uW"),i={render:function(){var n=this.$createElement,t=this._self._c||n;return t("div",{attrs:{id:"app"}},[t("router-view")],1)},staticRenderFns:[]};var u=e("VU/8")({name:"app"},i,!1,function(n){e("H4UM")},null,null).exports,a=e("zL8q"),c=e.n(a),r=(e("tvR6"),e("e0XP"),e("YtJ0")),f=(e("NYxO"),e("/ocq"));o.default.use(f.a);var l=new f.a({mode:"history",base:"/blogadmin",routes:[{path:"/",name:"Admin",component:function(n){return e.e(8).then(function(){var t=[e("Bfhk")];n.apply(null,t)}.bind(this)).catch(e.oe)},redirect:{name:"adminArticle"},children:[{path:"/admin/adminArticle",component:function(n){return e.e(7).then(function(){var t=[e("9FpE")];n.apply(null,t)}.bind(this)).catch(e.oe)},name:"adminArticle"},{path:"/admin/adminChange",component:function(n){return e.e(6).then(function(){var t=[e("yAjE")];n.apply(null,t)}.bind(this)).catch(e.oe)},name:"adminChange"},{path:"/admin/adminArticleList",component:function(n){return e.e(9).then(function(){var t=[e("218W")];n.apply(null,t)}.bind(this)).catch(e.oe)},name:"adminArticleList"}]},{path:"/login",name:"Login",component:function(n){return e.e(5).then(function(){var t=[e("OC6a")];n.apply(null,t)}.bind(this)).catch(e.oe)}}]}),p=e("OS1Z"),d=e.n(p);e("pw1w"),e("ZRBX"),e("OsYA"),e("muqA"),e("TB7q"),e("57cR");function s(n){var t,e=new RegExp("(^| )"+n+"=([^;]*)(;|$)");return(t=document.cookie.match(e))?t[2]:null}o.default.use(c.a),o.default.use(d.a),o.default.prototype.setCookie=function(n,t,e){var o=new Date;o.setDate(o.getDate()+e),document.cookie=n+"="+escape(t)+(null==e?"":";expires="+o.toGMTString())},o.default.prototype.setCookie=function(n,t,e){var o=new Date;o.setDate(o.getDate()+e),document.cookie=n+"="+escape(t)+(null==e?"":";expires="+o.toGMTString())},o.default.prototype.getCookie=s,o.default.prototype.delCookie=function(n){var t=new Date;t.setTime(t.getTime()-1);var e=s(n);null!=e&&(document.cookie=n+"="+e+";expires="+t.toGMTString())},o.default.config.productionTip=!1,new o.default({router:l,store:r.a,render:function(n){return n(u)}}).$mount("#app")}},["wJBr"]);
2 | //# sourceMappingURL=blogadmin.16387c43da20612153c5.js.map
--------------------------------------------------------------------------------
/src/views/blog/components/articleList.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | {{item.title}}
5 | 发布于 {{item.createDate}}
6 |
9 |
10 |
11 | 阅读全文
12 |
13 |
17 |
18 |
19 |
20 |
97 |
98 |
109 |
--------------------------------------------------------------------------------
/src/assets/theme/theme-green/reset.css:
--------------------------------------------------------------------------------
1 | progress,sub,sup{vertical-align:baseline}button,hr,input{overflow:visible}[type=checkbox],[type=radio],legend{box-sizing:border-box;padding:0}html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}article,aside,details,figcaption,figure,footer,header,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background-color:transparent;-webkit-text-decoration-skip:objects;color:#18c79c;text-decoration:none}a:active,a:hover{outline-width:0}abbr[title]{border-bottom:none;text-decoration:underline;text-decoration:underline dotted}b,strong{font-weight:bolder}dfn{font-style:italic}mark{background-color:#ff0;color:#000}sub,sup{line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}img{border-style:none}svg:not(:root){overflow:hidden}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}hr{box-sizing:content-box;height:0}button,input,optgroup,select,textarea{color:inherit;font:inherit;margin:0;vertical-align:middle}optgroup{font-weight:700}button,select{text-transform:none}[type=reset],[type=submit],button,html [type=button]{-webkit-appearance:button}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{border-style:none;padding:0}[type=button]:-moz-focusring,[type=reset]:-moz-focusring,[type=submit]:-moz-focusring,button:-moz-focusring{outline:ButtonText dotted 1px}fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}legend{color:inherit;display:table;max-width:100%;white-space:normal}textarea{overflow:auto;resize:none;vertical-align:top}input,select,textarea{outline:0}[disabled]{cursor:default}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}[type=search]::-webkit-search-cancel-button,[type=search]::-webkit-search-decoration{-webkit-appearance:none}input::-moz-placeholder,textarea::-moz-placeholder{color:inherit;opacity:.54}input:-ms-input-placeholder,textarea:-ms-input-placeholder{color:inherit;opacity:.54}input::-webkit-input-placeholder,textarea::-webkit-input-placeholder{color:inherit;opacity:.54}input::-ms-clear,input::-ms-reveal{display:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}table{border-collapse:collapse;border-spacing:0}td,th{padding:0}blockquote,figure,form,h1,h2,h3,h4,h5,h6,p{margin:0}dd,dl,li,ol,ul{margin:0;padding:0}ol,ul{list-style:none}body{margin:0;font-family:"Helvetica Neue",Helvetica,"PingFang SC","Hiragino Sans GB","Microsoft YaHei","微软雅黑",Arial,sans-serif;font-weight:400;font-size:14px;color:rgb(31, 61, 57)}a:focus,a:hover{color:rgb(70, 210, 176)}a:active{color:rgb(22, 179, 140)}h1,h2,h3,h4,h5,h6{color:rgb(31, 61, 57);font-weight:inherit}h1:first-child,h2:first-child,h3:first-child,h4:first-child,h5:first-child,h6:first-child,p:first-child{margin-top:0}h1:last-child,h2:last-child,h3:last-child,h4:last-child,h5:last-child,h6:last-child,p:last-child{margin-bottom:0}h1{font-size:20px}h2{font-size:18px}h3{font-size:16px}h4,h5,h6,p{font-size:inherit}p{line-height:1.8}sub,sup{font-size:13px}small{font-size:12px}
--------------------------------------------------------------------------------
/src/assets/theme/theme-darkblue/reset.css:
--------------------------------------------------------------------------------
1 | progress,sub,sup{vertical-align:baseline}button,hr,input{overflow:visible}[type=checkbox],[type=radio],legend{box-sizing:border-box;padding:0}html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}article,aside,details,figcaption,figure,footer,header,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background-color:transparent;-webkit-text-decoration-skip:objects;color:#1d8ce0;text-decoration:none}a:active,a:hover{outline-width:0}abbr[title]{border-bottom:none;text-decoration:underline;text-decoration:underline dotted}b,strong{font-weight:bolder}dfn{font-style:italic}mark{background-color:#ff0;color:#000}sub,sup{line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}img{border-style:none}svg:not(:root){overflow:hidden}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}hr{box-sizing:content-box;height:0}button,input,optgroup,select,textarea{color:inherit;font:inherit;margin:0;vertical-align:middle}optgroup{font-weight:700}button,select{text-transform:none}[type=reset],[type=submit],button,html [type=button]{-webkit-appearance:button}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{border-style:none;padding:0}[type=button]:-moz-focusring,[type=reset]:-moz-focusring,[type=submit]:-moz-focusring,button:-moz-focusring{outline:ButtonText dotted 1px}fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}legend{color:inherit;display:table;max-width:100%;white-space:normal}textarea{overflow:auto;resize:none;vertical-align:top}input,select,textarea{outline:0}[disabled]{cursor:default}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}[type=search]::-webkit-search-cancel-button,[type=search]::-webkit-search-decoration{-webkit-appearance:none}input::-moz-placeholder,textarea::-moz-placeholder{color:inherit;opacity:.54}input:-ms-input-placeholder,textarea:-ms-input-placeholder{color:inherit;opacity:.54}input::-webkit-input-placeholder,textarea::-webkit-input-placeholder{color:inherit;opacity:.54}input::-ms-clear,input::-ms-reveal{display:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}table{border-collapse:collapse;border-spacing:0}td,th{padding:0}blockquote,figure,form,h1,h2,h3,h4,h5,h6,p{margin:0}dd,dl,li,ol,ul{margin:0;padding:0}ol,ul{list-style:none}body{margin:0;font-family:"Helvetica Neue",Helvetica,"PingFang SC","Hiragino Sans GB","Microsoft YaHei","微软雅黑",Arial,sans-serif;font-weight:400;font-size:14px;color:rgb(31, 45, 61)}a:focus,a:hover{color:rgb(74, 163, 230)}a:active{color:rgb(26, 126, 202)}h1,h2,h3,h4,h5,h6{color:rgb(31, 45, 61);font-weight:inherit}h1:first-child,h2:first-child,h3:first-child,h4:first-child,h5:first-child,h6:first-child,p:first-child{margin-top:0}h1:last-child,h2:last-child,h3:last-child,h4:last-child,h5:last-child,h6:last-child,p:last-child{margin-bottom:0}h1{font-size:20px}h2{font-size:18px}h3{font-size:16px}h4,h5,h6,p{font-size:inherit}p{line-height:1.8}sub,sup{font-size:13px}small{font-size:12px}
--------------------------------------------------------------------------------
/src/styles/article.css:
--------------------------------------------------------------------------------
1 | .content .post, .recent-comments {
2 | white-space: normal;
3 | word-break: break-all;
4 | word-wrap: break-word;
5 | }
6 | .block.post {
7 | background: #fff;
8 | }
9 | .block {
10 | position: relative;
11 | background: #fff;
12 | padding: 15px;
13 | border-bottom: 1px solid #e0e0e0;
14 | }
15 |
16 | /*article h1 {
17 | text-align: center;
18 | padding: 0.1em 80px 0 80px;
19 | color: #363636;
20 | position: relative;
21 | }
22 | article h2 {
23 | text-align: center;
24 | padding: 0.1em 80px 0 80px;
25 | color: #363636;
26 | position: relative;
27 | }*/
28 |
29 | /*小标*/
30 | .ui.red.ribbon.label {
31 | border-color: #47456d;
32 | box-shadow: 0 2px 2px 0 rgba(0,0,0,.14), 0 3px 1px -2px rgba(0,0,0,.2), 0 1px 5px 0 rgba(0,0,0,.12);
33 | }
34 | .ui.red.label, .ui.red.labels .label {
35 | background-color: #97dffd;
36 | border-color: #97dffd;
37 | color: #fff;
38 | margin: 5px 0 15px 2px;
39 | font-size: 14px;
40 | }
41 | .ui.ribbon.label {
42 | position: relative;
43 | margin: 0 .2em;
44 | left: -3.3rem;
45 | padding-left: 2rem;
46 | border-radius: 0 4px 4px 0;
47 | border-color: rgba(0,0,0,.15);
48 | }
49 | .ui.label:last-child {
50 | margin-right: 0;
51 | }
52 | .ui.ribbon.label {
53 | margin-top: 5px;
54 | margin-bottom: 5px;
55 | }
56 | .ui.label {
57 | display: inline-block;
58 | padding: .5em .8em;
59 | }
60 | .ui.ribbon.label:after {
61 | position: absolute;
62 | content: "";
63 | top: 100%;
64 | left: 0;
65 | border-top: 0 solid transparent;
66 | border-right-width: 1em;
67 | border-right-color: inherit;
68 | border-right-style: solid;
69 | border-bottom: 1em solid transparent;
70 | border-left: 0 solid transparent;
71 | width: 0;
72 | height: 0;
73 | }
74 | .ui.label a {
75 | color: inherit;
76 | }
77 |
78 | .article-meta {
79 | color: #555;
80 | font-size: 14px;
81 | word-break: break-word;
82 | line-height: 20px;
83 | }
84 |
85 | .abstract {
86 | font-size: 1rem;
87 | line-height: 1.8em;
88 | margin: 1em 0;
89 | color: #333;
90 | text-indent: 2em
91 | }
92 | .abstract img {
93 | max-width: 100%;
94 | display: block;
95 | }
96 |
97 | .article-meta, .more {
98 | text-align: center;
99 | }
100 | .more a {
101 | background-color: #96e1fc;
102 | color: #fff;
103 | font-size: 12px;
104 | padding: 5px 10px;
105 | border-radius: 5px;
106 | /*background-color: #e8e8e8;*/
107 | transition: .5s;
108 | -o-transition: .5s;
109 | -moz-transition: .5s;
110 | -webkit-transition: .5s;
111 | }
112 | .pages {
113 | width: 100%;
114 | margin: 20px auto 0;
115 | overflow: hidden;
116 | }
117 | .pages a {
118 | background: #97dffd;
119 | display: block;
120 | padding: 8px 10px;
121 | margin: 0 20px;
122 | border-radius: 5px;
123 | text-align: center;
124 | font-size: 14px;
125 | color: #fff;
126 | }
127 | @media (max-width: 800px) {
128 | .article-list {
129 | border-radius: 0!important;
130 | }
131 | .ui.ribbon.label:after{
132 | display: none;
133 | }
134 | }
135 |
--------------------------------------------------------------------------------
/src/styles/vars.scss:
--------------------------------------------------------------------------------
1 | $color-primary: #20a0ff;//#18c79c
2 | $aside-expanded-width:150px;
3 | $aside-collapsed-width:60px;
4 |
5 |
6 | .pull-right {
7 | //float: right !important;
8 | display: flex;
9 | justify-content: flex-end;
10 | }
11 | .pull-left {
12 | display: flex;
13 | justify-content: flex-start;
14 | }
15 |
16 | ul{
17 | list-style:none;
18 | margin: 0;
19 | padding: 0;
20 | display: block;
21 | }
22 |
23 |
24 | .badge {
25 | text-shadow: none;
26 | font-size: 12px;
27 | padding-top: 1px;
28 | padding-bottom: 3px;
29 | font-weight: normal;
30 | line-height: 15px;
31 | background-color: #ABBAC3;
32 | border-radius: 10px;
33 | min-width: 10px;
34 |
35 | position: relative;
36 | top: -4px;
37 | left: 2px;
38 | padding-right: 5px;
39 | padding-left: 5px;
40 | }
41 | .badge.no-radius {
42 | border-radius: 0;
43 | }
44 | .badge.radius-1 {
45 | border-radius: 1px;
46 | }
47 | .badge.radius-2 {
48 | border-radius: 2px;
49 | }
50 | .badge.radius-3 {
51 | border-radius: 3px;
52 | }
53 | .badge.radius-4 {
54 | border-radius: 4px;
55 | }
56 | .badge.radius-5 {
57 | border-radius: 5px;
58 | }
59 | .badge.radius-6 {
60 | border-radius: 6px;
61 | }
62 | .badge.badge-important,
63 | .badge-important {
64 | background-color: #D15B47;
65 | }
66 | .badge.badge-grey,
67 | .badge-grey {
68 | background-color: #A0A0A0;
69 | }
70 |
71 |
72 | .nav {
73 | height: 100%;
74 | }
75 | .nav >li{
76 | float:left;
77 | line-height: 40px;
78 | height: 40px;
79 | margin-right: 2px;
80 | }
81 |
82 | .nav >li >a{
83 | color: #FFF;
84 | display: block;
85 | line-height: inherit;
86 | text-align: center;
87 | height: 100%;
88 | width: auto;
89 | min-width: 40px;
90 | padding: 0 8px;
91 | position: relative;
92 | }
93 |
94 | .nav-user-photo {
95 | margin: 1px 8px 0 0;
96 | border-radius: 100%;
97 | border: 2px solid #FFF;
98 | max-width: 34px;
99 | }
100 |
101 | .nav > li.green > a {
102 | background-color: #2E8965;
103 | }
104 | .nav > li.green > a:hover,
105 | .nav > li.green > a:focus,
106 | .nav > li.open.green > a {
107 | background-color: #2c7659;
108 | }
109 |
110 | .nav > li.purple > a {
111 | background-color: #892E65;
112 | }
113 | .nav > li.purple > a:hover,
114 | .nav > li.purple > a:focus,
115 | .nav > li.open.purple > a {
116 | background-color: #762c59;
117 | }
118 |
119 | .nav > li.light-blue > a {
120 | background-color: #62A8D1;
121 | }
122 | .nav > li.light-blue > a:hover,
123 | .nav > li.light-blue > a:focus,
124 | .nav > li.open.light-blue > a {
125 | background-color: #579ec8;
126 | }
127 |
128 | .nav > li.blue > a {
129 | background-color: #2E6589;
130 | }
131 | .nav > li.blue > a:hover,
132 | .nav > li.blue > a:focus,
133 | .nav > li.open.blue > a {
134 | background-color: #2c5976;
135 | }
136 |
137 | .user-info {
138 | max-width: 100px;
139 | display: inline-block;
140 | overflow: hidden;
141 | text-overflow: ellipsis;
142 | white-space: nowrap;
143 | text-align: left;
144 | vertical-align: top;
145 | line-height: 15px;
146 | position: relative;
147 | top: 6px;
148 | cursor: pointer;
149 | color:#fff;
150 | }
151 | .user-info small {
152 | display: block;
153 | }
154 |
155 |
--------------------------------------------------------------------------------
/server/routes/articles.js:
--------------------------------------------------------------------------------
1 | require('./../utils/time')
2 | var express = require('express');
3 | var router = express.Router();
4 | var mongoose = require('mongoose');
5 | var trimHtml = require('trim-html');
6 |
7 |
8 | var Article = require('./../models/blog/articles')
9 | var Message = require('./../models/blog/messages')
10 |
11 |
12 |
13 | /* GET users listing. */
14 | router.get('/api/', function(req, res, next) {
15 | res.send('respond with a resource');
16 | });
17 |
18 | // 分页检索文章
19 | router.get("/api/articleList", function (req,res) {
20 | let page = parseInt(req.param("page")) //浏览器参数第几页
21 | let pageSize = parseInt(req.param("pageSize")) //当前一页多少个
22 | let skip = (page - 1)*pageSize
23 | let ArticleModal = Article.find().select('articleId title tag content createDate').skip(skip).limit(pageSize).sort({_id:-1}).lean()
24 |
25 | ArticleModal.exec(function (err,doc) {
26 | if (err) {
27 | res.json ({
28 | status: "1",
29 | msg: err.message,
30 | })
31 | } else {
32 | doc.forEach(function (item) {
33 | item.content = trimHtml(item.content, {limit: 100})
34 | })
35 | res.json ({
36 | status: '0',
37 | msg: '',
38 | result: {
39 | count: doc.length,
40 | list: doc
41 | }
42 | })
43 | }
44 | })
45 | })
46 |
47 | // 文章详情
48 | router.get("/api/articleDetial", function (req,res) {
49 | let articleId = req.query.articleId
50 | Article.findOne({articleId:articleId}, function (err,doc) {
51 | if (err) {
52 | res.json ({
53 | status: "1",
54 | msg: err.message,
55 | result:''
56 | })
57 | } else {
58 | res.json ({
59 | status: '0',
60 | msg: '',
61 | result: doc
62 | })
63 | }
64 | })
65 | })
66 |
67 | // 查询标签
68 | router.get("/api/articleTags", function (req,res) {
69 | Article.find().select('tag -_id').exec(function (err,doc) {
70 | if (err) {
71 | res.json ({
72 | status: "1",
73 | msg: err.message,
74 | })
75 | } else {
76 | res.json ({
77 | status: '0',
78 | msg: '',
79 | result: doc
80 | })
81 | }
82 | })
83 | })
84 |
85 | // 按标签显示
86 | router.get("/api/tagsDetial", function (req,res) {
87 | let tag = req.param("tag")
88 | let page = parseInt(req.param("page")) //浏览器参数第几页
89 | let pageSize = parseInt(req.param("pageSize")) //当前一页多少个
90 | let skip = (page - 1)*pageSize
91 | let ArticleModal = Article.find({tag:tag}).select('articleId title tag content createDate').skip(skip).limit(pageSize).sort({_id:-1}).lean()
92 |
93 | ArticleModal.exec(function (err,doc) {
94 | if (err) {
95 | res.json ({
96 | status: "1",
97 | msg: err.message,
98 | })
99 | } else {
100 | doc.forEach(function (item) {
101 | item.content = trimHtml(item.content, {limit: 100})
102 | })
103 | res.json ({
104 | status: '0',
105 | msg: '',
106 | result: {
107 | count: doc.length,
108 | list: doc
109 | }
110 | })
111 | }
112 | })
113 | })
114 | module.exports = router
115 |
--------------------------------------------------------------------------------