Commit 3f239696 by 李君

家乐福

0 parents
Showing 1000 changed files with 3858 additions and 0 deletions

Too many changes to show.

To preserve performance only 1000 of 1000+ files are displayed.

{
"presets": [
[
"env",
{
"modules": false,
"useBuiltIns": "entry",
"targets": {
"browsers": [
"> 1%",
"last 2 versions",
"not ie <= 8"
]
}
}
],
"stage-2"
],
"plugins": ["transform-runtime","transform-vue-jsx"],
"env": {
"test": {
"presets": [
"env",
"stage-2"
],
"plugins": ["transform-vue-jsx","istanbul"]
}
}
}
\ No newline at end of file \ No newline at end of file
# https://editorconfig.org/
root = true
[*]
charset = utf-8
indent_style = space
indent_size = 2
end_of_line = lf
insert_final_newline = true
trim_trailing_whitespace = true
.DS_Store
node_modules/
/dist/
dist.zip
npm-debug.log*
yarn-debug.log*
yarn-error.log*
simpleHttp.py*
/.history/
static/js/config.js
config.js
# Editor directories and files
#
.DS_Store
.lock
.idea
.vscode
*.suo
*.ntvs*
*.njsproj
*.sln
// 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": {}
}
}
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
<name>business</name>
<comment>Create By HBuilder</comment>
<projects>
</projects>
<buildSpec>
<buildCommand>
<name>com.aptana.ide.core.unifiedBuilder</name>
<arguments>
</arguments>
</buildCommand>
</buildSpec>
<natures>
<nature>com.aptana.projects.webnature</nature>
</natures>
<filteredResources>
<filter>
<id>1520908530282</id>
<name></name>
<type>10</type>
<matcher>
<id>org.eclipse.ui.ide.orFilterMatcher</id>
<arguments>
<matcher>
<id>org.eclipse.ui.ide.multiFilter</id>
<arguments>1.0-projectRelativePath-matches-false-false-bin</arguments>
</matcher>
<matcher>
<id>org.eclipse.ui.ide.multiFilter</id>
<arguments>1.0-projectRelativePath-matches-false-false-setting</arguments>
</matcher>
</arguments>
</matcher>
</filter>
</filteredResources>
</projectDescription>
# project
> A Vue.js project
## Build Setup
``` bash
# install dependencies
npm install
# serve with hot reload at localhost:8080
npm run dev
# build for production with minification
npm run build
# build for production and view the bundle analyzer report
npm run build --report
```
For a detailed explanation on how things work, check out the [guide](http://vuejs-templates.github.io/webpack/) and [docs for vue-loader](http://vuejs.github.io/vue-loader).
'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'
))
})
})
'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)
}
}
'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',
publicPath: '../../'
})
} 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')
})
}
}
\ No newline at end of file \ No newline at end of file
'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'
},
}
'use strict'
const path = require('path')
const utils = require('./utils')
const config = require('../config')
const vueLoaderConfig = require('./vue-loader.conf')
var webpack = require('webpack')
function resolve(dir) {
return path.join(__dirname, '..', dir)
}
module.exports = {
context: path.resolve(__dirname, '../'),
entry: {
app: ['babel-polyfill', './src/main.js'],
//xincheng: ['babel-polyfill', './src/xincheng.js']
},
output: {
path: config.build.assetsRoot,
filename: '[name].js',
chunkFilename: '[name].[chunkhash:5].chunk.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',
'static': resolve('static'),
'@': resolve('src'),
}
},
plugins: [
new webpack.ProvidePlugin({
$: 'jquery'
// jQuery: 'jquery',
// jquery: 'jquery',
// 'window.jQuery': 'jquery'
}),
// new webpack.DllReferencePlugin({
// context: __dirname,
// manifest: require('./element-manifest.json')
// }),
new webpack.DllReferencePlugin({
context: __dirname,
manifest: require('./xlsx-manifest.json')
})
],
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: /\.(png|jpe?g|gif|svg)(\?.*)?$/,
loader: 'url-loader',
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'
}
}
\ No newline at end of file \ No newline at end of file
'use strict'
const utils = require('./utils')
const webpack = require('webpack')
const config = require('../config')
const merge = require('webpack-merge')
const baseWebpackConfig = require('./webpack.base.conf')
const HtmlWebpackPlugin = require('html-webpack-plugin')
const FriendlyErrorsPlugin = require('friendly-errors-webpack-plugin')
const portfinder = require('portfinder')
const devWebpackConfig = merge(baseWebpackConfig, {
module: {
rules: utils.styleLoaders({ sourceMap: config.dev.cssSourceMap, usePostCSS: true })
},
// cheap-module-eval-source-map is faster for development
devtool: config.dev.devtool,
// these devServer options should be customized in /config/index.js
devServer: {
clientLogLevel: 'warning',
historyApiFallback: true,
hot: true,
host: process.env.HOST ||  config.dev.host,
port: process.env.PORT ||  config.dev.port,
open: config.dev.autoOpenBrowser,
overlay: config.dev.errorOverlay ? {
warnings: false,
errors: true,
} : false,
//contentBase:config.dev.assetsContentBase,
publicPath: config.dev.assetsPublicPath,
proxy: config.dev.proxyTable,
quiet: true, // necessary for FriendlyErrorsPlugin
watchOptions: {
poll: config.dev.poll,
},
// ie9兼容
noInfo: true,
overlay: true,
proxy: {
'/api': {
target: 'http://localhost:8081/myserver',
pathRewrite: {
'^/api': ''
}
}
},
},
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,
chunks: ['app']
}),
// new HtmlWebpackPlugin({
// filename: 'xincheng.html',
// template: 'xincheng.html',
// inject: true,
// chunks: ['app']
// //chunks: ['xincheng']
// }),
]
})
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://${config.dev.host}:${port}`],
},
onErrors: config.dev.notifyOnErrors ?
utils.createNotifierCallback() : undefined
}))
resolve(devWebpackConfig)
}
})
})
\ No newline at end of file \ No newline at end of file
'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 CSSSplitWebpackPlugin = require('css-split-webpack-plugin').default;
const BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin;
// const GenerateAssetPlugin = require('generate-asset-webpack-plugin')
const env = require('../config/prod.env')
// const fs = require('fs')
// const content = `getVersion('${+new Date()}')`
// fs.writeFile(config.build.assetsRoot + '/version.js', content, function(err) {
// if (err) {
// return console.error(err)
// }
// // console.log('The file was saved')
// })
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?t=[chunkhash:5]'),
chunkFilename: utils.assetsPath('js/[name].[chunkhash].js?t=[chunkhash:5]')
},
plugins: [
// http://vuejs.github.io/vue-loader/en/workflow/production.html
new webpack.DefinePlugin({
'process.env': env
}),
new UglifyJsPlugin({
exclude: [/en_US/, /mall_CN/, /zh_CN/, /zh_TW/],
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',
chunks: ['manifest', 'vendor', 'app']
}),
// new HtmlWebpackPlugin({
// filename: config.build.xincheng,
// template: 'xincheng.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',
// chunks: ['manifest', 'vendor', 'app']
// //chunks: ['manifest', 'vendor', 'xincheng']
// }),
// 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: ['.*']
}]),
new CSSSplitWebpackPlugin({
size: 4000,
filename: 'static/css/[name]-[part].[ext]'
}),
new BundleAnalyzerPlugin({
analyzerMode: 'server',
analyzerHost: '127.0.0.1',
analyzerPort: 8888,
reportFilename: 'report.html',
defaultSizes: 'parsed',
openAnalyzer: true,
generateStatsFile: false,
statsFilename: 'stats.json',
statsOptions: null,
logLevel: 'info'
}),
]
})
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())
}
// 打包输出可配置文件
// let createServerConfig = function(compilation) {
// let cfgJson = {
// ApiUrl: 'http://192.168.9.228:9500'
// };
// return JSON.stringify(cfgJson);
// }
// webpackConfig.plugins.push(
// // 输出可配置文件
// new GenerateAssetPlugin({
// filename: 'serverconfig.json',
// fn: (compilation, cb) => {
// cb(null, createServerConfig(compilation));
// },
// extraFiles: []
// })
// )
module.exports = webpackConfig
\ No newline at end of file \ No newline at end of file
{"name":"xlsx_library","content":{"../node_modules/webpack/buildin/global.js":{"id":0,"meta":{}},"../node_modules/buffer/index.js":{"id":1,"meta":{}},"../node_modules/xlsx/dist/cpexcel.js":{"id":2,"meta":{}},"../node_modules/xlsx/xlsx.js":{"id":5,"meta":{}},"../node_modules/base64-js/index.js":{"id":6,"meta":{}},"../node_modules/ieee754/index.js":{"id":7,"meta":{}},"../node_modules/isarray/index.js":{"id":8,"meta":{}},"../node_modules/process/browser.js":{"id":9,"meta":{}},"../node_modules/xlsx/jszip.js":{"id":10,"meta":{}},"../node_modules/webpack/buildin/amd-options.js":{"id":11,"meta":{}}}}
\ No newline at end of file \ No newline at end of file
'use strict'
const merge = require('webpack-merge')
const prodEnv = require('./prod.env')
module.exports = merge(prodEnv, {
NODE_ENV: '"development"'
})
'use strict'
// Template version: 1.2.8
// see http://vuejs-templates.github.io/webpack for documentation.
const path = require('path')
module.exports = {
dev: {
// Paths
assetsSubDirectory: 'static',
assetsPublicPath: '/',
proxyTable: {},
useLocalIp: true,
// Various Dev Server settings
host: '0.0.0.0', // can be overwritten by process.env.HOST
port: 8999, // can be overwritten by process.env.PORT, if port is in use, a free one will be determined
autoOpenBrowser: true,
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'),
xincheng: path.resolve(__dirname, '../dist/xincheng.html'),
// Paths
assetsRoot: path.resolve(__dirname, '../dist'),
assetsSubDirectory: 'static',
assetsPublicPath: './',
/**
* Source Maps
*/
productionSourceMap: false,
// https://webpack.js.org/configuration/devtool/#production
devtool: '#source-map',
// Gzip off by default as many popular static hosts such as
// Surge or Netlify already gzip all static assets for you.
// Before setting to `true`, make sure to:
// npm install --save-dev compression-webpack-plugin
productionGzip: true,
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
}
}
\ No newline at end of file \ No newline at end of file
'use strict'
module.exports = {
NODE_ENV: '"production"'
}
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta http-equiv="Pragma" content="no-cache">
<meta http-equiv="Cache-Control" content="no-cache, must-revalidate">
<meta http-equiv="Expires" content="0">
<link rel="shortcut icon" href="./static/img/favicon.ico" type="image/x-icon" />
<style type="text/css">
html,
body {
width: 100%;
height: 100%;
font-size: 100%;
}
body {
background: #f0f3f9;
}
</style>
<!-- <script>
var _hmt = _hmt || [];
(function() {
var host = window.location.host || 'store.keliuyun.com'
var hm = document.createElement("script");
if (/^store.*/.test(host)) {
hm.src = /^store.*/.test(host) ?
"https://hm.baidu.com/hm.js?313a8a08b743caaeec321c891b5172df" :
"https://hm.baidu.com/hm.js?801fd373e0924a6b18bd747218134480"
}
var s = document.getElementsByTagName("script")[0];
s.parentNode.insertBefore(hm, s);
_hmt.push(['_requirePlugin', 'UrlChangeTracker', {
shouldTrackUrlChange: function(newPath, oldPath) {
return newPath && oldPath;
}
}])
})();
</script> -->
<script>
!(function() {
var randomH = Date.parse(new Date()) / 1000;
document.write("<script type='text/javascript' src='./static/js/config.js?s=" + randomH + "' charset='utf-8'><\/script>");
})()
</script>
</head>
<body>
<div id="app"></div>
<!-- built files will be auto injected -->
<script type='text/javascript' src='./static/js/zrender.min.js' charset='utf-8'></script>
<script src="./static/js/rem.js" type="text/javascript" charset="utf-8"></script>
<script type='text/javascript' src='./static/js/dateUnit.js' charset='utf-8'></script>
<script type='text/javascript' src='./static/js/xlsx.dll.js' charset='utf-8'></script>
<script>
// else{
// if(window.localStorage.getItem('lang') == 'zh_TW'){
// document.getElementsByTagName('title')[0].innerText = '智慧連鎖客流分析平台';
// }else if(window.localStorage.getItem('lang') == 'en_US'){
// document.getElementsByTagName('title')[0].innerText = 'Smart Chain Traffic Analysis Platform';
// }
// }
// if(window.devicePixelRatio){
// var size = 1/window.devicePixelRatio;
// document.body.style.zoom = size
// }
</script>
<!-- [if gte IE 9]>
<script src="./static/js/jquery.xdomainrequest.min.js"></script>
<![endif]-->
</body>
<script>
// var host = window.location.host;
// if(host == 'mall.keliuyun.com'){
// document.write("<script type='text/javascript' src='./static/js/mallMonitor.js' charset='utf-8'><\/script>");
// }else if(host == 'store.keliuyun.com'){
// document.write("<script type='text/javascript' src='./static/js/storeMonitor.js' charset='utf-8'><\/script>");
// }
</script>
<!-- <script src="https://api.map.baidu.com/api?v=2.0&ak=7eRXXHqcpdDuvgcqwWFyBGw5U7c5Iz6i" type="text/javascript" charset="utf-8"></script> -->
</html>
\ No newline at end of file \ No newline at end of file
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>监控</title>
<link rel="stylesheet" href="./static/monitor/css/common.css">
<script src="./static/monitor/js/jquery-3.1.0.min.js"></script>
<script src="./static/monitor/js/colorpicker.js"></script>
<script src="./static/monitor/js/js.cookie.js"></script>
<script src="./static/monitor/js/login.js"></script>
<script>
var randomH = Date.parse(new Date()) / 1000;
document.write("<script type='text/javascript' src='./static/js/config.js?s=" + randomH + "' charset='utf-8'><\/script>");
</script>
</head>
<body>
<div class="control-wrapper">
<div class="control-right">
<!-- <span id="colorPickerBtn" class="color-picker-btn"></span> -->
<div id="color-picker" class="cp-default">
<div class="picker-wrapper">
<div id="picker" class="picker"></div>
<div id="picker-indicator" class="picker-indicator"></div>
</div>
<div class="slide-wrapper">
<div id="slide" class="slide"></div>
<div id="slide-indicator" class="slide-indicator"></div>
</div>
</div>
<select class="refresh-selector" id="refreshTime">
<option value="30">30s</option>
<option value="60">60s</option>
<option value="90">90s</option>
</select>
<select class="refresh-selector" id="colorType">
<option value="background">背景颜色</option>
<option value="font">字体颜色</option>
</select>
<span id="colorPickerBtn" class="color-picker-btn"></span>
<span class="size-decrease" id="decrease">A-</span>
<span class="size-number" id="sizeNum">30</span>
<span class="size-inscrease" id="inscrease">A+</span>
</div>
</div>
<div class="main-wrapper">
</div>
<script src="./static/monitor/js/common.js"></script>
</body>
</html>
\ No newline at end of file \ No newline at end of file
## 平台上线
### store.keliuyun.com
method: XShell
remote: 47.94.47.137
username: root
password: Vion-tech
### mall.keliuyun.com
method: mstsc
remote: 47.94.54.89
username: root
password: Vion-tech
### 吾悦
method: mstsc
remote: 47.94.54.89
username: administrator
password: Vion-tech
### 菏泽万达
method: teamViewer
remote: 1061533065
password: vion-tech
platform username and password: wanda vion123!
vion 123456
### 华为
method: mstsc
remote: 59.110.235.201
username: administrator
password: Vion-tech
### store
method: XShell/WinScp
remote: 47.94.47.137
username: root
password: Vion-tech
### 新城吾悦
method: 堡垒机
remote: https://sslvpn.xincheng.com
username: chenjianming
password: vion1234!
\ No newline at end of file \ No newline at end of file
This diff could not be displayed because it is too large.
{
"name": "project",
"version": "1.0.0",
"description": "A Vue.js project",
"author": "xiaxinran",
"private": true,
"scripts": {
"dev": "webpack-dev-server --inline --useLocalIp --config build/webpack.dev.conf.js",
"start": "npm run dev",
"build": "node build/build.js",
"analyz": "NODE_ENV=production npm_config_report=true npm run build",
"dll": "webpack --config build/webpack.dll.config.js"
},
"dependencies": {
"@riophae/vue-treeselect": "^0.2.0",
"@sentry/browser": "^5.15.5",
"@sentry/integrations": "^5.15.5",
"axios": "^0.17.1",
"copy-webpack-plugin": "^4.5.2",
"echarts": "^4.0.4",
"echarts-extension-amap": "^1.0.0-rc.4",
"echarts-liquidfill": "^2.0.6",
"element-ui": "^2.15.7",
"es6-promise": "^4.2.4",
"ezuikit-js": "^0.5.2",
"fabric": "^4.5.1",
"html2canvas": "^1.3.2",
"jquery-form": "^4.2.2",
"jspdf": "^2.4.0",
"moment": "^2.29.2",
"normalize-wheel": "^1.0.1",
"qrcodejs2": "0.0.2",
"resize-observer-polyfill": "^1.5.0",
"underscore": "^1.8.3",
"video.js": "^7.18.1",
"videojs-contrib-hls": "^5.15.0",
"view-design": "^4.5.0-beta.3",
"vue": "^2.6.11",
"vue-baidu-map": "^0.21.11",
"vue-i18n": "^7.4.2",
"vue-router": "^3.0.1",
"vue-upload-component": "^2.8.19",
"vuedraggable": "^2.24.3",
"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.4",
"babel-plugin-import": "^1.6.3",
"babel-plugin-syntax-jsx": "^6.18.0",
"babel-plugin-transform-runtime": "^6.22.0",
"babel-plugin-transform-vue-jsx": "^3.7.0",
"babel-polyfill": "^6.26.0",
"babel-preset-env": "^1.6.1",
"babel-preset-stage-2": "^6.22.0",
"blueimp-md5": "^2.16.0",
"chalk": "^2.0.1",
"compression-webpack-plugin": "^1.1.12",
"css-loader": "^0.28.0",
"css-split-webpack-plugin": "^0.2.6",
"express": "^4.16.4",
"extract-text-webpack-plugin": "^3.0.0",
"file-loader": "^1.1.4",
"file-saver": "^1.3.8",
"friendly-errors-webpack-plugin": "^1.6.1",
"generate-asset-webpack-plugin": "^0.3.0",
"heatmap.js": "^2.0.5",
"html-webpack-plugin": "^2.30.1",
"i18n-webpack-plugin": "^1.0.0",
"inline-svg": "^2.2.3",
"jquery": "^3.1.0",
"js-cookie": "^2.2.0",
"less": "^3.0.4",
"less-loader": "^4.1.0",
"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",
"semver": "^5.3.0",
"shelljs": "^0.7.6",
"svg-pan-zoom": "^3.6.0",
"uglifyjs-webpack-plugin": "^1.1.1",
"url-loader": "^0.5.8",
"vue-lazyload": "^1.2.6",
"vue-loader": "^13.7.1",
"vue-simple-svg": "^1.3.2",
"vue-style-loader": "^3.0.1",
"vue-svgicon": "^3.2.2",
"vue-template-compiler": "^2.6.11",
"webpack": "^3.12.0",
"webpack-bundle-analyzer": "^2.13.1",
"webpack-cli": "^4.9.1",
"webpack-dev-server": "^2.11.5",
"webpack-merge": "^4.1.0",
"xlsx": "^0.13.0"
},
"engines": {
"node": ">= 6.0.0",
"npm": ">= 3.0.0"
},
"browserslist": [
"> 1%",
"last 2 versions",
"not ie <= 8"
]
}
<template>
<div id="app" style="width:100%;height:100%">
<router-view v-if="isRouterAlive"></router-view>
</div>
</template>
<script>
export default {
data() {
return {
isRouterAlive: true
}
},
provide() {
return {
reload: this.reload
}
},
methods: {
reload() {
this.isRouterAlive = false;
this.$nextTick(() => {
this.isRouterAlive = true;
})
}
},
created() {
// if (!window.localStorage.getItem('selectTab')) {
// window.localStorage.setItem('selectTab', 'home')
// }
let webV = localStorage.getItem('webVersion');
if (webV && webV !== 'undefined') {
if (window._vionConfig.webVersion != webV) {
localStorage.setItem('webVersion', window._vionConfig.webVersion);
this.removeStorge();
this.$router.push('/');
} else {
}
} else {
if (window._vionConfig.webVersion) {
localStorage.setItem('webVersion', window._vionConfig.webVersion);
}
}
},
mounted() {
let langObj = ['zh_CN', 'en_US', 'zh_TW']
//if (this.$Project === 'store') {
let _lang = localStorage.getItem('lang') || window.navigator.language;
if (langObj.includes(_lang)) {
_lang = _lang == 'mall_CN' ? 'zh_CN' : _lang;
} else {
if(_lang=='zh-TW'){
_lang='zh_TW'
}else if(_lang=='zh-CN'){
_lang='zh_CN'
}else{
_lang='en_US'
}
}
localStorage.setItem('lang', _lang)
// } else {
// let _lang = 'mall_CN';
// localStorage.setItem('lang', _lang)
// }
}
}
</script>
<style>
::-webkit-scrollbar-thumb{
background-color:#ccc;
height:50px;
outline-offset:-2px;
outline:2px solid #fff;
-webkit-border-radius:4px;
border: 2px solid #fff;
}
/*---鼠标点击滚动条显示样式--*/
::-webkit-scrollbar-thumb:hover{
background-color:#ccc;
height:50px;
-webkit-border-radius:4px;
}
/*---滚动条大小--*/
::-webkit-scrollbar{
width:10px !important;
height:10px !important;
}
/*---滚动框背景样式--*/
::-webkit-scrollbar-track-piece{
background-color:#fff;
-webkit-border-radius:0;
}
</style>
import req from '@/api/http.js'
// analysisReport 是定义综合分析报表的接口
const analysisReport = {
/**
* 基础分析报表
*/
baseAnalysis(analysisLevel, params, config) {
return req('get', `/report/basics/${analysisLevel}`, params, config)
},
/**
* 日期对比报表
*/
dateComparedAnalysis(analysisLevel, params, config) {
return req('get', `/report/dateCompared/${analysisLevel}`, params, config)
},
/**
* 综合分析报表
*/
synthesizeAnalysis(analysisLevel, params, config) {
return req('get', `/report/synthesize/${analysisLevel}`, params, config)
},
/**
* 活动报表
*/
holidayObjectAnalysis(analysisLevel, params, config) {
return req('get', `/report/holidayObject/${analysisLevel}`, params, config)
},
/**
* 节假日活动报表
*/
holidayEventAnalysis(analysisLevel, params, config) {
return req('get', `/report/holidayeEvent/${analysisLevel}`, params, config)
},
/**
* 进出客流报表
*/
trafficInAndOutAnalysis(analysisLevel, params, config) {
return req('get', `/report/trafficInAndOut/${analysisLevel}`, params, config)
},
/**
* 主力店报表
*/
mainZoneYOAnalysis(params, config) {
return req('get', '/report/mainZoneYOAnalysis/zone', params, config)
},
/**
* 排行榜报表
*/
rankingAnalysis(analysisLevel, params, config) {
return req('get', `/report/ranking/${analysisLevel}`, params, config)
},
/**
* 坪效排行榜报表
*/
kpiRankingAnalysis(analysisLevel, params, config) {
return req('get', `/report/ranking/areaEffect/${analysisLevel}`, params, config)
},
/**
* 同环比报表
*/
yoyOrMomAnalysis(analysisLevel, params, config) {
return req('get', `/report/yoyOrMom/${analysisLevel}`, params, config)
},
/**
* 进店率报表
*/
enteringRateAnalysis(analysisLevel, params, config) {
return req('get', `/report/enteringRate/${analysisLevel}`, params, config)
},
/**
* 时间对比报表
*/
timeCompareAnalysis(analysisLevel, params, config) {
return req('get', `/report/timeCompareAnalysis/${analysisLevel}`, params, config)
},
/**
* 时段客流报表
*/
thermodynamicAnalysis(analysisLevel, params, config) {
return req('get', `/report/thermodynamic/${analysisLevel}`, params, config)
},
/**
* 天气分析报表
*/
weatherAnalysis(analysisLevel, params, config) {
return req('get', `/report/weather/${analysisLevel}`, params, config)
},
/**
* 周中周末对比报表
*/
weekComparedAnalysis(analysisLevel, params, config) {
return req('get', `/report/weekCompared/${analysisLevel}`, params, config)
},
/**
* 获取活动对象
*/
events(params, config) {
return req('get', '/events/getEvent', params, config)
},
/**
* 获取监控点热力数据
*/
heatmapTraffic(params, config) {
return req('get', '/report/heatmapTraffic/mall', params, config)
},
/**
* 返店分析报表
*/
returnshopReport(params, config) {
return req('get', '/returnMallAnalysis/mall', params, config)
},
/**
* 循环获取报表
*/
getMultipleReport(url, params, config) {
return req('get', url, params, config)
},
/**
* 集团区域客流
*/
blocAreaTrafficReport(params, config) {
return req('get', '/report/region/account', params, config)
},
/**
* 多次到店顾客
*/
historyArrival(params) {
return req('get', window._vionConfig.repeatInStoreUrl + '/api/v1/face/historyArrival', params)
},
// 滞留时间统计
residenceTime(analysisLevel, params) {
return req('get', `/residenceTime/${analysisLevel}`, params)
},
retentionInAndOut(analysisLevel,params) {
return req('get', `/report/retentionInAndOut/${analysisLevel}`, params)
},
retentionFishEye(params) {
return req('get', '/report/retentionFishEye/mall', params)
},
// 获取拼接热力
getZoneHeatMap(params) {
return req('get', '/report/zoneHeatmap/mall', params)
},
// 店铺获取关联
getzoneAssociation(params) {
return req('get', '/report/zoneAssociation/mall', params)
},
// 业态获取关联
getformatAssociation(params) {
return req('get', '/report/formatAssociation/mall', params)
},
getThred(params) {
console.log("🚀 ~ file: analysis.js ~ line 156 ~ getThred ~ params", params)
return req('get', '/analysis/trend', params)
},
getCustiom(params) {
return req('get', '/analysis/trend', params)
},
getstoreCapacity(params) {
return req('get', '/analysis/storeCapacityAnalysis', params)
},
getstoreCapacityPercentage(params) {
return req('get', '/analysis/storeCapacityPercentage', params)
},
getZoneInfo(params) {
return req('get', '/report/zoneAssociation/zone/info', params)
},
getSourceList(params) {
return req('get', '/report/zoneAssociation/zone/source', params)
},
getTargetList(params) {
return req('get', '/report/zoneAssociation/zone/target', params)
},
// 货架统计
getZoneStatistics(params) {
return req('POST', '/heatMap/zoneStatistics', params)
},
getBoothList(params) {
return req('get', '/booth/list', params)
},
// 获取人员id列表
getPersonList(params){
return req('POST', '/heatMap/personList', params)
},
// 获取人员轨迹数据
getPersonTrackDetail(params){
return req('POST', '/heatMap/getPersonTrack', params)
},
// 获取客流统计报表
getPassengerFlowStatistics(params){
return req('GET', '/basePassengerFlow/passengerFlow', params)
},
getPassengerFlowMultiMallStatistics(params){
return req('GET', '/multiMall/passengerFlow', params)
},
// 获取停留时长统计报表
getResidenceTimeStatistics(params){
return req('GET', '/basePassengerFlow/residenceTime', params)
},
// 获取顾客属性统计报表
getCustomerAgeStatistics(params){
return req('GET', '/basePassengerFlow/customerAge', params)
},
getCustomerGenderStatistics(params){
return req('GET', '/basePassengerFlow/customerGender', params)
},
getGroupPassengerFlowStatistics(params){
return req('GET', '/basePassengerFlow/group', params)
},
getGroupPassengerFlowStatisticsTree(params){
return req('GET', '/basePassengerFlow/group/tree', params)
},
getIndexMalls(params){
return req('GET', '/report/YoYOrMoM/malls', params)
},
}
export default analysisReport;
import req from '@/api/http.js'
import { config } from 'shelljs'
// base.js 定义基本的接口 account mall floor zone gate channel
const base = {
/**
* login
*/
login(params, config) {
return req('post', '/users/login', params, config)
},
loginByToken(params, config) {
return req('get', '/users/login/token', params, config)
},
/**
* accounts
*/
account(params, config) {
// if(!params.sortName) {
// params.sortName = "account.name";
// }
return req('get', '/accounts', params, config)
},
/**
* malls
*/
mall(params, config, switchStatus) {
if (!switchStatus) {
params.status = 1
}
// if (!params.sortName) {
// params.sortName = "mall.name";
// }
return req('get', '/malls', params, config)
},
/**
* floors
*/
floor(params, config, switchStatus) {
if (!switchStatus) {
params.status = 1
}
if (!params.sortName) {
params.sortName = "floor.name";
}
return req('get', '/floors', params, config)
},
/**
* single floors
*/
singleFloor(floorId, params, config) {
return req('get', `/floors/${floorId}`, params, config)
},
/**
* floor picture mark
*/
markFloorImage(params, config) {
return req('post', '/floors/svgUpdate', params, config)
},
/**
* zones
*/
zone(params, config, switchStatus) {
if (!switchStatus) {
params.status = 1
}
if (!params.sortName) {
params.sortName = "zone.name";
}
return req('get', '/zones', params, config)
},
zone1(params, config) {
return req('get', '/zones', params, config)
},
widthzone(params, config) {
return req('get', '/groups/withZone', params, config)
},
singleZone(zoneId, params, config) {
return req('get', `/zones/${zoneId}`, params, config)
},
/**
* gates
*/
gate(params, config, switchStatus) {
if (!switchStatus) {
params.status = 1;
}
if (!params.sortName) {
params.sortName = "gate.name";
}
return req('get', '/gates', params, config)
},
singleGate(gateId, params, config) {
return req('get', `/gates/${gateId}`, params, config)
},
getOtherGate(params, config) {
return req('get', `/gates`, params, config)
},
/**
* floorGates
*/
floorGate(params, config) {
return req('get', '/floorGates', params, config)
},
/**
* zoneGates
*/
zoneGate(params, config) {
return req('get', '/zoneGates', params, config)
},
/**
* channels
*/
channel(params, config) {
return req('get', '/channels', params, config)
},
newChannel(params, config) {
return req('get', '/b-gate/channels', params, config)
},
/**
* single channel
*/
singleChannel(channelId, params, config) {
return req('get', `/channels/${channelId}`, params, config)
},
/**
* format
*/
// format(params, config) {
// return req('get', '/formats', params, config)
// },
/**
* citys
*/
city(params, config) {
return req('get', '/citys', params, config)
},
country(params, config) {
return req('get', '/citys/countries', params, config)
},
/**
* provinces
*/
province(params, config) {
return req('get', '/provinces', params, config)
},
/**
* dataDics
*/
dataDic(params, config) {
return req('get', '/dataDics', params, config)
},
/**
* 获取集团商场楼层店铺
*/
bases(url, params, config) {
return req('get', url, params, config)
},
video(params, config) {
return req('get', '/deviceMappings/shilian/devices', params, config)
},
//formattree
format(accoutId, params, config, ) {
return req('get', '/formats/tree' + (accoutId ? '/' + accoutId : ''), params, config)
},
//formatlist
formatlist(params, config, ) {
return req('get', '/formats', params, config)
},
types(params, config) {
return req('get', '/dataDics', params, config)
},
/**
* 解绑微信
*/
unBindWx(unid, params, config) {
return req('delete', `/message/api/v1/wechat/unbind/${unid}`, params, config)
},
// 获取设备二维码
getCode(action, sn, params, config) {
return req('get', `/devices/hsk/${action}/${sn}`, params, config)
},
// 获取聚类进度
getJulei(params, config) {
return req('get', `/mallDayResidenceCountDatas`, params, config)
},
// reid完成进度
reidJd(params, config) {
return req('get', '/logs/selectByCondition', params, config)
},
// 获取拾联历史视频
getSlVideo(channelSerial, params, config) {
return req('get', `/deviceMappings/shilian/channel/playback/${channelSerial}`, params, config)
},
//获取楼层所有店铺
getFloorZone(floorid, params) {
return req('get', `/report/floorAnalysis/floor/${floorid}`, params)
},
//获取店铺信息
getZoneInfo(zoneid, params) {
return req('get', `/report/floorAnalysis/zone/${zoneid}`, params)
},
getSystemInfo() {
return req('get', `/service`)
},
getSystemServiceInfo(servename, params) {
return req('get', `/service/single/${servename}`, params)
},
// 获取mall开业时间
getOpentimeList( params) {
return req('get', `/b-mall-opentime/list`, params)
},
}
export default base;
\ No newline at end of file \ No newline at end of file
import req from '@/api/http.js'
// baseReport 是定义基础报表的接口
const baseReport = {
/**
* 集团取报表 key id
* @param {Object} params
* @param {Object} config
*/
reportChart(params, config) {
return req('get', '/reportCharts', params, config)
},
/**
* 集团单个报表
* @param {String} reportType
* @param {Number} chartId
* @param {Object} params
* @param {Object} config
*/
reportAccSingleChart(reportType, chartId, params, config) {
return req('get', `/report/${reportType}/account/${chartId}`, params, config)
},
/**
* 集团报表
* @param {String} reportType
* @param {Object} params
* @param {Object} config
*/
accountReport(reportType, params, config) {
return req('get', `/report/${reportType}/account`, params, config)
},
/**
* 商场报表
* @param {String} reportType
* @param {Object} params
* @param {Object} config
*/
mallReport(reportType, params, config) {
return req('get', `/report/${reportType}/mall`, params, config)
},
/**
* 月份里客流最高位和最低位
*/
mallReportMaxMin(reportType, params, config) {
return req('get', `mallDayCountDatas/threshold/${reportType}`, params, config)
},
/**
* 商场单个报表
* @param {String} reportType
* @param {Number} chartId
* @param {Object} params
* @param {Object} config
*/
reportMallSingleChart(reportType, chartId, params, config) {
return req('get', `/report/${reportType}/mall/${chartId}`, params, config)
},
/**
* 楼层报表
* @param {String} reportType
* @param {Object} params
* @param {Object} config
*/
floorReport(reportType, params, config) {
return req('get', `/report/${reportType}/floor`, params, config)
},
/**
* 楼层单个报表
* @param {String} reportType
* @param {Number} chartId
* @param {Object} params
* @param {Object} config
*/
reportFloorSingleChart(reportType, chartId, params, config) {
return req('get', `/report/${reportType}/floor/${chartId}`, params, config)
},
/**
* 店铺报表
* @param {String} reportType
* @param {Object} params
* @param {Object} config
*/
zoneReport(reportType, params, config) {
return req('get', `/report/${reportType}/zone`, params, config)
},
/**
* 店铺单个报表
* @param {String} reportType
* @param {Number} chartId
* @param {Object} params
* @param {Object} config
*/
reportZoneSingleChart(reportType, chartId, params, config) {
return req('get', `/report/${reportType}/zone/${chartId}`, params, config)
},
// 获取集团头部信息
accountReportHead(reportType, params, config) {
return req('get', `/report/${reportType}/account/head`, params, config)
},
// 获取集团报表 body
accountReportBody(reportType, params, config) {
return req('get', `/report/${reportType}/account/body`, params, config)
},
/**
* 店铺漏斗报表
* @param {String} reportType
* @param {Number} chartId
* @param {Object} params
* @param {Object} config
*/
reportZoneFunnelChart(reportType, params, config) {
return req('get', `/report/${reportType}/zone/trafficFunnel`, params, config)
},
/**
* 店铺关联报表
*/
zoneAssociatedReport(params, config) {
return req('get', `/report/day/zone/sankey`, params, config)
}
}
export default baseReport;
\ No newline at end of file \ No newline at end of file
import req from '@/api/http.js'
// 今日实况大屏接口
const bigScreen = {
/**
* 出入口客流top5
*/
getGatePassengerFlowTop5(params) {
return req('get', `/live/getGatePassengerFlowTop5`, params)
},
/**
* 店铺客流top10
*/
getZonePassengerFlowTop10(params) {
return req('get', `/live/getZonePassengerFlowTop10`, params)
},
/**
* 楼层客流
*/
getFloorPassengerFlow(params) {
return req('get', `/live/getFloorPassengerFlow`, params)
},
/**
* 业态客流
*/
getFormatPassengerFlow(params) {
return req('get', `/live/getFormatPassengerFlow`, params)
},
/**
* 广场客流柱状图
*/
getMallPassengerFlowChart(params) {
return req('get', `/live/getMallPassengerFlowChart`, params)
},
/**
* 实况信息
*/
getLiveInfo(params) {
return req('get', `/live/getLiveInfo`, params)
},
/**
* 设备信息
*/
getDeviceInfo(params) {
return req('get', `/live/getDeviceInfo`, params)
},
/**
* 广场客流信息
*/
getMallPassengerFlowInfo(params) {
return req('get', `/live/getMallPassengerFlowInfo`, params)
},
}
export default bigScreen;
\ No newline at end of file \ No newline at end of file
import req from '@/api/http.js'
const businessAnalysisApi = {
getPassengerFlow( params, config) {
return req('get', `/competitive/mall/passengerFlow`, params, config)
},
getMalls( params, config) {
return req('get', `/b-mall-secret/malls`, params, config)
},
getCostAnalysis( params, config) {
return req('get', `/report/account/cost/analysis`, params, config)
},
getCustomerExperience( params, config) {
return req('get', `/report/account/customer/experience`, params, config)
},
getEarlyWarning( params, config) {
return req('get', `/report/account/management/early-warning`, params, config)
},
}
export default businessAnalysisApi;
\ No newline at end of file \ No newline at end of file
import req from '@/api/http.js'
// analysisReport 是定义顾客行为报表的接口
const customerReport = {
/**
* 区域热力报表
*/
zoneHotMapReport(params, config) {
return req('get', '/heatmap/zoneHotmap/mall', params, config)
},
/**
* 顾客轨迹动线
*/
movingLineReport(personUnid, params, config) {
return req('get', `/report/movingLine/customerLine/${personUnid}`, params, config)
},
/**
* 客流动线
*/
flowMovingLineReport(params, config) {
return req('get', '/report/movingLine/floor', params, config)
},
/**
* 客流方向
*/
faceMavingLineReport(params, config) {
return req('get', '/report/movingLine/faceMavingLines', params, config)
},
/**
* 单楼层
*/
moveLineSimpleFloor(params, config) {
return req('get', '/report/movingLine/floorMovingLine', params, config)
},
/**
* 多楼层
*/
moveLineMultipleFloor(params, config) {
return req('get', '/report/movingLine/floorMovingLines', params, config)
},
/**
* facepage
*/
facePageReport(params, config) {
return req('get', '/faceRecognitions/report/facePage/gate', params, config)
},
/**
* 展台热力
*/
trackHeatmapReport(channelId, params, config) {
return req('get', `/heatmap/trackHeatmap/${channelId}`, params, config)
},
/**
* 楼层热力
*/
floorHeatmapReport(floorId, params, config) {
return req('get', `/heatmap/floorHeatmap/${floorId}`, params, config)
},
/**
* 开心指数
*/
happyIndexReport(analysisLevel, params, config) {
return req('get', `/report/happyIndex/${analysisLevel}`, params, config)
},
/**
* 店内热力
*/
inStoreHeatReport(params, config) {
return req('get', '/heatmapDataRaws', params, config)
},
newinStoreHeatReport(params, config) {
return req('post', '/heatMap/get', params, config)
},
/**
* 滞留时间
*/
residenceReport(params, config) {
return req('get', `/report/residence/${params.level||'mall'}`, params, config)
},
/**
* 动线分析
*/
movingLineAnalysis(params, config) {
return req('get', '/report/movingLine/customerLines', params, config)
},
movingLineAnalysisStore(params, config) {
return req('get', '/track/trendStatistics', params, config)
},
movingRouteAnalysisStore(params, config) {
return req('get', '/track/routeAnalysis', params, config)
},
/**
* 通道抓拍 删除
*/
channelSnapshot(analysisLevel, orgId, params, config) {
return req('get', `/channelSnapshots/${analysisLevel}/${orgId}`, params, config)
},
/**
* 点位热力
*/
floorHeatmap(orgId, params, config) {
return req('get', `/heatmap/floor/${orgId}`, params, config)
},
trafficHeatmap(analysisLevel, orgId, params, config) {
return req('get', `/heatmap/${analysisLevel}/${orgId}`, params, config)
},
/**
* 点位热力
*/
heatmap(channelSerialnum, params, config) {
return req('get', `/heatmap/${channelSerialnum}`, params, config)
},
heatmapDataRaw(params, config) {
return req('get', '/heatmapDataRaws', params, config)
},
analysisSankey(params, config) {
return req('get', '/report/faceAnalyze/sankey', params, config)
}
}
export default customerReport;
\ No newline at end of file \ No newline at end of file
import req from '@/api/http.js'
// analysisReport 是定义顾客行为报表的接口
const flowReport = {
/**
* 特别抓拍记录列表
*/
uniqueCaptureRecord(params, config) {
return req('get', '/faceRecognitions/unique', params, config)
},
/**
* 抓拍记录列表
*/
captureRecord(params, config) {
return req('get', '/faceRecognitions', params, config)
},
/**
* 区域客流分时
*/
zoneCustomerTimeShare(params, config) {
return req('get', '/report/zoneCustomerTimeShare/zone', params, config)
},
/**
* 区域客群
*/
trafficAnalyze(params, config) {
return req('get', '/report/trafficAnalyze/zone', params, config)
},
/**
* 出入口/门店客群
*/
faceAnalyzeSta(analysisLevel, params, config) {
return req('get', `/report/faceAnalyzeSta/${analysisLevel}`, params, config)
},
/**
* 新老顾客
*/
mallDayFaceRecognitionStas(params, config) {
return req('get', '/mallDayFaceRecognitionStas', params, config)
},
newAndRegularAnalysis(analysisLevel, params, config) {
return req('get', `/newAndRegularAnalysis/${analysisLevel}`, params, config)
},
mallDayHistoryArriveCounts(analysisLevel, params) {
return req('get', `/mallDayHistoryArriveCounts/${analysisLevel}`, params)
},
/**
* 有效客流统计
*/
mallDayEffective(params, config) {
return req('get', `/mallDayFaceRecognitionStas/effective${params.level=='zone'?'/zone':''}`, params, config)
},
/**
* 区域客流
*/
faceDistribution(params, config) {
return req('get', '/report/faceDistribution/gate', params, config)
},
/**
* 客群分时
*/
faceCountAnalyzeSta(analysisLevel, params, config) {
return req('get', `/report/faceCountAnalyzeSta/${analysisLevel}`, params, config)
},
historyCapture(params, config) {
return req('get', '/faceRecognitions/history', params, config)
},
lossCustomer(params, config) {
return req('get', '/report/lossCustomer/mall', params, config)
},
//人员类型统计
analyzeList(params, config) {
return req('get', '/personType/analyze/list', params, config)
},
// 顾客店员趋势
customTrend(params, config) {
return req('get', '/d-mall-day-face-recognition-sta/trend', params, config)
},
customTrendHour(params, config) {
return req('get', '/d-mall-hour-face-recognition-sta/trend', params, config)
},
// 顾客店员趋势导出
customTrendExport(){
return req('get', '/d-mall-day-face-recognition-sta/trend/export', params, config)
}
}
export default flowReport;
\ No newline at end of file \ No newline at end of file
import axios from 'axios'
import qs from 'qs'
import * as Cookies from 'js-cookie'
import router from '@/router'
import Vue from 'vue'
import {
loading,
Message
} from 'element-ui'
import { param2 } from '@/utils'
import md5 from 'blueimp-md5'
// 创建 axios 的一个实例
const Axios = axios.create({
baseURL: window._vionConfig.apiUrl, // 因为我本地做了反向代理
timeout: 0,
// responseType: "json",
// changeOrigin: true,//允许跨域
withCredentials: true, // 是否允许带cookie这些
headers: {
"Content-Type": "application/json;charset=UTF-8"
// 'Content-Type': 'application/x-www-form-urlencoded'
}
})
window.axios = Axios;
var loadingStatus;
let store = {
source: {
token: null,
cancel: null
}
}
// 请求拦截器
Axios.interceptors.request.use(
config => {
const suffix = '4c413628731691abc99eb2fca5f69aab'
const { method, params, data, url } = config
let language = localStorage.getItem('lang'),
aToken = Cookies.get('atoken');
if (language) {
let languageObj = {
'mall_CN': 'zh-CN,zh;q=0.9',
'zh_CN': 'zh-CN,zh;q=0.9',
'en_US': 'en-US,en;q=0.5',
'zh_TW': 'zh-TW,zh;q=0.3',
// 'zh_ar': 'zh-AR,zh;q=0.9'
}
languageObj[language] && (config.headers['Accept-Language'] = languageObj[language]);
}
aToken && (config.headers.Authorization = aToken);
config.cancelToken = store.source.token
const signalStr = method.toUpperCase() +
(params ? param2(params) : '') +
(data ? JSON.stringify(data) : '') +
suffix + (config.headers.Authorization ? config.headers.Authorization : '');
const hashSignature = md5(signalStr)
config.headers['signature'] = hashSignature;
let pathList = router.app.$route.path.split('/');
let index = pathList.length - 1,
path = pathList[index];
let ignoreList = ['daily', 'weekly', 'monthly', 'yearly'];
if (ignoreList.includes(path)) {
path = pathList[index - 1];
}
if (pathList.length > 2) {
path = pathList[2];
}
if (!path && router.app.$route.name == 'login') {
path = 'login';
}
config.headers.path = path
return config;
}, error => {
Message({
showClose: true,
message: error,
type: 'error.data.error.message'
})
return Promise.reject(error.data.msg)
}
)
// 跳转路由打断请求
router.beforeEach((to, from, next) => {
if (!to.matched.some(item => item.path === from.fullPath)) {
let CancelToken = axios.CancelToken;
store.source.cancel && store.source.cancel();
store.source = CancelToken.source();
}
next()
})
// 响应拦截器
Axios.interceptors.response.use(
res => {
if (res.data && !res.data.success) {
if (res.data.ecode && res.data.ecode != 200) {
Vue.prototype.removeStorge();
let path = painter.$route.path;
router.push({
path: '/?path=' + path
})
Message({
showClose: true,
message: res.data.enote,
type: 'error'
})
return
} else {
// 非标准返回体
if (res.status == 200) {
return res;
}
}
if (res.data.code == 500) {
Message({
showClose: true,
message: res.data.msg,
type: 'error'
})
}
return Promise.reject(res.data.msg);
} else if (!res.data && res.status == 200) {
return res;
} else if (res.data.success && res.config.method != 'get') {
//
}
return res;
}
// , error => {
// return Promise.reject(error)
// }
)
export default function(method, url, data = null, config = null, bodyDelete) {
method = method.toLowerCase()
if (method == 'post') {
return Axios.post(url, data, config)
} else if (method == 'get') {
let defaultParam = {
_t: Date.parse(new Date()) / 1000
}
return Axios.get(url, { params: {...defaultParam, ...data }, config })
} else if (bodyDelete) {
return Axios.delete(url, { data: data }, config)
} else if (method == 'delete') {
return Axios.delete(url, { params: data }, config)
} else if (method == 'put') {
return Axios.put(url, data, config)
} else {
console.error('unknown method' + method)
return false
}
}
\ No newline at end of file \ No newline at end of file
import axios from 'axios'
import qs from 'qs'
import * as Cookies from 'js-cookie'
import router from '@/router'
import Vue from 'vue'
import {
loading,
Message
} from 'element-ui'
import { param2 } from '@/utils'
import md5 from 'blueimp-md5'
// 创建 axios 的一个实例
const Axios = axios.create({
baseURL: window._vionConfig.tourUrl, // 因为我本地做了反向代理
timeout: 0,
// responseType: "json",
// changeOrigin: true,//允许跨域
withCredentials: true, // 是否允许带cookie这些
headers: {
"Content-Type": "application/json;charset=UTF-8"
// 'Content-Type': 'application/x-www-form-urlencoded'
}
})
window.axios = Axios;
var loadingStatus;
let store = {
source: {
token: null,
cancel: null
}
}
// 请求拦截器
Axios.interceptors.request.use(
config => {
const suffix = '4c413628731691abc99eb2fca5f69aab'
const { method, params, data, url } = config
let language = localStorage.getItem('lang'),
aToken = Cookies.get('atoken');
if (language) {
let languageObj = {
'mall_CN': 'zh-CN,zh;q=0.9',
'zh_CN': 'zh-CN,zh;q=0.9',
'en_US': 'en-US,en;q=0.5',
'zh_TW': 'zh-TW,zh;q=0.3',
// 'zh_ar': 'zh-AR,zh;q=0.9'
}
languageObj[language] && (config.headers['Accept-Language'] = languageObj[language]);
}
aToken && (config.headers.Authorization = aToken);
config.cancelToken = store.source.token
const signalStr = method.toUpperCase() +
(params ? param2(params) : '') +
(data ? JSON.stringify(data) : '') +
suffix + (config.headers.Authorization ? config.headers.Authorization : '');
const hashSignature = md5(signalStr)
config.headers['signature'] = hashSignature
return config;
}, error => {
Message({
showClose: true,
message: error,
type: 'error.data.error.message'
})
return Promise.reject(error.data.msg)
}
)
// 跳转路由打断请求
router.beforeEach((to, from, next) => {
if (!to.matched.some(item => item.path === from.fullPath)) {
let CancelToken = axios.CancelToken;
store.source.cancel && store.source.cancel();
store.source = CancelToken.source();
}
next()
})
// 响应拦截器
Axios.interceptors.response.use(
res => {
if (res.data && !res.data.success) {
if (res.data.ecode && res.data.ecode != 200) {
Vue.prototype.removeStorge()
router.push({
path: '/'
})
Message({
showClose: true,
message: res.data.enote,
type: 'error'
})
return
} else {
// 非标准返回体
if (res.status == 200) {
return res;
}
}
if (res.data.code == 500) {
Message({
showClose: true,
message: res.data.msg,
type: 'error'
})
}
return Promise.reject(res.data.msg);
} else if (!res.data && res.status == 200) {
return res;
} else if (res.data.success && res.config.method != 'get') {
//
}
return res;
}
// , error => {
// return Promise.reject(error)
// }
)
export default function(method, url, data = null, config = null, bodyDelete) {
method = method.toLowerCase()
if (method == 'post') {
return Axios.post(url, data, config)
} else if (method == 'get') {
let defaultParam = {
_t: Date.parse(new Date()) / 1000
}
return Axios.get(url, { params: {...defaultParam, ...data }, config })
} else if (bodyDelete) {
return Axios.delete(url, { data: data }, config)
} else if (method == 'delete') {
return Axios.delete(url, { params: data }, config)
} else if (method == 'put') {
return Axios.put(url, data, config)
} else {
console.error('unknown method' + method)
return false
}
}
import axios from 'axios'
import qs from 'qs'
import * as Cookies from 'js-cookie'
import router from '@/router'
import Vue from 'vue'
import {
loading,
Message
} from 'element-ui'
import { param2 } from '@/utils'
import md5 from 'blueimp-md5'
// 创建 axios 的一个实例
const Axios = axios.create({
baseURL: window._vionConfig.queuingUrl, // 因为我本地做了反向代理
timeout: 0,
// responseType: "json",
// changeOrigin: true,//允许跨域
withCredentials: true, // 是否允许带cookie这些
headers: {
"Content-Type": "application/json;charset=UTF-8"
// 'Content-Type': 'application/x-www-form-urlencoded'
}
})
window.axios = Axios;
var loadingStatus;
let store = {
source: {
token: null,
cancel: null
}
}
// 请求拦截器
Axios.interceptors.request.use(
config => {
const suffix = '4c413628731691abc99eb2fca5f69aab'
const { method, params, data, url } = config
let language = localStorage.getItem('lang'),
aToken = Cookies.get('atoken');
if (language) {
let languageObj = {
'mall_CN': 'zh-CN,zh;q=0.9',
'zh_CN': 'zh-CN,zh;q=0.9',
'en_US': 'en-US,en;q=0.5',
'zh_TW': 'zh-TW,zh;q=0.3',
// 'zh_ar': 'zh-AR,zh;q=0.9'
}
languageObj[language] && (config.headers['Accept-Language'] = languageObj[language]);
}
aToken && (config.headers.Authorization = aToken);
config.cancelToken = store.source.token
const signalStr = method.toUpperCase() +
(params ? param2(params) : '') +
(data ? JSON.stringify(data) : '') +
suffix + (config.headers.Authorization ? config.headers.Authorization : '');
const hashSignature = md5(signalStr)
config.headers['signature'] = hashSignature
return config;
}, error => {
Message({
showClose: true,
message: error,
type: 'error.data.error.message'
})
return Promise.reject(error.data.msg)
}
)
// 跳转路由打断请求
router.beforeEach((to, from, next) => {
if (!to.matched.some(item => item.path === from.fullPath)) {
let CancelToken = axios.CancelToken;
store.source.cancel && store.source.cancel();
store.source = CancelToken.source();
}
next()
})
// 响应拦截器
Axios.interceptors.response.use(
res => {
if (res.data && !res.data.success) {
if (res.data.ecode && res.data.ecode != 200) {
Vue.prototype.removeStorge()
router.push({
path: '/'
})
Message({
showClose: true,
message: res.data.enote,
type: 'error'
})
return
} else {
// 非标准返回体
if (res.status == 200) {
return res;
}
}
if (res.data.code == 500) {
Message({
showClose: true,
message: res.data.msg,
type: 'error'
})
}
return Promise.reject(res.data.msg);
} else if (!res.data && res.status == 200) {
return res;
} else if (res.data.success && res.config.method != 'get') {
//
}
return res;
}
// , error => {
// return Promise.reject(error)
// }
)
export default function(method, url, data = null, config = null, bodyDelete) {
method = method.toLowerCase()
if (method == 'post') {
return Axios.post(url, data, config)
} else if (method == 'get') {
let defaultParam = {
_t: Date.parse(new Date()) / 1000
}
return Axios.get(url, { params: {...defaultParam, ...data }, config })
} else if (bodyDelete) {
return Axios.delete(url, { data: data }, config)
} else if (method == 'delete') {
return Axios.delete(url, { params: data }, config)
} else if (method == 'put') {
return Axios.put(url, data, config)
} else {
console.error('unknown method' + method)
return false
}
}
// api接口统一出口
// 基本接口
import base from '@/api/base.js'
// 首页基础报表
import baseReport from '@/api/baseReport.js'
// 客流统计报表
import analysisReport from '@/api/analysis.js'
// 顾客行为报表
import customerReport from '@/api/customer.js'
// 精准客流报表
import flowReport from '@/api/flowReport.js'
// 后台管理
import management from '@/api/backendManage.js'
// 新首页管理
import ipageReport from '@/api/ipage.js'
import login from '@/api/login.js'
// 大屏
import bigScreen from '@/api/bigScreen.js'
// other
// 视频巡店
import videoShopTourReport from '@/api/videoShopTour.js'
// 经营分析
import businessAnalysisApi from '@/api/businessAnalysisApi.js'
import queueManagementApi from '@/api/queueManagementApi.js'
export default {
base,
baseReport,
analysisReport,
customerReport,
flowReport,
ipageReport,
management,
login,
bigScreen,
videoShopTourReport,
businessAnalysisApi,
queueManagementApi
}
// usage demo
/* this.$http.baseReport.accDReport({
orgIds: this.$cookie.get('accountId'),
date: this.searchTime,
chartIds: this.chartIds,
_t: Date.parse(new Date()) / 1000
}).then(res => {
// doSomething...
}) */
import req from '@/api/http.js'
import _ from 'underscore';
// ipageReport 重新定义报表的接口
const ipageReport = {
/**
* 获取自定义列表
*/
getCharts(params, config) {
return req('get', `/reportChart/getCharts`, params, config)
},
/**
* 顶部卡片区域
*/
headReport(params, config) {
return req('get', `new/report/${params.dateType}/${params.orgType}/head`, params, config)
},
/**
* 图表内容区域
*/
bodyReport(params, config) {
params = _.pick(params, val => {
return String(val) != 'undefined' && String(val).length > 0;
})
return req('get', `new/report/${params.dateType}/${params.orgType}/body`, params, config)
},
predictReport(params, config) {
params = _.pick(params, val => {
return String(val) != 'undefined' && String(val).length > 0;
})
return req('get', `new/report/${params.dateType}/predict/mall/body`, params, config)
},
getAccountPassenger(params, config) {
return req('get', `/report/account/passenger`, params, config)
},
}
export default ipageReport;
\ No newline at end of file \ No newline at end of file
import req from '@/api/http.js'
// base.js 定义基本的接口 account mall floor zone gate channel
const login = {
/**
* login
*/
userLogin(params, config) {
return req('post', '/users/login', params, config)
},
loginVideo(params, config, body) {
console.log(body)
return req('post', 'http://video.keliuyun.com:18081/webapi/login', params, config, body)
},
videoUrl(atoken, params, config) {
return req('post', '/webapi/v4/preview/view?tk=' + atoken, params, config)
}
}
export default login
\ No newline at end of file \ No newline at end of file
import req from '@/api/httpqueueManagement.js'
const queueManagementApi = {
// 区域管理
getAreaList(params, config) {
return req('get', `/b-cashier-area/list`, params, config)
},
addArea(params, config) {
return req('POST', `/b-cashier-area`, params, config)
},
updateArea(params, config) {
return req('PUT', `/b-cashier-area/${params.id}`, params, config)
},
deleteArea(params, config) {
return req('DELETE', `/b-cashier-area/${params.id}`, params, config)
},
// 获取绑定的设备
getDevices(params, config) {
return req('GET', `/b-cashier-area/devices`, params, config)
},
bindDevices(params, config) {
return req('POST', `/b-cashier-area/bind`, params, config)
},
// 通道管理
getChannelList(params, config) {
return req('get', `/b-cashier-channel/list`, params, config)
},
addChannel(params, config) {
return req('POST', `/b-cashier-channel`, params, config)
},
updateChannel(params, config) {
return req('PUT', `/b-cashier-channel/${params.id}`, params, config)
},
deleteChannel(params, config) {
return req('DELETE', `/b-cashier-channel/${params.id}`, params, config)
},
// 相机位置标定
demarcateFun(params, config) {
return req('POST', `/b-cashier-area/demarcate`, params, config)
},
//排队实况
//统计数据和按通道统计排队情况
getStatistics(params, config) {
return req('get', `/queuing/statistics`, params, config)
},
//主页大屏人员点位分布
getdistribution(params, config) {
return req('get', `/queuing/distribution`, params, config)
},
//数据回放图表
getchart(params, config) {
return req('get', `/queuing/chart`, params, config)
},
// 基础客流
getCustomersOverview(params, config) {
return req('get', `/queuing/customers-overview/chart`, params, config)
},
// 快照预测
getSnapshotChart(params, config) {
return req('get', `/queuing/snapshot/chart`, params, config)
},
}
export default queueManagementApi;
\ No newline at end of file \ No newline at end of file
import req from '@/api/http.js'
const user = {
login: (data) => req('post', '/users/login', data),
// 获取应用 appid
getMenuApp: (param) => req('get', `${window._vionConfig.menuUrl}/api/v1/auth/apps`, param),
// 获取菜单节点
getMenuNode: (appId, param) => req('get', `${window._vionConfig.menuUrl}/api/v1/auth/apps/${appId}/menus`, param)
}
export default user;
\ No newline at end of file \ No newline at end of file
import req from '@/api/httpVideoTour.js'
// videoShopTourReport 是视频巡店的接口
const videoShopTourReport = {
//
getDeviceList(params) {
return req('GET', `/patrolDevice/list`, params)
},
addDevice(params,config) {
return req('POST', `/patrolDevice`, params, config)
},
editDevice(params,config) {
return req('PUT', `/patrolDevice/${params.id}`, params, config)
},
getPatrolDeviceChannelList(params) {
return req('GET', `/patrolDeviceChannel/list`, params)
},
editPatrolDeviceChannel(params,config) {
return req('PUT', `/patrolDeviceChannel/${params.id}`, params, config)
},
getLiveAddress(params,config) {
return req('GET', `/patrolDeviceChannel/getLiveAddress/${params.id}`, params, config)
},
getLiveInfo(params,config){
return req('GET', `/patrolDeviceChannel/getLiveInfo/${params.id}`, params, config)
},
getPatrolGateList(params,config) {
return req('GET', `/patrolGate/list`, params, config)
},
addPatrolGate(params,config) {
return req('POST', `/patrolGate`, params, config)
},
editPatrolGate(params,config) {
return req('PUT', `/patrolGate/${params.id}`, params, config)
},
delPatrolGate(id) {
return req('DELETE', `/patrolGate/${id}`)
},
// sop项目管理
getPatrolSopProject(params,config) {
return req('GET', `/patrolSopProject/list`, params, config)
},
addPatrolSopProject(params,config) {
return req('POST', `/patrolSopProject`, params, config)
},
editPatrolSopProject(params,config) {
return req('PUT', `/patrolSopProject/${params.id}`, params, config)
},
// sop类型管理
getPatrolSopType(params,config) {
return req('GET', `/patrolSopType/list`, params, config)
},
addPatrolSopType(params,config) {
return req('POST', `/patrolSopType`, params, config)
},
editPatrolSopType(params,config) {
return req('PUT', `/patrolSopType/${params.id}`, params, config)
},
// 关联sop树
getPatrolSopTypeTree(params,config) {
return req('GET', `/patrolSopType/tree`, params, config)
},
// 集团关联
associatePatrolSopType(params,config) {
return req('POST', `/patrolSopType/associate`, params, config)
},
// 获取监控点关联sop
getPatrolGateSopProjectList(params,config) {
return req('GET', `/patrolGateSopProject/list`, params, config)
},
// 监控点关联
associatePatrolSopProject(params,config) {
return req('POST', `/patrolGateSopProject/associate`, params, config)
},
//提交巡店记录
confirmPatrolRecord(params,config) {
return req('POST', `/patrolRecord`, params, config)
},
//巡店记录
getPatrolRecordList(params,config) {
return req('GET', `/patrolRecord/list`, params, config)
},
// 查看巡店详情
getPatrolRecordDetail(params,config) {
return req('GET', `/patrolRecord/${params.id}`)
},
// 删除巡店记录
deletePatrolRecord(params,config) {
return req('DELETE', `/patrolRecord/${params.id}`)
},
// 提交巡店操作记录
confirmPatrolRecordHandle(params,config) {
return req('POST', `/patrolRecord/handle`, params, config)
},
getUsers(params,config) {
return req('GET', `/s-user/mall/${params.mallId}`)
},
// 预设点管理
getPresetList(params, config){
return req('GET', `/patrol/device/preset/list`, params, config)
},
addPreset(params,config) {
return req('POST', `/patrol/device/preset`, params, config)
},
editPreset(params,config) {
return req('PUT', `/patrol/device/preset/${params.id}`, params, config)
},
delPreset(params,config) {
return req('DELETE', `/patrol/device/preset/${params.id}`, params, config)
},
// 云控制
ptzStart(params,config) {
return req('PUT', `/patrolDeviceChannel/ptzStart`, params, config)
},
ptzStop(params,config) {
return req('PUT', `/patrolDeviceChannel/ptzStop`, params, config)
},
// 待点检任务
getPatrolCaptureRecordList(params, config){
return req('GET', `/patrolCaptureRecord/list`, params, config)
},
delPatrolCaptureRecord(params, config){
return req('DELETE', `/patrolCaptureRecord/${params.id}`)
},
// 通过预设点调整位置
getPresetMove(params, config){
return req('PUT', `/patrolDevice/preset/move`, params, config)
},
// 定时抓怕配置
getRuleList(params, config){
return req('GET', `/b-patrol-rule/list`, params, config)
},
addRule(params,config) {
return req('POST', `/b-patrol-rule`, params, config)
},
editRule(params,config) {
return req('PUT', `/b-patrol-rule/${params.id}`, params, config)
},
delRule(params,config) {
return req('DELETE', `/b-patrol-rule/${params.id}`, params, config)
},
// 截图
getCapture(params,config) {
return req('GET', `/patrolDeviceChannel/capture/${params.id}`, params, config)
},
getBase64(params,config){
return req('GET', `/file`, params, config)
},
//获取监控点tree
getGateGroup(params,config) {
return req('GET', `/patrolGate/gateGroup`, params, config)
},
// 查询行业
getIndustryList(params,config) {
return req('GET', `/b-patrol-industry/list`, params, config)
},
// 查询门店树
filterGateGroup(params,config) {
return req('GET', `/patrolGate/gateGroup/filter`, params, config)
},
// 巡店报表
// 集团
accountReport(params,config){
return req('GET', `/report-form/account`, params, config)
},
// 门店
mallReport(params,config){
return req('GET', `/report-form/mall`, params, config)
},
// 检查项
checkItemReport(params,config){
return req('GET', `/report-form/sop-project`, params, config)
},
// 有问题门店
checkProblemItemReport(params,config){
return req('GET', `/report-form/sop-project/mall`, params, config)
},
}
export default videoShopTourReport;
.base-analysis {
width: 100%;
height: calc(100% - 148px)
}
/* 生成图片栏 */
.heatmap-img-div {
position: absolute;
top: 0;
left: 0;
bottom: 0;
right: 0;
}
.inside-bg-box {
margin: 0 auto;
}
.inside-bg-box:after,
.inside-bg-box:before {
content: '';
display: table;
}
.inside-bg-box:after {
clear: both;
}
.inside-bg-item {
float: left;
position: relative;
overflow: hidden;
margin-bottom: 10px;
}
/* .inside-bg-item:nth-child(2n) {
margin-left: 10px;
margin-right: 10px;
} */
.inside-bg-item+.inside-bg-item {
margin-left: 1%;
}
.inside-bg-item:nth-child(3n-2) {
margin-left: 0;
}
.area-img {
height: auto;
vertical-align: top;
width: 100%;
}
\ No newline at end of file \ No newline at end of file
No preview for this file type
No preview for this file type
No preview for this file type
No preview for this file type
html,
body,
ul,
li,
p,
h1,
h2,
h3,
h4,
h5,
h6 {
margin: 0;
padding: 0;
font-family: "Microsoft YaHei", "PingFang SC", "Lantinghei SC", "HanHei SC", "Helvetica Neue", "Open Sans", Arial, "Hiragino Sans GB", 微软雅黑, STHeiti, "WenQuanYi Micro Hei", SimSun, sans-serif;
}
body {
font-style: normal;
font-variant-ligatures: normal;
font-variant-caps: normal;
font-variant-numeric: normal;
font-variant-east-asian: normal;
font-weight: normal;
font-stretch: normal;
font-size: 14px;
}
ul li,
ol li,
dl li {
list-style: none;
}
a:link {
text-decoration: none;
/* 指正常的未被访问过的链接*/
}
a:visited {
text-decoration: none;
/*指已经访问过的链接*/
}
a:hover {
text-decoration: none;
/*指鼠标在链接*/
}
a:active {
text-decoration: none;
/* 指正在点的链接*/
}
input:-webkit-autofill,
textarea:-webkit-autofill,
select:-webkit-autofill {
background-color: rgb(255, 255, 255);
background-image: none;
color: rgb(0, 0, 0);
}
img {
border: none;
width: auto;
height: auto;
}
.qrcode-wrapper img {
width: 100% !important;
}
@font-face {
font-family: 'Nunito Sans';
font-style: normal;
font-weight: 300;
src: local('Nunito Sans Light'), local('NunitoSans-Light'), url(https://fonts.gstatic.com/s/nunitosans/v3/pe03MImSLYBIv1o4X1M8cc8WAc5tU1Q.ttf) format('truetype')
}
@font-face {
font-family: 'Nunito Sans';
font-style: normal;
font-weight: 400;
src: local('Nunito Sans Regular'), local('NunitoSans-Regular'), url(https://fonts.gstatic.com/s/nunitosans/v3/pe0qMImSLYBIv1o4X1M8cce9I94.ttf) format('truetype')
}
@font-face {
font-family: 'Nunito Sans';
font-style: normal;
font-weight: 600;
src: local('Nunito Sans SemiBold'), local('NunitoSans-SemiBold'), url(https://fonts.gstatic.com/s/nunitosans/v3/pe03MImSLYBIv1o4X1M8cc9iB85tU1Q.ttf) format('truetype')
}
@font-face {
font-family: 'Nunito Sans';
font-style: normal;
font-weight: 700;
src: local('Nunito Sans Bold'), local('NunitoSans-Bold'), url(https://fonts.gstatic.com/s/nunitosans/v3/pe03MImSLYBIv1o4X1M8cc8GBs5tU1Q.ttf) format('truetype')
}
@font-face {
font-family: 'Nunito Sans';
font-style: normal;
font-weight: 800;
src: local('Nunito Sans ExtraBold'), local('NunitoSans-ExtraBold'), url(https://fonts.gstatic.com/s/nunitosans/v3/pe03MImSLYBIv1o4X1M8cc8aBc5tU1Q.ttf) format('truetype')
}
.showbox-img {
height: 12px;
}
.rise-text {
color: green;
}
.decline-text {
color: red;
}
\ No newline at end of file \ No newline at end of file
import Vue from 'vue'
import locale from 'element-ui/lib/locale'
import VueI18n from 'vue-i18n'
import axios from 'axios';
import $ from 'jquery';
/*******************************/
import cnLocale from 'element-ui/lib/locale/lang/zh-CN';
import usLocale from 'element-ui/lib/locale/lang/en';
import twLocale from 'element-ui/lib/locale/lang/zh-TW'
const uiLocale = {
cn: cnLocale,
us: usLocale,
tw: twLocale
};
/*******************************/
Vue.use(VueI18n)
const i18n = new VueI18n({
})
var lang = ['zh_CN', 'en_US', 'zh_TW'];
function loadI18nMessages(lang) {
let langUrl;
let languageUrl = window._vionConfig.languageUrl;
if (languageUrl && languageUrl == 'store') {
langUrl = `https://store.keliuyun.com/report/i18n/get/${lang}.json`;
} else if (languageUrl && languageUrl == 'mall') {
langUrl = `https://mall.keliuyun.com/report/i18n/get/${lang}.json`;
} else if (languageUrl && languageUrl == 'static') {
langUrl = `static/langs/${lang}.json`;
} else {
langUrl = `${window._vionConfig.apiUrl}/i18n/get/${lang}.json`;
}
return new Promise((resolve, reject) => {
$.getJSON(langUrl, function(msg) {
let local = lang.split('_')[1].toLowerCase();
let msgObj = Object.assign({}, msg, uiLocale[local]);
i18n.setLocaleMessage(lang, msgObj)
i18n.locale = localStorage.getItem('lang') || 'zh_CN'
resolve()
})
})
}
lang.forEach((item, index) => {
loadI18nMessages(item).then(() => {
if (item == 'zh_CN') {
locale.i18n((key, value) => i18n.t(key, value))
}
})
})
export default i18n
\ No newline at end of file \ No newline at end of file
/* Logo 字体 */
@font-face {
font-family: "iconfont logo";
src: url('https://at.alicdn.com/t/font_985780_km7mi63cihi.eot?t=1545807318834');
src: url('https://at.alicdn.com/t/font_985780_km7mi63cihi.eot?t=1545807318834#iefix') format('embedded-opentype'),
url('https://at.alicdn.com/t/font_985780_km7mi63cihi.woff?t=1545807318834') format('woff'),
url('https://at.alicdn.com/t/font_985780_km7mi63cihi.ttf?t=1545807318834') format('truetype'),
url('https://at.alicdn.com/t/font_985780_km7mi63cihi.svg?t=1545807318834#iconfont') format('svg');
}
.logo {
font-family: "iconfont logo";
font-size: 160px;
font-style: normal;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
/* tabs */
.nav-tabs {
position: relative;
}
.nav-tabs .nav-more {
position: absolute;
right: 0;
bottom: 0;
height: 42px;
line-height: 42px;
color: #666;
}
#tabs {
border-bottom: 1px solid #eee;
}
#tabs li {
cursor: pointer;
width: 100px;
height: 40px;
line-height: 40px;
text-align: center;
font-size: 16px;
border-bottom: 2px solid transparent;
position: relative;
z-index: 1;
margin-bottom: -1px;
color: #666;
}
#tabs .active {
border-bottom-color: #f00;
color: #222;
}
.tab-container .content {
display: none;
}
/* 页面布局 */
.main {
padding: 30px 100px;
width: 960px;
margin: 0 auto;
}
.main .logo {
color: #333;
text-align: left;
margin-bottom: 30px;
line-height: 1;
height: 110px;
margin-top: -50px;
overflow: hidden;
*zoom: 1;
}
.main .logo a {
font-size: 160px;
color: #333;
}
.helps {
margin-top: 40px;
}
.helps pre {
padding: 20px;
margin: 10px 0;
border: solid 1px #e7e1cd;
background-color: #fffdef;
overflow: auto;
}
.icon_lists {
width: 100% !important;
overflow: hidden;
*zoom: 1;
}
.icon_lists li {
width: 100px;
margin-bottom: 10px;
margin-right: 20px;
text-align: center;
list-style: none !important;
cursor: default;
}
.icon_lists li .code-name {
line-height: 1.2;
}
.icon_lists .icon {
display: block;
height: 100px;
line-height: 100px;
font-size: 42px;
margin: 10px auto;
color: #333;
-webkit-transition: font-size 0.25s linear, width 0.25s linear;
-moz-transition: font-size 0.25s linear, width 0.25s linear;
transition: font-size 0.25s linear, width 0.25s linear;
}
.icon_lists .icon:hover {
font-size: 100px;
}
.icon_lists .svg-icon {
/* 通过设置 font-size 来改变图标大小 */
width: 1em;
/* 图标和文字相邻时,垂直对齐 */
vertical-align: -0.15em;
/* 通过设置 color 来改变 SVG 的颜色/fill */
fill: currentColor;
/* path 和 stroke 溢出 viewBox 部分在 IE 下会显示
normalize.css 中也包含这行 */
overflow: hidden;
}
.icon_lists li .name,
.icon_lists li .code-name {
color: #666;
}
/* markdown 样式 */
.markdown {
color: #666;
font-size: 14px;
line-height: 1.8;
}
.highlight {
line-height: 1.5;
}
.markdown img {
vertical-align: middle;
max-width: 100%;
}
.markdown h1 {
color: #404040;
font-weight: 500;
line-height: 40px;
margin-bottom: 24px;
}
.markdown h2,
.markdown h3,
.markdown h4,
.markdown h5,
.markdown h6 {
color: #404040;
margin: 1.6em 0 0.6em 0;
font-weight: 500;
clear: both;
}
.markdown h1 {
font-size: 28px;
}
.markdown h2 {
font-size: 22px;
}
.markdown h3 {
font-size: 16px;
}
.markdown h4 {
font-size: 14px;
}
.markdown h5 {
font-size: 12px;
}
.markdown h6 {
font-size: 12px;
}
.markdown hr {
height: 1px;
border: 0;
background: #e9e9e9;
margin: 16px 0;
clear: both;
}
.markdown p {
margin: 1em 0;
}
.markdown>p,
.markdown>blockquote,
.markdown>.highlight,
.markdown>ol,
.markdown>ul {
width: 80%;
}
.markdown ul>li {
list-style: circle;
}
.markdown>ul li,
.markdown blockquote ul>li {
margin-left: 20px;
padding-left: 4px;
}
.markdown>ul li p,
.markdown>ol li p {
margin: 0.6em 0;
}
.markdown ol>li {
list-style: decimal;
}
.markdown>ol li,
.markdown blockquote ol>li {
margin-left: 20px;
padding-left: 4px;
}
.markdown code {
margin: 0 3px;
padding: 0 5px;
background: #eee;
border-radius: 3px;
}
.markdown strong,
.markdown b {
font-weight: 600;
}
.markdown>table {
border-collapse: collapse;
border-spacing: 0px;
empty-cells: show;
border: 1px solid #e9e9e9;
width: 95%;
margin-bottom: 24px;
}
.markdown>table th {
white-space: nowrap;
color: #333;
font-weight: 600;
}
.markdown>table th,
.markdown>table td {
border: 1px solid #e9e9e9;
padding: 8px 16px;
text-align: left;
}
.markdown>table th {
background: #F7F7F7;
}
.markdown blockquote {
font-size: 90%;
color: #999;
border-left: 4px solid #e9e9e9;
padding-left: 0.8em;
margin: 1em 0;
}
.markdown blockquote p {
margin: 0;
}
.markdown .anchor {
opacity: 0;
transition: opacity 0.3s ease;
margin-left: 8px;
}
.markdown .waiting {
color: #ccc;
}
.markdown h1:hover .anchor,
.markdown h2:hover .anchor,
.markdown h3:hover .anchor,
.markdown h4:hover .anchor,
.markdown h5:hover .anchor,
.markdown h6:hover .anchor {
opacity: 1;
display: inline-block;
}
.markdown>br,
.markdown>p>br {
clear: both;
}
.hljs {
display: block;
background: white;
padding: 0.5em;
color: #333333;
overflow-x: auto;
}
.hljs-comment,
.hljs-meta {
color: #969896;
}
.hljs-string,
.hljs-variable,
.hljs-template-variable,
.hljs-strong,
.hljs-emphasis,
.hljs-quote {
color: #df5000;
}
.hljs-keyword,
.hljs-selector-tag,
.hljs-type {
color: #a71d5d;
}
.hljs-literal,
.hljs-symbol,
.hljs-bullet,
.hljs-attribute {
color: #0086b3;
}
.hljs-section,
.hljs-name {
color: #63a35c;
}
.hljs-tag {
color: #333333;
}
.hljs-title,
.hljs-attr,
.hljs-selector-id,
.hljs-selector-class,
.hljs-selector-attr,
.hljs-selector-pseudo {
color: #795da3;
}
.hljs-addition {
color: #55a532;
background-color: #eaffea;
}
.hljs-deletion {
color: #bd2c00;
background-color: #ffecec;
}
.hljs-link {
text-decoration: underline;
}
/* 代码高亮 */
/* PrismJS 1.15.0
https://prismjs.com/download.html#themes=prism&languages=markup+css+clike+javascript */
/**
* prism.js default theme for JavaScript, CSS and HTML
* Based on dabblet (http://dabblet.com)
* @author Lea Verou
*/
code[class*="language-"],
pre[class*="language-"] {
color: black;
background: none;
text-shadow: 0 1px white;
font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace;
text-align: left;
white-space: pre;
word-spacing: normal;
word-break: normal;
word-wrap: normal;
line-height: 1.5;
-moz-tab-size: 4;
-o-tab-size: 4;
tab-size: 4;
-webkit-hyphens: none;
-moz-hyphens: none;
-ms-hyphens: none;
hyphens: none;
}
pre[class*="language-"]::-moz-selection,
pre[class*="language-"] ::-moz-selection,
code[class*="language-"]::-moz-selection,
code[class*="language-"] ::-moz-selection {
text-shadow: none;
background: #b3d4fc;
}
pre[class*="language-"]::selection,
pre[class*="language-"] ::selection,
code[class*="language-"]::selection,
code[class*="language-"] ::selection {
text-shadow: none;
background: #b3d4fc;
}
@media print {
code[class*="language-"],
pre[class*="language-"] {
text-shadow: none;
}
}
/* Code blocks */
pre[class*="language-"] {
padding: 1em;
margin: .5em 0;
overflow: auto;
}
:not(pre)>code[class*="language-"],
pre[class*="language-"] {
background: #f5f2f0;
}
/* Inline code */
:not(pre)>code[class*="language-"] {
padding: .1em;
border-radius: .3em;
white-space: normal;
}
.token.comment,
.token.prolog,
.token.doctype,
.token.cdata {
color: slategray;
}
.token.punctuation {
color: #999;
}
.namespace {
opacity: .7;
}
.token.property,
.token.tag,
.token.boolean,
.token.number,
.token.constant,
.token.symbol,
.token.deleted {
color: #905;
}
.token.selector,
.token.attr-name,
.token.string,
.token.char,
.token.builtin,
.token.inserted {
color: #690;
}
.token.operator,
.token.entity,
.token.url,
.language-css .token.string,
.style .token.string {
color: #9a6e3a;
background: hsla(0, 0%, 100%, .5);
}
.token.atrule,
.token.attr-value,
.token.keyword {
color: #07a;
}
.token.function,
.token.class-name {
color: #DD4A68;
}
.token.regex,
.token.important,
.token.variable {
color: #e90;
}
.token.important,
.token.bold {
font-weight: bold;
}
.token.italic {
font-style: italic;
}
.token.entity {
cursor: help;
}
@font-face {
font-family: "iconfont"; /* Project id 2631077 */
src: url('iconfont.woff2?t=1624519749738') format('woff2'),
url('iconfont.woff?t=1624519749738') format('woff'),
url('iconfont.ttf?t=1624519749738') format('truetype');
}
.iconfont {
font-family: "iconfont" !important;
font-size: 16px;
font-style: normal;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
[class^="icon-store"], [class*="icon-store"] {
font-family:"iconfont" !important;
/* 以下内容参照第三方图标库本身的规则 */
font-size: 18px;
font-style:normal;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
.icon-store-blocks:before {
content: "\e600";
}
.icon-store-malls:before {
content: "\e601";
}
.icon-store-floors:before {
content: "\e602";
}
.icon-store-stores:before {
content: "\e603";
}
!function(a){var e,t,n,o,l,i,m='<svg><symbol id="icon-account" viewBox="0 0 1024 1024"><path d="M965.503307 334.970535a492.603728 492.603728 0 0 0-262.311485-262.311485 492.603728 492.603728 0 0 0-383.615153 0 492.603728 492.603728 0 1 0 645.926638 262.311485z m-24.014431 160.711967h-146.54961a714.891161 714.891161 0 0 0-40.024053-208.125076 507.997595 507.997595 0 0 0 74.506314-51.723391 431.028262 431.028262 0 0 1 112.067349 259.848467zM542.479856 96.673482l35.098015 3.694528A659.473241 659.473241 0 0 1 677.330126 258.001203a431.028262 431.028262 0 0 1-133.618761 32.019242V96.673482z m-61.575466 192.731208a431.028262 431.028262 0 0 1-133.618762-32.019242 655.778713 655.778713 0 0 1 98.520746-156.401684l35.098016-3.694528v192.731209z m0 61.575466v145.3181H290.6362a652.69994 652.69994 0 0 1 34.482261-180.416115 488.293446 488.293446 0 0 0 156.401683 35.71377z m0 206.277812v144.702345a488.293446 488.293446 0 0 0-156.401684 36.945279 653.315695 653.315695 0 0 1-34.482261-180.416115z m0 206.277811v192.731208l-35.098016-3.694528a657.625977 657.625977 0 0 1-99.1365-157.017438 427.333734 427.333734 0 0 1 133.618761-31.403488z m61.575466 0a431.028262 431.028262 0 0 1 133.618761 31.403487 657.010222 657.010222 0 0 1-99.1365 157.017439l-35.098016 4.310282v-192.115454z m0-61.575466V557.873722h190.26819a661.93626 661.93626 0 0 1-33.866507 181.03187 488.293446 488.293446 0 0 0-156.401683-36.329525z m0-206.277811V351.595911a492.603728 492.603728 0 0 0 156.401683-35.71377 665.630788 665.630788 0 0 1 33.866507 180.416115z m241.375827-302.951293a445.806374 445.806374 0 0 1-52.339147 36.945279A722.895971 722.895971 0 0 0 677.330126 128.076969a431.028262 431.028262 0 0 1 108.988575 65.269994zM348.517138 128.076969a729.053518 729.053518 0 0 0-56.649429 102.215274 455.658449 455.658449 0 0 1-52.339146-36.94528 426.71798 426.71798 0 0 1 108.988575-65.269994z m-153.938665 107.757066a487.061936 487.061936 0 0 0 74.506314 51.723391 716.12267 716.12267 0 0 0-40.024053 208.125076H81.89537a431.028262 431.028262 0 0 1 112.683103-259.848467zM81.89537 557.873722h146.549609a716.12267 716.12267 0 0 0 40.024053 208.125075 485.214672 485.214672 0 0 0-74.506314 51.723392 431.028262 431.028262 0 0 1-112.067348-259.848467zM239.528563 862.056524a426.102225 426.102225 0 0 1 52.339146-36.945279 716.12267 716.12267 0 0 0 56.649429 98.520745 431.028262 431.028262 0 0 1-108.988575-61.575466zM677.330126 923.63199a705.654841 705.654841 0 0 0 56.649429-102.215273 431.028262 431.028262 0 0 1 52.339146 36.945279A431.028262 431.028262 0 0 1 677.330126 923.63199z m153.938665-107.757065a492.603728 492.603728 0 0 0-74.506314-51.723392 716.12267 716.12267 0 0 0 40.024053-208.125075h146.54961a431.028262 431.028262 0 0 1-112.067349 259.848467z" ></path></symbol><symbol id="icon-mall" viewBox="0 0 1024 1024"><path d="M913.779916 927.326518a93.594708 93.594708 0 0 0 6.157546-30.787733v-307.87733a92.363199 92.363199 0 0 0-92.363199-92.363199h-123.150932a89.284426 89.284426 0 0 0-46.181599 14.162357V157.633193a92.363199 92.363199 0 0 0-92.363199-92.363199h-369.452796a92.363199 92.363199 0 0 0-92.363199 92.363199v738.905592a90.515935 90.515935 0 0 0 6.157546 30.787733h-61.575466v61.575466h923.631991v-61.575466z m-717.354179 0a30.787733 30.787733 0 0 1-30.787733-30.787733v-738.905592a30.787733 30.787733 0 0 1 30.787733-30.787733h369.452796a30.787733 30.787733 0 0 1 30.787733 30.787733v738.905592a30.787733 30.787733 0 0 1-30.787733 30.787733z m507.997594 0a30.787733 30.787733 0 0 1-30.787733-30.787733v-307.87733a30.787733 30.787733 0 0 1 30.787733-30.787733h123.150932a30.787733 30.787733 0 0 1 30.787733 30.787733v307.87733a30.787733 30.787733 0 0 1-30.787733 30.787733z m72.043296-230.907997h-21.551414a35.71377 35.71377 0 0 0-35.71377 35.71377v21.551413a35.71377 35.71377 0 0 0 35.71377 35.71377h21.551414a35.71377 35.71377 0 0 0 35.71377-35.71377v-21.551413a35.71377 35.71377 0 0 0-35.71377-35.71377z m-477.209862-184.726398h-20.935659a35.71377 35.71377 0 0 0-35.71377 35.71377v21.551413a35.71377 35.71377 0 0 0 35.71377 35.71377h21.551414a35.098016 35.098016 0 0 0 35.71377-35.71377v-21.551413a35.098016 35.098016 0 0 0-35.71377-35.71377z m184.726398 0h-20.935658a35.71377 35.71377 0 0 0-35.713771 35.71377v21.551413a35.71377 35.71377 0 0 0 35.713771 35.71377h21.551413a35.098016 35.098016 0 0 0 35.71377-35.71377v-21.551413a35.71377 35.71377 0 0 0-35.71377-35.71377z m-184.726398-184.726398h-20.935659a35.71377 35.71377 0 0 0-35.71377 35.71377v20.935658a35.71377 35.71377 0 0 0 35.71377 35.713771h21.551414a35.71377 35.71377 0 0 0 35.71377-35.713771v-20.935658a35.71377 35.71377 0 0 0-35.71377-35.71377z m184.726398 0h-20.935658a35.71377 35.71377 0 0 0-35.713771 35.71377v20.935658a35.71377 35.71377 0 0 0 35.713771 35.713771h21.551413a35.71377 35.71377 0 0 0 35.71377-35.713771v-20.935658a35.71377 35.71377 0 0 0-35.71377-35.71377z" ></path></symbol><symbol id="icon-floor" viewBox="0 0 1024 1024"><path d="M509.844859 988.901984a100.983764 100.983764 0 0 1-47.413109-13.546602l-411.939868-184.726398c-24.630186-13.546603-31.403488-61.575466-31.403488-83.742634v-6.773301l6.773302 4.310282a464.894768 464.894768 0 0 0 64.654239 31.403488l423.639206 193.962718 418.713169-194.578473s17.856885-9.23632 33.866507-16.009621l38.176789-17.856885v6.773301c0 27.093205-9.23632 72.65905-31.403488 83.742634l-414.402886 184.726398a141.007817 141.007817 0 0 1-49.260373 11.083584z m0-194.578472a100.36801 100.36801 0 0 1-47.413109-13.546603l-411.939868-184.726398C25.861696 581.272399 19.088394 535.706554 19.088394 511.076368v-6.773301l6.773302 4.310282a464.894768 464.894768 0 0 0 64.654239 31.403488l421.176188 194.578473 418.713169-194.578473a269.084787 269.084787 0 0 0 33.866506-17.856885l38.176789-18.47264v7.389056c0 27.093205-9.23632 72.65905-31.403488 83.742634l-414.402886 184.726398a108.37282 108.37282 0 0 1-49.260373 13.546602z m0-194.578473a100.36801 100.36801 0 0 1-47.413109-13.546602L50.491882 397.777511a51.723391 51.723391 0 0 1-27.093205-45.565845 61.575466 61.575466 0 0 1 27.093205-54.18641l414.402886-219.208659a123.150932 123.150932 0 0 1 49.260373-13.546603 83.126879 83.126879 0 0 1 46.797354 16.009621l414.402887 219.824414a54.802165 54.802165 0 0 1 24.630186 52.339146 49.876127 49.876127 0 0 1-27.093205 47.413109l-414.402886 184.726398a145.933854 145.933854 0 0 1-49.260373 13.546602z m4.310282-76.969332L923.63199 347.901383 514.155141 123.150932 99.752255 347.901383l414.402886 174.258569z" ></path></symbol><symbol id="icon-shop" viewBox="0 0 1024 1024"><path d="M873.755863 645.310884a33.250752 33.250752 0 0 0-33.250752 33.250752v208.740829a24.630186 24.630186 0 0 1-24.630186 24.630187H210.588094a24.630186 24.630186 0 0 1-24.630187-24.630187V677.330126a33.250752 33.250752 0 0 0-33.250751-33.250751 33.250752 33.250752 0 0 0-33.250752 33.250751v208.125075a91.747444 91.747444 0 0 0 91.747444 91.13169h605.286831a91.13169 91.13169 0 0 0 91.747445-91.13169V677.330126a33.250752 33.250752 0 0 0-33.250752-33.250751zM800.481058 291.867709H217.361395a19.088394 19.088394 0 0 0-19.088394 18.47264v22.167168a19.088394 19.088394 0 0 0 19.088394 18.472639H800.481058a19.088394 19.088394 0 0 0 19.088395-18.472639V307.87733a19.088394 19.088394 0 0 0-19.088395-18.47264z m222.903187 93.594708a163.79074 163.79074 0 0 0-16.625375-38.176789v-4.310282l-134.234516-232.755262-3.694528-5.541792a55.417919 55.417919 0 0 0-48.028864-26.47745H194.578473a67.733013 67.733013 0 0 0-48.028864 23.398677L14.778112 331.276007a50.491882 50.491882 0 0 0-3.694528 9.852075 201.967529 201.967529 0 0 0 184.726398 262.92724 199.50451 199.50451 0 0 0 165.022249-89.284426 196.425737 196.425737 0 0 0 332.507516 0 184.726398 184.726398 0 0 0 163.79074 92.363199A141.623572 141.623572 0 0 0 985.207456 532.012026a203.814793 203.814793 0 0 0 35.713771-145.933854z m-84.358388 112.683103a91.13169 91.13169 0 0 1-76.969333 40.024053 123.150932 123.150932 0 0 1-123.150932-110.220084 25.861696 25.861696 0 0 0-24.014431-24.014432H677.330126a21.551413 21.551413 0 0 0-20.319904 24.630187 119.456404 119.456404 0 0 1-132.387251 110.835838 133.618761 133.618761 0 0 1-129.924234-120.072158 17.24113 17.24113 0 0 0-17.24113-15.393867h-32.019243a21.551413 21.551413 0 0 0-20.935658 18.47264 130.539988 130.539988 0 0 1-131.155743 115.146121 147.165364 147.165364 0 0 1-123.150932-168.101022l5.541792-12.315093 123.150932-212.435358h615.754661L948.877931 369.452796a107.757066 107.757066 0 0 1 11.699339 25.245941 147.781118 147.781118 0 0 1-22.782922 98.520746z" ></path></symbol></svg>',v=(v=document.getElementsByTagName("script"))[v.length-1].getAttribute("data-injectcss");if(v&&!a.__iconfont__svg__cssinject__){a.__iconfont__svg__cssinject__=!0;try{document.write("<style>.svgfont {display: inline-block;width: 1em;height: 1em;fill: currentColor;vertical-align: -0.1em;font-size:16px;}</style>")}catch(a){console&&console.log(a)}}function c(){l||(l=!0,n())}e=function(){var a,e,t;(t=document.createElement("div")).innerHTML=m,m=null,(e=t.getElementsByTagName("svg")[0])&&(e.setAttribute("aria-hidden","true"),e.style.position="absolute",e.style.width=0,e.style.height=0,e.style.overflow="hidden",a=e,(t=document.body).firstChild?(e=t.firstChild).parentNode.insertBefore(a,e):t.appendChild(a))},document.addEventListener?~["complete","loaded","interactive"].indexOf(document.readyState)?setTimeout(e,0):(t=function(){document.removeEventListener("DOMContentLoaded",t,!1),e()},document.addEventListener("DOMContentLoaded",t,!1)):document.attachEvent&&(n=e,o=a.document,l=!1,(i=function(){try{o.documentElement.doScroll("left")}catch(a){return void setTimeout(i,50)}c()})(),o.onreadystatechange=function(){"complete"==o.readyState&&(o.onreadystatechange=null,c())})}(window);
\ No newline at end of file \ No newline at end of file
{
"id": "2631077",
"name": "store",
"font_family": "iconfont",
"css_prefix_text": "icon-",
"description": "",
"glyphs": [
{
"icon_id": "22445883",
"name": "account",
"font_class": "account",
"unicode": "e600",
"unicode_decimal": 58880
},
{
"icon_id": "22445884",
"name": "mall",
"font_class": "mall",
"unicode": "e601",
"unicode_decimal": 58881
},
{
"icon_id": "22445885",
"name": "floor",
"font_class": "floor",
"unicode": "e602",
"unicode_decimal": 58882
},
{
"icon_id": "22445886",
"name": "shop",
"font_class": "shop",
"unicode": "e603",
"unicode_decimal": 58883
}
]
}
No preview for this file type
No preview for this file type
No preview for this file type
<?xml version="1.0" encoding="UTF-8"?>
<svg width="41px" height="38px" viewBox="0 0 41 38" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<!-- Generator: Sketch 51.1 (57501) - http://www.bohemiancoding.com/sketch -->
<title>Shape</title>
<desc>Created with Sketch.</desc>
<defs></defs>
<g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<g id="图表" transform="translate(-2587.000000, -168.000000)" fill="#3BB8FF" fill-rule="nonzero">
<g id="图表-柱状图" transform="translate(2586.500000, 167.750000)">
<path d="M1.00380522,1.23245496 C1.00380522,1.17530805 1.02604462,1.11820475 1.07052341,1.07458266 C1.1150467,1.03100853 1.17333555,1.00922146 1.23167335,1.00922146 L2.67330387,1.00922146 C2.73163723,1.00922146 2.78992607,1.03100853 2.83445382,1.07458266 C2.87893261,1.11820039 2.90117201,1.17530369 2.90117201,1.23245496 L2.90117201,35.7065823 L41.2533383,35.7065823 C41.3116271,35.7065823 41.370005,35.7283694 41.4144393,35.7719915 C41.4589626,35.8155656 41.4812064,35.8727125 41.4812064,35.9298158 L41.4812064,37.3421249 C41.4812064,37.3992282 41.458967,37.4564187 41.4144393,37.4999492 C41.3699605,37.5435669 41.3116271,37.5653584 41.2533383,37.5653584 L1.00380522,37.5653584 L1.0038054,1.23245583 L1.00380522,1.23245496 Z M14.9179363,1.67892195 C14.9179363,1.50752484 14.9846545,1.33612337 15.1181887,1.20540098 C15.2516741,1.07463062 15.4266296,1.00922146 15.6015407,1.00922146 L21.8238432,1.00922146 C21.9987987,1.00922146 22.1737587,1.07458266 22.3071951,1.20540098 C22.4406804,1.33617133 22.5074476,1.50756844 22.5074476,1.67892195 L22.5074476,33.2281548 L14.9179348,33.2281548 L14.9179348,1.67892282 L14.9179363,1.67892195 Z M5.43105604,10.9728474 C5.43105604,10.8014503 5.49777423,10.6300489 5.63130852,10.4993265 C5.76479385,10.3685561 5.9397494,10.3031469 6.11466044,10.3031469 L12.3369644,10.3031469 C12.5119199,10.3031469 12.6868799,10.3685081 12.8203163,10.4993265 C12.9538016,10.6300968 13.0205688,10.8014939 13.0205688,10.9728474 L13.0205688,33.2282001 L5.43105533,33.2282001 L5.43105533,10.9728476 L5.43105604,10.9728474 Z M24.404861,20.2668165 C24.404861,20.0954194 24.4716281,19.9240179 24.6051135,19.7932956 C24.7385988,19.6625732 24.9135543,19.597116 25.0884654,19.597116 L31.3107693,19.597116 C31.4857249,19.597116 31.6606849,19.6625252 31.7941212,19.7932956 C31.9275576,19.9240659 31.9943737,20.095463 31.9943737,20.2668165 L31.9943737,33.2281998 L24.4048599,33.2281998 L24.4048599,20.266817 L24.404861,20.2668165 Z M33.8917412,29.560742 C33.8917412,29.3893449 33.9585084,29.2179434 34.0919937,29.087221 C34.225479,28.9564986 34.4004346,28.8910415 34.5753456,28.8910415 L40.7976495,28.8910415 C40.9726051,28.8910415 41.1475651,28.9564507 41.2810015,29.087221 C41.4144378,29.2179914 41.4812539,29.3893885 41.4812539,29.560742 L41.4812539,33.2282451 L33.8917394,33.2282451 L33.8917394,29.5607418 L33.8917412,29.560742 Z" id="Shape"></path>
</g>
</g>
</g>
</svg>
\ No newline at end of file \ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<svg width="43px" height="41px" viewBox="0 0 43 41" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<!-- Generator: Sketch 51.1 (57501) - http://www.bohemiancoding.com/sketch -->
<title>relitu</title>
<desc>Created with Sketch.</desc>
<defs></defs>
<g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<g id="relitu" fill="#3BB8FF" fill-rule="nonzero">
<path d="M40.4538246,24.0993808 C33.4641129,17.0310614 34.1722385,14.3364646 35.2034633,11.5139343 C36.2346881,8.69406935 33.7360547,-3.72612984 24.4711864,1.10335534 C15.206318,5.93284052 17.9661233,12.3988069 11.3587456,12.1082915 C4.74598286,11.8231067 -3.37457594,15.3306136 1.47191141,28.2812032 C3.36742646,33.3425677 6.96459707,38.2493459 12.5380575,38.9556448 C18.111518,39.664609 27.2659941,37.8602152 32.8394545,40.6027871 C38.4102225,43.3533548 47.4462289,31.1677002 40.4538246,24.0993808 Z M31.3343509,37.3538122 C26.6332582,35.1869406 18.9381133,36.4609438 14.2127881,35.9438798 C9.49015547,35.4268157 5.84721248,32.1618491 4.29364404,28.0813073 C0.319524418,17.6254186 8.00389935,14.6722897 13.6150547,14.837537 C19.2208251,15.0027843 16.8406613,8.5368179 24.7538981,4.53090387 C32.6644425,0.527655122 33.1706311,10.9009202 32.263261,13.2010558 C31.2131887,15.8556735 31.3101185,18.3716967 37.4328475,24.2806197 C43.2917122,29.9443372 36.0327512,39.5233492 31.3316584,37.3538122 L31.3343509,37.3538122 Z M7.8315798,21.7006299 C5.28717395,23.8701668 7.47078574,29.0034938 10.7475497,30.0536136 C14.0323911,31.109064 17.2741526,29.9496677 19.821251,27.7508127 C22.3629644,25.5492925 22.0264027,17.9799007 17.7964963,19.9442111 C13.5638973,21.9111869 13.0227062,17.2789324 7.83427229,21.7032952 L7.8315798,21.7006299 Z M26.2886191,7.14021181 C23.251487,7.91314266 20.3920595,12.963846 21.6144513,15.2080107 C22.8395356,17.4468449 25.4862562,21.4314367 24.6192735,24.3205989 C23.7576757,27.1991 24.398489,30.6959458 27.298304,31.7354045 C30.1981189,32.772198 36.3908527,32.4257117 36.468935,29.4006203 C36.5470173,26.3781942 29.1561241,23.1638679 28.9461097,18.222441 C28.7387877,13.2836794 31.2239587,5.88220022 26.2886191,7.14021181 Z" id="Shape"></path>
</g>
</g>
</svg>
\ No newline at end of file \ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<svg width="41px" height="34px" viewBox="0 0 41 34" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<!-- Generator: Sketch 51.1 (57501) - http://www.bohemiancoding.com/sketch -->
<title>Mask</title>
<desc>Created with Sketch.</desc>
<defs>
<path d="M20.3315031,23.6379703 L20.3315031,33.3308137 C20.3312259,33.5077333 20.3993121,33.6774603 20.5206708,33.8023759 C20.6416861,33.9276113 20.8060576,33.9978929 20.9774068,33.9976663 L25.7260528,33.9976663 C25.8914068,33.9976663 26.0567609,33.9325695 26.1828307,33.8023759 C26.3041112,33.6774097 26.3721705,33.5077119 26.3719565,33.3308137 L26.371957,20.4137313 L21.5438199,24.7045795 L20.331545,23.6379703 L20.3315031,23.6379703 Z M0.039326087,33.3308137 C0.0390571872,33.5077486 0.107176376,33.6774827 0.22857764,33.8023759 C0.349580086,33.9276047 0.513936148,33.9978862 0.685271739,33.9976663 L5.43328882,33.9976663 C5.59860093,33.9976663 5.76395497,33.9325695 5.89002484,33.8023759 C6.01135531,33.6774338 6.07946173,33.5077315 6.0792764,33.3308137 L6.07927677,23.4427665 L0.039326087,28.5863221 L0.039326087,33.3308137 Z M10.1841568,19.9455451 L10.1841568,33.3307271 C10.1841568,33.5014331 10.2472127,33.672139 10.3733665,33.8022893 C10.494362,33.927534 10.6587189,33.9978315 10.8300606,33.997623 L15.5793773,33.997623 C15.7446894,33.997623 15.9100435,33.9324829 16.0360714,33.8022893 C16.1573869,33.6773439 16.2254652,33.5076363 16.2252391,33.3307271 L16.2252391,20.0291668 L13.2065217,17.3755635 L10.1841568,19.9455451 Z M30.4775916,33.3308137 C30.4773145,33.5077333 30.5454006,33.6774603 30.6667593,33.8023759 C30.7877486,33.927625 30.9521132,33.9979102 31.1234534,33.9976663 L35.8741118,33.9976663 C36.0395078,33.9976663 36.204778,33.9325695 36.3308478,33.8023759 C36.4521125,33.6773989 36.5201691,33.5077081 36.5199736,33.3308137 L36.519974,11.3935404 L30.4775916,16.7645885 L30.4775916,33.3308137 Z M29.435618,0.0343229771 C29.3481921,0.0343330264 29.2694463,0.0889029566 29.236325,0.172430676 C29.2032038,0.255958396 29.2222794,0.351869092 29.2846025,0.415165191 L33.8244596,5.02336031 L21.5436522,15.9398416 L13.2065637,8.60861817 L0.00469565217,19.8517953 L0.00469565217,24.7083884 L13.2066056,13.4659037 L21.543736,20.7957854 L36.3778882,7.61247275 L40.1288339,11.4208949 C40.1906566,11.4837596 40.2830032,11.5021415 40.3630345,11.4675133 C40.4430657,11.4328851 40.4951213,11.3520226 40.4950528,11.2624379 L40.4950528,0.256621603 C40.4951057,0.197631022 40.4724003,0.141047354 40.431955,0.0993764885 C40.391646,0.0576211883 40.3368681,0.0341907444 40.2797655,0.0342796947 L29.435618,0.0342796947 L29.435618,0.0343229771 Z" id="path-1"></path>
</defs>
<g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<g id="折线图" transform="translate(-2664.000000, -171.000000)">
<g id="图表-折线图" transform="translate(2664.000000, 171.000000)">
<g id="Shape">
<mask id="mask-2" fill="white">
<use xlink:href="#path-1"></use>
</mask>
<use id="Mask" fill="#3BB8FF" fill-rule="nonzero" xlink:href="#path-1"></use>
</g>
</g>
</g>
</g>
</svg>
\ No newline at end of file \ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<svg width="41px" height="34px" viewBox="0 0 41 34" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<!-- Generator: Sketch 51.1 (57501) - http://www.bohemiancoding.com/sketch -->
<title>Shape</title>
<desc>Created with Sketch.</desc>
<defs></defs>
<g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<g id="图表" transform="translate(-2740.000000, -171.000000)" fill="#3BB8FF" fill-rule="nonzero">
<g id="图表-表格" transform="translate(2740.500000, 171.000000)">
<path d="M37.5977647,0.00362136345 L2.90223529,0.00362136345 C1.31202353,0.00362136345 0.0109411762,1.27503038 0.0109411762,2.82897474 L0.0109411762,31.0825085 C0.0109411762,32.6364529 1.31202353,33.9078619 2.90223529,33.9078619 L37.5977647,33.9078619 C39.1879765,33.9078619 40.4890588,32.6364529 40.4890588,31.0825085 L40.4890588,2.82897474 C40.4890588,1.27503038 39.1879765,0.00362136345 37.5977647,0.00362136345 Z M13.0217647,31.0825085 L2.90223529,31.0825085 L2.90223529,24.0191251 L13.0217647,24.0191251 L13.0217647,31.0825085 Z M13.0217647,21.1937717 L2.90223529,21.1937717 L2.90223529,14.1303882 L13.0217647,14.1303882 L13.0217647,21.1937717 Z M13.0217647,11.3050349 L2.90223529,11.3050349 L2.90223529,4.24165143 L13.0217647,4.24165143 L13.0217647,11.3050349 Z M24.5869412,31.0825085 L15.9130588,31.0825085 L15.9130588,24.0191251 L24.5869412,24.0191251 L24.5869412,31.0825085 Z M24.5869412,21.1937717 L15.9130588,21.1937717 L15.9130588,14.1303882 L24.5869412,14.1303882 L24.5869412,21.1937717 Z M24.5869412,11.3050349 L15.9130588,11.3050349 L15.9130588,4.24165143 L24.5869412,4.24165143 L24.5869412,11.3050349 Z M37.5977647,31.0825085 L27.4782353,31.0825085 L27.4782353,24.0191251 L37.5977647,24.0191251 L37.5977647,31.0825085 Z M37.5977647,21.1937717 L27.4782353,21.1937717 L27.4782353,14.1303882 L37.5977647,14.1303882 L37.5977647,21.1937717 Z M37.5977647,11.3050349 L27.4782353,11.3050349 L27.4782353,4.24165143 L37.5977647,4.24165143 L37.5977647,11.3050349 Z" id="Shape"></path>
</g>
</g>
</g>
</svg>
\ No newline at end of file \ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<svg width="41px" height="38px" viewBox="0 0 41 38" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<!-- Generator: Sketch 51.1 (57501) - http://www.bohemiancoding.com/sketch -->
<title>mdpi/图表 柱状图</title>
<desc>Created with Sketch.</desc>
<defs></defs>
<g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<g id="图表" transform="translate(-2587.000000, -168.000000)" fill="#DBDBDB" fill-rule="nonzero">
<g id="图表-柱状图" transform="translate(2587.500000, 168.750000)">
<path d="M0.00380521978,0.232454958 C0.00380521978,0.175308055 0.0260446154,0.118204752 0.0705234066,0.0745826598 C0.115046703,0.0310085278 0.173335549,0.0092214618 0.231673352,0.0092214618 L1.67330387,0.0092214618 C1.73163723,0.0092214618 1.78992607,0.0310085278 1.83445382,0.0745826598 C1.87893261,0.118200392 1.90117201,0.175303695 1.90117201,0.232454958 L1.90117201,34.7065823 L40.2533383,34.7065823 C40.3116271,34.7065823 40.370005,34.7283694 40.4144393,34.7719915 C40.4589626,34.8155656 40.4812064,34.8727125 40.4812064,34.9298158 L40.4812064,36.3421249 C40.4812064,36.3992282 40.458967,36.4564187 40.4144393,36.4999492 C40.3699605,36.5435669 40.3116271,36.5653584 40.2533383,36.5653584 L0.00380521978,36.5653584 L0.0038053978,0.23245583 L0.00380521978,0.232454958 Z M13.9179363,0.67892195 C13.9179363,0.507524841 13.9846545,0.336123373 14.1181887,0.205400977 C14.2516741,0.0746306202 14.4266296,0.0092214618 14.6015407,0.0092214618 L20.8238432,0.0092214618 C20.9987987,0.0092214618 21.1737587,0.0745826598 21.3071951,0.205400977 C21.4406804,0.336171333 21.5074476,0.507568442 21.5074476,0.67892195 L21.5074476,32.2281548 L13.9179348,32.2281548 L13.9179348,0.678922822 L13.9179363,0.67892195 Z M4.43105604,9.97284744 C4.43105604,9.80145033 4.49777423,9.63004886 4.63130852,9.49932646 C4.76479385,9.36855611 4.9397494,9.30314695 5.11466044,9.30314695 L11.3369644,9.30314695 C11.5119199,9.30314695 11.6868799,9.36850815 11.8203163,9.49932646 C11.9538016,9.63009682 12.0205688,9.80149393 12.0205688,9.97284744 L12.0205688,32.2282001 L4.43105533,32.2282001 L4.43105533,9.97284761 L4.43105604,9.97284744 Z M23.404861,19.2668165 C23.404861,19.0954194 23.4716281,18.9240179 23.6051135,18.7932956 C23.7385988,18.6625732 23.9135543,18.597116 24.0884654,18.597116 L30.3107693,18.597116 C30.4857249,18.597116 30.6606849,18.6625252 30.7941212,18.7932956 C30.9275576,18.9240659 30.9943737,19.095463 30.9943737,19.2668165 L30.9943737,32.2281998 L23.4048599,32.2281998 L23.4048599,19.266817 L23.404861,19.2668165 Z M32.8917412,28.560742 C32.8917412,28.3893449 32.9585084,28.2179434 33.0919937,28.087221 C33.225479,27.9564986 33.4004346,27.8910415 33.5753456,27.8910415 L39.7976495,27.8910415 C39.9726051,27.8910415 40.1475651,27.9564507 40.2810015,28.087221 C40.4144378,28.2179914 40.4812539,28.3893885 40.4812539,28.560742 L40.4812539,32.2282451 L32.8917394,32.2282451 L32.8917394,28.5607418 L32.8917412,28.560742 Z" id="Shape"></path>
</g>
</g>
</g>
</svg>
\ No newline at end of file \ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<svg width="43px" height="41px" viewBox="0 0 43 41" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<!-- Generator: Sketch 51.1 (57501) - http://www.bohemiancoding.com/sketch -->
<title>relitu copy</title>
<desc>Created with Sketch.</desc>
<defs></defs>
<g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<g id="relitu-copy" fill="#DBDBDB" fill-rule="nonzero">
<path d="M40.4538246,24.0993808 C33.4641129,17.0310614 34.1722385,14.3364646 35.2034633,11.5139343 C36.2346881,8.69406935 33.7360547,-3.72612984 24.4711864,1.10335534 C15.206318,5.93284052 17.9661233,12.3988069 11.3587456,12.1082915 C4.74598286,11.8231067 -3.37457594,15.3306136 1.47191141,28.2812032 C3.36742646,33.3425677 6.96459707,38.2493459 12.5380575,38.9556448 C18.111518,39.664609 27.2659941,37.8602152 32.8394545,40.6027871 C38.4102225,43.3533548 47.4462289,31.1677002 40.4538246,24.0993808 Z M31.3343509,37.3538122 C26.6332582,35.1869406 18.9381133,36.4609438 14.2127881,35.9438798 C9.49015547,35.4268157 5.84721248,32.1618491 4.29364404,28.0813073 C0.319524418,17.6254186 8.00389935,14.6722897 13.6150547,14.837537 C19.2208251,15.0027843 16.8406613,8.5368179 24.7538981,4.53090387 C32.6644425,0.527655122 33.1706311,10.9009202 32.263261,13.2010558 C31.2131887,15.8556735 31.3101185,18.3716967 37.4328475,24.2806197 C43.2917122,29.9443372 36.0327512,39.5233492 31.3316584,37.3538122 L31.3343509,37.3538122 Z M7.8315798,21.7006299 C5.28717395,23.8701668 7.47078574,29.0034938 10.7475497,30.0536136 C14.0323911,31.109064 17.2741526,29.9496677 19.821251,27.7508127 C22.3629644,25.5492925 22.0264027,17.9799007 17.7964963,19.9442111 C13.5638973,21.9111869 13.0227062,17.2789324 7.83427229,21.7032952 L7.8315798,21.7006299 Z M26.2886191,7.14021181 C23.251487,7.91314266 20.3920595,12.963846 21.6144513,15.2080107 C22.8395356,17.4468449 25.4862562,21.4314367 24.6192735,24.3205989 C23.7576757,27.1991 24.398489,30.6959458 27.298304,31.7354045 C30.1981189,32.772198 36.3908527,32.4257117 36.468935,29.4006203 C36.5470173,26.3781942 29.1561241,23.1638679 28.9461097,18.222441 C28.7387877,13.2836794 31.2239587,5.88220022 26.2886191,7.14021181 Z" id="Shape"></path>
</g>
</g>
</svg>
\ No newline at end of file \ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<svg width="41px" height="34px" viewBox="0 0 41 34" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<!-- Generator: Sketch 51.1 (57501) - http://www.bohemiancoding.com/sketch -->
<title>Shape</title>
<desc>Created with Sketch.</desc>
<defs></defs>
<g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<g id="图表" transform="translate(-2664.000000, -171.000000)" fill="#DBDBDB" fill-rule="nonzero">
<g id="图表-折线图" transform="translate(2664.000000, 171.000000)">
<path d="M20.3315031,23.6379703 L20.3315031,33.3308137 C20.3312259,33.5077333 20.3993121,33.6774603 20.5206708,33.8023759 C20.6416861,33.9276113 20.8060576,33.9978929 20.9774068,33.9976663 L25.7260528,33.9976663 C25.8914068,33.9976663 26.0567609,33.9325695 26.1828307,33.8023759 C26.3041112,33.6774097 26.3721705,33.5077119 26.3719565,33.3308137 L26.371957,20.4137313 L21.5438199,24.7045795 L20.331545,23.6379703 L20.3315031,23.6379703 Z M0.039326087,33.3308137 C0.0390571872,33.5077486 0.107176376,33.6774827 0.22857764,33.8023759 C0.349580086,33.9276047 0.513936148,33.9978862 0.685271739,33.9976663 L5.43328882,33.9976663 C5.59860093,33.9976663 5.76395497,33.9325695 5.89002484,33.8023759 C6.01135531,33.6774338 6.07946173,33.5077315 6.0792764,33.3308137 L6.07927677,23.4427665 L0.039326087,28.5863221 L0.039326087,33.3308137 Z M10.1841568,19.9455451 L10.1841568,33.3307271 C10.1841568,33.5014331 10.2472127,33.672139 10.3733665,33.8022893 C10.494362,33.927534 10.6587189,33.9978315 10.8300606,33.997623 L15.5793773,33.997623 C15.7446894,33.997623 15.9100435,33.9324829 16.0360714,33.8022893 C16.1573869,33.6773439 16.2254652,33.5076363 16.2252391,33.3307271 L16.2252391,20.0291668 L13.2065217,17.3755635 L10.1841568,19.9455451 Z M30.4775916,33.3308137 C30.4773145,33.5077333 30.5454006,33.6774603 30.6667593,33.8023759 C30.7877486,33.927625 30.9521132,33.9979102 31.1234534,33.9976663 L35.8741118,33.9976663 C36.0395078,33.9976663 36.204778,33.9325695 36.3308478,33.8023759 C36.4521125,33.6773989 36.5201691,33.5077081 36.5199736,33.3308137 L36.519974,11.3935404 L30.4775916,16.7645885 L30.4775916,33.3308137 Z M29.435618,0.0343229771 C29.3481921,0.0343330264 29.2694463,0.0889029566 29.236325,0.172430676 C29.2032038,0.255958396 29.2222794,0.351869092 29.2846025,0.415165191 L33.8244596,5.02336031 L21.5436522,15.9398416 L13.2065637,8.60861817 L0.00469565217,19.8517953 L0.00469565217,24.7083884 L13.2066056,13.4659037 L21.543736,20.7957854 L36.3778882,7.61247275 L40.1288339,11.4208949 C40.1906566,11.4837596 40.2830032,11.5021415 40.3630345,11.4675133 C40.4430657,11.4328851 40.4951213,11.3520226 40.4950528,11.2624379 L40.4950528,0.256621603 C40.4951057,0.197631022 40.4724003,0.141047354 40.431955,0.0993764885 C40.391646,0.0576211883 40.3368681,0.0341907444 40.2797655,0.0342796947 L29.435618,0.0342796947 L29.435618,0.0343229771 Z" id="Shape"></path>
</g>
</g>
</g>
</svg>
\ No newline at end of file \ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<svg width="41px" height="34px" viewBox="0 0 41 34" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<!-- Generator: Sketch 51.1 (57501) - http://www.bohemiancoding.com/sketch -->
<title>Shape</title>
<desc>Created with Sketch.</desc>
<defs></defs>
<g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<g id="折线图" transform="translate(-2740.000000, -171.000000)" fill="#DBDBDB" fill-rule="nonzero">
<g id="图表-表格" transform="translate(2739.500000, 171.000000)">
<path d="M38.5977647,0.00362136345 L3.90223529,0.00362136345 C2.31202353,0.00362136345 1.01094118,1.27503038 1.01094118,2.82897474 L1.01094118,31.0825085 C1.01094118,32.6364529 2.31202353,33.9078619 3.90223529,33.9078619 L38.5977647,33.9078619 C40.1879765,33.9078619 41.4890588,32.6364529 41.4890588,31.0825085 L41.4890588,2.82897474 C41.4890588,1.27503038 40.1879765,0.00362136345 38.5977647,0.00362136345 Z M14.0217647,31.0825085 L3.90223529,31.0825085 L3.90223529,24.0191251 L14.0217647,24.0191251 L14.0217647,31.0825085 Z M14.0217647,21.1937717 L3.90223529,21.1937717 L3.90223529,14.1303882 L14.0217647,14.1303882 L14.0217647,21.1937717 Z M14.0217647,11.3050349 L3.90223529,11.3050349 L3.90223529,4.24165143 L14.0217647,4.24165143 L14.0217647,11.3050349 Z M25.5869412,31.0825085 L16.9130588,31.0825085 L16.9130588,24.0191251 L25.5869412,24.0191251 L25.5869412,31.0825085 Z M25.5869412,21.1937717 L16.9130588,21.1937717 L16.9130588,14.1303882 L25.5869412,14.1303882 L25.5869412,21.1937717 Z M25.5869412,11.3050349 L16.9130588,11.3050349 L16.9130588,4.24165143 L25.5869412,4.24165143 L25.5869412,11.3050349 Z M38.5977647,31.0825085 L28.4782353,31.0825085 L28.4782353,24.0191251 L38.5977647,24.0191251 L38.5977647,31.0825085 Z M38.5977647,21.1937717 L28.4782353,21.1937717 L28.4782353,14.1303882 L38.5977647,14.1303882 L38.5977647,21.1937717 Z M38.5977647,11.3050349 L28.4782353,11.3050349 L28.4782353,4.24165143 L38.5977647,4.24165143 L38.5977647,11.3050349 Z" id="Shape"></path>
</g>
</g>
</g>
</svg>
\ No newline at end of file \ No newline at end of file
This diff could not be displayed because it is too large.
This diff could not be displayed because it is too large.
This diff could not be displayed because it is too large.
This diff is collapsed. Click to expand it.
No preview for this file type
No preview for this file type
No preview for this file type
No preview for this file type
This diff could not be displayed because it is too large.
This diff could not be displayed because it is too large.
This diff could not be displayed because it is too large.
This diff could not be displayed because it is too large.
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!