初始化提交
12
.babelrc
Normal file
@@ -0,0 +1,12 @@
|
||||
{
|
||||
"presets": [
|
||||
["env", {
|
||||
"modules": false,
|
||||
"targets": {
|
||||
"browsers": ["> 1%", "last 2 versions", "not ie <= 8"]
|
||||
}
|
||||
}],
|
||||
"stage-2"
|
||||
],
|
||||
"plugins": ["transform-vue-jsx", "transform-runtime"]
|
||||
}
|
||||
9
.editorconfig
Normal file
@@ -0,0 +1,9 @@
|
||||
root = true
|
||||
|
||||
[*]
|
||||
charset = utf-8
|
||||
indent_style = space
|
||||
indent_size = 2
|
||||
end_of_line = lf
|
||||
insert_final_newline = true
|
||||
trim_trailing_whitespace = true
|
||||
10
.postcssrc.js
Normal file
@@ -0,0 +1,10 @@
|
||||
// https://github.com/michael-ciniawsky/postcss-load-config
|
||||
|
||||
module.exports = {
|
||||
"plugins": {
|
||||
"postcss-import": {},
|
||||
"postcss-url": {},
|
||||
// to edit target browsers: use "browserslist" field in package.json
|
||||
"autoprefixer": {}
|
||||
}
|
||||
}
|
||||
201
LICENSE
Normal file
@@ -0,0 +1,201 @@
|
||||
Apache License
|
||||
Version 2.0, January 2004
|
||||
http://www.apache.org/licenses/
|
||||
|
||||
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
|
||||
|
||||
1. Definitions.
|
||||
|
||||
"License" shall mean the terms and conditions for use, reproduction,
|
||||
and distribution as defined by Sections 1 through 9 of this document.
|
||||
|
||||
"Licensor" shall mean the copyright owner or entity authorized by
|
||||
the copyright owner that is granting the License.
|
||||
|
||||
"Legal Entity" shall mean the union of the acting entity and all
|
||||
other entities that control, are controlled by, or are under common
|
||||
control with that entity. For the purposes of this definition,
|
||||
"control" means (i) the power, direct or indirect, to cause the
|
||||
direction or management of such entity, whether by contract or
|
||||
otherwise, or (ii) ownership of fifty percent (50%) or more of the
|
||||
outstanding shares, or (iii) beneficial ownership of such entity.
|
||||
|
||||
"You" (or "Your") shall mean an individual or Legal Entity
|
||||
exercising permissions granted by this License.
|
||||
|
||||
"Source" form shall mean the preferred form for making modifications,
|
||||
including but not limited to software source code, documentation
|
||||
source, and configuration files.
|
||||
|
||||
"Object" form shall mean any form resulting from mechanical
|
||||
transformation or translation of a Source form, including but
|
||||
not limited to compiled object code, generated documentation,
|
||||
and conversions to other media types.
|
||||
|
||||
"Work" shall mean the work of authorship, whether in Source or
|
||||
Object form, made available under the License, as indicated by a
|
||||
copyright notice that is included in or attached to the work
|
||||
(an example is provided in the Appendix below).
|
||||
|
||||
"Derivative Works" shall mean any work, whether in Source or Object
|
||||
form, that is based on (or derived from) the Work and for which the
|
||||
editorial revisions, annotations, elaborations, or other modifications
|
||||
represent, as a whole, an original work of authorship. For the purposes
|
||||
of this License, Derivative Works shall not include works that remain
|
||||
separable from, or merely link (or bind by name) to the interfaces of,
|
||||
the Work and Derivative Works thereof.
|
||||
|
||||
"Contribution" shall mean any work of authorship, including
|
||||
the original version of the Work and any modifications or additions
|
||||
to that Work or Derivative Works thereof, that is intentionally
|
||||
submitted to Licensor for inclusion in the Work by the copyright owner
|
||||
or by an individual or Legal Entity authorized to submit on behalf of
|
||||
the copyright owner. For the purposes of this definition, "submitted"
|
||||
means any form of electronic, verbal, or written communication sent
|
||||
to the Licensor or its representatives, including but not limited to
|
||||
communication on electronic mailing lists, source code control systems,
|
||||
and issue tracking systems that are managed by, or on behalf of, the
|
||||
Licensor for the purpose of discussing and improving the Work, but
|
||||
excluding communication that is conspicuously marked or otherwise
|
||||
designated in writing by the copyright owner as "Not a Contribution."
|
||||
|
||||
"Contributor" shall mean Licensor and any individual or Legal Entity
|
||||
on behalf of whom a Contribution has been received by Licensor and
|
||||
subsequently incorporated within the Work.
|
||||
|
||||
2. Grant of Copyright License. Subject to the terms and conditions of
|
||||
this License, each Contributor hereby grants to You a perpetual,
|
||||
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||
copyright license to reproduce, prepare Derivative Works of,
|
||||
publicly display, publicly perform, sublicense, and distribute the
|
||||
Work and such Derivative Works in Source or Object form.
|
||||
|
||||
3. Grant of Patent License. Subject to the terms and conditions of
|
||||
this License, each Contributor hereby grants to You a perpetual,
|
||||
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||
(except as stated in this section) patent license to make, have made,
|
||||
use, offer to sell, sell, import, and otherwise transfer the Work,
|
||||
where such license applies only to those patent claims licensable
|
||||
by such Contributor that are necessarily infringed by their
|
||||
Contribution(s) alone or by combination of their Contribution(s)
|
||||
with the Work to which such Contribution(s) was submitted. If You
|
||||
institute patent litigation against any entity (including a
|
||||
cross-claim or counterclaim in a lawsuit) alleging that the Work
|
||||
or a Contribution incorporated within the Work constitutes direct
|
||||
or contributory patent infringement, then any patent licenses
|
||||
granted to You under this License for that Work shall terminate
|
||||
as of the date such litigation is filed.
|
||||
|
||||
4. Redistribution. You may reproduce and distribute copies of the
|
||||
Work or Derivative Works thereof in any medium, with or without
|
||||
modifications, and in Source or Object form, provided that You
|
||||
meet the following conditions:
|
||||
|
||||
(a) You must give any other recipients of the Work or
|
||||
Derivative Works a copy of this License; and
|
||||
|
||||
(b) You must cause any modified files to carry prominent notices
|
||||
stating that You changed the files; and
|
||||
|
||||
(c) You must retain, in the Source form of any Derivative Works
|
||||
that You distribute, all copyright, patent, trademark, and
|
||||
attribution notices from the Source form of the Work,
|
||||
excluding those notices that do not pertain to any part of
|
||||
the Derivative Works; and
|
||||
|
||||
(d) If the Work includes a "NOTICE" text file as part of its
|
||||
distribution, then any Derivative Works that You distribute must
|
||||
include a readable copy of the attribution notices contained
|
||||
within such NOTICE file, excluding those notices that do not
|
||||
pertain to any part of the Derivative Works, in at least one
|
||||
of the following places: within a NOTICE text file distributed
|
||||
as part of the Derivative Works; within the Source form or
|
||||
documentation, if provided along with the Derivative Works; or,
|
||||
within a display generated by the Derivative Works, if and
|
||||
wherever such third-party notices normally appear. The contents
|
||||
of the NOTICE file are for informational purposes only and
|
||||
do not modify the License. You may add Your own attribution
|
||||
notices within Derivative Works that You distribute, alongside
|
||||
or as an addendum to the NOTICE text from the Work, provided
|
||||
that such additional attribution notices cannot be construed
|
||||
as modifying the License.
|
||||
|
||||
You may add Your own copyright statement to Your modifications and
|
||||
may provide additional or different license terms and conditions
|
||||
for use, reproduction, or distribution of Your modifications, or
|
||||
for any such Derivative Works as a whole, provided Your use,
|
||||
reproduction, and distribution of the Work otherwise complies with
|
||||
the conditions stated in this License.
|
||||
|
||||
5. Submission of Contributions. Unless You explicitly state otherwise,
|
||||
any Contribution intentionally submitted for inclusion in the Work
|
||||
by You to the Licensor shall be under the terms and conditions of
|
||||
this License, without any additional terms or conditions.
|
||||
Notwithstanding the above, nothing herein shall supersede or modify
|
||||
the terms of any separate license agreement you may have executed
|
||||
with Licensor regarding such Contributions.
|
||||
|
||||
6. Trademarks. This License does not grant permission to use the trade
|
||||
names, trademarks, service marks, or product names of the Licensor,
|
||||
except as required for reasonable and customary use in describing the
|
||||
origin of the Work and reproducing the content of the NOTICE file.
|
||||
|
||||
7. Disclaimer of Warranty. Unless required by applicable law or
|
||||
agreed to in writing, Licensor provides the Work (and each
|
||||
Contributor provides its Contributions) on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
||||
implied, including, without limitation, any warranties or conditions
|
||||
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
|
||||
PARTICULAR PURPOSE. You are solely responsible for determining the
|
||||
appropriateness of using or redistributing the Work and assume any
|
||||
risks associated with Your exercise of permissions under this License.
|
||||
|
||||
8. Limitation of Liability. In no event and under no legal theory,
|
||||
whether in tort (including negligence), contract, or otherwise,
|
||||
unless required by applicable law (such as deliberate and grossly
|
||||
negligent acts) or agreed to in writing, shall any Contributor be
|
||||
liable to You for damages, including any direct, indirect, special,
|
||||
incidental, or consequential damages of any character arising as a
|
||||
result of this License or out of the use or inability to use the
|
||||
Work (including but not limited to damages for loss of goodwill,
|
||||
work stoppage, computer failure or malfunction, or any and all
|
||||
other commercial damages or losses), even if such Contributor
|
||||
has been advised of the possibility of such damages.
|
||||
|
||||
9. Accepting Warranty or Additional Liability. While redistributing
|
||||
the Work or Derivative Works thereof, You may choose to offer,
|
||||
and charge a fee for, acceptance of support, warranty, indemnity,
|
||||
or other liability obligations and/or rights consistent with this
|
||||
License. However, in accepting such obligations, You may act only
|
||||
on Your own behalf and on Your sole responsibility, not on behalf
|
||||
of any other Contributor, and only if You agree to indemnify,
|
||||
defend, and hold each Contributor harmless for any liability
|
||||
incurred by, or claims asserted against, such Contributor by reason
|
||||
of your accepting any such warranty or additional liability.
|
||||
|
||||
END OF TERMS AND CONDITIONS
|
||||
|
||||
APPENDIX: How to apply the Apache License to your work.
|
||||
|
||||
To apply the Apache License to your work, attach the following
|
||||
boilerplate notice, with the fields enclosed by brackets "[]"
|
||||
replaced with your own identifying information. (Don't include
|
||||
the brackets!) The text should be enclosed in the appropriate
|
||||
comment syntax for the file format. We also recommend that a
|
||||
file or class name and description of purpose be included on the
|
||||
same "printed page" as the copyright notice for easier
|
||||
identification within third-party archives.
|
||||
|
||||
Copyright [2018-2019] [macrozheng]
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
41
build/build.js
Normal file
@@ -0,0 +1,41 @@
|
||||
'use strict'
|
||||
require('./check-versions')()
|
||||
|
||||
process.env.NODE_ENV = 'production'
|
||||
|
||||
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 spinner = ora('building for production...')
|
||||
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, // If you are using ts-loader, setting this to true will make TypeScript errors show up during build.
|
||||
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'
|
||||
))
|
||||
})
|
||||
})
|
||||
54
build/check-versions.js
Normal 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
build/logo.png
Normal file
|
After Width: | Height: | Size: 6.7 KiB |
101
build/utils.js
Normal 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
build/vue-loader.conf.js
Normal 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'
|
||||
}
|
||||
}
|
||||
91
build/webpack.base.conf.js
Normal file
@@ -0,0 +1,91 @@
|
||||
'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)
|
||||
}
|
||||
|
||||
|
||||
|
||||
module.exports = {
|
||||
context: path.resolve(__dirname, '../'),
|
||||
entry: {
|
||||
app: './src/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('src'),
|
||||
}
|
||||
},
|
||||
module: {
|
||||
rules: [
|
||||
{
|
||||
test: /\.vue$/,
|
||||
loader: 'vue-loader',
|
||||
options: vueLoaderConfig
|
||||
},
|
||||
{
|
||||
test: /\.js$/,
|
||||
loader: 'babel-loader',
|
||||
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'
|
||||
}
|
||||
}
|
||||
96
build/webpack.dev.conf.js
Normal file
@@ -0,0 +1,96 @@
|
||||
'use strict'
|
||||
const utils = require('./utils')
|
||||
const webpack = require('webpack')
|
||||
const config = require('../config')
|
||||
const merge = require('webpack-merge')
|
||||
const path = require('path')
|
||||
const baseWebpackConfig = require('./webpack.base.conf')
|
||||
const CopyWebpackPlugin = require('copy-webpack-plugin')
|
||||
const HtmlWebpackPlugin = require('html-webpack-plugin')
|
||||
const FriendlyErrorsPlugin = require('friendly-errors-webpack-plugin')
|
||||
const portfinder = require('portfinder')
|
||||
|
||||
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: {
|
||||
rewrites: [
|
||||
{ from: /.*/, to: path.posix.join(config.dev.assetsPublicPath, 'index.html') },
|
||||
],
|
||||
},
|
||||
hot: true,
|
||||
contentBase: false, // since we use CopyWebpackPlugin.
|
||||
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',
|
||||
favicon: 'src/favicon.ico',
|
||||
inject: true
|
||||
}),
|
||||
// copy custom static assets
|
||||
new CopyWebpackPlugin([
|
||||
{
|
||||
from: path.resolve(__dirname, '../static'),
|
||||
to: config.dev.assetsSubDirectory,
|
||||
ignore: ['.*']
|
||||
}
|
||||
])
|
||||
]
|
||||
})
|
||||
|
||||
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)
|
||||
}
|
||||
})
|
||||
})
|
||||
146
build/webpack.prod.conf.js
Normal file
@@ -0,0 +1,146 @@
|
||||
'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')
|
||||
|
||||
const env = require('../config/prod.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.
|
||||
// It's currently set to `true` because we are seeing that sourcemaps are included in the codesplit bundle as well when it's `false`,
|
||||
// increasing file size: https://github.com/vuejs-templates/webpack/issues/1110
|
||||
allChunks: true,
|
||||
}),
|
||||
// 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',
|
||||
favicon:'src/favicon.ico',
|
||||
inject: true,
|
||||
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 vendor 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
|
||||
}),
|
||||
|
||||
// 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
|
||||
8
config/dev.env.js
Normal file
@@ -0,0 +1,8 @@
|
||||
'use strict'
|
||||
const merge = require('webpack-merge')
|
||||
const prodEnv = require('./prod.env')
|
||||
|
||||
module.exports = merge(prodEnv, {
|
||||
NODE_ENV: '"development"',
|
||||
BASE_API: '"http://localhost:8081"'
|
||||
})
|
||||
69
config/index.js
Normal file
@@ -0,0 +1,69 @@
|
||||
'use strict'
|
||||
// Template version: 1.3.1
|
||||
// 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: 8090, // can be overwritten by process.env.PORT, if port is in use, a free one will be determined
|
||||
autoOpenBrowser: false,
|
||||
errorOverlay: true,
|
||||
notifyOnErrors: true,
|
||||
poll: false, // https://webpack.js.org/configuration/dev-server/#devserver-watchoptions-
|
||||
|
||||
|
||||
/**
|
||||
* Source Maps
|
||||
*/
|
||||
|
||||
// https://webpack.js.org/configuration/devtool/#development
|
||||
devtool: 'cheap-module-eval-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,
|
||||
|
||||
cssSourceMap: true
|
||||
},
|
||||
|
||||
build: {
|
||||
// Template for index.html
|
||||
index: path.resolve(__dirname, '../dist/index.html'),
|
||||
|
||||
// Paths
|
||||
assetsRoot: path.resolve(__dirname, '../dist'),
|
||||
assetsSubDirectory: 'static',
|
||||
assetsPublicPath: './',
|
||||
|
||||
/**
|
||||
* Source Maps
|
||||
*/
|
||||
|
||||
productionSourceMap: true,
|
||||
// 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
config/prod.env.js
Normal file
@@ -0,0 +1,5 @@
|
||||
'use strict'
|
||||
module.exports = {
|
||||
NODE_ENV: '"production"',
|
||||
BASE_API: '"http://127.0.0.1:8081"'
|
||||
}
|
||||
BIN
documen/20200320125117.jpg
Normal file
|
After Width: | Height: | Size: 405 KiB |
BIN
documen/20200320125135.png
Normal file
|
After Width: | Height: | Size: 25 KiB |
BIN
documen/20200320125149.png
Normal file
|
After Width: | Height: | Size: 54 KiB |
32
index.html
Normal file
@@ -0,0 +1,32 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width,initial-scale=1.0">
|
||||
<title>mall-admin-web</title>
|
||||
<!-- Global site tag (gtag.js) - Google Analytics -->
|
||||
<script async src="https://www.googletagmanager.com/gtag/js?id=UA-144208445-2"></script>
|
||||
<script>
|
||||
window.dataLayer = window.dataLayer || [];
|
||||
function gtag(){dataLayer.push(arguments);}
|
||||
gtag('js', new Date());
|
||||
gtag('config', 'UA-144208445-2');
|
||||
</script>
|
||||
<!--Baidu Analytics-->
|
||||
<script>
|
||||
var _hmt = _hmt || [];
|
||||
(function() {
|
||||
var hm = document.createElement("script");
|
||||
hm.src = "https://hm.baidu.com/hm.js?8b02a318fde5831da10426656a43d03c";
|
||||
var s = document.getElementsByTagName("script")[0];
|
||||
s.parentNode.insertBefore(hm, s);
|
||||
})();
|
||||
</script>
|
||||
</head>
|
||||
<body>
|
||||
<!--<script src="./static/tinymce4.7.5/tinymce.min.js"></script>-->
|
||||
<script src="https://unpkg.com/tinymce@4.7.5/tinymce.min.js"></script>
|
||||
<div id="app"></div>
|
||||
<!-- built files will be auto injected -->
|
||||
</body>
|
||||
</html>
|
||||
13382
package-lock.json
generated
Normal file
74
package.json
Normal file
@@ -0,0 +1,74 @@
|
||||
{
|
||||
"name": "mall-admin-web",
|
||||
"version": "1.0.0",
|
||||
"description": "mall后台管理前端",
|
||||
"author": "",
|
||||
"private": true,
|
||||
"scripts": {
|
||||
"dev": "webpack-dev-server --inline --progress --config build/webpack.dev.conf.js",
|
||||
"start": "npm run dev",
|
||||
"build": "node build/build.js"
|
||||
},
|
||||
"dependencies": {
|
||||
"axios": "^0.18.0",
|
||||
"echarts": "^4.2.0-rc.2",
|
||||
"element-ui": "^2.3.7",
|
||||
"js-cookie": "^2.2.0",
|
||||
"normalize.css": "^8.0.0",
|
||||
"nprogress": "^0.2.0",
|
||||
"v-charts": "^1.19.0",
|
||||
"v-distpicker": "^1.0.20",
|
||||
"vue": "^2.5.2",
|
||||
"vue-router": "^3.0.1",
|
||||
"vuex": "^3.0.1"
|
||||
},
|
||||
"devDependencies": {
|
||||
"autoprefixer": "^7.1.2",
|
||||
"babel-core": "^6.22.1",
|
||||
"babel-helper-vue-jsx-merge-props": "^2.0.3",
|
||||
"babel-loader": "^7.1.1",
|
||||
"babel-plugin-syntax-jsx": "^6.18.0",
|
||||
"babel-plugin-transform-runtime": "^6.22.0",
|
||||
"babel-plugin-transform-vue-jsx": "^3.5.0",
|
||||
"babel-preset-env": "^1.3.2",
|
||||
"babel-preset-stage-2": "^6.22.0",
|
||||
"chalk": "^2.0.1",
|
||||
"copy-webpack-plugin": "^4.0.1",
|
||||
"css-loader": "^0.28.0",
|
||||
"extract-text-webpack-plugin": "^3.0.0",
|
||||
"file-loader": "^1.1.4",
|
||||
"friendly-errors-webpack-plugin": "^1.6.1",
|
||||
"html-webpack-plugin": "^2.30.1",
|
||||
"node-notifier": "^5.1.2",
|
||||
"node-sass": "^4.14.1",
|
||||
"optimize-css-assets-webpack-plugin": "^3.2.0",
|
||||
"ora": "^1.2.0",
|
||||
"portfinder": "^1.0.13",
|
||||
"postcss-import": "^11.0.0",
|
||||
"postcss-loader": "^2.0.8",
|
||||
"postcss-url": "^7.2.1",
|
||||
"rimraf": "^2.6.0",
|
||||
"sass-loader": "^7.0.1",
|
||||
"semver": "^5.3.0",
|
||||
"shelljs": "^0.7.6",
|
||||
"svg-sprite-loader": "^3.7.3",
|
||||
"uglifyjs-webpack-plugin": "^1.1.1",
|
||||
"url-loader": "^0.5.8",
|
||||
"vue-loader": "^13.3.0",
|
||||
"vue-style-loader": "^3.0.1",
|
||||
"vue-template-compiler": "^2.5.2",
|
||||
"webpack": "^3.6.0",
|
||||
"webpack-bundle-analyzer": "^2.9.0",
|
||||
"webpack-dev-server": "^2.9.1",
|
||||
"webpack-merge": "^4.1.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">= 6.0.0",
|
||||
"npm": ">= 3.0.0"
|
||||
},
|
||||
"browserslist": [
|
||||
"> 1%",
|
||||
"last 2 versions",
|
||||
"not ie <= 8"
|
||||
]
|
||||
}
|
||||
14
src/App.vue
Normal file
@@ -0,0 +1,14 @@
|
||||
<template>
|
||||
<div id="app">
|
||||
<router-view/>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
export default {
|
||||
name: 'App'
|
||||
}
|
||||
</script>
|
||||
|
||||
<style>
|
||||
</style>
|
||||
53
src/api/brand.js
Normal file
@@ -0,0 +1,53 @@
|
||||
import request from '@/utils/request'
|
||||
export function fetchList(params) {
|
||||
return request({
|
||||
url:'/brand/list',
|
||||
method:'get',
|
||||
params:params
|
||||
})
|
||||
}
|
||||
export function createBrand(data) {
|
||||
return request({
|
||||
url:'/brand/create',
|
||||
method:'post',
|
||||
data:data
|
||||
})
|
||||
}
|
||||
export function updateShowStatus(data) {
|
||||
return request({
|
||||
url:'/brand/update/showStatus',
|
||||
method:'post',
|
||||
data:data
|
||||
})
|
||||
}
|
||||
|
||||
export function updateFactoryStatus(data) {
|
||||
return request({
|
||||
url:'/brand/update/factoryStatus',
|
||||
method:'post',
|
||||
data:data
|
||||
})
|
||||
}
|
||||
|
||||
export function deleteBrand(id) {
|
||||
return request({
|
||||
url:'/brand/delete/'+id,
|
||||
method:'get',
|
||||
})
|
||||
}
|
||||
|
||||
export function getBrand(id) {
|
||||
return request({
|
||||
url:'/brand/'+id,
|
||||
method:'get',
|
||||
})
|
||||
}
|
||||
|
||||
export function updateBrand(id,data) {
|
||||
return request({
|
||||
url:'/brand/update/'+id,
|
||||
method:'post',
|
||||
data:data
|
||||
})
|
||||
}
|
||||
|
||||
7
src/api/companyAddress.js
Normal file
@@ -0,0 +1,7 @@
|
||||
import request from '@/utils/request'
|
||||
export function fetchList() {
|
||||
return request({
|
||||
url:'/companyAddress/list',
|
||||
method:'get'
|
||||
})
|
||||
}
|
||||
38
src/api/coupon.js
Normal file
@@ -0,0 +1,38 @@
|
||||
import request from '@/utils/request'
|
||||
export function fetchList(params) {
|
||||
return request({
|
||||
url:'/coupon/list',
|
||||
method:'get',
|
||||
params:params
|
||||
})
|
||||
}
|
||||
|
||||
export function createCoupon(data) {
|
||||
return request({
|
||||
url:'/coupon/create',
|
||||
method:'post',
|
||||
data:data
|
||||
})
|
||||
}
|
||||
|
||||
export function getCoupon(id) {
|
||||
return request({
|
||||
url:'/coupon/'+id,
|
||||
method:'get',
|
||||
})
|
||||
}
|
||||
|
||||
export function updateCoupon(id,data) {
|
||||
return request({
|
||||
url:'/coupon/update/'+id,
|
||||
method:'post',
|
||||
data:data
|
||||
})
|
||||
}
|
||||
|
||||
export function deleteCoupon(id) {
|
||||
return request({
|
||||
url:'/coupon/delete/'+id,
|
||||
method:'post',
|
||||
})
|
||||
}
|
||||
8
src/api/couponHistory.js
Normal file
@@ -0,0 +1,8 @@
|
||||
import request from '@/utils/request'
|
||||
export function fetchList(params) {
|
||||
return request({
|
||||
url:'/couponHistory/list',
|
||||
method:'get',
|
||||
params:params
|
||||
})
|
||||
}
|
||||
35
src/api/flash.js
Normal file
@@ -0,0 +1,35 @@
|
||||
import request from '@/utils/request'
|
||||
export function fetchList(params) {
|
||||
return request({
|
||||
url:'/flash/list',
|
||||
method:'get',
|
||||
params:params
|
||||
})
|
||||
}
|
||||
export function updateStatus(id,params) {
|
||||
return request({
|
||||
url:'/flash/update/status/'+id,
|
||||
method:'post',
|
||||
params:params
|
||||
})
|
||||
}
|
||||
export function deleteFlash(id) {
|
||||
return request({
|
||||
url:'/flash/delete/'+id,
|
||||
method:'post'
|
||||
})
|
||||
}
|
||||
export function createFlash(data) {
|
||||
return request({
|
||||
url:'/flash/create',
|
||||
method:'post',
|
||||
data:data
|
||||
})
|
||||
}
|
||||
export function updateFlash(id,data) {
|
||||
return request({
|
||||
url:'/flash/update/'+id,
|
||||
method:'post',
|
||||
data:data
|
||||
})
|
||||
}
|
||||
28
src/api/flashProductRelation.js
Normal file
@@ -0,0 +1,28 @@
|
||||
import request from '@/utils/request'
|
||||
export function fetchList(params) {
|
||||
return request({
|
||||
url:'/flashProductRelation/list',
|
||||
method:'get',
|
||||
params:params
|
||||
})
|
||||
}
|
||||
export function createFlashProductRelation(data) {
|
||||
return request({
|
||||
url:'/flashProductRelation/create',
|
||||
method:'post',
|
||||
data:data
|
||||
})
|
||||
}
|
||||
export function deleteFlashProductRelation(id) {
|
||||
return request({
|
||||
url:'/flashProductRelation/delete/'+id,
|
||||
method:'post'
|
||||
})
|
||||
}
|
||||
export function updateFlashProductRelation(id,data) {
|
||||
return request({
|
||||
url:'/flashProductRelation/update/'+id,
|
||||
method:'post',
|
||||
data:data
|
||||
})
|
||||
}
|
||||
48
src/api/flashSession.js
Normal file
@@ -0,0 +1,48 @@
|
||||
import request from '@/utils/request'
|
||||
|
||||
export function fetchList(params) {
|
||||
return request({
|
||||
url: '/flashSession/list',
|
||||
method: 'get',
|
||||
params: params
|
||||
})
|
||||
}
|
||||
|
||||
export function fetchSelectList(params) {
|
||||
return request({
|
||||
url: '/flashSession/selectList',
|
||||
method: 'get',
|
||||
params: params
|
||||
})
|
||||
}
|
||||
|
||||
export function updateStatus(id, params) {
|
||||
return request({
|
||||
url: '/flashSession/update/status/' + id,
|
||||
method: 'post',
|
||||
params: params
|
||||
})
|
||||
}
|
||||
|
||||
export function deleteSession(id) {
|
||||
return request({
|
||||
url: '/flashSession/delete/' + id,
|
||||
method: 'post'
|
||||
})
|
||||
}
|
||||
|
||||
export function createSession(data) {
|
||||
return request({
|
||||
url: '/flashSession/create',
|
||||
method: 'post',
|
||||
data: data
|
||||
})
|
||||
}
|
||||
|
||||
export function updateSession(id, data) {
|
||||
return request({
|
||||
url: '/flashSession/update/' + id,
|
||||
method: 'post',
|
||||
data: data
|
||||
})
|
||||
}
|
||||
43
src/api/homeAdvertise.js
Normal file
@@ -0,0 +1,43 @@
|
||||
import request from '@/utils/request'
|
||||
export function fetchList(params) {
|
||||
return request({
|
||||
url:'/home/advertise/list',
|
||||
method:'get',
|
||||
params:params
|
||||
})
|
||||
}
|
||||
export function updateStatus(id,params) {
|
||||
return request({
|
||||
url:'/home/advertise/update/status/'+id,
|
||||
method:'post',
|
||||
params:params
|
||||
})
|
||||
}
|
||||
export function deleteHomeAdvertise(data) {
|
||||
return request({
|
||||
url:'/home/advertise/delete',
|
||||
method:'post',
|
||||
data:data
|
||||
})
|
||||
}
|
||||
export function createHomeAdvertise(data) {
|
||||
return request({
|
||||
url:'/home/advertise/create',
|
||||
method:'post',
|
||||
data:data
|
||||
})
|
||||
}
|
||||
export function getHomeAdvertise(id) {
|
||||
return request({
|
||||
url:'/home/advertise/'+id,
|
||||
method:'get',
|
||||
})
|
||||
}
|
||||
|
||||
export function updateHomeAdvertise(id,data) {
|
||||
return request({
|
||||
url:'/home/advertise/update/'+id,
|
||||
method:'post',
|
||||
data:data
|
||||
})
|
||||
}
|
||||
40
src/api/homeBrand.js
Normal file
@@ -0,0 +1,40 @@
|
||||
import request from '@/utils/request'
|
||||
export function fetchList(params) {
|
||||
return request({
|
||||
url:'/home/brand/list',
|
||||
method:'get',
|
||||
params:params
|
||||
})
|
||||
}
|
||||
|
||||
export function updateRecommendStatus(data) {
|
||||
return request({
|
||||
url:'/home/brand/update/recommendStatus',
|
||||
method:'post',
|
||||
data:data
|
||||
})
|
||||
}
|
||||
|
||||
export function deleteHomeBrand(data) {
|
||||
return request({
|
||||
url:'/home/brand/delete',
|
||||
method:'post',
|
||||
data:data
|
||||
})
|
||||
}
|
||||
|
||||
export function createHomeBrand(data) {
|
||||
return request({
|
||||
url:'/home/brand/create',
|
||||
method:'post',
|
||||
data:data
|
||||
})
|
||||
}
|
||||
|
||||
export function updateHomeBrandSort(params) {
|
||||
return request({
|
||||
url:'/home/brand/update/sort/'+params.id,
|
||||
method:'post',
|
||||
params:params
|
||||
})
|
||||
}
|
||||
40
src/api/homeSubject.js
Normal file
@@ -0,0 +1,40 @@
|
||||
import request from '@/utils/request'
|
||||
export function fetchList(params) {
|
||||
return request({
|
||||
url:'/home/recommendSubject/list',
|
||||
method:'get',
|
||||
params:params
|
||||
})
|
||||
}
|
||||
|
||||
export function updateRecommendStatus(data) {
|
||||
return request({
|
||||
url:'/home/recommendSubject/update/recommendStatus',
|
||||
method:'post',
|
||||
data:data
|
||||
})
|
||||
}
|
||||
|
||||
export function deleteHomeSubject(data) {
|
||||
return request({
|
||||
url:'/home/recommendSubject/delete',
|
||||
method:'post',
|
||||
data:data
|
||||
})
|
||||
}
|
||||
|
||||
export function createHomeSubject(data) {
|
||||
return request({
|
||||
url:'/home/recommendSubject/create',
|
||||
method:'post',
|
||||
data:data
|
||||
})
|
||||
}
|
||||
|
||||
export function updateHomeSubjectSort(params) {
|
||||
return request({
|
||||
url:'/home/recommendSubject/update/sort/'+params.id,
|
||||
method:'post',
|
||||
params:params
|
||||
})
|
||||
}
|
||||
40
src/api/hotProduct.js
Normal file
@@ -0,0 +1,40 @@
|
||||
import request from '@/utils/request'
|
||||
export function fetchList(params) {
|
||||
return request({
|
||||
url:'/home/recommendProduct/list',
|
||||
method:'get',
|
||||
params:params
|
||||
})
|
||||
}
|
||||
|
||||
export function updateRecommendStatus(data) {
|
||||
return request({
|
||||
url:'/home/recommendProduct/update/recommendStatus',
|
||||
method:'post',
|
||||
data:data
|
||||
})
|
||||
}
|
||||
|
||||
export function deleteHotProduct(data) {
|
||||
return request({
|
||||
url:'/home/recommendProduct/delete',
|
||||
method:'post',
|
||||
data:data
|
||||
})
|
||||
}
|
||||
|
||||
export function createHotProduct(data) {
|
||||
return request({
|
||||
url:'/home/recommendProduct/create',
|
||||
method:'post',
|
||||
data:data
|
||||
})
|
||||
}
|
||||
|
||||
export function updateHotProductSort(params) {
|
||||
return request({
|
||||
url:'/home/recommendProduct/update/sort/'+params.id,
|
||||
method:'post',
|
||||
params:params
|
||||
})
|
||||
}
|
||||
30
src/api/login.js
Normal file
@@ -0,0 +1,30 @@
|
||||
import request from '@/utils/request'
|
||||
|
||||
export function login(username, password) {
|
||||
return request({
|
||||
url: '/admin/login',
|
||||
method: 'post',
|
||||
data: {
|
||||
username,
|
||||
password
|
||||
}/*,
|
||||
headers:{
|
||||
'X-Requested-With':'XMLHttpRequest',
|
||||
'Content-Type':'application/x-www-form-urlencoded'
|
||||
}*/
|
||||
})
|
||||
}
|
||||
|
||||
export function getInfo() {
|
||||
return request({
|
||||
url: '/admin/info',
|
||||
method: 'get',
|
||||
})
|
||||
}
|
||||
|
||||
export function logout() {
|
||||
return request({
|
||||
url: '/admin/logout',
|
||||
method: 'post'
|
||||
})
|
||||
}
|
||||
8
src/api/memberLevel.js
Normal file
@@ -0,0 +1,8 @@
|
||||
import request from '@/utils/request'
|
||||
export function fetchList(params) {
|
||||
return request({
|
||||
url:'/memberLevel/list',
|
||||
method:'get',
|
||||
params:params
|
||||
})
|
||||
}
|
||||
40
src/api/newProduct.js
Normal file
@@ -0,0 +1,40 @@
|
||||
import request from '@/utils/request'
|
||||
export function fetchList(params) {
|
||||
return request({
|
||||
url:'/home/newProduct/list',
|
||||
method:'get',
|
||||
params:params
|
||||
})
|
||||
}
|
||||
|
||||
export function updateRecommendStatus(data) {
|
||||
return request({
|
||||
url:'/home/newProduct/update/recommendStatus',
|
||||
method:'post',
|
||||
data:data
|
||||
})
|
||||
}
|
||||
|
||||
export function deleteNewProduct(data) {
|
||||
return request({
|
||||
url:'/home/newProduct/delete',
|
||||
method:'post',
|
||||
data:data
|
||||
})
|
||||
}
|
||||
|
||||
export function createNewProduct(data) {
|
||||
return request({
|
||||
url:'/home/newProduct/create',
|
||||
method:'post',
|
||||
data:data
|
||||
})
|
||||
}
|
||||
|
||||
export function updateNewProductSort(params) {
|
||||
return request({
|
||||
url:'/home/newProduct/update/sort/'+params.id,
|
||||
method:'post',
|
||||
params:params
|
||||
})
|
||||
}
|
||||
63
src/api/order.js
Normal file
@@ -0,0 +1,63 @@
|
||||
import request from '@/utils/request'
|
||||
export function fetchList(params) {
|
||||
return request({
|
||||
url:'/order/list',
|
||||
method:'get',
|
||||
params:params
|
||||
})
|
||||
}
|
||||
|
||||
export function closeOrder(params) {
|
||||
return request({
|
||||
url:'/order/update/close',
|
||||
method:'post',
|
||||
params:params
|
||||
})
|
||||
}
|
||||
|
||||
export function deleteOrder(params) {
|
||||
return request({
|
||||
url:'/order/delete',
|
||||
method:'post',
|
||||
params:params
|
||||
})
|
||||
}
|
||||
|
||||
export function deliveryOrder(data) {
|
||||
return request({
|
||||
url:'/order/update/delivery',
|
||||
method:'post',
|
||||
data:data
|
||||
});
|
||||
}
|
||||
|
||||
export function getOrderDetail(id) {
|
||||
return request({
|
||||
url:'/order/'+id,
|
||||
method:'get'
|
||||
});
|
||||
}
|
||||
|
||||
export function updateReceiverInfo(data) {
|
||||
return request({
|
||||
url:'/order/update/receiverInfo',
|
||||
method:'post',
|
||||
data:data
|
||||
});
|
||||
}
|
||||
|
||||
export function updateMoneyInfo(data) {
|
||||
return request({
|
||||
url:'/order/update/moneyInfo',
|
||||
method:'post',
|
||||
data:data
|
||||
});
|
||||
}
|
||||
|
||||
export function updateOrderNote(params) {
|
||||
return request({
|
||||
url:'/order/update/note',
|
||||
method:'post',
|
||||
params:params
|
||||
})
|
||||
}
|
||||
15
src/api/orderSetting.js
Normal file
@@ -0,0 +1,15 @@
|
||||
import request from '@/utils/request'
|
||||
export function getOrderSetting(id) {
|
||||
return request({
|
||||
url:'/orderSetting/'+id,
|
||||
method:'get',
|
||||
})
|
||||
}
|
||||
|
||||
export function updateOrderSetting(id,data) {
|
||||
return request({
|
||||
url:'/orderSetting/update/'+id,
|
||||
method:'post',
|
||||
data:data
|
||||
})
|
||||
}
|
||||
7
src/api/oss.js
Normal file
@@ -0,0 +1,7 @@
|
||||
import request from '@/utils/request'
|
||||
export function policy() {
|
||||
return request({
|
||||
url:'/aliyun/oss/policy',
|
||||
method:'get',
|
||||
})
|
||||
}
|
||||
7
src/api/prefrenceArea.js
Normal file
@@ -0,0 +1,7 @@
|
||||
import request from '@/utils/request'
|
||||
export function fetchList() {
|
||||
return request({
|
||||
url:'/prefrenceArea/listAll',
|
||||
method:'get',
|
||||
})
|
||||
}
|
||||
79
src/api/product.js
Normal file
@@ -0,0 +1,79 @@
|
||||
import request from '@/utils/request'
|
||||
export function fetchList(params) {
|
||||
return request({
|
||||
url:'/product/list',
|
||||
method:'get',
|
||||
params:params
|
||||
})
|
||||
}
|
||||
|
||||
export function fetchSimpleList(params) {
|
||||
return request({
|
||||
url:'/product/simpleList',
|
||||
method:'get',
|
||||
params:params
|
||||
})
|
||||
}
|
||||
|
||||
export function updateDeleteStatus(params) {
|
||||
return request({
|
||||
url:'/product/update/deleteStatus',
|
||||
method:'post',
|
||||
params:params
|
||||
})
|
||||
}
|
||||
|
||||
export function updateNewStatus(params) {
|
||||
return request({
|
||||
url:'/product/update/newStatus',
|
||||
method:'post',
|
||||
params:params
|
||||
})
|
||||
}
|
||||
|
||||
export function updateRecommendStatus(params) {
|
||||
return request({
|
||||
url:'/product/update/recommendStatus',
|
||||
method:'post',
|
||||
params:params
|
||||
})
|
||||
}
|
||||
|
||||
export function updatePublishStatus(params) {
|
||||
return request({
|
||||
url:'/product/update/publishStatus',
|
||||
method:'post',
|
||||
params:params
|
||||
})
|
||||
}
|
||||
|
||||
export function createProduct(data) {
|
||||
return request({
|
||||
url:'/product/create',
|
||||
method:'post',
|
||||
data:data
|
||||
})
|
||||
}
|
||||
|
||||
export function updateProduct(id,data) {
|
||||
return request({
|
||||
url:'/product/update/'+id,
|
||||
method:'post',
|
||||
data:data
|
||||
})
|
||||
}
|
||||
|
||||
export function getProduct(id) {
|
||||
return request({
|
||||
url:'/product/updateInfo/'+id,
|
||||
method:'get',
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
export function productStatic(id) {
|
||||
return request({
|
||||
url:'/item/static/'+id,
|
||||
method:'get',
|
||||
})
|
||||
}
|
||||
45
src/api/productAttr.js
Normal file
@@ -0,0 +1,45 @@
|
||||
import request from '@/utils/request'
|
||||
export function fetchList(cid,params) {
|
||||
return request({
|
||||
url:'/productAttribute/list/'+cid,
|
||||
method:'get',
|
||||
params:params
|
||||
})
|
||||
}
|
||||
|
||||
export function deleteProductAttr(data) {
|
||||
return request({
|
||||
url:'/productAttribute/delete',
|
||||
method:'post',
|
||||
data:data
|
||||
})
|
||||
}
|
||||
|
||||
export function createProductAttr(data) {
|
||||
return request({
|
||||
url:'/productAttribute/create',
|
||||
method:'post',
|
||||
data:data
|
||||
})
|
||||
}
|
||||
|
||||
export function updateProductAttr(id,data) {
|
||||
return request({
|
||||
url:'/productAttribute/update/'+id,
|
||||
method:'post',
|
||||
data:data
|
||||
})
|
||||
}
|
||||
export function getProductAttr(id) {
|
||||
return request({
|
||||
url:'/productAttribute/'+id,
|
||||
method:'get'
|
||||
})
|
||||
}
|
||||
|
||||
export function getProductAttrInfo(productCategoryId) {
|
||||
return request({
|
||||
url:'/productAttribute/attrInfo/'+productCategoryId,
|
||||
method:'get'
|
||||
})
|
||||
}
|
||||
37
src/api/productAttrCate.js
Normal file
@@ -0,0 +1,37 @@
|
||||
import request from '@/utils/request'
|
||||
export function fetchList(params) {
|
||||
return request({
|
||||
url:'/productAttribute/category/list',
|
||||
method:'get',
|
||||
params:params
|
||||
})
|
||||
}
|
||||
|
||||
export function createProductAttrCate(data) {
|
||||
return request({
|
||||
url:'/productAttribute/category/create',
|
||||
method:'post',
|
||||
data:data
|
||||
})
|
||||
}
|
||||
|
||||
export function deleteProductAttrCate(id) {
|
||||
return request({
|
||||
url:'/productAttribute/category/delete/'+id,
|
||||
method:'get'
|
||||
})
|
||||
}
|
||||
|
||||
export function updateProductAttrCate(id,data) {
|
||||
return request({
|
||||
url:'/productAttribute/category/update/'+id,
|
||||
method:'post',
|
||||
data:data
|
||||
})
|
||||
}
|
||||
export function fetchListWithAttr() {
|
||||
return request({
|
||||
url:'/productAttribute/category/list/withAttr',
|
||||
method:'get'
|
||||
})
|
||||
}
|
||||
60
src/api/productCate.js
Normal file
@@ -0,0 +1,60 @@
|
||||
import request from '@/utils/request'
|
||||
export function fetchList(parentId,params) {
|
||||
return request({
|
||||
url:'/productCategory/list/'+parentId,
|
||||
method:'get',
|
||||
params:params
|
||||
})
|
||||
}
|
||||
export function deleteProductCate(id) {
|
||||
return request({
|
||||
url:'/productCategory/delete/'+id,
|
||||
method:'post'
|
||||
})
|
||||
}
|
||||
|
||||
export function createProductCate(data) {
|
||||
return request({
|
||||
url:'/productCategory/create',
|
||||
method:'post',
|
||||
data:data
|
||||
})
|
||||
}
|
||||
|
||||
export function updateProductCate(id,data) {
|
||||
return request({
|
||||
url:'/productCategory/update/'+id,
|
||||
method:'post',
|
||||
data:data
|
||||
})
|
||||
}
|
||||
|
||||
export function getProductCate(id) {
|
||||
return request({
|
||||
url:'/productCategory/'+id,
|
||||
method:'get',
|
||||
})
|
||||
}
|
||||
|
||||
export function updateShowStatus(data) {
|
||||
return request({
|
||||
url:'/productCategory/update/showStatus',
|
||||
method:'post',
|
||||
data:data
|
||||
})
|
||||
}
|
||||
|
||||
export function updateNavStatus(data) {
|
||||
return request({
|
||||
url:'/productCategory/update/navStatus',
|
||||
method:'post',
|
||||
data:data
|
||||
})
|
||||
}
|
||||
|
||||
export function fetchListWithChildren() {
|
||||
return request({
|
||||
url:'/productCategory/list/withChildren',
|
||||
method:'get'
|
||||
})
|
||||
}
|
||||
30
src/api/returnApply.js
Normal file
@@ -0,0 +1,30 @@
|
||||
import request from '@/utils/request'
|
||||
export function fetchList(params) {
|
||||
return request({
|
||||
url:'/returnApply/list',
|
||||
method:'get',
|
||||
params:params
|
||||
})
|
||||
}
|
||||
|
||||
export function deleteApply(params) {
|
||||
return request({
|
||||
url:'/returnApply/delete',
|
||||
method:'post',
|
||||
params:params
|
||||
})
|
||||
}
|
||||
export function updateApplyStatus(id,data) {
|
||||
return request({
|
||||
url:'/returnApply/update/status/'+id,
|
||||
method:'post',
|
||||
data:data
|
||||
})
|
||||
}
|
||||
|
||||
export function getApplyDetail(id) {
|
||||
return request({
|
||||
url:'/returnApply/'+id,
|
||||
method:'get'
|
||||
})
|
||||
}
|
||||
47
src/api/returnReason.js
Normal file
@@ -0,0 +1,47 @@
|
||||
import request from '@/utils/request'
|
||||
export function fetchList(params) {
|
||||
return request({
|
||||
url:'/returnReason/list',
|
||||
method:'get',
|
||||
params:params
|
||||
})
|
||||
}
|
||||
|
||||
export function deleteReason(params) {
|
||||
return request({
|
||||
url:'/returnReason/delete',
|
||||
method:'post',
|
||||
params:params
|
||||
})
|
||||
}
|
||||
|
||||
export function updateStatus(params) {
|
||||
return request({
|
||||
url:'/returnReason/update/status',
|
||||
method:'post',
|
||||
params:params
|
||||
})
|
||||
}
|
||||
|
||||
export function addReason(data) {
|
||||
return request({
|
||||
url:'/returnReason/create',
|
||||
method:'post',
|
||||
data:data
|
||||
})
|
||||
}
|
||||
|
||||
export function getReasonDetail(id) {
|
||||
return request({
|
||||
url:'/returnReason/'+id,
|
||||
method:'get'
|
||||
})
|
||||
}
|
||||
|
||||
export function updateReason(id,data) {
|
||||
return request({
|
||||
url:'/returnReason/update/'+id,
|
||||
method:'post',
|
||||
data:data
|
||||
})
|
||||
}
|
||||
16
src/api/skuStock.js
Normal file
@@ -0,0 +1,16 @@
|
||||
import request from '@/utils/request'
|
||||
export function fetchList(pid,params) {
|
||||
return request({
|
||||
url:'/sku/'+pid,
|
||||
method:'get',
|
||||
params:params
|
||||
})
|
||||
}
|
||||
|
||||
export function update(pid,data) {
|
||||
return request({
|
||||
url:'/sku/update/'+pid,
|
||||
method:'post',
|
||||
data:data
|
||||
})
|
||||
}
|
||||
15
src/api/subject.js
Normal file
@@ -0,0 +1,15 @@
|
||||
import request from '@/utils/request'
|
||||
export function fetchListAll() {
|
||||
return request({
|
||||
url:'/subject/listAll',
|
||||
method:'get',
|
||||
})
|
||||
}
|
||||
|
||||
export function fetchList(params) {
|
||||
return request({
|
||||
url:'/subject/list',
|
||||
method:'get',
|
||||
params:params
|
||||
})
|
||||
}
|
||||
BIN
src/assets/images/404.png
Normal file
|
After Width: | Height: | Size: 96 KiB |
BIN
src/assets/images/404_cloud.png
Normal file
|
After Width: | Height: | Size: 4.7 KiB |
BIN
src/assets/images/gif_404.gif
Normal file
|
After Width: | Height: | Size: 1.0 MiB |
BIN
src/assets/images/home_order.png
Normal file
|
After Width: | Height: | Size: 2.1 KiB |
BIN
src/assets/images/home_today_amount.png
Normal file
|
After Width: | Height: | Size: 5.5 KiB |
BIN
src/assets/images/home_yesterday_amount.png
Normal file
|
After Width: | Height: | Size: 5.5 KiB |
BIN
src/assets/images/login_center_bg.png
Normal file
|
After Width: | Height: | Size: 34 KiB |
51
src/components/Breadcrumb/index.vue
Normal file
@@ -0,0 +1,51 @@
|
||||
<template>
|
||||
<el-breadcrumb class="app-breadcrumb" separator="/">
|
||||
<transition-group name="breadcrumb">
|
||||
<el-breadcrumb-item v-for="(item,index) in levelList" :key="item.path" v-if="item.meta.title">
|
||||
<span v-if="item.redirect==='noredirect'||index==levelList.length-1" class="no-redirect">{{item.meta.title}}</span>
|
||||
<router-link v-else :to="item.redirect||item.path">{{item.meta.title}}</router-link>
|
||||
</el-breadcrumb-item>
|
||||
</transition-group>
|
||||
</el-breadcrumb>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
export default {
|
||||
created() {
|
||||
this.getBreadcrumb()
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
levelList: null
|
||||
}
|
||||
},
|
||||
watch: {
|
||||
$route() {
|
||||
this.getBreadcrumb()
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
getBreadcrumb() {
|
||||
let matched = this.$route.matched.filter(item => item.name)
|
||||
const first = matched[0]
|
||||
if (first && first.name !== 'home') {
|
||||
matched = [{ path: '/home', meta: { title: '首页' }}].concat(matched)
|
||||
}
|
||||
this.levelList = matched
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style rel="stylesheet/scss" lang="scss" scoped>
|
||||
.app-breadcrumb.el-breadcrumb {
|
||||
display: inline-block;
|
||||
font-size: 14px;
|
||||
line-height: 50px;
|
||||
margin-left: 10px;
|
||||
.no-redirect {
|
||||
color: #97a8be;
|
||||
cursor: text;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
44
src/components/Hamburger/index.vue
Normal file
@@ -0,0 +1,44 @@
|
||||
<template>
|
||||
<div>
|
||||
<svg t="1492500959545" @click="toggleClick" class="hamburger" :class="{'is-active':isActive}" style="" viewBox="0 0 1024 1024"
|
||||
version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="1691" xmlns:xlink="http://www.w3.org/1999/xlink" width="64" height="64">
|
||||
<path d="M966.8023 568.849776 57.196677 568.849776c-31.397081 0-56.850799-25.452695-56.850799-56.850799l0 0c0-31.397081 25.452695-56.849776 56.850799-56.849776l909.605623 0c31.397081 0 56.849776 25.452695 56.849776 56.849776l0 0C1023.653099 543.397081 998.200404 568.849776 966.8023 568.849776z"
|
||||
p-id="1692"></path>
|
||||
<path d="M966.8023 881.527125 57.196677 881.527125c-31.397081 0-56.850799-25.452695-56.850799-56.849776l0 0c0-31.397081 25.452695-56.849776 56.850799-56.849776l909.605623 0c31.397081 0 56.849776 25.452695 56.849776 56.849776l0 0C1023.653099 856.07443 998.200404 881.527125 966.8023 881.527125z"
|
||||
p-id="1693"></path>
|
||||
<path d="M966.8023 256.17345 57.196677 256.17345c-31.397081 0-56.850799-25.452695-56.850799-56.849776l0 0c0-31.397081 25.452695-56.850799 56.850799-56.850799l909.605623 0c31.397081 0 56.849776 25.452695 56.849776 56.850799l0 0C1023.653099 230.720755 998.200404 256.17345 966.8023 256.17345z"
|
||||
p-id="1694"></path>
|
||||
</svg>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
export default {
|
||||
name: 'hamburger',
|
||||
props: {
|
||||
isActive: {
|
||||
type: Boolean,
|
||||
default: false
|
||||
},
|
||||
toggleClick: {
|
||||
type: Function,
|
||||
default: null
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
.hamburger {
|
||||
display: inline-block;
|
||||
cursor: pointer;
|
||||
width: 20px;
|
||||
height: 20px;
|
||||
transform: rotate(90deg);
|
||||
transition: .38s;
|
||||
transform-origin: 50% 50%;
|
||||
}
|
||||
.hamburger.is-active {
|
||||
transform: rotate(0deg);
|
||||
}
|
||||
</style>
|
||||
57
src/components/ScrollBar/index.vue
Normal file
@@ -0,0 +1,57 @@
|
||||
<template>
|
||||
<div class="scroll-container" ref="scrollContainer" @wheel.prevent="handleScroll" >
|
||||
<div class="scroll-wrapper" ref="scrollWrapper" :style="{top: top + 'px'}">
|
||||
<slot></slot>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
const delta = 15
|
||||
|
||||
export default {
|
||||
name: 'scrollBar',
|
||||
data() {
|
||||
return {
|
||||
top: 0
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
handleScroll(e) {
|
||||
const eventDelta = e.wheelDelta || -e.deltaY * 3
|
||||
const $container = this.$refs.scrollContainer
|
||||
const $containerHeight = $container.offsetHeight
|
||||
const $wrapper = this.$refs.scrollWrapper
|
||||
const $wrapperHeight = $wrapper.offsetHeight
|
||||
if (eventDelta > 0) {
|
||||
this.top = Math.min(0, this.top + eventDelta)
|
||||
} else {
|
||||
if ($containerHeight - delta < $wrapperHeight) {
|
||||
if (this.top < -($wrapperHeight - $containerHeight + delta)) {
|
||||
this.top = this.top
|
||||
} else {
|
||||
this.top = Math.max(this.top + eventDelta, $containerHeight - $wrapperHeight - delta)
|
||||
}
|
||||
} else {
|
||||
this.top = 0
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style rel="stylesheet/scss" lang="scss" scoped>
|
||||
@import '../../styles/variables.scss';
|
||||
|
||||
.scroll-container {
|
||||
position: relative;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
background-color: $menuBg;
|
||||
.scroll-wrapper {
|
||||
position: absolute;
|
||||
width: 100%!important;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
42
src/components/SvgIcon/index.vue
Normal file
@@ -0,0 +1,42 @@
|
||||
<template>
|
||||
<svg :class="svgClass" aria-hidden="true">
|
||||
<use :xlink:href="iconName"></use>
|
||||
</svg>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
export default {
|
||||
name: 'svg-icon',
|
||||
props: {
|
||||
iconClass: {
|
||||
type: String,
|
||||
required: true
|
||||
},
|
||||
className: {
|
||||
type: String
|
||||
}
|
||||
},
|
||||
computed: {
|
||||
iconName() {
|
||||
return `#icon-${this.iconClass}`
|
||||
},
|
||||
svgClass() {
|
||||
if (this.className) {
|
||||
return 'svg-icon ' + this.className
|
||||
} else {
|
||||
return 'svg-icon'
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
.svg-icon {
|
||||
width: 1.2em;
|
||||
height: 1.2em;
|
||||
vertical-align: -0.18em;
|
||||
fill: currentColor;
|
||||
overflow: hidden;
|
||||
}
|
||||
</style>
|
||||
116
src/components/Tinymce/components/editorImage.vue
Normal file
@@ -0,0 +1,116 @@
|
||||
<template>
|
||||
<div class="upload-container">
|
||||
<el-button icon='el-icon-upload' size="mini" :style="{background:color,borderColor:color}"
|
||||
@click=" dialogVisible=true" type="primary">上传图片
|
||||
</el-button>
|
||||
<el-dialog append-to-body :visible.sync="dialogVisible">
|
||||
<el-upload class="editor-slide-upload"
|
||||
action="https://tuling-mall.oss-cn-shenzhen.aliyuncs.com"
|
||||
:data="dataObj"
|
||||
:multiple="true"
|
||||
:file-list="fileList"
|
||||
:show-file-list="true"
|
||||
list-type="picture-card"
|
||||
:on-remove="handleRemove"
|
||||
:on-success="handleSuccess"
|
||||
:before-upload="beforeUpload">
|
||||
<el-button size="small" type="primary">点击上传</el-button>
|
||||
</el-upload>
|
||||
<el-button @click="dialogVisible = false">取 消</el-button>
|
||||
<el-button type="primary" @click="handleSubmit">确 定</el-button>
|
||||
</el-dialog>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import {policy} from '@/api/oss'
|
||||
|
||||
export default {
|
||||
name: 'editorSlideUpload',
|
||||
props: {
|
||||
color: {
|
||||
type: String,
|
||||
default: '#1890ff'
|
||||
}
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
dialogVisible: false,
|
||||
listObj: {},
|
||||
fileList: [],
|
||||
dataObj: {
|
||||
policy: '',
|
||||
signature: '',
|
||||
key: '',
|
||||
ossaccessKeyId: '',
|
||||
dir: '',
|
||||
host: ''
|
||||
}
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
checkAllSuccess() {
|
||||
return Object.keys(this.listObj).every(item => this.listObj[item].hasSuccess)
|
||||
},
|
||||
handleSubmit() {
|
||||
const arr = Object.keys(this.listObj).map(v => this.listObj[v])
|
||||
if (!this.checkAllSuccess()) {
|
||||
this.$message('请等待所有图片上传成功 或 出现了网络问题,请刷新页面重新上传!')
|
||||
return
|
||||
}
|
||||
console.log(arr);
|
||||
this.$emit('successCBK', arr);
|
||||
this.listObj = {};
|
||||
this.fileList = [];
|
||||
this.dialogVisible = false;
|
||||
},
|
||||
handleSuccess(response, file) {
|
||||
const uid = file.uid;
|
||||
const objKeyArr = Object.keys(this.listObj)
|
||||
for (let i = 0, len = objKeyArr.length; i < len; i++) {
|
||||
if (this.listObj[objKeyArr[i]].uid === uid) {
|
||||
this.listObj[objKeyArr[i]].url = this.dataObj.host + '/' + this.dataObj.dir + '/' + file.name;
|
||||
this.listObj[objKeyArr[i]].hasSuccess = true;
|
||||
return
|
||||
}
|
||||
}
|
||||
},
|
||||
handleRemove(file) {
|
||||
const uid = file.uid;
|
||||
const objKeyArr = Object.keys(this.listObj);
|
||||
for (let i = 0, len = objKeyArr.length; i < len; i++) {
|
||||
if (this.listObj[objKeyArr[i]].uid === uid) {
|
||||
delete this.listObj[objKeyArr[i]];
|
||||
return
|
||||
}
|
||||
}
|
||||
},
|
||||
beforeUpload(file) {
|
||||
const _self = this
|
||||
const fileName = file.uid;
|
||||
this.listObj[fileName] = {};
|
||||
return new Promise((resolve, reject) => {
|
||||
policy().then(response => {
|
||||
_self.dataObj.policy = response.data.policy;
|
||||
_self.dataObj.signature = response.data.signature;
|
||||
_self.dataObj.ossaccessKeyId = response.data.accessKeyId;
|
||||
_self.dataObj.key = response.data.dir + '/${filename}';
|
||||
_self.dataObj.dir = response.data.dir;
|
||||
_self.dataObj.host = response.data.host;
|
||||
_self.listObj[fileName] = {hasSuccess: false, uid: file.uid, width: this.width, height: this.height};
|
||||
resolve(true)
|
||||
}).catch(err => {
|
||||
console.log(err)
|
||||
reject(false)
|
||||
})
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style rel="stylesheet/scss" lang="scss" scoped>
|
||||
.upload-container .editor-slide-upload{
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
</style>
|
||||
163
src/components/Tinymce/index.vue
Normal file
@@ -0,0 +1,163 @@
|
||||
<template>
|
||||
<div class="tinymce-container editor-container">
|
||||
<textarea class="tinymce-textarea" :id="tinymceId"></textarea>
|
||||
<div class="editor-custom-btn-container">
|
||||
<editorImage color="#1890ff" class="editor-upload-btn" @successCBK="imageSuccessCBK"></editorImage>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import editorImage from './components/editorImage'
|
||||
import '../../../static/tinymce4.7.5/langs/zh_CN'
|
||||
|
||||
const plugins = [
|
||||
`advlist anchor autolink autosave code codesample colorpicker colorpicker
|
||||
contextmenu directionality emoticons fullscreen hr image imagetools importcss insertdatetime
|
||||
legacyoutput link lists media nonbreaking noneditable pagebreak paste preview print save searchreplace
|
||||
spellchecker tabfocus table template textcolor textpattern visualblocks visualchars wordcount`
|
||||
];
|
||||
const toolbar = [
|
||||
`bold italic underline strikethrough alignleft aligncenter
|
||||
alignright outdent indent blockquote undo redo removeformat`,
|
||||
`hr bullist numlist link image charmap preview anchor pagebreak
|
||||
fullscreen insertdatetime media table forecolor backcolor`
|
||||
];
|
||||
export default {
|
||||
name: 'tinymce',
|
||||
components: {editorImage},
|
||||
props: {
|
||||
id: {
|
||||
type: String
|
||||
},
|
||||
value: {
|
||||
type: String,
|
||||
default: ''
|
||||
},
|
||||
toolbar: {
|
||||
type: Array,
|
||||
required: false,
|
||||
default() {
|
||||
return []
|
||||
}
|
||||
},
|
||||
menubar: {
|
||||
default: 'file edit insert view format table'
|
||||
},
|
||||
height: {
|
||||
type: Number,
|
||||
required: false,
|
||||
default: 360
|
||||
},
|
||||
width: {
|
||||
type: Number,
|
||||
required: false,
|
||||
default: 720
|
||||
}
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
hasChange: false,
|
||||
hasInit: false,
|
||||
tinymceId: this.id || 'vue-tinymce-' + +new Date()
|
||||
}
|
||||
},
|
||||
watch: {
|
||||
value(val) {
|
||||
if (!this.hasChange && this.hasInit) {
|
||||
this.$nextTick(() => window.tinymce.get(this.tinymceId).setContent(val))
|
||||
}
|
||||
}
|
||||
},
|
||||
mounted() {
|
||||
this.initTinymce()
|
||||
},
|
||||
activated() {
|
||||
this.initTinymce()
|
||||
},
|
||||
deactivated() {
|
||||
this.destroyTinymce()
|
||||
},
|
||||
methods: {
|
||||
initTinymce() {
|
||||
const _this = this
|
||||
window.tinymce.init({
|
||||
selector: `#${this.tinymceId}`,
|
||||
width: this.width,
|
||||
height: this.height,
|
||||
language: 'zh_CN',
|
||||
body_class: 'panel-body ',
|
||||
object_resizing: false,
|
||||
toolbar: this.toolbar.length > 0 ? this.toolbar : toolbar,
|
||||
menubar: false,
|
||||
plugins: plugins,
|
||||
end_container_on_empty_block: true,
|
||||
powerpaste_word_import: 'clean',
|
||||
code_dialog_height: 450,
|
||||
code_dialog_width: 1000,
|
||||
advlist_bullet_styles: 'square',
|
||||
advlist_number_styles: 'default',
|
||||
imagetools_cors_hosts: ['www.tinymce.com', 'codepen.io'],
|
||||
default_link_target: '_blank',
|
||||
link_title: false,
|
||||
init_instance_callback: editor => {
|
||||
if (_this.value) {
|
||||
editor.setContent(_this.value)
|
||||
}
|
||||
_this.hasInit = true
|
||||
editor.on('NodeChange Change KeyUp SetContent', () => {
|
||||
this.hasChange = true
|
||||
this.$emit('input', editor.getContent())
|
||||
})
|
||||
}
|
||||
})
|
||||
},
|
||||
destroyTinymce() {
|
||||
if (window.tinymce.get(this.tinymceId)) {
|
||||
window.tinymce.get(this.tinymceId).destroy()
|
||||
}
|
||||
},
|
||||
setContent(value) {
|
||||
window.tinymce.get(this.tinymceId).setContent(value)
|
||||
},
|
||||
getContent() {
|
||||
window.tinymce.get(this.tinymceId).getContent()
|
||||
},
|
||||
imageSuccessCBK(arr) {
|
||||
const _this = this
|
||||
arr.forEach(v => {
|
||||
window.tinymce.get(_this.tinymceId).insertContent(`<img class="wscnph" src="${v.url}" >`)
|
||||
})
|
||||
}
|
||||
},
|
||||
destroyed() {
|
||||
this.destroyTinymce()
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
.tinymce-container {
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.tinymce-container >>> .mce-fullscreen {
|
||||
z-index: 10000;
|
||||
}
|
||||
|
||||
.tinymce-textarea {
|
||||
visibility: hidden;
|
||||
z-index: -1;
|
||||
}
|
||||
|
||||
.editor-custom-btn-container {
|
||||
position: absolute;
|
||||
right: 10px;
|
||||
top: 2px;
|
||||
/*z-index: 2005;*/
|
||||
}
|
||||
|
||||
.editor-upload-btn {
|
||||
display: inline-block;
|
||||
}
|
||||
</style>
|
||||
230
src/components/Tinymce/zh_CN.js
Normal file
@@ -0,0 +1,230 @@
|
||||
tinymce.addI18n('zh_CN',{
|
||||
"Cut": "\u526a\u5207",
|
||||
"Heading 5": "\u6807\u98985",
|
||||
"Header 2": "\u6807\u98982",
|
||||
"Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X\/C\/V keyboard shortcuts instead.": "\u4f60\u7684\u6d4f\u89c8\u5668\u4e0d\u652f\u6301\u5bf9\u526a\u8d34\u677f\u7684\u8bbf\u95ee\uff0c\u8bf7\u4f7f\u7528Ctrl+X\/C\/V\u952e\u8fdb\u884c\u590d\u5236\u7c98\u8d34\u3002",
|
||||
"Heading 4": "\u6807\u98984",
|
||||
"Div": "Div\u533a\u5757",
|
||||
"Heading 2": "\u6807\u98982",
|
||||
"Paste": "\u7c98\u8d34",
|
||||
"Close": "\u5173\u95ed",
|
||||
"Font Family": "\u5b57\u4f53",
|
||||
"Pre": "\u9884\u683c\u5f0f\u6587\u672c",
|
||||
"Align right": "\u53f3\u5bf9\u9f50",
|
||||
"New document": "\u65b0\u6587\u6863",
|
||||
"Blockquote": "\u5f15\u7528",
|
||||
"Numbered list": "\u7f16\u53f7\u5217\u8868",
|
||||
"Heading 1": "\u6807\u98981",
|
||||
"Headings": "\u6807\u9898",
|
||||
"Increase indent": "\u589e\u52a0\u7f29\u8fdb",
|
||||
"Formats": "\u683c\u5f0f",
|
||||
"Headers": "\u6807\u9898",
|
||||
"Select all": "\u5168\u9009",
|
||||
"Header 3": "\u6807\u98983",
|
||||
"Blocks": "\u533a\u5757",
|
||||
"Undo": "\u64a4\u6d88",
|
||||
"Strikethrough": "\u5220\u9664\u7ebf",
|
||||
"Bullet list": "\u9879\u76ee\u7b26\u53f7",
|
||||
"Header 1": "\u6807\u98981",
|
||||
"Superscript": "\u4e0a\u6807",
|
||||
"Clear formatting": "\u6e05\u9664\u683c\u5f0f",
|
||||
"Font Sizes": "\u5b57\u53f7",
|
||||
"Subscript": "\u4e0b\u6807",
|
||||
"Header 6": "\u6807\u98986",
|
||||
"Redo": "\u91cd\u590d",
|
||||
"Paragraph": "\u6bb5\u843d",
|
||||
"Ok": "\u786e\u5b9a",
|
||||
"Bold": "\u7c97\u4f53",
|
||||
"Code": "\u4ee3\u7801",
|
||||
"Italic": "\u659c\u4f53",
|
||||
"Align center": "\u5c45\u4e2d",
|
||||
"Header 5": "\u6807\u98985",
|
||||
"Heading 6": "\u6807\u98986",
|
||||
"Heading 3": "\u6807\u98983",
|
||||
"Decrease indent": "\u51cf\u5c11\u7f29\u8fdb",
|
||||
"Header 4": "\u6807\u98984",
|
||||
"Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.": "\u5f53\u524d\u4e3a\u7eaf\u6587\u672c\u7c98\u8d34\u6a21\u5f0f\uff0c\u518d\u6b21\u70b9\u51fb\u53ef\u4ee5\u56de\u5230\u666e\u901a\u7c98\u8d34\u6a21\u5f0f\u3002",
|
||||
"Underline": "\u4e0b\u5212\u7ebf",
|
||||
"Cancel": "\u53d6\u6d88",
|
||||
"Justify": "\u4e24\u7aef\u5bf9\u9f50",
|
||||
"Inline": "\u6587\u672c",
|
||||
"Copy": "\u590d\u5236",
|
||||
"Align left": "\u5de6\u5bf9\u9f50",
|
||||
"Visual aids": "\u7f51\u683c\u7ebf",
|
||||
"Lower Greek": "\u5c0f\u5199\u5e0c\u814a\u5b57\u6bcd",
|
||||
"Square": "\u65b9\u5757",
|
||||
"Default": "\u9ed8\u8ba4",
|
||||
"Lower Alpha": "\u5c0f\u5199\u82f1\u6587\u5b57\u6bcd",
|
||||
"Circle": "\u7a7a\u5fc3\u5706",
|
||||
"Disc": "\u5b9e\u5fc3\u5706",
|
||||
"Upper Alpha": "\u5927\u5199\u82f1\u6587\u5b57\u6bcd",
|
||||
"Upper Roman": "\u5927\u5199\u7f57\u9a6c\u5b57\u6bcd",
|
||||
"Lower Roman": "\u5c0f\u5199\u7f57\u9a6c\u5b57\u6bcd",
|
||||
"Id should start with a letter, followed only by letters, numbers, dashes, dots, colons or underscores.": "\u6807\u8bc6\u7b26\u5e94\u8be5\u4ee5\u5b57\u6bcd\u5f00\u5934\uff0c\u540e\u8ddf\u5b57\u6bcd\u3001\u6570\u5b57\u3001\u7834\u6298\u53f7\u3001\u70b9\u3001\u5192\u53f7\u6216\u4e0b\u5212\u7ebf\u3002",
|
||||
"Name": "\u540d\u79f0",
|
||||
"Anchor": "\u951a\u70b9",
|
||||
"Id": "\u6807\u8bc6\u7b26",
|
||||
"You have unsaved changes are you sure you want to navigate away?": "\u4f60\u8fd8\u6709\u6587\u6863\u5c1a\u672a\u4fdd\u5b58\uff0c\u786e\u5b9a\u8981\u79bb\u5f00\uff1f",
|
||||
"Restore last draft": "\u6062\u590d\u4e0a\u6b21\u7684\u8349\u7a3f",
|
||||
"Special character": "\u7279\u6b8a\u7b26\u53f7",
|
||||
"Source code": "\u6e90\u4ee3\u7801",
|
||||
"Language": "\u8bed\u8a00",
|
||||
"Insert\/Edit code sample": "\u63d2\u5165\/\u7f16\u8f91\u4ee3\u7801\u793a\u4f8b",
|
||||
"B": "B",
|
||||
"R": "R",
|
||||
"G": "G",
|
||||
"Color": "\u989c\u8272",
|
||||
"Right to left": "\u4ece\u53f3\u5230\u5de6",
|
||||
"Left to right": "\u4ece\u5de6\u5230\u53f3",
|
||||
"Emoticons": "\u8868\u60c5",
|
||||
"Robots": "\u673a\u5668\u4eba",
|
||||
"Document properties": "\u6587\u6863\u5c5e\u6027",
|
||||
"Title": "\u6807\u9898",
|
||||
"Keywords": "\u5173\u952e\u8bcd",
|
||||
"Encoding": "\u7f16\u7801",
|
||||
"Description": "\u63cf\u8ff0",
|
||||
"Author": "\u4f5c\u8005",
|
||||
"Fullscreen": "\u5168\u5c4f",
|
||||
"Horizontal line": "\u6c34\u5e73\u5206\u5272\u7ebf",
|
||||
"Horizontal space": "\u6c34\u5e73\u8fb9\u8ddd",
|
||||
"Insert\/edit image": "\u63d2\u5165\/\u7f16\u8f91\u56fe\u7247",
|
||||
"General": "\u666e\u901a",
|
||||
"Advanced": "\u9ad8\u7ea7",
|
||||
"Source": "\u5730\u5740",
|
||||
"Border": "\u8fb9\u6846",
|
||||
"Constrain proportions": "\u4fdd\u6301\u7eb5\u6a2a\u6bd4",
|
||||
"Vertical space": "\u5782\u76f4\u8fb9\u8ddd",
|
||||
"Image description": "\u56fe\u7247\u63cf\u8ff0",
|
||||
"Style": "\u6837\u5f0f",
|
||||
"Dimensions": "\u5927\u5c0f",
|
||||
"Insert image": "\u63d2\u5165\u56fe\u7247",
|
||||
"Image": "\u56fe\u7247",
|
||||
"Zoom in": "\u653e\u5927",
|
||||
"Contrast": "\u5bf9\u6bd4\u5ea6",
|
||||
"Back": "\u540e\u9000",
|
||||
"Gamma": "\u4f3d\u9a6c\u503c",
|
||||
"Flip horizontally": "\u6c34\u5e73\u7ffb\u8f6c",
|
||||
"Resize": "\u8c03\u6574\u5927\u5c0f",
|
||||
"Sharpen": "\u9510\u5316",
|
||||
"Zoom out": "\u7f29\u5c0f",
|
||||
"Image options": "\u56fe\u7247\u9009\u9879",
|
||||
"Apply": "\u5e94\u7528",
|
||||
"Brightness": "\u4eae\u5ea6",
|
||||
"Rotate clockwise": "\u987a\u65f6\u9488\u65cb\u8f6c",
|
||||
"Rotate counterclockwise": "\u9006\u65f6\u9488\u65cb\u8f6c",
|
||||
"Edit image": "\u7f16\u8f91\u56fe\u7247",
|
||||
"Color levels": "\u989c\u8272\u5c42\u6b21",
|
||||
"Crop": "\u88c1\u526a",
|
||||
"Orientation": "\u65b9\u5411",
|
||||
"Flip vertically": "\u5782\u76f4\u7ffb\u8f6c",
|
||||
"Invert": "\u53cd\u8f6c",
|
||||
"Date\/time": "\u65e5\u671f\/\u65f6\u95f4",
|
||||
"Insert date\/time": "\u63d2\u5165\u65e5\u671f\/\u65f6\u95f4",
|
||||
"Remove link": "\u5220\u9664\u94fe\u63a5",
|
||||
"Url": "\u5730\u5740",
|
||||
"Text to display": "\u663e\u793a\u6587\u5b57",
|
||||
"Anchors": "\u951a\u70b9",
|
||||
"Insert link": "\u63d2\u5165\u94fe\u63a5",
|
||||
"Link": "\u94fe\u63a5",
|
||||
"New window": "\u5728\u65b0\u7a97\u53e3\u6253\u5f00",
|
||||
"None": "\u65e0",
|
||||
"The URL you entered seems to be an external link. Do you want to add the required http:\/\/ prefix?": "\u4f60\u6240\u586b\u5199\u7684URL\u5730\u5740\u5c5e\u4e8e\u5916\u90e8\u94fe\u63a5\uff0c\u9700\u8981\u52a0\u4e0ahttp:\/\/:\u524d\u7f00\u5417\uff1f",
|
||||
"Paste or type a link": "\u7c98\u8d34\u6216\u8f93\u5165\u94fe\u63a5",
|
||||
"Target": "\u6253\u5f00\u65b9\u5f0f",
|
||||
"The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?": "\u4f60\u6240\u586b\u5199\u7684URL\u5730\u5740\u4e3a\u90ae\u4ef6\u5730\u5740\uff0c\u9700\u8981\u52a0\u4e0amailto:\u524d\u7f00\u5417\uff1f",
|
||||
"Insert\/edit link": "\u63d2\u5165\/\u7f16\u8f91\u94fe\u63a5",
|
||||
"Insert\/edit video": "\u63d2\u5165\/\u7f16\u8f91\u89c6\u9891",
|
||||
"Media": "\u5a92\u4f53",
|
||||
"Alternative source": "\u955c\u50cf",
|
||||
"Paste your embed code below:": "\u5c06\u5185\u5d4c\u4ee3\u7801\u7c98\u8d34\u5728\u4e0b\u9762:",
|
||||
"Insert video": "\u63d2\u5165\u89c6\u9891",
|
||||
"Poster": "\u5c01\u9762",
|
||||
"Insert\/edit media": "\u63d2\u5165\/\u7f16\u8f91\u5a92\u4f53",
|
||||
"Embed": "\u5185\u5d4c",
|
||||
"Nonbreaking space": "\u4e0d\u95f4\u65ad\u7a7a\u683c",
|
||||
"Page break": "\u5206\u9875\u7b26",
|
||||
"Paste as text": "\u7c98\u8d34\u4e3a\u6587\u672c",
|
||||
"Preview": "\u9884\u89c8",
|
||||
"Print": "\u6253\u5370",
|
||||
"Save": "\u4fdd\u5b58",
|
||||
"Could not find the specified string.": "\u672a\u627e\u5230\u641c\u7d22\u5185\u5bb9.",
|
||||
"Replace": "\u66ff\u6362",
|
||||
"Next": "\u4e0b\u4e00\u4e2a",
|
||||
"Whole words": "\u5168\u5b57\u5339\u914d",
|
||||
"Find and replace": "\u67e5\u627e\u548c\u66ff\u6362",
|
||||
"Replace with": "\u66ff\u6362\u4e3a",
|
||||
"Find": "\u67e5\u627e",
|
||||
"Replace all": "\u5168\u90e8\u66ff\u6362",
|
||||
"Match case": "\u533a\u5206\u5927\u5c0f\u5199",
|
||||
"Prev": "\u4e0a\u4e00\u4e2a",
|
||||
"Spellcheck": "\u62fc\u5199\u68c0\u67e5",
|
||||
"Finish": "\u5b8c\u6210",
|
||||
"Ignore all": "\u5168\u90e8\u5ffd\u7565",
|
||||
"Ignore": "\u5ffd\u7565",
|
||||
"Add to Dictionary": "\u6dfb\u52a0\u5230\u5b57\u5178",
|
||||
"Insert row before": "\u5728\u4e0a\u65b9\u63d2\u5165",
|
||||
"Rows": "\u884c",
|
||||
"Height": "\u9ad8",
|
||||
"Paste row after": "\u7c98\u8d34\u5230\u4e0b\u65b9",
|
||||
"Alignment": "\u5bf9\u9f50\u65b9\u5f0f",
|
||||
"Border color": "\u8fb9\u6846\u989c\u8272",
|
||||
"Column group": "\u5217\u7ec4",
|
||||
"Row": "\u884c",
|
||||
"Insert column before": "\u5728\u5de6\u4fa7\u63d2\u5165",
|
||||
"Split cell": "\u62c6\u5206\u5355\u5143\u683c",
|
||||
"Cell padding": "\u5355\u5143\u683c\u5185\u8fb9\u8ddd",
|
||||
"Cell spacing": "\u5355\u5143\u683c\u5916\u95f4\u8ddd",
|
||||
"Row type": "\u884c\u7c7b\u578b",
|
||||
"Insert table": "\u63d2\u5165\u8868\u683c",
|
||||
"Body": "\u8868\u4f53",
|
||||
"Caption": "\u6807\u9898",
|
||||
"Footer": "\u8868\u5c3e",
|
||||
"Delete row": "\u5220\u9664\u884c",
|
||||
"Paste row before": "\u7c98\u8d34\u5230\u4e0a\u65b9",
|
||||
"Scope": "\u8303\u56f4",
|
||||
"Delete table": "\u5220\u9664\u8868\u683c",
|
||||
"H Align": "\u6c34\u5e73\u5bf9\u9f50",
|
||||
"Top": "\u9876\u90e8\u5bf9\u9f50",
|
||||
"Header cell": "\u8868\u5934\u5355\u5143\u683c",
|
||||
"Column": "\u5217",
|
||||
"Row group": "\u884c\u7ec4",
|
||||
"Cell": "\u5355\u5143\u683c",
|
||||
"Middle": "\u5782\u76f4\u5c45\u4e2d",
|
||||
"Cell type": "\u5355\u5143\u683c\u7c7b\u578b",
|
||||
"Copy row": "\u590d\u5236\u884c",
|
||||
"Row properties": "\u884c\u5c5e\u6027",
|
||||
"Table properties": "\u8868\u683c\u5c5e\u6027",
|
||||
"Bottom": "\u5e95\u90e8\u5bf9\u9f50",
|
||||
"V Align": "\u5782\u76f4\u5bf9\u9f50",
|
||||
"Header": "\u8868\u5934",
|
||||
"Right": "\u53f3\u5bf9\u9f50",
|
||||
"Insert column after": "\u5728\u53f3\u4fa7\u63d2\u5165",
|
||||
"Cols": "\u5217",
|
||||
"Insert row after": "\u5728\u4e0b\u65b9\u63d2\u5165",
|
||||
"Width": "\u5bbd",
|
||||
"Cell properties": "\u5355\u5143\u683c\u5c5e\u6027",
|
||||
"Left": "\u5de6\u5bf9\u9f50",
|
||||
"Cut row": "\u526a\u5207\u884c",
|
||||
"Delete column": "\u5220\u9664\u5217",
|
||||
"Center": "\u5c45\u4e2d",
|
||||
"Merge cells": "\u5408\u5e76\u5355\u5143\u683c",
|
||||
"Insert template": "\u63d2\u5165\u6a21\u677f",
|
||||
"Templates": "\u6a21\u677f",
|
||||
"Background color": "\u80cc\u666f\u8272",
|
||||
"Custom...": "\u81ea\u5b9a\u4e49...",
|
||||
"Custom color": "\u81ea\u5b9a\u4e49\u989c\u8272",
|
||||
"No color": "\u65e0",
|
||||
"Text color": "\u6587\u5b57\u989c\u8272",
|
||||
"Table of Contents": "\u5185\u5bb9\u5217\u8868",
|
||||
"Show blocks": "\u663e\u793a\u533a\u5757\u8fb9\u6846",
|
||||
"Show invisible characters": "\u663e\u793a\u4e0d\u53ef\u89c1\u5b57\u7b26",
|
||||
"Words: {0}": "\u5b57\u6570\uff1a{0}",
|
||||
"Insert": "\u63d2\u5165",
|
||||
"File": "\u6587\u4ef6",
|
||||
"Edit": "\u7f16\u8f91",
|
||||
"Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help": "\u5728\u7f16\u8f91\u533a\u6309ALT-F9\u6253\u5f00\u83dc\u5355\uff0c\u6309ALT-F10\u6253\u5f00\u5de5\u5177\u680f\uff0c\u6309ALT-0\u67e5\u770b\u5e2e\u52a9",
|
||||
"Tools": "\u5de5\u5177",
|
||||
"View": "\u89c6\u56fe",
|
||||
"Table": "\u8868\u683c",
|
||||
"Format": "\u683c\u5f0f"
|
||||
});
|
||||
109
src/components/Upload/multiUpload.vue
Normal file
@@ -0,0 +1,109 @@
|
||||
<template>
|
||||
<div>
|
||||
<el-upload
|
||||
action="https://tuling-mall.oss-cn-shenzhen.aliyuncs.com"
|
||||
:data="dataObj"
|
||||
list-type="picture-card"
|
||||
:file-list="fileList"
|
||||
:before-upload="beforeUpload"
|
||||
:on-remove="handleRemove"
|
||||
:on-success="handleUploadSuccess"
|
||||
:on-preview="handlePreview"
|
||||
:limit="maxCount"
|
||||
:on-exceed="handleExceed"
|
||||
>
|
||||
<i class="el-icon-plus"></i>
|
||||
</el-upload>
|
||||
<el-dialog :visible.sync="dialogVisible">
|
||||
<img width="100%" :src="dialogImageUrl" alt="">
|
||||
</el-dialog>
|
||||
</div>
|
||||
</template>
|
||||
<script>
|
||||
import {policy} from '@/api/oss'
|
||||
|
||||
export default {
|
||||
name: 'multiUpload',
|
||||
props: {
|
||||
//图片属性数组
|
||||
value: Array,
|
||||
//最大上传图片数量
|
||||
maxCount:{
|
||||
type:Number,
|
||||
default:5
|
||||
}
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
dataObj: {
|
||||
policy: '',
|
||||
signature: '',
|
||||
key: '',
|
||||
ossaccessKeyId: '',
|
||||
dir: '',
|
||||
host: ''
|
||||
},
|
||||
dialogVisible: false,
|
||||
dialogImageUrl:null
|
||||
};
|
||||
},
|
||||
computed: {
|
||||
fileList() {
|
||||
let fileList=[];
|
||||
for(let i=0;i<this.value.length;i++){
|
||||
fileList.push({url:this.value[i]});
|
||||
}
|
||||
return fileList;
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
emitInput(fileList) {
|
||||
let value=[];
|
||||
for(let i=0;i<fileList.length;i++){
|
||||
value.push(fileList[i].url);
|
||||
}
|
||||
this.$emit('input', value)
|
||||
},
|
||||
handleRemove(file, fileList) {
|
||||
this.emitInput(fileList);
|
||||
},
|
||||
handlePreview(file) {
|
||||
this.dialogVisible = true;
|
||||
this.dialogImageUrl=file.url;
|
||||
},
|
||||
beforeUpload(file) {
|
||||
let _self = this;
|
||||
return new Promise((resolve, reject) => {
|
||||
policy().then(response => {
|
||||
_self.dataObj.policy = response.data.policy;
|
||||
_self.dataObj.signature = response.data.signature;
|
||||
_self.dataObj.ossaccessKeyId = response.data.accessKeyId;
|
||||
_self.dataObj.key = response.data.dir + '/${filename}';
|
||||
_self.dataObj.dir = response.data.dir;
|
||||
_self.dataObj.host = response.data.host;
|
||||
resolve(true)
|
||||
}).catch(err => {
|
||||
console.log(err)
|
||||
reject(false)
|
||||
})
|
||||
})
|
||||
},
|
||||
handleUploadSuccess(res, file) {
|
||||
this.fileList.push({url: file.name,url:this.dataObj.host + '/' + this.dataObj.dir + '/' + file.name});
|
||||
this.emitInput(this.fileList);
|
||||
},
|
||||
handleExceed(files, fileList) {
|
||||
this.$message({
|
||||
message: '最多只能上传'+this.maxCount+'张图片',
|
||||
type: 'warning',
|
||||
duration:1000
|
||||
});
|
||||
},
|
||||
}
|
||||
}
|
||||
</script>
|
||||
<style>
|
||||
|
||||
</style>
|
||||
|
||||
|
||||
109
src/components/Upload/singleUpload.vue
Normal file
@@ -0,0 +1,109 @@
|
||||
<template>
|
||||
<div>
|
||||
<el-upload
|
||||
action="https://tuling-mall.oss-cn-shenzhen.aliyuncs.com"
|
||||
:data="dataObj"
|
||||
list-type="picture"
|
||||
:multiple="false" :show-file-list="showFileList"
|
||||
:file-list="fileList"
|
||||
:before-upload="beforeUpload"
|
||||
:on-remove="handleRemove"
|
||||
:on-success="handleUploadSuccess"
|
||||
:on-preview="handlePreview">
|
||||
<el-button size="small" type="primary">点击上传</el-button>
|
||||
<div slot="tip" class="el-upload__tip">只能上传jpg/png文件,且不超过10MB</div>
|
||||
</el-upload>
|
||||
<el-dialog :visible.sync="dialogVisible">
|
||||
<img width="100%" :src="fileList[0].url" alt="">
|
||||
</el-dialog>
|
||||
</div>
|
||||
</template>
|
||||
<script>
|
||||
import {policy} from '@/api/oss'
|
||||
|
||||
export default {
|
||||
name: 'singleUpload',
|
||||
props: {
|
||||
value: String
|
||||
},
|
||||
computed: {
|
||||
imageUrl() {
|
||||
return this.value;
|
||||
},
|
||||
imageName() {
|
||||
if (this.value != null && this.value !== '') {
|
||||
return this.value.substr(this.value.lastIndexOf("/") + 1);
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
},
|
||||
fileList() {
|
||||
return [{
|
||||
name: this.imageName,
|
||||
url: this.imageUrl
|
||||
}]
|
||||
},
|
||||
showFileList: {
|
||||
get: function () {
|
||||
return this.value !== null && this.value !== ''&& this.value!==undefined;
|
||||
},
|
||||
set: function (newValue) {
|
||||
}
|
||||
}
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
dataObj: {
|
||||
policy: '',
|
||||
signature: '',
|
||||
key: '',
|
||||
ossaccessKeyId: '',
|
||||
dir: '',
|
||||
host: '',
|
||||
// callback:'',
|
||||
},
|
||||
dialogVisible: false
|
||||
};
|
||||
},
|
||||
methods: {
|
||||
emitInput(val) {
|
||||
this.$emit('input', val)
|
||||
},
|
||||
handleRemove(file, fileList) {
|
||||
this.emitInput('');
|
||||
},
|
||||
handlePreview(file) {
|
||||
this.dialogVisible = true;
|
||||
},
|
||||
beforeUpload(file) {
|
||||
let _self = this;
|
||||
return new Promise((resolve, reject) => {
|
||||
policy().then(response => {
|
||||
_self.dataObj.policy = response.data.policy;
|
||||
_self.dataObj.signature = response.data.signature;
|
||||
_self.dataObj.ossaccessKeyId = response.data.accessKeyId;
|
||||
_self.dataObj.key = response.data.dir + '/${filename}';
|
||||
_self.dataObj.dir = response.data.dir;
|
||||
_self.dataObj.host = response.data.host;
|
||||
// _self.dataObj.callback = response.data.callback;
|
||||
resolve(true)
|
||||
}).catch(err => {
|
||||
console.log(err)
|
||||
reject(false)
|
||||
})
|
||||
})
|
||||
},
|
||||
handleUploadSuccess(res, file) {
|
||||
this.showFileList = true;
|
||||
this.fileList.pop();
|
||||
this.fileList.push({name: file.name, url: this.dataObj.host + '/' + this.dataObj.dir + '/' + file.name});
|
||||
this.emitInput(this.fileList[0].url);
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
<style>
|
||||
|
||||
</style>
|
||||
|
||||
|
||||
BIN
src/favicon.ico
Normal file
|
After Width: | Height: | Size: 4.2 KiB |
9
src/icons/index.js
Normal file
@@ -0,0 +1,9 @@
|
||||
import Vue from 'vue'
|
||||
import SvgIcon from '@/components/SvgIcon'// svg组件
|
||||
|
||||
// register globally
|
||||
Vue.component('svg-icon', SvgIcon)
|
||||
|
||||
const requireAll = requireContext => requireContext.keys().map(requireContext)
|
||||
const req = require.context('./svg', false, /\.svg$/)
|
||||
requireAll(req)
|
||||
1
src/icons/svg/example.svg
Normal file
@@ -0,0 +1 @@
|
||||
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1511504199105" class="icon" style="" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="1815" xmlns:xlink="http://www.w3.org/1999/xlink" width="64" height="64"><defs><style type="text/css"></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.36z m0 0M460.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.36z m0 0M563.2 770.56v250.88c243.2-23.04 435.2-217.6 460.8-460.8H773.12C750.08 668.16 668.16 750.08 563.2 770.56z m0 0M253.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.2z m0 0" fill="" p-id="1816"></path></svg>
|
||||
|
After Width: | Height: | Size: 852 B |
1
src/icons/svg/eye.svg
Normal file
@@ -0,0 +1 @@
|
||||
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1503993826520" class="icon" style="" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="7878" xmlns:xlink="http://www.w3.org/1999/xlink" width="64" height="64"><defs><style type="text/css"></style></defs><path d="M941.677063 391.710356c9.337669-14.005992 6.224772-32.68133-6.224772-43.575447-14.005992-10.894118-32.68133-7.78122-43.575447 6.224771-1.556449 1.556449-174.300768 205.426673-379.727441 205.426673-199.200878 0-379.727441-205.426673-381.28389-206.982098-10.894118-12.450567-31.124881-14.005992-43.575448-3.112898-12.450567 10.894118-14.005992 31.124881-3.112897 43.575448 3.112897 4.668323 40.46255 46.687322 99.600439 93.375667l-79.369676 82.48155c-12.450567 12.450567-10.894118 32.68133 1.556449 43.575448 3.112897 6.224772 10.894118 9.337669 18.675338 9.337669 7.78122 0 15.562441-3.112897 21.787213-9.337669l85.594447-88.706321c40.46255 28.013007 88.706321 54.469566 141.619438 73.14388L340.959485 707.631586c-4.668323 17.118889 4.669346 34.237779 21.787213 38.906101h9.337669c14.005992 0 26.456558-9.337669 29.568432-23.343661l32.68133-110.494556c24.90011 4.668323 51.356668 7.78122 77.813227 7.78122s52.913117-3.112897 77.813227-7.78122l32.68133 108.938108c3.112897 14.005992 17.118889 23.343661 29.569456 23.343661 3.112897 0 6.224772 0 7.78122-1.556449 17.118889-4.669346 26.456558-21.787212 21.788236-38.906102l-32.68133-108.938108c52.913117-18.675338 101.156888-45.131897 141.619438-73.14388l84.037998 87.150896c6.224772 6.224772 14.005992 9.337669 21.787212 9.337669 7.78122 0 15.562441-3.112897 21.787212-9.337669 12.450567-12.450567 12.450567-31.124881 1.556449-43.575448l-79.369675-82.48155c63.808258-46.688345 101.158934-91.820242 101.158934-91.820242z" p-id="7879"></path></svg>
|
||||
|
After Width: | Height: | Size: 1.8 KiB |
1
src/icons/svg/form.svg
Normal file
@@ -0,0 +1 @@
|
||||
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1511504319223" class="icon" style="" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="3230" xmlns:xlink="http://www.w3.org/1999/xlink" width="64" height="64"><defs><style type="text/css"></style></defs><path d="M942.827259 80.3367c-11.42419-11.406794-26.41051-17.117866-41.377386-17.117866-14.985296 0-29.952172 5.711072-41.358967 17.117866L719.392444 221.014696l-19.441794 19.441794L681.577187 258.832 569.516971 370.909611 375.99749 564.411697l0 0.019443 0 84.372619 81.145112 0 0.010233 0 95.418186-95.435583 213.398228-213.400275 3.14155-3.14155-0.019443 0 9.979282-9.977235 0 0L942.827259 163.073052C965.697129 140.259464 965.697129 103.186104 942.827259 80.3367z" p-id="3231"></path><path d="M793.542234 367.521444 580.14196 580.939115 484.72582 676.376745 473.299583 687.800935 457.152834 687.800935 375.99749 687.800935 337.000314 687.800935 337.000314 648.803759 337.000314 564.411697 337.000314 548.264948 348.424504 536.838711 541.943986 343.338672 654.004201 231.259014 665.428392 219.834824 64.020082 219.834824 64.020082 960.781166 804.966425 960.781166 804.966425 356.116697 796.607036 364.475062Z" p-id="3232"></path></svg>
|
||||
|
After Width: | Height: | Size: 1.3 KiB |
1
src/icons/svg/home.svg
Normal file
@@ -0,0 +1 @@
|
||||
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1526283460904" class="icon" style="" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="3665" xmlns:xlink="http://www.w3.org/1999/xlink" width="128" height="128"><defs><style type="text/css"></style></defs><path d="M563.197497 0 460.802503 0 0.012259 486.388227c0 0 0.901006 102.396016 51.200051 102.396016s76.797012 0 76.797012 0 0 232.496449 0 332.816677c0 100.300818 102.397038 102.399081 102.397038 102.399081l204.79714 0c0 0 0-272.419617 0-358.416702 0-25.647017 25.600026-25.600026 25.600026-25.600026l102.394994 0c0 0 25.601047 0.851972 25.601047 25.600026 0 92.198911 0 358.416702 0 358.416702s99.647027 0 204.795097 0c105.147048 0 102.398059-102.399081 102.398059-102.399081L895.992721 563.185239c0 0 27.19875 0 76.799055 0 49.59724 0 51.195965-76.79599 51.195965-76.79599L563.197497 0z" p-id="3666"></path></svg>
|
||||
|
After Width: | Height: | Size: 993 B |
1
src/icons/svg/login-mall.svg
Normal file
@@ -0,0 +1 @@
|
||||
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1542852993843" class="icon" style="" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="2043" xmlns:xlink="http://www.w3.org/1999/xlink" width="54" height="54"><defs><style type="text/css"></style></defs><path d="M825.6 554.666667c-64 0-121.6-38.4-155.733333-89.6C633.6 516.266667 576 554.666667 512 554.666667s-121.6-38.4-155.733333-89.6C320 516.266667 264.533333 554.666667 198.4 554.666667 89.6 554.666667 0 465.066667 0 356.266667v-8.533334L151.466667 0h721.066666L1024 345.6v8.533333c0 110.933333-89.6 200.533333-198.4 200.533334z m-200.533333-219.733334h85.333333c0 61.866667 51.2 134.4 113.066667 134.4 59.733333 0 108.8-46.933333 113.066666-104.533333L817.066667 85.333333H206.933333L85.333333 364.8c4.266667 57.6 53.333333 104.533333 113.066667 104.533333 64 0 113.066667-74.666667 113.066667-134.4h85.333333c0 61.866667 51.2 134.4 113.066667 134.4 66.133333 0 115.2-74.666667 115.2-134.4zM810.666667 1021.866667H213.333333c-83.2 0-149.333333-64-149.333333-142.933334V595.2h85.333333v283.733333c0 32 27.733333 57.6 64 57.6h597.333334c34.133333 0 64-25.6 64-57.6V595.2h85.333333v283.733333c0 78.933333-66.133333 142.933333-149.333333 142.933334z" p-id="2044"></path></svg>
|
||||
|
After Width: | Height: | Size: 1.3 KiB |
1
src/icons/svg/marker.svg
Normal file
@@ -0,0 +1 @@
|
||||
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1540454363495" class="icon" style="" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="1978" xmlns:xlink="http://www.w3.org/1999/xlink" width="64" height="64"><defs><style type="text/css"></style></defs><path d="M789 112.1c8.1 0 15.9 1.6 23.2 4.8 11.7 4.6 20.9 11.8 27.8 21.7s10.3 20.8 10.3 32.8v681.5c0 12-3.4 22.9-10.3 32.8-6.9 9.9-16.1 17.1-27.8 21.7-6.7 2.8-14.5 4.2-23.2 4.2-16.9 0-31.6-5.7-43.9-16.9l-233-224.3-233.2 224.1C266.2 906.2 251.5 912 235 912c-8.1 0-15.9-1.6-23.2-4.8-11.7-4.6-20.9-11.8-27.8-21.7-6.9-9.9-10.3-20.8-10.3-32.8V171.3c0-12 3.4-22.9 10.3-32.8 6.9-9.9 16.1-17.1 27.8-21.7 7.4-3.2 15.1-4.8 23.2-4.8h554v0.1z" p-id="1979"></path></svg>
|
||||
|
After Width: | Height: | Size: 832 B |
1
src/icons/svg/order-return-reason.svg
Normal file
@@ -0,0 +1 @@
|
||||
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1539332319502" class="icon" style="" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="8983" xmlns:xlink="http://www.w3.org/1999/xlink" width="64" height="64"><defs><style type="text/css"></style></defs><path d="M348.661 154.658c18.25 0 33.169-14.786 33.169-33.169v-11.056h198.883v11.056c0 18.25 14.786 33.169 33.169 33.169 18.25 0 33.169-14.786 33.169-33.169v-88.319c0-18.25-14.786-33.169-33.169-33.169-18.25 0-33.169 14.786-33.169 33.169v11.056h-198.883v-11.056c0-18.25-14.786-33.169-33.169-33.169-18.25 0-33.169 14.786-33.169 33.169v88.319c0 18.25 14.786 33.169 33.169 33.169v0z" p-id="8984"></path><path d="M430.319 887.849h-210.473c-44.359 0-80.459-37.033-80.459-82.457v-612.636c0-45.425 36.1-82.457 80.459-82.457 18.25 0 33.169-14.786 33.169-33.169s-14.786-33.169-33.169-33.169c-80.859 0-146.798 66.739-146.798 148.796v612.636c0 82.058 65.806 148.796 146.798 148.796h210.473c18.25 0 33.169-14.786 33.169-33.169 0-18.25-14.92-33.169-33.169-33.169v0z" p-id="8985"></path><path d="M742.565 43.96c-18.25 0-33.169 14.786-33.169 33.169 0 18.25 14.786 33.169 33.169 33.169 44.359 0 80.459 37.033 80.459 82.457v325.034c0 18.25 14.786 33.169 33.169 33.169 18.25 0 33.169-14.786 33.169-33.169v-325.034c0-82.058-65.806-148.796-146.798-148.796v0z" p-id="8986"></path><path d="M658.776 317.041h-355.14c-18.25 0-33.303-14.92-33.303-33.303v0c0-18.25 14.92-33.303 33.303-33.303h355.006c18.383 0 33.303 14.92 33.303 33.303v0c0.133 18.25-14.92 33.303-33.169 33.303z" p-id="8987"></path><path d="M658.776 466.237h-355.14c-18.25 0-33.303-14.92-33.303-33.303v0c0-18.25 14.92-33.303 33.303-33.303h355.006c18.383 0 33.303 15.053 33.303 33.303v0c0.133 18.25-14.92 33.303-33.169 33.303z" p-id="8988"></path><path d="M466.153 643.407h-171.709c-13.188 0-24.111-10.79-24.111-24.111v-18.516c0-13.188 10.79-24.111 24.111-24.111h171.709c13.188 0 24.111 10.79 24.111 24.111v18.516c0 13.321-10.79 24.111-24.111 24.111z" p-id="8989"></path><path d="M946.244 748.244c-1.465-26.242 10.79-52.485 36.5-77.928 6.261-6.261 7.327-15.985 2.531-23.312-31.837-48.755-38.365-59.945-39.43-62.076-0.799-1.865-1.865-3.463-3.197-5.062-4.929-5.462-12.522-7.593-19.582-5.328-0.533 0.133-54.483 17.184-95.912-6.261-21.847-12.389-36.5-34.368-43.826-65.673-1.998-8.659-9.858-14.653-18.783-14.387l-78.195 2.931c-9.058 0.4-16.651 7.193-17.717 16.252 0 0.4-6.927 47.157-41.828 71.268-22.912 15.852-53.551 19.316-91.383 10.257-8.126-1.865-16.518 1.865-20.648 9.192-34.235 62.343-37.965 69.003-38.365 69.669-2.131 3.597-2.931 7.859-2.398 12.122 0.799 5.328 3.73 9.991 8.259 12.921 0.4 0.266 38.098 25.31 42.494 64.607 2.931 26.775-10.124 55.149-38.898 84.589-6.128 6.261-7.060 15.985-2.265 23.312l44.492 67.271c5.062 7.726 15.053 10.524 23.445 6.527 0.4-0.133 41.562-19.049 79.26-2.531 25.443 11.056 44.492 36.1 56.748 74.465 2.531 7.993 10.124 13.188 18.383 12.921l79.127-3.064c8.925-0.4 16.252-6.927 17.717-15.719 0.133-0.533 8.126-48.222 44.359-72.333 22.646-15.053 52.219-18.25 88.185-9.458 8.259 1.998 16.785-1.865 20.781-9.325 30.638-57.147 35.168-65.406 35.834-66.472 1.998-3.33 2.931-7.193 2.664-11.056-0.4-5.195-2.931-9.858-6.927-13.055-0.533-0.266-39.164-32.237-41.429-75.264v0zM946.777 595.984c-0.266 1.199-0.666 2.531-1.199 3.863 0.533-1.199 0.932-2.531 1.199-3.863v0zM947.177 591.722c0 1.199 0 2.664-0.4 4.13 0.4-1.465 0.4-2.797 0.4-4.13v0zM929.859 884.252c-40.496-7.193-75.397-1.199-103.771 17.85-35.301 23.578-50.62 61.277-56.615 82.191l-51.286 1.998c-15.985-41.695-40.496-69.936-72.999-83.923-36.899-15.985-74.065-8.792-94.313-2.531l-28.374-42.894c29.706-34.235 42.894-69.136 38.898-103.771-4.396-38.764-29.173-66.472-45.292-80.726 4.929-8.792 12.522-22.646 24.378-44.359 42.361 7.46 78.461 1.199 107.235-18.783 34.235-23.711 48.622-60.611 54.217-81.525l49.022-1.865c10.923 34.102 30.239 59.146 57.68 74.731 40.496 22.912 87.386 17.85 110.831 13.055 5.595 9.325 14.12 22.379 26.509 41.429-26.376 30.106-38.764 62.076-36.899 95.246 2.265 42.761 27.974 75.397 43.56 91.516-4.529 8.259-11.589 21.447-22.779 42.361v0z" p-id="8990"></path></svg>
|
||||
|
After Width: | Height: | Size: 4.1 KiB |
1
src/icons/svg/order-return.svg
Normal file
@@ -0,0 +1 @@
|
||||
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1539332248248" class="icon" style="" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="7595" xmlns:xlink="http://www.w3.org/1999/xlink" width="64" height="64"><defs><style type="text/css"></style></defs><path d="M984.1664 326.2464v-2.4576a27.8528 27.8528 0 0 0-0.8192-3.8912v-1.3312L908.3904 98.7136A70.144 70.144 0 0 0 841.9328 51.2H182.0672a70.144 70.144 0 0 0-66.4576 47.616L40.96 318.5664v1.3312a27.8528 27.8528 0 0 0-0.8192 3.8912v621.056A28.0576 28.0576 0 0 0 67.6864 972.8h888.6272a28.0576 28.0576 0 0 0 28.0576-28.0576V327.68s-0.1024-1.024-0.2048-1.4336zM168.7552 116.6336a14.0288 14.0288 0 0 1 13.312-9.5232h659.8656a14.0288 14.0288 0 0 1 13.312 9.5232l61.952 182.784H106.8032z m759.5008 800.1536H95.744v-561.152h832.512z" fill="" p-id="7596"></path><path d="M399.36 756.5312A28.0576 28.0576 0 1 0 438.8864 716.8l-52.5312-52.5312h317.44a28.0576 28.0576 0 1 0 0-56.1152H389.12l52.5312-52.6336a28.0576 28.0576 0 0 0-39.6288-39.6288l-102.4 102.4a28.0576 28.0576 0 0 0 0 39.6288z" fill="" p-id="7597"></path></svg>
|
||||
|
After Width: | Height: | Size: 1.2 KiB |
1
src/icons/svg/order-setting.svg
Normal file
|
After Width: | Height: | Size: 4.9 KiB |
1
src/icons/svg/order.svg
Normal file
@@ -0,0 +1 @@
|
||||
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1539331790189" class="icon" style="" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="2148" xmlns:xlink="http://www.w3.org/1999/xlink" width="32" height="32"><defs><style type="text/css"></style></defs><path d="M260.654545 67.490909v51.2h-6.981818c-18.618182 0-37.236364 0-55.854545 2.327273-46.545455 4.654545-83.781818 44.218182-86.109091 93.090909v628.363636c0 20.945455 2.327273 39.563636 11.636364 58.181818 23.272727 48.872727 62.836364 74.472727 116.363636 74.472728h546.909091c58.181818 0 104.727273-32.581818 121.018182-86.109091 4.654545-13.963636 6.981818-27.927273 6.981818-41.890909V225.745455c0-46.545455-25.6-83.781818-67.490909-97.745455-11.636364-4.654545-23.272727-4.654545-34.909091-4.654545h-48.872727V74.472727c51.2-6.981818 100.072727-6.981818 144.290909 27.927273 34.909091 27.927273 53.527273 62.836364 55.854545 107.054545v633.018182c0 55.854545-18.618182 102.4-60.509091 137.309091-32.581818 30.254545-72.145455 41.890909-116.363636 44.218182H239.709091c-76.8 0-130.327273-37.236364-162.909091-104.727273-11.636364-23.272727-13.963636-46.545455-13.963636-72.145454V225.745455C62.836364 167.563636 88.436364 123.345455 139.636364 93.090909c11.636364-13.963636 27.927273-18.618182 46.545454-20.945454 23.272727-2.327273 48.872727-2.327273 74.472727-4.654546z" p-id="2149"></path><path d="M372.363636 0h276.945455v46.545455h-116.363636v46.545454h93.090909v46.545455h-232.727273V93.090909h93.090909V46.545455h-116.363636c2.327273-16.290909 2.327273-30.254545 2.327272-46.545455zM274.618182 365.381818v-41.890909s2.327273-2.327273 4.654545-2.327273h474.763637v46.545455c-162.909091-2.327273-321.163636-2.327273-479.418182-2.327273zM274.618182 523.636364v-44.218182h477.090909v44.218182H274.618182zM749.381818 640v44.218182H272.290909v-44.218182h477.090909z" p-id="2150"></path></svg>
|
||||
|
After Width: | Height: | Size: 1.9 KiB |
1
src/icons/svg/password.svg
Normal file
@@ -0,0 +1 @@
|
||||
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1503994678729" class="icon" style="" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="9229" xmlns:xlink="http://www.w3.org/1999/xlink" width="64" height="64"><defs><style type="text/css"></style></defs><path d="M780.8 354.579692 665.6 354.579692 665.6 311.689846c0-72.310154-19.849846-193.299692-153.6-193.299692-138.870154 0-153.6 135.049846-153.6 193.299692l0 42.889846L243.2 354.579692 243.2 311.689846C243.2 122.249846 348.790154 0 512 0s268.8 122.249846 268.8 311.689846L780.8 354.579692zM588.8 669.420308C588.8 625.900308 554.220308 590.769231 512 590.769231s-76.8 35.131077-76.8 78.651077c0 29.459692 15.399385 54.468923 38.439385 67.820308l0 89.639385c0 21.740308 17.250462 39.699692 38.4 39.699692s38.4-17.959385 38.4-39.699692l0-89.639385C573.44 723.889231 588.8 698.88 588.8 669.420308zM896 512l0 393.609846c0 65.260308-51.869538 118.390154-115.2 118.390154L243.2 1024c-63.291077 0-115.2-53.129846-115.2-118.390154L128 512c0-65.220923 51.869538-118.390154 115.2-118.390154l537.6 0C844.130462 393.609846 896 446.779077 896 512z" p-id="9230"></path></svg>
|
||||
|
After Width: | Height: | Size: 1.2 KiB |
1
src/icons/svg/product-add.svg
Normal file
@@ -0,0 +1 @@
|
||||
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1526283646652" class="icon" style="" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="5320" xmlns:xlink="http://www.w3.org/1999/xlink" width="128" height="128"><defs><style type="text/css"></style></defs><path d="M885.9 352l0 532.7L139.2 884.7 139.2 139l634.7 0 0-75.2L120.4 63.8c-31.1 0-56.4 25.3-56.4 56.4l0 783.3c0 31.1 25.3 56.4 56.4 56.4l784.3 0c31.1 0 56.4-25.3 56.4-56.4L961.1 352 885.9 352 885.9 352zM885.9 352" p-id="5321"></path><path d="M773.6 541.7c8.3-8.3 12.8-19.3 12.8-30.9 0-11.7-4.6-22.7-12.8-30.9-8.3-8.3-19.3-12.8-30.9-12.8L555 467.1 555 279.3c0-11.7-4.6-22.7-12.8-30.9-8.3-8.3-19.3-12.8-30.9-12.8-11.7 0-22.7 4.6-30.9 12.8-8.3 8.3-12.8 19.3-12.8 30.9L467.6 467.1 279.7 467.1c-11.7 0-22.7 4.6-30.9 12.8-8.3 8.3-12.8 19.3-12.8 30.9 0 11.7 4.6 22.7 12.8 30.9 8.3 8.3 19.3 12.8 30.9 12.8l187.8 0 0 187.8c0 24.1 19.6 43.8 43.8 43.8 11.7 0 22.7-4.6 30.9-12.8 8.3-8.3 12.8-19.3 12.8-30.9L555 554.6l187.8 0C754.4 554.6 765.4 550 773.6 541.7L773.6 541.7zM773.6 541.7" p-id="5322"></path></svg>
|
||||
|
After Width: | Height: | Size: 1.1 KiB |
1
src/icons/svg/product-attr.svg
Normal file
@@ -0,0 +1 @@
|
||||
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1526284482639" class="icon" style="" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="3467" xmlns:xlink="http://www.w3.org/1999/xlink" width="128" height="128"><defs><style type="text/css"></style></defs><path d="M512 0C229.230204 0 0 229.230204 0 512 0 794.769796 229.230204 1024 512 1024 794.769796 1024 1024 794.769796 1024 512 1024 229.230204 794.769796 0 512 0ZM512 953.37931C268.232934 953.37931 70.62069 755.767066 70.62069 512 70.62069 268.232934 268.232934 70.62069 512 70.62069 755.767066 70.62069 953.37931 268.232934 953.37931 512 953.37931 755.767066 755.767066 953.37931 512 953.37931ZM317.793103 512C317.793103 482.747957 294.079629 459.034483 264.827586 459.034483 235.575543 459.034483 211.862069 482.747957 211.862069 512 211.862069 541.252043 235.575543 564.965517 264.827586 564.965517 294.079629 564.965517 317.793103 541.252043 317.793103 512ZM794.482759 547.310345C813.984115 547.310345 829.793103 531.501356 829.793103 512 829.793103 492.498644 813.984115 476.689655 794.482759 476.689655L406.068966 476.689655C386.567609 476.689655 370.758621 492.498644 370.758621 512 370.758621 531.501356 386.567609 547.310345 406.068966 547.310345L794.482759 547.310345ZM317.793103 335.448276C317.793103 306.196233 294.079629 282.482759 264.827586 282.482759 235.575543 282.482759 211.862069 306.196233 211.862069 335.448276 211.862069 364.700319 235.575543 388.413793 264.827586 388.413793 294.079629 388.413793 317.793103 364.700319 317.793103 335.448276ZM794.482759 370.758621C813.984115 370.758621 829.793103 354.949632 829.793103 335.448276 829.793103 315.94692 813.984115 300.137931 794.482759 300.137931L406.068966 300.137931C386.567609 300.137931 370.758621 315.94692 370.758621 335.448276 370.758621 354.949632 386.567609 370.758621 406.068966 370.758621L794.482759 370.758621ZM317.793103 688.551724C317.793103 659.299681 294.079629 635.586207 264.827586 635.586207 235.575543 635.586207 211.862069 659.299681 211.862069 688.551724 211.862069 717.803767 235.575543 741.517241 264.827586 741.517241 294.079629 741.517241 317.793103 717.803767 317.793103 688.551724ZM794.482759 723.862069C813.984115 723.862069 829.793103 708.05308 829.793103 688.551724 829.793103 669.050368 813.984115 653.241379 794.482759 653.241379L406.068966 653.241379C386.567609 653.241379 370.758621 669.050368 370.758621 688.551724 370.758621 708.05308 386.567609 723.862069 406.068966 723.862069L794.482759 723.862069Z" p-id="3468"></path></svg>
|
||||
|
After Width: | Height: | Size: 2.6 KiB |
1
src/icons/svg/product-brand.svg
Normal file
@@ -0,0 +1 @@
|
||||
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1526283705574" class="icon" style="" viewBox="0 0 1025 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="6019" xmlns:xlink="http://www.w3.org/1999/xlink" width="128.125" height="128"><defs><style type="text/css"></style></defs><path d="M959.725 0 538.825 0c-17.1 0-33.4 6.8-45.5 18.8L18.825 493.3c-25.1 25.1-25.1 65.8 0 91l420.9 420.9c12.6 12.6 29 18.8 45.5 18.8 16.5 0 32.9-6.3 45.5-18.8l474.5-474.5c12.1-12.1 18.8-28.4 18.8-45.5L1024.025 64.3C1024.025 28.8 995.225 0 959.725 0zM960.025 485.2c0 0.1 0 0.2-0.1 0.2L485.425 959.9c0 0-0.1 0.1-0.1 0.1 0 0-0.1 0-0.1 0-0.1 0-0.1 0-0.1 0 0 0 0 0 0 0 0 0 0 0-0.1-0.1L64.125 539c0 0-0.1-0.1-0.1-0.1 0-0.1 0-0.2 0-0.3 0 0 0 0 0.1-0.1L538.625 64.1c0.1-0.1 0.1-0.1 0.2-0.1l420.9 0c0.1 0 0.1 0 0.1 0 0 0 0 0 0 0 0.1 0 0.2 0.2 0.2 0.2 0 0 0 0 0 0.1L960.025 485.2z" p-id="6020"></path><path d="M704.025 192c-70.7 0-128 57.3-128 128s57.3 128 128 128 128-57.3 128-128S774.725 192 704.025 192zM704.025 384c-35.3 0-64-28.7-64-64s28.7-64 64-64 64 28.7 64 64S739.325 384 704.025 384z" p-id="6021"></path></svg>
|
||||
|
After Width: | Height: | Size: 1.2 KiB |
1
src/icons/svg/product-cate.svg
Normal file
@@ -0,0 +1 @@
|
||||
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1526284607045" class="icon" style="" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="4194" xmlns:xlink="http://www.w3.org/1999/xlink" width="128" height="128"><defs><style type="text/css"></style></defs><path d="M490.479359 397.322168c0 52.616358-42.657542 95.2739-95.274924 95.2739L159.661861 492.596068c-52.617381 0-95.2739-42.658565-95.2739-95.2739L64.387961 161.779593c0-52.617381 42.657542-95.274924 95.2739-95.274924L395.204435 66.50467c52.617381 0 95.274924 42.657542 95.274924 95.274924L490.479359 397.322168zM435.500187 161.779593c0-22.255887-18.040888-40.295751-40.295751-40.295751L159.661861 121.483842c-22.254863 0-40.294728 18.039865-40.294728 40.295751L119.367133 397.322168c0 22.254863 18.039865 40.294728 40.294728 40.294728L395.204435 437.616896c22.254863 0 40.295751-18.039865 40.295751-40.294728L435.500187 161.779593z" p-id="4195"></path><path d="M174.346305 286.423405c-7.597025 0-13.745049-6.148024-13.745049-13.746072l0-24.765033c0-38.066991 25.39539-71.449285 60.321854-71.449285l85.637426 0c7.583722 0 13.745049 6.148024 13.745049 13.745049 0 7.597025-6.161327 13.745049-13.745049 13.745049l-85.637426 0c-21.435195 0-32.831756 23.63735-32.831756 43.959188l0 24.765033C188.091354 280.275381 181.931051 286.423405 174.346305 286.423405z" p-id="4196"></path><path d="M169.112094 333.564052c-3.583618 0-7.154957-1.51654-9.758248-3.986801-2.482541-2.604314-3.986801-6.187933-3.986801-9.759271 0-3.570315 1.503237-7.140631 3.986801-9.758248 5.221932-5.087878 14.282285-5.087878 19.516496 0 2.469238 2.617617 3.986801 6.187933 3.986801 9.758248 0 3.570315-1.51654 7.154957-3.986801 9.624195C176.252725 332.047512 172.682409 333.564052 169.112094 333.564052z" p-id="4197"></path><path d="M957.806927 397.322168c0 52.616358-42.659589 95.2739-95.275947 95.2739L626.989429 492.596068c-52.618405 0-95.274924-42.658565-95.274924-95.2739L531.714506 161.779593c0-52.617381 42.657542-95.274924 95.274924-95.274924l235.541551 0c52.617381 0 95.275947 42.657542 95.275947 95.274924L957.806927 397.322168zM902.826731 161.779593c0-22.255887-18.039865-40.295751-40.295751-40.295751L626.989429 121.483842c-22.254863 0-40.295751 18.039865-40.295751 40.295751L586.693678 397.322168c0 22.254863 18.040888 40.294728 40.295751 40.294728l235.541551 0c22.255887 0 40.295751-18.039865 40.295751-40.294728L902.826731 161.779593z" p-id="4198"></path><path d="M490.479359 864.646666c0 52.617381-42.657542 95.274924-95.274924 95.274924L159.661861 959.921589c-52.617381 0-95.2739-42.658565-95.2739-95.274924L64.387961 629.106138c0-52.617381 42.657542-95.2739 95.2739-95.2739L395.204435 533.832238c52.617381 0 95.274924 42.657542 95.274924 95.2739L490.479359 864.646666zM435.500187 629.106138c0-22.254863-18.040888-40.295751-40.295751-40.295751L159.661861 588.810387c-22.254863 0-40.294728 18.040888-40.294728 40.295751l0 235.541551c0 22.254863 18.039865 40.296775 40.294728 40.296775L395.204435 904.944464c22.254863 0 40.295751-18.041912 40.295751-40.296775L435.500187 629.106138z" p-id="4199"></path><path d="M957.806927 864.646666c0 52.617381-42.659589 95.274924-95.275947 95.274924L626.989429 959.921589c-52.618405 0-95.274924-42.658565-95.274924-95.274924L531.714506 629.106138c0-52.617381 42.657542-95.2739 95.274924-95.2739l235.541551 0c52.617381 0 95.275947 42.657542 95.275947 95.2739L957.806927 864.646666zM902.826731 629.106138c0-22.254863-18.039865-40.295751-40.295751-40.295751L626.989429 588.810387c-22.254863 0-40.295751 18.040888-40.295751 40.295751l0 235.541551c0 22.254863 18.040888 40.296775 40.295751 40.296775l235.541551 0c22.255887 0 40.295751-18.041912 40.295751-40.296775L902.826731 629.106138z" p-id="4200"></path></svg>
|
||||
|
After Width: | Height: | Size: 3.7 KiB |
1
src/icons/svg/product-comment.svg
Normal file
@@ -0,0 +1 @@
|
||||
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1526284445051" class="icon" style="" viewBox="0 0 1045 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="2364" xmlns:xlink="http://www.w3.org/1999/xlink" width="130.625" height="128"><defs><style type="text/css"></style></defs><path d="M1031.975006 202.254269 501.464325 753.980748 308.593431 753.980748 308.593431 561.109854 841.032821 11.312084C856.115325-3.770421 880.53278-3.770421 895.615284 11.312084L1031.975006 147.671806C1047.05751 162.754309 1047.05751 187.171764 1031.975006 202.254269ZM868.304766 93.127916 385.741788 599.684033 385.741788 676.83239 462.890146 676.83239 950.159172 174.982324 868.304766 93.127916ZM540.038504 98.181134 77.148358 98.181134 77.148358 946.813068 925.780291 946.813068 925.780291 483.922922C925.780291 455.956643 933.958018 450.170516 961.924298 450.170516 989.929151 450.170516 1002.928649 455.956643 1002.928649 483.922922L1002.928649 946.813068C1002.928649 984.075724 963.042948 1023.961426 925.780291 1023.961426L77.148358 1023.961426C39.885701 1023.961426 0 984.075724 0 946.813068L0 98.181134C0 60.879903 39.885701 21.032776 77.148358 21.032776L540.038504 21.032776C568.004783 21.032776 573.79091 34.070849 573.79091 62.037129 573.79091 89.964834 568.004783 98.181134 540.038504 98.181134Z" p-id="2365"></path></svg>
|
||||
|
After Width: | Height: | Size: 1.4 KiB |
1
src/icons/svg/product-list.svg
Normal file
@@ -0,0 +1 @@
|
||||
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1539331929446" class="icon" style="" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="4013" xmlns:xlink="http://www.w3.org/1999/xlink" width="64" height="64"><defs><style type="text/css"></style></defs><path d="M896.021502 255.956996 607.897867 255.956996c-17.717453 0-31.994625-14.277171-31.994625-31.994625 0-17.717453 14.277171-31.994625 31.994625-31.994625l287.951621 0c17.717453 0 31.994625 14.277171 31.994625 31.994625C928.016126 241.679825 913.738955 255.956996 896.021502 255.956996zM896.021502 415.930119 607.897867 415.930119c-17.717453 0-31.994625-14.277171-31.994625-31.994625s14.277171-31.994625 31.994625-31.994625l287.951621 0c17.717453 0 31.994625 14.277171 31.994625 31.994625S913.738955 415.930119 896.021502 415.930119zM896.021502 672.05913 607.897867 672.05913c-17.717453 0-31.994625-14.277171-31.994625-31.994625s14.277171-31.994625 31.994625-31.994625l287.951621 0c17.717453 0 31.994625 14.277171 31.994625 31.994625S913.738955 672.05913 896.021502 672.05913zM896.021502 832.032253 607.897867 832.032253c-17.717453 0-31.994625-14.277171-31.994625-31.994625s14.277171-31.994625 31.994625-31.994625l287.951621 0c17.717453 0 31.994625 14.277171 31.994625 31.994625S913.738955 832.032253 896.021502 832.032253zM383.935495 479.919368 191.967747 479.919368c-52.980346 0-95.983874-43.003528-95.983874-95.983874L95.983874 191.967747c0-52.980346 43.003528-95.983874 95.983874-95.983874l191.967747 0c52.980346 0 95.983874 43.003528 95.983874 95.983874l0 191.967747C479.919368 436.915841 436.915841 479.919368 383.935495 479.919368zM191.967747 159.973123c-17.545439 0-31.994625 14.449185-31.994625 31.994625l0 191.967747c0 17.545439 14.449185 31.994625 31.994625 31.994625l191.967747 0c17.545439 0 31.994625-14.449185 31.994625-31.994625L415.930119 191.967747c0-17.545439-14.449185-31.994625-31.994625-31.994625L191.967747 159.973123 191.967747 159.973123zM383.935495 928.016126 191.967747 928.016126c-52.980346 0-95.983874-43.003528-95.983874-95.983874L95.983874 639.892491c0-52.980346 43.003528-95.983874 95.983874-95.983874l191.967747 0c52.980346 0 95.983874 43.003528 95.983874 95.983874l0 191.967747C479.919368 884.840585 436.915841 928.016126 383.935495 928.016126zM191.967747 607.897867c-17.545439 0-31.994625 14.277171-31.994625 31.994625l0 191.967747c0 17.717453 14.449185 31.994625 31.994625 31.994625l191.967747 0c17.545439 0 31.994625-14.277171 31.994625-31.994625L415.930119 639.892491c0-17.717453-14.449185-31.994625-31.994625-31.994625L191.967747 607.897867 191.967747 607.897867z" p-id="4014"></path></svg>
|
||||
|
After Width: | Height: | Size: 2.6 KiB |
1
src/icons/svg/product-recycle.svg
Normal file
@@ -0,0 +1 @@
|
||||
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1526284415679" class="icon" style="" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="1677" xmlns:xlink="http://www.w3.org/1999/xlink" width="128" height="128"><defs><style type="text/css"></style></defs><path d="M896 256v576a128 128 0 0 1-128 128H256a128 128 0 0 1-128-128V256H64V192h192V128a64 64 0 0 1 64-64h384a64 64 0 0 1 64 64v64h192v64h-64z m-192-128H320v64h384V128z m128 128H192v576a64 64 0 0 0 64 64h512a64 64 0 0 0 64-64V256zM576 384h64v384H576V384zM384 384h64v384H384V384z" p-id="1678"></path></svg>
|
||||
|
After Width: | Height: | Size: 683 B |
1
src/icons/svg/product.svg
Normal file
@@ -0,0 +1 @@
|
||||
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1526283372703" class="icon" style="" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="2234" xmlns:xlink="http://www.w3.org/1999/xlink" width="128" height="128"><defs><style type="text/css"></style></defs><path d="M919.096192 1.803429 106.384339 1.803429c-57.74173 0-104.670881 46.928152-104.670881 104.670881l0 812.855807c0 57.74173 46.928152 104.669882 104.670881 104.669882l812.78383 0c57.74173 0 104.669882-46.928152 104.669882-104.669882L1023.838051 106.402334C1023.768073 48.659604 976.836923 1.803429 919.096192 1.803429zM826.535479 292.242533l-2.161316 1.153635-0.288909 2.450225C801.808303 449.608741 667.944658 565.597042 512.739766 565.597042c-155.202893 0-289.069537-115.988301-311.344489-269.750649l-0.359886-2.450225-2.163316-1.153635c-15.427119-9.155103-24.654199-24.654199-24.654199-41.666816 0-26.96047 21.915066-48.875535 48.947513-48.875535 26.96047 0 48.875535 21.915066 48.875535 48.875535 0 14.201507-6.41597 27.46531-18.166252 37.196231l-2.30727 1.80243 0.50484 2.884087c20.5445 128.963195 130.189807 222.533589 260.667523 222.533589 130.478716 0 240.123024-93.641371 260.667523-222.533589l0.50584-2.81211-2.235293-1.80243c-11.822259-9.803898-18.166252-22.995724-18.166252-37.197231 0-26.96047 21.915066-48.875535 48.875535-48.875535l0 0 0 0 0 0c27.032447 0 48.947513 21.914066 48.947513 48.875535C851.261655 267.589333 842.034575 283.088429 826.535479 292.242533z" p-id="2235"></path></svg>
|
||||
|
After Width: | Height: | Size: 1.5 KiB |
1
src/icons/svg/sms-ad.svg
Normal file
@@ -0,0 +1 @@
|
||||
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1541582825105" class="icon" style="" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="7322" xmlns:xlink="http://www.w3.org/1999/xlink" width="24" height="24"><defs><style type="text/css"></style></defs><path d="M707.296 274.272c0-44.512-7.456-79.2-27.296-98.976-19.744-22.208-51.936-37.088-94.016-37.088h-79.136v269.728h74.208c42.048 0 76.736-12.384 96.544-37.088 19.776-19.84 29.696-54.496 29.696-96.576z" p-id="7323"></path><path d="M588.512 952.288H130.688c-42.048 0-79.2-32.16-79.2-74.208V516.8h742.368c24.704 0 49.472 2.432 49.472 4.96V135.744c0-69.344-51.936-123.744-118.784-123.744H130.688C61.44 12 2.016 68.896 2.016 135.744v742.304c0 69.312 59.424 123.712 128.672 123.712h512.256c-19.84-12.32-37.152-29.632-54.432-49.472z m-121.28-848.704h123.744c51.968 0 94.048 17.28 121.184 49.504 22.336 29.664 37.152 69.216 37.152 121.216 0 51.968-14.816 94.048-42.016 123.776-29.728 32.128-69.28 49.472-123.712 49.472h-118.816V103.584h2.464z m-235.104 0h39.584l136.096 341.472H365.76l-37.152-99.008H175.232l-37.12 99.008H96.032L232.128 103.584z" p-id="7324"></path><path d="M254.432 155.52L190.048 313.888h123.776L254.432 155.52z m259.808 492.416H118.304a24.768 24.768 0 0 0 0 49.504H514.24c12.352 0 24.768-12.352 24.768-24.736 0-12.416-12.416-24.768-24.768-24.768z m0 143.52H118.304a24.8 24.8 0 0 0-24.736 24.736c0 14.88 9.888 24.736 24.736 24.736H514.24a24.832 24.832 0 0 0 24.768-24.736c0-12.32-12.416-24.736-24.768-24.736z m507.296-37.12l-12.448-61.856c-4.928-17.376-22.24-32.224-39.52-34.624l-24.736-2.528c-2.464 0-2.464 0-4.896-2.432v-9.92l2.432-24.768c2.464-19.776-7.392-39.552-24.768-47.008L860.704 544h-2.432c-4.96-2.464-9.92-2.464-14.88-2.464-12.352 0-24.736 4.928-32.16 12.352l-17.312 17.312-4.928 4.928c-2.496 0-2.496-2.4-4.96-4.928l-17.376-17.312c-7.392-7.392-19.744-12.352-32.096-12.352-9.952 0-17.376 2.464-19.808 4.928l-56.896 27.264c-14.848 9.888-27.264 27.2-24.736 44.48l2.432 27.264v4.96s-4.928 2.464-7.392 2.464l-22.272 2.432c-17.28 2.528-34.656 14.88-39.584 34.688l-12.352 61.92c-4.96 17.248 2.464 37.024 19.776 49.44l19.808 12.416 7.424 7.392c0 2.464 0 2.464-2.528 4.928l-14.784 22.272c-9.952 14.784-9.952 37.088 2.4 51.936l39.648 51.936c9.856 9.92 22.272 17.376 34.624 17.376 4.928 0 9.888 0 14.848-2.496l24.704-7.424h7.456c0 2.464 2.432 2.464 2.432 4.96l7.392 22.24c4.928 19.808 24.736 29.728 42.048 29.728h61.92c17.344 0 34.592-12.416 39.552-29.728l7.424-22.24c0-2.496 2.464-2.496 2.464-4.96h7.424l19.808 7.424c4.896 2.496 12.352 2.496 14.848 2.496 14.848 0 29.696-7.456 37.056-17.376l39.616-49.408c9.888-12.416 12.384-34.752 2.464-51.968l-12.384-19.808c0-2.464-2.432-4.96-2.432-7.424l4.96-4.96 22.176-12.416c12.448-14.816 19.904-37.088 17.44-51.936z m-42.112 7.488l-22.24 14.816c-4.928 4.96-19.808 17.312-22.24 29.664-2.496 12.416 2.432 29.728 9.888 37.152l14.816 22.272-37.024 52h-2.56l-24.704-7.52c-17.312-4.864-34.656 0-39.616 2.56-9.888 4.96-19.776 19.776-24.672 29.664l-7.424 22.272-2.464 2.464h-64.352l-9.92-19.776c-2.432-12.352-12.352-27.264-22.272-32.16-7.424-5.024-17.28-5.024-19.808-5.024-7.36 0-14.816 2.56-24.736 5.024l-22.208 7.456h-4.992l-37.088-49.6v-4.96l12.384-19.712c7.392-9.952 12.384-24.736 9.952-39.648-2.528-14.816-17.344-27.168-24.768-32.128l-22.24-12.416s-2.464-2.4 0-2.4l14.816-64.352 22.272-2.496c12.384 0 29.728-7.424 37.12-17.312 7.392-9.856 12.384-24.736 9.92-37.152l-2.496-24.672c0-2.528 2.496-4.96 2.496-4.96l54.432-24.736h4.96l17.312 17.312c9.92 7.424 22.24 14.816 34.624 14.816 12.416 0 29.696-7.36 34.656-17.28l17.344-17.312h2.432l56.928 24.736 2.432 2.464-2.432 24.672c0 4.96 0 24.736 9.888 37.184 4.96 7.424 17.344 14.816 34.656 17.312l22.24 2.464 2.496 2.464 12.352 59.36v7.488h-0.16z" p-id="7325"></path><path d="M788.928 665.248c-61.888 0-113.856 51.936-113.856 113.888 0 61.856 51.968 113.856 113.856 113.856 59.36 0 111.328-52 113.792-113.856 0-61.952-51.936-113.888-113.792-113.888z m0 183.168c-39.616 0-71.808-32.192-71.808-71.776s32.192-71.712 71.808-71.712c37.024 0 69.28 32.128 71.712 71.712-2.432 42.048-34.656 71.776-71.712 71.776z" p-id="7326"></path></svg>
|
||||
|
After Width: | Height: | Size: 4.1 KiB |
1
src/icons/svg/sms-coupon.svg
Normal file
@@ -0,0 +1 @@
|
||||
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1541582872263" class="icon" style="" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="8264" xmlns:xlink="http://www.w3.org/1999/xlink" width="24" height="24"><defs><style type="text/css"></style></defs><path d="M695.466667 535.466667h-153.6v-78.933334h147.2v-59.733333h-130.133334l108.8-108.8-38.4-38.4-117.333333 117.333333-117.333333-117.333333-38.4 38.4 108.8 108.8h-130.133334v59.733333h147.2v78.933334h-153.6V597.333333h153.6v177.066667h59.733334V597.333333h153.6z" fill="" p-id="8265"></path><path d="M870.4 936.533333H153.6c-53.333333 0-96-38.4-96-87.466666V661.333333c0-14.933333 12.8-25.6 25.6-25.6 68.266667 0 121.6-55.466667 121.6-121.6 0-68.266667-55.466667-121.6-121.6-121.6-14.933333 0-25.6-12.8-25.6-25.6V172.8c0-49.066667 42.666667-87.466667 96-87.466667h716.8c53.333333 0 96 38.4 96 87.466667V362.666667c0 14.933333-12.8 25.6-25.6 25.6-68.266667 0-121.6 55.466667-121.6 121.6 0 68.266667 55.466667 121.6 121.6 121.6 14.933333 0 25.6 12.8 25.6 25.6v189.866666c0 53.333333-42.666667 89.6-96 89.6zM110.933333 684.8v166.4c0 19.2 19.2 34.133333 42.666667 34.133333h716.8c23.466667 0 42.666667-14.933333 42.666667-34.133333v-166.4c-83.2-12.8-149.333333-85.333333-149.333334-172.8s64-160 149.333334-172.8V172.8c0-19.2-19.2-34.133333-42.666667-34.133333H153.6c-23.466667 0-42.666667 14.933333-42.666667 34.133333v166.4c83.2 12.8 149.333333 85.333333 149.333334 172.8s-64 160-149.333334 172.8z" fill="" p-id="8266"></path></svg>
|
||||
|
After Width: | Height: | Size: 1.6 KiB |
1
src/icons/svg/sms-flash.svg
Normal file
@@ -0,0 +1 @@
|
||||
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1542099977341" class="icon" style="" viewBox="0 0 1040 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="1384" xmlns:xlink="http://www.w3.org/1999/xlink" width="54.84375" height="54"><defs><style type="text/css"></style></defs><path d="M984.104361 326.757019C933.414889 208.820979 838.555427 114.26851 720.236672 63.756069c31.996738-25.119097 72.263837-40.220027 116.151393-40.220027 103.862509 0 188.064236 83.923388 188.064236 187.452299C1024.453325 254.725472 1009.297137 294.866704 984.104361 326.757019zM976.434681 534.080901c0 122.913401-48.40443 234.320747-126.857223 317.182966l64.928778 64.711837c8.587586 8.563026 13.906731 20.391423 13.906731 33.464159 0 26.137287-21.258163 47.327912-47.487547 47.327912-13.106506 0-24.977881-5.300726-33.564443-13.863752l-69.749574-69.51319c-75.249845 52.398394-166.623925 83.376942-265.383206 83.376942-98.56997 0-189.785437-30.846542-264.950348-83.051531l-69.257364 69.029166c-8.696056 8.67252-20.700461 14.022365-33.957393 14.022365-26.520003 0-48.02069-21.431102-48.02069-47.868217 0-13.214976 5.376451-25.178449 14.06432-33.841759l64.402799-64.184835c-78.218456-82.829474-126.489856-194.070021-126.489856-316.792063 0-255.531837 207.833489-462.687898 464.207507-462.687898C768.608356 71.393004 976.434681 278.549064 976.434681 534.080901zM512.228197 167.119205c-203.332988 0-368.164081 164.305113-368.164081 366.961696 0 202.663746 164.832116 366.961696 368.164081 366.961696 203.323778 0 368.163057-164.298973 368.163057-366.961696C880.391255 331.423295 715.551976 167.119205 512.228197 167.119205zM704.314027 581.944002 512.228197 581.944002c-26.520003 0-48.021713-21.425985-48.021713-47.862078L464.206484 278.808984c0-26.435069 21.502733-47.863101 48.021713-47.863101 26.50977 0 48.019667 21.428032 48.019667 47.863101l0 207.40984L704.314027 486.218824c26.510794 0 48.02069 21.424962 48.02069 47.862078C752.334717 560.518017 730.824821 581.944002 704.314027 581.944002zM41.209564 333.240687c-25.736151-32.570813-41.210587-73.572646-41.210587-118.251218C0 109.25124 85.995583 23.536043 192.084807 23.536043c44.819788 0 85.962837 15.425318 118.635981 41.078581C189.876512 116.213815 92.974531 212.787314 41.209564 333.240687z" p-id="1385"></path></svg>
|
||||
|
After Width: | Height: | Size: 2.3 KiB |
1
src/icons/svg/sms-hot.svg
Normal file
@@ -0,0 +1 @@
|
||||
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1541582669216" class="icon" style="" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="6031" xmlns:xlink="http://www.w3.org/1999/xlink" width="24" height="24"><defs><style type="text/css"></style></defs><path d="M451.854 95.981c0.024-0.064 0.048-0.145 0.081-0.145-0.081-0.064-0.097 0-0.081 0.145z" p-id="6032"></path><path d="M142.588 440.622c-0.015 0.01-0.03 0.021-0.037 0.017 0.006 0.016 0.019 0.006 0.037-0.017zM520.419 629.913c-15.925 0-28.761 5.461-38.505 16.381-9.746 10.92-14.619 27.388-14.619 49.404 0 21.667 5.003 38.092 15.011 49.272 10.005 11.182 22.71 16.772 38.113 16.772 15.401 0 28.04-5.548 37.917-16.643 9.876-11.095 14.814-27.735 14.814-49.926 0-21.927-4.81-38.286-14.423-49.075-9.617-10.789-22.385-16.185-38.308-16.185z" p-id="6033"></path><path d="M854.456 823.017c5.906-8.442 10.995-17.81 15.102-28.309C987.665 491.696 579.58 48.843 537.014 3.807c0.1 0.165 0.207 0.363 0.298 0.529-2.627-2.792-4.105-4.329-4.105-4.329 6.212 28.647 10.144 55.329 12.242 80.458-0.115-0.867-0.189-1.702-0.307-2.569 2.983 33.158 2.553 63.407-0.651 91.353-0.496 4.229-1 8.467-1.62 12.597-0.098 0.668-0.23 1.33-0.33 1.99-20.503 130.632-104.734 208.479-194.253 289.646-23.411-22.543-37.247-55.049-37.238-102.811 0.083-21.742 2.999-46.622 9.186-75.154l-0.207 0.141c0.074-0.354 0.132-0.685 0.207-1.048 0 0-63.854 41.285-116.968 119.19-0.009-0.008-0.017-0.025-0.017-0.025-0.182 0.264-0.355 0.563-0.545 0.827-3.403 5.022-6.766 10.16-10.053 15.48-0.157 0.239-0.298 0.495-0.447 0.735a430.615 430.615 0 0 0-8.847 15.075 376.645 376.645 0 0 0-1.991 3.569c-2.883 5.253-5.716 10.605-8.434 16.116-0.133 0.272-0.281 0.537-0.414 0.809a407.245 407.245 0 0 0-8.095 17.627c-0.627 1.446-1.223 2.917-1.833 4.371a380.69 380.69 0 0 0-5.89 14.935c-0.528 1.421-1.074 2.808-1.586 4.229-1.09 3.058-2.115 6.163-3.139 9.285-0.025 0.066-0.05 0.132-0.066 0.198-1.049 3.172-2.098 6.345-3.064 9.582-0.396 1.306-0.744 2.66-1.123 3.982a368.612 368.612 0 0 0-4.296 16.331 316.228 316.228 0 0 0-1.338 5.69c-1.537 6.873-2.958 13.812-4.122 20.933 0 0.05-0.017 0.1-0.017 0.148a329.55 329.55 0 0 0-1.727 11.696c-0.032 0.266-0.065 0.529-0.099 0.794a352.944 352.944 0 0 0-1.272 11.283c-0.05 0.43-0.083 0.86-0.124 1.298a391.231 391.231 0 0 0-0.884 11.044c-0.033 0.545-0.066 1.106-0.091 1.651a358.25 358.25 0 0 0-0.504 10.922l-0.05 1.949a366.226 366.226 0 0 0-0.124 10.87v2.164c0.033 3.618 0.115 7.253 0.256 10.912 0.025 0.769 0.042 1.545 0.083 2.313 0.157 3.659 0.363 7.344 0.62 11.044 0.074 0.793 0.115 1.57 0.173 2.362 0.281 3.733 0.636 7.492 1.024 11.268 0.083 0.784 0.157 1.553 0.248 2.33 0.413 3.849 0.917 7.723 1.454 11.614 0.107 0.734 0.207 1.462 0.306 2.197 0.578 3.989 1.23 8.028 1.933 12.076 0.124 0.645 0.214 1.289 0.338 1.933a392.635 392.635 0 0 0 2.495 12.771c0.099 0.479 0.19 0.958 0.281 1.438a451.803 451.803 0 0 0 3.18 13.745c0.05 0.231 0.1 0.454 0.157 0.677 4.874 19.627 11.234 39.84 19.346 60.657 4.097 10.499 9.186 19.866 15.101 28.309 69.223 121.396 265.021 200.978 265.021 200.978v-0.008c-0.676-0.277-56.816-23.185-119.421-62.98 62.605 39.796 118.746 62.702 119.421 62.973l0.033 0.016v-0.033c0.041 0.018 0.083 0.033 0.083 0.033 3.709-34.05 18.495-57.277 40.477-73.716-0.017-0.018-0.042-0.018-0.058-0.033 0.124-0.083 0.256-0.166 0.38-0.256 4.436-3.296 9.161-6.32 14.15-9.104 0.264-0.149 0.528-0.29 0.793-0.438 4.998-2.75 10.251-5.261 15.745-7.558 0.165-0.066 0.314-0.141 0.479-0.207 39.089 16.208 66.787 42.806 72.065 91.312 0 0 0.024-0.016 0.033-0.016v0.016s42.739-17.38 95.334-48.258c-0.066 0.066-0.132 0.141-0.198 0.215 60.06-35.229 133.083-88.122 170.048-152.933zM312.641 952.532z m82.736-161.03h-38.636v-83.667h-75.704v83.667h-38.636V600.154h38.636v75.313h75.704v-75.313h38.636v191.348zM587.9 768.594c-16.796 17.448-39.245 26.171-67.352 26.171-28.454 0-51.08-8.679-67.872-26.038-16.795-17.361-25.192-41.268-25.192-71.726 0-19.489 2.915-35.847 8.746-49.075 4.35-9.746 10.289-18.491 17.816-26.236 7.526-7.743 15.771-13.486 24.734-17.229 11.92-5.045 25.669-7.57 41.246-7.57 28.192 0 50.751 8.747 67.678 26.235 16.922 17.49 25.386 41.813 25.386 72.965 0.001 30.89-8.398 55.058-25.19 72.503z m41.637-136.071v-32.369h152.061v32.369H724.95v158.979h-38.635V632.523h-56.778z" p-id="6034"></path></svg>
|
||||
|
After Width: | Height: | Size: 4.2 KiB |
1
src/icons/svg/sms-new.svg
Normal file
@@ -0,0 +1 @@
|
||||
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1541582554734" class="icon" style="" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="5148" xmlns:xlink="http://www.w3.org/1999/xlink" width="24" height="24"><defs><style type="text/css"></style></defs><path d="M987.04 533.208c-15.951-18.618-12.415-26.62 0.947-42.956 69.21-84.716 31.696-201.788-74.55-229.604-26.705-6.985-38.047-14.813-28.855-37.193C887.36 116.06 783.764 43.795 682.875 81.34c-23.697 8.815-32.08 6.967-46.299-13.836-61.223-89.51-188.549-89.59-249.31 0.046-14.453 21.302-23.543 22.162-46.413 13.935-103.4-37.228-208.124 36.36-201.084 142.258 1.774 26.523-6.729 30.735-29.426 36.824C4.276 289.07-34.412 407.945 35.925 490.36c15.47 18.123 13.656 25.996-0.449 43.293-70.264 86.13-30.09 202.613 79.444 230.943 20.223 5.23 26.623 9.243 25.28 31.722-6.748 112.214 95.964 184.444 205.302 144.714 20.503-7.474 27.514-5.58 39.599 12.37 63.32 94.021 190.484 93.64 253.87-0.987 12.649-18.874 19.977-18.476 39.684-11.11 108.264 40.473 214.39-35.934 204.702-147.362-1.786-20.577 3.608-23.863 22.703-28.612 112.563-27.945 154.277-146.564 80.98-232.123zM214.635 718.206l-58.778-168.943c-5.088-14.651 0.203-24.952 15.841-30.861 8.91-1.167 16.832 0.137 23.728 3.87l145.283 92.081 1.251-0.417-39.036-112.224c-5.094-14.652 0.198-24.953 15.842-30.879 15.358-4.114 25.992 1.052 31.941 15.43l58.743 168.945c4.003 14.153-1.552 23.656-16.633 28.532-8.383 2.727-16.022 2.202-22.93-1.595l-144.888-90.879-1.251 0.4L262.37 702.74c3.984 14.16-1.557 23.657-16.634 28.557-15.906 5.165-26.288 0.798-31.1-13.09zM436.72 645.1l-56.748-163.14c-5.638-16.216-0.63-27.26 15.033-33.188l80.433-26.002c13.675-3.588 23.494 0.56 29.48 12.35 3.127 14.432-2 23.82-15.393 28.157l-56.562 18.286 14.895 42.813 52.794-17.054c14.799-3.062 25.146 1.305 31.133 13.102 2.858 13.662-2.662 23.165-16.634 28.533l-52.794 17.077 15.694 45.113 59.09-19.083c14.518-3.824 24.338 0.319 29.479 12.34 3.127 14.426-2.002 23.814-15.393 28.152l-82.95 26.829c-15.391 4.132-25.906-0.652-31.557-14.285z m178.89-56.54l-97.827-148.59c-2.763-2.52-4.381-5.848-4.878-10.025-3.194-11.831 2.068-20.803 15.788-26.955 13.392-4.321 24.753 0.156 34.047 13.449l69.852 116.436 1.276-0.415-3.609-143.006c0.431-12.131 6.813-20.647 19.114-25.476 12.001-3.027 22.386 0.063 31.169 9.214l86.55 116.21 1.277-0.409-15.823-133.895c-3.146-14.442 2.696-24.483 17.507-30.127 13.92-2.773 23.745 1.322 29.461 12.34 1.361 3.887 2.115 7.504 2.367 10.838l16.135 175.004c-1.042 15.783-9.107 26.13-24.188 30.97-16.785 5.437-29.93 2.41-39.535-9.081l-77.538-102.363 2.133 126.764c-1.306 15.004-9.49 24.935-24.59 29.811-17.62 5.66-30.532 2.118-38.688-10.694z m0 0" fill="" p-id="5149"></path></svg>
|
||||
|
After Width: | Height: | Size: 2.7 KiB |
1
src/icons/svg/sms-subject.svg
Normal file
@@ -0,0 +1 @@
|
||||
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1541582717560" class="icon" style="" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="6519" xmlns:xlink="http://www.w3.org/1999/xlink" width="24" height="24"><defs><style type="text/css"></style></defs><path d="M868.8 98.2H157.3c-32.7 0-59.3 26.5-59.3 59.3V869c0 32.7 26.5 59.3 59.3 59.3h711.5c32.7 0 59.3-26.5 59.3-59.3V157.5c0-32.7-26.6-59.3-59.3-59.3z m-18.5 704.1c0 26.6-21.6 48.2-48.2 48.2H224c-26.6 0-48.2-21.6-48.2-48.2V224.2c0-26.6 21.6-48.2 48.2-48.2h578.1c26.6 0 48.2 21.6 48.2 48.2v578.1z" p-id="6520"></path><path d="M275.9 631.8h118.6v177.9H275.9zM453.7 631.8h118.6v177.9H453.7zM631.6 631.8h118.6v177.9H631.6zM216.6 216.8h592.9V454H216.6z" p-id="6521"></path></svg>
|
||||
|
After Width: | Height: | Size: 851 B |
1
src/icons/svg/sms.svg
Normal file
@@ -0,0 +1 @@
|
||||
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1541582420630" class="icon" style="" viewBox="0 0 1031 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="3681" xmlns:xlink="http://www.w3.org/1999/xlink" width="24.1640625" height="24"><defs><style type="text/css"></style></defs><path d="M320 275.2C320 275.2 320 275.2 320 275.2l0 467.2c0 0 0 0 0 0l147.2-128C480 614.4 499.2 608 512 608s32 6.4 44.8 12.8l147.2 128c0 0 0 0 0 0L704 281.6c0 0 0 0 0 0L320 281.6z" p-id="3682"></path><path d="M889.6 0 134.4 0C57.6 0 0 57.6 0 134.4l0 761.6C0 966.4 57.6 1024 134.4 1024l761.6 0c70.4 0 134.4-57.6 134.4-134.4L1030.4 134.4C1024 57.6 966.4 0 889.6 0zM768 742.4c0 38.4-32 64-64 64-12.8 0-32-6.4-44.8-19.2L512 672l-147.2 121.6c-25.6 19.2-64 19.2-89.6 0C262.4 780.8 256 761.6 256 742.4L256 281.6c0-38.4 32-64 64-64L704 217.6c38.4 0 64 32 64 64L768 742.4z" p-id="3683"></path></svg>
|
||||
|
After Width: | Height: | Size: 973 B |
1
src/icons/svg/table.svg
Normal file
@@ -0,0 +1 @@
|
||||
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1511504440567" class="icon" style="" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="5070" xmlns:xlink="http://www.w3.org/1999/xlink" width="64" height="64"><defs><style type="text/css"></style></defs><path d="M568.6 0h454.9v454.9H568.6V0z m0 568.6h454.9v454.9H568.6V568.6zM0 568.6h454.9v454.9H0V568.6zM0 0h454.9v454.9H0V0z" fill="" p-id="5071"></path></svg>
|
||||
|
After Width: | Height: | Size: 532 B |
1
src/icons/svg/total-today.svg
Normal file
@@ -0,0 +1 @@
|
||||
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1542700646737" class="icon" style="" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="2301" xmlns:xlink="http://www.w3.org/1999/xlink" width="54" height="54"><defs><style type="text/css"></style></defs><path d="M983.696 422.704A480 480 0 1 0 40.72 602.72a469.456 469.456 0 0 0 69.44 172.688 36.4 36.4 0 1 0 60.672-40.24 408.16 408.16 0 0 1 3.664-452.224 400.832 400.832 0 0 1 260.24-171.2 407.136 407.136 0 1 1-112.576 760.288 36.8 36.8 0 0 0-34.352 65.12 477.024 477.024 0 0 0 223.68 54.88 467.984 467.984 0 0 0 89.92-8.784A481.424 481.424 0 0 0 983.712 422.72z" p-id="2302"></path><path d="M471.712 579.84h-130.768a36.944 36.944 0 0 0 0 73.888h130.768v116.8a36.944 36.944 0 1 0 73.888 0v-116.8h130.768a36.944 36.944 0 1 0 0-73.888H545.6v-71.664a22.784 22.784 0 0 0-0.736-7.392h131.504a36.944 36.944 0 1 0 0-73.888H341.68a36.944 36.944 0 1 0 0 73.888h131.504a25.152 25.152 0 0 0-0.736 7.392v71.664z" p-id="2303"></path><path d="M405.968 383.312a37.104 37.104 0 0 0 52.464-52.464l-79.792-79.792a37.104 37.104 0 1 0-52.464 52.464z" p-id="2304"></path><path d="M602.48 383.312l79.792-79.792a37.088 37.088 0 1 0-52.448-52.464l-79.792 79.792a36.576 36.576 0 0 0 0 52.464 37.936 37.936 0 0 0 52.448 0z" p-id="2305"></path></svg>
|
||||
|
After Width: | Height: | Size: 1.4 KiB |
1
src/icons/svg/total-week.svg
Normal file
@@ -0,0 +1 @@
|
||||
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1542700697957" class="icon" style="" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="3201" xmlns:xlink="http://www.w3.org/1999/xlink" width="54" height="54"><defs><style type="text/css"></style></defs><path d="M38.16448 558.0288v419.90144c0 33.01376 51.2 33.01376 51.2 0V558.0288c0-33.01376-51.2-33.01376-51.2 0z" p-id="3202"></path><path d="M327.39328 420.70016v557.23008c0 33.01376 51.2 33.01376 51.2 0V420.70016c0-33.01888-51.2-33.01888-51.2 0z" p-id="3203"></path><path d="M629.21216 558.0288v419.90144c0 33.01376 51.2 33.01376 51.2 0V558.0288c0-33.01376-51.2-33.01376-51.2 0z" p-id="3204"></path><path d="M936.92928 420.70016v557.23008c0 33.01376 51.2 33.01376 51.2 0V420.70016c0-33.01888-51.2-33.01888-51.2 0zM81.86368 414.58176l277.27872-277.27872h-36.20352c95.55968 95.5648 191.11424 191.1296 286.65856 286.69952 9.86112 9.86112 26.3424 9.86112 36.19328 0 99.6864-99.67616 199.35744-199.35232 299.02848-299.02848 23.36256-23.36768-12.83584-59.5712-36.1984-36.20352-99.68128 99.67616-199.35744 199.35232-299.02336 299.02848h36.19328L359.13728 101.09952c-9.86112-9.86112-26.3424-9.86112-36.20352 0L45.65504 378.37824c-23.36256 23.36768 12.84096 59.5712 36.20864 36.20352z" p-id="3205"></path><path d="M779.06944 87.3728h190.208l-25.6-25.6v178.70336c0 33.01888 51.2 33.01888 51.2 0V61.7728c0-13.95712-11.63776-25.6-25.6-25.6h-190.208c-33.01376 0-33.01376 51.2 0 51.2z" p-id="3206"></path></svg>
|
||||
|
After Width: | Height: | Size: 1.5 KiB |
1
src/icons/svg/total-yesterday.svg
Normal file
@@ -0,0 +1 @@
|
||||
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1542700674974" class="icon" style="" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="2435" xmlns:xlink="http://www.w3.org/1999/xlink" width="54" height="54"><defs><style type="text/css"></style></defs><path d="M910.08512 255.34976c-0.9216 37.56032-33.67936 64.52736-62.77632 83.2256-49.06496 31.52896-107.008 48.10752-163.55328 60.01152-138.17344 29.09696-290.7648 23.57248-425.43104-19.46624-58.35776-18.65216-189.14816-75.15136-141.824-157.70624 21.99552-38.36928 69.44256-61.7984 108.63616-77.824 61.00992-24.93952 127.1552-37.65248 192.49152-44.0832 113.5104-11.17184 231.46496-2.74432 340.38784 32.07168 53.44256 17.08032 150.37952 55.00928 152.06912 123.77088 0.80896 32.95744 52.00896 33.03936 51.2 0-2.37568-96.73216-111.27296-147.01568-189.65504-173.14304-133.31456-44.43648-282.62912-47.11424-420.352-25.3952-97.09568 15.3088-223.18592 49.46432-278.9888 138.76224-50.43712 80.71168 17.99168 157.66016 86.2976 196.29056 68.02944 38.47168 147.73248 56.832 224.57344 66.6368 93.83424 11.97568 188.50304 10.11712 281.91232-4.61312 73.80992-11.63776 149.60128-33.51552 212.93056-74.21952 43.58656-28.01152 81.95584-70.0416 83.28704-124.31872 0.80384-33.03936-50.39616-32.95744-51.20512 0z" p-id="2436"></path><path d="M910.08512 423.22944c-1.4336 56.79616-74.50624 91.82208-118.88128 110.01344-89.00096 36.52096-187.52 48.3584-283.02848 48.80896-95.91296 0.45568-193.50528-13.50656-283.03872-48.80896-44.45696-17.52064-117.4528-53.66784-118.88128-110.01344-0.83456-32.95744-52.03456-33.03936-51.2 0 1.8688 73.86624 71.37792 120.97536 131.85024 148.91008 99.38432 45.91104 212.75136 60.60032 321.26976 61.11744 109.08672 0.51712 221.13792-16.65536 321.25952-61.11744 60.65664-26.93632 130.00192-75.7504 131.85024-148.91008 0.83456-33.03936-50.36544-32.95232-51.2 0z" p-id="2437"></path><path d="M910.08512 594.62656c-1.4336 56.80128-74.50624 91.8272-118.88128 110.0288-89.00096 36.52096-187.52 48.3584-283.02848 48.80896-95.91296 0.45568-193.50528-13.50656-283.03872-48.80896-44.45696-17.53088-117.4528-53.67808-118.88128-110.0288-0.83456-32.95744-52.03456-33.03424-51.2 0 1.8688 73.87136 71.37792 120.9856 131.85024 148.92544 99.38432 45.91104 212.75136 60.60032 321.26976 61.11744 109.08672 0.51712 221.13792-16.65536 321.25952-61.11744 60.65664-26.93632 130.00192-75.76576 131.85024-148.92544 0.83456-33.03424-50.36544-32.95744-51.2 0z" p-id="2438"></path><path d="M910.08512 776.06912c-1.4336 56.80128-74.50624 91.8272-118.88128 110.0288-89.00096 36.52096-187.52 48.3584-283.02848 48.80896-95.91296 0.45568-193.50528-13.50656-283.03872-48.80896-44.45696-17.53088-117.4528-53.67808-118.88128-110.0288-0.83456-32.95744-52.03456-33.03424-51.2 0 1.8688 73.87136 71.37792 120.9856 131.85024 148.92032 99.38432 45.91616 212.75136 60.60544 321.26976 61.12256 109.08672 0.51712 221.13792-16.65536 321.25952-61.12256 60.65664-26.9312 130.00192-75.76064 131.85024-148.92032 0.83456-33.03424-50.36544-32.95232-51.2 0zM386.23744 151.69024l102.20032 102.1952c9.86624 9.86112 26.3424 9.86112 36.20352 0l103.49568-103.49056c23.36768-23.36256-12.83584-59.5712-36.1984-36.20352L488.43776 217.68192h36.20352l-102.20032-102.1952c-23.36768-23.36768-59.56608 12.83584-36.20352 36.20352z" p-id="2439"></path><path d="M388.992 261.38624h235.45344c33.01376 0 33.01376-51.2 0-51.2H388.992c-33.01888 0-33.01888 51.2 0 51.2zM388.992 335.40608h235.45344c33.01376 0 33.01376-51.2 0-51.2H388.992c-33.01888 0-33.01888 51.2 0 51.2z" p-id="2440"></path><path d="M481.11616 234.49088V375.5008c0 33.01888 51.20512 33.01888 51.20512 0V234.49088c0-33.01376-51.20512-33.01376-51.20512 0z" p-id="2441"></path></svg>
|
||||
|
After Width: | Height: | Size: 3.7 KiB |
1
src/icons/svg/tree.svg
Normal file
@@ -0,0 +1 @@
|
||||
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1511512690058" class="icon" style="" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="3507" xmlns:xlink="http://www.w3.org/1999/xlink" width="64" height="64"><defs><style type="text/css"></style></defs><path d="M1013.703 693.345c6.865 6.865 10.297 14.874 10.297 24.027l0 205.944c0 9.916-3.432 18.115-10.297 24.599-6.865 6.483-15.255 9.725-25.171 9.725L782.588 957.64c-9.153 0-17.162-3.242-24.027-9.725-6.865-6.483-10.297-14.683-10.297-24.599L748.264 717.372c0-6.102 1.526-11.823 4.577-17.162s7.246-9.534 12.586-12.586 11.06-4.577 17.162-4.577l77.801 0L860.39 546.896c0-4.577-1.144-8.772-3.432-12.586s-5.339-6.865-9.153-9.153-8.009-3.432-12.585-3.432L543.464 521.725l0 161.323 77.801 0c9.153 0 17.162 3.432 24.027 10.297s10.297 14.874 10.297 24.027l0 205.944c0 6.102-1.526 11.823-4.577 17.162s-7.246 9.534-12.585 12.585-11.06 4.577-17.162 4.577L415.321 957.64c-6.102 0-11.823-1.526-17.162-4.577s-9.725-7.246-13.158-12.585-5.149-11.06-5.149-17.162L379.852 717.372c0-9.153 3.432-17.162 10.297-24.027s15.255-10.297 25.171-10.297l76.657 0L491.977 521.725 188.782 521.725c-7.628 0-13.92 2.479-18.878 7.437-4.958 4.958-7.437 10.869-7.437 17.734l0 136.152 77.801 0c9.916 0 18.115 3.432 24.599 10.297s9.725 14.874 9.725 24.027l0 205.944c0 9.916-3.242 18.115-9.725 24.599-6.483 6.483-14.683 9.725-24.599 9.725L34.324 957.64c-3.814 0-7.437-0.572-10.869-1.716-3.432-1.144-6.483-2.67-9.153-4.577-2.67-1.907-5.149-4.386-7.437-7.437-2.288-3.051-4.004-6.293-5.149-9.725C0.572 930.753 0 927.13 0 923.316L0 717.372c0-3.051 0.381-6.102 1.144-9.153s1.907-5.721 3.432-8.009 3.432-4.577 5.721-6.865 4.577-4.195 6.865-5.721 4.958-2.67 8.009-3.432 6.102-1.144 9.153-1.144l77.801 0L112.125 495.41c0-6.865 2.479-12.776 7.437-17.734s10.869-7.437 17.734-7.437l354.682 0L491.978 342.096l-76.657 0c-9.916 0-18.306-3.432-25.171-10.297s-10.297-14.874-10.297-24.027L379.853 101.828c0-9.916 3.432-18.306 10.297-25.171s15.255-10.297 25.171-10.297l205.944 0c6.102 0 11.823 1.716 17.162 5.149 5.339 3.432 9.534 7.818 12.585 13.158 3.051 5.339 4.577 11.06 4.577 17.162l0 205.944c0 9.153-3.432 17.162-10.297 24.027s-14.874 10.297-24.027 10.297l-77.801 0 0 128.143L885.56 470.24c7.628 0 13.92 2.479 18.878 7.437s7.437 10.869 7.437 17.734l0 187.638 76.657 0C998.448 683.048 1006.838 686.48 1013.703 693.345z" p-id="3508"></path></svg>
|
||||
|
After Width: | Height: | Size: 2.4 KiB |
1
src/icons/svg/user.svg
Normal file
@@ -0,0 +1 @@
|
||||
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1503993891882" class="icon" style="" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="7986" xmlns:xlink="http://www.w3.org/1999/xlink" width="64" height="64"><defs><style type="text/css"></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-0.001 91.258 75.793 165.26 169.28 165.26z m77.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" p-id="7987"></path></svg>
|
||||
|
After Width: | Height: | Size: 777 B |
30
src/main.js
Normal file
@@ -0,0 +1,30 @@
|
||||
import Vue from 'vue'
|
||||
|
||||
import 'normalize.css/normalize.css'// A modern alternative to CSS resets
|
||||
|
||||
import ElementUI from 'element-ui'
|
||||
import 'element-ui/lib/theme-chalk/index.css'
|
||||
import locale from 'element-ui/lib/locale/lang/zh-CN' // lang i18n
|
||||
import VCharts from 'v-charts'
|
||||
|
||||
import '@/styles/index.scss' // global css
|
||||
|
||||
import App from './App'
|
||||
import router from './router'
|
||||
import store from './store'
|
||||
|
||||
import '@/icons' // icon
|
||||
import '@/permission' // permission control
|
||||
|
||||
Vue.use(ElementUI, { locale })
|
||||
Vue.use(VCharts)
|
||||
|
||||
Vue.config.productionTip = false
|
||||
|
||||
new Vue({
|
||||
el: '#app',
|
||||
router,
|
||||
store,
|
||||
template: '<App/>',
|
||||
components: { App }
|
||||
})
|
||||
41
src/permission.js
Normal file
@@ -0,0 +1,41 @@
|
||||
import router from './router'
|
||||
import store from './store'
|
||||
import NProgress from 'nprogress' // Progress 进度条
|
||||
import 'nprogress/nprogress.css'// Progress 进度条样式
|
||||
import { Message } from 'element-ui'
|
||||
import { getToken } from '@/utils/auth' // 验权
|
||||
|
||||
const whiteList = ['/login'] // 不重定向白名单
|
||||
router.beforeEach((to, from, next) => {
|
||||
NProgress.start()
|
||||
if (getToken()) {
|
||||
if (to.path === '/login') {
|
||||
next({ path: '/' })
|
||||
NProgress.done() // if current page is dashboard will not trigger afterEach hook, so manually handle it
|
||||
} else {
|
||||
if (store.getters.roles.length === 0) {
|
||||
store.dispatch('GetInfo').then(res => { // 拉取用户信息
|
||||
next()
|
||||
}).catch((err) => {
|
||||
store.dispatch('FedLogOut').then(() => {
|
||||
Message.error(err || 'Verification failed, please login again')
|
||||
next({ path: '/' })
|
||||
})
|
||||
})
|
||||
} else {
|
||||
next()
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if (whiteList.indexOf(to.path) !== -1) {
|
||||
next()
|
||||
} else {
|
||||
next('/login')
|
||||
NProgress.done()
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
router.afterEach(() => {
|
||||
NProgress.done() // 结束Progress
|
||||
})
|
||||