added vuejs simple login register template

This commit is contained in:
jack
2018-04-30 14:16:53 +08:00
parent 7db2a95665
commit a5534004b8
74 changed files with 55630 additions and 102 deletions
+48
View File
@@ -0,0 +1,48 @@
'use strict'
require('./check-versions')()
const ora = require('ora')
const rm = require('rimraf')
const path = require('path')
const chalk = require('chalk')
const webpack = require('webpack')
const config = require('../config')
const webpackConfig = require('./webpack.prod.conf')
const server = require('pushstate-server')
var spinner = ora('building for '+ process.env.env_config+ ' environment...' )
spinner.start()
rm(path.join(config.build.assetsRoot, config.build.assetsSubDirectory), err => {
if (err) throw err
webpack(webpackConfig, (err, stats) => {
spinner.stop()
if (err) throw err
process.stdout.write(stats.toString({
colors: true,
modules: false,
children: false,
chunks: false,
chunkModules: false
}) + '\n\n')
if (stats.hasErrors()) {
console.log(chalk.red(' Build failed with errors.\n'))
process.exit(1)
}
console.log(chalk.cyan(' Build complete.\n'))
console.log(chalk.yellow(
' Tip: built files are meant to be served over an HTTP server.\n' +
' Opening index.html over file:// won\'t work.\n'
))
if(process.env.npm_config_preview){
server.start({
port: 9526,
directory: './dist',
file: '/index.html'
});
console.log('> Listening at ' + 'http://localhost:9526' + '\n')
}
})
})
+54
View File
@@ -0,0 +1,54 @@
'use strict'
const chalk = require('chalk')
const semver = require('semver')
const packageConfig = require('../package.json')
const shell = require('shelljs')
function exec (cmd) {
return require('child_process').execSync(cmd).toString().trim()
}
const versionRequirements = [
{
name: 'node',
currentVersion: semver.clean(process.version),
versionRequirement: packageConfig.engines.node
}
]
if (shell.which('npm')) {
versionRequirements.push({
name: 'npm',
currentVersion: exec('npm --version'),
versionRequirement: packageConfig.engines.npm
})
}
module.exports = function () {
const warnings = []
for (let i = 0; i < versionRequirements.length; i++) {
const mod = versionRequirements[i]
if (!semver.satisfies(mod.currentVersion, mod.versionRequirement)) {
warnings.push(mod.name + ': ' +
chalk.red(mod.currentVersion) + ' should be ' +
chalk.green(mod.versionRequirement)
)
}
}
if (warnings.length) {
console.log('')
console.log(chalk.yellow('To use this template, you must update following to modules:'))
console.log()
for (let i = 0; i < warnings.length; i++) {
const warning = warnings[i]
console.log(' ' + warning)
}
console.log()
process.exit(1)
}
}
BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 6.7 KiB

+101
View File
@@ -0,0 +1,101 @@
'use strict'
const path = require('path')
const config = require('../config')
const ExtractTextPlugin = require('extract-text-webpack-plugin')
const packageConfig = require('../package.json')
exports.assetsPath = function (_path) {
const assetsSubDirectory = process.env.NODE_ENV === 'production'
? config.build.assetsSubDirectory
: config.dev.assetsSubDirectory
return path.posix.join(assetsSubDirectory, _path)
}
exports.cssLoaders = function (options) {
options = options || {}
const cssLoader = {
loader: 'css-loader',
options: {
sourceMap: options.sourceMap
}
}
const postcssLoader = {
loader: 'postcss-loader',
options: {
sourceMap: options.sourceMap
}
}
// generate loader string to be used with extract text plugin
function generateLoaders (loader, loaderOptions) {
const loaders = options.usePostCSS ? [cssLoader, postcssLoader] : [cssLoader]
if (loader) {
loaders.push({
loader: loader + '-loader',
options: Object.assign({}, loaderOptions, {
sourceMap: options.sourceMap
})
})
}
// Extract CSS when that option is specified
// (which is the case during production build)
if (options.extract) {
return ExtractTextPlugin.extract({
use: loaders,
fallback: 'vue-style-loader'
})
} else {
return ['vue-style-loader'].concat(loaders)
}
}
// https://vue-loader.vuejs.org/en/configurations/extract-css.html
return {
css: generateLoaders(),
postcss: generateLoaders(),
less: generateLoaders('less'),
sass: generateLoaders('sass', { indentedSyntax: true }),
scss: generateLoaders('sass'),
stylus: generateLoaders('stylus'),
styl: generateLoaders('stylus')
}
}
// Generate loaders for standalone style files (outside of .vue)
exports.styleLoaders = function (options) {
const output = []
const loaders = exports.cssLoaders(options)
for (const extension in loaders) {
const loader = loaders[extension]
output.push({
test: new RegExp('\\.' + extension + '$'),
use: loader
})
}
return output
}
exports.createNotifierCallback = () => {
const notifier = require('node-notifier')
return (severity, errors) => {
if (severity !== 'error') return
const error = errors[0]
const filename = error.file && error.file.split('!').pop()
notifier.notify({
title: packageConfig.name,
message: severity + ': ' + error.name,
subtitle: filename || '',
icon: path.join(__dirname, 'logo.png')
})
}
}
+22
View File
@@ -0,0 +1,22 @@
'use strict'
const utils = require('./utils')
const config = require('../config')
const isProduction = process.env.NODE_ENV === 'production'
const sourceMapEnabled = isProduction
? config.build.productionSourceMap
: config.dev.cssSourceMap
module.exports = {
loaders: utils.cssLoaders({
sourceMap: sourceMapEnabled,
extract: isProduction
}),
cssSourceMap: sourceMapEnabled,
cacheBusting: config.dev.cacheBusting,
transformToRequire: {
video: ['src', 'poster'],
source: 'src',
img: 'src',
image: 'xlink:href'
}
}
+101
View File
@@ -0,0 +1,101 @@
'use strict'
const path = require('path')
const utils = require('./utils')
const config = require('../config')
const vueLoaderConfig = require('./vue-loader.conf')
function resolve (dir) {
return path.join(__dirname, '..', dir)
}
const createLintingRule = () => ({
test: /\.(js|vue)$/,
loader: 'eslint-loader',
enforce: 'pre',
include: [resolve('src'), resolve('test')],
options: {
formatter: require('eslint-friendly-formatter'),
emitWarning: !config.dev.showEslintErrorsInOverlay
}
})
module.exports = {
context: path.resolve(__dirname, '../'),
entry: {
app: './resource/assets/js/main.js'
},
output: {
path: config.build.assetsRoot,
filename: '[name].js',
publicPath: process.env.NODE_ENV === 'production'
? config.build.assetsPublicPath
: config.dev.assetsPublicPath
},
resolve: {
extensions: ['.js', '.vue', '.json'],
alias: {
'vue$': 'vue/dist/vue.esm.js',
'@': resolve('./resources/assets/js/'),
}
},
module: {
rules: [
...(config.dev.useEslint ? [createLintingRule()] : []),
{
test: /\.vue$/,
loader: 'vue-loader',
options: vueLoaderConfig
},
{
test: /\.js$/,
loader: 'babel-loader?cacheDirectory',
include: [resolve('src'), resolve('test'), resolve('node_modules/webpack-dev-server/client')]
},
{
test: /\.svg$/,
loader: 'svg-sprite-loader',
include: [resolve('src/icons')],
options: {
symbolId: 'icon-[name]'
}
},
{
test: /\.(png|jpe?g|gif|svg)(\?.*)?$/,
loader: 'url-loader',
exclude: [resolve('src/icons')],
options: {
limit: 10000,
name: utils.assetsPath('img/[name].[hash:7].[ext]')
}
},
{
test: /\.(mp4|webm|ogg|mp3|wav|flac|aac)(\?.*)?$/,
loader: 'url-loader',
options: {
limit: 10000,
name: utils.assetsPath('media/[name].[hash:7].[ext]')
}
},
{
test: /\.(woff2?|eot|ttf|otf)(\?.*)?$/,
loader: 'url-loader',
options: {
limit: 10000,
name: utils.assetsPath('fonts/[name].[hash:7].[ext]')
}
}
]
},
node: {
// prevent webpack from injecting useless setImmediate polyfill because Vue
// source contains it (although only uses it if it's native).
setImmediate: false,
// prevent webpack from injecting mocks to Node native modules
// that does not make sense for the client
dgram: 'empty',
fs: 'empty',
net: 'empty',
tls: 'empty',
child_process: 'empty'
}
}
+38
View File
@@ -0,0 +1,38 @@
/**
* As our first step, we'll pull in the user's webpack.mix.js
* file. Based on what the user requests in that file,
* a generic config object will be constructed for us.
*/
let mix = require('./src/index');
let ComponentFactory = require('./src/components/ComponentFactory');
new ComponentFactory().installAll();
require(Mix.paths.mix());
/**
* Just in case the user needs to hook into this point
* in the build process, we'll make an announcement.
*/
Mix.dispatch('init', Mix);
/**
* Now that we know which build tasks are required by the
* user, we can dynamically create a configuration object
* for Webpack. And that's all there is to it. Simple!
*/
let WebpackConfig = require('./src/builder/WebpackConfig');
mix.webpackConfig({
resolve: {
alias: {
'@': resolve('./resources/assets/js/'),
}
}
})
module.exports = new WebpackConfig().build();
+88
View File
@@ -0,0 +1,88 @@
'use strict'
const path = require('path')
const utils = require('./utils')
const webpack = require('webpack')
const config = require('../config')
const merge = require('webpack-merge')
const baseWebpackConfig = require('./webpack.base.conf')
const HtmlWebpackPlugin = require('html-webpack-plugin')
const FriendlyErrorsPlugin = require('friendly-errors-webpack-plugin')
const portfinder = require('portfinder')
function resolve (dir) {
return path.join(__dirname, '..', dir)
}
const HOST = process.env.HOST
const PORT = process.env.PORT && Number(process.env.PORT)
const devWebpackConfig = merge(baseWebpackConfig, {
module: {
rules: utils.styleLoaders({ sourceMap: config.dev.cssSourceMap, usePostCSS: true })
},
// cheap-module-eval-source-map is faster for development
devtool: config.dev.devtool,
// these devServer options should be customized in /config/index.js
devServer: {
clientLogLevel: 'warning',
historyApiFallback: true,
hot: true,
compress: true,
host: HOST || config.dev.host,
port: PORT || config.dev.port,
open: config.dev.autoOpenBrowser,
overlay: config.dev.errorOverlay
? { warnings: false, errors: true }
: false,
publicPath: config.dev.assetsPublicPath,
proxy: config.dev.proxyTable,
quiet: true, // necessary for FriendlyErrorsPlugin
watchOptions: {
poll: config.dev.poll,
}
},
plugins: [
new webpack.DefinePlugin({
'process.env': require('../config/dev.env')
}),
new webpack.HotModuleReplacementPlugin(),
new webpack.NamedModulesPlugin(), // HMR shows correct file names in console on update.
new webpack.NoEmitOnErrorsPlugin(),
// https://github.com/ampedandwired/html-webpack-plugin
new HtmlWebpackPlugin({
filename: 'index.html',
template: 'index.html',
inject: true,
favicon: resolve('favicon.ico'),
title: 'vue-element-admin',
path: config.dev.assetsPublicPath + config.dev.assetsSubDirectory
}),
]
})
module.exports = new Promise((resolve, reject) => {
portfinder.basePort = process.env.PORT || config.dev.port
portfinder.getPort((err, port) => {
if (err) {
reject(err)
} else {
// publish the new Port, necessary for e2e tests
process.env.PORT = port
// add port to devServer config
devWebpackConfig.devServer.port = port
// Add FriendlyErrorsPlugin
devWebpackConfig.plugins.push(new FriendlyErrorsPlugin({
compilationSuccessInfo: {
messages: [`Your application is running here: http://${devWebpackConfig.devServer.host}:${port}`],
},
onErrors: config.dev.notifyOnErrors
? utils.createNotifierCallback()
: undefined
}))
resolve(devWebpackConfig)
}
})
})
+175
View File
@@ -0,0 +1,175 @@
'use strict'
const path = require('path')
const utils = require('./utils')
const webpack = require('webpack')
const config = require('../config')
const merge = require('webpack-merge')
const baseWebpackConfig = require('./webpack.base.conf')
const CopyWebpackPlugin = require('copy-webpack-plugin')
const HtmlWebpackPlugin = require('html-webpack-plugin')
const ExtractTextPlugin = require('extract-text-webpack-plugin')
const OptimizeCSSPlugin = require('optimize-css-assets-webpack-plugin')
const UglifyJsPlugin = require('uglifyjs-webpack-plugin')
function resolve (dir) {
return path.join(__dirname, '..', dir)
}
const env = require('../config/'+process.env.env_config+'.env')
const webpackConfig = merge(baseWebpackConfig, {
module: {
rules: utils.styleLoaders({
sourceMap: config.build.productionSourceMap,
extract: true,
usePostCSS: true
})
},
devtool: config.build.productionSourceMap ? config.build.devtool : false,
output: {
path: config.build.assetsRoot,
filename: utils.assetsPath('js/[name].[chunkhash].js'),
chunkFilename: utils.assetsPath('js/[id].[chunkhash].js')
},
plugins: [
// http://vuejs.github.io/vue-loader/en/workflow/production.html
new webpack.DefinePlugin({
'process.env': env
}),
new UglifyJsPlugin({
uglifyOptions: {
compress: {
warnings: false
}
},
sourceMap: config.build.productionSourceMap,
parallel: true
}),
// extract css into its own file
new ExtractTextPlugin({
filename: utils.assetsPath('css/[name].[contenthash].css'),
// Setting the following option to `false` will not extract CSS from codesplit chunks.
// Their CSS will instead be inserted dynamically with style-loader when the codesplit chunk has been loaded by webpack.
// increasing file size: https://github.com/vuejs-templates/webpack/issues/1110
allChunks: false,
}),
// Compress extracted CSS. We are using this plugin so that possible
// duplicated CSS from different components can be deduped.
new OptimizeCSSPlugin({
cssProcessorOptions: config.build.productionSourceMap
? { safe: true, map: { inline: false } }
: { safe: true }
}),
// generate dist index.html with correct asset hash for caching.
// you can customize output by editing /index.html
// see https://github.com/ampedandwired/html-webpack-plugin
new HtmlWebpackPlugin({
filename: config.build.index,
template: 'index.html',
inject: true,
favicon: resolve('favicon.ico'),
title: 'vue-element-admin',
path: config.build.assetsPublicPath + config.build.assetsSubDirectory,
minify: {
removeComments: true,
collapseWhitespace: true,
removeAttributeQuotes: true
// more options:
// https://github.com/kangax/html-minifier#options-quick-reference
},
// necessary to consistently work with multiple chunks via CommonsChunkPlugin
chunksSortMode: 'dependency'
}),
// keep module.id stable when vender modules does not change
new webpack.HashedModuleIdsPlugin(),
// enable scope hoisting
new webpack.optimize.ModuleConcatenationPlugin(),
// split vendor js into its own file
new webpack.optimize.CommonsChunkPlugin({
name: 'vendor',
minChunks (module) {
// any required modules inside node_modules are extracted to vendor
return (
module.resource &&
/\.js$/.test(module.resource) &&
module.resource.indexOf(
path.join(__dirname, '../node_modules')
) === 0
)
}
}),
// extract webpack runtime and module manifest to its own file in order to
// prevent vendor hash from being updated whenever app bundle is updated
new webpack.optimize.CommonsChunkPlugin({
name: 'manifest',
minChunks: Infinity
}),
// This instance extracts shared chunks from code splitted chunks and bundles them
// in a separate chunk, similar to the vendor chunk
// see: https://webpack.js.org/plugins/commons-chunk-plugin/#extra-async-commons-chunk
new webpack.optimize.CommonsChunkPlugin({
name: 'app',
async: 'vendor-async',
children: true,
minChunks: 3
}),
// split echarts into its own file
new webpack.optimize.CommonsChunkPlugin({
async: 'echarts',
minChunks(module) {
var context = module.context;
return context && (context.indexOf('echarts') >= 0 || context.indexOf('zrender') >= 0);
}
}),
// split xlsx into its own file
new webpack.optimize.CommonsChunkPlugin({
async: 'xlsx',
minChunks(module) {
var context = module.context;
return context && (context.indexOf('xlsx') >= 0);
}
}),
// split codemirror into its own file
new webpack.optimize.CommonsChunkPlugin({
async: 'codemirror',
minChunks(module) {
var context = module.context;
return context && (context.indexOf('codemirror') >= 0);
}
}),
// copy custom static assets
new CopyWebpackPlugin([
{
from: path.resolve(__dirname, '../static'),
to: config.build.assetsSubDirectory,
ignore: ['.*']
}
])
]
})
if (config.build.productionGzip) {
const CompressionWebpackPlugin = require('compression-webpack-plugin')
webpackConfig.plugins.push(
new CompressionWebpackPlugin({
asset: '[path].gz[query]',
algorithm: 'gzip',
test: new RegExp(
'\\.(' +
config.build.productionGzipExtensions.join('|') +
')$'
),
threshold: 10240,
minRatio: 0.8
})
)
}
if (config.build.bundleAnalyzerReport) {
const BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin
webpackConfig.plugins.push(new BundleAnalyzerPlugin())
}
module.exports = webpackConfig
+5
View File
@@ -0,0 +1,5 @@
module.exports = {
NODE_ENV: '"development"',
ENV_CONFIG: '"dev"',
BASE_API: '"https://api-dev"'
}
+83
View File
@@ -0,0 +1,83 @@
'use strict'
// Template version: 1.2.6
// see http://vuejs-templates.github.io/webpack for documentation.
const path = require('path')
module.exports = {
dev: {
// Paths
assetsSubDirectory: 'static',
assetsPublicPath: '/',
proxyTable: {},
// Various Dev Server settings
host: 'localhost', // can be overwritten by process.env.HOST
port: 9527, // can be overwritten by process.env.PORT, if port is in use, a free one will be determined
autoOpenBrowser: true,
errorOverlay: true,
notifyOnErrors: false,
poll: false, // https://webpack.js.org/configuration/dev-server/#devserver-watchoptions-
// Use Eslint Loader?
// If true, your code will be linted during bundling and
// linting errors and warnings will be shown in the console.
useEslint: true,
// If true, eslint errors and warnings will also be shown in the error overlay
// in the browser.
showEslintErrorsInOverlay: false,
/**
* Source Maps
*/
// https://webpack.js.org/configuration/devtool/#development
devtool: '#cheap-source-map',
// If you have problems debugging vue-files in devtools,
// set this to false - it *may* help
// https://vue-loader.vuejs.org/en/options.html#cachebusting
cacheBusting: true,
// CSS Sourcemaps off by default because relative paths are "buggy"
// with this option, according to the CSS-Loader README
// (https://github.com/webpack/css-loader#sourcemaps)
// In our experience, they generally work as expected,
// just be aware of this issue when enabling this option.
cssSourceMap: false,
},
build: {
// Template for index.html
index: path.resolve(__dirname, '../dist/index.html'),
// Paths
assetsRoot: path.resolve(__dirname, '../dist'),
assetsSubDirectory: 'static',
// you can set by youself according to actual condition
assetsPublicPath: './',
/**
* Source Maps
*/
productionSourceMap: false,
// https://webpack.js.org/configuration/devtool/#production
devtool: '#source-map',
// Gzip off by default as many popular static hosts such as
// Surge or Netlify already gzip all static assets for you.
// Before setting to `true`, make sure to:
// npm install --save-dev compression-webpack-plugin
productionGzip: false,
productionGzipExtensions: ['js', 'css'],
// Run the build command with an extra argument to
// View the bundle analyzer report after build finishes:
// `npm run build --report`
// Set to `true` or `false` to always turn it on or off
bundleAnalyzerReport: process.env.npm_config_report
}
}
+5
View File
@@ -0,0 +1,5 @@
module.exports = {
NODE_ENV: '"production"',
ENV_CONFIG: '"prod"',
BASE_API: '"https://api-prod"'
}
+5
View File
@@ -0,0 +1,5 @@
module.exports = {
NODE_ENV: '"production"',
ENV_CONFIG: '"sit"',
BASE_API: '"https://api-sit"'
}
+27 -20
View File
@@ -1,22 +1,29 @@
{
"private": true,
"scripts": {
"dev": "npm run development",
"development": "cross-env NODE_ENV=development node_modules/webpack/bin/webpack.js --progress --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js",
"watch": "cross-env NODE_ENV=development node_modules/webpack/bin/webpack.js --watch --progress --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js",
"watch-poll": "npm run watch -- --watch-poll",
"hot": "cross-env NODE_ENV=development node_modules/webpack-dev-server/bin/webpack-dev-server.js --inline --hot --config=node_modules/laravel-mix/setup/webpack.config.js",
"prod": "npm run production",
"production": "cross-env NODE_ENV=production node_modules/webpack/bin/webpack.js --no-progress --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js"
},
"devDependencies": {
"axios": "^0.18",
"bootstrap": "^4.0.0",
"popper.js": "^1.12",
"cross-env": "^5.1",
"jquery": "^3.2",
"laravel-mix": "^2.0",
"lodash": "^4.17.4",
"vue": "^2.5.7"
}
"private": true,
"scripts": {
"dev": "npm run development",
"development": "cross-env NODE_ENV=development node_modules/webpack/bin/webpack.js --progress --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js",
"watch": "cross-env NODE_ENV=development node_modules/webpack/bin/webpack.js --watch --progress --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js",
"watch-poll": "npm run watch -- --watch-poll",
"hot": "cross-env NODE_ENV=development node_modules/webpack-dev-server/bin/webpack-dev-server.js --inline --hot --config=node_modules/laravel-mix/setup/webpack.config.js",
"prod": "npm run production",
"production": "cross-env NODE_ENV=production node_modules/webpack/bin/webpack.js --progress --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js"
},
"devDependencies": {
"axios": "^0.16.2",
"bootstrap-sass": "^3.3.7",
"cross-env": "^5.0.1",
"jquery": "^3.1.1",
"laravel-mix": "^1.0",
"lodash": "^4.17.4",
"vue": "^2.1.10"
},
"dependencies": {
"js-cookie": "^2.1.4",
"popper.js": "^1.14.3",
"vue-resource": "^1.3.4",
"vue-router": "^3.0.1",
"vuex": "^3.0.1",
"bootstrap": "^4.0.0"
}
}
+6 -6
View File
File diff suppressed because one or more lines are too long
Binary file not shown.
Binary file not shown.
+1
View File
@@ -0,0 +1 @@
<svg class="icon" viewBox="0 0 1024 1024" xmlns="http://www.w3.org/2000/svg" width="64" height="64"><defs><style/></defs><path d="M931.6 585.6v79c28.6-60.2 44.8-127.4 44.8-198.4C976.4 211 769.4 4 514.2 4S52 211 52 466.2c0 3.2.2 6.4.2 9.6l166-206h96.4L171.8 485.6h46.4v-54.8l99.2-154.6V668h-99.2v-82.4H67.6c43 161 170.6 287.4 332.4 328.6-10.4 26.2-40.6 89.4-90.8 100.6-62.2 14 168.8 3.4 333.6-104.6C769.4 873.6 873.6 784.4 930.2 668h-97.6v-82.4H666.4V476l166.2-206.2h94L786.2 485.6h46.4v-59l99.2-154v313zM366.2 608c-4.8-11.2-7.2-23.2-7.2-36V357.6c0-12.8 2.4-24.8 7.2-36 4.8-11.2 11.4-21 19.6-29.2 8.2-8.2 18-14.8 29.2-19.6 11.2-4.8 23.2-7.2 36-7.2h81.6c12.8 0 24.8 2.4 36 7.2 11 4.8 20.6 11.2 28.8 19.2l-88.6 129.4v-23c0-4.8-1.6-8.8-4.8-12-3.2-3.2-7.2-4.8-12-4.8s-8.8 1.6-12 4.8c-3.2 3.2-4.8 7.2-4.8 12v72L372.6 620c-2.4-3.8-4.6-7.8-6.4-12zm258.2-36c0 12.8-2.4 24.8-7.2 36-4.8 11.2-11.4 21-19.6 29.2-8.2 8.2-18 14.8-29.2 19.6-11.2 4.8-23.2 7.2-36 7.2h-81.6c-12.8 0-24.8-2.4-36-7.2-11.2-4.8-21-11.4-29.2-19.6-3.6-3.6-7-7.8-10-12l99.2-144.6v50.6c0 4.8 1.6 8.8 4.8 12 3.2 3.2 7.2 4.8 12 4.8s8.8-1.6 12-4.8c3.2-3.2 4.8-7.2 4.8-12v-99.6L601 296.4c6.6 7.4 12 15.8 16 25.2 4.8 11.2 7.2 23.2 7.2 36V572z"/></svg>

After

Width:  |  Height:  |  Size: 1.2 KiB

+1
View File
@@ -0,0 +1 @@
<svg class="icon" viewBox="0 0 1024 1024" xmlns="http://www.w3.org/2000/svg" width="64" height="64"><defs><style/></defs><path d="M969.143 548.571q0 14.848-10.862 25.71t-25.71 10.862h-128q0 97.719-38.29 165.705L885.138 870.29Q896 881.152 896 896t-10.862 25.71q-10.276 10.861-25.71 10.861t-25.71-10.861l-113.15-112.567q-2.853 2.852-8.558 7.424t-23.99 16.274-37.157 20.846-46.848 16.567-55.443 7.424v-512H475.43v512q-29.148 0-58.003-7.717t-49.7-18.87-37.705-22.273-24.869-18.578l-8.558-8.01-104.557 118.273q-11.447 11.995-27.429 11.995-13.714 0-24.576-9.143-10.862-10.276-11.703-25.417t8.85-26.587L252.6 741.632q-33.134-65.134-33.134-156.562h-128q-14.848 0-25.71-10.862t-10.861-25.71 10.861-25.71 25.71-10.861h128v-168.01l-98.852-98.852q-10.862-10.862-10.862-25.71t10.862-25.71 25.71-10.861 25.709 10.862l98.853 98.852H753.19l98.852-98.852q10.862-10.862 25.71-10.862t25.71 10.862 10.861 25.71-10.861 25.71l-98.853 98.852v168.009h128q14.848 0 25.71 10.862t10.861 25.71zM694.857 219.43H329.143q0-75.996 53.43-129.427T512 36.572t129.426 53.43 53.431 129.427z"/></svg>

After

Width:  |  Height:  |  Size: 1.0 KiB

+1
View File
@@ -0,0 +1 @@
<svg class="icon" viewBox="0 0 1024 1024" xmlns="http://www.w3.org/2000/svg" width="64" height="64"><defs><style/></defs><path d="M64 448h256v512H64V448zm640-192h256v704H704V256zM384 64h256v896H384V64z"/></svg>

After

Width:  |  Height:  |  Size: 210 B

+1
View File
@@ -0,0 +1 @@
<svg class="icon" viewBox="0 0 1024 1024" xmlns="http://www.w3.org/2000/svg" width="64" height="64"><defs><style/></defs><path d="M438.857 950.857h512V585.143H713.143q-22.82 0-38.839-16.018t-16.018-38.84V292.572H438.857v658.286zM585.143 128V91.429q0-7.461-5.413-12.874t-12.873-5.412H164.571q-7.46 0-12.873 5.412t-5.412 12.874V128q0 7.46 5.412 12.873t12.873 5.413h402.286q7.46 0 12.873-5.413T585.143 128zm146.286 384H902.29L731.43 341.138V512zM1024 585.143v384q0 22.82-16.018 38.839T969.142 1024h-548.57q-22.821 0-38.84-16.018t-16.018-38.84v-91.428H54.857q-22.82 0-38.839-16.018T0 822.857v-768q0-22.82 16.018-38.839T54.858 0H676.57q22.821 0 38.84 16.018t16.018 38.84v187.464q11.995 7.46 20.553 16.019l233.18 233.179q16.017 16.018 27.428 43.447t11.41 50.322z"/></svg>

After

Width:  |  Height:  |  Size: 765 B

+1
View File
@@ -0,0 +1 @@
<svg class="icon" viewBox="0 0 1024 1024" xmlns="http://www.w3.org/2000/svg" width="64" height="64"><defs><style/></defs><path d="M64 64h384v384H64V64zm0 512h384v384H64V576zm512 0h384v384H576V576zm192-128c106.039 0 192-85.961 192-192S874.039 64 768 64s-192 85.961-192 192 85.961 192 192 192z"/></svg>

After

Width:  |  Height:  |  Size: 300 B

+1
View File
@@ -0,0 +1 @@
<svg class="icon" viewBox="0 0 1024 1024" xmlns="http://www.w3.org/2000/svg" width="32" height="32"><defs><style/></defs><path d="M219.429 658.286q0-30.286-21.429-51.715t-51.714-21.428T94.57 606.57t-21.428 51.715T94.57 710t51.715 21.429T198 710t21.429-51.714zm109.714-256q0-30.286-21.429-51.715T256 329.143t-51.714 21.428-21.429 51.715T204.286 454 256 475.429 307.714 454t21.429-51.714zm244.571 274.857l57.715-218.286q3.428-14.857-4.286-27.714t-22-16.857T577.714 418t-17.143 22.571l-57.714 218.286q-34.286 2.857-61.143 24.857t-36 56.286q-11.428 44 11.429 83.429T484 874.286t83.429-11.429T618.286 796q9.143-34.286-3.429-66.857t-41.143-52zm377.143-18.857q0-30.286-21.428-51.715t-51.715-21.428T826 606.57t-21.429 51.715T826 710t51.714 21.429T929.43 710t21.428-51.714zM585.143 292.57q0-30.285-21.429-51.714T512 219.43t-51.714 21.428-21.429 51.714 21.429 51.715T512 365.714t51.714-21.428 21.429-51.715zm256 109.715q0-30.286-21.429-51.715T768 329.143t-51.714 21.428-21.429 51.715T716.286 454 768 475.429 819.714 454t21.429-51.714zm182.857 256q0 149.143-80.571 276-10.858 16.571-30.858 16.571H111.43q-20 0-30.858-16.571Q0 808 0 658.286q0-104 40.571-198.857T149.714 296t163.429-109.143T512 146.286t198.857 40.571T874.286 296t109.143 163.429T1024 658.286z"/></svg>

After

Width:  |  Height:  |  Size: 1.2 KiB

+1
View File
@@ -0,0 +1 @@
<svg class="icon" viewBox="0 0 1024 1024" xmlns="http://www.w3.org/2000/svg" width="64" height="64"><defs><style/></defs><path d="M554.667 384h234.666L554.667 149.333V384M256 85.333h341.333l256 256v512A85.333 85.333 0 0 1 768 938.667H256a85.333 85.333 0 0 1-85.333-85.334V170.667A85.038 85.038 0 0 1 256 85.333M640 768v-85.333H256V768h384m128-170.667V512H256v85.333h512z"/></svg>

After

Width:  |  Height:  |  Size: 379 B

+1
View File
@@ -0,0 +1 @@
<svg class="icon" viewBox="0 0 1024 1024" xmlns="http://www.w3.org/2000/svg" width="64" height="64"><defs><style/></defs><path d="M574.958 267.016h-63.454 204.649L511.213 63.655 307.85 267.016h141.191V456.68H258.688v125.917H449.04V772.95h125.917V582.596h188.875V456.679H574.958V267.016zm-63.704 693.33l189.62-187.396H323.126l188.129 187.395zM71.292 518.891l187.395 189.62v-377.75L71.292 518.892zm692.54-188.13v377.75L952.708 518.89 763.833 330.762z"/></svg>

After

Width:  |  Height:  |  Size: 457 B

+1
View File
@@ -0,0 +1 @@
<svg class="icon" viewBox="0 0 1024 1024" xmlns="http://www.w3.org/2000/svg" width="64" height="64"><defs><style/></defs><path d="M513 583.8l448.5-448.5c-11.6-4.7-24.3-7.3-37.5-7.3H100c-12.7 0-24.9 2.4-36.1 6.7L513 583.8z"/><path d="M513 674.3L14.6 175.9C5.3 191.1 0 208.9 0 228v568c0 55.2 44.8 100 100 100h824c55.2 0 100-44.8 100-100V228c0-18.5-5.1-35.9-13.9-50.8L513 674.3z"/></svg>

After

Width:  |  Height:  |  Size: 384 B

+1
View File
@@ -0,0 +1 @@
<svg class="icon" viewBox="0 0 1024 1024" xmlns="http://www.w3.org/2000/svg" width="64" height="64"><defs><style/></defs><path d="M770.56 460.8h250.88C998.4 220.16 803.84 25.6 563.2 2.56v250.88c104.96 20.48 186.88 102.4 207.36 207.36zM460.8 253.44V2.56C220.16 25.6 25.6 220.16 2.56 460.8h250.88c20.48-104.96 102.4-186.88 207.36-207.36zm102.4 517.12v250.88c243.2-23.04 435.2-217.6 460.8-460.8H773.12C750.08 668.16 668.16 750.08 563.2 770.56zM253.44 563.2H2.56c23.04 243.2 217.6 435.2 460.8 460.8V773.12C355.84 750.08 273.92 668.16 253.44 563.2zm0 0"/></svg>

After

Width:  |  Height:  |  Size: 556 B

+1
View File
@@ -0,0 +1 @@
<svg class="icon" viewBox="0 0 1024 1024" xmlns="http://www.w3.org/2000/svg" width="64" height="64"><defs><style/></defs><path d="M625.664 132.608v67.072h309.76v43.008h-309.76v69.632h309.76v43.008h-309.76v68.608h309.76v43.008h-309.76v68.608h309.76v43.008h-309.76v68.608h309.76v43.008h-309.76v68.096h309.76v43.008h-309.76v89.088H1024v-757.76H625.664zM0 914.944L577.024 1024V0L0 109.056"/><path d="M229.376 660.48h-89.6l118.272-187.904-112.64-180.736h92.16l65.536 119.808 67.584-119.808h89.088l-112.64 177.664L466.944 660.48h-93.696l-70.144-125.44-73.728 125.44z"/></svg>

After

Width:  |  Height:  |  Size: 569 B

+1
View File
@@ -0,0 +1 @@
<svg class="icon" viewBox="0 0 1024 1024" xmlns="http://www.w3.org/2000/svg" width="64" height="64"><defs><style/></defs><path d="M941.677 391.71c9.338-14.006 6.225-32.681-6.225-43.575-14.006-10.894-32.681-7.781-43.575 6.225-1.557 1.556-174.3 205.426-379.728 205.426-199.2 0-379.727-205.426-381.283-206.982-10.895-12.45-31.125-14.006-43.576-3.113-12.45 10.894-14.006 31.125-3.113 43.576 3.113 4.668 40.463 46.687 99.6 93.375l-79.37 82.482c-12.45 12.45-10.893 32.681 1.557 43.575 3.113 6.225 10.894 9.338 18.676 9.338 7.78 0 15.562-3.113 21.787-9.338l85.594-88.706c40.463 28.013 88.707 54.47 141.62 73.144l-32.682 110.495c-4.668 17.118 4.67 34.237 21.788 38.906h9.337c14.006 0 26.457-9.338 29.569-23.344l32.681-110.495c24.9 4.669 51.357 7.782 77.813 7.782s52.913-3.113 77.814-7.782l32.68 108.939c3.114 14.006 17.12 23.343 29.57 23.343 3.113 0 6.225 0 7.782-1.556 17.118-4.67 26.456-21.787 21.788-38.906L649.099 595.58c52.914-18.676 101.157-45.132 141.62-73.144l84.038 87.15c6.225 6.225 14.006 9.338 21.787 9.338 7.781 0 15.563-3.113 21.787-9.337 12.45-12.451 12.45-31.125 1.557-43.576l-79.37-82.481c63.808-46.689 101.16-91.82 101.16-91.82z"/></svg>

After

Width:  |  Height:  |  Size: 1.1 KiB

+1
View File
@@ -0,0 +1 @@
<svg class="icon" viewBox="0 0 1069 1024" xmlns="http://www.w3.org/2000/svg" width="66.813" height="64"><defs><style/></defs><path d="M746.028 190.084q-11.242 0-18.906-7.665t-12.775-17.884-7.664-20.95-2.555-17.884V0h2.044q9.197 0 17.373 2.044t19.928 9.708 28.615 21.462 42.411 36.279q27.593 24.527 43.944 41.39t25.038 28.614 10.73 19.928 2.044 14.308v16.35H746.028zm317.828 481.341q3.066 8.176 4.088 20.44t-10.22 23.504q-5.11 5.11-9.197 9.709t-7.154 7.665q-4.088 4.087-7.153 6.131l-86.867-85.844q6.132-5.11 13.797-12.264t12.774-11.241q12.264-11.242 26.571-9.709T1024 626.46q10.22 5.11 21.972 17.884t17.884 27.082zm-360.75 95.042q22.483 0 37.812-12.263l-198.26 206.435h-282.06q-19.416 0-42.41-11.242t-42.923-29.637-33.213-42.41-13.286-49.566V131.832q0-21.46 9.709-44.966t26.57-42.41 38.324-31.682T248.335 0h391.41v127.745q0 19.417 6.131 41.9t18.906 41.389 33.214 31.68 49.054 12.775h149.205v338.267L756.248 738.874q11.241-16.351 11.241-35.768 0-26.571-18.906-45.477t-45.477-18.906H319.872q-26.57 0-44.966 18.906t-18.395 45.477 18.395 44.966 44.966 18.395h383.234zM319.872 383.234q-26.57 0-44.966 18.906t-18.395 45.477 18.395 44.966 44.966 18.395h383.234q26.57 0 45.477-18.395t18.906-44.966-18.906-45.477-45.477-18.906H319.872zm385.278 512l13.285-13.286 25.549-25.549q15.33-15.33 33.725-34.235t36.79-37.302q43.944-43.944 99.13-98.108l85.844 85.845-99.13 99.13-36.79 36.79-33.725 33.725q-14.307 14.307-24.016 24.526t-10.73 11.242q-5.11 4.088-11.242 8.687t-12.263 7.664-18.906 7.665-26.06 8.687-25.55 7.153-18.394 4.088q-12.264 2.044-16.352-3.066t-2.044-17.373q1.022-6.132 4.088-18.395t7.154-25.038 7.665-24.016 5.62-15.33q6.132-13.285 16.352-23.504z"/></svg>

After

Width:  |  Height:  |  Size: 1.6 KiB

+1
View File
@@ -0,0 +1 @@
<svg class="icon" viewBox="0 0 1024 1024" xmlns="http://www.w3.org/2000/svg" width="64" height="64"><defs><style/></defs><path d="M871.424 61.44q18.432 0 34.816 6.656t28.672 18.944 19.456 28.672 7.168 35.84v720.896q0 38.912-25.088 64.512t-62.976 25.6h-721.92q-40.96 0-66.048-26.624t-25.088-66.56V150.528q0-35.84 24.576-62.464t65.536-26.624h720.896zm-237.568 768q18.432 0 26.624-8.704t8.192-23.04q0-13.312-8.192-22.528t-26.624-9.216h-62.464q1.024-2.048 1.024-6.144V251.904h63.488q18.432 0 25.6-9.216t7.168-22.528-7.168-22.528-25.6-9.216H386.048q-18.432 0-25.6 9.216t-7.168 22.528 7.168 22.528 25.6 9.216h57.344v507.904q0 2.048.512 3.072t.512 3.072h-56.32q-18.432 0-26.624 9.216t-8.192 22.528q0 14.336 8.192 23.04t26.624 8.704h245.76z"/></svg>

After

Width:  |  Height:  |  Size: 741 B

+1
View File
@@ -0,0 +1 @@
<svg class="icon" viewBox="0 0 1024 1024" xmlns="http://www.w3.org/2000/svg" width="32" height="32"><defs><style/></defs><path d="M666.298 824.087c-12.567-30.72-54.225-83.316-123.578-156.392-18.618-19.55-17.455-34.444-10.705-78.895v-5.12c4.421-30.487 12.101-48.407 114.501-64.698 52.131-8.146 65.63 12.567 84.713 41.425l6.284 9.542a101.004 101.004 0 0 0 51.432 41.658c9.077 4.19 20.248 9.31 35.375 17.92 36.77 20.248 36.77 43.288 36.77 94.022v5.818a215.273 215.273 0 0 1-41.425 139.637 472.436 472.436 0 0 1-152.203 88.203c27.927-52.363 6.516-114.502 0-132.422zM512 40.96a468.015 468.015 0 0 1 203.87 46.545 434.502 434.502 0 0 0-102.866 82.619c-7.448 10.24-13.731 19.781-19.782 28.625-19.55 29.556-29.091 42.822-46.546 44.916a200.844 200.844 0 0 1-33.745 0c-34.211-2.327-80.756-5.12-95.651 35.375-9.542 25.833-11.17 95.65 19.55 131.956a32.35 32.35 0 0 1 2.56 28.626 56.087 56.087 0 0 1-16.525 25.833 151.505 151.505 0 0 1-23.272-23.273 151.273 151.273 0 0 0-66.56-52.83c-10.008-2.792-21.178-5.12-31.884-7.447-30.254-6.283-64.233-13.498-72.145-30.487a119.156 119.156 0 0 1-5.819-46.545 175.476 175.476 0 0 0-11.17-74.008 70.982 70.982 0 0 0-44.451-39.563A469.644 469.644 0 0 1 512 40.96zM0 512A512 512 0 1 0 512 0 512 512 0 0 0 0 512z"/></svg>

After

Width:  |  Height:  |  Size: 1.2 KiB

+1
View File
@@ -0,0 +1 @@
<svg class="icon" viewBox="0 0 1088 1024" xmlns="http://www.w3.org/2000/svg" width="34" height="32"><defs><style/></defs><path d="M729.6 294.4c19.2 57.6 44.8 102.4 89.6 147.2 38.4-38.4 64-89.6 83.2-147.2H729.6zm-422.4 320h166.4l-83.2-224z"/><path d="M947.2 0h-768c-70.4 0-128 57.6-128 128v768c0 70.4 57.6 128 128 128h768c70.4 0 128-57.6 128-128V128c0-70.4-51.2-128-128-128zM633.6 825.6c-12.8 12.8-25.6 12.8-38.4 12.8-6.4 0-19.2 0-25.6-6.4s-12.8 0-12.8-6.4-6.4-12.8-12.8-25.6-6.4-19.2-12.8-32l-25.6-70.4h-224L256 768c-12.8 25.6-19.2 44.8-25.6 57.6-6.4 12.8-19.2 12.8-38.4 12.8-12.8 0-25.6-6.4-38.4-12.8-12.8-12.8-19.2-19.2-19.2-32 0-6.4 0-12.8 6.4-25.6s6.4-19.2 12.8-32l140.8-358.4c6.4-12.8 6.4-25.6 12.8-38.4s12.8-25.6 19.2-32 12.8-19.2 25.6-25.6c12.8-6.4 25.6-6.4 38.4-6.4 12.8 0 25.6 0 38.4 6.4 12.8 6.4 19.2 12.8 25.6 25.6 6.4 6.4 12.8 19.2 19.2 32 6.4 12.8 12.8 25.6 19.2 44.8l140.8 352c12.8 25.6 19.2 44.8 19.2 57.6-6.4 6.4-12.8 19.2-19.2 32zm352-249.6c-70.4-25.6-121.6-57.6-166.4-96-44.8 44.8-102.4 76.8-172.8 96l-19.2-32c70.4-19.2 128-44.8 172.8-89.6-44.8-44.8-83.2-102.4-96-166.4h-64v-25.6h172.8c-12.8-19.2-25.6-44.8-38.4-64l19.2-6.4c12.8 19.2 32 44.8 44.8 70.4h160v32h-64c-19.2 64-51.2 121.6-89.6 160 44.8 38.4 96 70.4 166.4 89.6l-25.6 32z"/></svg>

After

Width:  |  Height:  |  Size: 1.2 KiB

+1
View File
@@ -0,0 +1 @@
<svg class="icon" viewBox="0 0 1024 1024" xmlns="http://www.w3.org/2000/svg" width="64" height="64"><defs><style/></defs><path d="M818.247 412.327h-45.989v-70.992c0-152.308-123.463-275.779-275.778-275.779S220.698 189.027 220.698 341.335v70.992h-45.987c-25.379 0-45.988 20.566-45.988 45.987v455.407c0 25.428 20.56 45.989 45.988 45.989h643.536c25.377 0 45.988-20.56 45.988-45.989V458.314c-.045-25.42-20.611-45.987-45.988-45.987zm-137.915 0H312.625v-70.992c0-101.554 82.345-183.853 183.855-183.853 101.51 0 183.853 82.343 183.853 183.853v70.992h-.001zm0 0"/></svg>

After

Width:  |  Height:  |  Size: 561 B

+1
View File
@@ -0,0 +1 @@
<svg class="icon" viewBox="0 0 1024 1024" xmlns="http://www.w3.org/2000/svg" width="32" height="32"><defs><style/></defs><path d="M0 202.7V631c0 83.3 68.3 150.7 152.6 150.7h228.9l8 190.3 224.9-190.3h257c84.3 0 152.6-67.4 152.6-150.7V202.7C1024 119.4 955.7 52 871.4 52H152.6C68.3 52 0 119.4 0 202.7zm658.6 237.9c0-39.7 32.1-71.4 72.3-71.4 40.2 0 72.3 31.7 72.3 71.4S771 512 730.9 512c-40.2 0-72.3-31.7-72.3-71.4zm-220.9 0c0-39.7 32.1-71.4 72.3-71.4 40.2 0 72.3 31.7 72.3 71.4S550.1 512 510 512c-40.2 0-72.3-31.7-72.3-71.4zm-216.8 0c0-39.7 32.1-71.4 72.3-71.4 40.2 0 72.3 31.7 72.3 71.4S333.3 512 293.1 512c-40.1 0-72.2-31.7-72.2-71.4z"/></svg>

After

Width:  |  Height:  |  Size: 642 B

+1
View File
@@ -0,0 +1 @@
<svg class="icon" viewBox="0 0 1024 1024" xmlns="http://www.w3.org/2000/svg" width="32" height="32"><defs><style/></defs><path d="M463.3 958.3V772.1H228.8v-77.5h234.5v-80.5H228.8v-83.5H420L191.5 128h113.7L469 420.6c18.2 33.4 32.4 62.4 42.7 86.9 9-19.8 24.6-50.5 46.8-92.1L713.9 128h120.8L605.5 530.6h192.9v83.5H564.9v80.5h233.5v77.5H564.9v186.2H463.3z"/></svg>

After

Width:  |  Height:  |  Size: 360 B

+1
View File
@@ -0,0 +1 @@
<svg class="icon" viewBox="0 0 1024 1024" xmlns="http://www.w3.org/2000/svg" width="64" height="64"><defs><style/></defs><path d="M780.8 354.58H665.6v-42.89c0-72.31-19.85-193.3-153.6-193.3-138.87 0-153.6 135.05-153.6 193.3v42.89H243.2v-42.89C243.2 122.25 348.79 0 512 0s268.8 122.25 268.8 311.69v42.89zm-192 314.84c0-43.52-34.58-78.65-76.8-78.65s-76.8 35.13-76.8 78.65c0 29.46 15.4 54.47 38.44 67.82v89.64c0 21.74 17.25 39.7 38.4 39.7s38.4-17.96 38.4-39.7v-89.64c23-13.35 38.36-38.36 38.36-67.82zM896 512v393.61c0 65.26-51.87 118.39-115.2 118.39H243.2c-63.291 0-115.2-53.13-115.2-118.39V512c0-65.22 51.87-118.39 115.2-118.39h537.6c63.33 0 115.2 53.17 115.2 118.39z"/></svg>

After

Width:  |  Height:  |  Size: 673 B

+1
View File
@@ -0,0 +1 @@
<svg class="icon" viewBox="0 0 1024 1024" xmlns="http://www.w3.org/2000/svg" width="64" height="64"><defs><style/></defs><path d="M780.108 761.059c54.451 60.351 87.706 138.983 87.706 225.358 0 12.015-.659 23.882-1.902 35.581h-71.955c1.589-11.675 2.695-23.493 2.695-35.581 0-71.578-29.094-136.386-76.189-185.002C658.778 836.02 587.76 855.95 512 855.95c-75.689 0-146.65-19.888-208.294-54.432-47.129 48.604-76.358 113.305-76.358 184.9 0 12.088 1.105 23.906 2.695 35.581h-71.955a336.63 336.63 0 0 1-1.902-35.581c0-86.366 33.19-165.055 87.587-225.446-96.765-78.277-158.75-197.84-158.75-331.998C85.023 193.163 276.188 2.001 512 2.001s426.977 191.162 426.977 426.972c0 134.211-62.037 253.812-158.869 332.086zM512 295.787c-196.511 0-355.814-80.302-355.814 122.251 0 202.551 159.303 366.749 355.814 366.749s355.814-164.199 355.814-366.749c0-202.553-159.303-122.251-355.814-122.251zm166.047 204.349c-26.2 0-47.442-21.24-47.442-47.442 0-26.197 21.242-47.442 47.442-47.442 26.202 0 47.442 21.244 47.442 47.442-.001 26.202-21.24 47.442-47.442 47.442zm-23.721 130.465c0 32.754-63.722 59.302-142.326 59.302s-142.326-26.549-142.326-59.302c0-8.445 4.376-16.446 12.017-23.719 21.98 20.927 71.979 35.579 130.309 35.579s108.329-14.652 130.309-35.579c7.64 7.273 12.017 15.274 12.017 23.719zM345.953 500.136c-26.202 0-47.442-21.24-47.442-47.442 0-26.197 21.24-47.442 47.442-47.442 26.2 0 47.442 21.244 47.442 47.442 0 26.202-21.242 47.442-47.442 47.442z"/></svg>

After

Width:  |  Height:  |  Size: 1.4 KiB

+1
View File
@@ -0,0 +1 @@
<svg class="icon" viewBox="0 0 1024 1024" xmlns="http://www.w3.org/2000/svg" width="32" height="32"><defs><style/></defs><path d="M765.184 873.941c0 33.28-28.501 60.288-63.83 60.288H63.83C28.501 934.23 0 907.221 0 873.941c0-120.576 123.264-233.258 249.216-277.674-72.79-42.496-121.728-118.059-121.728-204.8v-60.331c0-133.248 114.347-241.365 255.147-241.365S637.78 197.888 637.78 331.136v60.288c0 86.827-48.981 162.304-121.728 204.843 125.91 44.458 249.131 157.098 249.131 277.674z"/><path d="M848.256 870.57h126.933c27.008 0 48.811-20.65 48.811-46.08 0-92.245-94.293-178.346-190.55-212.309 55.638-32.512 93.1-90.282 93.1-156.672v-46.165c0-101.888-87.425-184.576-195.115-184.576a207.25 207.25 0 0 0-39.126 3.712c15.488 31.147 24.15 65.92 24.15 102.613v60.288c0 86.827-24.448 152.747-88.534 204.843 118.742 29.141 218.496 154.795 220.331 274.347z"/></svg>

After

Width:  |  Height:  |  Size: 853 B

+1
View File
@@ -0,0 +1 @@
<svg class="icon" viewBox="0 0 1024 1024" xmlns="http://www.w3.org/2000/svg" width="64" height="64"><defs><style/></defs><path d="M273.51 480.174l-1.198-3.727-.972-4.844-.646-2.652v-10.926l1.158-4.3 1.177-4.547 1.557-4.772 2.099-5.315 2.754-5.52 3.892-5.529v-3.87l.378-3.625.605-4.926 1.669-5.54 1.536-5.98 1.229-2.744 1.413-2.56 1.822-2.847 1.987-2.12v-13.67l1.147-7.045 1.157-8.182 2.058-9.79 2.837-10.188 2.11-5.601 2.088-6.093 2.294-5.683 2.744-6.093 2.796-6.666 3.215-6.247 3.615-6.666 4.557-6.656 2.109-3.82 2.243-3.123 4.884-7.045 5.028-7.025 5.704-7.229 6.113-7.035 6.635-6.932 6.923-7.127 8.376-7.69 5.314-4.68 6.482-5.049 6.574-4.454 7.107-4.28 6.83-3.81 7.7-3.154 8.182-3.88 8.13-2.663 8.111-2.765 8.765-2.744 8.756-2.089 9.205-1.74 9.34-1.506 9.215-1.229 9.206-1.26 9.82-.532h29.01l9.667 1.219 9.717 1.157 9.902 1.034 9.196 2.212 9.708 2.068 9.113 2.376 9.984 2.652 9.134 3.236 8.745 3.697 9.339 3.911 8.52 4.27 8.284 4.752 8.12 5.232 6.994 4.864 3.246 2.745 3.4 2.007 6.492 5.509 5.468 5.325 5.458 5.509 5.315 6.082 4.382 5.899 5.223 6.092 3.635 6.544 3.686 5.816 3.912 6.769 3.246 5.888 5.458 12.462 2.683 6.44 2.1 5.97 2.098 6.483 1.885 6.092 1.31 5.243 1.7 6.165 2.98 11.008 1.905 9.636 1.239 9.318 1.065 7.496 1.679 11.417.379 1.813 1.341 2.058 3.615 5.909 2.324 4.003 2.059 4.168 2.621 4.465 2.314 5.355 1.506 5.479 1.638 6.01 1.24 6.165.562 3.031.523 3.738v3.246l-.523 3.215v4.004l-.942 3.88-1.72 7.517-1.976 3.799-1.465 4.27v1.065l.697 1.321 1.966 3.123 8.56 12.667 6.759 9.513 3.236 6.349 4.362 6.953 3.799 7.618 4.383 8.141 4.382 9.155 4.936 10.363 2.785 6.348 2.54 6.206 2.191 6.543 2.16 5.888 1.65 6.185 1.679 5.806 2.12 11.326 1.679 11.57 1.157 10.261v14.48l-.778 5.13-1.106 8.858-1.516 7.956-2.355 7.22-.88 2.938-1.65 3.543-1.371 2.468-1.844 3.041-1.618 1.915-2.058 2.478-1.843 1.997-1.966 1.71-2.355 1.034-2.12 1.035-1.74.573h-2.664l-1.7-.573-3.236-1.598-1.485-1.065-1.556-1.116-1.7-1.526-1.72-1.71-2.837-3.154-3.358-4.454-2.642-4.598-2.642-3.676-2.58-4.28-3.636-7.598-4.086-7.906-.481-.276h-.676l-1.659 1.239-.962 2.079-1.598 2.58-2.785 7.68-4.198 10.926-5.376 13.148-4.045 6.554-4.24 6.84-5.038 7.69-5.345 7.527-2.734 3.41-3.318 3.717-7.629 7.496.666.675 1.034 1.076 3.81 2.232 15.872 7.629 6.922 3.901 6.605 3.789 6.533 4.772 5.826 4.915 2.816 2.222 2.12 2.56 2.181 2.97 1.802 3.215.973 2.673 1.188 3.205.512 2.775.563 3.236-.563 2.17v2.202l-.512 2.273-1.188 2.08-.45 1.627-1.086 1.977-2.877 3.922-2.663 3.143-2.058 2.355-1.72 1.741-4.383 3.195-4.956 2.785-5.284 2.663-5.663 2.56-6.318 2.478-3.4 1.034-2.98.84-7.341 1.71-7.578 1.628-7.619 1.618-8.284 1.352-8.54.358-8.755 1.055h-27.177l-9.8-.574-9.124-.84-9.84-1.351-9.759-1.044-10.28-1.434-9.964-2.478-9.718-1.874-9.657-2.765-9.902-3.543-9.717-2.929-5.12-1.71-4.547-1.618-2.877-1.116-2.857-.604h-8.08l-9.339-.655-4.72-.482-6.083-.675-3.901 3.532-5.325 3.328-7.22 3.513-7.986 4.382-4.854 2.376-5.069 1.884-11.192 4.578-6.083 1.525-6.38 1.72-8.847 1.721-5.54.43-5.857.502-6.113.676-7.117.266H375.84l-16.415-.266-15.944-1.608-8.069-1.147-7.792-1.157-7.588-1.137-7.588-1.525-7.076-2.284-7.035-1.628-6.349-2.55-6-2.376-5.602-2.672-4.864-2.919-4.823-3.553-1.648-1.72-2.16-2.079-1.64-1.812-1.474-2.09-1.362-2.078-1.054-2.1-1.526-4.454-.533-2.304-.676-2.56v-2.365l.676-2.673v-2.652l.533-2.652v-5.356l.256-2.826 1.27-3.236 1.054-3.235 1.915-3.902 1.403-1.505 1.157-1.741 3.02-3.697 2.407-1.904 2.274-1.331 2.099-1.69 3.318-1.055 2.662-1.618 3.318-1.71 3.778-1.136 3.8-1.158 4.403-.962 4.167-.553 4.946-.645 5.366-.41 1.393-.46h.307l.676-.574v-.655l-.983-1.332-2.847-1.351-7.117-6.165-4.782-3.809-5.53-4.844-5.57-5.417-5.796-6.922-6.677-7.803-2.488-4.219-3.297-4.362-2.847-5.038-2.56-5.509-3.45-5.243-2.254-5.98-2.682-5.97-2.683-6.656-1.946-6.38-1.853-7.884-.553-.287h-.564l-.286-.563h-.686l-1.127.563-.563.287-.778 1.32-.277 1.608-.583 1.434-1.014 2.386-3.256 5.796-1.69 3.512-2.683 3.062-2.847 3.686-3.143 4.086-3.318 3.625-3.901 3.512-3.605 3.298-3.994 2.621-4.362 2.734-4.198 1.628-4.946 1.24-4.854.47h-1.147l-1.116-.47-.88-1.926-1.424-.942-1.864-4.567-1.167-2.468-1.25-3.543-1.033-3.676-.553-3.625-1.536-8.253-.584-4.864V635.72l.584-11.91.962-6.082 1.127-6.267 1.034-6.748 1.833-6.277 2.058-7.23 2.12-7.045 2.836-7.25 2.673-6.912 3.696-7.014 3.43-7.608 4.2-7.138 4.935-7.7 5.017-6.922 5.243-7.7 4.373-5.367 5.601-6.144 5.898-6.195 2.745-2.949 3.328-3.318 4.833-4.188 4.966-4.27 8.08-7.24 6.093-4.454z"/></svg>

After

Width:  |  Height:  |  Size: 4.3 KiB

+1
View File
@@ -0,0 +1 @@
<svg class="icon" viewBox="0 0 1024 1024" xmlns="http://www.w3.org/2000/svg" width="32" height="32"><defs><style/></defs><path d="M347.136 783.36q19.456 0 36.864 7.168t30.72 19.968 20.48 30.208 7.168 36.864-7.168 36.864-20.48 30.208T384 965.12t-36.864 7.68q-20.48 0-37.376-7.68t-30.208-20.48-20.48-30.208-7.168-36.864 7.168-36.864 20.48-30.208 30.208-19.968 37.376-7.168zm425.984 2.048q19.456 0 37.376 7.168t30.72 19.968 20.48 30.208 7.68 36.864-7.68 36.864-20.48 30.208-30.72 20.48-37.376 7.68-36.864-7.68-30.208-20.48-20.48-30.208-7.68-36.864 7.68-36.864 20.48-30.208 30.208-19.968 36.864-7.168zm172.032-581.632q28.672 0 44.544 7.68t22.528 18.944 6.144 24.064-3.584 22.016-12.8 37.888-22.016 62.976-24.064 68.096-17.92 53.248q-13.312 40.96-33.792 56.832t-50.176 15.872h-537.6l15.36 92.16h516.096q49.152 0 49.152 41.984 0 20.48-9.728 35.328t-38.4 14.848H312.32q-20.48 0-34.304-9.216t-23.04-24.064-14.848-32.256-8.704-32.768q-1.024-6.144-5.632-29.696t-11.264-58.88-14.848-78.848-16.384-87.552q-19.456-103.424-44.032-230.4h-76.8q-15.36 0-25.6-7.68T19.968 145.92t-9.216-23.04-2.56-22.528q0-20.48 13.824-33.792t37.376-13.312h103.424q20.48 0 32.768 6.144t19.456 15.36 10.24 19.456 5.12 17.408q2.048 8.192 4.096 23.04t4.096 30.208q3.072 18.432 6.144 38.912h700.416z"/></svg>

After

Width:  |  Height:  |  Size: 1.2 KiB

+1
View File
@@ -0,0 +1 @@
<svg class="icon" viewBox="0 0 1024 1024" xmlns="http://www.w3.org/2000/svg" width="64" height="64"><defs><style/></defs><path d="M565.273 34.627L677.369 272.17c8.706 18.32 25.411 31.051 44.823 33.996l250.776 38.081c48.698 7.411 68.225 70.046 32.934 105.98L824.407 635.164c-13.998 14.23-20.352 34.815-17.059 54.935l42.82 261.127c8.346 50.696-42.643 89.452-86.226 65.519L539.634 893.474c-17.286-9.526-37.992-9.526-55.278 0l-224.314 123.27c-43.583 23.934-94.572-14.822-86.22-65.518L216.638 690.1c3.32-20.12-3.089-40.705-17.087-54.935L18.11 450.227c-35.285-35.934-15.818-98.574 32.934-105.98l250.75-38.081c19.35-2.94 36.082-15.675 44.756-33.996L458.673 34.627c21.825-46.168 84.836-46.168 106.6 0z"/></svg>

After

Width:  |  Height:  |  Size: 702 B

+1
View File
@@ -0,0 +1 @@
<svg class="icon" viewBox="0 0 1024 1024" xmlns="http://www.w3.org/2000/svg" width="64" height="64"><defs><style/></defs><path d="M622.277 39.385H401.723c-13.785 0-23.63 11.815-23.63 25.6v49.23c0 13.785 11.815 25.6 23.63 25.6h220.554c13.785 0 23.63-11.815 23.63-25.6v-49.23c1.97-13.785-9.845-25.6-23.63-25.6zm336.738 0H738.462c-13.785 0-25.6 11.815-25.6 25.6v49.23c0 13.785 11.815 25.6 25.6 25.6h220.553c13.785-1.969 25.6-11.815 25.6-25.6v-49.23c0-13.785-11.815-25.6-25.6-25.6zm0 165.415H334.77c-13.784 0-25.6-11.815-25.6-25.6V64.985c0-13.785-11.815-25.6-25.6-25.6H64.985c-13.785 0-25.6 11.815-25.6 25.6v896c0 11.815 11.815 23.63 25.6 23.63h894.03c13.785 0 25.6-11.815 25.6-25.6V230.4c0-13.785-11.815-25.6-25.6-25.6z"/></svg>

After

Width:  |  Height:  |  Size: 725 B

+1
View File
@@ -0,0 +1 @@
<svg class="icon" viewBox="0 0 1024 1024" xmlns="http://www.w3.org/2000/svg" width="64" height="64"><defs><style/></defs><path d="M67.04 100.41h889.919v200.232H67.039V100.411zm0 244.729h266.976v266.975H67.039V345.14zm0 311.471h266.976v266.977H67.039V656.611zm311.471-311.471h266.977v266.975H378.51V345.14zm0 311.471h266.977v266.977H378.51V656.611zm311.472-311.471H956.96v266.975H689.983V345.14zm0 311.471H956.96v266.977H689.983V656.611z"/><path d="M67.04 100.41h889.919v200.232H67.039V100.411zm0 244.729h266.976v266.975H67.039V345.14zm0 311.471h266.976v266.977H67.039V656.611zm311.471-311.471h266.977v266.975H378.51V345.14zm0 311.471h266.977v266.977H378.51V656.611zm311.472-311.471H956.96v266.975H689.983V345.14zm0 311.471H956.96v266.977H689.983V656.611z"/></svg>

After

Width:  |  Height:  |  Size: 763 B

+1
View File
@@ -0,0 +1 @@
<svg class="icon" viewBox="0 0 1024 1024" xmlns="http://www.w3.org/2000/svg" width="64" height="64"><defs><style/></defs><path d="M1004.094 321.092L762.737 79.735a68.267 68.267 0 0 0-96.546 0l-30.293 30.294a68.284 68.284 0 0 1-48.265 20.002H436.44a68.181 68.181 0 0 1-48.265-20.002l-30.293-30.294a68.267 68.267 0 0 0-96.546 0L19.962 321.092a68.267 68.267 0 0 0 0 96.546l96.546 96.547a67.84 67.84 0 0 0 66.645 17.271c10.804-3.072 21.675 4.181 21.675 15.411V896c0 37.547 30.72 68.267 68.267 68.267H750.96c37.547 0 68.267-30.72 68.267-68.267V546.867c0-11.23 10.872-18.483 21.675-15.411a67.84 67.84 0 0 0 66.645-17.271l96.546-96.547a68.267 68.267 0 0 0 0-96.546z"/></svg>

After

Width:  |  Height:  |  Size: 667 B

+1
View File
@@ -0,0 +1 @@
<svg class="icon" viewBox="0 0 1024 1024" xmlns="http://www.w3.org/2000/svg" width="64" height="64"><defs><style/></defs><path d="M504.951 511.98c93.49 0 169.28-74.002 169.28-165.26 0-91.276-75.79-165.248-169.28-165.248-93.486 0-169.287 73.972-169.279 165.248-.001 91.258 75.793 165.26 169.28 165.26zm77.6 55.098H441.466c-120.767 0-218.678 95.564-218.678 213.45V794.3c0 48.183 97.911 48.229 218.678 48.229H582.55c120.754 0 218.66-1.78 218.66-48.229v-13.77c0-117.887-97.898-213.45-218.66-213.45z"/></svg>

After

Width:  |  Height:  |  Size: 503 B

+1
View File
@@ -0,0 +1 @@
<svg class="icon" viewBox="0 0 1024 1024" xmlns="http://www.w3.org/2000/svg" width="64" height="64"><defs><style/></defs><path d="M669.03 317.396c10.18 0 20.235.748 30.237 1.865C672.1 192.728 536.831 98.731 382.415 98.731 209.797 98.73 68.38 216.39 68.38 365.797c0 86.242 47.044 157.061 125.674 211.988l-31.406 94.468L272.403 617.2c39.303 7.781 70.81 15.765 110.01 15.765 9.85 0 19.626-.482 29.324-1.243-6.144-20.996-9.698-42.983-9.698-65.793.002-137.196 117.806-248.533 266.99-248.533zm-168.862-85.14c23.639 0 39.302 15.55 39.302 39.186 0 23.536-15.664 39.3-39.302 39.3-23.536 0-47.147-15.765-47.147-39.3 0-23.635 23.612-39.185 47.147-39.185zm-219.765 78.487c-23.538 0-47.3-15.765-47.3-39.3 0-23.635 23.764-39.185 47.3-39.185 23.534 0 39.2 15.55 39.2 39.185 0 23.535-15.666 39.3-39.2 39.3z"/><path d="M955.618 562.147c0-125.543-125.622-227.882-266.734-227.882-149.413 0-267.09 102.339-267.09 227.882 0 125.77 117.677 227.88 267.09 227.88 31.279 0 62.838-7.898 94.243-15.766l86.12 47.17-23.612-78.473c63.04-47.286 109.983-109.993 109.983-180.81zm-353.311-39.289c-15.639 0-31.431-15.549-31.431-31.416 0-15.652 15.792-31.405 31.43-31.405 23.74 0 39.304 15.754 39.304 31.405 0 15.867-15.563 31.416-39.303 31.416zm172.72 0c-15.538 0-31.201-15.549-31.201-31.416 0-15.652 15.664-31.405 31.202-31.405 23.536 0 39.3 15.754 39.3 31.405.001 15.867-15.764 31.416-39.3 31.416z"/></svg>

After

Width:  |  Height:  |  Size: 1.3 KiB

+1
View File
@@ -0,0 +1 @@
<svg class="icon" viewBox="0 0 1024 1024" xmlns="http://www.w3.org/2000/svg" width="200" height="200"><defs><style/></defs><path d="M619.364 933.396c1.373.064 2.682.192 4.055.192H932.71a65.67 65.67 0 0 0 65.606-65.606V150.974a65.67 65.67 0 0 0-65.606-65.606H623.419c-1.373 0-2.714.128-4.055.191V-.03L15.691 80.546V938.95l603.673 82.655v-88.21zm0-810.101c1.341-.192 2.682-.415 4.055-.415H932.71c15.516 0 28.126 12.61 28.126 28.126v717.008a28.158 28.158 0 0 1-28.126 28.126H623.419c-1.373 0-2.714-.224-4.055-.415V123.327zM248.33 605.429l-143.919-3.671v-23.402l86.869-133.255v-1.181l-78.92 1.308v-36.043l134.565-3.512v26.083l-87.507 133.735v1.149l88.912 1.405v37.352zm72.406 1.852l-44.759-1.15V404.94l44.76-1.15v203.492zm171.087-92.966c-16.665 15.356-41.151 22.06-69.341 21.868a113.813 113.813 0 0 1-16.122-1.053v74.354l-46.1-1.182V405.514c14.238-2.81 34.383-5.172 63.18-5.939 29.498-.766 50.793 4.31 65.19 15.293 13.888 10.44 23.306 27.966 23.306 48.845s-7.12 38.63-20.08 50.602zm-65.925-79.175a80.132 80.132 0 0 0-19.538 2.203v61.392c4.022.926 8.97 1.213 15.834 1.213 25.381-.032 41.216-12.898 41.216-34.479 0-19.379-13.632-30.712-37.48-30.297zM732.22 138.906h73.524v30.33H732.22v-30.33zm-73.556 45.398h73.524v30.36h-73.524v-30.36zm73.556 49.676h73.524v30.36H732.22v-30.36zm0 95.903h73.524v30.329H732.22v-30.33zm-73.556-48.718h73.524v30.329h-73.524v-30.329zm72.822 376.142a72.79 72.79 0 0 0 72.789-72.82L790.835 462.5c0-40.226-19.156-72.821-59.381-72.821s-59.35 32.595-59.35 72.821l-13.472 121.986a72.79 72.79 0 0 0 72.822 72.821zm-24.104-133.862h48.207v101.841h-48.207v-101.84z"/></svg>

After

Width:  |  Height:  |  Size: 1.5 KiB

+54019 -1
View File
File diff suppressed because one or more lines are too long
+4
View File
@@ -0,0 +1,4 @@
{
"/js/app.js": "/js/app.js",
"/css/app.css": "/css/app.css"
}
+87
View File
@@ -0,0 +1,87 @@
<template>
<div class="content">
<nav class="navbar navbar-default navbar-static-top">
<div class="container">
<div class="navbar-header">
<!-- Collapsed Hamburger -->
<button type="button" class="navbar-toggle collapsed" data-toggle="collapse"
data-target="#app-navbar-collapse">
<span class="sr-only">Toggle Navigation</span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<!-- Branding Image -->
<a class="navbar-brand" href="#">
Vue Spa
</a>
</div>
<div class="collapse navbar-collapse" id="app-navbar-collapse">
<!-- Left Side Of Navbar -->
<ul class="nav navbar-nav">
&nbsp;
</ul>
<!-- Right Side Of Navbar -->
<ul class="nav navbar-nav navbar-right">
<!-- Authentication Links -->
<template v-if="isLoggedIn">
<li class="dropdown">
<a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button"
aria-expanded="false">
{{authUser.name}}<span class="caret"></span>
</a>
<ul class="dropdown-menu" role="menu">
<li>
<a href="javascript:void(0);" v-on:click="logout">
Logout
</a>
</li>
</ul>
</li>
</template>
<template v-else>
<li>
<router-link to="/">Login</router-link>
</li>
<li>
<router-link to="signup">Register</router-link>
</li>
</template>
</ul>
</div>
</div>
</nav>
<router-view></router-view>
</div>
</template>
<script>
import * as MutationTypes from './store/auth/MutationTypes';
export default {
computed: {
authUser() {
return this.$store.getters.authUser;
},
isLoggedIn() {
return this.$store.getters.isLoggedIn;
},
authToken() {
return this.$store.getters.authToken;
}
},
mounted() {
},
methods: {
logout(event) {
let component = this;
component.$store.dispatch(MutationTypes.LOGOUT);
component.$router.push('/');
}
}
}
</script>
+19 -8
View File
@@ -1,22 +1,33 @@
/**
* First we will load all of this project's JavaScript dependencies which
* includes Vue and other libraries. It is a great starting point when
* building robust, powerful web applications using Vue and Laravel.
*/
require('./bootstrap');
window.Vue = require('vue');
/*
window.Vue = require('vue');*/
/**
* Next, we will create a fresh Vue application instance and attach it to
* the page. Then, you may begin adding components to this application
* or customize the JavaScript scaffolding to fit your unique needs.
*/
require('./bootstrap');
import Vue from "vue";
import router from "./router";
import App from "./App.vue";
import VueResource from "vue-resource";
import {store} from './store';
import './utils/interceptors';
Vue.component('example-component', require('./components/ExampleComponent.vue'));
Vue.config.productionTip = false;
Vue.use(VueResource);
const app = new Vue({
el: '#app'
});
/* eslint-disable no-new */
new Vue({
el: '#app',
store,
router,
template: '<App/>',
components: {App}
});
Binary file not shown.

After

Width:  |  Height:  |  Size: 160 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 96 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.7 KiB

File diff suppressed because one or more lines are too long
@@ -0,0 +1,199 @@
/* eslint-disable */
(function (root, factory) {
if (typeof define === 'function' && define.amd) {
// AMD. Register as an anonymous module.
define(['exports', 'echarts'], factory);
} else if (typeof exports === 'object' && typeof exports.nodeName !== 'string') {
// CommonJS
factory(exports, require('echarts'));
} else {
// Browser globals
factory({}, root.echarts);
}
}(this, function (exports, echarts) {
var log = function (msg) {
if (typeof console !== 'undefined') {
console && console.error && console.error(msg);
}
};
if (!echarts) {
log('ECharts is not Loaded');
return;
}
var colorPalette = [
'#2ec7c9','#b6a2de','#5ab1ef','#ffb980','#d87a80',
'#8d98b3','#e5cf0d','#97b552','#95706d','#dc69aa',
'#07a2a4','#9a7fd1','#588dd5','#f5994e','#c05050',
'#59678c','#c9ab00','#7eb00a','#6f5553','#c14089'
];
var theme = {
color: colorPalette,
title: {
textStyle: {
fontWeight: 'normal',
color: '#008acd'
}
},
visualMap: {
itemWidth: 15,
color: ['#5ab1ef','#e0ffff']
},
toolbox: {
iconStyle: {
normal: {
borderColor: colorPalette[0]
}
}
},
tooltip: {
backgroundColor: 'rgba(50,50,50,0.5)',
axisPointer : {
type : 'line',
lineStyle : {
color: '#008acd'
},
crossStyle: {
color: '#008acd'
},
shadowStyle : {
color: 'rgba(200,200,200,0.2)'
}
}
},
dataZoom: {
dataBackgroundColor: '#efefff',
fillerColor: 'rgba(182,162,222,0.2)',
handleColor: '#008acd'
},
grid: {
borderColor: '#eee'
},
categoryAxis: {
axisLine: {
lineStyle: {
color: '#008acd'
}
},
splitLine: {
lineStyle: {
color: ['#eee']
}
}
},
valueAxis: {
axisLine: {
lineStyle: {
color: '#008acd'
}
},
splitArea : {
show : true,
areaStyle : {
color: ['rgba(250,250,250,0.1)','rgba(200,200,200,0.1)']
}
},
splitLine: {
lineStyle: {
color: ['#eee']
}
}
},
timeline : {
lineStyle : {
color : '#008acd'
},
controlStyle : {
normal : { color : '#008acd'},
emphasis : { color : '#008acd'}
},
symbol : 'emptyCircle',
symbolSize : 3
},
line: {
smooth : true,
symbol: 'emptyCircle',
symbolSize: 3
},
candlestick: {
itemStyle: {
normal: {
color: '#d87a80',
color0: '#2ec7c9',
lineStyle: {
color: '#d87a80',
color0: '#2ec7c9'
}
}
}
},
scatter: {
symbol: 'circle',
symbolSize: 4
},
map: {
label: {
normal: {
textStyle: {
color: '#d87a80'
}
}
},
itemStyle: {
normal: {
borderColor: '#eee',
areaColor: '#ddd'
},
emphasis: {
areaColor: '#fe994e'
}
}
},
graph: {
color: colorPalette
},
gauge : {
axisLine: {
lineStyle: {
color: [[0.2, '#2ec7c9'],[0.8, '#5ab1ef'],[1, '#d87a80']],
width: 10
}
},
axisTick: {
splitNumber: 10,
length :15,
lineStyle: {
color: 'auto'
}
},
splitLine: {
length :22,
lineStyle: {
color: 'auto'
}
},
pointer : {
width : 5
}
}
};
echarts.registerTheme('macarons', theme);
}));
-1
View File
@@ -10,7 +10,6 @@ window.Popper = require('popper.js').default;
try {
window.$ = window.jQuery = require('jquery');
require('bootstrap');
} catch (e) {}
@@ -0,0 +1,9 @@
<script>
export default {
beforeCreate () {
if (!store.state.isLogged) {
router.push('/login')
}
}
}
</script>
@@ -2,7 +2,7 @@
<div class="container">
<div class="row justify-content-center">
<div class="col-md-8">
<div class="card card-default">
<div class="card">
<div class="card-header">Example Component</div>
<div class="card-body">
+46
View File
@@ -0,0 +1,46 @@
<template>
<div class="row">
<div class="col-md-8 col-md-offset-2">
<div class="panel panel-default">
<div class="panel-heading">Dashboard</div>
<div class="panel-body"></div>
</div>
</div>
</div>
</template>
<script>
import axios from 'axios';
export default {
data(){
return {
apiStatus: '',
message: '',
authenticate: {
email: '',
password: ''
}
}
},
mounted() {
},
methods: {
login(){
let authenticate = {
email: this.authenticate.email,
password: this.authenticate.password
};
let component = this;
axios.post('/api/login', authenticate)
.then(function (response) {
if (response.data.meta.status === "fail") {
component.message = response.data.meta.message;
component.apiStatus = response.data.meta.status;
}
}, function (response) {
console.log(response);
});
}
}
}
</script>
+103
View File
@@ -0,0 +1,103 @@
<template>
<div class="row">
<div class="col-md-8 col-md-offset-2">
<div class="panel panel-default">
<div class="panel-heading">Login</div>
<div class="panel-body">
<form class="form-horizontal" method="POST" action="#" @submit.prevent="login">
<div class="form-group">
<label for="email" class="col-md-4 control-label">E-Mail Address</label>
<div class="col-md-6">
<input id="email" type="email" class="form-control" name="email" required autofocus
v-model="authenticate.email">
</div>
</div>
<div class="form-group">
<label for="password" class="col-md-4 control-label">Password</label>
<div class="col-md-6">
<input id="password" type="password" class="form-control" name="password" required
v-model="authenticate.password">
</div>
</div>
<div class="form-group">
<div class="col-md-6 col-md-offset-4">
<div class="checkbox">
<label>
<input type="checkbox" name="remember"> Remember Me
</label>
</div>
</div>
</div>
<div class="form-group">
<div class="col-md-8 col-md-offset-4">
<button type="submit" class="btn btn-primary" id="btnLogin"
data-loading-text="<i class='glyphicon glyphicon-refresh glyphicon-refresh-animate'></i> Login">
Login
</button>
<a class="btn btn-link" href="#">
Forgot Your Password?
</a>
</div>
</div>
<div class="form-group text-center">
<p v-if="apiStatus == 'fail'" class="c-red m-b-0 font-15">
{{message}}
</p>
</div>
</form>
</div>
</div>
</div>
</div>
</template>
<script>
import axios from 'axios';
import * as MutationTypes from '../store/auth/MutationTypes';
export default {
data() {
return {
apiStatus: '',
message: '',
authenticate: {
email: '',
password: ''
}
}
},
mounted() {
},
methods: {
login() {
let authenticate = {
email: this.authenticate.email,
password: this.authenticate.password
};
let component = this;
$("#btnLogin").button('loading');
axios.post('/api/login', authenticate)
.then(function (response) {
// console.log(response);
$("#btnLogin").button('reset');
if (response.data.meta.status === "ok") {
component.$store.dispatch(MutationTypes.SAVE_USER, response);
component.$router.push('home');
} else {
component.message = response.data.meta.message;
component.apiStatus = response.data.meta.status;
}
}, function (response) {
console.log(response);
});
}
}
}
</script>
+12
View File
@@ -0,0 +1,12 @@
<script>
import router from '../router'
import store from '../store'
export default {
name: 'logout',
mounted () {
localStorage.removeItem('token')
store.commit('LOGOUT_USER')
router.push('login')
}
}
</script>
+114
View File
@@ -0,0 +1,114 @@
<template>
<div class="row">
<div class="col-md-8 col-md-offset-2">
<div class="panel panel-default">
<div class="panel-heading">Register</div>
<div class="panel-body">
<form class="form-horizontal" method="POST" action="#" @submit.prevent="register">
<div class="form-group">
<label for="name" class="col-md-4 control-label">Name</label>
<div class="col-md-6">
<input id="name" type="text" class="form-control" name="name" required autofocus
v-model="user.name">
</div>
</div>
<div class="form-group">
<label for="email" class="col-md-4 control-label">E-Mail Address</label>
<div class="col-md-6">
<input id="email" type="email" class="form-control" name="email" required
v-model="user.email">
</div>
</div>
<div class="form-group">
<label for="password" class="col-md-4 control-label">Password</label>
<div class="col-md-6">
<input id="password" type="password" class="form-control" name="password" required
v-model="user.password">
</div>
</div>
<div class="form-group">
<label for="password-confirm" class="col-md-4 control-label">Confirm Password</label>
<div class="col-md-6">
<input id="password-confirm" type="password" class="form-control"
name="password_confirmation" required v-model="user.confirm_password">
</div>
</div>
<div class="form-group">
<div class="col-md-6 col-md-offset-4">
<button type="submit" class="btn btn-primary">
Register
</button>
</div>
</div>
<div class="form-group text-center">
<p v-if="apiStatus == 'fail'" class="c-red m-b-0 font-15">
{{message}}
</p>
</div>
</form>
</div>
</div>
</div>
<div class="modal fade" id="reg-success" role="dialog">
<div class="modal-dialog">
<!-- Modal content-->
<div class="modal-content size">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal">&times;</button>
<h4 class="modal-title">Message</h4>
</div>
<div class="modal-body text-center">
<h4>{{message}}</h4>
</div>
</div>
</div>
</div>
</div>
</template>
<script>
import axios from 'axios';
export default {
data(){
return {
apiStatus: '',
message: '',
user: {
name: '',
email: '',
password: '',
confirm_password: ''
}
}
},
mounted() {
},
methods: {
register(){
let component = this;
axios.post('/api/register', this.user)
.then(function (response) {
component.message = response.data.meta.message;
component.apiStatus = response.data.meta.status;
if (response.data.meta.status === "ok") {
component.user.email = '';
component.user.password = '';
component.user.name = '';
component.user.confirm_password = '';
$("#reg-success").modal('show');
}
}, function (response) {
console.log(response);
});
}
}
}
</script>
+41
View File
@@ -0,0 +1,41 @@
import Vue from "vue";
import Router from "vue-router";
import Login from "../components/Login.vue";
import SignUp from "../components/SignUp.vue";
import Home from "../components/Home.vue";
import {store} from "../store";
import * as MutationTypes from '../store/auth/MutationTypes';
Vue.use(Router);
const router = new Router({
routes: [
{
path: '/',
name: 'login',
component: Login
},
{
path: '/signup',
name: 'signup',
component: SignUp
},
{
path: '/home',
name: 'home',
component: Home
}
]
});
router.beforeEach((to, from, next) => {
if (store.getters.isLoggedIn) {
console.log("logged in");
store.dispatch(MutationTypes.FETCH_USER).then(() => next());
} else {
console.log("not logged in");
next();
}
})
export default router;
@@ -0,0 +1,6 @@
export const LOGOUT = 'LOGOUT';
export const SAVE_USER = 'SAVE_USER';
export const UPDATE_USER = 'UPDATE_USER';
export const FETCH_USER_SUCCESS = 'FETCH_USER_SUCCESS';
export const FETCH_USER_FAILURE = 'FETCH_USER_FAILURE';
export const FETCH_USER = 'FETCH_USER';
+69
View File
@@ -0,0 +1,69 @@
import * as MutationTypes from './MutationTypes';
import Cookies from "js-cookie";
import axios from "axios";
const state = {
user: {
name: ''
},
token: Cookies.get('auth_token')
};
const mutations = {
[MutationTypes.SAVE_USER](state, response) {
Cookies.set('auth_token', response.data.data.token);
state.token = response.data.data.token;
state.user.name = response.data.data.user.name;
},
[MutationTypes.LOGOUT](state) {
state.token = '';
state.user.name = '';
Cookies.remove('auth_token')
},
[MutationTypes.FETCH_USER_SUCCESS](state, user) {
state.user.name = user.name;
},
[MutationTypes.FETCH_USER_FAILURE](state) {
state.user.name = '';
state.token = '';
},
[MutationTypes.UPDATE_USER](state, user) {
state.user.name = user.name;
}
};
const actions = {
[MutationTypes.SAVE_USER]({commit}, response) {
commit(MutationTypes.SAVE_USER, response);
},
[MutationTypes.LOGOUT]({commit}) {
commit(MutationTypes.LOGOUT);
},
[MutationTypes.FETCH_USER_SUCCESS]({commit}, user) {
commit(MutationTypes.FETCH_USER_SUCCESS, user);
},
[MutationTypes.FETCH_USER_FAILURE]({commit}) {
commit(MutationTypes.FETCH_USER_FAILURE);
},
[MutationTypes.FETCH_USER]({commit}) {
axios.get('/api/user')
.then((response) => {
console.log(response);
if (response.data.meta.status==='ok'){
commit(MutationTypes.FETCH_USER_SUCCESS, response.data.data.user);
}else {
commit(MutationTypes.LOGOUT)
}
});
}
};
const getters = {
authUser: state => state.user,
authToken: state => state.token,
isLoggedIn: state => state.token !== undefined
};
export default {
state,
mutations,
actions,
getters
}
+11
View File
@@ -0,0 +1,11 @@
import Vue from "vue";
import Vuex from "vuex";
import auth from './auth'
Vue.use(Vuex);
export const store = new Vuex.Store({
modules: {
auth
}
})
+59
View File
@@ -0,0 +1,59 @@
import Vue from 'vue';
import Vuex from 'vuex';
import axios from 'axios';
import notes from '../api';
Vue.use(Vuex);
const notesStore = new Vuex.Store({
state: {
notes: [],
favouriteNotes: []
},
mutations: {
FETCH(state, notes) {
state.notes = notes;
},
FETCH_FAVOURITE(state, favouriteNotes) {
state.favouriteNotes = favouriteNotes;
}
},
actions: {
fetch({ commit }) {
return axios.get(notes)
.then(response => commit('FETCH', response.data))
.catch();
},
deleteNote({}, id) {
axios.delete(`${notes}/${id}`)
.then(() => this.dispatch('fetch'))
.catch();
},
edit({}, note) {
axios.put(`${notes}/${note.id}`, {
title: note.title
})
.then(() => this.dispatch('fetch'));
},
toggleFavourite({}, id) {
axios.put(`${notes}/${id}/toggleFavourite`, {
is_favourite: true
})
.then(() => this.dispatch('fetch'))
},
fetchFavourite({commit}) {
return axios.get(`${notes}?type=favourite`)
.then(response => commit('FETCH_FAVOURITE', response.data))
.catch();
},
add({}, title) {
axios.post(`${notes}`, {
'title': title,
'is_favourite': false,
});
}
}
});
export default notesStore;
+13
View File
@@ -0,0 +1,13 @@
import axios from 'axios';
import {store} from '../store';
axios.interceptors.request.use(
config => {
if (store.getters.authToken) {
config.headers.common['Authorization'] = `Bearer ${store.getters.authToken}`
}
return config
},
error => Promise.reject(error)
);
-3
View File
@@ -5,9 +5,6 @@
// Variables
@import "variables";
// Bootstrap
@import '~bootstrap/scss/bootstrap';
.navbar-laravel {
background-color: #fff;
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.04);
+28 -62
View File
@@ -4,11 +4,12 @@
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Laravel</title>
<meta name="csrf-token" content="{{ csrf_token() }}">
<title>Note App</title>
<!-- Fonts -->
<link href="https://fonts.googleapis.com/css?family=Raleway:100,600" rel="stylesheet" type="text/css">
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet" type="text/css">
<!-- Styles -->
<style>
@@ -20,76 +21,41 @@
height: 100vh;
margin: 0;
}
.full-height {
height: 100vh;
.component-header {
padding-bottom: 34px;
padding-top: 34px;
}
.flex-center {
align-items: center;
display: flex;
justify-content: center;
li .options{
cursor: pointer;
}
.position-ref {
position: relative;
li:hover .options{
margin-right:20px;
font-size: 15px;
}
.top-right {
position: absolute;
right: 10px;
top: 18px;
.glyphicon {
margin-right: 20px;
}
.content {
text-align: center;
.header-nav > a {
padding-right: 20px;
}
.title {
font-size: 84px;
.header-nav {
padding: 20px;
text-align: left;
}
.links > a {
color: #636b6f;
padding: 0 25px;
font-size: 12px;
body {
font-size: 16px;
font-weight: 600;
letter-spacing: .1rem;
text-decoration: none;
text-transform: uppercase;
}
.m-b-md {
margin-bottom: 30px;
.note-form {
padding-top: 20px;
}
</style>
</head>
<body>
<div class="flex-center position-ref full-height">
@if (Route::has('login'))
<div class="top-right links">
@auth
<a href="{{ url('/home') }}">Home</a>
@else
<a href="{{ route('login') }}">Login</a>
<a href="{{ route('register') }}">Register</a>
@endauth
</div>
@endif
<div class="content">
<div class="title m-b-md">
Laravel
</div>
<div class="links">
<a href="https://laravel.com/docs">Documentation</a>
<a href="https://laracasts.com">Laracasts</a>
<a href="https://laravel-news.com">News</a>
<a href="https://forge.laravel.com">Forge</a>
<a href="https://github.com/laravel/laravel">GitHub</a>
</div>
</div>
</div>
<div class="container">
<div id="app" class="flex-center position-ref full-height">
</div>
</div>
</body>
</html>
<script src="{{ asset('js/app.js') }}"></script>
</html>