pull/1/head
dwj 3 months ago
parent a7511c2a0c
commit 99fe322ddd

@ -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"]
}

@ -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

14
.gitignore vendored

@ -0,0 +1,14 @@
.DS_Store
node_modules/
/dist/
npm-debug.log*
yarn-debug.log*
yarn-error.log*
# Editor directories and files
.idea
.vscode
*.suo
*.ntvs*
*.njsproj
*.sln

@ -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": {}
}
}

@ -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-2024] [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.

@ -1,2 +1,83 @@
# mall-admin
# mall-admin-web
<p>
<a href="#公众号"><img src="http://macro-oss.oss-cn-shenzhen.aliyuncs.com/mall/badge/%E5%85%AC%E4%BC%97%E5%8F%B7-macrozheng-blue.svg" alt="公众号"></a>
<a href="#公众号"><img src="http://macro-oss.oss-cn-shenzhen.aliyuncs.com/mall/badge/%E4%BA%A4%E6%B5%81-%E5%BE%AE%E4%BF%A1%E7%BE%A4-2BA245.svg" alt="交流"></a>
<a href="https://github.com/macrozheng/mall"><img src="http://macro-oss.oss-cn-shenzhen.aliyuncs.com/mall/badge/%E5%90%8E%E5%8F%B0%E9%A1%B9%E7%9B%AE-mall-blue.svg" alt="后台项目"></a>
<a href="https://github.com/macrozheng/mall-swarm"><img src="http://macro-oss.oss-cn-shenzhen.aliyuncs.com/mall/badge/Cloud%E7%89%88%E6%9C%AC-mall--swarm-brightgreen.svg" alt="SpringCloud版本"></a>
<a href="https://gitee.com/macrozheng/mall-admin-web"><img src="http://macro-oss.oss-cn-shenzhen.aliyuncs.com/mall/badge/%E7%A0%81%E4%BA%91-%E9%A1%B9%E7%9B%AE%E5%9C%B0%E5%9D%80-orange.svg" alt="码云"></a>
</p>
## 前言
该项目为前后端分离项目的前端部分,后端项目`mall`地址:[传送门](https://github.com/macrozheng/mall) 。
## 项目介绍
`mall-admin-web`是一个电商后台管理系统的前端项目基于Vue+Element实现。主要包括商品管理、订单管理、会员管理、促销管理、运营管理、内容管理、统计报表、财务管理、权限管理、设置等功能。
### 项目演示
项目在线演示地址:[https://www.macrozheng.com/admin/](https://www.macrozheng.com/admin/)
![后台管理系统功能演示](http://img.macrozheng.com/mall/project/mall_admin_show.png)
### 技术选型
| 技术 | 说明 | 官网 |
| ----------------- | --------------------- | ------------------------------------------------------------ |
| Vue | 前端框架 | [https://vuejs.org/](https://vuejs.org/) |
| Vue-router | 路由框架 | [https://router.vuejs.org/](https://router.vuejs.org/) |
| Vuex | 全局状态管理框架 | [https://vuex.vuejs.org/](https://vuex.vuejs.org/) |
| Element | 前端UI框架 | [https://element.eleme.io/](https://element.eleme.io/) |
| Axios | 前端HTTP框架 | [https://github.com/axios/axios](https://github.com/axios/axios) |
| v-charts | 基于Echarts的图表框架 | [https://v-charts.js.org/](https://v-charts.js.org/) |
| Js-cookie | cookie管理工具 | [https://github.com/js-cookie/js-cookie](https://github.com/js-cookie/js-cookie) |
| nprogress | 进度条控件 | [https://github.com/rstacruz/nprogress](https://github.com/rstacruz/nprogress) |
| vue-element-admin | 项目脚手架参考 | [https://github.com/PanJiaChen/vue-element-admin](https://github.com/PanJiaChen/vue-element-admin) |
### 项目布局
``` lua
src -- 源码目录
├── api -- axios网络请求定义
├── assets -- 静态图片资源文件
├── components -- 通用组件封装
├── icons -- svg矢量图片文件
├── router -- vue-router路由配置
├── store -- vuex的状态管理
├── styles -- 全局css样式
├── utils -- 工具类
└── views -- 前端页面
├── home -- 首页
├── layout -- 通用页面加载框架
├── login -- 登录页
├── oms -- 订单模块页面
├── pms -- 商品模块页面
└── sms -- 营销模块页面
```
## 搭建步骤
- 下载node并安装[https://nodejs.org/dist/v12.14.0/node-v12.14.0-x64.msi](https://nodejs.org/dist/v12.14.0/node-v12.14.0-x64.msi);
- 该项目为前后端分离项目,访问本地访问接口需搭建后台环境,搭建请参考后端项目[传送门](https://github.com/macrozheng/mall);
- 访问在线接口无需搭建后台环境,只需将`config/dev.env.js`文件中的`BASE_API`改为[https://admin-api.macrozheng.com](https://admin-api.macrozheng.com)即可;
- 如果你对接的是[mall-swarm](https://github.com/macrozheng/mall-swarm) 微服务后台的话,所有接口都需要通过网关访问,需要将`config/dev.env.js`文件中的`BASE_API`改为[http://localhost:8201/mall-admin](http://localhost:8201/mall-admin)
- 克隆源代码到本地使用IDEA打开并完成编译;
- 在IDEA命令行中运行命令`npm install`,下载相关依赖;
- 在IDEA命令行中运行命令`npm run dev`,运行项目;
- 访问地址:[http://localhost:8090](http://localhost:8090) 即可打开后台管理系统页面;
- 具体部署过程请参考:[mall前端项目的安装与部署](https://www.macrozheng.com/mall/deploy/mall_deploy_web.html)
- 前端自动化部署请参考:[使用Jenkins一键打包部署前端应用就是这么6](https://www.macrozheng.com/mall/reference/jenkins_vue.html)
## 公众号
学习不走弯路,关注公众号「**macrozheng**」,回复「**学习路线**」获取mall项目专属学习路线
加微信群交流,公众号后台回复「**加群**」即可。
![公众号图片](http://macro-oss.oss-cn-shenzhen.aliyuncs.com/mall/banner/qrcode_for_macrozheng_258.jpg)
## 许可证
[Apache License 2.0](https://github.com/macrozheng/mall-admin-web/blob/master/LICENSE)
Copyright (c) 2018-2024 macrozheng

@ -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'
))
})
})

@ -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)
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.7 KiB

@ -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')
})
}
}

@ -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'
}
}

@ -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'
}
}

@ -0,0 +1,95 @@
'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',
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)
}
})
})

@ -0,0 +1,145 @@
'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',
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

@ -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:8080"'
})

@ -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
}
}

@ -0,0 +1,5 @@
'use strict'
module.exports = {
NODE_ENV: '"production"',
BASE_API: '"https://admin-api.macrozheng.com"'
}

@ -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>
<!-- Google tag (gtag.js) -->
<script async src="https://www.googletagmanager.com/gtag/js?id=G-73YJPXJTLX"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'G-73YJPXJTLX');
</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>

@ -0,0 +1 @@
Subproject commit c824eacdb7758fe19ce801b5bd18a2bd2f275991

16146
package-lock.json generated

File diff suppressed because it is too large Load Diff

@ -0,0 +1,74 @@
{
"name": "mall-admin-web",
"version": "1.0.0",
"description": "mall后台管理前端",
"author": "macro",
"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",
"sass": "^1.32.8",
"v-charts": "^1.19.0",
"v-distpicker": "^1.0.20",
"vue": "^2.7.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",
"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"
]
}

@ -0,0 +1,14 @@
<template>
<div id="app">
<router-view/>
</div>
</template>
<script>
export default {
name: 'App'
}
</script>
<style>
</style>

@ -0,0 +1,54 @@
import request from '@/utils/request'
export function fetchList(params) {
return request({
url:'/brand/list',
method:'get',
params:params
})
}
//dwj1111111
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
})
}

@ -0,0 +1,7 @@
import request from '@/utils/request'
export function fetchList() {
return request({
url:'/companyAddress/list',
method:'get'
})
}

@ -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',
})
}

@ -0,0 +1,8 @@
import request from '@/utils/request'
export function fetchList(params) {
return request({
url:'/couponHistory/list',
method:'get',
params:params
})
}

@ -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
})
}

@ -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
})
}

@ -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
})
}

@ -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
})
}

@ -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
})
}

@ -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
})
}

@ -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
})
}

@ -0,0 +1,80 @@
import request from '@/utils/request'
export function login(username, password) {
return request({
url: '/admin/login',
method: 'post',
data: {
username,
password
}
})
}
export function getInfo() {
return request({
url: '/admin/info',
method: 'get',
})
}
export function logout() {
return request({
url: '/admin/logout',
method: 'post'
})
}
export function fetchList(params) {
return request({
url: '/admin/list',
method: 'get',
params: params
})
}
export function createAdmin(data) {
return request({
url: '/admin/register',
method: 'post',
data: data
})
}
export function updateAdmin(id, data) {
return request({
url: '/admin/update/' + id,
method: 'post',
data: data
})
}
export function updateStatus(id, params) {
return request({
url: '/admin/updateStatus/' + id,
method: 'post',
params: params
})
}
export function deleteAdmin(id) {
return request({
url: '/admin/delete/' + id,
method: 'post'
})
}
export function getRoleByAdmin(id) {
return request({
url: '/admin/role/' + id,
method: 'get'
})
}
export function allocRole(data) {
return request({
url: '/admin/role/update',
method: 'post',
data: data
})
}

@ -0,0 +1,8 @@
import request from '@/utils/request'
export function fetchList(params) {
return request({
url:'/memberLevel/list',
method:'get',
params:params
})
}

@ -0,0 +1,55 @@
import request from '@/utils/request'
export function fetchList(parentId, params) {
return request({
url: '/menu/list/' + parentId,
method: 'get',
params: params
})
}
export function deleteMenu(id) {
return request({
url: '/menu/delete/' + id,
method: 'post'
})
}
export function createMenu(data) {
return request({
url: '/menu/create',
method: 'post',
data: data
})
}
export function updateMenu(id, data) {
return request({
url: '/menu/update/' + id,
method: 'post',
data: data
})
}
export function getMenu(id) {
return request({
url: '/menu/' + id,
method: 'get',
})
}
export function updateHidden(id, params) {
return request({
url: '/menu/updateHidden/' + id,
method: 'post',
params: params
})
}
export function fetchTreeList() {
return request({
url: '/menu/treeList',
method: 'get'
})
}

@ -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
})
}

@ -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
})
}

@ -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
})
}

@ -0,0 +1,7 @@
import request from '@/utils/request'
export function policy() {
return request({
url:'/aliyun/oss/policy',
method:'get',
})
}

@ -0,0 +1,7 @@
import request from '@/utils/request'
export function fetchList() {
return request({
url:'/prefrenceArea/listAll',
method:'get',
})
}

@ -0,0 +1,72 @@
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',
})
}

@ -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'
})
}

@ -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'
})
}

@ -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'
})
}

@ -0,0 +1,39 @@
import request from '@/utils/request'
export function fetchList(params) {
return request({
url: '/resource/list',
method: 'get',
params: params
})
}
export function createResource(data) {
return request({
url: '/resource/create',
method: 'post',
data: data
})
}
export function updateResource(id, data) {
return request({
url: '/resource/update/' + id,
method: 'post',
data: data
})
}
export function deleteResource(id) {
return request({
url: '/resource/delete/' + id,
method: 'post'
})
}
export function fetchAllResourceList() {
return request({
url: '/resource/listAll',
method: 'get'
})
}

@ -0,0 +1,31 @@
import request from '@/utils/request'
export function listAllCate() {
return request({
url: '/resourceCategory/listAll',
method: 'get'
})
}
export function createResourceCategory(data) {
return request({
url: '/resourceCategory/create',
method: 'post',
data: data
})
}
export function updateResourceCategory(id, data) {
return request({
url: '/resourceCategory/update/' + id,
method: 'post',
data: data
})
}
export function deleteResourceCategory(id) {
return request({
url: '/resourceCategory/delete/' + id,
method: 'post'
})
}

@ -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'
})
}

@ -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
})
}

@ -0,0 +1,78 @@
import request from '@/utils/request'
export function fetchList(params) {
return request({
url: '/role/list',
method: 'get',
params: params
})
}
export function createRole(data) {
return request({
url: '/role/create',
method: 'post',
data: data
})
}
export function updateRole(id, data) {
return request({
url: '/role/update/' + id,
method: 'post',
data: data
})
}
export function updateStatus(id, params) {
return request({
url: '/role/updateStatus/' + id,
method: 'post',
params: params
})
}
export function deleteRole(data) {
return request({
url:'/role/delete',
method:'post',
data:data
})
}
export function fetchAllRoleList() {
return request({
url: '/role/listAll',
method: 'get'
})
}
export function listMenuByRole(roleId) {
return request({
url: '/role/listMenu/'+roleId,
method: 'get'
})
}
export function listResourceByRole(roleId) {
return request({
url: '/role/listResource/'+roleId,
method: 'get'
})
}
export function allocMenu(data) {
return request({
url: '/role/allocMenu',
method: 'post',
data:data
})
}
export function allocResource(data) {
return request({
url: '/role/allocResource',
method: 'post',
data:data
})
}

@ -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
})
}

@ -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
})
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 96 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 34 KiB

@ -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>

@ -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>

@ -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>

@ -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>

@ -0,0 +1,128 @@
<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="useOss?ossUploadUrl:minioUploadUrl"
:data="useOss?dataObj:null"
: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: ''
},
useOss:false, //使oss->true;使MinIO->false
ossUploadUrl:'http://macro-oss.oss-cn-shenzhen.aliyuncs.com',
minioUploadUrl:'http://localhost:8080/minio/upload',
}
},
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;
if(!this.useOss){
//使oss
this.listObj[objKeyArr[i]].url = response.data.url;
}
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] = {};
if(!this.useOss){
//使oss
this.listObj[fileName] = {hasSuccess: false, uid: file.uid, width: this.width, height: this.height};
return true;
}
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>

@ -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 code`,
`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>

@ -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"
});

@ -0,0 +1,121 @@
<template> 
<div>
<el-upload
:action="useOss?ossUploadUrl:minioUploadUrl"
:data="useOss?dataObj:null"
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,
useOss:false, //使oss->true;使MinIO->false
ossUploadUrl:'http://macro-oss.oss-cn-shenzhen.aliyuncs.com',
minioUploadUrl:'http://localhost:8080/minio/upload',
};
},
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;
if(!this.useOss){
//使oss
return true;
}
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) {
let url = this.dataObj.host + '/' + this.dataObj.dir + '/' + file.name;
if(!this.useOss){
//使oss
url = res.data.url;
}
this.fileList.push({name: file.name,url:url});
this.emitInput(this.fileList);
},
handleExceed(files, fileList) {
this.$message({
message: '最多只能上传'+this.maxCount+'张图片',
type: 'warning',
duration:1000
});
},
}
}
</script>
<style>
</style>

@ -0,0 +1,121 @@
<template> 
<div>
<el-upload
:action="useOss?ossUploadUrl:minioUploadUrl"
:data="useOss?dataObj:null"
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,
useOss:false, //使oss->true;使MinIO->false
ossUploadUrl:'http://macro-oss.oss-cn-shenzhen.aliyuncs.com',
minioUploadUrl:'http://localhost:8080/minio/upload',
};
},
methods: {
emitInput(val) {
this.$emit('input', val)
},
handleRemove(file, fileList) {
this.emitInput('');
},
handlePreview(file) {
this.dialogVisible = true;
},
beforeUpload(file) {
let _self = this;
if(!this.useOss){
//使oss
return true;
}
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();
let url = this.dataObj.host + '/' + this.dataObj.dir + '/' + file.name;
if(!this.useOss){
//使oss
url = res.data.url;
}
this.fileList.push({name: file.name, url: url});
this.emitInput(this.fileList[0].url);
}
}
}
</script>
<style>
</style>

@ -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)

@ -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="1711961148008" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="6146" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><path d="M147.2 489.6l73.6-44.8 291.2 176 291.2-176 73.6 44.8L512 710.4 147.2 489.6z m0-144L512 147.2l364.8 198.4L512 544 147.2 345.6zM512 787.2l291.2-176 73.6 44.8L512 876.8 147.2 656l73.6-44.8 291.2 176z" p-id="6147"></path></svg>

After

Width:  |  Height:  |  Size: 556 B

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 5.2 KiB

@ -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="1711961668062" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="8320" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><path d="M809.90296081 933.875H214.09703919c-66.61184189 0-122.12171026-55.50986838-122.12171027-122.12171026V212.24671027C91.97532892 145.63486838 147.4851973 90.125 214.09703919 90.125h595.80592162c66.61184189 0 122.12171026 55.50986838 122.12171027 122.12171026v599.50657947c0 66.61184189-51.80921054 122.12171026-122.12171027 122.12171027zM214.09703919 141.93421054c-40.70723703 0-70.31249973 33.30592136-70.31249973 70.31249972v599.50657947c0 40.70723703 33.30592136 70.31249973 70.31249973 70.31249973h595.80592162c40.70723703 0 70.31249973-33.30592136 70.31249973-70.31249973V212.24671027c0-40.70723703-33.30592136-70.31249973-70.31249973-70.31249973H214.09703919z" p-id="8321"></path><path d="M750.6924346 323.26644702H277.00822407c-14.80263135 0-25.90460486-11.10197351-25.90460569-25.90460486s11.10197351-25.90460486 25.90460568-25.90460568h473.68421054c14.80263135 0 25.90460486 11.10197351 25.90460486 25.90460568s-11.10197351 25.90460486-25.90460486 25.90460487zM580.46217081 515.70065784H277.00822407c-14.80263135 0-25.90460486-11.10197351-25.90460569-25.90460486s11.10197351-25.90460486 25.90460568-25.90460568h307.15460458c14.80263135 0 25.90460486 11.10197351 25.90460568 25.90460567s-14.80263135 25.90460486-29.60526351 25.90460487zM750.6924346 711.83552649H277.00822407c-14.80263135 0-25.90460486-11.10197351-25.90460569-25.90460568s11.10197351-25.90460486 25.90460568-25.90460486h473.68421054c14.80263135 0 25.90460486 11.10197351 25.90460486 25.90460486s-11.10197351 25.90460486-25.90460486 25.90460568z" p-id="8322"></path></svg>

After

Width:  |  Height:  |  Size: 1.8 KiB

@ -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="1686299036148" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="3633" xmlns:xlink="http://www.w3.org/1999/xlink" width="128" height="128"><path d="M983.771429 367.542857a510.514286 510.514286 0 0 0-109.714286-162.742857 510.514286 510.514286 0 0 0-162.742857-109.714286C648.114286 68.342857 581.142857 54.857143 512 54.857143s-136.114286 13.485714-199.314286 40.228571a510.514286 510.514286 0 0 0-162.742857 109.714286 510.514286 510.514286 0 0 0-109.714286 162.742857C13.485714 430.742857 0 497.714286 0 566.857143c0 151.657143 66.628571 294.514286 182.742857 392.114286l1.942857 1.6c6.628571 5.485714 14.971429 8.571429 23.542857 8.571428h607.657143c8.571429 0 16.914286-3.085714 23.542857-8.571428l1.942858-1.6C957.371429 861.371429 1024 718.514286 1024 566.857143c0-69.142857-13.6-136.114286-40.228571-199.314286zM797.028571 882.285714H226.971429A424.137143 424.137143 0 0 1 86.857143 566.857143c0-113.6 44.228571-220.342857 124.571428-300.571429 80.342857-80.342857 187.085714-124.571429 300.571429-124.571428 113.6 0 220.342857 44.228571 300.571429 124.571428 80.342857 80.342857 124.571429 187.085714 124.571428 300.571429 0 120.685714-50.857143 234.857143-140.114286 315.428571zM639.428571 408.571429a9.177143 9.177143 0 0 0-12.914285 0L529.942857 505.142857c-21.371429-5.714286-45.028571-0.228571-61.828571 16.571429a63.942857 63.942857 0 0 0 0 90.514285 63.942857 63.942857 0 0 0 90.514285 0 63.851429 63.851429 0 0 0 16.571429-61.828571l96.571429-96.571429c3.542857-3.542857 3.542857-9.371429 0-12.914285l-32.342858-32.342857zM486.857143 292.571429h50.285714c5.028571 0 9.142857-4.114286 9.142857-9.142858v-91.428571c0-5.028571-4.114286-9.142857-9.142857-9.142857h-50.285714c-5.028571 0-9.142857 4.114286-9.142857 9.142857v91.428571c0 5.028571 4.114286 9.142857 9.142857 9.142858z m297.142857 249.142857v50.285714c0 5.028571 4.114286 9.142857 9.142857 9.142857h91.428572c5.028571 0 9.142857-4.114286 9.142857-9.142857v-50.285714c0-5.028571-4.114286-9.142857-9.142857-9.142857h-91.428572c-5.028571 0-9.142857 4.114286-9.142857 9.142857z m14.514286-225.371429l-35.542857-35.542857a9.177143 9.177143 0 0 0-12.914286 0l-64.685714 64.685714a9.177143 9.177143 0 0 0 0 12.914286l35.542857 35.542857c3.542857 3.542857 9.371429 3.542857 12.914285 0l64.685715-64.685714c3.542857-3.542857 3.542857-9.371429 0-12.914286z m-524.114286-35.542857a9.177143 9.177143 0 0 0-12.914286 0l-35.542857 35.542857a9.177143 9.177143 0 0 0 0 12.914286l64.685714 64.685714c3.542857 3.542857 9.371429 3.542857 12.914286 0l35.542857-35.542857c3.542857-3.542857 3.542857-9.371429 0-12.914286l-64.685714-64.685714zM226.285714 532.571429h-91.428571c-5.028571 0-9.142857 4.114286-9.142857 9.142857v50.285714c0 5.028571 4.114286 9.142857 9.142857 9.142857h91.428571c5.028571 0 9.142857-4.114286 9.142857-9.142857v-50.285714c0-5.028571-4.114286-9.142857-9.142857-9.142857z" p-id="3634"></path></svg>

After

Width:  |  Height:  |  Size: 3.0 KiB

@ -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="1686299251924" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="10052" xmlns:xlink="http://www.w3.org/1999/xlink" width="128" height="128"><path d="M629.76 849.92v151.04l220.16-184.32H665.6c-17.92 0-35.84 15.36-35.84 33.28z m184.32-742.4H125.44c-17.92 0-33.28 20.48-33.28 38.4v824.32c0 17.92 12.8 30.72 30.72 30.72h473.6v-184.32c0-17.92 17.92-35.84 33.28-35.84h220.16v-640c0-15.36-17.92-35.84-35.84-33.28z m-563.2 624.64c-23.04 0-40.96-17.92-40.96-40.96 0-23.04 17.92-40.96 40.96-40.96s40.96 17.92 40.96 40.96c0 20.48-17.92 40.96-40.96 40.96z m0-186.88c-23.04 0-40.96-17.92-40.96-40.96 0-23.04 17.92-40.96 40.96-40.96s40.96 17.92 40.96 40.96c0 23.04-17.92 40.96-40.96 40.96z m0-184.32c-23.04 0-40.96-17.92-40.96-40.96 0-23.04 17.92-40.96 40.96-40.96s40.96 17.92 40.96 40.96c0 20.48-17.92 40.96-40.96 40.96z m445.44 335.36c0 10.24-7.68 17.92-17.92 17.92H376.32c-10.24 0-17.92-7.68-17.92-17.92v-17.92c0-10.24 7.68-17.92 17.92-17.92h302.08c10.24 0 17.92 7.68 17.92 17.92v17.92z m0-184.32c0 10.24-7.68 17.92-17.92 17.92H376.32c-10.24 0-17.92-7.68-17.92-17.92v-17.92c0-10.24 7.68-17.92 17.92-17.92h302.08c10.24 0 17.92 7.68 17.92 17.92v17.92z m0-184.32c0 10.24-7.68 17.92-17.92 17.92H376.32c-10.24 0-17.92-7.68-17.92-17.92v-17.92c0-10.24 7.68-17.92 17.92-17.92h302.08c10.24 0 17.92 7.68 17.92 17.92v17.92zM903.68 23.04H202.24c-25.6 0-43.52 25.6-43.52 51.2h691.2c17.92 0 33.28 17.92 33.28 33.28v624.64c25.6 0 51.2-15.36 51.2-40.96V53.76c-2.56-17.92-15.36-30.72-30.72-30.72z" fill="" p-id="10053"></path></svg>

After

Width:  |  Height:  |  Size: 1.6 KiB

@ -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

@ -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

@ -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

@ -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

@ -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

@ -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

@ -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

@ -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

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 4.9 KiB

@ -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

@ -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

@ -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

@ -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

@ -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

@ -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

@ -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

@ -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

@ -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

@ -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

@ -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

@ -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

@ -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

@ -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

@ -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

@ -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

@ -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

Some files were not shown because too many files have changed in this diff Show More

Loading…
Cancel
Save