├── .gitignore
├── CHANGELOG.md
├── LICENSE
├── README.md
├── docs
├── images
│ ├── admin.png
│ ├── egg-webpack.png
│ ├── iblog.png
│ ├── vue-mutil-page.png
│ ├── vue-single-page.png
│ ├── webpack-build.png
│ └── webpack.png
└── lerna.md
├── lerna.json
├── package.json
├── packages
├── egg-vue-webpack-asset-boilerplate
│ ├── .eslintignore
│ ├── .eslintrc.js
│ ├── .gitignore
│ ├── .vscode
│ │ ├── launch.json
│ │ └── settings.json
│ ├── LICENSE
│ ├── README.md
│ ├── app
│ │ ├── controller
│ │ │ └── asset
│ │ │ │ └── index.js
│ │ ├── extend
│ │ │ ├── application.js
│ │ │ └── context.js
│ │ ├── lib
│ │ │ └── db
│ │ │ │ ├── base.js
│ │ │ │ ├── blog.json
│ │ │ │ ├── collection.js
│ │ │ │ ├── factory.js
│ │ │ │ ├── file.js
│ │ │ │ ├── mongo.js
│ │ │ │ ├── mysql.js
│ │ │ │ └── query.js
│ │ ├── middleware
│ │ │ ├── access.js
│ │ │ └── locals.js
│ │ ├── model
│ │ │ ├── article.js
│ │ │ ├── artilcedetail.js
│ │ │ ├── user.js
│ │ │ └── utils
│ │ │ │ └── base.js
│ │ ├── router.js
│ │ ├── service
│ │ │ └── article.js
│ │ ├── view
│ │ │ └── README.md
│ │ └── web
│ │ │ ├── asset
│ │ │ ├── css
│ │ │ │ ├── blog.css
│ │ │ │ ├── bootstrap.css
│ │ │ │ ├── font-awesome.min.css
│ │ │ │ └── global.css
│ │ │ ├── fonts
│ │ │ │ ├── FontAwesome.otf
│ │ │ │ ├── fontawesome-webfont.eot
│ │ │ │ ├── fontawesome-webfont.svg
│ │ │ │ ├── fontawesome-webfont.ttf
│ │ │ │ ├── fontawesome-webfont.woff
│ │ │ │ ├── fontawesome-webfont.woff2
│ │ │ │ ├── glyphicons-halflings-regular.eot
│ │ │ │ ├── glyphicons-halflings-regular.svg
│ │ │ │ ├── glyphicons-halflings-regular.ttf
│ │ │ │ ├── glyphicons-halflings-regular.woff
│ │ │ │ └── glyphicons-halflings-regular.woff2
│ │ │ ├── images
│ │ │ │ ├── egg-vue-webpack-dev.png
│ │ │ │ ├── favicon.ico
│ │ │ │ ├── loading.gif
│ │ │ │ └── logo.png
│ │ │ └── medias
│ │ │ │ └── red.mp4
│ │ │ ├── component
│ │ │ ├── MarkdownEditor
│ │ │ │ └── index.vue
│ │ │ ├── layout
│ │ │ │ ├── admin
│ │ │ │ │ ├── content
│ │ │ │ │ │ ├── content.css
│ │ │ │ │ │ └── content.vue
│ │ │ │ │ ├── footer
│ │ │ │ │ │ ├── footer.css
│ │ │ │ │ │ └── footer.vue
│ │ │ │ │ ├── header
│ │ │ │ │ │ ├── header.css
│ │ │ │ │ │ └── header.vue
│ │ │ │ │ ├── index.css
│ │ │ │ │ ├── index.js
│ │ │ │ │ ├── main.vue
│ │ │ │ │ └── menu
│ │ │ │ │ │ ├── index.js
│ │ │ │ │ │ └── index.vue
│ │ │ │ ├── default.js
│ │ │ │ ├── index
│ │ │ │ │ ├── content
│ │ │ │ │ │ ├── content.css
│ │ │ │ │ │ └── content.vue
│ │ │ │ │ ├── footer
│ │ │ │ │ │ ├── footer.css
│ │ │ │ │ │ └── footer.vue
│ │ │ │ │ ├── header
│ │ │ │ │ │ ├── header.css
│ │ │ │ │ │ └── header.vue
│ │ │ │ │ ├── index.js
│ │ │ │ │ └── main.vue
│ │ │ │ ├── inline.js
│ │ │ │ ├── layout.js
│ │ │ │ ├── simple
│ │ │ │ │ └── index.vue
│ │ │ │ └── spa
│ │ │ │ │ ├── content
│ │ │ │ │ ├── content.css
│ │ │ │ │ └── content.vue
│ │ │ │ │ ├── footer
│ │ │ │ │ ├── footer.css
│ │ │ │ │ └── footer.vue
│ │ │ │ │ ├── header
│ │ │ │ │ ├── header.css
│ │ │ │ │ └── header.vue
│ │ │ │ │ ├── index.vue
│ │ │ │ │ └── main.vue
│ │ │ └── spa
│ │ │ │ ├── index.vue
│ │ │ │ ├── router
│ │ │ │ ├── detail.vue
│ │ │ │ ├── index.js
│ │ │ │ └── list.vue
│ │ │ │ └── store
│ │ │ │ ├── actions.js
│ │ │ │ ├── getters.js
│ │ │ │ ├── index.js
│ │ │ │ ├── mutation-type.js
│ │ │ │ └── mutations.js
│ │ │ ├── framework
│ │ │ ├── app.js
│ │ │ └── request.js
│ │ │ ├── page
│ │ │ └── asset
│ │ │ │ ├── simple.vue
│ │ │ │ ├── spa.js
│ │ │ │ └── spa.vue
│ │ │ └── view
│ │ │ ├── asset.html
│ │ │ ├── layout.html
│ │ │ └── layout.tpl
│ ├── babel.config.js
│ ├── config
│ │ ├── config.default.js
│ │ ├── config.local.js
│ │ ├── config.prod.js
│ │ ├── config.test.js
│ │ ├── plugin.js
│ │ └── plugin.local.js
│ ├── package.json
│ ├── test
│ │ ├── controller
│ │ │ └── asset.test.js
│ │ └── utils
│ │ │ └── helper.js
│ └── webpack.config.js
├── egg-vue-webpack-boilerplate
│ ├── .all-contributorsrc
│ ├── .eslintignore
│ ├── .eslintrc.js
│ ├── .gitattributes
│ ├── .gitignore
│ ├── .vscode
│ │ ├── launch.json
│ │ └── settings.json
│ ├── CHANGELOG.md
│ ├── LICENSE
│ ├── README.md
│ ├── app
│ │ ├── controller
│ │ │ ├── admin
│ │ │ │ └── admin.js
│ │ │ ├── asset
│ │ │ │ └── index.js
│ │ │ ├── blog
│ │ │ │ ├── category.js
│ │ │ │ └── home.js
│ │ │ ├── html
│ │ │ │ └── index.js
│ │ │ ├── spa
│ │ │ │ └── index.js
│ │ │ └── test.js
│ │ ├── extend
│ │ │ ├── application.js
│ │ │ └── context.js
│ │ ├── lib
│ │ │ └── db
│ │ │ │ ├── base.js
│ │ │ │ ├── blog.json
│ │ │ │ ├── collection.js
│ │ │ │ ├── factory.js
│ │ │ │ ├── file.js
│ │ │ │ ├── mongo.js
│ │ │ │ ├── mysql.js
│ │ │ │ └── query.js
│ │ ├── middleware
│ │ │ ├── access.js
│ │ │ └── locals.js
│ │ ├── model
│ │ │ ├── article.js
│ │ │ ├── artilcedetail.js
│ │ │ ├── user.js
│ │ │ └── utils
│ │ │ │ └── base.js
│ │ ├── router.js
│ │ ├── service
│ │ │ └── article.js
│ │ ├── view
│ │ │ └── README.md
│ │ └── web
│ │ │ ├── asset
│ │ │ ├── css
│ │ │ │ ├── blog.css
│ │ │ │ ├── bootstrap.css
│ │ │ │ ├── font-awesome.min.css
│ │ │ │ └── global.css
│ │ │ ├── fonts
│ │ │ │ ├── FontAwesome.otf
│ │ │ │ ├── fontawesome-webfont.eot
│ │ │ │ ├── fontawesome-webfont.svg
│ │ │ │ ├── fontawesome-webfont.ttf
│ │ │ │ ├── fontawesome-webfont.woff
│ │ │ │ ├── fontawesome-webfont.woff2
│ │ │ │ ├── glyphicons-halflings-regular.eot
│ │ │ │ ├── glyphicons-halflings-regular.svg
│ │ │ │ ├── glyphicons-halflings-regular.ttf
│ │ │ │ ├── glyphicons-halflings-regular.woff
│ │ │ │ └── glyphicons-halflings-regular.woff2
│ │ │ ├── images
│ │ │ │ ├── egg-vue-webpack-dev.png
│ │ │ │ ├── favicon.ico
│ │ │ │ ├── loading.gif
│ │ │ │ └── logo.png
│ │ │ └── medias
│ │ │ │ └── red.mp4
│ │ │ ├── component
│ │ │ ├── MarkdownEditor
│ │ │ │ └── index.vue
│ │ │ ├── layout
│ │ │ │ ├── admin
│ │ │ │ │ ├── content
│ │ │ │ │ │ ├── content.css
│ │ │ │ │ │ └── content.vue
│ │ │ │ │ ├── footer
│ │ │ │ │ │ ├── footer.css
│ │ │ │ │ │ └── footer.vue
│ │ │ │ │ ├── header
│ │ │ │ │ │ ├── header.css
│ │ │ │ │ │ └── header.vue
│ │ │ │ │ ├── index.css
│ │ │ │ │ ├── index.js
│ │ │ │ │ ├── main.vue
│ │ │ │ │ └── menu
│ │ │ │ │ │ ├── index.js
│ │ │ │ │ │ └── index.vue
│ │ │ │ ├── default.js
│ │ │ │ ├── index
│ │ │ │ │ ├── content
│ │ │ │ │ │ ├── content.css
│ │ │ │ │ │ └── content.vue
│ │ │ │ │ ├── footer
│ │ │ │ │ │ ├── footer.css
│ │ │ │ │ │ └── footer.vue
│ │ │ │ │ ├── header
│ │ │ │ │ │ ├── header.css
│ │ │ │ │ │ └── header.vue
│ │ │ │ │ ├── index.js
│ │ │ │ │ └── main.vue
│ │ │ │ ├── inline.js
│ │ │ │ ├── layout.js
│ │ │ │ ├── simple
│ │ │ │ │ └── index.vue
│ │ │ │ └── spa
│ │ │ │ │ ├── content
│ │ │ │ │ ├── content.css
│ │ │ │ │ └── content.vue
│ │ │ │ │ ├── footer
│ │ │ │ │ ├── footer.css
│ │ │ │ │ └── footer.vue
│ │ │ │ │ ├── header
│ │ │ │ │ ├── header.css
│ │ │ │ │ └── header.vue
│ │ │ │ │ ├── index.vue
│ │ │ │ │ └── main.vue
│ │ │ └── spa
│ │ │ │ ├── index.vue
│ │ │ │ ├── router
│ │ │ │ ├── detail.vue
│ │ │ │ ├── index.js
│ │ │ │ └── list.vue
│ │ │ │ └── store
│ │ │ │ ├── actions.js
│ │ │ │ ├── getters.js
│ │ │ │ ├── index.js
│ │ │ │ ├── mutation-type.js
│ │ │ │ └── mutations.js
│ │ │ ├── framework
│ │ │ ├── app.js
│ │ │ ├── entry
│ │ │ │ └── template.js
│ │ │ ├── i18n
│ │ │ │ ├── admin
│ │ │ │ │ ├── cn.js
│ │ │ │ │ ├── en.js
│ │ │ │ │ └── index.js
│ │ │ │ └── site
│ │ │ │ │ ├── cn.js
│ │ │ │ │ ├── en.js
│ │ │ │ │ └── index.js
│ │ │ ├── plugin
│ │ │ │ └── index.js
│ │ │ └── request.js
│ │ │ ├── page
│ │ │ ├── admin
│ │ │ │ ├── home
│ │ │ │ │ ├── component
│ │ │ │ │ │ └── panel.vue
│ │ │ │ │ ├── home.vue
│ │ │ │ │ ├── router
│ │ │ │ │ │ └── index.js
│ │ │ │ │ ├── store
│ │ │ │ │ │ └── app
│ │ │ │ │ │ │ ├── actions.js
│ │ │ │ │ │ │ ├── getters.js
│ │ │ │ │ │ │ ├── index.js
│ │ │ │ │ │ │ ├── mutation-type.js
│ │ │ │ │ │ │ └── mutations.js
│ │ │ │ │ └── view
│ │ │ │ │ │ ├── dashboard
│ │ │ │ │ │ └── index.vue
│ │ │ │ │ │ ├── detail.vue
│ │ │ │ │ │ ├── list.vue
│ │ │ │ │ │ ├── notfound.vue
│ │ │ │ │ │ └── write
│ │ │ │ │ │ └── index.vue
│ │ │ │ └── login
│ │ │ │ │ ├── login.css
│ │ │ │ │ └── login.vue
│ │ │ ├── asset
│ │ │ │ ├── simple.vue
│ │ │ │ ├── spa.js
│ │ │ │ └── spa.vue
│ │ │ ├── blog
│ │ │ │ ├── about
│ │ │ │ │ ├── about.css
│ │ │ │ │ └── about.vue
│ │ │ │ ├── category
│ │ │ │ │ ├── category.css
│ │ │ │ │ └── category.vue
│ │ │ │ └── home
│ │ │ │ │ ├── index.css
│ │ │ │ │ └── index.vue
│ │ │ ├── html
│ │ │ │ ├── simple.vue
│ │ │ │ └── spa.js
│ │ │ ├── spa
│ │ │ │ └── index.js
│ │ │ └── test
│ │ │ │ └── test.vue
│ │ │ └── view
│ │ │ ├── asset.html
│ │ │ ├── layout.html
│ │ │ └── layout.tpl
│ ├── babel.config.js
│ ├── config
│ │ ├── config.default.js
│ │ ├── config.local.js
│ │ ├── config.prod.js
│ │ ├── config.test.js
│ │ ├── plugin.js
│ │ └── plugin.local.js
│ ├── docs
│ │ ├── images
│ │ │ ├── admin.png
│ │ │ ├── egg-webpack.png
│ │ │ ├── iblog.png
│ │ │ ├── vue-mutil-page.png
│ │ │ ├── vue-single-page.png
│ │ │ ├── webpack-build.png
│ │ │ └── webpack.png
│ │ ├── issue_template.md
│ │ └── perform.md
│ ├── package.json
│ ├── test
│ │ ├── controller
│ │ │ ├── asset.test.js
│ │ │ ├── blog.test.js
│ │ │ ├── html.test.js
│ │ │ └── spa.test.js
│ │ └── utils
│ │ │ └── helper.js
│ ├── view
│ │ ├── simple.tpl
│ │ └── spa.tpl
│ ├── webpack.config.js
│ └── yarn.lock
├── egg-vue-webpack-html-boilerplate
│ ├── .eslintignore
│ ├── .eslintrc.js
│ ├── .gitignore
│ ├── .vscode
│ │ ├── launch.json
│ │ └── settings.json
│ ├── LICENSE
│ ├── README.md
│ ├── app
│ │ ├── controller
│ │ │ └── html
│ │ │ │ └── index.js
│ │ ├── extend
│ │ │ ├── application.js
│ │ │ └── context.js
│ │ ├── lib
│ │ │ └── db
│ │ │ │ ├── base.js
│ │ │ │ ├── blog.json
│ │ │ │ ├── collection.js
│ │ │ │ ├── factory.js
│ │ │ │ ├── file.js
│ │ │ │ ├── mongo.js
│ │ │ │ ├── mysql.js
│ │ │ │ └── query.js
│ │ ├── middleware
│ │ │ ├── access.js
│ │ │ └── locals.js
│ │ ├── model
│ │ │ ├── article.js
│ │ │ ├── artilcedetail.js
│ │ │ ├── user.js
│ │ │ └── utils
│ │ │ │ └── base.js
│ │ ├── router.js
│ │ ├── service
│ │ │ └── article.js
│ │ ├── view
│ │ │ └── README.md
│ │ └── web
│ │ │ ├── asset
│ │ │ ├── css
│ │ │ │ ├── blog.css
│ │ │ │ ├── bootstrap.css
│ │ │ │ ├── font-awesome.min.css
│ │ │ │ └── global.css
│ │ │ ├── fonts
│ │ │ │ ├── FontAwesome.otf
│ │ │ │ ├── fontawesome-webfont.eot
│ │ │ │ ├── fontawesome-webfont.svg
│ │ │ │ ├── fontawesome-webfont.ttf
│ │ │ │ ├── fontawesome-webfont.woff
│ │ │ │ ├── fontawesome-webfont.woff2
│ │ │ │ ├── glyphicons-halflings-regular.eot
│ │ │ │ ├── glyphicons-halflings-regular.svg
│ │ │ │ ├── glyphicons-halflings-regular.ttf
│ │ │ │ ├── glyphicons-halflings-regular.woff
│ │ │ │ └── glyphicons-halflings-regular.woff2
│ │ │ ├── images
│ │ │ │ ├── egg-vue-webpack-dev.png
│ │ │ │ ├── favicon.ico
│ │ │ │ ├── loading.gif
│ │ │ │ └── logo.png
│ │ │ └── medias
│ │ │ │ └── red.mp4
│ │ │ ├── component
│ │ │ ├── MarkdownEditor
│ │ │ │ └── index.vue
│ │ │ ├── layout
│ │ │ │ ├── admin
│ │ │ │ │ ├── content
│ │ │ │ │ │ ├── content.css
│ │ │ │ │ │ └── content.vue
│ │ │ │ │ ├── footer
│ │ │ │ │ │ ├── footer.css
│ │ │ │ │ │ └── footer.vue
│ │ │ │ │ ├── header
│ │ │ │ │ │ ├── header.css
│ │ │ │ │ │ └── header.vue
│ │ │ │ │ ├── index.css
│ │ │ │ │ ├── index.js
│ │ │ │ │ ├── main.vue
│ │ │ │ │ └── menu
│ │ │ │ │ │ ├── index.js
│ │ │ │ │ │ └── index.vue
│ │ │ │ ├── default.js
│ │ │ │ ├── index
│ │ │ │ │ ├── content
│ │ │ │ │ │ ├── content.css
│ │ │ │ │ │ └── content.vue
│ │ │ │ │ ├── footer
│ │ │ │ │ │ ├── footer.css
│ │ │ │ │ │ └── footer.vue
│ │ │ │ │ ├── header
│ │ │ │ │ │ ├── header.css
│ │ │ │ │ │ └── header.vue
│ │ │ │ │ ├── index.js
│ │ │ │ │ └── main.vue
│ │ │ │ ├── inline.js
│ │ │ │ ├── layout.js
│ │ │ │ ├── simple
│ │ │ │ │ └── index.vue
│ │ │ │ └── spa
│ │ │ │ │ ├── content
│ │ │ │ │ ├── content.css
│ │ │ │ │ └── content.vue
│ │ │ │ │ ├── footer
│ │ │ │ │ ├── footer.css
│ │ │ │ │ └── footer.vue
│ │ │ │ │ ├── header
│ │ │ │ │ ├── header.css
│ │ │ │ │ └── header.vue
│ │ │ │ │ ├── index.vue
│ │ │ │ │ └── main.vue
│ │ │ └── spa
│ │ │ │ ├── index.vue
│ │ │ │ ├── router
│ │ │ │ ├── detail.vue
│ │ │ │ ├── index.js
│ │ │ │ └── list.vue
│ │ │ │ └── store
│ │ │ │ ├── actions.js
│ │ │ │ ├── getters.js
│ │ │ │ ├── index.js
│ │ │ │ ├── mutation-type.js
│ │ │ │ └── mutations.js
│ │ │ ├── framework
│ │ │ ├── app.js
│ │ │ └── request.js
│ │ │ ├── page
│ │ │ └── html
│ │ │ │ ├── simple.vue
│ │ │ │ └── spa.js
│ │ │ └── view
│ │ │ └── layout.tpl
│ ├── babel.config.js
│ ├── config
│ │ ├── config.default.js
│ │ ├── config.local.js
│ │ ├── config.prod.js
│ │ ├── config.test.js
│ │ ├── plugin.js
│ │ └── plugin.local.js
│ ├── package.json
│ ├── test
│ │ ├── controller
│ │ │ └── html.test.js
│ │ └── utils
│ │ │ └── helper.js
│ ├── view
│ │ ├── simple.tpl
│ │ └── spa.tpl
│ ├── webpack.config.js
│ └── yarn.lock
├── egg-vue-webpack-mpa-boilerplate
│ ├── .eslintignore
│ ├── .eslintrc.js
│ ├── .gitignore
│ ├── .vscode
│ │ ├── launch.json
│ │ └── settings.json
│ ├── LICENSE
│ ├── app
│ │ ├── controller
│ │ │ └── blog
│ │ │ │ ├── category.js
│ │ │ │ └── home.js
│ │ ├── extend
│ │ │ ├── application.js
│ │ │ └── context.js
│ │ ├── lib
│ │ │ └── db
│ │ │ │ ├── base.js
│ │ │ │ ├── blog.json
│ │ │ │ ├── collection.js
│ │ │ │ ├── factory.js
│ │ │ │ ├── file.js
│ │ │ │ ├── mongo.js
│ │ │ │ ├── mysql.js
│ │ │ │ └── query.js
│ │ ├── middleware
│ │ │ ├── access.js
│ │ │ └── locals.js
│ │ ├── model
│ │ │ ├── article.js
│ │ │ ├── artilcedetail.js
│ │ │ ├── user.js
│ │ │ └── utils
│ │ │ │ └── base.js
│ │ ├── router.js
│ │ ├── service
│ │ │ └── article.js
│ │ ├── view
│ │ │ └── README.md
│ │ └── web
│ │ │ ├── asset
│ │ │ ├── css
│ │ │ │ ├── blog.css
│ │ │ │ ├── bootstrap.css
│ │ │ │ ├── font-awesome.min.css
│ │ │ │ └── global.css
│ │ │ ├── fonts
│ │ │ │ ├── FontAwesome.otf
│ │ │ │ ├── fontawesome-webfont.eot
│ │ │ │ ├── fontawesome-webfont.svg
│ │ │ │ ├── fontawesome-webfont.ttf
│ │ │ │ ├── fontawesome-webfont.woff
│ │ │ │ ├── fontawesome-webfont.woff2
│ │ │ │ ├── glyphicons-halflings-regular.eot
│ │ │ │ ├── glyphicons-halflings-regular.svg
│ │ │ │ ├── glyphicons-halflings-regular.ttf
│ │ │ │ ├── glyphicons-halflings-regular.woff
│ │ │ │ └── glyphicons-halflings-regular.woff2
│ │ │ ├── images
│ │ │ │ ├── egg-vue-webpack-dev.png
│ │ │ │ ├── favicon.ico
│ │ │ │ ├── loading.gif
│ │ │ │ └── logo.png
│ │ │ └── medias
│ │ │ │ └── red.mp4
│ │ │ ├── component
│ │ │ ├── MarkdownEditor
│ │ │ │ └── index.vue
│ │ │ ├── layout
│ │ │ │ ├── admin
│ │ │ │ │ ├── content
│ │ │ │ │ │ ├── content.css
│ │ │ │ │ │ └── content.vue
│ │ │ │ │ ├── footer
│ │ │ │ │ │ ├── footer.css
│ │ │ │ │ │ └── footer.vue
│ │ │ │ │ ├── header
│ │ │ │ │ │ ├── header.css
│ │ │ │ │ │ └── header.vue
│ │ │ │ │ ├── index.css
│ │ │ │ │ ├── index.js
│ │ │ │ │ ├── main.vue
│ │ │ │ │ └── menu
│ │ │ │ │ │ ├── index.js
│ │ │ │ │ │ └── index.vue
│ │ │ │ ├── default.js
│ │ │ │ ├── index
│ │ │ │ │ ├── content
│ │ │ │ │ │ ├── content.css
│ │ │ │ │ │ └── content.vue
│ │ │ │ │ ├── footer
│ │ │ │ │ │ ├── footer.css
│ │ │ │ │ │ └── footer.vue
│ │ │ │ │ ├── header
│ │ │ │ │ │ ├── header.css
│ │ │ │ │ │ └── header.vue
│ │ │ │ │ ├── index.js
│ │ │ │ │ └── main.vue
│ │ │ │ ├── inline.js
│ │ │ │ ├── layout.js
│ │ │ │ ├── simple
│ │ │ │ │ └── index.vue
│ │ │ │ └── spa
│ │ │ │ │ ├── content
│ │ │ │ │ ├── content.css
│ │ │ │ │ └── content.vue
│ │ │ │ │ ├── footer
│ │ │ │ │ ├── footer.css
│ │ │ │ │ └── footer.vue
│ │ │ │ │ ├── header
│ │ │ │ │ ├── header.css
│ │ │ │ │ └── header.vue
│ │ │ │ │ ├── index.vue
│ │ │ │ │ └── main.vue
│ │ │ └── spa
│ │ │ │ ├── index.vue
│ │ │ │ ├── router
│ │ │ │ ├── detail.vue
│ │ │ │ ├── index.js
│ │ │ │ └── list.vue
│ │ │ │ └── store
│ │ │ │ ├── actions.js
│ │ │ │ ├── getters.js
│ │ │ │ ├── index.js
│ │ │ │ ├── mutation-type.js
│ │ │ │ └── mutations.js
│ │ │ ├── framework
│ │ │ ├── entry
│ │ │ │ └── template.js
│ │ │ ├── i18n
│ │ │ │ ├── admin
│ │ │ │ │ ├── cn.js
│ │ │ │ │ ├── en.js
│ │ │ │ │ └── index.js
│ │ │ │ └── site
│ │ │ │ │ ├── cn.js
│ │ │ │ │ ├── en.js
│ │ │ │ │ └── index.js
│ │ │ ├── plugin
│ │ │ │ └── index.js
│ │ │ └── request.js
│ │ │ ├── page
│ │ │ └── blog
│ │ │ │ ├── about
│ │ │ │ ├── about.css
│ │ │ │ └── about.vue
│ │ │ │ ├── category
│ │ │ │ ├── category.css
│ │ │ │ └── category.vue
│ │ │ │ └── home
│ │ │ │ ├── index.css
│ │ │ │ └── index.vue
│ │ │ └── view
│ │ │ └── layout.html
│ ├── babel.config.js
│ ├── config
│ │ ├── config.default.js
│ │ ├── config.local.js
│ │ ├── config.prod.js
│ │ ├── config.test.js
│ │ ├── plugin.js
│ │ └── plugin.local.js
│ ├── package.json
│ ├── test
│ │ ├── controller
│ │ │ └── blog.test.js
│ │ └── utils
│ │ │ └── helper.js
│ └── webpack.config.js
└── egg-vue-webpack-spa-boilerplate
│ ├── .eslintignore
│ ├── .eslintrc.js
│ ├── .gitignore
│ ├── .vscode
│ ├── launch.json
│ └── settings.json
│ ├── LICENSE
│ ├── README.md
│ ├── app
│ ├── controller
│ │ └── spa
│ │ │ └── index.js
│ ├── extend
│ │ ├── application.js
│ │ └── context.js
│ ├── lib
│ │ └── db
│ │ │ ├── base.js
│ │ │ ├── blog.json
│ │ │ ├── collection.js
│ │ │ ├── factory.js
│ │ │ ├── file.js
│ │ │ ├── mongo.js
│ │ │ ├── mysql.js
│ │ │ └── query.js
│ ├── middleware
│ │ ├── access.js
│ │ └── locals.js
│ ├── model
│ │ ├── article.js
│ │ ├── artilcedetail.js
│ │ ├── user.js
│ │ └── utils
│ │ │ └── base.js
│ ├── router.js
│ ├── service
│ │ └── article.js
│ ├── view
│ │ └── README.md
│ └── web
│ │ ├── asset
│ │ ├── css
│ │ │ ├── blog.css
│ │ │ ├── bootstrap.css
│ │ │ ├── font-awesome.min.css
│ │ │ └── global.css
│ │ ├── fonts
│ │ │ ├── FontAwesome.otf
│ │ │ ├── fontawesome-webfont.eot
│ │ │ ├── fontawesome-webfont.svg
│ │ │ ├── fontawesome-webfont.ttf
│ │ │ ├── fontawesome-webfont.woff
│ │ │ ├── fontawesome-webfont.woff2
│ │ │ ├── glyphicons-halflings-regular.eot
│ │ │ ├── glyphicons-halflings-regular.svg
│ │ │ ├── glyphicons-halflings-regular.ttf
│ │ │ ├── glyphicons-halflings-regular.woff
│ │ │ └── glyphicons-halflings-regular.woff2
│ │ ├── images
│ │ │ ├── egg-vue-webpack-dev.png
│ │ │ ├── favicon.ico
│ │ │ ├── loading.gif
│ │ │ └── logo.png
│ │ └── medias
│ │ │ └── red.mp4
│ │ ├── component
│ │ ├── MarkdownEditor
│ │ │ └── index.vue
│ │ ├── layout
│ │ │ ├── admin
│ │ │ │ ├── content
│ │ │ │ │ ├── content.css
│ │ │ │ │ └── content.vue
│ │ │ │ ├── footer
│ │ │ │ │ ├── footer.css
│ │ │ │ │ └── footer.vue
│ │ │ │ ├── header
│ │ │ │ │ ├── header.css
│ │ │ │ │ └── header.vue
│ │ │ │ ├── index.css
│ │ │ │ ├── index.js
│ │ │ │ ├── main.vue
│ │ │ │ └── menu
│ │ │ │ │ ├── index.js
│ │ │ │ │ └── index.vue
│ │ │ ├── default.js
│ │ │ ├── index
│ │ │ │ ├── content
│ │ │ │ │ ├── content.css
│ │ │ │ │ └── content.vue
│ │ │ │ ├── footer
│ │ │ │ │ ├── footer.css
│ │ │ │ │ └── footer.vue
│ │ │ │ ├── header
│ │ │ │ │ ├── header.css
│ │ │ │ │ └── header.vue
│ │ │ │ ├── index.js
│ │ │ │ └── main.vue
│ │ │ ├── inline.js
│ │ │ ├── layout.js
│ │ │ ├── simple
│ │ │ │ └── index.vue
│ │ │ └── spa
│ │ │ │ ├── content
│ │ │ │ ├── content.css
│ │ │ │ └── content.vue
│ │ │ │ ├── footer
│ │ │ │ ├── footer.css
│ │ │ │ └── footer.vue
│ │ │ │ ├── header
│ │ │ │ ├── header.css
│ │ │ │ └── header.vue
│ │ │ │ ├── index.vue
│ │ │ │ └── main.vue
│ │ └── spa
│ │ │ ├── index.vue
│ │ │ ├── router
│ │ │ ├── detail.vue
│ │ │ ├── index.js
│ │ │ └── list.vue
│ │ │ └── store
│ │ │ ├── actions.js
│ │ │ ├── getters.js
│ │ │ ├── index.js
│ │ │ ├── mutation-type.js
│ │ │ └── mutations.js
│ │ ├── framework
│ │ ├── app.js
│ │ └── request.js
│ │ ├── page
│ │ └── spa
│ │ │ └── index.js
│ │ └── view
│ │ └── layout.html
│ ├── babel.config.js
│ ├── config
│ ├── config.default.js
│ ├── config.local.js
│ ├── config.prod.js
│ ├── config.test.js
│ ├── plugin.js
│ └── plugin.local.js
│ ├── package.json
│ ├── test
│ ├── controller
│ │ └── spa.test.js
│ └── utils
│ │ └── helper.js
│ └── webpack.config.js
└── scripts
├── create.js
└── shell.js
/.gitignore:
--------------------------------------------------------------------------------
1 | node_modules
2 | yarn.lock
--------------------------------------------------------------------------------
/docs/images/admin.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/easy-team/egg-vue-webpack-boilerplate/e917151416963459c5aff5138e76f1f534b8cde9/docs/images/admin.png
--------------------------------------------------------------------------------
/docs/images/egg-webpack.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/easy-team/egg-vue-webpack-boilerplate/e917151416963459c5aff5138e76f1f534b8cde9/docs/images/egg-webpack.png
--------------------------------------------------------------------------------
/docs/images/iblog.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/easy-team/egg-vue-webpack-boilerplate/e917151416963459c5aff5138e76f1f534b8cde9/docs/images/iblog.png
--------------------------------------------------------------------------------
/docs/images/vue-mutil-page.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/easy-team/egg-vue-webpack-boilerplate/e917151416963459c5aff5138e76f1f534b8cde9/docs/images/vue-mutil-page.png
--------------------------------------------------------------------------------
/docs/images/vue-single-page.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/easy-team/egg-vue-webpack-boilerplate/e917151416963459c5aff5138e76f1f534b8cde9/docs/images/vue-single-page.png
--------------------------------------------------------------------------------
/docs/images/webpack-build.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/easy-team/egg-vue-webpack-boilerplate/e917151416963459c5aff5138e76f1f534b8cde9/docs/images/webpack-build.png
--------------------------------------------------------------------------------
/docs/images/webpack.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/easy-team/egg-vue-webpack-boilerplate/e917151416963459c5aff5138e76f1f534b8cde9/docs/images/webpack.png
--------------------------------------------------------------------------------
/docs/lerna.md:
--------------------------------------------------------------------------------
1 | # lerna
2 |
3 | ## add package
4 |
5 | - lerna add {name} --dev
6 |
--------------------------------------------------------------------------------
/lerna.json:
--------------------------------------------------------------------------------
1 | {
2 | "packages": [
3 | "packages/*"
4 | ],
5 | "version": "5.0.0",
6 | "command": {
7 | "bootstrap": {
8 | "hoist": false,
9 | "npmClientArgs": [
10 | "--no-package-lock",
11 | "--registry=https://registry.npm.taobao.org"
12 | ]
13 | }
14 | },
15 | "npmClient": "yarn"
16 | }
17 |
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-asset-boilerplate/.eslintignore:
--------------------------------------------------------------------------------
1 | test/fixtures
2 | test/benchmark
3 | test/client
4 |
5 | coverage/
6 | private/
7 | run/
8 |
9 | public/
10 | node_modules/
11 | app/web/asset/
12 | app/view/
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-asset-boilerplate/.gitignore:
--------------------------------------------------------------------------------
1 | .DS_Store
2 | .happypack/
3 | node_modules/
4 | npm-debug.log
5 | .idea/
6 | dist
7 | static
8 | public
9 | private
10 | run
11 | *.iml
12 | artifacts.json
13 | *tmp
14 | _site
15 | logs
16 | config/buildConfig.json
17 | config/manifest.json
18 | config/manifest-dll.json
19 | app/view/*
20 | !app/view/layout.html
21 | !app/view/README.md
22 | !app/view/.gitkeep
23 | package-lock.json
24 | .gitkeep
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-asset-boilerplate/.vscode/launch.json:
--------------------------------------------------------------------------------
1 | {
2 | "version": "1.0.0",
3 | "configurations": [
4 | {
5 | "name": "Launch Egg Vue",
6 | "type": "node",
7 | "request": "launch",
8 | "cwd": "${workspaceRoot}",
9 | "runtimeExecutable": "npm",
10 | "windows": { "runtimeExecutable": "npm.cmd" },
11 | "runtimeArgs": [ "run", "debug" ],
12 | "console": "integratedTerminal",
13 | "protocol": "auto",
14 | "restart": true,
15 | "port": 9229,
16 | "autoAttachChildProcesses": true
17 | }
18 | ]
19 | }
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-asset-boilerplate/.vscode/settings.json:
--------------------------------------------------------------------------------
1 | {
2 | "eslint.enable": true,
3 | "eslint.run": "onSave",
4 | "editor.codeActionsOnSave": {
5 | "source.fixAll.eslint": false
6 | },
7 | "eslint.validate": [
8 | "javascript",
9 | {
10 | "language": "vue",
11 | "autoFix": true
12 | }
13 | ],
14 | "files.exclude": {
15 | "**/node_modules/_**": true
16 | }
17 | }
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-asset-boilerplate/app/extend/application.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 | const Factory = require('../lib/db/factory');
3 | const DBSymbol = Symbol('Application#db');
4 | module.exports = {
5 | get db() {
6 | if (!this[DBSymbol]) {
7 | this[DBSymbol] = Factory();
8 | }
9 | return this[DBSymbol];
10 | },
11 | };
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-asset-boilerplate/app/extend/context.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 | module.exports = {
3 | get db() {
4 | return this.app.db;
5 | }
6 | };
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-asset-boilerplate/app/lib/db/base.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 | const shortid = require('shortid');
3 | module.exports = class DB {
4 | constructor(name = 'blog.json') {
5 | this.name = name;
6 | }
7 | getUniqueId() {
8 | return shortid.generate();
9 | }
10 | get(collectionName) {
11 | return null;
12 | }
13 | add(collectionName, json) {
14 | return null;
15 | }
16 | update(collectionName, where, json) {
17 | return null;
18 | }
19 | delete(collectionName, field) {
20 | return null;
21 | }
22 | getPager(collectionName, query) {
23 | return null;
24 | }
25 | };
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-asset-boilerplate/app/lib/db/collection.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 | module.exports = class Collection {
3 | constructor(db, name) {
4 | this.db = db;
5 | this.name = name;
6 | }
7 | get() {
8 | return this.db.get(this.name);
9 | }
10 | getByWhere(json) {
11 | return this.db.get(this.name).find(json);
12 | }
13 | add(json) {
14 | return this.db.add(this.name, json);
15 | }
16 | update(where, json) {
17 | return this.db.update(this.name, where, json);
18 | }
19 | delete(field) {
20 | return this.db.delete(this.name, field);
21 | }
22 | getPager(query) {
23 | return this.db.getPager(this.name, query);
24 | }
25 | getOrderAscByField(field) {
26 | return this.get().orderBy(field, 'asc').value();
27 | }
28 | getOrderDescByField(field) {
29 | return this.get().orderBy(field, 'desc').value();
30 | }
31 | };
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-asset-boilerplate/app/lib/db/factory.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 | const File = require('./file');
3 | const MySQL = require('./mysql');
4 | const MongoDB = require('./mongo');
5 | module.exports = type => {
6 | switch (type) {
7 | case 'mysql':
8 | return new MySQL();
9 | case 'mongo':
10 | return new MongoDB();
11 | default:
12 | return new File();
13 | }
14 | };
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-asset-boilerplate/app/lib/db/mongo.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 | const Base = require('./base');
3 | module.exports = class MongoDB extends Base {};
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-asset-boilerplate/app/lib/db/mysql.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 | const Base = require('./base');
3 | module.exports = class MySQLDB extends Base {};
4 |
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-asset-boilerplate/app/middleware/locals.js:
--------------------------------------------------------------------------------
1 | module.exports = () => {
2 | return async function locale(ctx, next) {
3 | ctx.locals.locale = ctx.query.locale || 'cn';
4 | ctx.locals.origin = ctx.request.origin;
5 | await next();
6 | };
7 | };
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-asset-boilerplate/app/model/article.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 |
3 | module.exports = class Model {
4 | constructor() {
5 | this.id = void 0;
6 | this.title = undefined;
7 | this.summary = undefined;
8 | this.tag = undefined;
9 | this.hits = 0;
10 | this.createTime = Date.now();
11 | }
12 | };
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-asset-boilerplate/app/model/artilcedetail.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 | module.exports = class ArticleDetail {};
3 |
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-asset-boilerplate/app/model/user.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 | module.exports = class User {
3 | constructor() {
4 | this.id = null;
5 | this.name = null;
6 | this.password = null;
7 | this.roleId = null;
8 | }
9 | };
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-asset-boilerplate/app/model/utils/base.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 | const Pagination = require('./pagination');
3 | module.exports = class Model {
4 | constructor() {
5 | this.pagination = new Pagination();
6 | }
7 | };
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-asset-boilerplate/app/router.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 | module.exports = app => {
3 | const { router, controller } = app;
4 | router.redirect('/', '/asset');
5 | router.get('/spa/api/article/list', app.controller.asset.index.list);
6 | router.get('/spa/api/article/:id', app.controller.asset.index.detail);
7 | // Asset Render
8 | router.get('/asset/simple', controller.asset.index.simple);
9 | router.get('/asset(/.*)?', controller.asset.index.spa);
10 | };
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-asset-boilerplate/app/view/README.md:
--------------------------------------------------------------------------------
1 | ## egg规范view目录, 保证view文件夹存在, 否则app.config.view.root为空, 编译服务器文件会存放到该目录.
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-asset-boilerplate/app/web/asset/css/global.css:
--------------------------------------------------------------------------------
1 | * {
2 | padding: 0;
3 | margin: 0;
4 | outline: none;
5 | box-sizing: border-box;
6 | }
7 | html, body{
8 | height: 100%;
9 | }
10 |
11 | a {
12 | color: #3c8dbc;
13 | text-decoration: none;
14 | }
15 |
16 | -webkit-scrollbar {
17 | width: 4px;
18 | background-color: #F5F5F5;
19 | }
20 |
21 | -webkit-scrollbar-track {
22 | box-shadow: inset 0 0 6px rgba(0, 0, 0, 0.3);
23 | background-color: #F5F5F5;
24 | }
25 |
26 | -webkit-scrollbar-thumb {
27 | box-shadow: inset 0 0 6px rgba(0, 0, 0, .3);
28 | background-color: #3e8dbb;
29 | }
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-asset-boilerplate/app/web/asset/fonts/FontAwesome.otf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/easy-team/egg-vue-webpack-boilerplate/e917151416963459c5aff5138e76f1f534b8cde9/packages/egg-vue-webpack-asset-boilerplate/app/web/asset/fonts/FontAwesome.otf
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-asset-boilerplate/app/web/asset/fonts/fontawesome-webfont.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/easy-team/egg-vue-webpack-boilerplate/e917151416963459c5aff5138e76f1f534b8cde9/packages/egg-vue-webpack-asset-boilerplate/app/web/asset/fonts/fontawesome-webfont.eot
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-asset-boilerplate/app/web/asset/fonts/fontawesome-webfont.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/easy-team/egg-vue-webpack-boilerplate/e917151416963459c5aff5138e76f1f534b8cde9/packages/egg-vue-webpack-asset-boilerplate/app/web/asset/fonts/fontawesome-webfont.ttf
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-asset-boilerplate/app/web/asset/fonts/fontawesome-webfont.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/easy-team/egg-vue-webpack-boilerplate/e917151416963459c5aff5138e76f1f534b8cde9/packages/egg-vue-webpack-asset-boilerplate/app/web/asset/fonts/fontawesome-webfont.woff
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-asset-boilerplate/app/web/asset/fonts/fontawesome-webfont.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/easy-team/egg-vue-webpack-boilerplate/e917151416963459c5aff5138e76f1f534b8cde9/packages/egg-vue-webpack-asset-boilerplate/app/web/asset/fonts/fontawesome-webfont.woff2
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-asset-boilerplate/app/web/asset/fonts/glyphicons-halflings-regular.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/easy-team/egg-vue-webpack-boilerplate/e917151416963459c5aff5138e76f1f534b8cde9/packages/egg-vue-webpack-asset-boilerplate/app/web/asset/fonts/glyphicons-halflings-regular.eot
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-asset-boilerplate/app/web/asset/fonts/glyphicons-halflings-regular.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/easy-team/egg-vue-webpack-boilerplate/e917151416963459c5aff5138e76f1f534b8cde9/packages/egg-vue-webpack-asset-boilerplate/app/web/asset/fonts/glyphicons-halflings-regular.ttf
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-asset-boilerplate/app/web/asset/fonts/glyphicons-halflings-regular.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/easy-team/egg-vue-webpack-boilerplate/e917151416963459c5aff5138e76f1f534b8cde9/packages/egg-vue-webpack-asset-boilerplate/app/web/asset/fonts/glyphicons-halflings-regular.woff
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-asset-boilerplate/app/web/asset/fonts/glyphicons-halflings-regular.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/easy-team/egg-vue-webpack-boilerplate/e917151416963459c5aff5138e76f1f534b8cde9/packages/egg-vue-webpack-asset-boilerplate/app/web/asset/fonts/glyphicons-halflings-regular.woff2
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-asset-boilerplate/app/web/asset/images/egg-vue-webpack-dev.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/easy-team/egg-vue-webpack-boilerplate/e917151416963459c5aff5138e76f1f534b8cde9/packages/egg-vue-webpack-asset-boilerplate/app/web/asset/images/egg-vue-webpack-dev.png
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-asset-boilerplate/app/web/asset/images/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/easy-team/egg-vue-webpack-boilerplate/e917151416963459c5aff5138e76f1f534b8cde9/packages/egg-vue-webpack-asset-boilerplate/app/web/asset/images/favicon.ico
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-asset-boilerplate/app/web/asset/images/loading.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/easy-team/egg-vue-webpack-boilerplate/e917151416963459c5aff5138e76f1f534b8cde9/packages/egg-vue-webpack-asset-boilerplate/app/web/asset/images/loading.gif
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-asset-boilerplate/app/web/asset/images/logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/easy-team/egg-vue-webpack-boilerplate/e917151416963459c5aff5138e76f1f534b8cde9/packages/egg-vue-webpack-asset-boilerplate/app/web/asset/images/logo.png
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-asset-boilerplate/app/web/asset/medias/red.mp4:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/easy-team/egg-vue-webpack-boilerplate/e917151416963459c5aff5138e76f1f534b8cde9/packages/egg-vue-webpack-asset-boilerplate/app/web/asset/medias/red.mp4
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-asset-boilerplate/app/web/component/layout/admin/content/content.vue:
--------------------------------------------------------------------------------
1 |
2 |
7 |
8 |
11 |
25 |
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-asset-boilerplate/app/web/component/layout/admin/footer/footer.vue:
--------------------------------------------------------------------------------
1 |
2 |
12 |
13 |
16 |
21 |
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-asset-boilerplate/app/web/component/layout/admin/index.css:
--------------------------------------------------------------------------------
1 | .admin .search {
2 | margin-top: 8px;
3 | margin-bottom: 16px;
4 | }
5 | .admin label {
6 | padding-left: 8px;
7 | padding-right: 8px;
8 | color: #878d99
9 | }
10 |
11 | .admin .search-input{
12 | max-width: 200px;
13 | }
14 | .admin .search-button{
15 | margin-left: 16px;
16 | }
17 | .admin .add-button{
18 | float:right;
19 | margin-right: 16px;
20 | }
21 |
22 | .admin .long-input {
23 | max-width: 75%;
24 | }
25 |
26 | .admin .top16 {
27 | margin-top: 16px;
28 | }
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-asset-boilerplate/app/web/component/layout/admin/index.js:
--------------------------------------------------------------------------------
1 | import Vue from 'vue';
2 | import MainLayout from './main.vue';
3 | import '../../../asset/css/global.css';
4 | import './index.css';
5 | import createLayout from '../layout';
6 | const tpl = '
';
7 | export default createLayout('Layout', { MainLayout }, tpl);
8 |
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-asset-boilerplate/app/web/component/layout/admin/main.vue:
--------------------------------------------------------------------------------
1 |
2 |
8 |
9 |
32 |
42 |
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-asset-boilerplate/app/web/component/layout/admin/menu/index.js:
--------------------------------------------------------------------------------
1 | const menu = {
2 | home: {
3 | name: 'menu.home',
4 | path: '/',
5 | icon: 'el-icon-menu',
6 | },
7 | content: {
8 | name: 'menu.articlemanage',
9 | icon: 'el-icon-document',
10 | children: {
11 | list: {
12 | name: 'menu.articlequery',
13 | icon: 'el-icon-edit-outline',
14 | path: '/article/list'
15 | },
16 | add: {
17 | name: 'menu.articleadd',
18 | icon: 'el-icon-edit-outline',
19 | path: '/article/add'
20 | }
21 | }
22 | }
23 | };
24 |
25 | export default menu;
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-asset-boilerplate/app/web/component/layout/default.js:
--------------------------------------------------------------------------------
1 | import Vue from 'vue';
2 | import MainLayout from './main.vue';
3 | import '../../asset/css/global.css';
4 | import createLayout from './layout';
5 | const tpl = '
';
6 | export default createLayout('Layout', { }, tpl);
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-asset-boilerplate/app/web/component/layout/index/content/content.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
9 |
23 |
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-asset-boilerplate/app/web/component/layout/index/footer/footer.css:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/easy-team/egg-vue-webpack-boilerplate/e917151416963459c5aff5138e76f1f534b8cde9/packages/egg-vue-webpack-asset-boilerplate/app/web/component/layout/index/footer/footer.css
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-asset-boilerplate/app/web/component/layout/index/footer/footer.vue:
--------------------------------------------------------------------------------
1 |
2 |
23 |
24 |
27 |
32 |
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-asset-boilerplate/app/web/component/layout/index/index.js:
--------------------------------------------------------------------------------
1 | import Vue from 'vue';
2 | import MainLayout from './main.vue';
3 | import '../../../asset/css/bootstrap.css';
4 | import '../../../asset/css/blog.css';
5 | import createLayout from '../layout';
6 | export default createLayout('Layout', { MainLayout }, '');
7 |
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-asset-boilerplate/app/web/component/layout/index/main.vue:
--------------------------------------------------------------------------------
1 |
2 |
8 |
9 |
11 |
21 |
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-asset-boilerplate/app/web/component/layout/inline.js:
--------------------------------------------------------------------------------
1 | function inlineTest() {
2 | var name = 'Egg Vue SSR';
3 | var desc = 'Egg Vue Server Side Render';
4 | return name + '-' + desc;
5 | }
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-asset-boilerplate/app/web/component/layout/spa/content/content.vue:
--------------------------------------------------------------------------------
1 |
2 |
7 |
8 |
11 |
23 |
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-asset-boilerplate/app/web/component/layout/spa/footer/footer.vue:
--------------------------------------------------------------------------------
1 |
2 |
12 |
13 |
16 |
19 |
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-asset-boilerplate/app/web/component/layout/spa/main.vue:
--------------------------------------------------------------------------------
1 |
2 |
8 |
9 |
11 |
23 |
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-asset-boilerplate/app/web/component/spa/index.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
6 |
7 |
8 |
9 |
10 |
20 |
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-asset-boilerplate/app/web/component/spa/router/detail.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
{{ article.title }}
4 |
10 |
11 |
12 |
14 |
28 |
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-asset-boilerplate/app/web/component/spa/router/index.js:
--------------------------------------------------------------------------------
1 | import Vue from 'vue';
2 |
3 | import VueRouter from 'vue-router';
4 |
5 | import ListView from './list';
6 |
7 | Vue.use(VueRouter);
8 |
9 | export default function createRouter(initState = {}, options = { base: '/spa' }) {
10 | const { base } = options;
11 | return new VueRouter({
12 | mode: 'history',
13 | base,
14 | routes: [
15 | {
16 | path: '/',
17 | component: ListView
18 | },
19 | {
20 | path: '/list',
21 | component: ListView
22 | },
23 | {
24 | path: '/detail/:id',
25 | component: () => import('./detail')
26 | }
27 | ]
28 | });
29 | }
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-asset-boilerplate/app/web/component/spa/store/actions.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 |
3 | import * as Type from './mutation-type';
4 | import Vue from 'vue';
5 | import Vuex from 'vuex';
6 | import axios from 'axios';
7 |
8 | Vue.use(Vuex);
9 |
10 | const actions = {
11 |
12 | FETCH_ARTICLE_LIST: ({ commit, dispatch, state }) => {
13 | if (!state.articleList.length) {
14 | return axios.get(`${state.origin}/spa/api/article/list`)
15 | .then(response => {
16 | commit(Type.SET_ARTICLE_LIST, response.data.list);
17 | });
18 | }
19 | },
20 |
21 | FETCH_ARTICLE_DETAIL: ({ commit, dispatch, state }, { id }) => {
22 | if (state.article.id !== Number(id)) {
23 | return axios.get(`${state.origin}/spa/api/article/${id}`)
24 | .then(response => {
25 | commit(Type.SET_ARTICLE_DETAIL, response.data);
26 | });
27 | }
28 | }
29 | };
30 |
31 | export default actions;
32 |
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-asset-boilerplate/app/web/component/spa/store/getters.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 |
3 |
4 | const getters = {
5 |
6 | };
7 |
8 | export default getters;
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-asset-boilerplate/app/web/component/spa/store/index.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 | import Vue from 'vue';
3 | import Vuex from 'vuex';
4 |
5 | import actions from './actions';
6 | import getters from './getters';
7 | import mutations from './mutations';
8 |
9 | Vue.use(Vuex);
10 |
11 | export default function createStore(initState = {}) {
12 |
13 | const state = {
14 | articleList: [],
15 | article: {},
16 | ...initState
17 | };
18 |
19 | return new Vuex.Store({
20 | state,
21 | actions,
22 | getters,
23 | mutations
24 | });
25 | }
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-asset-boilerplate/app/web/component/spa/store/mutation-type.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 |
3 | export const SET_ARTICLE_LIST = 'SET_ARTICLE_LIST';
4 | export const SET_ARTICLE_DETAIL = 'SET_ARTICLE_DETAIL';
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-asset-boilerplate/app/web/component/spa/store/mutations.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 |
3 | import {
4 | SET_ARTICLE_LIST,
5 | SET_ARTICLE_DETAIL
6 | } from './mutation-type';
7 |
8 | const mutations = {
9 | [SET_ARTICLE_LIST](state, items) {
10 | state.articleList = items;
11 | },
12 | [SET_ARTICLE_DETAIL](state, data) {
13 | state.article = data;
14 | }
15 | };
16 | export default mutations;
17 |
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-asset-boilerplate/app/web/framework/request.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 | import axios from 'axios';
3 | // axios.defaults.baseURL = 'http://127.0.0.1:7001';
4 | axios.defaults.timeout = 15000;
5 | axios.defaults.xsrfHeaderName = 'x-csrf-token';
6 | axios.defaults.xsrfCookieName = 'csrfToken';
7 | export default {
8 | post(url, json, store = {}) {
9 | const { state = { origin: '' } } = store;
10 | const headers = {};
11 | if (EASY_ENV_IS_NODE) {
12 | headers['x-csrf-token'] = state.csrf;
13 | headers.Cookie = `csrfToken=${state.csrf}`;
14 | }
15 | return axios.post(`${state.origin}${url}`, json, { headers });
16 | },
17 | get(url, store = {}) {
18 | const { state = { origin: '' } } = store;
19 | return axios.get(`${state.origin}${url}`);
20 | }
21 | };
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-asset-boilerplate/app/web/page/asset/simple.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
{{ site.name }}
5 |
10 |
11 |
12 |
13 |
15 |
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-asset-boilerplate/app/web/page/asset/spa.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 | import App from 'framework/app.js';
3 | import index from 'component/spa/index.vue';
4 | import createStore from 'component/spa/store';
5 | import createRouter from 'component/spa/router';
6 |
7 | const options = { base: '/asset' };
8 |
9 | export default new App({
10 | index,
11 | options,
12 | createStore,
13 | createRouter,
14 | }).bootstrap();
15 |
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-asset-boilerplate/app/web/page/asset/spa.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
21 |
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-asset-boilerplate/app/web/view/asset.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | {{title}}
5 |
6 |
7 |
8 |
9 |
10 | {% for item in asset.css %}
11 |
12 | {% endfor %}
13 |
14 |
15 |
16 |
19 | {% for item in asset.js %}
20 |
21 | {% endfor %}
22 |
23 |
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-asset-boilerplate/app/web/view/layout.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | Egg + Vue
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-asset-boilerplate/app/web/view/layout.tpl:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | {{title}}
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
16 |
17 |
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-asset-boilerplate/babel.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | presets: [
3 | [
4 | '@babel/preset-env',
5 | {
6 | modules: false,
7 | targets: {
8 | browsers: ['last 2 versions'],
9 | },
10 | },
11 | ],
12 | ],
13 | plugins: [
14 | '@babel/plugin-proposal-object-rest-spread',
15 | '@babel/plugin-syntax-dynamic-import',
16 | ],
17 | };
18 |
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-asset-boilerplate/config/config.prod.js:
--------------------------------------------------------------------------------
1 | /**
2 | * 生产环境配置
3 | *
4 | * 最终生效的配置为 prod + default(前者覆盖后者)
5 | */
6 |
7 |
8 | module.exports = app => {
9 | const exports = {};
10 |
11 | return exports;
12 | };
13 |
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-asset-boilerplate/config/config.test.js:
--------------------------------------------------------------------------------
1 |
2 |
3 | module.exports = app => {
4 | const exports = {};
5 |
6 | return exports;
7 | };
8 |
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-asset-boilerplate/config/plugin.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 |
3 | exports.vuessr = {
4 | enable: true,
5 | package: 'egg-view-vue-ssr'
6 | };
7 |
8 | exports.nunjucks = {
9 | enable: true,
10 | package: 'egg-view-nunjucks',
11 | };
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-asset-boilerplate/config/plugin.local.js:
--------------------------------------------------------------------------------
1 | exports.cors = {
2 | enable: true,
3 | package: 'egg-cors'
4 | };
5 |
6 | exports.webpack = {
7 | enable: true,
8 | package: 'egg-webpack'
9 | };
10 |
11 | exports.webpackvue = {
12 | enable: true,
13 | package: 'egg-webpack-vue'
14 | };
15 |
16 | exports.logview = {
17 | package: 'egg-logview',
18 | env: ['local']
19 | };
20 |
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-asset-boilerplate/webpack.config.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 | // Webpack:https://www.yuque.com/easy-team/easywebpack
3 | // Egg Vue asset 前端渲染 https://www.yuque.com/easy-team/egg-vue/asset
4 | const path = require('path');
5 |
6 | module.exports = {
7 | target: 'web',
8 | entry: {
9 | 'asset/simple': 'app/web/page/asset/simple.vue',
10 | 'asset/spa': 'app/web/page/asset/spa.js'
11 | }
12 | };
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-boilerplate/.eslintignore:
--------------------------------------------------------------------------------
1 | test/fixtures
2 | test/benchmark
3 | test/client
4 |
5 | coverage/
6 | private/
7 | run/
8 |
9 | public/
10 | node_modules/
11 | app/web/asset/
12 | app/view/
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-boilerplate/.gitattributes:
--------------------------------------------------------------------------------
1 | *.js linguist-language=javascript
2 | *.css linguist-language=javascript
3 | *.html linguist-language=javascript
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-boilerplate/.gitignore:
--------------------------------------------------------------------------------
1 | .DS_Store
2 | .happypack/
3 | node_modules/
4 | npm-debug.log
5 | .idea/
6 | dist
7 | static
8 | public
9 | private
10 | run
11 | *.iml
12 | artifacts.json
13 | *tmp
14 | _site
15 | logs
16 | config/buildConfig.json
17 | config/manifest.json
18 | config/manifest-dll.json
19 | app/view/*
20 | !app/view/layout.html
21 | !app/view/README.md
22 | !app/view/.gitkeep
23 | package-lock.json
24 | .gitkeep
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-boilerplate/.vscode/launch.json:
--------------------------------------------------------------------------------
1 | {
2 | "version": "1.0.0",
3 | "configurations": [
4 | {
5 | "name": "Launch Egg Vue",
6 | "type": "node",
7 | "request": "launch",
8 | "cwd": "${workspaceRoot}",
9 | "runtimeExecutable": "npm",
10 | "windows": { "runtimeExecutable": "npm.cmd" },
11 | "runtimeArgs": [ "run", "debug" ],
12 | "console": "integratedTerminal",
13 | "protocol": "auto",
14 | "restart": true,
15 | "port": 9229,
16 | "autoAttachChildProcesses": true
17 | }
18 | ]
19 | }
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-boilerplate/.vscode/settings.json:
--------------------------------------------------------------------------------
1 | {
2 | "eslint.enable": true,
3 | "eslint.run": "onSave",
4 | "editor.codeActionsOnSave": {
5 | "source.fixAll.eslint": false
6 | },
7 | "eslint.validate": [
8 | "javascript",
9 | {
10 | "language": "vue",
11 | "autoFix": true
12 | }
13 | ],
14 | "files.exclude": {
15 | "**/node_modules/_**": true
16 | }
17 | }
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-boilerplate/app/controller/blog/category.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 | module.exports = app => {
3 | return class CategoryController extends app.Controller {
4 | async index(ctx) {
5 | await ctx.render('blog/category.js', { message: 'Egg Vue Server Side Render: Category' });
6 | }
7 | };
8 | };
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-boilerplate/app/controller/blog/home.js:
--------------------------------------------------------------------------------
1 | 'usestrict';
2 | const egg = require('egg');
3 | module.exports = class HomeController extends egg.Controller {
4 |
5 | async ssr() {
6 | const result = this.service.article.getArtilceList();
7 | await this.ctx.render('blog/home.js', result);
8 | }
9 |
10 | async csr() {
11 | const result = this.service.article.getArtilceList();
12 | await this.ctx.renderClient('blog/home.js', result);
13 | }
14 |
15 | async about() {
16 | await this.ctx.render('blog/about.js', {});
17 | }
18 |
19 | async list() {
20 | this.ctx.body = this.service.article.getArtilceList(this.ctx.query);
21 | }
22 |
23 | async detail() {
24 | const id = this.ctx.query.id;
25 | }
26 | };
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-boilerplate/app/controller/html/index.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 | // html 前端渲染 https://www.yuque.com/easy-team/egg-vue/html
3 | module.exports = (app) => {
4 | return class AppController extends app.Controller {
5 | async spa() {
6 | const { ctx } = this;
7 | await ctx.render('spa.tpl', { state: { ...ctx.locals} });
8 | }
9 |
10 | async simple() {
11 | const { ctx } = this;
12 | const state = {
13 | ...ctx.locals,
14 | site: {
15 | name: 'Egg Vue HTML Render',
16 | url: 'https://easyjs.cn'
17 | }
18 | };
19 | await ctx.render('simple.tpl', { state });
20 | }
21 |
22 | async list() {
23 | this.ctx.body = this.ctx.service.article.getArtilceList(this.ctx.query);
24 | }
25 |
26 | async detail() {
27 | const id = Number(this.ctx.params.id);
28 | this.ctx.body = this.ctx.service.article.getArticle(id);
29 | }
30 | };
31 | };
32 |
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-boilerplate/app/controller/spa/index.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 | const Controller = require('egg').Controller;
3 | class AppController extends Controller {
4 | async index(ctx) {
5 | const { mode } = ctx.query;
6 | if (mode === 'csr') {
7 | await this.ctx.renderClient('spa.js', { url: this.ctx.url.replace('/spa', '') });
8 | } else {
9 | await this.ctx.render('spa.js', { url: this.ctx.url.replace('/spa', '') });
10 | }
11 | }
12 |
13 | async list() {
14 | this.ctx.body = this.ctx.service.article.getArtilceList(this.ctx.query);
15 | }
16 |
17 | async detail() {
18 | const id = Number(this.ctx.params.id);
19 | this.ctx.body = this.ctx.service.article.getArticle(id);
20 | }
21 | }
22 |
23 | module.exports = AppController;
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-boilerplate/app/extend/application.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 | const Factory = require('../lib/db/factory');
3 | const DBSymbol = Symbol('Application#db');
4 | module.exports = {
5 | get db() {
6 | if (!this[DBSymbol]) {
7 | this[DBSymbol] = Factory();
8 | }
9 | return this[DBSymbol];
10 | },
11 | };
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-boilerplate/app/extend/context.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 | module.exports = {
3 | get db() {
4 | return this.app.db;
5 | }
6 | };
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-boilerplate/app/lib/db/base.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 | const shortid = require('shortid');
3 | module.exports = class DB {
4 | constructor(name = 'blog.json') {
5 | this.name = name;
6 | }
7 | getUniqueId() {
8 | return shortid.generate();
9 | }
10 | get(collectionName) {
11 | return null;
12 | }
13 | add(collectionName, json) {
14 | return null;
15 | }
16 | update(collectionName, where, json) {
17 | return null;
18 | }
19 | delete(collectionName, field) {
20 | return null;
21 | }
22 | getPager(collectionName, query) {
23 | return null;
24 | }
25 | };
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-boilerplate/app/lib/db/collection.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 | module.exports = class Collection {
3 | constructor(db, name) {
4 | this.db = db;
5 | this.name = name;
6 | }
7 | get() {
8 | return this.db.get(this.name);
9 | }
10 | getByWhere(json) {
11 | return this.db.get(this.name).find(json);
12 | }
13 | add(json) {
14 | return this.db.add(this.name, json);
15 | }
16 | update(where, json) {
17 | return this.db.update(this.name, where, json);
18 | }
19 | delete(field) {
20 | return this.db.delete(this.name, field);
21 | }
22 | getPager(query) {
23 | return this.db.getPager(this.name, query);
24 | }
25 | getOrderAscByField(field) {
26 | return this.get().orderBy(field, 'asc').value();
27 | }
28 | getOrderDescByField(field) {
29 | return this.get().orderBy(field, 'desc').value();
30 | }
31 | };
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-boilerplate/app/lib/db/factory.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 | const File = require('./file');
3 | const MySQL = require('./mysql');
4 | const MongoDB = require('./mongo');
5 | module.exports = type => {
6 | switch (type) {
7 | case 'mysql':
8 | return new MySQL();
9 | case 'mongo':
10 | return new MongoDB();
11 | default:
12 | return new File();
13 | }
14 | };
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-boilerplate/app/lib/db/mongo.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 | const Base = require('./base');
3 | module.exports = class MongoDB extends Base {};
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-boilerplate/app/lib/db/mysql.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 | const Base = require('./base');
3 | module.exports = class MySQLDB extends Base {};
4 |
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-boilerplate/app/middleware/locals.js:
--------------------------------------------------------------------------------
1 | module.exports = () => {
2 | return async function locale(ctx, next) {
3 | ctx.locals.locale = ctx.query.locale || 'cn';
4 | ctx.locals.origin = ctx.request.origin;
5 | await next();
6 | };
7 | };
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-boilerplate/app/model/article.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 |
3 | module.exports = class Model {
4 | constructor() {
5 | this.id = void 0;
6 | this.title = undefined;
7 | this.summary = undefined;
8 | this.tag = undefined;
9 | this.hits = 0;
10 | this.createTime = Date.now();
11 | }
12 | };
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-boilerplate/app/model/artilcedetail.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 | module.exports = class ArticleDetail {};
3 |
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-boilerplate/app/model/user.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 | module.exports = class User {
3 | constructor() {
4 | this.id = null;
5 | this.name = null;
6 | this.password = null;
7 | this.roleId = null;
8 | }
9 | };
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-boilerplate/app/model/utils/base.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 | const Pagination = require('./pagination');
3 | module.exports = class Model {
4 | constructor() {
5 | this.pagination = new Pagination();
6 | }
7 | };
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-boilerplate/app/view/README.md:
--------------------------------------------------------------------------------
1 | ## egg规范view目录, 保证view文件夹存在, 否则app.config.view.root为空, 编译服务器文件会存放到该目录.
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-boilerplate/app/web/asset/css/global.css:
--------------------------------------------------------------------------------
1 | * {
2 | padding: 0;
3 | margin: 0;
4 | outline: none;
5 | box-sizing: border-box;
6 | }
7 | html, body{
8 | height: 100%;
9 | }
10 |
11 | a {
12 | color: #3c8dbc;
13 | text-decoration: none;
14 | }
15 |
16 | -webkit-scrollbar {
17 | width: 4px;
18 | background-color: #F5F5F5;
19 | }
20 |
21 | -webkit-scrollbar-track {
22 | box-shadow: inset 0 0 6px rgba(0, 0, 0, 0.3);
23 | background-color: #F5F5F5;
24 | }
25 |
26 | -webkit-scrollbar-thumb {
27 | box-shadow: inset 0 0 6px rgba(0, 0, 0, .3);
28 | background-color: #3e8dbb;
29 | }
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-boilerplate/app/web/asset/fonts/FontAwesome.otf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/easy-team/egg-vue-webpack-boilerplate/e917151416963459c5aff5138e76f1f534b8cde9/packages/egg-vue-webpack-boilerplate/app/web/asset/fonts/FontAwesome.otf
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-boilerplate/app/web/asset/fonts/fontawesome-webfont.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/easy-team/egg-vue-webpack-boilerplate/e917151416963459c5aff5138e76f1f534b8cde9/packages/egg-vue-webpack-boilerplate/app/web/asset/fonts/fontawesome-webfont.eot
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-boilerplate/app/web/asset/fonts/fontawesome-webfont.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/easy-team/egg-vue-webpack-boilerplate/e917151416963459c5aff5138e76f1f534b8cde9/packages/egg-vue-webpack-boilerplate/app/web/asset/fonts/fontawesome-webfont.ttf
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-boilerplate/app/web/asset/fonts/fontawesome-webfont.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/easy-team/egg-vue-webpack-boilerplate/e917151416963459c5aff5138e76f1f534b8cde9/packages/egg-vue-webpack-boilerplate/app/web/asset/fonts/fontawesome-webfont.woff
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-boilerplate/app/web/asset/fonts/fontawesome-webfont.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/easy-team/egg-vue-webpack-boilerplate/e917151416963459c5aff5138e76f1f534b8cde9/packages/egg-vue-webpack-boilerplate/app/web/asset/fonts/fontawesome-webfont.woff2
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-boilerplate/app/web/asset/fonts/glyphicons-halflings-regular.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/easy-team/egg-vue-webpack-boilerplate/e917151416963459c5aff5138e76f1f534b8cde9/packages/egg-vue-webpack-boilerplate/app/web/asset/fonts/glyphicons-halflings-regular.eot
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-boilerplate/app/web/asset/fonts/glyphicons-halflings-regular.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/easy-team/egg-vue-webpack-boilerplate/e917151416963459c5aff5138e76f1f534b8cde9/packages/egg-vue-webpack-boilerplate/app/web/asset/fonts/glyphicons-halflings-regular.ttf
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-boilerplate/app/web/asset/fonts/glyphicons-halflings-regular.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/easy-team/egg-vue-webpack-boilerplate/e917151416963459c5aff5138e76f1f534b8cde9/packages/egg-vue-webpack-boilerplate/app/web/asset/fonts/glyphicons-halflings-regular.woff
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-boilerplate/app/web/asset/fonts/glyphicons-halflings-regular.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/easy-team/egg-vue-webpack-boilerplate/e917151416963459c5aff5138e76f1f534b8cde9/packages/egg-vue-webpack-boilerplate/app/web/asset/fonts/glyphicons-halflings-regular.woff2
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-boilerplate/app/web/asset/images/egg-vue-webpack-dev.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/easy-team/egg-vue-webpack-boilerplate/e917151416963459c5aff5138e76f1f534b8cde9/packages/egg-vue-webpack-boilerplate/app/web/asset/images/egg-vue-webpack-dev.png
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-boilerplate/app/web/asset/images/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/easy-team/egg-vue-webpack-boilerplate/e917151416963459c5aff5138e76f1f534b8cde9/packages/egg-vue-webpack-boilerplate/app/web/asset/images/favicon.ico
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-boilerplate/app/web/asset/images/loading.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/easy-team/egg-vue-webpack-boilerplate/e917151416963459c5aff5138e76f1f534b8cde9/packages/egg-vue-webpack-boilerplate/app/web/asset/images/loading.gif
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-boilerplate/app/web/asset/images/logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/easy-team/egg-vue-webpack-boilerplate/e917151416963459c5aff5138e76f1f534b8cde9/packages/egg-vue-webpack-boilerplate/app/web/asset/images/logo.png
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-boilerplate/app/web/asset/medias/red.mp4:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/easy-team/egg-vue-webpack-boilerplate/e917151416963459c5aff5138e76f1f534b8cde9/packages/egg-vue-webpack-boilerplate/app/web/asset/medias/red.mp4
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-boilerplate/app/web/component/layout/admin/content/content.vue:
--------------------------------------------------------------------------------
1 |
2 |
7 |
8 |
11 |
25 |
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-boilerplate/app/web/component/layout/admin/footer/footer.vue:
--------------------------------------------------------------------------------
1 |
2 |
12 |
13 |
16 |
21 |
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-boilerplate/app/web/component/layout/admin/index.css:
--------------------------------------------------------------------------------
1 | .admin .search {
2 | margin-top: 8px;
3 | margin-bottom: 16px;
4 | }
5 | .admin label {
6 | padding-left: 8px;
7 | padding-right: 8px;
8 | color: #878d99
9 | }
10 |
11 | .admin .search-input{
12 | max-width: 200px;
13 | }
14 | .admin .search-button{
15 | margin-left: 16px;
16 | }
17 | .admin .add-button{
18 | float:right;
19 | margin-right: 16px;
20 | }
21 |
22 | .admin .long-input {
23 | max-width: 75%;
24 | }
25 |
26 | .admin .top16 {
27 | margin-top: 16px;
28 | }
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-boilerplate/app/web/component/layout/admin/index.js:
--------------------------------------------------------------------------------
1 | import Vue from 'vue';
2 | import MainLayout from './main.vue';
3 | import '../../../asset/css/global.css';
4 | import './index.css';
5 | import createLayout from '../layout';
6 | const tpl = '';
7 | export default createLayout('Layout', { MainLayout }, tpl);
8 |
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-boilerplate/app/web/component/layout/admin/main.vue:
--------------------------------------------------------------------------------
1 |
2 |
8 |
9 |
32 |
42 |
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-boilerplate/app/web/component/layout/admin/menu/index.js:
--------------------------------------------------------------------------------
1 | const menu = {
2 | home: {
3 | name: 'menu.home',
4 | path: '/',
5 | icon: 'el-icon-menu',
6 | },
7 | content: {
8 | name: 'menu.articlemanage',
9 | icon: 'el-icon-document',
10 | children: {
11 | list: {
12 | name: 'menu.articlequery',
13 | icon: 'el-icon-edit-outline',
14 | path: '/article/list'
15 | },
16 | add: {
17 | name: 'menu.articleadd',
18 | icon: 'el-icon-edit-outline',
19 | path: '/article/add'
20 | }
21 | }
22 | }
23 | };
24 |
25 | export default menu;
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-boilerplate/app/web/component/layout/default.js:
--------------------------------------------------------------------------------
1 | import Vue from 'vue';
2 | import MainLayout from './main.vue';
3 | import '../../asset/css/global.css';
4 | import createLayout from './layout';
5 | const tpl = '
';
6 | export default createLayout('Layout', { }, tpl);
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-boilerplate/app/web/component/layout/index/content/content.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
9 |
23 |
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-boilerplate/app/web/component/layout/index/footer/footer.css:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/easy-team/egg-vue-webpack-boilerplate/e917151416963459c5aff5138e76f1f534b8cde9/packages/egg-vue-webpack-boilerplate/app/web/component/layout/index/footer/footer.css
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-boilerplate/app/web/component/layout/index/footer/footer.vue:
--------------------------------------------------------------------------------
1 |
2 |
23 |
24 |
27 |
32 |
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-boilerplate/app/web/component/layout/index/index.js:
--------------------------------------------------------------------------------
1 | import Vue from 'vue';
2 | import MainLayout from './main.vue';
3 | import '../../../asset/css/bootstrap.css';
4 | import '../../../asset/css/blog.css';
5 | import createLayout from '../layout';
6 | export default createLayout('Layout', { MainLayout }, '');
7 |
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-boilerplate/app/web/component/layout/index/main.vue:
--------------------------------------------------------------------------------
1 |
2 |
8 |
9 |
11 |
21 |
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-boilerplate/app/web/component/layout/inline.js:
--------------------------------------------------------------------------------
1 | function inlineTest() {
2 | var name = 'Egg Vue SSR';
3 | var desc = 'Egg Vue Server Side Render';
4 | return name + '-' + desc;
5 | }
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-boilerplate/app/web/component/layout/spa/content/content.vue:
--------------------------------------------------------------------------------
1 |
2 |
7 |
8 |
11 |
23 |
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-boilerplate/app/web/component/layout/spa/footer/footer.vue:
--------------------------------------------------------------------------------
1 |
2 |
12 |
13 |
16 |
19 |
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-boilerplate/app/web/component/layout/spa/main.vue:
--------------------------------------------------------------------------------
1 |
2 |
8 |
9 |
11 |
23 |
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-boilerplate/app/web/component/spa/index.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
6 |
7 |
8 |
9 |
10 |
20 |
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-boilerplate/app/web/component/spa/router/detail.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
{{ article.title }}
4 |
10 |
11 |
12 |
14 |
28 |
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-boilerplate/app/web/component/spa/router/index.js:
--------------------------------------------------------------------------------
1 | import Vue from 'vue';
2 |
3 | import VueRouter from 'vue-router';
4 |
5 | import ListView from './list';
6 |
7 | Vue.use(VueRouter);
8 |
9 | export default function createRouter(initState = {}, options = { base: '/spa' }) {
10 | const { base } = options;
11 | return new VueRouter({
12 | mode: 'history',
13 | base,
14 | routes: [
15 | {
16 | path: '/',
17 | component: ListView
18 | },
19 | {
20 | path: '/list',
21 | component: ListView
22 | },
23 | {
24 | path: '/detail/:id',
25 | component: () => import('./detail')
26 | }
27 | ]
28 | });
29 | }
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-boilerplate/app/web/component/spa/store/actions.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 |
3 | import * as Type from './mutation-type';
4 | import Vue from 'vue';
5 | import Vuex from 'vuex';
6 | import axios from 'axios';
7 |
8 | Vue.use(Vuex);
9 |
10 | const actions = {
11 |
12 | FETCH_ARTICLE_LIST: ({ commit, dispatch, state }) => {
13 | if (!state.articleList.length) {
14 | return axios.get(`${state.origin}/spa/api/article/list`)
15 | .then(response => {
16 | commit(Type.SET_ARTICLE_LIST, response.data.list);
17 | });
18 | }
19 | },
20 |
21 | FETCH_ARTICLE_DETAIL: ({ commit, dispatch, state }, { id }) => {
22 | if (state.article.id !== Number(id)) {
23 | return axios.get(`${state.origin}/spa/api/article/${id}`)
24 | .then(response => {
25 | commit(Type.SET_ARTICLE_DETAIL, response.data);
26 | });
27 | }
28 | }
29 | };
30 |
31 | export default actions;
32 |
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-boilerplate/app/web/component/spa/store/getters.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 |
3 |
4 | const getters = {
5 |
6 | };
7 |
8 | export default getters;
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-boilerplate/app/web/component/spa/store/index.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 | import Vue from 'vue';
3 | import Vuex from 'vuex';
4 |
5 | import actions from './actions';
6 | import getters from './getters';
7 | import mutations from './mutations';
8 |
9 | Vue.use(Vuex);
10 |
11 | export default function createStore(initState = {}) {
12 |
13 | const state = {
14 | articleList: [],
15 | article: {},
16 | ...initState
17 | };
18 |
19 | return new Vuex.Store({
20 | state,
21 | actions,
22 | getters,
23 | mutations
24 | });
25 | }
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-boilerplate/app/web/component/spa/store/mutation-type.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 |
3 | export const SET_ARTICLE_LIST = 'SET_ARTICLE_LIST';
4 | export const SET_ARTICLE_DETAIL = 'SET_ARTICLE_DETAIL';
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-boilerplate/app/web/component/spa/store/mutations.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 |
3 | import {
4 | SET_ARTICLE_LIST,
5 | SET_ARTICLE_DETAIL
6 | } from './mutation-type';
7 |
8 | const mutations = {
9 | [SET_ARTICLE_LIST](state, items) {
10 | state.articleList = items;
11 | },
12 | [SET_ARTICLE_DETAIL](state, data) {
13 | state.article = data;
14 | }
15 | };
16 | export default mutations;
17 |
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-boilerplate/app/web/framework/entry/template.js:
--------------------------------------------------------------------------------
1 | import Layout from 'component/layout/index';
2 | import plugin from 'framework/plugin';
3 |
4 | // vue-entry-loader 自定义全局注册钩子,如果在该目录下面存在该 template.js 框架自动加载,用于注册全局的组件
5 | export default function(Vue) {
6 | Vue.use(plugin);
7 | Vue.component(Layout.name, Layout);
8 | }
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-boilerplate/app/web/framework/i18n/admin/cn.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 | export default {
3 | menu: {
4 | home: '首页',
5 | articlemanage: '文章管理',
6 | articlequery: '文章查询',
7 | articleadd: '添加文章'
8 | },
9 | lang: {
10 | href: '/admin?locale=en',
11 | text: '中文'
12 | }
13 | };
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-boilerplate/app/web/framework/i18n/admin/en.js:
--------------------------------------------------------------------------------
1 | export default {
2 | menu: {
3 | home: 'Home',
4 | articlemanage: 'Article Manage',
5 | articlequery: 'Article Query',
6 | articleadd: 'Article Add'
7 | },
8 | lang: {
9 | href: '/admin?locale=cn',
10 | text: 'English'
11 | }
12 | };
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-boilerplate/app/web/framework/i18n/admin/index.js:
--------------------------------------------------------------------------------
1 | import VueI18n from 'vue-i18n';
2 | import cn from './cn';
3 | import en from './en';
4 | export default function createI18n(locale) {
5 | return new VueI18n({
6 | locale,
7 | messages: {
8 | en,
9 | cn
10 | }
11 | });
12 | }
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-boilerplate/app/web/framework/i18n/site/cn.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 | export default {
3 | menu: {
4 | home: '首页',
5 | category: '分类',
6 | about: '关于',
7 | admin: '管理',
8 | test: 'easyjs'
9 | },
10 | lang: {
11 | href: '/?locale=en',
12 | text: '中文'
13 | }
14 | };
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-boilerplate/app/web/framework/i18n/site/en.js:
--------------------------------------------------------------------------------
1 | export default {
2 | menu: {
3 | home: 'Home',
4 | category: 'Catetory',
5 | about: 'About',
6 | admin: 'Admin',
7 | test: 'easyjs'
8 | },
9 | lang: {
10 | href: '/?locale=cn',
11 | text: 'English'
12 | }
13 | };
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-boilerplate/app/web/framework/i18n/site/index.js:
--------------------------------------------------------------------------------
1 | import VueI18n from 'vue-i18n';
2 | import cn from './cn';
3 | import en from './en';
4 | export default function createI18n(locale) {
5 | return new VueI18n({
6 | locale,
7 | messages: {
8 | en,
9 | cn
10 | }
11 | });
12 | }
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-boilerplate/app/web/framework/plugin/index.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 | import axios from 'axios';
3 | import request from 'framework/request';
4 | import VueI18n from 'vue-i18n';
5 | import createI18n from 'framework/i18n/site';
6 |
7 | export default {
8 | install(Vue) {
9 | if (!Vue.prototype.hasOwnProperty('$request')) {
10 | Vue.prototype.$request = request;
11 | }
12 | // 自定义 hook 钩子,vue-entry-loader 自动加载
13 | if (!Vue.hook) {
14 | Vue.use(VueI18n);
15 | Vue.hook = {
16 | render(context, options) {
17 | const i18n = createI18n(context.state.locale);
18 | options.i18n = i18n;
19 | }
20 | };
21 | }
22 | }
23 | };
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-boilerplate/app/web/framework/request.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 | import axios from 'axios';
3 | // axios.defaults.baseURL = 'http://127.0.0.1:7001';
4 | axios.defaults.timeout = 15000;
5 | axios.defaults.xsrfHeaderName = 'x-csrf-token';
6 | axios.defaults.xsrfCookieName = 'csrfToken';
7 | export default {
8 | post(url, json, store = {}) {
9 | const { state = { origin: '' } } = store;
10 | const headers = {};
11 | if (EASY_ENV_IS_NODE) {
12 | headers['x-csrf-token'] = state.csrf;
13 | headers.Cookie = `csrfToken=${state.csrf}`;
14 | }
15 | return axios.post(`${state.origin}${url}`, json, { headers });
16 | },
17 | get(url, store = {}) {
18 | const { state = { origin: '' } } = store;
19 | return axios.get(`${state.origin}${url}`);
20 | }
21 | };
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-boilerplate/app/web/page/admin/home/store/app/getters.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 |
3 | export default {};
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-boilerplate/app/web/page/admin/home/store/app/index.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 | import Vue from 'vue';
3 | import Vuex from 'vuex';
4 |
5 | import actions from './actions';
6 | import getters from './getters';
7 | import mutations from './mutations';
8 |
9 | Vue.use(Vuex);
10 |
11 | export default function createStore(initState) {
12 | const state = {
13 | articleTotal: 0,
14 | articleList: [],
15 | article: {},
16 | ...initState
17 | };
18 | return new Vuex.Store({
19 | state,
20 | actions,
21 | getters,
22 | mutations
23 | });
24 | }
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-boilerplate/app/web/page/admin/home/store/app/mutation-type.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 |
3 | export const SET_ARTICLE_LIST = 'SET_ARTICLE_LIST';
4 | export const SET_ARTICLE_DETAIL = 'SET_ARTICLE_DETAIL';
5 | export const SET_SAVE_ARTICLE = 'SET_SAVE_ARTICLE';
6 | export const DELETE_ARTICLE = 'DELETE_ARTICLE';
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-boilerplate/app/web/page/admin/home/store/app/mutations.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 |
3 | import {
4 | SET_ARTICLE_LIST,
5 | SET_ARTICLE_DETAIL,
6 | SET_SAVE_ARTICLE,
7 | DELETE_ARTICLE
8 | } from './mutation-type';
9 |
10 | const mutations = {
11 | [SET_ARTICLE_LIST](state, { list, total }) {
12 | state.articleTotal = total;
13 | state.articleList = list;
14 | },
15 | [SET_ARTICLE_DETAIL](state, data) {
16 | console.log('>>>data', data);
17 | if (Array.isArray(data) && data.length) {
18 | state.article = data[0];
19 | } else {
20 | state.article = data;
21 | }
22 | },
23 | [SET_SAVE_ARTICLE](state, data) {
24 | state.articleTotal += 1;
25 | state.articleList = [data].concat(state.articleList);
26 | },
27 | [DELETE_ARTICLE](state, { id }) {
28 | state.articleTotal -= 1;
29 | state.articleList = state.articleList.filter(item => {
30 | return item.id !== id;
31 | });
32 | }
33 | };
34 | export default mutations;
35 |
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-boilerplate/app/web/page/admin/home/view/dashboard/index.vue:
--------------------------------------------------------------------------------
1 |
2 |
5 |
6 |
9 |
17 |
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-boilerplate/app/web/page/admin/home/view/detail.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
{{ article.title }}
4 |
9 |
10 |
11 |
13 |
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-boilerplate/app/web/page/admin/home/view/notfound.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 | Not Find The Page!!!
4 |
5 |
6 |
9 |
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-boilerplate/app/web/page/admin/login/login.css:
--------------------------------------------------------------------------------
1 | .login {
2 | display: flex;
3 | justify-content: center;
4 | align-items: center;
5 | position: absolute;
6 | height: 100%;
7 | width: 100%;
8 | background-color: #e4e5e6;
9 | }
10 |
11 | .login .login-info input {
12 | width: 100%;
13 | }
14 |
15 | .login .login-form {
16 | width: 375px;
17 | height: 400px;
18 | padding: 30px;
19 | background-color: white;
20 | text-align: left;
21 | border-radius: 4px;
22 | position: relative;
23 | margin-left: 0;
24 | margin-right: 0;
25 | zoom: 1;
26 | display: block;
27 | }
28 |
29 | .login .login-header {
30 | text-align: center;
31 | font-size: 16px;
32 | font-weight: bold;
33 | margin-bottom: 20px;
34 | }
35 |
36 | .login .el-checkbox__label {
37 | font-size: 14px;
38 | font-weight: normal;
39 | padding-left: 4px;
40 | }
41 |
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-boilerplate/app/web/page/asset/simple.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
{{ site.name }}
5 |
10 |
11 |
12 |
13 |
15 |
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-boilerplate/app/web/page/asset/spa.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 | import App from 'framework/app.js';
3 | import index from 'component/spa/index.vue';
4 | import createStore from 'component/spa/store';
5 | import createRouter from 'component/spa/router';
6 |
7 | const options = { base: '/asset' };
8 |
9 | export default new App({
10 | index,
11 | options,
12 | createStore,
13 | createRouter,
14 | }).bootstrap();
15 |
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-boilerplate/app/web/page/asset/spa.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
18 |
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-boilerplate/app/web/page/blog/about/about.css:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/easy-team/egg-vue-webpack-boilerplate/e917151416963459c5aff5138e76f1f534b8cde9/packages/egg-vue-webpack-boilerplate/app/web/page/blog/about/about.css
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-boilerplate/app/web/page/blog/about/about.vue:
--------------------------------------------------------------------------------
1 |
2 |
5 |
6 |
easyjs
7 |
14 |
15 |
16 |
17 |
20 |
42 |
43 |
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-boilerplate/app/web/page/blog/category/category.css:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/easy-team/egg-vue-webpack-boilerplate/e917151416963459c5aff5138e76f1f534b8cde9/packages/egg-vue-webpack-boilerplate/app/web/page/blog/category/category.css
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-boilerplate/app/web/page/blog/category/category.vue:
--------------------------------------------------------------------------------
1 |
2 |
5 |
6 |
{{ message }}
7 | element-ui
8 |
9 |
10 |
11 |
14 |
25 |
26 |
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-boilerplate/app/web/page/blog/home/index.css:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/easy-team/egg-vue-webpack-boilerplate/e917151416963459c5aff5138e76f1f534b8cde9/packages/egg-vue-webpack-boilerplate/app/web/page/blog/home/index.css
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-boilerplate/app/web/page/html/simple.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
{{ site.name }}
5 |
10 |
11 |
12 |
13 |
15 |
37 |
38 |
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-boilerplate/app/web/page/html/spa.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 | import App from 'framework/app.js';
3 | import index from 'component/spa/index.vue';
4 | import createStore from 'component/spa/store';
5 | import createRouter from 'component/spa/router';
6 |
7 | const options = { base: '/html' };
8 |
9 | export default new App({
10 | index,
11 | options,
12 | createStore,
13 | createRouter,
14 | }).bootstrap();
15 |
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-boilerplate/app/web/page/spa/index.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 | import App from 'framework/app.js';
3 | import index from 'component/spa/index.vue';
4 | import createStore from 'component/spa/store';
5 | import createRouter from 'component/spa/router';
6 |
7 | const options = { base: '/spa' };
8 |
9 | export default new App({
10 | index,
11 | options,
12 | createStore,
13 | createRouter,
14 | }).bootstrap();
15 |
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-boilerplate/app/web/page/test/test.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
{{ site.name }}
5 |
10 |
11 |
12 |
13 |
15 |
37 |
38 |
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-boilerplate/app/web/view/asset.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | {{title}}
5 |
6 |
7 |
8 |
9 |
10 | {% for item in asset.css %}
11 |
12 | {% endfor %}
13 |
14 |
15 |
16 |
19 | {% for item in asset.js %}
20 |
21 | {% endfor %}
22 |
23 |
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-boilerplate/app/web/view/layout.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | Egg + Vue
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-boilerplate/app/web/view/layout.tpl:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | {{title}}
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
16 |
17 |
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-boilerplate/babel.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | env: {
3 | node: {
4 | presets: [
5 | [
6 | '@babel/preset-env',
7 | {
8 | modules: false,
9 | targets: {
10 | node: 'current',
11 | },
12 | },
13 | ],
14 | ],
15 | plugins: [
16 | '@babel/plugin-syntax-dynamic-import',
17 | ],
18 | },
19 | web: {
20 | presets: [
21 | [
22 | '@babel/preset-env',
23 | {
24 | modules: false,
25 | targets: {
26 | browsers: ['last 2 versions'],
27 | },
28 | },
29 | ],
30 | ],
31 | plugins: [
32 | '@babel/plugin-proposal-object-rest-spread',
33 | '@babel/plugin-syntax-dynamic-import',
34 | ],
35 | },
36 | },
37 | };
38 |
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-boilerplate/config/config.prod.js:
--------------------------------------------------------------------------------
1 | /**
2 | * 生产环境配置
3 | *
4 | * 最终生效的配置为 prod + default(前者覆盖后者)
5 | */
6 |
7 |
8 | module.exports = app => {
9 | const exports = {};
10 |
11 | return exports;
12 | };
13 |
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-boilerplate/config/config.test.js:
--------------------------------------------------------------------------------
1 |
2 |
3 | module.exports = app => {
4 | const exports = {};
5 |
6 | return exports;
7 | };
8 |
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-boilerplate/config/plugin.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 |
3 | exports.vuessr = {
4 | enable: true,
5 | package: 'egg-view-vue-ssr'
6 | };
7 |
8 | exports.nunjucks = {
9 | enable: true,
10 | package: 'egg-view-nunjucks',
11 | };
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-boilerplate/config/plugin.local.js:
--------------------------------------------------------------------------------
1 | exports.cors = {
2 | enable: true,
3 | package: 'egg-cors'
4 | };
5 |
6 | exports.webpack = {
7 | enable: true,
8 | package: 'egg-webpack'
9 | };
10 |
11 | exports.webpackvue = {
12 | enable: true,
13 | package: 'egg-webpack-vue'
14 | };
15 |
16 | exports.logview = {
17 | package: 'egg-logview',
18 | env: ['local']
19 | };
20 |
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-boilerplate/docs/images/admin.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/easy-team/egg-vue-webpack-boilerplate/e917151416963459c5aff5138e76f1f534b8cde9/packages/egg-vue-webpack-boilerplate/docs/images/admin.png
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-boilerplate/docs/images/egg-webpack.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/easy-team/egg-vue-webpack-boilerplate/e917151416963459c5aff5138e76f1f534b8cde9/packages/egg-vue-webpack-boilerplate/docs/images/egg-webpack.png
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-boilerplate/docs/images/iblog.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/easy-team/egg-vue-webpack-boilerplate/e917151416963459c5aff5138e76f1f534b8cde9/packages/egg-vue-webpack-boilerplate/docs/images/iblog.png
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-boilerplate/docs/images/vue-mutil-page.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/easy-team/egg-vue-webpack-boilerplate/e917151416963459c5aff5138e76f1f534b8cde9/packages/egg-vue-webpack-boilerplate/docs/images/vue-mutil-page.png
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-boilerplate/docs/images/vue-single-page.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/easy-team/egg-vue-webpack-boilerplate/e917151416963459c5aff5138e76f1f534b8cde9/packages/egg-vue-webpack-boilerplate/docs/images/vue-single-page.png
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-boilerplate/docs/images/webpack-build.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/easy-team/egg-vue-webpack-boilerplate/e917151416963459c5aff5138e76f1f534b8cde9/packages/egg-vue-webpack-boilerplate/docs/images/webpack-build.png
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-boilerplate/docs/images/webpack.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/easy-team/egg-vue-webpack-boilerplate/e917151416963459c5aff5138e76f1f534b8cde9/packages/egg-vue-webpack-boilerplate/docs/images/webpack.png
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-boilerplate/docs/issue_template.md:
--------------------------------------------------------------------------------
1 |
8 |
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-boilerplate/docs/perform.md:
--------------------------------------------------------------------------------
1 | http://www.jianshu.com/p/1dffe3126686
2 |
3 | http://alexkuz.github.io/webpack-chart/
4 | http://webpack.github.io/analyse/
5 |
6 |
7 | http://kiwenlau.com/2017/04/01/nodejs-async-await/
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-boilerplate/view/simple.tpl:
--------------------------------------------------------------------------------
1 | {{title}}
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-boilerplate/view/spa.tpl:
--------------------------------------------------------------------------------
1 | {{title}}
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-html-boilerplate/.eslintignore:
--------------------------------------------------------------------------------
1 | test/fixtures
2 | test/benchmark
3 | test/client
4 |
5 | coverage/
6 | private/
7 | run/
8 |
9 | public/
10 | node_modules/
11 | app/web/asset/
12 | app/view/
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-html-boilerplate/.gitignore:
--------------------------------------------------------------------------------
1 | .DS_Store
2 | .happypack/
3 | node_modules/
4 | npm-debug.log
5 | .idea/
6 | dist
7 | static
8 | public
9 | private
10 | run
11 | *.iml
12 | artifacts.json
13 | *tmp
14 | _site
15 | logs
16 | config/buildConfig.json
17 | config/manifest.json
18 | config/manifest-dll.json
19 | app/view/*
20 | !app/view/layout.html
21 | !app/view/README.md
22 | !app/view/.gitkeep
23 | package-lock.json
24 | .gitkeep
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-html-boilerplate/.vscode/launch.json:
--------------------------------------------------------------------------------
1 | {
2 | "version": "1.0.0",
3 | "configurations": [
4 | {
5 | "name": "Launch Egg Vue",
6 | "type": "node",
7 | "request": "launch",
8 | "cwd": "${workspaceRoot}",
9 | "runtimeExecutable": "npm",
10 | "windows": { "runtimeExecutable": "npm.cmd" },
11 | "runtimeArgs": [ "run", "debug" ],
12 | "console": "integratedTerminal",
13 | "protocol": "auto",
14 | "restart": true,
15 | "port": 9229,
16 | "autoAttachChildProcesses": true
17 | }
18 | ]
19 | }
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-html-boilerplate/.vscode/settings.json:
--------------------------------------------------------------------------------
1 | {
2 | "eslint.enable": true,
3 | "eslint.run": "onSave",
4 | "editor.codeActionsOnSave": {
5 | "source.fixAll.eslint": false
6 | },
7 | "eslint.validate": [
8 | "javascript",
9 | {
10 | "language": "vue",
11 | "autoFix": true
12 | }
13 | ],
14 | "files.exclude": {
15 | "**/node_modules/_**": true
16 | }
17 | }
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-html-boilerplate/app/controller/html/index.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 | // html 前端渲染 https://www.yuque.com/easy-team/egg-vue/html
3 | module.exports = (app) => {
4 | return class AppController extends app.Controller {
5 | async spa() {
6 | const { ctx } = this;
7 | await ctx.render('spa.tpl', { state: { ...ctx.locals} });
8 | }
9 |
10 | async simple() {
11 | const { ctx } = this;
12 | const state = {
13 | ...ctx.locals,
14 | site: {
15 | name: 'Egg Vue HTML Render',
16 | url: 'https://easyjs.cn'
17 | }
18 | };
19 | await ctx.render('simple.tpl', { state });
20 | }
21 |
22 | async list() {
23 | this.ctx.body = this.ctx.service.article.getArtilceList(this.ctx.query);
24 | }
25 |
26 | async detail() {
27 | const id = Number(this.ctx.params.id);
28 | this.ctx.body = this.ctx.service.article.getArticle(id);
29 | }
30 | };
31 | };
32 |
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-html-boilerplate/app/extend/application.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 | const Factory = require('../lib/db/factory');
3 | const DBSymbol = Symbol('Application#db');
4 | module.exports = {
5 | get db() {
6 | if (!this[DBSymbol]) {
7 | this[DBSymbol] = Factory();
8 | }
9 | return this[DBSymbol];
10 | },
11 | };
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-html-boilerplate/app/extend/context.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 | module.exports = {
3 | get db() {
4 | return this.app.db;
5 | }
6 | };
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-html-boilerplate/app/lib/db/base.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 | const shortid = require('shortid');
3 | module.exports = class DB {
4 | constructor(name = 'blog.json') {
5 | this.name = name;
6 | }
7 | getUniqueId() {
8 | return shortid.generate();
9 | }
10 | get(collectionName) {
11 | return null;
12 | }
13 | add(collectionName, json) {
14 | return null;
15 | }
16 | update(collectionName, where, json) {
17 | return null;
18 | }
19 | delete(collectionName, field) {
20 | return null;
21 | }
22 | getPager(collectionName, query) {
23 | return null;
24 | }
25 | };
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-html-boilerplate/app/lib/db/collection.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 | module.exports = class Collection {
3 | constructor(db, name) {
4 | this.db = db;
5 | this.name = name;
6 | }
7 | get() {
8 | return this.db.get(this.name);
9 | }
10 | getByWhere(json) {
11 | return this.db.get(this.name).find(json);
12 | }
13 | add(json) {
14 | return this.db.add(this.name, json);
15 | }
16 | update(where, json) {
17 | return this.db.update(this.name, where, json);
18 | }
19 | delete(field) {
20 | return this.db.delete(this.name, field);
21 | }
22 | getPager(query) {
23 | return this.db.getPager(this.name, query);
24 | }
25 | getOrderAscByField(field) {
26 | return this.get().orderBy(field, 'asc').value();
27 | }
28 | getOrderDescByField(field) {
29 | return this.get().orderBy(field, 'desc').value();
30 | }
31 | };
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-html-boilerplate/app/lib/db/factory.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 | const File = require('./file');
3 | const MySQL = require('./mysql');
4 | const MongoDB = require('./mongo');
5 | module.exports = type => {
6 | switch (type) {
7 | case 'mysql':
8 | return new MySQL();
9 | case 'mongo':
10 | return new MongoDB();
11 | default:
12 | return new File();
13 | }
14 | };
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-html-boilerplate/app/lib/db/mongo.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 | const Base = require('./base');
3 | module.exports = class MongoDB extends Base {};
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-html-boilerplate/app/lib/db/mysql.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 | const Base = require('./base');
3 | module.exports = class MySQLDB extends Base {};
4 |
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-html-boilerplate/app/middleware/locals.js:
--------------------------------------------------------------------------------
1 | module.exports = () => {
2 | return async function locale(ctx, next) {
3 | ctx.locals.locale = ctx.query.locale || 'cn';
4 | ctx.locals.origin = ctx.request.origin;
5 | await next();
6 | };
7 | };
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-html-boilerplate/app/model/article.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 |
3 | module.exports = class Model {
4 | constructor() {
5 | this.id = void 0;
6 | this.title = undefined;
7 | this.summary = undefined;
8 | this.tag = undefined;
9 | this.hits = 0;
10 | this.createTime = Date.now();
11 | }
12 | };
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-html-boilerplate/app/model/artilcedetail.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 | module.exports = class ArticleDetail {};
3 |
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-html-boilerplate/app/model/user.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 | module.exports = class User {
3 | constructor() {
4 | this.id = null;
5 | this.name = null;
6 | this.password = null;
7 | this.roleId = null;
8 | }
9 | };
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-html-boilerplate/app/model/utils/base.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 | const Pagination = require('./pagination');
3 | module.exports = class Model {
4 | constructor() {
5 | this.pagination = new Pagination();
6 | }
7 | };
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-html-boilerplate/app/router.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 | module.exports = app => {
3 | const { router, controller } = app;
4 | router.redirect('/', '/html');
5 | router.get('/spa/api/article/list', app.controller.html.index.list);
6 | router.get('/spa/api/article/:id', app.controller.html.index.detail);
7 | // HTML Render
8 | router.get('/html/simple', controller.html.index.simple);
9 | router.get('/html(/.*)?', controller.html.index.spa);
10 | };
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-html-boilerplate/app/view/README.md:
--------------------------------------------------------------------------------
1 | ## egg规范view目录, 保证view文件夹存在, 否则app.config.view.root为空, 编译服务器文件会存放到该目录.
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-html-boilerplate/app/web/asset/css/global.css:
--------------------------------------------------------------------------------
1 | * {
2 | padding: 0;
3 | margin: 0;
4 | outline: none;
5 | box-sizing: border-box;
6 | }
7 | html, body{
8 | height: 100%;
9 | }
10 |
11 | a {
12 | color: #3c8dbc;
13 | text-decoration: none;
14 | }
15 |
16 | -webkit-scrollbar {
17 | width: 4px;
18 | background-color: #F5F5F5;
19 | }
20 |
21 | -webkit-scrollbar-track {
22 | box-shadow: inset 0 0 6px rgba(0, 0, 0, 0.3);
23 | background-color: #F5F5F5;
24 | }
25 |
26 | -webkit-scrollbar-thumb {
27 | box-shadow: inset 0 0 6px rgba(0, 0, 0, .3);
28 | background-color: #3e8dbb;
29 | }
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-html-boilerplate/app/web/asset/fonts/FontAwesome.otf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/easy-team/egg-vue-webpack-boilerplate/e917151416963459c5aff5138e76f1f534b8cde9/packages/egg-vue-webpack-html-boilerplate/app/web/asset/fonts/FontAwesome.otf
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-html-boilerplate/app/web/asset/fonts/fontawesome-webfont.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/easy-team/egg-vue-webpack-boilerplate/e917151416963459c5aff5138e76f1f534b8cde9/packages/egg-vue-webpack-html-boilerplate/app/web/asset/fonts/fontawesome-webfont.eot
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-html-boilerplate/app/web/asset/fonts/fontawesome-webfont.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/easy-team/egg-vue-webpack-boilerplate/e917151416963459c5aff5138e76f1f534b8cde9/packages/egg-vue-webpack-html-boilerplate/app/web/asset/fonts/fontawesome-webfont.ttf
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-html-boilerplate/app/web/asset/fonts/fontawesome-webfont.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/easy-team/egg-vue-webpack-boilerplate/e917151416963459c5aff5138e76f1f534b8cde9/packages/egg-vue-webpack-html-boilerplate/app/web/asset/fonts/fontawesome-webfont.woff
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-html-boilerplate/app/web/asset/fonts/fontawesome-webfont.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/easy-team/egg-vue-webpack-boilerplate/e917151416963459c5aff5138e76f1f534b8cde9/packages/egg-vue-webpack-html-boilerplate/app/web/asset/fonts/fontawesome-webfont.woff2
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-html-boilerplate/app/web/asset/fonts/glyphicons-halflings-regular.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/easy-team/egg-vue-webpack-boilerplate/e917151416963459c5aff5138e76f1f534b8cde9/packages/egg-vue-webpack-html-boilerplate/app/web/asset/fonts/glyphicons-halflings-regular.eot
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-html-boilerplate/app/web/asset/fonts/glyphicons-halflings-regular.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/easy-team/egg-vue-webpack-boilerplate/e917151416963459c5aff5138e76f1f534b8cde9/packages/egg-vue-webpack-html-boilerplate/app/web/asset/fonts/glyphicons-halflings-regular.ttf
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-html-boilerplate/app/web/asset/fonts/glyphicons-halflings-regular.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/easy-team/egg-vue-webpack-boilerplate/e917151416963459c5aff5138e76f1f534b8cde9/packages/egg-vue-webpack-html-boilerplate/app/web/asset/fonts/glyphicons-halflings-regular.woff
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-html-boilerplate/app/web/asset/fonts/glyphicons-halflings-regular.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/easy-team/egg-vue-webpack-boilerplate/e917151416963459c5aff5138e76f1f534b8cde9/packages/egg-vue-webpack-html-boilerplate/app/web/asset/fonts/glyphicons-halflings-regular.woff2
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-html-boilerplate/app/web/asset/images/egg-vue-webpack-dev.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/easy-team/egg-vue-webpack-boilerplate/e917151416963459c5aff5138e76f1f534b8cde9/packages/egg-vue-webpack-html-boilerplate/app/web/asset/images/egg-vue-webpack-dev.png
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-html-boilerplate/app/web/asset/images/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/easy-team/egg-vue-webpack-boilerplate/e917151416963459c5aff5138e76f1f534b8cde9/packages/egg-vue-webpack-html-boilerplate/app/web/asset/images/favicon.ico
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-html-boilerplate/app/web/asset/images/loading.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/easy-team/egg-vue-webpack-boilerplate/e917151416963459c5aff5138e76f1f534b8cde9/packages/egg-vue-webpack-html-boilerplate/app/web/asset/images/loading.gif
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-html-boilerplate/app/web/asset/images/logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/easy-team/egg-vue-webpack-boilerplate/e917151416963459c5aff5138e76f1f534b8cde9/packages/egg-vue-webpack-html-boilerplate/app/web/asset/images/logo.png
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-html-boilerplate/app/web/asset/medias/red.mp4:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/easy-team/egg-vue-webpack-boilerplate/e917151416963459c5aff5138e76f1f534b8cde9/packages/egg-vue-webpack-html-boilerplate/app/web/asset/medias/red.mp4
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-html-boilerplate/app/web/component/layout/admin/content/content.vue:
--------------------------------------------------------------------------------
1 |
2 |
7 |
8 |
11 |
25 |
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-html-boilerplate/app/web/component/layout/admin/footer/footer.vue:
--------------------------------------------------------------------------------
1 |
2 |
12 |
13 |
16 |
21 |
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-html-boilerplate/app/web/component/layout/admin/index.css:
--------------------------------------------------------------------------------
1 | .admin .search {
2 | margin-top: 8px;
3 | margin-bottom: 16px;
4 | }
5 | .admin label {
6 | padding-left: 8px;
7 | padding-right: 8px;
8 | color: #878d99
9 | }
10 |
11 | .admin .search-input{
12 | max-width: 200px;
13 | }
14 | .admin .search-button{
15 | margin-left: 16px;
16 | }
17 | .admin .add-button{
18 | float:right;
19 | margin-right: 16px;
20 | }
21 |
22 | .admin .long-input {
23 | max-width: 75%;
24 | }
25 |
26 | .admin .top16 {
27 | margin-top: 16px;
28 | }
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-html-boilerplate/app/web/component/layout/admin/index.js:
--------------------------------------------------------------------------------
1 | import Vue from 'vue';
2 | import MainLayout from './main.vue';
3 | import '../../../asset/css/global.css';
4 | import './index.css';
5 | import createLayout from '../layout';
6 | const tpl = '';
7 | export default createLayout('Layout', { MainLayout }, tpl);
8 |
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-html-boilerplate/app/web/component/layout/admin/main.vue:
--------------------------------------------------------------------------------
1 |
2 |
8 |
9 |
32 |
42 |
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-html-boilerplate/app/web/component/layout/admin/menu/index.js:
--------------------------------------------------------------------------------
1 | const menu = {
2 | home: {
3 | name: 'menu.home',
4 | path: '/',
5 | icon: 'el-icon-menu',
6 | },
7 | content: {
8 | name: 'menu.articlemanage',
9 | icon: 'el-icon-document',
10 | children: {
11 | list: {
12 | name: 'menu.articlequery',
13 | icon: 'el-icon-edit-outline',
14 | path: '/article/list'
15 | },
16 | add: {
17 | name: 'menu.articleadd',
18 | icon: 'el-icon-edit-outline',
19 | path: '/article/add'
20 | }
21 | }
22 | }
23 | };
24 |
25 | export default menu;
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-html-boilerplate/app/web/component/layout/default.js:
--------------------------------------------------------------------------------
1 | import Vue from 'vue';
2 | import MainLayout from './main.vue';
3 | import '../../asset/css/global.css';
4 | import createLayout from './layout';
5 | const tpl = '
';
6 | export default createLayout('Layout', { }, tpl);
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-html-boilerplate/app/web/component/layout/index/content/content.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
9 |
23 |
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-html-boilerplate/app/web/component/layout/index/footer/footer.css:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/easy-team/egg-vue-webpack-boilerplate/e917151416963459c5aff5138e76f1f534b8cde9/packages/egg-vue-webpack-html-boilerplate/app/web/component/layout/index/footer/footer.css
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-html-boilerplate/app/web/component/layout/index/footer/footer.vue:
--------------------------------------------------------------------------------
1 |
2 |
23 |
24 |
27 |
32 |
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-html-boilerplate/app/web/component/layout/index/index.js:
--------------------------------------------------------------------------------
1 | import Vue from 'vue';
2 | import MainLayout from './main.vue';
3 | import '../../../asset/css/bootstrap.css';
4 | import '../../../asset/css/blog.css';
5 | import createLayout from '../layout';
6 | export default createLayout('Layout', { MainLayout }, '');
7 |
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-html-boilerplate/app/web/component/layout/index/main.vue:
--------------------------------------------------------------------------------
1 |
2 |
8 |
9 |
11 |
21 |
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-html-boilerplate/app/web/component/layout/inline.js:
--------------------------------------------------------------------------------
1 | function inlineTest() {
2 | var name = 'Egg Vue SSR';
3 | var desc = 'Egg Vue Server Side Render';
4 | return name + '-' + desc;
5 | }
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-html-boilerplate/app/web/component/layout/spa/content/content.vue:
--------------------------------------------------------------------------------
1 |
2 |
7 |
8 |
11 |
23 |
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-html-boilerplate/app/web/component/layout/spa/footer/footer.vue:
--------------------------------------------------------------------------------
1 |
2 |
12 |
13 |
16 |
19 |
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-html-boilerplate/app/web/component/layout/spa/main.vue:
--------------------------------------------------------------------------------
1 |
2 |
8 |
9 |
11 |
23 |
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-html-boilerplate/app/web/component/spa/index.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
6 |
7 |
8 |
9 |
10 |
20 |
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-html-boilerplate/app/web/component/spa/router/detail.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
{{ article.title }}
4 |
10 |
11 |
12 |
14 |
28 |
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-html-boilerplate/app/web/component/spa/router/index.js:
--------------------------------------------------------------------------------
1 | import Vue from 'vue';
2 |
3 | import VueRouter from 'vue-router';
4 |
5 | import ListView from './list';
6 |
7 | Vue.use(VueRouter);
8 |
9 | export default function createRouter(initState, options) {
10 | const { base } = options;
11 | return new VueRouter({
12 | mode: 'history',
13 | base,
14 | routes: [
15 | {
16 | path: '/',
17 | component: ListView
18 | },
19 | {
20 | path: '/list',
21 | component: ListView
22 | },
23 | {
24 | path: '/detail/:id',
25 | component: () => import('./detail')
26 | }
27 | ]
28 | });
29 | }
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-html-boilerplate/app/web/component/spa/store/actions.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 |
3 | import * as Type from './mutation-type';
4 | import Vue from 'vue';
5 | import Vuex from 'vuex';
6 | import axios from 'axios';
7 |
8 | Vue.use(Vuex);
9 |
10 | const actions = {
11 |
12 | FETCH_ARTICLE_LIST: ({ commit, dispatch, state }) => {
13 | if (!state.articleList.length) {
14 | return axios.get(`${state.origin}/spa/api/article/list`)
15 | .then(response => {
16 | commit(Type.SET_ARTICLE_LIST, response.data.list);
17 | });
18 | }
19 | },
20 |
21 | FETCH_ARTICLE_DETAIL: ({ commit, dispatch, state }, { id }) => {
22 | if (state.article.id !== Number(id)) {
23 | return axios.get(`${state.origin}/spa/api/article/${id}`)
24 | .then(response => {
25 | commit(Type.SET_ARTICLE_DETAIL, response.data);
26 | });
27 | }
28 | }
29 | };
30 |
31 | export default actions;
32 |
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-html-boilerplate/app/web/component/spa/store/getters.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 |
3 |
4 | const getters = {
5 |
6 | };
7 |
8 | export default getters;
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-html-boilerplate/app/web/component/spa/store/index.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 | import Vue from 'vue';
3 | import Vuex from 'vuex';
4 |
5 | import actions from './actions';
6 | import getters from './getters';
7 | import mutations from './mutations';
8 |
9 | Vue.use(Vuex);
10 |
11 | export default function createStore(initState = {}) {
12 |
13 | const state = {
14 | articleList: [],
15 | article: {},
16 | ...initState
17 | };
18 |
19 | return new Vuex.Store({
20 | state,
21 | actions,
22 | getters,
23 | mutations
24 | });
25 | }
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-html-boilerplate/app/web/component/spa/store/mutation-type.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 |
3 | export const SET_ARTICLE_LIST = 'SET_ARTICLE_LIST';
4 | export const SET_ARTICLE_DETAIL = 'SET_ARTICLE_DETAIL';
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-html-boilerplate/app/web/component/spa/store/mutations.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 |
3 | import {
4 | SET_ARTICLE_LIST,
5 | SET_ARTICLE_DETAIL
6 | } from './mutation-type';
7 |
8 | const mutations = {
9 | [SET_ARTICLE_LIST](state, items) {
10 | state.articleList = items;
11 | },
12 | [SET_ARTICLE_DETAIL](state, data) {
13 | state.article = data;
14 | }
15 | };
16 | export default mutations;
17 |
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-html-boilerplate/app/web/framework/request.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 | import axios from 'axios';
3 | // axios.defaults.baseURL = 'http://127.0.0.1:7001';
4 | axios.defaults.timeout = 15000;
5 | axios.defaults.xsrfHeaderName = 'x-csrf-token';
6 | axios.defaults.xsrfCookieName = 'csrfToken';
7 | export default {
8 | post(url, json, store = {}) {
9 | const { state = { origin: '' } } = store;
10 | const headers = {};
11 | if (EASY_ENV_IS_NODE) {
12 | headers['x-csrf-token'] = state.csrf;
13 | headers.Cookie = `csrfToken=${state.csrf}`;
14 | }
15 | return axios.post(`${state.origin}${url}`, json, { headers });
16 | },
17 | get(url, store = {}) {
18 | const { state = { origin: '' } } = store;
19 | return axios.get(`${state.origin}${url}`);
20 | }
21 | };
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-html-boilerplate/app/web/page/html/simple.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
{{ site.name }}
5 |
10 |
11 |
12 |
13 |
15 |
37 |
38 |
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-html-boilerplate/app/web/page/html/spa.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 | import App from 'framework/app.js';
3 | import index from 'component/spa/index.vue';
4 | import createStore from 'component/spa/store';
5 | import createRouter from 'component/spa/router';
6 |
7 | const options = { base: '/html' };
8 |
9 | export default new App({
10 | index,
11 | options,
12 | createStore,
13 | createRouter,
14 | }).bootstrap();
15 |
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-html-boilerplate/app/web/view/layout.tpl:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | {{title}}
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
16 |
17 |
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-html-boilerplate/babel.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | presets: [
3 | [
4 | '@babel/preset-env',
5 | {
6 | modules: false,
7 | targets: {
8 | browsers: ['last 2 versions'],
9 | },
10 | },
11 | ],
12 | ],
13 | plugins: [
14 | '@babel/plugin-proposal-object-rest-spread',
15 | '@babel/plugin-syntax-dynamic-import',
16 | ],
17 | };
18 |
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-html-boilerplate/config/config.prod.js:
--------------------------------------------------------------------------------
1 | /**
2 | * 生产环境配置
3 | *
4 | * 最终生效的配置为 prod + default(前者覆盖后者)
5 | */
6 |
7 |
8 | module.exports = app => {
9 | const exports = {};
10 |
11 | return exports;
12 | };
13 |
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-html-boilerplate/config/config.test.js:
--------------------------------------------------------------------------------
1 |
2 |
3 | module.exports = app => {
4 | const exports = {};
5 |
6 | return exports;
7 | };
8 |
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-html-boilerplate/config/plugin.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 |
3 | exports.vuessr = {
4 | enable: true,
5 | package: 'egg-view-vue-ssr'
6 | };
7 |
8 | exports.nunjucks = {
9 | enable: true,
10 | package: 'egg-view-nunjucks',
11 | };
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-html-boilerplate/config/plugin.local.js:
--------------------------------------------------------------------------------
1 | exports.cors = {
2 | enable: true,
3 | package: 'egg-cors'
4 | };
5 |
6 | exports.webpack = {
7 | enable: true,
8 | package: 'egg-webpack'
9 | };
10 |
11 | exports.webpackvue = {
12 | enable: true,
13 | package: 'egg-webpack-vue'
14 | };
15 |
16 | exports.logview = {
17 | package: 'egg-logview',
18 | env: ['local']
19 | };
20 |
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-html-boilerplate/view/simple.tpl:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | {{title}}
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
16 |
17 |
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-html-boilerplate/view/spa.tpl:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | {{title}}
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
16 |
17 |
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-mpa-boilerplate/.eslintignore:
--------------------------------------------------------------------------------
1 | test/fixtures
2 | test/benchmark
3 | test/client
4 |
5 | coverage/
6 | private/
7 | run/
8 |
9 | public/
10 | node_modules/
11 | app/web/asset/
12 | app/view/
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-mpa-boilerplate/.gitignore:
--------------------------------------------------------------------------------
1 | .DS_Store
2 | .happypack/
3 | node_modules/
4 | npm-debug.log
5 | .idea/
6 | dist
7 | static
8 | public
9 | private
10 | run
11 | *.iml
12 | artifacts.json
13 | *tmp
14 | _site
15 | logs
16 | config/buildConfig.json
17 | config/manifest.json
18 | config/manifest-dll.json
19 | app/view/*
20 | !app/view/layout.html
21 | !app/view/README.md
22 | !app/view/.gitkeep
23 | package-lock.json
24 | .gitkeep
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-mpa-boilerplate/.vscode/launch.json:
--------------------------------------------------------------------------------
1 | {
2 | "version": "1.0.0",
3 | "configurations": [
4 | {
5 | "name": "Launch Egg Vue",
6 | "type": "node",
7 | "request": "launch",
8 | "cwd": "${workspaceRoot}",
9 | "runtimeExecutable": "npm",
10 | "windows": { "runtimeExecutable": "npm.cmd" },
11 | "runtimeArgs": [ "run", "debug" ],
12 | "console": "integratedTerminal",
13 | "protocol": "auto",
14 | "restart": true,
15 | "port": 9229,
16 | "autoAttachChildProcesses": true
17 | }
18 | ]
19 | }
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-mpa-boilerplate/.vscode/settings.json:
--------------------------------------------------------------------------------
1 | {
2 | "eslint.enable": true,
3 | "eslint.run": "onSave",
4 | "editor.codeActionsOnSave": {
5 | "source.fixAll.eslint": false
6 | },
7 | "eslint.validate": [
8 | "javascript",
9 | {
10 | "language": "vue",
11 | "autoFix": true
12 | }
13 | ],
14 | "files.exclude": {
15 | "**/node_modules/_**": true
16 | }
17 | }
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-mpa-boilerplate/app/controller/blog/category.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 | module.exports = app => {
3 | return class CategoryController extends app.Controller {
4 | async index(ctx) {
5 | await ctx.render('blog/category.js', { message: 'Egg Vue Server Side Render: Category' });
6 | }
7 | };
8 | };
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-mpa-boilerplate/app/controller/blog/home.js:
--------------------------------------------------------------------------------
1 | 'usestrict';
2 | const egg = require('egg');
3 | module.exports = class HomeController extends egg.Controller {
4 |
5 | async ssr() {
6 | const result = this.service.article.getArtilceList();
7 | await this.ctx.render('blog/home.js', result);
8 | }
9 |
10 | async csr() {
11 | const result = this.service.article.getArtilceList();
12 | await this.ctx.renderClient('blog/home.js', result);
13 | }
14 |
15 | async about() {
16 | await this.ctx.render('blog/about.js', {});
17 | }
18 |
19 | async list() {
20 | this.ctx.body = this.service.article.getArtilceList(this.ctx.query);
21 | }
22 |
23 | async detail() {
24 | const id = this.ctx.query.id;
25 | }
26 | };
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-mpa-boilerplate/app/extend/application.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 | const Factory = require('../lib/db/factory');
3 | const DBSymbol = Symbol('Application#db');
4 | module.exports = {
5 | get db() {
6 | if (!this[DBSymbol]) {
7 | this[DBSymbol] = Factory();
8 | }
9 | return this[DBSymbol];
10 | },
11 | };
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-mpa-boilerplate/app/extend/context.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 | module.exports = {
3 | get db() {
4 | return this.app.db;
5 | }
6 | };
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-mpa-boilerplate/app/lib/db/base.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 | const shortid = require('shortid');
3 | module.exports = class DB {
4 | constructor(name = 'blog.json') {
5 | this.name = name;
6 | }
7 | getUniqueId() {
8 | return shortid.generate();
9 | }
10 | get(collectionName) {
11 | return null;
12 | }
13 | add(collectionName, json) {
14 | return null;
15 | }
16 | update(collectionName, where, json) {
17 | return null;
18 | }
19 | delete(collectionName, field) {
20 | return null;
21 | }
22 | getPager(collectionName, query) {
23 | return null;
24 | }
25 | };
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-mpa-boilerplate/app/lib/db/collection.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 | module.exports = class Collection {
3 | constructor(db, name) {
4 | this.db = db;
5 | this.name = name;
6 | }
7 | get() {
8 | return this.db.get(this.name);
9 | }
10 | getByWhere(json) {
11 | return this.db.get(this.name).find(json);
12 | }
13 | add(json) {
14 | return this.db.add(this.name, json);
15 | }
16 | update(where, json) {
17 | return this.db.update(this.name, where, json);
18 | }
19 | delete(field) {
20 | return this.db.delete(this.name, field);
21 | }
22 | getPager(query) {
23 | return this.db.getPager(this.name, query);
24 | }
25 | getOrderAscByField(field) {
26 | return this.get().orderBy(field, 'asc').value();
27 | }
28 | getOrderDescByField(field) {
29 | return this.get().orderBy(field, 'desc').value();
30 | }
31 | };
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-mpa-boilerplate/app/lib/db/factory.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 | const File = require('./file');
3 | const MySQL = require('./mysql');
4 | const MongoDB = require('./mongo');
5 | module.exports = type => {
6 | switch (type) {
7 | case 'mysql':
8 | return new MySQL();
9 | case 'mongo':
10 | return new MongoDB();
11 | default:
12 | return new File();
13 | }
14 | };
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-mpa-boilerplate/app/lib/db/mongo.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 | const Base = require('./base');
3 | module.exports = class MongoDB extends Base {};
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-mpa-boilerplate/app/lib/db/mysql.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 | const Base = require('./base');
3 | module.exports = class MySQLDB extends Base {};
4 |
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-mpa-boilerplate/app/middleware/locals.js:
--------------------------------------------------------------------------------
1 | module.exports = () => {
2 | return async function locale(ctx, next) {
3 | ctx.locals.locale = ctx.query.locale || 'cn';
4 | ctx.locals.origin = ctx.request.origin;
5 | await next();
6 | };
7 | };
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-mpa-boilerplate/app/model/article.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 |
3 | module.exports = class Model {
4 | constructor() {
5 | this.id = void 0;
6 | this.title = undefined;
7 | this.summary = undefined;
8 | this.tag = undefined;
9 | this.hits = 0;
10 | this.createTime = Date.now();
11 | }
12 | };
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-mpa-boilerplate/app/model/artilcedetail.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 | module.exports = class ArticleDetail {};
3 |
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-mpa-boilerplate/app/model/user.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 | module.exports = class User {
3 | constructor() {
4 | this.id = null;
5 | this.name = null;
6 | this.password = null;
7 | this.roleId = null;
8 | }
9 | };
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-mpa-boilerplate/app/model/utils/base.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 | const Pagination = require('./pagination');
3 | module.exports = class Model {
4 | constructor() {
5 | this.pagination = new Pagination();
6 | }
7 | };
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-mpa-boilerplate/app/router.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 | module.exports = app => {
3 | const { router, controller } = app;
4 | router.get('/', controller.blog.home.ssr);
5 | router.get('/blog/csr', controller.blog.home.csr);
6 | router.get('/blog/list', controller.blog.home.list);
7 | router.get('/blog/about', controller.blog.home.about);
8 | router.get('/blog/category', controller.blog.category.index);
9 | };
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-mpa-boilerplate/app/view/README.md:
--------------------------------------------------------------------------------
1 | ## egg规范view目录, 保证view文件夹存在, 否则app.config.view.root为空, 编译服务器文件会存放到该目录.
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-mpa-boilerplate/app/web/asset/css/global.css:
--------------------------------------------------------------------------------
1 | * {
2 | padding: 0;
3 | margin: 0;
4 | outline: none;
5 | box-sizing: border-box;
6 | }
7 | html, body{
8 | height: 100%;
9 | }
10 |
11 | a {
12 | color: #3c8dbc;
13 | text-decoration: none;
14 | }
15 |
16 | -webkit-scrollbar {
17 | width: 4px;
18 | background-color: #F5F5F5;
19 | }
20 |
21 | -webkit-scrollbar-track {
22 | box-shadow: inset 0 0 6px rgba(0, 0, 0, 0.3);
23 | background-color: #F5F5F5;
24 | }
25 |
26 | -webkit-scrollbar-thumb {
27 | box-shadow: inset 0 0 6px rgba(0, 0, 0, .3);
28 | background-color: #3e8dbb;
29 | }
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-mpa-boilerplate/app/web/asset/fonts/FontAwesome.otf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/easy-team/egg-vue-webpack-boilerplate/e917151416963459c5aff5138e76f1f534b8cde9/packages/egg-vue-webpack-mpa-boilerplate/app/web/asset/fonts/FontAwesome.otf
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-mpa-boilerplate/app/web/asset/fonts/fontawesome-webfont.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/easy-team/egg-vue-webpack-boilerplate/e917151416963459c5aff5138e76f1f534b8cde9/packages/egg-vue-webpack-mpa-boilerplate/app/web/asset/fonts/fontawesome-webfont.eot
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-mpa-boilerplate/app/web/asset/fonts/fontawesome-webfont.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/easy-team/egg-vue-webpack-boilerplate/e917151416963459c5aff5138e76f1f534b8cde9/packages/egg-vue-webpack-mpa-boilerplate/app/web/asset/fonts/fontawesome-webfont.ttf
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-mpa-boilerplate/app/web/asset/fonts/fontawesome-webfont.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/easy-team/egg-vue-webpack-boilerplate/e917151416963459c5aff5138e76f1f534b8cde9/packages/egg-vue-webpack-mpa-boilerplate/app/web/asset/fonts/fontawesome-webfont.woff
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-mpa-boilerplate/app/web/asset/fonts/fontawesome-webfont.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/easy-team/egg-vue-webpack-boilerplate/e917151416963459c5aff5138e76f1f534b8cde9/packages/egg-vue-webpack-mpa-boilerplate/app/web/asset/fonts/fontawesome-webfont.woff2
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-mpa-boilerplate/app/web/asset/fonts/glyphicons-halflings-regular.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/easy-team/egg-vue-webpack-boilerplate/e917151416963459c5aff5138e76f1f534b8cde9/packages/egg-vue-webpack-mpa-boilerplate/app/web/asset/fonts/glyphicons-halflings-regular.eot
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-mpa-boilerplate/app/web/asset/fonts/glyphicons-halflings-regular.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/easy-team/egg-vue-webpack-boilerplate/e917151416963459c5aff5138e76f1f534b8cde9/packages/egg-vue-webpack-mpa-boilerplate/app/web/asset/fonts/glyphicons-halflings-regular.ttf
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-mpa-boilerplate/app/web/asset/fonts/glyphicons-halflings-regular.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/easy-team/egg-vue-webpack-boilerplate/e917151416963459c5aff5138e76f1f534b8cde9/packages/egg-vue-webpack-mpa-boilerplate/app/web/asset/fonts/glyphicons-halflings-regular.woff
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-mpa-boilerplate/app/web/asset/fonts/glyphicons-halflings-regular.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/easy-team/egg-vue-webpack-boilerplate/e917151416963459c5aff5138e76f1f534b8cde9/packages/egg-vue-webpack-mpa-boilerplate/app/web/asset/fonts/glyphicons-halflings-regular.woff2
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-mpa-boilerplate/app/web/asset/images/egg-vue-webpack-dev.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/easy-team/egg-vue-webpack-boilerplate/e917151416963459c5aff5138e76f1f534b8cde9/packages/egg-vue-webpack-mpa-boilerplate/app/web/asset/images/egg-vue-webpack-dev.png
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-mpa-boilerplate/app/web/asset/images/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/easy-team/egg-vue-webpack-boilerplate/e917151416963459c5aff5138e76f1f534b8cde9/packages/egg-vue-webpack-mpa-boilerplate/app/web/asset/images/favicon.ico
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-mpa-boilerplate/app/web/asset/images/loading.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/easy-team/egg-vue-webpack-boilerplate/e917151416963459c5aff5138e76f1f534b8cde9/packages/egg-vue-webpack-mpa-boilerplate/app/web/asset/images/loading.gif
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-mpa-boilerplate/app/web/asset/images/logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/easy-team/egg-vue-webpack-boilerplate/e917151416963459c5aff5138e76f1f534b8cde9/packages/egg-vue-webpack-mpa-boilerplate/app/web/asset/images/logo.png
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-mpa-boilerplate/app/web/asset/medias/red.mp4:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/easy-team/egg-vue-webpack-boilerplate/e917151416963459c5aff5138e76f1f534b8cde9/packages/egg-vue-webpack-mpa-boilerplate/app/web/asset/medias/red.mp4
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-mpa-boilerplate/app/web/component/layout/admin/content/content.vue:
--------------------------------------------------------------------------------
1 |
2 |
7 |
8 |
11 |
25 |
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-mpa-boilerplate/app/web/component/layout/admin/footer/footer.vue:
--------------------------------------------------------------------------------
1 |
2 |
12 |
13 |
16 |
21 |
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-mpa-boilerplate/app/web/component/layout/admin/index.css:
--------------------------------------------------------------------------------
1 | .admin .search {
2 | margin-top: 8px;
3 | margin-bottom: 16px;
4 | }
5 | .admin label {
6 | padding-left: 8px;
7 | padding-right: 8px;
8 | color: #878d99
9 | }
10 |
11 | .admin .search-input{
12 | max-width: 200px;
13 | }
14 | .admin .search-button{
15 | margin-left: 16px;
16 | }
17 | .admin .add-button{
18 | float:right;
19 | margin-right: 16px;
20 | }
21 |
22 | .admin .long-input {
23 | max-width: 75%;
24 | }
25 |
26 | .admin .top16 {
27 | margin-top: 16px;
28 | }
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-mpa-boilerplate/app/web/component/layout/admin/index.js:
--------------------------------------------------------------------------------
1 | import Vue from 'vue';
2 | import MainLayout from './main.vue';
3 | import '../../../asset/css/global.css';
4 | import './index.css';
5 | import createLayout from '../layout';
6 | const tpl = '';
7 | export default createLayout('Layout', { MainLayout }, tpl);
8 |
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-mpa-boilerplate/app/web/component/layout/admin/main.vue:
--------------------------------------------------------------------------------
1 |
2 |
8 |
9 |
32 |
42 |
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-mpa-boilerplate/app/web/component/layout/admin/menu/index.js:
--------------------------------------------------------------------------------
1 | const menu = {
2 | home: {
3 | name: 'menu.home',
4 | path: '/',
5 | icon: 'el-icon-menu',
6 | },
7 | content: {
8 | name: 'menu.articlemanage',
9 | icon: 'el-icon-document',
10 | children: {
11 | list: {
12 | name: 'menu.articlequery',
13 | icon: 'el-icon-edit-outline',
14 | path: '/article/list'
15 | },
16 | add: {
17 | name: 'menu.articleadd',
18 | icon: 'el-icon-edit-outline',
19 | path: '/article/add'
20 | }
21 | }
22 | }
23 | };
24 |
25 | export default menu;
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-mpa-boilerplate/app/web/component/layout/default.js:
--------------------------------------------------------------------------------
1 | import Vue from 'vue';
2 | import MainLayout from './main.vue';
3 | import '../../asset/css/global.css';
4 | import createLayout from './layout';
5 | const tpl = '
';
6 | export default createLayout('Layout', { }, tpl);
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-mpa-boilerplate/app/web/component/layout/index/content/content.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
9 |
23 |
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-mpa-boilerplate/app/web/component/layout/index/footer/footer.css:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/easy-team/egg-vue-webpack-boilerplate/e917151416963459c5aff5138e76f1f534b8cde9/packages/egg-vue-webpack-mpa-boilerplate/app/web/component/layout/index/footer/footer.css
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-mpa-boilerplate/app/web/component/layout/index/footer/footer.vue:
--------------------------------------------------------------------------------
1 |
2 |
23 |
24 |
27 |
32 |
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-mpa-boilerplate/app/web/component/layout/index/index.js:
--------------------------------------------------------------------------------
1 | import Vue from 'vue';
2 | import MainLayout from './main.vue';
3 | import '../../../asset/css/bootstrap.css';
4 | import '../../../asset/css/blog.css';
5 | import createLayout from '../layout';
6 | export default createLayout('Layout', { MainLayout }, '');
7 |
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-mpa-boilerplate/app/web/component/layout/index/main.vue:
--------------------------------------------------------------------------------
1 |
2 |
8 |
9 |
11 |
21 |
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-mpa-boilerplate/app/web/component/layout/inline.js:
--------------------------------------------------------------------------------
1 | function inlineTest() {
2 | var name = 'Egg Vue SSR';
3 | var desc = 'Egg Vue Server Side Render';
4 | return name + '-' + desc;
5 | }
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-mpa-boilerplate/app/web/component/layout/spa/content/content.vue:
--------------------------------------------------------------------------------
1 |
2 |
7 |
8 |
11 |
23 |
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-mpa-boilerplate/app/web/component/layout/spa/footer/footer.vue:
--------------------------------------------------------------------------------
1 |
2 |
12 |
13 |
16 |
19 |
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-mpa-boilerplate/app/web/component/layout/spa/main.vue:
--------------------------------------------------------------------------------
1 |
2 |
8 |
9 |
11 |
23 |
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-mpa-boilerplate/app/web/component/spa/index.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
6 |
7 |
8 |
9 |
10 |
20 |
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-mpa-boilerplate/app/web/component/spa/router/detail.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
{{ article.title }}
4 |
10 |
11 |
12 |
14 |
28 |
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-mpa-boilerplate/app/web/component/spa/router/index.js:
--------------------------------------------------------------------------------
1 | import Vue from 'vue';
2 |
3 | import VueRouter from 'vue-router';
4 |
5 | import ListView from './list';
6 |
7 | Vue.use(VueRouter);
8 |
9 | export default function createRouter(initState, options) {
10 | const { base } = options;
11 | return new VueRouter({
12 | mode: 'history',
13 | base,
14 | routes: [
15 | {
16 | path: '/',
17 | component: ListView
18 | },
19 | {
20 | path: '/list',
21 | component: ListView
22 | },
23 | {
24 | path: '/detail/:id',
25 | component: () => import('./detail')
26 | }
27 | ]
28 | });
29 | }
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-mpa-boilerplate/app/web/component/spa/store/actions.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 |
3 | import * as Type from './mutation-type';
4 | import Vue from 'vue';
5 | import Vuex from 'vuex';
6 | import axios from 'axios';
7 |
8 | Vue.use(Vuex);
9 |
10 | const actions = {
11 |
12 | FETCH_ARTICLE_LIST: ({ commit, dispatch, state }) => {
13 | if (!state.articleList.length) {
14 | return axios.get(`${state.origin}/spa/api/article/list`)
15 | .then(response => {
16 | commit(Type.SET_ARTICLE_LIST, response.data.list);
17 | });
18 | }
19 | },
20 |
21 | FETCH_ARTICLE_DETAIL: ({ commit, dispatch, state }, { id }) => {
22 | if (state.article.id !== Number(id)) {
23 | return axios.get(`${state.origin}/spa/api/article/${id}`)
24 | .then(response => {
25 | commit(Type.SET_ARTICLE_DETAIL, response.data);
26 | });
27 | }
28 | }
29 | };
30 |
31 | export default actions;
32 |
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-mpa-boilerplate/app/web/component/spa/store/getters.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 |
3 |
4 | const getters = {
5 |
6 | };
7 |
8 | export default getters;
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-mpa-boilerplate/app/web/component/spa/store/index.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 | import Vue from 'vue';
3 | import Vuex from 'vuex';
4 |
5 | import actions from './actions';
6 | import getters from './getters';
7 | import mutations from './mutations';
8 |
9 | Vue.use(Vuex);
10 |
11 | export default function createStore(initState = {}) {
12 |
13 | const state = {
14 | articleList: [],
15 | article: {},
16 | ...initState
17 | };
18 |
19 | return new Vuex.Store({
20 | state,
21 | actions,
22 | getters,
23 | mutations
24 | });
25 | }
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-mpa-boilerplate/app/web/component/spa/store/mutation-type.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 |
3 | export const SET_ARTICLE_LIST = 'SET_ARTICLE_LIST';
4 | export const SET_ARTICLE_DETAIL = 'SET_ARTICLE_DETAIL';
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-mpa-boilerplate/app/web/component/spa/store/mutations.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 |
3 | import {
4 | SET_ARTICLE_LIST,
5 | SET_ARTICLE_DETAIL
6 | } from './mutation-type';
7 |
8 | const mutations = {
9 | [SET_ARTICLE_LIST](state, items) {
10 | state.articleList = items;
11 | },
12 | [SET_ARTICLE_DETAIL](state, data) {
13 | state.article = data;
14 | }
15 | };
16 | export default mutations;
17 |
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-mpa-boilerplate/app/web/framework/entry/template.js:
--------------------------------------------------------------------------------
1 | import Layout from 'component/layout/index';
2 | import plugin from 'framework/plugin';
3 |
4 | // vue-entry-loader 自定义全局注册钩子,如果在该目录下面存在该 template.js 框架自动加载,用于注册全局的组件
5 | export default function(Vue) {
6 | Vue.use(plugin);
7 | Vue.component(Layout.name, Layout);
8 | }
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-mpa-boilerplate/app/web/framework/i18n/admin/cn.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 | export default {
3 | menu: {
4 | home: '首页',
5 | articlemanage: '文章管理',
6 | articlequery: '文章查询',
7 | articleadd: '添加文章'
8 | },
9 | lang: {
10 | href: '/admin?locale=en',
11 | text: '中文'
12 | }
13 | };
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-mpa-boilerplate/app/web/framework/i18n/admin/en.js:
--------------------------------------------------------------------------------
1 | export default {
2 | menu: {
3 | home: 'Home',
4 | articlemanage: 'Article Manage',
5 | articlequery: 'Article Query',
6 | articleadd: 'Article Add'
7 | },
8 | lang: {
9 | href: '/admin?locale=cn',
10 | text: 'English'
11 | }
12 | };
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-mpa-boilerplate/app/web/framework/i18n/admin/index.js:
--------------------------------------------------------------------------------
1 | import VueI18n from 'vue-i18n';
2 | import cn from './cn';
3 | import en from './en';
4 | export default function createI18n(locale) {
5 | return new VueI18n({
6 | locale,
7 | messages: {
8 | en,
9 | cn
10 | }
11 | });
12 | }
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-mpa-boilerplate/app/web/framework/i18n/site/cn.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 | export default {
3 | menu: {
4 | home: '首页',
5 | category: '分类',
6 | about: '关于',
7 | admin: '管理',
8 | test: 'easyjs'
9 | },
10 | lang: {
11 | href: '/?locale=en',
12 | text: '中文'
13 | }
14 | };
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-mpa-boilerplate/app/web/framework/i18n/site/en.js:
--------------------------------------------------------------------------------
1 | export default {
2 | menu: {
3 | home: 'Home',
4 | category: 'Catetory',
5 | about: 'About',
6 | admin: 'Admin',
7 | test: 'easyjs'
8 | },
9 | lang: {
10 | href: '/?locale=cn',
11 | text: 'English'
12 | }
13 | };
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-mpa-boilerplate/app/web/framework/i18n/site/index.js:
--------------------------------------------------------------------------------
1 | import VueI18n from 'vue-i18n';
2 | import cn from './cn';
3 | import en from './en';
4 | export default function createI18n(locale) {
5 | return new VueI18n({
6 | locale,
7 | messages: {
8 | en,
9 | cn
10 | }
11 | });
12 | }
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-mpa-boilerplate/app/web/framework/plugin/index.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 | import axios from 'axios';
3 | import request from 'framework/request';
4 | import VueI18n from 'vue-i18n';
5 | import createI18n from 'framework/i18n/site';
6 |
7 | export default {
8 | install(Vue) {
9 | if (!Vue.prototype.hasOwnProperty('$request')) {
10 | Vue.prototype.$request = request;
11 | }
12 | // 自定义 hook 钩子,vue-entry-loader 自动加载
13 | if (!Vue.hook) {
14 | Vue.use(VueI18n);
15 | Vue.hook = {
16 | render(context, options) {
17 | const i18n = createI18n(context.state.locale);
18 | options.i18n = i18n;
19 | }
20 | };
21 | }
22 | }
23 | };
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-mpa-boilerplate/app/web/framework/request.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 | import axios from 'axios';
3 | // axios.defaults.baseURL = 'http://127.0.0.1:7001';
4 | axios.defaults.timeout = 15000;
5 | axios.defaults.xsrfHeaderName = 'x-csrf-token';
6 | axios.defaults.xsrfCookieName = 'csrfToken';
7 | export default {
8 | post(url, json, store = {}) {
9 | const { state = { origin: '' } } = store;
10 | const headers = {};
11 | if (EASY_ENV_IS_NODE) {
12 | headers['x-csrf-token'] = state.csrf;
13 | headers.Cookie = `csrfToken=${state.csrf}`;
14 | }
15 | return axios.post(`${state.origin}${url}`, json, { headers });
16 | },
17 | get(url, store = {}) {
18 | const { state = { origin: '' } } = store;
19 | return axios.get(`${state.origin}${url}`);
20 | }
21 | };
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-mpa-boilerplate/app/web/page/blog/about/about.css:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/easy-team/egg-vue-webpack-boilerplate/e917151416963459c5aff5138e76f1f534b8cde9/packages/egg-vue-webpack-mpa-boilerplate/app/web/page/blog/about/about.css
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-mpa-boilerplate/app/web/page/blog/about/about.vue:
--------------------------------------------------------------------------------
1 |
2 |
5 |
6 |
easyjs
7 |
14 |
15 |
16 |
17 |
20 |
42 |
43 |
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-mpa-boilerplate/app/web/page/blog/category/category.css:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/easy-team/egg-vue-webpack-boilerplate/e917151416963459c5aff5138e76f1f534b8cde9/packages/egg-vue-webpack-mpa-boilerplate/app/web/page/blog/category/category.css
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-mpa-boilerplate/app/web/page/blog/category/category.vue:
--------------------------------------------------------------------------------
1 |
2 |
5 |
6 |
{{ message }}
7 | element-ui
8 |
9 |
10 |
11 |
14 |
40 |
41 |
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-mpa-boilerplate/app/web/page/blog/home/index.css:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/easy-team/egg-vue-webpack-boilerplate/e917151416963459c5aff5138e76f1f534b8cde9/packages/egg-vue-webpack-mpa-boilerplate/app/web/page/blog/home/index.css
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-mpa-boilerplate/app/web/view/layout.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | Egg + Vue
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-mpa-boilerplate/babel.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | env: {
3 | node: {
4 | presets: [
5 | [
6 | '@babel/preset-env',
7 | {
8 | modules: false,
9 | targets: {
10 | node: 'current',
11 | },
12 | },
13 | ],
14 | ],
15 | plugins: [
16 | '@babel/plugin-syntax-dynamic-import',
17 | ],
18 | },
19 | web: {
20 | presets: [
21 | [
22 | '@babel/preset-env',
23 | {
24 | modules: false,
25 | targets: {
26 | browsers: ['last 2 versions', 'safari >= 7'],
27 | },
28 | },
29 | ],
30 | ],
31 | plugins: [
32 | '@babel/plugin-proposal-object-rest-spread',
33 | '@babel/plugin-syntax-dynamic-import',
34 | '@babel/plugin-transform-object-assign',
35 | ],
36 | },
37 | },
38 | };
39 |
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-mpa-boilerplate/config/config.prod.js:
--------------------------------------------------------------------------------
1 | /**
2 | * 生产环境配置
3 | *
4 | * 最终生效的配置为 prod + default(前者覆盖后者)
5 | */
6 |
7 |
8 | module.exports = app => {
9 | const exports = {};
10 |
11 | return exports;
12 | };
13 |
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-mpa-boilerplate/config/config.test.js:
--------------------------------------------------------------------------------
1 |
2 |
3 | module.exports = app => {
4 | const exports = {};
5 |
6 | return exports;
7 | };
8 |
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-mpa-boilerplate/config/plugin.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 |
3 | exports.vuessr = {
4 | enable: true,
5 | package: 'egg-view-vue-ssr'
6 | };
7 |
8 | exports.nunjucks = {
9 | enable: true,
10 | package: 'egg-view-nunjucks',
11 | };
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-mpa-boilerplate/config/plugin.local.js:
--------------------------------------------------------------------------------
1 | exports.cors = {
2 | enable: true,
3 | package: 'egg-cors'
4 | };
5 |
6 | exports.webpack = {
7 | enable: true,
8 | package: 'egg-webpack'
9 | };
10 |
11 | exports.webpackvue = {
12 | enable: true,
13 | package: 'egg-webpack-vue'
14 | };
15 |
16 | exports.logview = {
17 | package: 'egg-logview',
18 | env: ['local']
19 | };
20 |
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-mpa-boilerplate/webpack.config.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 | // Webpack:https://www.yuque.com/easy-team/easywebpack
3 | // Egg Vue: https://www.yuque.com/easy-team/egg-vue
4 |
5 | module.exports = {
6 | entry: {
7 | 'blog/home': 'app/web/page/blog/home/index.vue',
8 | 'blog/category': 'app/web/page/blog/category/category.vue',
9 | 'blog/about': 'app/web/page/blog/about/about.vue'
10 | }
11 | };
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-spa-boilerplate/.eslintignore:
--------------------------------------------------------------------------------
1 | test/fixtures
2 | test/benchmark
3 | test/client
4 |
5 | coverage/
6 | private/
7 | run/
8 |
9 | public/
10 | node_modules/
11 | app/web/asset/
12 | app/view/
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-spa-boilerplate/.gitignore:
--------------------------------------------------------------------------------
1 | .DS_Store
2 | .happypack/
3 | node_modules/
4 | npm-debug.log
5 | .idea/
6 | dist
7 | static
8 | public
9 | private
10 | run
11 | *.iml
12 | artifacts.json
13 | *tmp
14 | _site
15 | logs
16 | config/buildConfig.json
17 | config/manifest.json
18 | config/manifest-dll.json
19 | app/view/*
20 | !app/view/layout.html
21 | !app/view/README.md
22 | !app/view/.gitkeep
23 | package-lock.json
24 | .gitkeep
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-spa-boilerplate/.vscode/launch.json:
--------------------------------------------------------------------------------
1 | {
2 | "version": "1.0.0",
3 | "configurations": [
4 | {
5 | "name": "Launch Egg Vue",
6 | "type": "node",
7 | "request": "launch",
8 | "cwd": "${workspaceRoot}",
9 | "runtimeExecutable": "npm",
10 | "windows": { "runtimeExecutable": "npm.cmd" },
11 | "runtimeArgs": [ "run", "debug" ],
12 | "console": "integratedTerminal",
13 | "protocol": "auto",
14 | "restart": true,
15 | "port": 9229,
16 | "autoAttachChildProcesses": true
17 | }
18 | ]
19 | }
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-spa-boilerplate/.vscode/settings.json:
--------------------------------------------------------------------------------
1 | {
2 | "eslint.enable": true,
3 | "eslint.run": "onSave",
4 | "editor.codeActionsOnSave": {
5 | "source.fixAll.eslint": false
6 | },
7 | "eslint.validate": [
8 | "javascript",
9 | {
10 | "language": "vue",
11 | "autoFix": true
12 | }
13 | ],
14 | "files.exclude": {
15 | "**/node_modules/_**": true
16 | }
17 | }
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-spa-boilerplate/app/controller/spa/index.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 | const Controller = require('egg').Controller;
3 | class AppController extends Controller {
4 | async index(ctx) {
5 | const { mode } = ctx.query;
6 | if (mode === 'csr') {
7 | await this.ctx.renderClient('spa.js', { url: this.ctx.url.replace('/spa', '') });
8 | } else {
9 | await this.ctx.render('spa.js', { url: this.ctx.url.replace('/spa', '') });
10 | }
11 | }
12 |
13 | async list() {
14 | this.ctx.body = this.ctx.service.article.getArtilceList(this.ctx.query);
15 | }
16 |
17 | async detail() {
18 | const id = Number(this.ctx.params.id);
19 | this.ctx.body = this.ctx.service.article.getArticle(id);
20 | }
21 | }
22 |
23 | module.exports = AppController;
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-spa-boilerplate/app/extend/application.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 | const Factory = require('../lib/db/factory');
3 | const DBSymbol = Symbol('Application#db');
4 | module.exports = {
5 | get db() {
6 | if (!this[DBSymbol]) {
7 | this[DBSymbol] = Factory();
8 | }
9 | return this[DBSymbol];
10 | },
11 | };
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-spa-boilerplate/app/extend/context.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 | module.exports = {
3 | get db() {
4 | return this.app.db;
5 | }
6 | };
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-spa-boilerplate/app/lib/db/base.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 | const shortid = require('shortid');
3 | module.exports = class DB {
4 | constructor(name = 'blog.json') {
5 | this.name = name;
6 | }
7 | getUniqueId() {
8 | return shortid.generate();
9 | }
10 | get(collectionName) {
11 | return null;
12 | }
13 | add(collectionName, json) {
14 | return null;
15 | }
16 | update(collectionName, where, json) {
17 | return null;
18 | }
19 | delete(collectionName, field) {
20 | return null;
21 | }
22 | getPager(collectionName, query) {
23 | return null;
24 | }
25 | };
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-spa-boilerplate/app/lib/db/collection.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 | module.exports = class Collection {
3 | constructor(db, name) {
4 | this.db = db;
5 | this.name = name;
6 | }
7 | get() {
8 | return this.db.get(this.name);
9 | }
10 | getByWhere(json) {
11 | return this.db.get(this.name).find(json);
12 | }
13 | add(json) {
14 | return this.db.add(this.name, json);
15 | }
16 | update(where, json) {
17 | return this.db.update(this.name, where, json);
18 | }
19 | delete(field) {
20 | return this.db.delete(this.name, field);
21 | }
22 | getPager(query) {
23 | return this.db.getPager(this.name, query);
24 | }
25 | getOrderAscByField(field) {
26 | return this.get().orderBy(field, 'asc').value();
27 | }
28 | getOrderDescByField(field) {
29 | return this.get().orderBy(field, 'desc').value();
30 | }
31 | };
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-spa-boilerplate/app/lib/db/factory.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 | const File = require('./file');
3 | const MySQL = require('./mysql');
4 | const MongoDB = require('./mongo');
5 | module.exports = type => {
6 | switch (type) {
7 | case 'mysql':
8 | return new MySQL();
9 | case 'mongo':
10 | return new MongoDB();
11 | default:
12 | return new File();
13 | }
14 | };
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-spa-boilerplate/app/lib/db/mongo.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 | const Base = require('./base');
3 | module.exports = class MongoDB extends Base {};
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-spa-boilerplate/app/lib/db/mysql.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 | const Base = require('./base');
3 | module.exports = class MySQLDB extends Base {};
4 |
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-spa-boilerplate/app/middleware/locals.js:
--------------------------------------------------------------------------------
1 | module.exports = () => {
2 | return async function locale(ctx, next) {
3 | ctx.locals.locale = ctx.query.locale || 'cn';
4 | ctx.locals.origin = ctx.request.origin;
5 | await next();
6 | };
7 | };
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-spa-boilerplate/app/model/article.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 |
3 | module.exports = class Model {
4 | constructor() {
5 | this.id = void 0;
6 | this.title = undefined;
7 | this.summary = undefined;
8 | this.tag = undefined;
9 | this.hits = 0;
10 | this.createTime = Date.now();
11 | }
12 | };
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-spa-boilerplate/app/model/artilcedetail.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 | module.exports = class ArticleDetail {};
3 |
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-spa-boilerplate/app/model/user.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 | module.exports = class User {
3 | constructor() {
4 | this.id = null;
5 | this.name = null;
6 | this.password = null;
7 | this.roleId = null;
8 | }
9 | };
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-spa-boilerplate/app/model/utils/base.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 | const Pagination = require('./pagination');
3 | module.exports = class Model {
4 | constructor() {
5 | this.pagination = new Pagination();
6 | }
7 | };
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-spa-boilerplate/app/router.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 | module.exports = app => {
3 | const { router, controller } = app;
4 | router.redirect('/', '/spa');
5 | router.get('/spa/api/article/list', app.controller.spa.index.list);
6 | router.get('/spa/api/article/:id', app.controller.spa.index.detail);
7 | router.get('/spa(/.*)?', controller.spa.index.index);
8 | };
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-spa-boilerplate/app/view/README.md:
--------------------------------------------------------------------------------
1 | ## egg规范view目录, 保证view文件夹存在, 否则app.config.view.root为空, 编译服务器文件会存放到该目录.
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-spa-boilerplate/app/web/asset/css/global.css:
--------------------------------------------------------------------------------
1 | * {
2 | padding: 0;
3 | margin: 0;
4 | outline: none;
5 | box-sizing: border-box;
6 | }
7 | html, body{
8 | height: 100%;
9 | }
10 |
11 | a {
12 | color: #3c8dbc;
13 | text-decoration: none;
14 | }
15 |
16 | -webkit-scrollbar {
17 | width: 4px;
18 | background-color: #F5F5F5;
19 | }
20 |
21 | -webkit-scrollbar-track {
22 | box-shadow: inset 0 0 6px rgba(0, 0, 0, 0.3);
23 | background-color: #F5F5F5;
24 | }
25 |
26 | -webkit-scrollbar-thumb {
27 | box-shadow: inset 0 0 6px rgba(0, 0, 0, .3);
28 | background-color: #3e8dbb;
29 | }
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-spa-boilerplate/app/web/asset/fonts/FontAwesome.otf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/easy-team/egg-vue-webpack-boilerplate/e917151416963459c5aff5138e76f1f534b8cde9/packages/egg-vue-webpack-spa-boilerplate/app/web/asset/fonts/FontAwesome.otf
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-spa-boilerplate/app/web/asset/fonts/fontawesome-webfont.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/easy-team/egg-vue-webpack-boilerplate/e917151416963459c5aff5138e76f1f534b8cde9/packages/egg-vue-webpack-spa-boilerplate/app/web/asset/fonts/fontawesome-webfont.eot
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-spa-boilerplate/app/web/asset/fonts/fontawesome-webfont.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/easy-team/egg-vue-webpack-boilerplate/e917151416963459c5aff5138e76f1f534b8cde9/packages/egg-vue-webpack-spa-boilerplate/app/web/asset/fonts/fontawesome-webfont.ttf
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-spa-boilerplate/app/web/asset/fonts/fontawesome-webfont.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/easy-team/egg-vue-webpack-boilerplate/e917151416963459c5aff5138e76f1f534b8cde9/packages/egg-vue-webpack-spa-boilerplate/app/web/asset/fonts/fontawesome-webfont.woff
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-spa-boilerplate/app/web/asset/fonts/fontawesome-webfont.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/easy-team/egg-vue-webpack-boilerplate/e917151416963459c5aff5138e76f1f534b8cde9/packages/egg-vue-webpack-spa-boilerplate/app/web/asset/fonts/fontawesome-webfont.woff2
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-spa-boilerplate/app/web/asset/fonts/glyphicons-halflings-regular.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/easy-team/egg-vue-webpack-boilerplate/e917151416963459c5aff5138e76f1f534b8cde9/packages/egg-vue-webpack-spa-boilerplate/app/web/asset/fonts/glyphicons-halflings-regular.eot
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-spa-boilerplate/app/web/asset/fonts/glyphicons-halflings-regular.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/easy-team/egg-vue-webpack-boilerplate/e917151416963459c5aff5138e76f1f534b8cde9/packages/egg-vue-webpack-spa-boilerplate/app/web/asset/fonts/glyphicons-halflings-regular.ttf
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-spa-boilerplate/app/web/asset/fonts/glyphicons-halflings-regular.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/easy-team/egg-vue-webpack-boilerplate/e917151416963459c5aff5138e76f1f534b8cde9/packages/egg-vue-webpack-spa-boilerplate/app/web/asset/fonts/glyphicons-halflings-regular.woff
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-spa-boilerplate/app/web/asset/fonts/glyphicons-halflings-regular.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/easy-team/egg-vue-webpack-boilerplate/e917151416963459c5aff5138e76f1f534b8cde9/packages/egg-vue-webpack-spa-boilerplate/app/web/asset/fonts/glyphicons-halflings-regular.woff2
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-spa-boilerplate/app/web/asset/images/egg-vue-webpack-dev.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/easy-team/egg-vue-webpack-boilerplate/e917151416963459c5aff5138e76f1f534b8cde9/packages/egg-vue-webpack-spa-boilerplate/app/web/asset/images/egg-vue-webpack-dev.png
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-spa-boilerplate/app/web/asset/images/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/easy-team/egg-vue-webpack-boilerplate/e917151416963459c5aff5138e76f1f534b8cde9/packages/egg-vue-webpack-spa-boilerplate/app/web/asset/images/favicon.ico
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-spa-boilerplate/app/web/asset/images/loading.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/easy-team/egg-vue-webpack-boilerplate/e917151416963459c5aff5138e76f1f534b8cde9/packages/egg-vue-webpack-spa-boilerplate/app/web/asset/images/loading.gif
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-spa-boilerplate/app/web/asset/images/logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/easy-team/egg-vue-webpack-boilerplate/e917151416963459c5aff5138e76f1f534b8cde9/packages/egg-vue-webpack-spa-boilerplate/app/web/asset/images/logo.png
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-spa-boilerplate/app/web/asset/medias/red.mp4:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/easy-team/egg-vue-webpack-boilerplate/e917151416963459c5aff5138e76f1f534b8cde9/packages/egg-vue-webpack-spa-boilerplate/app/web/asset/medias/red.mp4
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-spa-boilerplate/app/web/component/layout/admin/content/content.vue:
--------------------------------------------------------------------------------
1 |
2 |
7 |
8 |
11 |
25 |
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-spa-boilerplate/app/web/component/layout/admin/footer/footer.vue:
--------------------------------------------------------------------------------
1 |
2 |
12 |
13 |
16 |
21 |
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-spa-boilerplate/app/web/component/layout/admin/index.css:
--------------------------------------------------------------------------------
1 | .admin .search {
2 | margin-top: 8px;
3 | margin-bottom: 16px;
4 | }
5 | .admin label {
6 | padding-left: 8px;
7 | padding-right: 8px;
8 | color: #878d99
9 | }
10 |
11 | .admin .search-input{
12 | max-width: 200px;
13 | }
14 | .admin .search-button{
15 | margin-left: 16px;
16 | }
17 | .admin .add-button{
18 | float:right;
19 | margin-right: 16px;
20 | }
21 |
22 | .admin .long-input {
23 | max-width: 75%;
24 | }
25 |
26 | .admin .top16 {
27 | margin-top: 16px;
28 | }
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-spa-boilerplate/app/web/component/layout/admin/index.js:
--------------------------------------------------------------------------------
1 | import Vue from 'vue';
2 | import MainLayout from './main.vue';
3 | import '../../../asset/css/global.css';
4 | import './index.css';
5 | import createLayout from '../layout';
6 | const tpl = '';
7 | export default createLayout('Layout', { MainLayout }, tpl);
8 |
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-spa-boilerplate/app/web/component/layout/admin/main.vue:
--------------------------------------------------------------------------------
1 |
2 |
8 |
9 |
32 |
42 |
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-spa-boilerplate/app/web/component/layout/admin/menu/index.js:
--------------------------------------------------------------------------------
1 | const menu = {
2 | home: {
3 | name: 'menu.home',
4 | path: '/',
5 | icon: 'el-icon-menu',
6 | },
7 | content: {
8 | name: 'menu.articlemanage',
9 | icon: 'el-icon-document',
10 | children: {
11 | list: {
12 | name: 'menu.articlequery',
13 | icon: 'el-icon-edit-outline',
14 | path: '/article/list'
15 | },
16 | add: {
17 | name: 'menu.articleadd',
18 | icon: 'el-icon-edit-outline',
19 | path: '/article/add'
20 | }
21 | }
22 | }
23 | };
24 |
25 | export default menu;
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-spa-boilerplate/app/web/component/layout/default.js:
--------------------------------------------------------------------------------
1 | import Vue from 'vue';
2 | import MainLayout from './main.vue';
3 | import '../../asset/css/global.css';
4 | import createLayout from './layout';
5 | const tpl = '
';
6 | export default createLayout('Layout', { }, tpl);
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-spa-boilerplate/app/web/component/layout/index/content/content.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
9 |
23 |
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-spa-boilerplate/app/web/component/layout/index/footer/footer.css:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/easy-team/egg-vue-webpack-boilerplate/e917151416963459c5aff5138e76f1f534b8cde9/packages/egg-vue-webpack-spa-boilerplate/app/web/component/layout/index/footer/footer.css
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-spa-boilerplate/app/web/component/layout/index/footer/footer.vue:
--------------------------------------------------------------------------------
1 |
2 |
23 |
24 |
27 |
32 |
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-spa-boilerplate/app/web/component/layout/index/index.js:
--------------------------------------------------------------------------------
1 | import Vue from 'vue';
2 | import MainLayout from './main.vue';
3 | import '../../../asset/css/bootstrap.css';
4 | import '../../../asset/css/blog.css';
5 | import createLayout from '../layout';
6 | export default createLayout('Layout', { MainLayout }, '');
7 |
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-spa-boilerplate/app/web/component/layout/index/main.vue:
--------------------------------------------------------------------------------
1 |
2 |
8 |
9 |
11 |
21 |
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-spa-boilerplate/app/web/component/layout/inline.js:
--------------------------------------------------------------------------------
1 | function inlineTest() {
2 | var name = 'Egg Vue SSR';
3 | var desc = 'Egg Vue Server Side Render';
4 | return name + '-' + desc;
5 | }
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-spa-boilerplate/app/web/component/layout/spa/content/content.vue:
--------------------------------------------------------------------------------
1 |
2 |
7 |
8 |
11 |
23 |
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-spa-boilerplate/app/web/component/layout/spa/footer/footer.vue:
--------------------------------------------------------------------------------
1 |
2 |
12 |
13 |
16 |
19 |
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-spa-boilerplate/app/web/component/layout/spa/main.vue:
--------------------------------------------------------------------------------
1 |
2 |
8 |
9 |
11 |
23 |
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-spa-boilerplate/app/web/component/spa/index.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
6 |
7 |
8 |
9 |
10 |
20 |
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-spa-boilerplate/app/web/component/spa/router/detail.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
{{ article.title }}
4 |
10 |
11 |
12 |
14 |
28 |
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-spa-boilerplate/app/web/component/spa/router/index.js:
--------------------------------------------------------------------------------
1 | import Vue from 'vue';
2 |
3 | import VueRouter from 'vue-router';
4 |
5 | import ListView from './list';
6 |
7 | Vue.use(VueRouter);
8 |
9 | export default function createRouter(initState, options) {
10 | const { base } = options;
11 | return new VueRouter({
12 | mode: 'history',
13 | base,
14 | routes: [
15 | {
16 | path: '/',
17 | component: ListView
18 | },
19 | {
20 | path: '/list',
21 | component: ListView
22 | },
23 | {
24 | path: '/detail/:id',
25 | component: () => import('./detail')
26 | }
27 | ]
28 | });
29 | }
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-spa-boilerplate/app/web/component/spa/store/actions.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 |
3 | import * as Type from './mutation-type';
4 | import Vue from 'vue';
5 | import Vuex from 'vuex';
6 | import axios from 'axios';
7 |
8 | Vue.use(Vuex);
9 |
10 | const actions = {
11 |
12 | FETCH_ARTICLE_LIST: ({ commit, dispatch, state }) => {
13 | if (!state.articleList.length) {
14 | return axios.get(`${state.origin}/spa/api/article/list`)
15 | .then(response => {
16 | commit(Type.SET_ARTICLE_LIST, response.data.list);
17 | });
18 | }
19 | },
20 |
21 | FETCH_ARTICLE_DETAIL: ({ commit, dispatch, state }, { id }) => {
22 | if (state.article.id !== Number(id)) {
23 | return axios.get(`${state.origin}/spa/api/article/${id}`)
24 | .then(response => {
25 | commit(Type.SET_ARTICLE_DETAIL, response.data);
26 | });
27 | }
28 | }
29 | };
30 |
31 | export default actions;
32 |
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-spa-boilerplate/app/web/component/spa/store/getters.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 |
3 |
4 | const getters = {
5 |
6 | };
7 |
8 | export default getters;
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-spa-boilerplate/app/web/component/spa/store/index.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 | import Vue from 'vue';
3 | import Vuex from 'vuex';
4 |
5 | import actions from './actions';
6 | import getters from './getters';
7 | import mutations from './mutations';
8 |
9 | Vue.use(Vuex);
10 |
11 | export default function createStore(initState = {}) {
12 |
13 | const state = {
14 | articleList: [],
15 | article: {},
16 | ...initState
17 | };
18 |
19 | return new Vuex.Store({
20 | state,
21 | actions,
22 | getters,
23 | mutations
24 | });
25 | }
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-spa-boilerplate/app/web/component/spa/store/mutation-type.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 |
3 | export const SET_ARTICLE_LIST = 'SET_ARTICLE_LIST';
4 | export const SET_ARTICLE_DETAIL = 'SET_ARTICLE_DETAIL';
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-spa-boilerplate/app/web/component/spa/store/mutations.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 |
3 | import {
4 | SET_ARTICLE_LIST,
5 | SET_ARTICLE_DETAIL
6 | } from './mutation-type';
7 |
8 | const mutations = {
9 | [SET_ARTICLE_LIST](state, items) {
10 | state.articleList = items;
11 | },
12 | [SET_ARTICLE_DETAIL](state, data) {
13 | state.article = data;
14 | }
15 | };
16 | export default mutations;
17 |
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-spa-boilerplate/app/web/framework/request.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 | import axios from 'axios';
3 | // axios.defaults.baseURL = 'http://127.0.0.1:7001';
4 | axios.defaults.timeout = 15000;
5 | axios.defaults.xsrfHeaderName = 'x-csrf-token';
6 | axios.defaults.xsrfCookieName = 'csrfToken';
7 | export default {
8 | post(url, json, store = {}) {
9 | const { state = { origin: '' } } = store;
10 | const headers = {};
11 | if (EASY_ENV_IS_NODE) {
12 | headers['x-csrf-token'] = state.csrf;
13 | headers.Cookie = `csrfToken=${state.csrf}`;
14 | }
15 | return axios.post(`${state.origin}${url}`, json, { headers });
16 | },
17 | get(url, store = {}) {
18 | const { state = { origin: '' } } = store;
19 | return axios.get(`${state.origin}${url}`);
20 | }
21 | };
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-spa-boilerplate/app/web/page/spa/index.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 | import App from 'framework/app.js';
3 | import index from 'component/spa/index.vue';
4 | import createStore from 'component/spa/store';
5 | import createRouter from 'component/spa/router';
6 |
7 | const options = { base: '/spa' };
8 |
9 | export default new App({
10 | index,
11 | options,
12 | createStore,
13 | createRouter,
14 | }).bootstrap();
15 |
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-spa-boilerplate/app/web/view/layout.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | Egg + Vue
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-spa-boilerplate/babel.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | env: {
3 | node: {
4 | presets: [
5 | [
6 | '@babel/preset-env',
7 | {
8 | modules: false,
9 | targets: {
10 | node: 'current',
11 | },
12 | },
13 | ],
14 | ],
15 | plugins: [
16 | '@babel/plugin-syntax-dynamic-import',
17 | ],
18 | },
19 | web: {
20 | presets: [
21 | [
22 | '@babel/preset-env',
23 | {
24 | modules: false,
25 | targets: {
26 | browsers: ['last 2 versions'],
27 | },
28 | },
29 | ],
30 | ],
31 | plugins: [
32 | '@babel/plugin-proposal-object-rest-spread',
33 | '@babel/plugin-syntax-dynamic-import',
34 | ],
35 | },
36 | },
37 | };
38 |
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-spa-boilerplate/config/config.prod.js:
--------------------------------------------------------------------------------
1 | /**
2 | * 生产环境配置
3 | *
4 | * 最终生效的配置为 prod + default(前者覆盖后者)
5 | */
6 |
7 |
8 | module.exports = app => {
9 | const exports = {};
10 |
11 | return exports;
12 | };
13 |
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-spa-boilerplate/config/config.test.js:
--------------------------------------------------------------------------------
1 |
2 |
3 | module.exports = app => {
4 | const exports = {};
5 |
6 | return exports;
7 | };
8 |
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-spa-boilerplate/config/plugin.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 |
3 | exports.vuessr = {
4 | enable: true,
5 | package: 'egg-view-vue-ssr'
6 | };
7 |
8 | exports.nunjucks = {
9 | enable: true,
10 | package: 'egg-view-nunjucks',
11 | };
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-spa-boilerplate/config/plugin.local.js:
--------------------------------------------------------------------------------
1 | exports.cors = {
2 | enable: true,
3 | package: 'egg-cors'
4 | };
5 |
6 | exports.webpack = {
7 | enable: true,
8 | package: 'egg-webpack'
9 | };
10 |
11 | exports.webpackvue = {
12 | enable: true,
13 | package: 'egg-webpack-vue'
14 | };
15 |
16 | exports.logview = {
17 | package: 'egg-logview',
18 | env: ['local']
19 | };
20 |
--------------------------------------------------------------------------------
/packages/egg-vue-webpack-spa-boilerplate/webpack.config.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 | // Webpack:https://www.yuque.com/easy-team/easywebpack
3 | // Egg Vue: https://www.yuque.com/easy-team/egg-vue/web
4 |
5 | module.exports = {
6 | entry: {
7 | spa: 'app/web/page/spa/index.js',
8 | }
9 | };
10 |
--------------------------------------------------------------------------------