This commit is contained in:
徐聿成 2021-11-15 10:33:01 +08:00
commit 4daac4d9b0
43 changed files with 16528 additions and 0 deletions

12
.babelrc Normal file
View File

@ -0,0 +1,12 @@
{
"presets": [
["env", {
"modules": false,
"targets": {
"browsers": ["> 1%", "last 2 versions", "not ie <= 8"]
}
}],
"stage-2"
],
"plugins": ["transform-vue-jsx", "transform-runtime"]
}

9
.editorconfig Normal file
View File

@ -0,0 +1,9 @@
root = true
[*]
charset = utf-8
indent_style = space
indent_size = 2
end_of_line = lf
insert_final_newline = true
trim_trailing_whitespace = true

14
.gitignore vendored Normal file
View File

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

10
.postcssrc.js Normal file
View File

@ -0,0 +1,10 @@
// https://github.com/michael-ciniawsky/postcss-load-config
module.exports = {
"plugins": {
"postcss-import": {},
"postcss-url": {},
// to edit target browsers: use "browserslist" field in package.json
"autoprefixer": {}
}
}

21
README.md Normal file
View File

@ -0,0 +1,21 @@
# esg-wireframes
> 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).

41
build/build.js Normal file
View File

@ -0,0 +1,41 @@
'use strict'
require('./check-versions')()
process.env.NODE_ENV = 'production'
const ora = require('ora')
const rm = require('rimraf')
const path = require('path')
const chalk = require('chalk')
const webpack = require('webpack')
const config = require('../config')
const webpackConfig = require('./webpack.prod.conf')
const spinner = ora('building for production...')
spinner.start()
rm(path.join(config.build.assetsRoot, config.build.assetsSubDirectory), err => {
if (err) throw err
webpack(webpackConfig, (err, stats) => {
spinner.stop()
if (err) throw err
process.stdout.write(stats.toString({
colors: true,
modules: false,
children: false, // If you are using ts-loader, setting this to true will make TypeScript errors show up during build.
chunks: false,
chunkModules: false
}) + '\n\n')
if (stats.hasErrors()) {
console.log(chalk.red(' Build failed with errors.\n'))
process.exit(1)
}
console.log(chalk.cyan(' Build complete.\n'))
console.log(chalk.yellow(
' Tip: built files are meant to be served over an HTTP server.\n' +
' Opening index.html over file:// won\'t work.\n'
))
})
})

54
build/check-versions.js Normal file
View File

@ -0,0 +1,54 @@
'use strict'
const chalk = require('chalk')
const semver = require('semver')
const packageConfig = require('../package.json')
const shell = require('shelljs')
function exec (cmd) {
return require('child_process').execSync(cmd).toString().trim()
}
const versionRequirements = [
{
name: 'node',
currentVersion: semver.clean(process.version),
versionRequirement: packageConfig.engines.node
}
]
if (shell.which('npm')) {
versionRequirements.push({
name: 'npm',
currentVersion: exec('npm --version'),
versionRequirement: packageConfig.engines.npm
})
}
module.exports = function () {
const warnings = []
for (let i = 0; i < versionRequirements.length; i++) {
const mod = versionRequirements[i]
if (!semver.satisfies(mod.currentVersion, mod.versionRequirement)) {
warnings.push(mod.name + ': ' +
chalk.red(mod.currentVersion) + ' should be ' +
chalk.green(mod.versionRequirement)
)
}
}
if (warnings.length) {
console.log('')
console.log(chalk.yellow('To use this template, you must update following to modules:'))
console.log()
for (let i = 0; i < warnings.length; i++) {
const warning = warnings[i]
console.log(' ' + warning)
}
console.log()
process.exit(1)
}
}

BIN
build/logo.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.7 KiB

101
build/utils.js Normal file
View File

@ -0,0 +1,101 @@
'use strict'
const path = require('path')
const config = require('../config')
const ExtractTextPlugin = require('extract-text-webpack-plugin')
const packageConfig = require('../package.json')
exports.assetsPath = function (_path) {
const assetsSubDirectory = process.env.NODE_ENV === 'production'
? config.build.assetsSubDirectory
: config.dev.assetsSubDirectory
return path.posix.join(assetsSubDirectory, _path)
}
exports.cssLoaders = function (options) {
options = options || {}
const cssLoader = {
loader: 'css-loader',
options: {
sourceMap: options.sourceMap
}
}
const postcssLoader = {
loader: 'postcss-loader',
options: {
sourceMap: options.sourceMap
}
}
// generate loader string to be used with extract text plugin
function generateLoaders (loader, loaderOptions) {
const loaders = options.usePostCSS ? [cssLoader, postcssLoader] : [cssLoader]
if (loader) {
loaders.push({
loader: loader + '-loader',
options: Object.assign({}, loaderOptions, {
sourceMap: options.sourceMap
})
})
}
// Extract CSS when that option is specified
// (which is the case during production build)
if (options.extract) {
return ExtractTextPlugin.extract({
use: loaders,
fallback: 'vue-style-loader'
})
} else {
return ['vue-style-loader'].concat(loaders)
}
}
// https://vue-loader.vuejs.org/en/configurations/extract-css.html
return {
css: generateLoaders(),
postcss: generateLoaders(),
less: generateLoaders('less'),
sass: generateLoaders('sass', { indentedSyntax: true }),
scss: generateLoaders('sass'),
stylus: generateLoaders('stylus'),
styl: generateLoaders('stylus')
}
}
// Generate loaders for standalone style files (outside of .vue)
exports.styleLoaders = function (options) {
const output = []
const loaders = exports.cssLoaders(options)
for (const extension in loaders) {
const loader = loaders[extension]
output.push({
test: new RegExp('\\.' + extension + '$'),
use: loader
})
}
return output
}
exports.createNotifierCallback = () => {
const notifier = require('node-notifier')
return (severity, errors) => {
if (severity !== 'error') return
const error = errors[0]
const filename = error.file && error.file.split('!').pop()
notifier.notify({
title: packageConfig.name,
message: severity + ': ' + error.name,
subtitle: filename || '',
icon: path.join(__dirname, 'logo.png')
})
}
}

22
build/vue-loader.conf.js Normal file
View File

@ -0,0 +1,22 @@
'use strict'
const utils = require('./utils')
const config = require('../config')
const isProduction = process.env.NODE_ENV === 'production'
const sourceMapEnabled = isProduction
? config.build.productionSourceMap
: config.dev.cssSourceMap
module.exports = {
loaders: utils.cssLoaders({
sourceMap: sourceMapEnabled,
extract: isProduction
}),
cssSourceMap: sourceMapEnabled,
cacheBusting: config.dev.cacheBusting,
transformToRequire: {
video: ['src', 'poster'],
source: 'src',
img: 'src',
image: 'xlink:href'
}
}

View File

@ -0,0 +1,82 @@
'use strict'
const path = require('path')
const utils = require('./utils')
const config = require('../config')
const vueLoaderConfig = require('./vue-loader.conf')
function resolve (dir) {
return path.join(__dirname, '..', dir)
}
module.exports = {
context: path.resolve(__dirname, '../'),
entry: {
app: './src/main.js'
},
output: {
path: config.build.assetsRoot,
filename: '[name].js',
publicPath: process.env.NODE_ENV === 'production'
? config.build.assetsPublicPath
: config.dev.assetsPublicPath
},
resolve: {
extensions: ['.js', '.vue', '.json'],
alias: {
'vue$': 'vue/dist/vue.esm.js',
'@': resolve('src'),
}
},
module: {
rules: [
{
test: /\.vue$/,
loader: 'vue-loader',
options: vueLoaderConfig
},
{
test: /\.js$/,
loader: 'babel-loader',
include: [resolve('src'), resolve('test'), resolve('node_modules/webpack-dev-server/client')]
},
{
test: /\.(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'
}
}

95
build/webpack.dev.conf.js Normal file
View File

@ -0,0 +1,95 @@
'use strict'
const utils = require('./utils')
const webpack = require('webpack')
const config = require('../config')
const merge = require('webpack-merge')
const path = require('path')
const baseWebpackConfig = require('./webpack.base.conf')
const CopyWebpackPlugin = require('copy-webpack-plugin')
const HtmlWebpackPlugin = require('html-webpack-plugin')
const FriendlyErrorsPlugin = require('friendly-errors-webpack-plugin')
const portfinder = require('portfinder')
const HOST = process.env.HOST
const PORT = process.env.PORT && Number(process.env.PORT)
const devWebpackConfig = merge(baseWebpackConfig, {
module: {
rules: utils.styleLoaders({ sourceMap: config.dev.cssSourceMap, usePostCSS: true })
},
// cheap-module-eval-source-map is faster for development
devtool: config.dev.devtool,
// these devServer options should be customized in /config/index.js
devServer: {
clientLogLevel: 'warning',
historyApiFallback: {
rewrites: [
{ from: /.*/, to: path.posix.join(config.dev.assetsPublicPath, 'index.html') },
],
},
hot: true,
contentBase: false, // since we use CopyWebpackPlugin.
compress: true,
host: HOST || config.dev.host,
port: PORT || config.dev.port,
open: config.dev.autoOpenBrowser,
overlay: config.dev.errorOverlay
? { warnings: false, errors: true }
: false,
publicPath: config.dev.assetsPublicPath,
proxy: config.dev.proxyTable,
quiet: true, // necessary for FriendlyErrorsPlugin
watchOptions: {
poll: config.dev.poll,
}
},
plugins: [
new webpack.DefinePlugin({
'process.env': require('../config/dev.env')
}),
new webpack.HotModuleReplacementPlugin(),
new webpack.NamedModulesPlugin(), // HMR shows correct file names in console on update.
new webpack.NoEmitOnErrorsPlugin(),
// https://github.com/ampedandwired/html-webpack-plugin
new HtmlWebpackPlugin({
filename: 'index.html',
template: 'index.html',
inject: true
}),
// copy custom static assets
new CopyWebpackPlugin([
{
from: path.resolve(__dirname, '../static'),
to: config.dev.assetsSubDirectory,
ignore: ['.*']
}
])
]
})
module.exports = new Promise((resolve, reject) => {
portfinder.basePort = process.env.PORT || config.dev.port
portfinder.getPort((err, port) => {
if (err) {
reject(err)
} else {
// publish the new Port, necessary for e2e tests
process.env.PORT = port
// add port to devServer config
devWebpackConfig.devServer.port = port
// Add FriendlyErrorsPlugin
devWebpackConfig.plugins.push(new FriendlyErrorsPlugin({
compilationSuccessInfo: {
messages: [`Your application is running here: http://${devWebpackConfig.devServer.host}:${port}`],
},
onErrors: config.dev.notifyOnErrors
? utils.createNotifierCallback()
: undefined
}))
resolve(devWebpackConfig)
}
})
})

145
build/webpack.prod.conf.js Normal file
View File

@ -0,0 +1,145 @@
'use strict'
const path = require('path')
const utils = require('./utils')
const webpack = require('webpack')
const config = require('../config')
const merge = require('webpack-merge')
const baseWebpackConfig = require('./webpack.base.conf')
const CopyWebpackPlugin = require('copy-webpack-plugin')
const HtmlWebpackPlugin = require('html-webpack-plugin')
const ExtractTextPlugin = require('extract-text-webpack-plugin')
const OptimizeCSSPlugin = require('optimize-css-assets-webpack-plugin')
const UglifyJsPlugin = require('uglifyjs-webpack-plugin')
const env = require('../config/prod.env')
const webpackConfig = merge(baseWebpackConfig, {
module: {
rules: utils.styleLoaders({
sourceMap: config.build.productionSourceMap,
extract: true,
usePostCSS: true
})
},
devtool: config.build.productionSourceMap ? config.build.devtool : false,
output: {
path: config.build.assetsRoot,
filename: utils.assetsPath('js/[name].[chunkhash].js'),
chunkFilename: utils.assetsPath('js/[id].[chunkhash].js')
},
plugins: [
// http://vuejs.github.io/vue-loader/en/workflow/production.html
new webpack.DefinePlugin({
'process.env': env
}),
new UglifyJsPlugin({
uglifyOptions: {
compress: {
warnings: false
}
},
sourceMap: config.build.productionSourceMap,
parallel: true
}),
// extract css into its own file
new ExtractTextPlugin({
filename: utils.assetsPath('css/[name].[contenthash].css'),
// Setting the following option to `false` will not extract CSS from codesplit chunks.
// Their CSS will instead be inserted dynamically with style-loader when the codesplit chunk has been loaded by webpack.
// It's currently set to `true` because we are seeing that sourcemaps are included in the codesplit bundle as well when it's `false`,
// increasing file size: https://github.com/vuejs-templates/webpack/issues/1110
allChunks: true,
}),
// Compress extracted CSS. We are using this plugin so that possible
// duplicated CSS from different components can be deduped.
new OptimizeCSSPlugin({
cssProcessorOptions: config.build.productionSourceMap
? { safe: true, map: { inline: false } }
: { safe: true }
}),
// generate dist index.html with correct asset hash for caching.
// you can customize output by editing /index.html
// see https://github.com/ampedandwired/html-webpack-plugin
new HtmlWebpackPlugin({
filename: config.build.index,
template: 'index.html',
inject: true,
minify: {
removeComments: true,
collapseWhitespace: true,
removeAttributeQuotes: true
// more options:
// https://github.com/kangax/html-minifier#options-quick-reference
},
// necessary to consistently work with multiple chunks via CommonsChunkPlugin
chunksSortMode: 'dependency'
}),
// keep module.id stable when vendor modules does not change
new webpack.HashedModuleIdsPlugin(),
// enable scope hoisting
new webpack.optimize.ModuleConcatenationPlugin(),
// split vendor js into its own file
new webpack.optimize.CommonsChunkPlugin({
name: 'vendor',
minChunks (module) {
// any required modules inside node_modules are extracted to vendor
return (
module.resource &&
/\.js$/.test(module.resource) &&
module.resource.indexOf(
path.join(__dirname, '../node_modules')
) === 0
)
}
}),
// extract webpack runtime and module manifest to its own file in order to
// prevent vendor hash from being updated whenever app bundle is updated
new webpack.optimize.CommonsChunkPlugin({
name: 'manifest',
minChunks: Infinity
}),
// This instance extracts shared chunks from code splitted chunks and bundles them
// in a separate chunk, similar to the vendor chunk
// see: https://webpack.js.org/plugins/commons-chunk-plugin/#extra-async-commons-chunk
new webpack.optimize.CommonsChunkPlugin({
name: 'app',
async: 'vendor-async',
children: true,
minChunks: 3
}),
// copy custom static assets
new CopyWebpackPlugin([
{
from: path.resolve(__dirname, '../static'),
to: config.build.assetsSubDirectory,
ignore: ['.*']
}
])
]
})
if (config.build.productionGzip) {
const CompressionWebpackPlugin = require('compression-webpack-plugin')
webpackConfig.plugins.push(
new CompressionWebpackPlugin({
asset: '[path].gz[query]',
algorithm: 'gzip',
test: new RegExp(
'\\.(' +
config.build.productionGzipExtensions.join('|') +
')$'
),
threshold: 10240,
minRatio: 0.8
})
)
}
if (config.build.bundleAnalyzerReport) {
const BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin
webpackConfig.plugins.push(new BundleAnalyzerPlugin())
}
module.exports = webpackConfig

7
config/dev.env.js Normal file
View File

@ -0,0 +1,7 @@
'use strict'
const merge = require('webpack-merge')
const prodEnv = require('./prod.env')
module.exports = merge(prodEnv, {
NODE_ENV: '"development"'
})

69
config/index.js Normal file
View File

@ -0,0 +1,69 @@
'use strict'
// Template version: 1.3.1
// see http://vuejs-templates.github.io/webpack for documentation.
const path = require('path')
module.exports = {
dev: {
// Paths
assetsSubDirectory: 'static',
assetsPublicPath: '/',
proxyTable: {},
// Various Dev Server settings
host: 'localhost', // can be overwritten by process.env.HOST
port: 8080, // can be overwritten by process.env.PORT, if port is in use, a free one will be determined
autoOpenBrowser: false,
errorOverlay: true,
notifyOnErrors: true,
poll: false, // https://webpack.js.org/configuration/dev-server/#devserver-watchoptions-
/**
* Source Maps
*/
// https://webpack.js.org/configuration/devtool/#development
devtool: 'cheap-module-eval-source-map',
// If you have problems debugging vue-files in devtools,
// set this to false - it *may* help
// https://vue-loader.vuejs.org/en/options.html#cachebusting
cacheBusting: true,
cssSourceMap: true
},
build: {
// Template for index.html
index: path.resolve(__dirname, '../dist/index.html'),
// Paths
assetsRoot: path.resolve(__dirname, '../dist'),
assetsSubDirectory: 'static',
assetsPublicPath: '/',
/**
* Source Maps
*/
productionSourceMap: true,
// https://webpack.js.org/configuration/devtool/#production
devtool: '#source-map',
// Gzip off by default as many popular static hosts such as
// Surge or Netlify already gzip all static assets for you.
// Before setting to `true`, make sure to:
// npm install --save-dev compression-webpack-plugin
productionGzip: false,
productionGzipExtensions: ['js', 'css'],
// Run the build command with an extra argument to
// View the bundle analyzer report after build finishes:
// `npm run build --report`
// Set to `true` or `false` to always turn it on or off
bundleAnalyzerReport: process.env.npm_config_report
}
}

4
config/prod.env.js Normal file
View File

@ -0,0 +1,4 @@
'use strict'
module.exports = {
NODE_ENV: '"production"'
}

12
index.html Normal file
View File

@ -0,0 +1,12 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1.0">
<title>esg-wireframes</title>
</head>
<body>
<div id="app"></div>
<!-- built files will be auto injected -->
</body>
</html>

12737
package-lock.json generated Normal file

File diff suppressed because it is too large Load Diff

67
package.json Normal file
View File

@ -0,0 +1,67 @@
{
"name": "esg-wireframes",
"version": "1.0.0",
"description": "A Vue.js project",
"author": "徐聿成 <xuyucheng@fecr.com.cn>",
"private": true,
"scripts": {
"dev": "webpack-dev-server --inline --progress --config build/webpack.dev.conf.js",
"start": "npm run dev",
"build": "node build/build.js"
},
"dependencies": {
"axios": "^0.24.0",
"element-ui": "^2.15.6",
"vue": "^2.5.2",
"vue-router": "^3.0.1"
},
"devDependencies": {
"autoprefixer": "^7.1.2",
"babel-core": "^6.22.1",
"babel-helper-vue-jsx-merge-props": "^2.0.3",
"babel-loader": "^7.1.1",
"babel-plugin-syntax-jsx": "^6.18.0",
"babel-plugin-transform-runtime": "^6.22.0",
"babel-plugin-transform-vue-jsx": "^3.5.0",
"babel-preset-env": "^1.3.2",
"babel-preset-stage-2": "^6.22.0",
"chalk": "^2.0.1",
"copy-webpack-plugin": "^4.0.1",
"css-loader": "^0.28.0",
"extract-text-webpack-plugin": "^3.0.0",
"file-loader": "^1.1.4",
"friendly-errors-webpack-plugin": "^1.6.1",
"html-webpack-plugin": "^2.30.1",
"node-notifier": "^5.1.2",
"node-sass": "^4.14.1",
"optimize-css-assets-webpack-plugin": "^3.2.0",
"ora": "^1.2.0",
"portfinder": "^1.0.13",
"postcss-import": "^11.0.0",
"postcss-loader": "^2.0.8",
"postcss-url": "^7.2.1",
"rimraf": "^2.6.0",
"sass-loader": "^7.3.1",
"semver": "^5.3.0",
"shelljs": "^0.7.6",
"style-loader": "^3.3.1",
"uglifyjs-webpack-plugin": "^1.1.1",
"url-loader": "^0.5.8",
"vue-loader": "^13.3.0",
"vue-style-loader": "^3.0.1",
"vue-template-compiler": "^2.5.2",
"webpack": "^3.6.0",
"webpack-bundle-analyzer": "^2.9.0",
"webpack-dev-server": "^2.9.1",
"webpack-merge": "^4.1.0"
},
"engines": {
"node": ">= 6.0.0",
"npm": ">= 3.0.0"
},
"browserslist": [
"> 1%",
"last 2 versions",
"not ie <= 8"
]
}

15
src/App.vue Normal file
View File

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

64
src/api/api.js Normal file
View File

@ -0,0 +1,64 @@
import request from './request'
var auth = "/tfse_user"
var user = "/server_tfse"
export function login(url, data) {
return request.UserPost(auth + url, data)
}
export function register(url, data) {
return request.UserPost(auth + url, data)
}
export function change_password(url, data) {
return request.UserPost(auth + url, data)
}
export function mail(url, data) {
return request.UserPost(auth + url, data)
}
export function get(url, data) {
return request.get(user + url, data)
}
export function JsonPost(url, data) {
return request.JsonPost(user + url, data)
}
export function post(url, data) {
return request.post(user + url, data)
}
export function BlobPost(url, data) {
return request.BlobPost(user + url, data)
}
export function BlobGet(url, data) {
return request.BlobGet(user + url, data)
}
export function VerifyPost(url, data) {
return request.VerifyPost(user + url, data)
}
export function user_get(url, data) {
return request.get(auth + url, data)
}
export function user_JsonPost(url, data) {
return request.JsonPost(auth + url, data)
}
export function user_post(url, data) {
return request.post(auth + url, data)
}
export function user_BlobPost(url, data) {
return request.BlobPost(auth + url, data)
}
export function user_BlobGet(url, data) {
return request.BlobGet(auth + url, data)
}

159
src/api/request.js Normal file
View File

@ -0,0 +1,159 @@
import axios from 'axios'
import store from "store/index"
import router from 'router/index'
import { Message } from 'element-ui';
import { message } from 'utils/message.js'
// import { Loading } from 'element-ui'
//创建axios实例
axios.defaults.timeout = 10000
axios.defaults.baseURL = 'https://service.fecribd.com'
// axios.defaults.baseURL = 'http://192.168.99.108:5000/'
//请求拦截器
axios.interceptors.request.use(config => {
const token = store.state.token
if (token) {
config.headers.token = token
}
return config
}, error => {
Promise.reject(error)
})
//响应拦截器
axios.interceptors.response.use(response => {
if (response.status === 200) {
return response;
} else {
return response;
}
}, error => {
const { status } = error.response;
switch (status) {
case 300:
Message({
message: "重定向",
type: "info",
});
break;
case 400:
Message({
message: "请求错误,请重试",
type: "warning",
});
break;
case 401:
message.warning("请登录");
break;
case 500:
message.warning("服务器错误");
break
}
return Promise.reject(error);
});
export default {
get: function (path = '', data = {}) {
return new Promise(function (resolve, reject) {
axios.get(path, {
params: data
})
.then(function (response) {
resolve(response.data);
})
.catch(function (error) {
reject(error);
});
});
},
post: function (path = '', data = {}) {
let formData = new FormData()
for (let key in data) {
formData.append(key, data[key])
}
return new Promise(function (resolve, reject) {
axios.post(path, formData, {
headers: {
'Content-Type': 'multipart/form-data'
}
})
.then(function (response) {
resolve(response.data);
})
.catch(function (error) {
reject(error);
});
});
},
JsonPost: function (path = '', data = {}) {
return new Promise(function (resolve, reject) {
axios.post(path, data)
.then(function (response) {
resolve(response.data);
})
.catch(function (error) {
reject(error);
});
});
},
BlobGet: function (path = '') {
return new Promise(function (resolve, reject) {
axios.get(
path, { responseType: 'blob' })
.then(function (response) {
const blob = new Blob([response.data]);
resolve(URL.createObjectURL(blob));
})
.catch(function (error) {
reject(error);
});
})
},
BlobPost: function (path = '', data = {}) {
return new Promise(function (resolve, reject) {
axios.post(
path, data, { responseType: 'blob' })
.then(function (response) {
const blob = new Blob([response.data]);
resolve(URL.createObjectURL(blob));
})
.catch(function (error) {
reject(error);
});
})
},
VerifyPost: function (path = '', data = {}) {
return new Promise(function (resolve, reject) {
axios.post(
path, data, {
headers: {
verify: rsaKey(Date.now().toString())
}
})
.then(function (response) {
resolve(response.data);
})
.catch(function (error) {
reject(error);
});
})
},
UserPost: function (path = '', data = {}) {
return new Promise(function (resolve, reject) {
axios.post(
path, data, {
headers: {
block: rsaKey(Date.now().toString())
}
})
.then(function (response) {
resolve(response.data);
})
.catch(function (error) {
reject(error);
});
})
},
}

Binary file not shown.

View File

@ -0,0 +1,83 @@
html,
body,
#app{
height: 100%;
font-family: 'SR';
margin: 0;
padding: 0;
background: #fff;
}
@font-face{
font-family: 'SR';
src: url('./SourceHanSansK-Normal.ttf') format('truetype');
font-weight: normal;
font-style: normal;
}
.el-container{
height: 100%;
flex-wrap: wrap;
}
h1 {
color: #fff;
font-size: 100px;
font-weight: 800;
}
h2{
color:#ADADAD;
font-size: 24px;
}
h3{
color:#ADADAD;
}
.strip{
background-color: #EAEAEA;
display: flex;
justify-content: center;
align-items: center;
margin: 10px 0;
}
.strip-image{
background-color: #F8F8F8;
width: 100%;
height: 300px;
text-align: center;
line-height: 300px;
i{
font-size: 30px;
color: #ADADAD;
}
}
// flex盒 --- space-between
.flex-sb{
display: flex;
justify-content: space-between;
align-items: center;
}
// 一级标题
.pri-title{
font-weight: 800;
font-size: 20px;
}
// 二级标题
.sub-title{
font-weight: 600;
font-size: 16px;
}
.badge{
width: 10px;
height: 10px;
border-radius: 50%;
background-color: #26CEB9;
}

37
src/assets/css/user.scss Normal file
View File

@ -0,0 +1,37 @@
.el-main {
height: calc(100% - 80px);
background-color: #00102b;
display: flex;
justify-content: center;
align-items: center;
.form-box {
position: relative;
bottom: 80px;
/deep/ .el-radio__inner {
border-radius: 0;
}
.el-button{
width:100%;
}
.el-form {
width: 600px;
padding: 50px;
background-color: #fff;
.el-form-item {
padding:10px 0;
/deep/ .el-input__inner {
border: none;
border-radius: 0px;
border-bottom: 1px solid #707070;
font-family: "SR";
}
}
}
}
}

View File

@ -0,0 +1,97 @@
<template>
<el-aside width="200px">
<el-menu
:default-active="activeIndex"
background-color="transparent"
text-color="#fff"
active-text-color="#fff"
@open="handleOpen"
unique-opened
>
<el-submenu index="1">
<template slot="title">
<span>结论</span>
</template>
<el-menu-item index="1-1">结论</el-menu-item>
</el-submenu>
<el-submenu index="2">
<template slot="title">
<span>环境</span>
</template>
<el-menu-item index="2-1">数据安全与隐私保护</el-menu-item>
<el-menu-item index="2-2">产品质量</el-menu-item>
<el-menu-item index="2-3">员工</el-menu-item>
<el-menu-item index="2-4">社区</el-menu-item>
<el-menu-item index="2-5">扶贫与慈善</el-menu-item>
</el-submenu>
<el-submenu index="3">
<template slot="title">
<span>社会</span>
</template>
<el-menu-item index="3-1">数据安全与隐私保护</el-menu-item>
<el-menu-item index="3-2">产品质量</el-menu-item>
<el-menu-item index="3-3">员工</el-menu-item>
<el-menu-item index="3-4">社区</el-menu-item>
<el-menu-item index="3-5">扶贫与慈善</el-menu-item>
</el-submenu>
<el-submenu index="4">
<template slot="title">
<span>治理</span>
</template>
<el-menu-item index="4-1">数据安全与隐私保护</el-menu-item>
<el-menu-item index="4-2">产品质量</el-menu-item>
<el-menu-item index="4-3">员工</el-menu-item>
<el-menu-item index="4-4">社区</el-menu-item>
<el-menu-item index="4-5">扶贫与慈善</el-menu-item>
</el-submenu>
</el-menu>
</el-aside>
</template>
<script>
export default {
data() {
return {
activeIndex: "1",
};
},
methods: {
handleOpen(key) {
this.$emit('getActiveIndex',key)
},
},
};
</script>
<style lang='scss' scoped>
.el-aside {
background-color: #31364a;
overflow: hidden;
}
.el-menu {
width: 90%;
padding: 50px 0 0 20px;
border: none;
}
/deep/ .el-submenu__title:hover {
background-color: transparent !important;
}
.el-menu--horizontal {
border-bottom: none;
}
.el-menu-item.is-active {
background-color: #fff !important;
color: #000 !important;
border-top-left-radius: 50px;
border-bottom-left-radius: 50px;
}
.el-menu-item:hover {
background-color: #fff !important;
color: #000 !important;
}
</style>

View File

@ -0,0 +1,34 @@
<template>
<div class="foot">
<h1>Footer</h1>
</div>
</template>
<script>
export default {
data () {
return {
};
},
components: {},
computed: {},
mounted: {},
methods: {}
}
</script>
<style lang='scss' scoped>
.foot{
width: 100%;
height: 400px;
margin-top: 40px;
background-color: #D8DEE5;
display: flex;
align-items: center;
justify-content: center;
}
</style>

View File

@ -0,0 +1,271 @@
<template>
<el-header :style="{ background: bgcolor, height: '80px' }">
<el-row type="flex" justify="space-around" align="center">
<el-col :span="6">
<svg
xmlns="http://www.w3.org/2000/svg"
width="149.184"
height="39.413"
viewBox="0 0 149.184 39.413"
>
<g
id="组_485"
data-name="组 485"
transform="translate(893.665 -119.214)"
>
<g
id="组_483"
data-name="组 483"
transform="translate(-833.367 124.492)"
>
<path
id="路径_2152"
data-name="路径 2152"
d="M-659.633,157.679v-1.2q2.283-.8,2.109-2.813v-7.254h-2.2v-1.449h4.48v8.549q.087,2.732,3.25,2.732h12.562v1.446h-12.649c-1.875,0-3.52-.51-4.281-1.527C-657.062,157.123-657.935,157.358-659.633,157.679Zm2.256-14.105a35.1,35.1,0,0,0-1.493-3.814h2.02a15.473,15.473,0,0,1,1.581,3.814Zm3.366,2.835v-1.446h14.586v1.446h-4.359V152.2c0,.673.284.964.966.964h.544c.78,0,1.054-.25,1.054-.884v-.717h1.792v.884q.086,2.251-2.284,2.17h-1.721q-2.636.081-2.548-2.411v-5.8h-2.584a7.926,7.926,0,0,1-5.359,8.218V153.18c2.227-1.271,3.22-3.718,3.162-6.771Zm1.054-4.987v-1.447h11.947v1.447Z"
transform="translate(659.721 -139.742)"
fill="#fff"
/>
<path
id="路径_2153"
data-name="路径 2153"
d="M-552.561,147.76h-7.5v-3.536h-2.547v3.536h-5.479a32.037,32.037,0,0,0,3.863-5.325H-551.5v-1.447h-11.974c.2-.428.383-.862.539-1.3h-2.678s-.161.485-.534,1.3h-5.636v1.447h4.908a30.27,30.27,0,0,1-3.711,5.325v1.527h7.982V155.2c.057.643-.352.964-1.23.964h-1.669v1.474h2.635q2.9.079,2.811-2.571v-5.785h7.5Zm-14.878,2.733a9.611,9.611,0,0,1-4.347,5.8v1.359a9.366,9.366,0,0,0,6.72-7.159Zm11.6,0h-2.372a9.365,9.365,0,0,0,6.719,7.159v-1.359A9.611,9.611,0,0,1-555.836,150.492Z"
transform="translate(594.451 -139.69)"
fill="#fff"
/>
<path
id="路径_2154"
data-name="路径 2154"
d="M-393.106,157.651V145.8a7.355,7.355,0,0,1-1.944.993v-1.366a7.931,7.931,0,0,0,3.458-5.723h2.431a10.488,10.488,0,0,1-1.75,4.343v13.6Zm4.118-15.273v-1.366h5.9v-1.3h2.662v1.3h5.9v1.366Zm14.209,1.84v1.366h-13.958v-1.366Zm0,3.233v1.366h-13.958v-1.366Zm-13.972,10.206V150.8h13.971v4.449q.085,2.49-2.635,2.411Zm2.2-1.366h8.437q1.318,0,1.23-.964v-3.163h-9.666Z"
transform="translate(463.268 -139.703)"
fill="#fff"
/>
<path
id="路径_2155"
data-name="路径 2155"
d="M-463.331,148.321V147.2c-4.447-.856-6.61-2.141-6.61-3.908V142.25h-2.31v1.039c0,1.768-2.133,3.052-6.48,3.908v1.125c3.458-.321,5.976-1.178,7.635-2.571C-469.556,147.09-467.008,147.947-463.331,148.321Zm-11.275-6.715h8.692a5.8,5.8,0,0,1-.947,2.371h1.624a6.4,6.4,0,0,0,1.35-3.582h-2v0h-7.864a2.609,2.609,0,0,0,.393-.7H-475.6c-.3,1.554-2.14,2.825-2.787,3.086v1.193A6.958,6.958,0,0,0-474.607,141.607Zm-6.624,6.715a9.914,9.914,0,0,0,1.955-5.075,7.451,7.451,0,0,0-1.794-3.541h-2.487c1.191,1.141,2.327,2.54,2.327,3.559a10.263,10.263,0,0,1-2.489,5.056Zm8.888,3.255h-2.491c0,2.461-3.092,3.919-9.015,4.621v1.458c4.52-.374,8.384-1.3,10.26-3.1,1.876,1.794,5.74,2.722,10.26,3.1V156.2C-469.251,155.5-472.343,154.038-472.343,151.576Zm7.22,2.734v-5.017H-482.1v5.017h2.287v-3.638h12.406v3.638Z"
transform="translate(529.179 -139.696)"
fill="#fff"
/>
</g>
<g
id="组_484"
data-name="组 484"
transform="translate(-893.665 119.214)"
>
<path
id="路径_2156"
data-name="路径 2156"
d="M-892.008,134.326a1.633,1.633,0,0,0,1.325-.681l0,0A27.594,27.594,0,0,1-868.5,122.5a27.561,27.561,0,0,1,20.394,8.988l0,0a1.633,1.633,0,0,0,1.213.543,1.644,1.644,0,0,0,1.644-1.644,1.635,1.635,0,0,0-.523-1.2,30.83,30.83,0,0,0-22.731-9.968,30.87,30.87,0,0,0-24.855,12.531h0a1.629,1.629,0,0,0-.3.94A1.64,1.64,0,0,0-892.008,134.326Z"
transform="translate(893.652 -119.214)"
fill="#fff"
/>
<path
id="路径_2157"
data-name="路径 2157"
d="M-832.945,152.6a1.642,1.642,0,0,0-.327-.986h0a25.5,25.5,0,0,0-19.907-9.54,25.489,25.489,0,0,0-19.44,8.978l.006,0a1.627,1.627,0,0,0-.4,1.062,1.622,1.622,0,0,0,.084.493h0l.008.019a1.618,1.618,0,0,0,.151.331,18.388,18.388,0,0,0,16.859,11.065,18.329,18.329,0,0,0,12.893-5.286,1.681,1.681,0,0,0,.178-.172l.018-.018,0,0a1.631,1.631,0,0,0,.4-1.066,1.645,1.645,0,0,0-1.645-1.645,1.638,1.638,0,0,0-1.119.442h0l-.024.023-.032.031a15.066,15.066,0,0,1-10.668,4.411,15.106,15.106,0,0,1-13.5-8.325,22.172,22.172,0,0,1,16.23-7.052,22.206,22.206,0,0,1,17.321,8.295h0a1.647,1.647,0,0,0,1.262.587A1.65,1.65,0,0,0-832.945,152.6Z"
transform="translate(878.335 -136.183)"
fill="#fff"
/>
<path
id="路径_2158"
data-name="路径 2158"
d="M-842.005,175.508h0l-.008-.019a1.612,1.612,0,0,0-.151-.331,18.388,18.388,0,0,0-16.86-11.065,18.328,18.328,0,0,0-12.892,5.286,1.684,1.684,0,0,0-.179.172l-.018.018,0,0a1.631,1.631,0,0,0-.4,1.066,1.646,1.646,0,0,0,1.645,1.646,1.635,1.635,0,0,0,1.117-.444l0,0,.024-.023.032-.03a15.064,15.064,0,0,1,10.668-4.412,15.106,15.106,0,0,1,13.5,8.325,22.172,22.172,0,0,1-16.23,7.052,22.207,22.207,0,0,1-17.322-8.295h0a1.65,1.65,0,0,0-1.278-.6A1.65,1.65,0,0,0-882,175.5a1.635,1.635,0,0,0,.345,1l0,0c.045.056.094.108.139.164l0,0a25.491,25.491,0,0,0,19.766,9.374,25.49,25.49,0,0,0,19.44-8.978l-.006,0a1.626,1.626,0,0,0,.4-1.061A1.617,1.617,0,0,0-842.005,175.508Z"
transform="translate(885.01 -152.525)"
fill="#fff"
/>
<path
id="路径_2159"
data-name="路径 2159"
d="M-846.9,213.5a1.637,1.637,0,0,0-1.325.679l0,0a27.6,27.6,0,0,1-22.182,11.153,27.561,27.561,0,0,1-20.394-8.989h0a1.641,1.641,0,0,0-1.218-.537,1.643,1.643,0,0,0-1.643,1.643,1.634,1.634,0,0,0,.529,1.2,30.83,30.83,0,0,0,22.726,9.962A30.865,30.865,0,0,0-845.65,216.2a1.629,1.629,0,0,0,.394-1.057A1.644,1.644,0,0,0-846.9,213.5Z"
transform="translate(893.665 -189.199)"
fill="#fff"
/>
</g>
<path
id="路径_2160"
data-name="路径 2160"
d="M-607.421,231.034h3.033a3.766,3.766,0,0,1,1.365.212,2.34,2.34,0,0,1,.847.537,1.792,1.792,0,0,1,.433.733,2.713,2.713,0,0,1,.122.783,1.967,1.967,0,0,1-.146.749,2.1,2.1,0,0,1-.42.652,2.382,2.382,0,0,1-.67.493,2.463,2.463,0,0,1-.884.245l2.449,3.694h-1.462l-2.193-3.568h-1.3v3.568h-1.17Zm1.17,3.568h1.535a4.342,4.342,0,0,0,.676-.051,1.888,1.888,0,0,0,.6-.188,1.069,1.069,0,0,0,.42-.395,1.257,1.257,0,0,0,.159-.669,1.26,1.26,0,0,0-.159-.669,1.059,1.059,0,0,0-.42-.394,1.922,1.922,0,0,0-.6-.19,4.5,4.5,0,0,0-.676-.051h-1.535Z"
transform="translate(-212.465 -82.999)"
fill="#fff"
/>
<path
id="路径_2161"
data-name="路径 2161"
d="M-431.477,231.034h3.033a3.766,3.766,0,0,1,1.365.212,2.341,2.341,0,0,1,.847.537,1.792,1.792,0,0,1,.433.733,2.715,2.715,0,0,1,.122.783,1.968,1.968,0,0,1-.146.749,2.1,2.1,0,0,1-.42.652,2.383,2.383,0,0,1-.67.493,2.463,2.463,0,0,1-.884.245l2.449,3.694h-1.462L-429,235.563h-1.3v3.568h-1.17Zm1.17,3.568h1.535a4.342,4.342,0,0,0,.676-.051,1.888,1.888,0,0,0,.6-.188,1.067,1.067,0,0,0,.42-.395,1.258,1.258,0,0,0,.159-.669,1.26,1.26,0,0,0-.159-.669,1.058,1.058,0,0,0-.42-.394,1.922,1.922,0,0,0-.6-.19,4.5,4.5,0,0,0-.676-.051h-1.535Z"
transform="translate(-343.06 -82.999)"
fill="#fff"
/>
<path
id="路径_2162"
data-name="路径 2162"
d="M-652.694,232.168v.875h-4.088v2.481h3.585v.875h-3.585v3.574h-1.038v-7.8Z"
transform="translate(-175.056 -83.84)"
fill="#fff"
/>
<path
id="路径_2163"
data-name="路径 2163"
d="M-635.187,232.168l3.05,7.8h-1.148l-.853-2.35h-3.3l-.875,2.35h-1.06l3.039-7.8Zm.721,4.58-1.3-3.64h-.022l-1.323,3.64Z"
transform="translate(-188.749 -83.84)"
fill="#fff"
/>
<path
id="路径_2164"
data-name="路径 2164"
d="M-573.892,232.168v.875h-4.351v2.481h4.055v.875h-4.055v2.7h4.383v.875h-5.422v-7.8Z"
transform="translate(-233.352 -83.84)"
fill="#fff"
/>
<path
id="路径_2165"
data-name="路径 2165"
d="M-552.745,232.168l3.05,7.8h-1.148l-.853-2.35H-555l-.875,2.35h-1.06l3.039-7.8Zm.721,4.58-1.3-3.64h-.022l-1.323,3.64Z"
transform="translate(-249.942 -83.84)"
fill="#fff"
/>
<path
id="路径_2166"
data-name="路径 2166"
d="M-523.271,232.7a2.2,2.2,0,0,0-1.328-.377,3.186,3.186,0,0,0-.645.065,1.712,1.712,0,0,0-.563.219,1.15,1.15,0,0,0-.394.41,1.266,1.266,0,0,0-.148.639.814.814,0,0,0,.213.585,1.579,1.579,0,0,0,.569.366,4.751,4.751,0,0,0,.8.235q.448.093.913.2t.913.257a3.015,3.015,0,0,1,.8.4,1.9,1.9,0,0,1,.569.634,1.958,1.958,0,0,1,.213.962,1.959,1.959,0,0,1-.279,1.066,2.294,2.294,0,0,1-.716.721,3.109,3.109,0,0,1-.978.4,4.75,4.75,0,0,1-1.077.126,4.575,4.575,0,0,1-1.241-.164,3.062,3.062,0,0,1-1.028-.5,2.355,2.355,0,0,1-.7-.852,2.746,2.746,0,0,1-.257-1.23h.984a1.761,1.761,0,0,0,.192.847,1.737,1.737,0,0,0,.5.585,2.119,2.119,0,0,0,.727.339,3.33,3.33,0,0,0,.853.109,3.891,3.891,0,0,0,.7-.065,2.084,2.084,0,0,0,.64-.224,1.271,1.271,0,0,0,.459-.432,1.277,1.277,0,0,0,.175-.7.981.981,0,0,0-.213-.656,1.57,1.57,0,0,0-.569-.41,4.154,4.154,0,0,0-.8-.257l-.913-.2q-.465-.1-.913-.24a3.288,3.288,0,0,1-.8-.361,1.722,1.722,0,0,1-.568-.579,1.7,1.7,0,0,1-.213-.891,2.065,2.065,0,0,1,.24-1.022,2.094,2.094,0,0,1,.639-.71,2.866,2.866,0,0,1,.907-.415,4.009,4.009,0,0,1,1.044-.137,4.176,4.176,0,0,1,1.115.142,2.531,2.531,0,0,1,.9.448,2.165,2.165,0,0,1,.612.771,2.755,2.755,0,0,1,.246,1.109h-.984A1.627,1.627,0,0,0-523.271,232.7Z"
transform="translate(-271.693 -83.305)"
fill="#fff"
/>
<path
id="路径_2167"
data-name="路径 2167"
d="M-501.631,233.043v-.875h6.242v.875h-2.6v6.93h-1.038v-6.93Z"
transform="translate(-290.988 -83.84)"
fill="#fff"
/>
<path
id="路径_2168"
data-name="路径 2168"
d="M-458.661,232.737a2.413,2.413,0,0,0-1.416-.415,2.533,2.533,0,0,0-1.2.262,2.359,2.359,0,0,0-.82.7,3.049,3.049,0,0,0-.476,1.011,4.522,4.522,0,0,0-.153,1.181,5.055,5.055,0,0,0,.153,1.262,3.02,3.02,0,0,0,.476,1.038,2.346,2.346,0,0,0,.825.7,2.567,2.567,0,0,0,1.2.262,2.318,2.318,0,0,0,.913-.169,2.066,2.066,0,0,0,.689-.47,2.166,2.166,0,0,0,.454-.716,2.979,2.979,0,0,0,.2-.9h1.038a3.546,3.546,0,0,1-1.017,2.3,3.289,3.289,0,0,1-2.361.82,3.757,3.757,0,0,1-1.585-.312,3.109,3.109,0,0,1-1.126-.858,3.682,3.682,0,0,1-.672-1.29,5.5,5.5,0,0,1-.224-1.6,5.2,5.2,0,0,1,.24-1.6,3.853,3.853,0,0,1,.7-1.306,3.286,3.286,0,0,1,1.159-.88,3.736,3.736,0,0,1,1.591-.322,4.013,4.013,0,0,1,1.159.164,3.117,3.117,0,0,1,.973.481,2.71,2.71,0,0,1,.71.792,2.908,2.908,0,0,1,.372,1.1h-1.038A1.931,1.931,0,0,0-458.661,232.737Z"
transform="translate(-319.098 -83.305)"
fill="#fff"
/>
<path
id="路径_2169"
data-name="路径 2169"
d="M-397.218,232.168v.875h-4.351v2.481h4.055v.875h-4.055v2.7h4.383v.875h-5.421v-7.8Z"
transform="translate(-364.489 -83.84)"
fill="#fff"
/>
<path
id="路径_2170"
data-name="路径 2170"
d="M-374.018,232.168a3.891,3.891,0,0,1,2.776.918,3.677,3.677,0,0,1,.973,2.8,6.321,6.321,0,0,1-.219,1.743,3.26,3.26,0,0,1-.678,1.279,2.94,2.94,0,0,1-1.17.793,4.69,4.69,0,0,1-1.683.273H-376.7v-7.8Zm.087,6.93a4.339,4.339,0,0,0,.437-.027,2.441,2.441,0,0,0,.557-.131,2.55,2.55,0,0,0,.585-.3,1.974,1.974,0,0,0,.519-.536,2.994,2.994,0,0,0,.377-.847,4.454,4.454,0,0,0,.147-1.23,5.219,5.219,0,0,0-.137-1.252,2.406,2.406,0,0,0-.448-.94,1.972,1.972,0,0,0-.8-.59,3.2,3.2,0,0,0-1.213-.2h-1.749V239.1Z"
transform="translate(-383.721 -83.84)"
fill="#fff"
/>
<path
id="路径_2171"
data-name="路径 2171"
d="M-345.633,232.168v7.8h-1.038v-7.8Z"
transform="translate(-406.008 -83.84)"
fill="#fff"
/>
<path
id="路径_2172"
data-name="路径 2172"
d="M-339.08,233.043v-.875h6.241v.875h-2.6v6.93h-1.038v-6.93Z"
transform="translate(-411.642 -83.84)"
fill="#fff"
/>
</g></svg
></el-col>
<el-col :span="12">
<el-menu
mode="horizontal"
:default-active="'0'"
background-color="transparent"
text-color="#fff"
active-text-color="#fff"
>
<el-menu-item
v-for="item in menuItem"
:key="item.index"
:index="item.index.toString()"
>
{{ item.title }}
</el-menu-item>
</el-menu>
</el-col>
<el-col :span="6">
<el-link :underline="false">登陆/注册</el-link>
<el-avatar
src="https://cube.elemecdn.com/3/7c/3ea6beec64369c2642b92c6726f1epng.png"
></el-avatar>
</el-col>
</el-row>
</el-header>
</template>
<script>
export default {
props: {
bgcolor: {
type: String,
default: "#00102B",
},
},
data() {
return {
menuItem: [
{ index: 1, title: "首页", path: "" },
{ index: 2, title: "指标图谱", path: "" },
{ index: 3, title: "评价模型", path: "" },
{ index: 4, title: "解决方案", path: "" },
{ index: 5, title: "研究与新闻", path: "" },
],
};
},
};
</script>
<style lang="scss" scoped>
.el-header {
width: 100%;
display: flex;
align-items: center;
.el-row {
width: 100%;
.el-col {
display: flex;
align-items: center;
.el-menu {
width: 100%;
display: flex;
justify-content: space-between;
}
.el-menu--horizontal {
border-bottom: none;
}
.el-menu-item.is-active {
background-color: transparent !important;
}
.el-menu-item:hover {
background-color: transparent !important;
}
}
.el-col:last-child {
justify-content: flex-end;
.el-link {
color: #fff;
}
.el-avatar {
margin-left: 30px;
}
}
}
}
</style>

View File

@ -0,0 +1,54 @@
<template>
<div>
<el-table
:data="data"
border
:header-cell-style="{
'background-color': '#26ceb9 !important',
color: '#fff',
}"
>
<el-table-column
align="center"
v-for="(item, index) in column"
:key="index"
:prop="item.prop"
:label="item.label"
>
<template v-if="item.prop === templateProp">
<el-row class="flex-sb"><div class="badge"></div>
<span>正面/低风险</span><el-button size="small">点击查看相关新闻</el-button></el-row>
</template>
<template v-else>
<span>{{ data[index][item.prop] }}</span>
</template></el-table-column
>
</el-table>
<el-pagination
layout="prev, pager, next"
:total="50"
style="margin-top: 10px"
>
</el-pagination>
</div>
</template>
<script>
export default {
props: {
data: [Array],
column: [Array],
templateProp: [String],
},
methods:{
}
};
</script>
<style lang="scss" scoped>
/deep/ .el-table__cell {
border: none;
border-bottom: 1px dashed #ebeef5 !important;
}
</style>

26
src/main.js Normal file
View File

@ -0,0 +1,26 @@
// The Vue build version to load with the `import` command
// (runtime-only or standalone) has been set in webpack.base.conf with an alias.
import Vue from 'vue'
import App from './App'
import axios from 'axios'
import router from './router'
import "@/assets/css/general.scss"
import ElementUI from 'element-ui';
import { message } from '@/utils/message.js'
import 'element-ui/lib/theme-chalk/index.css';
Vue.use(ElementUI);
Vue.prototype.$http = axios
Vue.config.productionTip = false
Vue.prototype.$message = message;
/* eslint-disable no-new */
new Vue({
el: '#app',
router,
components: { App },
template: '<App/>'
})

370
src/pages/home.vue Normal file
View File

@ -0,0 +1,370 @@
<template>
<el-container>
<esg-header />
<el-main>
<el-carousel :interval="10000" height="400px">
<el-carousel-item v-for="item in 4" :key="item">
<h1>BANNER</h1>
</el-carousel-item>
</el-carousel>
<el-row style="margin-top: 80px">
<el-col :span="6" class="col-card">
<el-card shadow="never">
<div slot="header">
<div class="strip" style="width: 100%; height: 310px">
<h1>ESG</h1>
</div>
</div>
</el-card>
</el-col>
<el-col :span="16" :offset="2" class="col-card">
<el-card shadow="never" :body-style="{ padding: '20px 0' }">
<div slot="header" class="flex-sb">
<div class="strip" style="width: 300px; height: 46px"></div>
<svg
xmlns="http://www.w3.org/2000/svg"
width="230"
height="46"
viewBox="0 0 230 46"
>
<g id="组_4" data-name=" 4" transform="translate(-1553 -721)">
<rect
id="矩形_225"
data-name="矩形 225"
width="230"
height="46"
transform="translate(1553 721)"
fill="#eaeaea"
/>
<text
id="了解更多"
transform="translate(1668 752)"
fill="#adadad"
font-size="24"
font-family="YuGothicUI-Bold, Yu Gothic UI"
font-weight="700"
>
<tspan x="-48" y="0">了解更多</tspan>
</text>
</g>
</svg>
</div>
<div
class="strip"
v-for="o in 5"
:key="o"
style="width: 100%; height: 25px; margin: 22px 0"
></div>
</el-card>
</el-col>
</el-row>
<el-row>
<el-col :span="6" style="justify-content: flex-start">
<div class="strip" style="width: 250px; height: 40px">
<h2>每周新闻速递</h2>
</div>
</el-col>
</el-row>
<el-row>
<el-col
:span="8"
v-for="o in 3"
:key="o"
:style="{
padding: o === 1 ? '0 20px 0 0' : o === 2 ? '0 10px' : '0 0 0 20px',
}"
>
<el-card :body-style="{ padding: '0px' }" shadow="never">
<el-image class="strip-image">
<div slot="error" class="image-slot">
<i class="el-icon-picture-outline"></i>
</div>
</el-image>
<div style="padding: 20px">
<div class="bottom clearfix">
<div class="strip" style="width: 150px; height: 30px"></div>
<div class="strip" style="width: 250px; height: 20px"></div>
<div class="strip" style="width: 200px; height: 20px"></div>
</div>
</div>
</el-card>
</el-col>
</el-row>
<el-row>
<el-col :span="6" style="justify-content: flex-start">
<div class="strip" style="width: 250px; height: 40px">
<h2>CONCEPT</h2>
</div>
</el-col>
</el-row>
<el-row>
<el-col
:span="8"
v-for="o in 3"
:key="o"
:style="{
padding: o === 1 ? '0 20px 0 0' : o === 2 ? '0 10px' : '0 0 0 20px',
}"
>
<div class="strip" style="width: 100%; height: 300px">
<h3>WHAT IS ESG</h3>
</div>
</el-col>
</el-row>
<el-row>
<p class="pri-title">ESG评级查询</p>
<el-input placeholder="搜索" class="table-search"></el-input>
<esg-table
:data="data"
:column="column"
style="margin-top: 20px"
:templateProp="'risk'"
></esg-table>
</el-row>
<el-row>
<p class="pri-title">ESG评价指标查询</p>
<el-col :span="4"
><el-select placeholder="行业" class="table-search"></el-select
></el-col>
<el-col :span="6" :offset="1"
><el-select placeholder="子行业" class="table-search"></el-select
></el-col>
<el-col :span="12" :offset="1"
><el-input placeholder="搜索" class="table-search"></el-input
></el-col>
</el-row>
<el-row>
<el-col
:span="8"
v-for="(item, index) in indicatorsData"
:key="index"
:style="{
padding:
index === 0
? '0 20px 0 0'
: index === 1
? '0 10px'
: '0 0 0 20px',
}"
>
<div class="indicators">
<div class="indicators-header">
<h3 style="color: #fff">{{ item.title }}</h3>
</div>
<div class="indicators-item" style="font-weight: 800">
<span>指标</span>
<span>权重</span>
</div>
<div
v-for="(child, key) in item.children"
:key="key"
class="indicators-item"
>
<span>{{ child.indicators }}</span>
<span>{{ child.weight }}</span>
</div>
</div>
</el-col>
</el-row>
<el-row>
<p class="pri-title">ESG评价特点</p>
<el-row
v-for="(item, index) in trait"
:key="index"
style="width: 100%; margin: 20px 0 0 0"
>
<el-col span="24">
<p class="sub-title">{{ item.title }}</p>
</el-col>
<el-col span="24">
<span>{{ item.des }}</span>
</el-col>
</el-row>
</el-row>
</el-main>
<esg-footer></esg-footer>
</el-container>
</template>
<script>
import esgTable from "@/components/esgTable";
import esgHeader from "@/components/esgHeader";
import esgFooter from "@/components/esgFooter";
export default {
components: {
esgFooter,
esgHeader,
esgTable,
},
data() {
return {
data: [
{
code: "SH601186",
name: "中国铁建",
level: "A+",
institutions: "S&P",
risk: 1,
},
{
code: "SH601186",
name: "中国铁建",
level: "A+",
institutions: "S&P",
risk: 1,
},
{
code: "SH601186",
name: "中国铁建",
level: "A+",
institutions: "S&P",
risk: 1,
},
{
code: "SH601186",
name: "中国铁建",
level: "A+",
institutions: "S&P",
risk: 1,
},
{
code: "SH601186",
name: "中国铁建",
level: "A+",
institutions: "S&P",
risk: 1,
},
],
column: [
{ prop: "code", label: "代码" },
{ prop: "name", label: "名称" },
{ prop: "level", label: "级别" },
{ prop: "institutions", label: "评级机构" },
{ prop: "risk", label: "风险舆情" },
],
indicatorsData: [
{
title: "环境/Environmental",
children: [
{ indicators: "绿色理念", weight: 3 },
{ indicators: "绿色组织架构", weight: 3 },
{ indicators: "绿色环境", weight: 26 },
{ indicators: "绿色生产和办公", weight: 16 },
],
},
{
title: "社会/Social",
children: [
{ indicators: "数据安全与隐私", weight: 12 },
{ indicators: "产品质量", weight: 10 },
{ indicators: "员工", weight: 28 },
{ indicators: "社区", weight: 9 },
],
},
{
title: "治理/Governance",
children: [
{ indicators: "组织架构", weight: 10 },
{ indicators: "发展战略", weight: 6 },
{ indicators: "商业模式", weight: 6 },
{ indicators: "技术研发", weight: 10 },
],
},
],
trait: [
{
title: "动态的",
des: "ESG 评级旨在评估公司对环境、社会和治理问题的长期弹性。随着这些问题的发展,我们相应地更新了 ESG 评级方法。我们每年都会根据最新数据和研究以及定期客户咨询的意见重新校准模型,包括确定行业关键问题和设置权重。因此,随着时间的推移,您应该会看到此 ESG 行业重要性地图的变化。",
},
{
title: "行业特定",
des: "关键发行权重是ESG评级模型的重要组成部分。对权重设定方案的评估发现ESG 行业重要性图中显示的权重代表行业内公司的平均关键问题权重。关键问题权重通过两个因素的组合确定1) 与其他行业相比,每个行业对与问题相关的主要外部性的贡献有多大(例如,该行业相对于其他行业的碳密集程度如何)和 2 ) 外部性可能实现的时间范围。",
},
{
title: "公司特定",
des: "ESG 行业重要性地图的基础是对关键 ESG 风险和机遇的行业特定评估。然而ESG 行业重要性地图还反映了行业分类可能无法捕捉到的特定于公司的细微差别。业务线、使用的生产流程和公司经营的地区是 ESG 风险的决定因素。基于规则的模型变体考虑了这些细微差别,这意味着并非给定行业中的所有公司都必须在所有相同突出显示的关键问题上进行评级。由于 ESG 行业重要性地图包括公司特定的关键问题,因此仅适用于行业一小部分的问题似乎具有较低的“平均”权重。",
},
],
};
},
};
</script>
<style lang='scss' scoped>
.el-main {
padding: 0;
.el-carousel__item:nth-child(2n) {
background-color: #99a9bf;
text-align: center;
line-height: 200px;
}
.el-carousel__item:nth-child(2n + 1) {
background-color: #d3dce6;
text-align: center;
line-height: 200px;
}
.el-row {
width: 80%;
margin: 40px 10% 40px 10%;
.el-col {
.el-card {
width: 100%;
/deep/ .el-card__header {
border: none;
padding: 0;
}
}
.indicators {
width: 100%;
box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1);
&-header {
height: 50px;
line-height: 50px;
background: #26ceb9;
padding: 0 30px;
}
&-item {
display: flex;
justify-content: space-between;
padding: 15px 40px;
border-bottom: 1px dashed #0a4fad;
}
}
.indicators-item:last-child {
border: none;
}
}
.col-card {
.el-card {
border: none;
}
}
.table-search {
border-bottom: 1px solid #707070;
width: 100%;
/deep/ .el-input__inner {
border: none;
font-family: "SR";
}
}
}
}
</style>

388
src/pages/home2.vue Normal file
View File

@ -0,0 +1,388 @@
<template>
<el-container>
<esg-header />
<el-main>
<el-carousel :interval="10000" height="400px">
<el-carousel-item v-for="item in 4" :key="item">
<h1>BANNER</h1>
</el-carousel-item>
</el-carousel>
<el-row style="margin-top: 80px">
<el-col :span="6" style="justify-content: flex-start">
<div class="strip" style="width: 250px; height: 40px">
<h2>INTRODUCTION</h2>
</div>
</el-col>
<el-col :span="24">
<div
class="strip"
v-for="o in 5"
:key="o"
style="width: 100%; height: 20px; margin: 22px 0"
></div>
</el-col>
</el-row>
<el-row>
<el-col :span="6" style="justify-content: flex-start">
<div class="strip" style="width: 250px; height: 40px">
<h2>每周新闻速递</h2>
</div>
</el-col>
</el-row>
<el-row>
<el-col
:span="8"
v-for="o in 3"
:key="o"
:style="{
padding: o === 1 ? '0 20px 0 0' : o === 2 ? '0 10px' : '0 0 0 20px',
}"
>
<el-card :body-style="{ padding: '0px' }" shadow="never">
<el-image class="strip-image">
<div slot="error" class="image-slot">
<i class="el-icon-picture-outline"></i>
</div>
</el-image>
<div style="padding: 20px">
<div class="bottom clearfix">
<div class="strip" style="width: 150px; height: 30px"></div>
<div class="strip" style="width: 250px; height: 20px"></div>
<div class="strip" style="width: 200px; height: 20px"></div>
</div>
</div>
</el-card>
</el-col>
</el-row>
<el-row>
<p class="pri-title">级别分类</p>
<div class="kpi">
<div
class="kpi-item"
v-for="(item, index) in kpi"
:key="index"
:style="{
background: item.color,
width: item.width,
}"
>
{{ item.level }}
</div>
</div>
<div class="kpi">
<div class="kpi-level">落后</div>
<div class="kpi-level">平均</div>
<div class="kpi-level">领先</div>
</div>
</el-row>
<el-row>
<p class="pri-title">ESG评价关键问题框架</p>
<div class="frame-header">ESG分值</div>
<div class="frame-level">
<div
v-for="(item, index) in indicatorsData"
:key="index"
:style="{
width: index === 0 ? '40%' : index === 1 ? '38%' : '20%',
}"
>
<div class="frame-level-1">
{{ item.title }}
</div>
<div class="frame-level">
<div v-for="(child, key) in item.children" :key="key" :style="{
width: 100/item.children.length-2+'%',
}">
<div class="frame-level-2">
{{ child.title }}
</div>
<div
v-for="(lc, k) in child.children"
:key="k"
class="frame-level-3"
>
{{ lc }}
</div>
</div>
</div>
</div>
</div>
</el-row>
<el-row><el-divider></el-divider></el-row>
<el-row><el-button round>开始您的ESG评价</el-button></el-row>
</el-main>
<esg-footer></esg-footer>
</el-container>
</template>
<script>
import esgHeader from "@/components/esgHeader";
import esgFooter from "@/components/esgFooter";
export default {
components: {
esgFooter,
esgHeader,
},
data() {
return {
kpi: [
{ level: "CCC", color: "#EAEAEA", width: "16%" },
{ level: "B", color: "#D6D6D6", width: "16%" },
{ level: "BB", color: "rgb(224,214,72,0.6)", width: "10.4%" },
{ level: "BBB", color: "rgb(224,214,72,0.8)", width: "10.4%" },
{ level: "A", color: "#E2D648", width: "10.4%" },
{ level: "AA", color: "#7AE4CC", width: "16%" },
{ level: "AAA", color: "#22D3AA", width: "16%" },
],
indicatorsData: [
{
title: "环境/Environmental",
children: [
{
title: "气候变化",
children: ["碳排放", "产品碳足迹", "融资环境影响", "气候变化"],
},
{
title: "自然资源",
children: ["水资源", "生物多样性及土地使用", "原材料采购"],
},
{
title: "污染与浪费",
children: ["废气排放与污染物", "包装材料与污染", "电子污染"],
},
{
title: "环境机会",
children: ["清洁技术", "绿色建筑", "可再生能力"],
},
],
},
{
title: "社会/Social",
children: [
{
title: "人力资源",
children: [
"劳动管理",
"健康安全",
"人力资本发展",
"供应链劳动标准 ",
],
},
{
title: "产品责任",
children: [
"产品安全与质量",
"化学安全",
"消费者财力保护",
"隐私&数据安全",
"责任投资",
"健康和人口风险保险",
],
},
{ title: "利益相关", children: ["采购争议", "社区关系"] },
{
title: "社会机会",
children: ["沟通渠道", "融资渠道", "健康关怀渠道"],
},
],
},
{
title: "治理/Governance",
children: [
{
title: "企业治理",
children: ["董事会", "支付", "所有权", "财会"],
},
{ title: "商业行为", children: ["商业道德", "税收透明度"] },
],
},
],
};
},
};
</script>
<style lang='scss' scoped>
.el-main {
padding: 0;
.el-carousel__item:nth-child(2n) {
background-color: #99a9bf;
text-align: center;
line-height: 200px;
}
.el-carousel__item:nth-child(2n + 1) {
background-color: #d3dce6;
text-align: center;
line-height: 200px;
}
.el-row {
width: 80%;
margin: 40px 10% 40px 10%;
.el-button{
width:100%;background:#26CCB7;color:#fff
}
.kpi {
width: 100%;
display: flex;
justify-content: space-between;
&-item {
height: 40px;
display: flex;
justify-content: center;
align-items: center;
color: #fff;
box-sizing: border-box;
}
&-level {
width: 32.4%;
height: 50px;
text-align: center;
line-height: 50px;
border: 1px dashed #707070;
margin-top: 20px;
}
&-line {
width: 1px;
height: 30px;
background-color: #707070;
}
}
.frame {
&-header {
width: 100%;
height: 40px;
text-align: center;
line-height: 40px;
align-items: center;
background-color: #081e41;
color: #fff;
}
&-level {
width: 100%;
display: flex;
justify-content: space-between;
margin: 10px 0;
&-1 {
width: 100%;
height: 40px;
text-align: center;
line-height: 40px;
background-color: #4c8aed;
color: #fff;
font-size: 16px;
box-sizing: border-box;
}
&-2 {
height: 40px;
text-align: center;
line-height: 40px;
background-color: #26ccb7;
color: #fff;
font-size: 14px;
padding: 0 10px;
}
&-3 {
height: 40px;
text-align: center;
line-height: 40px;
background-color: #f4f4f4;
color: #000;
font-size: 12px;
margin: 10px 0;
}
}
}
.el-col {
.el-card {
width: 100%;
/deep/ .el-card__header {
border: none;
padding: 0;
}
}
.indicators-strip {
width: 100%;
height: 40px;
background-color: #c2e3f2;
display: flex;
justify-content: space-between;
align-items: center;
padding: 0 30px;
box-sizing: border-box;
color: #fff;
font-weight: 800;
}
.el-collapse-item {
margin: 10px 0;
}
/deep/ .el-collapse-item__header {
height: 50px;
line-height: 50px;
background: #5cc7ef;
padding: 0 30px;
color: #fff;
}
.second {
/deep/ .el-collapse-item__header {
background: #26ceb9;
}
}
.indicators {
width: 100%;
box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1);
&-item {
display: flex;
justify-content: space-between;
padding: 15px 40px;
border-bottom: 1px dashed #0a4fad;
}
}
.indicators-item:last-child {
border: none;
}
}
.col-card {
.el-card {
border: none;
}
}
.table-search {
border-bottom: 1px solid #707070;
/deep/ .el-input__inner {
border: none;
font-family: "SR";
}
}
}
}
</style>

424
src/pages/home3.vue Normal file
View File

@ -0,0 +1,424 @@
<template>
<el-container>
<esg-header />
<el-main>
<el-carousel :interval="10000" height="400px">
<el-carousel-item v-for="item in 4" :key="item">
<h1>BANNER</h1>
</el-carousel-item>
</el-carousel>
<el-row style="margin-top: 80px">
<el-col :span="6" style="justify-content: flex-start">
<div class="strip" style="width: 250px; height: 40px">
<h2>CONCLUSION</h2>
</div>
</el-col>
<el-col :span="24">
<div
class="strip"
v-for="o in 5"
:key="o"
style="width: 100%; height: 20px; margin: 22px 0"
></div>
</el-col>
</el-row>
<el-row>
<p class="pri-title">设计您的企业ESGKPI</p>
<div class="kpi">
<div
class="kpi-item"
v-for="(item, index) in kpi"
:key="index"
:style="{ width: item.width }"
>
<span v-if="index === 3" style="color: #000">您的企业</span>
<span v-if="index === 5" style="color: #000">行业平均</span>
</div>
</div>
<div class="kpi">
<div
class="kpi-item"
v-for="(item, index) in kpi"
:key="index"
:style="{ width: item.width }"
>
<div v-if="index === 3" class="kpi-line"></div>
<div v-if="index === 5" class="kpi-line"></div>
</div>
</div>
<div class="kpi">
<div
class="kpi-item"
v-for="(item, index) in kpi"
:key="index"
:style="{
background: item.color,
width: item.width,
border: index === 3 || index === 5 ? '1px dashed #707070' : none,
}"
>
{{ item.level }}
</div>
</div>
<div class="kpi">
<div class="kpi-level">落后</div>
<div class="kpi-level">平均</div>
<div class="kpi-level">领先</div>
</div>
</el-row>
<el-row>
<p class="pri-title">目标/模拟计算器</p>
<el-col :span="4"
><el-select placeholder="您的级别" class="table-search"></el-select
></el-col>
<el-col :span="12" :offset="1"
><el-select
placeholder="目标级别"
class="table-search"
style="width: 100%"
></el-select
></el-col>
<el-col :span="6" :offset="1"
><el-button style="background: #26ceb9; width: 100%; color: #fff"
>开始</el-button
></el-col
>
</el-row>
<el-row>
<el-col :span="12" style="padding: 0 20px 0 0">
<div class="indicators-strip">
<span>目前ESG分值</span>
<span>32/C</span>
</div>
<el-collapse>
<el-collapse-item
class="indicators"
v-for="(item, index) in indicatorsData"
:key="index"
:title="item.title"
>
<div
class="indicators-item"
style="font-weight: 800; border-bottom: 1px solid #707070"
>
<span>总分</span>
<span>23</span>
</div>
<div class="indicators-item" style="font-weight: 800">
<span>指标</span>
<span>权重</span>
</div>
<div
v-for="(child, key) in item.children"
:key="key"
class="indicators-item"
>
<span>{{ child.indicators }}</span>
<span>{{ child.weight }}</span>
</div>
</el-collapse-item>
</el-collapse>
</el-col>
<el-col :span="12" style="padding: 0 0 0 20px">
<div class="indicators-strip">
<span>ESG目标分值</span>
<span>65/A</span>
</div>
<el-collapse class="second">
<el-collapse-item
class="indicators"
v-for="(item, index) in indicatorsTargetData"
:key="index"
:title="item.title"
>
<div
class="indicators-item"
style="font-weight: 800; border-bottom: 1px solid #707070"
>
<span>总分</span>
<span>45</span>
</div>
<div class="indicators-item" style="font-weight: 800">
<span>指标</span>
<span>权重</span>
</div>
<div
v-for="(child, key) in item.children"
:key="key"
class="indicators-item"
>
<span>{{ child.indicators }}</span>
<span>{{ child.weight }}</span>
</div>
</el-collapse-item>
</el-collapse>
</el-col>
</el-row>
<el-row>
<p class="pri-title">模拟达标时间</p>
<div class="flex-sb">
<span style="color:#5CC7EF">现在</span
><el-progress
:percentage="50"
:color="'#5CC7EF'"
style="width: 95%"
:show-text="false"
></el-progress>
</div>
<div class="flex-sb">
<span style="color:#26CEB9">目标</span
><el-progress
:percentage="100"
:color="'#26CEB9'"
style="width: 95%"
:show-text="false"
></el-progress>
</div>
</el-row>
<el-row>
<p class="pri-title">提升建议</p>
<el-row
v-for="(item, index) in trait"
:key="index"
style="width: 100%; margin: 20px 0 0 0"
>
<el-col span="24">
<p class="sub-title">{{ item.title }}</p>
</el-col>
<el-col span="24">
<span>{{ item.des }}</span>
</el-col>
</el-row>
</el-row>
</el-main>
<esg-footer></esg-footer>
</el-container>
</template>
<script>
import esgHeader from "@/components/esgHeader";
import esgFooter from "@/components/esgFooter";
export default {
components: {
esgFooter,
esgHeader,
},
data() {
return {
kpi: [
{ level: "CCC", color: "#EAEAEA", width: "16%" },
{ level: "B", color: "#D6D6D6", width: "16%" },
{ level: "BB", color: "rgb(224,214,72,0.6)", width: "10.4%" },
{ level: "BBB", color: "rgb(224,214,72,0.8)", width: "10.4%" },
{ level: "A", color: "#E2D648", width: "10.4%" },
{ level: "AA", color: "#7AE4CC", width: "16%" },
{ level: "AAA", color: "#22D3AA", width: "16%" },
],
indicatorsData: [
{
title: "环境/Environmental",
children: [
{ indicators: "绿色理念", weight: 0.5 },
{ indicators: "绿色组织架构", weight: 1 },
{ indicators: "绿色环境", weight: 18 },
{ indicators: "绿色生产和办公", weight: 9 },
],
},
{
title: "社会/Social",
children: [
{ indicators: "数据安全与隐私", weight: 12 },
{ indicators: "产品质量", weight: 10 },
{ indicators: "员工", weight: 28 },
{ indicators: "社区", weight: 9 },
],
},
{
title: "治理/Governance",
children: [
{ indicators: "组织架构", weight: 10 },
{ indicators: "发展战略", weight: 6 },
{ indicators: "商业模式", weight: 6 },
{ indicators: "技术研发", weight: 10 },
],
},
],
indicatorsTargetData: [
{
title: "环境/Environmental",
children: [
{ indicators: "绿色理念", weight: 2 },
{ indicators: "绿色组织架构", weight: 1.5 },
{ indicators: "绿色环境", weight: 21 },
{ indicators: "绿色生产和办公", weight: 14 },
],
},
{
title: "社会/Social",
children: [
{ indicators: "数据安全与隐私", weight: 12 },
{ indicators: "产品质量", weight: 10 },
{ indicators: "员工", weight: 28 },
{ indicators: "社区", weight: 9 },
],
},
{
title: "治理/Governance",
children: [
{ indicators: "组织架构", weight: 10 },
{ indicators: "发展战略", weight: 6 },
{ indicators: "商业模式", weight: 6 },
{ indicators: "技术研发", weight: 10 },
],
},
],
trait: [
{
title: "环境",
des: "减少环境污染,增加环保行为,加强绿色环保理念,打造企业绿色办公环境、绿色产品,建立绿色供应链等。",
},
{
title: "社会",
des: "注重数据安全与隐私保护,多支持社会公益活动,加强产品质量及员工培训及福利,增加扶贫与慈善行为等。",
},
{
title: "治理",
des: "提升组织架构、绿色发展战略,绿色商业模式及绿色技术研发,加强公司风险管理,信息披露的透明度及企业合规管理等。",
},
],
};
},
};
</script>
<style lang='scss' scoped>
.el-main {
padding: 0;
.el-carousel__item:nth-child(2n) {
background-color: #99a9bf;
text-align: center;
line-height: 200px;
}
.el-carousel__item:nth-child(2n + 1) {
background-color: #d3dce6;
text-align: center;
line-height: 200px;
}
.el-row {
width: 80%;
margin: 40px 10% 40px 10%;
.kpi {
width: 100%;
display: flex;
justify-content: space-between;
&-item {
height: 40px;
display: flex;
justify-content: center;
align-items: center;
color: #fff;
box-sizing: border-box;
}
&-level {
width: 32.4%;
height: 50px;
text-align: center;
line-height: 50px;
border: 1px dashed #707070;
margin-top: 20px;
}
&-line {
width: 1px;
height: 30px;
background-color: #707070;
}
}
.el-col {
.el-card {
width: 100%;
/deep/ .el-card__header {
border: none;
padding: 0;
}
}
.indicators-strip {
width: 100%;
height: 40px;
background-color: #c2e3f2;
display: flex;
justify-content: space-between;
align-items: center;
padding: 0 30px;
box-sizing: border-box;
color: #fff;
font-weight: 800;
}
.el-collapse-item {
margin: 10px 0;
}
/deep/ .el-collapse-item__header {
height: 50px;
line-height: 50px;
background: #5cc7ef;
padding: 0 30px;
color: #fff;
}
.second {
/deep/ .el-collapse-item__header {
background: #26ceb9;
}
}
.indicators {
width: 100%;
box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1);
&-item {
display: flex;
justify-content: space-between;
padding: 15px 40px;
border-bottom: 1px dashed #0a4fad;
}
}
.indicators-item:last-child {
border: none;
}
}
.col-card {
.el-card {
border: none;
}
}
.table-search {
border-bottom: 1px solid #707070;
/deep/ .el-input__inner {
border: none;
font-family: "SR";
}
}
}
}
</style>

0
src/pages/home4.vue Normal file
View File

View File

@ -0,0 +1,182 @@
<!-- 结论 -->
<template>
<div>
<el-row>
<p class="pri-title">企业ESG管理 COMPANY ESG DASHBOARD</p>
<div
class="strip"
v-for="o in 5"
:key="o"
style="width: 100%; height: 25px; margin: 22px 0"
></div>
</el-row>
<el-row>
<el-col :span="5">
<el-card
style="
color: #fff;
background: #e2d648;
display: flex;
align-items: center;
"
>
<p class="sub-title">级别/分数</p>
<p class="pri-title">45.6/BBB</p>
</el-card>
</el-col>
<el-col :span="18" :offset="1">
<el-card ref="card" class="card">
<div class="kpi">
<div
class="kpi-item"
v-for="(item, index) in kpi"
:key="index"
:style="{ width: item.width }"
>
<span v-if="index === 3" style="color: #000">您的企业</span>
<span v-if="index === 5" style="color: #000">行业平均</span>
</div>
</div>
<div class="kpi">
<div
class="kpi-item"
v-for="(item, index) in kpi"
:key="index"
:style="{ width: item.width }"
>
<div v-if="index === 3" class="kpi-line"></div>
<div v-if="index === 5" class="kpi-line"></div>
</div>
</div>
<div class="kpi">
<div
class="kpi-item"
v-for="(item, index) in kpi"
:key="index"
:style="{
background: item.color,
width: item.width,
border:
index === 3 || index === 5 ? '1px dashed #707070' : 'none',
}"
>
{{ item.level }}
</div>
</div>
<div class="kpi">
<div class="kpi-level">落后</div>
<div class="kpi-level">平均</div>
<div class="kpi-level">领先</div>
</div>
</el-card>
</el-col>
</el-row>
<el-row>
<p class="pri-title">您的分项得分</p>
<el-col :span="8" v-for="(item, index) in score" :key="index" :style="{
padding: index === 0 ? '0 20px 0 0' : index === 1 ? '0 10px' : '0 0 0 20px',
}">
<el-card class="score">
<div class="score-item">
<span>{{ item.title }}</span>
<span>{{ item.scores }}</span>
</div>
</el-card>
</el-col>
</el-row>
</div>
</template>
<script>
export default {
data() {
return {
kpi: [
{ level: "CCC", color: "#EAEAEA", width: "16%" },
{ level: "B", color: "#D6D6D6", width: "16%" },
{ level: "BB", color: "rgb(224,214,72,0.6)", width: "10.4%" },
{ level: "BBB", color: "rgb(224,214,72,0.8)", width: "10.4%" },
{ level: "A", color: "#E2D648", width: "10.4%" },
{ level: "AA", color: "#7AE4CC", width: "16%" },
{ level: "AAA", color: "#22D3AA", width: "16%" },
],
score: [
{ title: "环境/Environmental", scores: "32/65" },
{ title: "社会/Social", scores: "23/65" },
{ title: "治理/Governance", scores: "35.5/55" },
],
};
},
mounted() {},
};
</script>
<style lang='scss' scoped>
.el-row {
margin: 80px 0;
}
.el-row:first-child {
margin: 0 0 40px 0;
}
.kpi{
width: 100%;
display: flex;
justify-content: space-between;
&-item {
height: 40px;
display: flex;
justify-content: center;
align-items: center;
color: #fff;
box-sizing: border-box;
}
&-level {
width: 32.4%;
height: 50px;
text-align: center;
line-height: 50px;
border: 1px dashed #707070;
margin-top: 20px;
}
&-line {
width: 1px;
height: 30px;
background-color: #707070;
}
}
.el-card {
border-radius: 20px;
height: 232px;
.sub-title {
font-size: 1.8vh;
}
.pri-title {
font-size: 2.7vh;
}
}
.score {
background-color: #22d3aa;
height: auto;
padding: 20px 0;
&-item{
display: flex;
justify-content: space-between;
align-items: center;
span{
color: #fff;
font-size: 1.5vh;
font-weight: 800;
}
}
}
</style>

View File

@ -0,0 +1,444 @@
<!-- 环境 -->
<template>
<div>
<el-row>
<div class="strip" style="width: 100%; height: 40px">
<h2>环境/Environmental</h2>
<h2>32/65</h2>
</div>
</el-row>
<el-row>
<el-col :span="16">
<el-select v-model="companyValue" style="margin-right:20px"></el-select>
<el-select v-model="chartsValue"></el-select>
<div class="svg-box">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="100%" height="50vh" viewBox="0 0 584.044 556.038">
<defs>
<linearGradient id="linear-gradient" x1="0.499" y1="0.361" x2="0.51" y2="-0.222" gradientUnits="objectBoundingBox">
<stop offset="0.15" stop-color="#1be2a0"/>
<stop offset="1" stop-color="#1be2a0"/>
</linearGradient>
<linearGradient id="linear-gradient-2" x1="0.499" y1="0.361" x2="0.51" y2="-0.222" xlink:href="#linear-gradient"/>
<linearGradient id="linear-gradient-3" x1="0.498" y1="0.769" x2="0.505" y2="-0.148" gradientUnits="objectBoundingBox">
<stop offset="0" stop-color="#059bfd"/>
<stop offset="0.24" stop-color="#4292fd"/>
<stop offset="0.503" stop-color="#7f8afd"/>
<stop offset="0.726" stop-color="#ac84fd"/>
<stop offset="0.899" stop-color="#c781fd"/>
<stop offset="1" stop-color="#d280fd"/>
</linearGradient>
<linearGradient id="linear-gradient-4" x1="0.791" y1="0.261" x2="-0.163" y2="1.046" xlink:href="#linear-gradient"/>
<linearGradient id="linear-gradient-5" y1="0.5" x2="1" y2="0.5" gradientUnits="objectBoundingBox">
<stop offset="0" stop-color="#d3daed"/>
<stop offset="1" stop-color="#99a7d8"/>
</linearGradient>
<linearGradient id="linear-gradient-6" x1="0.498" y1="0.772" x2="0.505" y2="-0.154" xlink:href="#linear-gradient-3"/>
<linearGradient id="linear-gradient-7" x1="0.5" y1="1.091" x2="0.5" y2="0.14" gradientUnits="objectBoundingBox">
<stop offset="0" stop-color="#00067d"/>
<stop offset="0.672" stop-color="#365bd6"/>
<stop offset="1" stop-color="#4e80fd"/>
</linearGradient>
<linearGradient id="linear-gradient-9" x1="1.153" y1="-0.59" x2="0.283" y2="0.862" xlink:href="#linear-gradient-5"/>
<linearGradient id="linear-gradient-10" x1="1.1" y1="0.5" x2="-0.067" y2="0.5" xlink:href="#linear-gradient-5"/>
<linearGradient id="linear-gradient-11" x1="0.178" y1="0.397" x2="0.791" y2="0.593" gradientUnits="objectBoundingBox">
<stop offset="0" stop-color="#fff"/>
<stop offset="1" stop-color="#c8cfe4"/>
</linearGradient>
<linearGradient id="linear-gradient-16" x1="-33.287" y1="194.373" x2="-32.739" y2="194.373" xlink:href="#linear-gradient-3"/>
<linearGradient id="linear-gradient-17" x1="0.445" y1="0.833" x2="0.578" y2="-0.264" xlink:href="#linear-gradient-3"/>
<linearGradient id="linear-gradient-18" x1="-32.685" y1="59.792" x2="-34.4" y2="59.001" xlink:href="#linear-gradient-3"/>
<linearGradient id="linear-gradient-19" x1="-42.635" y1="92.233" x2="-44.881" y2="91.004" xlink:href="#linear-gradient-7"/>
<linearGradient id="linear-gradient-20" x1="1.63" y1="1.184" x2="-0.616" y2="-0.046" xlink:href="#linear-gradient-7"/>
<linearGradient id="linear-gradient-21" x1="0" y1="0.5" x2="1" y2="0.5" xlink:href="#linear-gradient-3"/>
<linearGradient id="linear-gradient-22" x1="-22.792" y1="-91.442" x2="-22.366" y2="-91.442" xlink:href="#linear-gradient-3"/>
<linearGradient id="linear-gradient-25" x1="-532.403" y1="1.238" x2="-534.453" y2="-0.261" gradientUnits="objectBoundingBox">
<stop offset="0" stop-color="#059bfd"/>
<stop offset="0.47" stop-color="#1775e3"/>
<stop offset="1" stop-color="#2a4fca"/>
</linearGradient>
<linearGradient id="linear-gradient-27" x1="-0.263" y1="1.072" x2="0.763" y2="0.303" xlink:href="#linear-gradient"/>
<linearGradient id="linear-gradient-28" x1="0.507" y1="-1.537" x2="0.491" y2="2.977" xlink:href="#linear-gradient"/>
<linearGradient id="linear-gradient-29" x1="0.511" y1="-2.618" x2="0.495" y2="1.896" xlink:href="#linear-gradient"/>
<linearGradient id="linear-gradient-30" x1="0" y1="0.5" x2="1" y2="0.5" xlink:href="#linear-gradient"/>
<linearGradient id="linear-gradient-31" x1="0" y1="0.5" x2="1" y2="0.5" xlink:href="#linear-gradient"/>
<linearGradient id="linear-gradient-32" x1="0" y1="0.5" x2="1" y2="0.5" xlink:href="#linear-gradient"/>
</defs>
<g id="组_903" data-name=" 903" transform="translate(-418.713 -421.557)">
<g id="组_852" data-name=" 852" transform="translate(542.897 505.909)">
<path id="路径_4036" data-name="路径 4036" d="M507.778,458.725H482.446c-4.668-.055-9.014,4.292-9.014,9.652V493.71a9.7,9.7,0,0,0,9.7,9.7l6.529.057a4.87,4.87,0,0,1,4.87,4.87V529.62a1.425,1.425,0,0,0,1.425,1.425h0a1.425,1.425,0,0,0,1.425-1.425V508.341a4.868,4.868,0,0,1,4.87-4.87l6.212-.057a9.705,9.705,0,0,0,9.707-9.7V468.377C518.175,463.017,513.829,458.671,507.778,458.725Z" transform="translate(-473.432 -458.725)" fill="url(#linear-gradient)"/>
</g>
<g id="组_853" data-name=" 853" transform="translate(461.218 724.838)">
<path id="路径_4037" data-name="路径 4037" d="M471.788,555.191H446.454c-4.668-.054-9.012,4.292-9.012,9.652v25.332a9.7,9.7,0,0,0,9.7,9.7l6.529.054a4.871,4.871,0,0,1,4.87,4.87v21.281a1.425,1.425,0,0,0,1.425,1.425h0a1.424,1.424,0,0,0,1.423-1.425V604.8a4.871,4.871,0,0,1,4.87-4.87l6.214-.054a9.707,9.707,0,0,0,9.707-9.7V564.843C482.185,559.483,477.839,555.137,471.788,555.191Z" transform="translate(-437.442 -555.191)" fill="url(#linear-gradient-2)"/>
</g>
<g id="组_854" data-name=" 854" transform="translate(731.813 447.58)">
<path id="路径_4038" data-name="路径 4038" d="M607.664,716.035l43.68-25.218V462.462l-43.68,25.218Z" transform="translate(-491.941 -395.65)" fill="#14b285"/>
<path id="路径_4039" data-name="路径 4039" d="M672.4,525.054l43.68-25.218-2.621-1.513-113.1-65.3-43.679,25.218Z" transform="translate(-556.673 -433.023)" fill="url(#linear-gradient-3)"/>
<path id="路径_4040" data-name="路径 4040" d="M672.4,525.054l43.68-25.218L600.353,433.023l-43.679,25.218Z" transform="translate(-556.673 -433.023)" fill="#1be2a0"/>
</g>
<path id="路径_4041" data-name="路径 4041" d="M619.627,545.077l27.638-15.956-47.609-27.487L572.018,517.59Z" transform="translate(194.62 101.657)" fill="#d6dcef"/>
<g id="组_855" data-name=" 855" transform="translate(731.812 472.798)">
<path id="路径_4042" data-name="路径 4042" d="M556.673,444.135V672.489L672.4,739.3V510.947Zm82.435,173.936L591.5,590.586V500.779l47.609,27.488Z" transform="translate(-556.673 -444.135)" fill="#0c9"/>
</g>
<path id="路径_4043" data-name="路径 4043" d="M572.018,558.9v-89.8l27.637,15.957v57.891Z" transform="translate(194.62 60.349)" fill="#c2cae8"/>
<path id="路径_4044" data-name="路径 4044" d="M596.306,694.906l80.366-46.4-80.366-46.4-80.366,46.4Z" transform="translate(123.428 229.208)" fill="#c2cae8"/>
<path id="路径_4045" data-name="路径 4045" d="M565.486,699.166l69.361-40.046L501.039,581.867l-69.361,40.046Z" transform="translate(16.458 203.512)" fill="url(#linear-gradient-4)"/>
<path id="路径_4046" data-name="路径 4046" d="M561.061,685.44l-87.732-50.652v-89.8l87.732,50.652Z" transform="translate(69.334 156.7)" fill="url(#linear-gradient-5)"/>
<path id="路径_4047" data-name="路径 4047" d="M511.986,677.592l63.432-36.623v-89.8L511.986,587.8Z" transform="translate(118.409 164.548)" fill="#c2cae8"/>
<g id="组_858" data-name=" 858" transform="translate(614.321 490.979)">
<path id="路径_4048" data-name="路径 4048" d="M558.323,601.815,504.9,570.973V465.736l53.42,30.842Z" transform="translate(-504.903 -434.894)" fill="#0c9"/>
<path id="路径_4049" data-name="路径 4049" d="M528.442,601.815l53.42-30.842V465.736l-53.42,30.842Z" transform="translate(-475.022 -434.894)" fill="#14b285"/>
<g id="组_856" data-name=" 856" transform="translate(4.485 41.667)">
<path id="路径_4050" data-name="路径 4050" d="M533.446,499.986l-13.472-7.778V478.066l13.472,7.778Z" transform="translate(-490.256 -460.908)" fill="#1be2a0"/>
<path id="路径_4051" data-name="路径 4051" d="M526.9,496.206l-13.472-7.778V474.286l13.472,7.778Z" transform="translate(-498.568 -465.707)" fill="#1be2a0"/>
<path id="路径_4052" data-name="路径 4052" d="M520.352,492.426l-13.472-7.778V470.506l13.472,7.778Z" transform="translate(-506.879 -470.506)" fill="#1be2a0"/>
<path id="路径_4053" data-name="路径 4053" d="M533.446,508.361l-13.472-7.778V486.44l13.472,7.778Z" transform="translate(-490.256 -450.277)" fill="#1be2a0"/>
<path id="路径_4054" data-name="路径 4054" d="M526.9,504.581,513.427,496.8V482.66l13.472,7.778Z" transform="translate(-498.568 -455.076)" fill="#1be2a0"/>
<path id="路径_4055" data-name="路径 4055" d="M533.446,516.735l-13.472-7.778V494.815l13.472,7.778Z" transform="translate(-490.256 -439.646)" fill="#1be2a0"/>
<path id="路径_4056" data-name="路径 4056" d="M526.9,529.7l-13.472-7.778V507.783l13.472,7.778Z" transform="translate(-498.568 -423.182)" fill="#1be2a0"/>
</g>
<g id="组_857" data-name=" 857" transform="translate(59.165 41.667)">
<path id="路径_4057" data-name="路径 4057" d="M530.973,499.986l13.472-7.778V478.066l-13.472,7.778Z" transform="translate(-530.973 -460.908)" fill="#0c9"/>
<path id="路径_4058" data-name="路径 4058" d="M537.52,496.206l13.472-7.778V474.286l-13.472,7.778Z" transform="translate(-522.661 -465.707)" fill="#0c9"/>
<path id="路径_4059" data-name="路径 4059" d="M544.067,492.426l13.472-7.778V470.506l-13.472,7.778Z" transform="translate(-514.35 -470.506)" fill="#0c9"/>
<path id="路径_4060" data-name="路径 4060" d="M530.973,508.361l13.472-7.778V486.44l-13.472,7.778Z" transform="translate(-530.973 -450.277)" fill="#0c9"/>
<path id="路径_4061" data-name="路径 4061" d="M537.52,504.581l13.472-7.778V482.66l-13.472,7.778Z" transform="translate(-522.661 -455.076)" fill="#0c9"/>
<path id="路径_4062" data-name="路径 4062" d="M544.067,500.8l13.472-7.778V478.88l-13.472,7.778Z" transform="translate(-514.35 -459.875)" fill="#0c9"/>
<path id="路径_4063" data-name="路径 4063" d="M530.973,516.735l13.472-7.778V494.815l-13.472,7.778Z" transform="translate(-530.973 -439.646)" fill="#0c9"/>
<path id="路径_4064" data-name="路径 4064" d="M537.52,512.955l13.472-7.778V491.035l-13.472,7.778Z" transform="translate(-522.661 -444.445)" fill="#0c9"/>
<path id="路径_4065" data-name="路径 4065" d="M537.52,521.33l13.472-7.778V499.409l-13.472,7.778Z" transform="translate(-522.661 -433.813)" fill="#0c9"/>
<path id="路径_4066" data-name="路径 4066" d="M537.52,529.7l13.472-7.778V507.783l-13.472,7.778Z" transform="translate(-522.661 -423.182)" fill="#0c9"/>
<path id="路径_4067" data-name="路径 4067" d="M544.067,525.924l13.472-7.778V504l-13.472,7.778Z" transform="translate(-514.35 -427.981)" fill="#0c9"/>
</g>
<path id="路径_4068" data-name="路径 4068" d="M558.323,513.83l53.42-30.842-53.42-30.842L504.9,482.988Z" transform="translate(-504.903 -452.146)" fill="url(#linear-gradient-6)"/>
<path id="路径_4069" data-name="路径 4069" d="M558.323,513.83l53.42-30.842-53.42-30.842L504.9,482.988Z" transform="translate(-504.903 -452.146)" fill="#1be2a0"/>
</g>
<path id="路径_4070" data-name="路径 4070" d="M573.3,685.55,465.839,623.506V513.515L573.3,575.558Z" transform="translate(59.826 116.74)" fill="#c2cae8"/>
<path id="路径_4071" data-name="路径 4071" d="M513.19,675.938l77.7-44.859V521.087l-77.7,44.859Z" transform="translate(119.937 126.353)" fill="#d6dcef"/>
<path id="路径_4072" data-name="路径 4072" d="M573.3,600.652,651,555.792,543.537,493.749l-77.7,44.859Z" transform="translate(59.826 91.647)" fill="url(#linear-gradient-7)"/>
<path id="路径_4073" data-name="路径 4073" d="M573.3,600.652,651,555.792,543.537,493.749l-77.7,44.859Z" transform="translate(59.826 91.647)" fill="#eff1f9"/>
<path id="路径_4074" data-name="路径 4074" d="M504.384,548.55l-31.238-18.035V498.542l31.238,18.035Z" transform="translate(69.102 97.733)" fill="#c2cae8"/>
<path id="路径_4075" data-name="路径 4075" d="M486.911,545.756l22.586-13.04V500.743l-22.586,13.04Z" transform="translate(86.576 100.527)" fill="#d6dcef"/>
<path id="路径_4076" data-name="路径 4076" d="M504.384,523.872l22.586-13.04L495.732,492.8l-22.586,13.04Z" transform="translate(69.102 90.438)" fill="#eff1f9"/>
<path id="路径_4077" data-name="路径 4077" d="M638.4,634.516l-31.238-18.035V584.508L638.4,602.543Z" transform="translate(239.237 206.865)" fill="#c2cae8"/>
<path id="路径_4078" data-name="路径 4078" d="M620.928,641.419l52.611-30.375V579.071l-52.611,30.375Z" transform="translate(256.711 199.963)" fill="#d6dcef"/>
<path id="路径_4079" data-name="路径 4079" d="M638.4,619.534l52.611-30.375-31.238-18.035L607.164,601.5Z" transform="translate(239.237 189.874)" fill="#eff1f9"/>
<g id="组_868" data-name=" 868" transform="translate(640.301 661.72)">
<g id="组_859" data-name=" 859" transform="translate(0 31.769)">
<path id="路径_4080" data-name="路径 4080" d="M516.351,586.945l7.943-4.586V541.377l-7.943,4.586Z" transform="translate(-516.351 -541.377)" fill="#c2cae8"/>
</g>
<g id="组_860" data-name=" 860" transform="translate(11.005 25.415)">
<path id="路径_4081" data-name="路径 4081" d="M521.2,584.145l7.943-4.586V538.578l-7.943,4.586Z" transform="translate(-521.2 -538.578)" fill="#c2cae8"/>
</g>
<g id="组_861" data-name=" 861" transform="translate(33.015 12.707)">
<path id="路径_4082" data-name="路径 4082" d="M530.9,578.546l7.944-4.586V532.979l-7.944,4.586Z" transform="translate(-530.898 -532.979)" fill="#c2cae8"/>
</g>
<g id="组_862" data-name=" 862" transform="translate(44.02 6.354)">
<path id="路径_4083" data-name="路径 4083" d="M535.747,575.746l7.944-4.586V530.179l-7.944,4.586Z" transform="translate(-535.747 -530.179)" fill="#c2cae8"/>
</g>
<g id="组_863" data-name=" 863" transform="translate(55.025)">
<path id="路径_4084" data-name="路径 4084" d="M540.6,572.946l7.944-4.586V527.379l-7.944,4.586Z" transform="translate(-540.596 -527.379)" fill="#c2cae8"/>
</g>
<g id="组_864" data-name=" 864" transform="translate(0 83.69)">
<path id="路径_4085" data-name="路径 4085" d="M516.351,609.822l7.943-4.586V564.255l-7.943,4.586Z" transform="translate(-516.351 -564.255)" fill="#c2cae8"/>
</g>
<g id="组_865" data-name=" 865" transform="translate(22.01 70.982)">
<path id="路径_4086" data-name="路径 4086" d="M526.049,604.223l7.943-4.586V558.656l-7.943,4.586Z" transform="translate(-526.049 -558.656)" fill="#c2cae8"/>
</g>
<g id="组_866" data-name=" 866" transform="translate(33.015 64.628)">
<path id="路径_4087" data-name="路径 4087" d="M530.9,601.424l7.944-4.586V555.856l-7.944,4.586Z" transform="translate(-530.898 -555.856)" fill="#c2cae8"/>
</g>
<g id="组_867" data-name=" 867" transform="translate(44.02 58.275)">
<path id="路径_4088" data-name="路径 4088" d="M535.747,598.624l7.944-4.586V553.057l-7.944,4.586Z" transform="translate(-535.747 -553.057)" fill="#c2cae8"/>
</g>
</g>
<g id="组_878" data-name=" 878" transform="translate(562.986 661.72)">
<g id="组_869" data-name=" 869" transform="translate(55.025 31.769)">
<path id="路径_4089" data-name="路径 4089" d="M514.473,586.945l-7.943-4.586V541.377l7.943,4.586Z" transform="translate(-506.529 -541.377)" fill="#eff1f9"/>
</g>
<g id="组_870" data-name=" 870" transform="translate(44.02 25.415)">
<path id="路径_4090" data-name="路径 4090" d="M509.623,584.145l-7.943-4.586V538.578l7.943,4.586Z" transform="translate(-501.68 -538.578)" fill="#eff1f9"/>
</g>
<g id="组_871" data-name=" 871" transform="translate(22.01 12.707)">
<path id="路径_4091" data-name="路径 4091" d="M499.925,578.546l-7.943-4.586V532.979l7.943,4.586Z" transform="translate(-491.982 -532.979)" fill="#eff1f9"/>
</g>
<g id="组_872" data-name=" 872" transform="translate(11.005 6.354)">
<path id="路径_4092" data-name="路径 4092" d="M495.076,575.746l-7.943-4.586V530.179l7.943,4.586Z" transform="translate(-487.133 -530.179)" fill="#eff1f9"/>
</g>
<g id="组_873" data-name=" 873">
<path id="路径_4093" data-name="路径 4093" d="M490.227,572.946l-7.943-4.586V527.379l7.943,4.586Z" transform="translate(-482.284 -527.379)" fill="#eff1f9"/>
</g>
<g id="组_874" data-name=" 874" transform="translate(55.025 83.69)">
<path id="路径_4094" data-name="路径 4094" d="M514.473,609.822l-7.943-4.586V564.255l7.943,4.586Z" transform="translate(-506.529 -564.255)" fill="#eff1f9"/>
</g>
<g id="组_875" data-name=" 875" transform="translate(33.015 70.982)">
<path id="路径_4095" data-name="路径 4095" d="M504.774,604.223l-7.944-4.586V558.656l7.944,4.586Z" transform="translate(-496.831 -558.656)" fill="#eff1f9"/>
</g>
<g id="组_876" data-name=" 876" transform="translate(22.01 64.628)">
<path id="路径_4096" data-name="路径 4096" d="M499.925,601.424l-7.943-4.586V555.856l7.943,4.586Z" transform="translate(-491.982 -555.856)" fill="#eff1f9"/>
</g>
<g id="组_877" data-name=" 877" transform="translate(11.005 58.275)">
<path id="路径_4097" data-name="路径 4097" d="M495.076,598.624l-7.943-4.586V553.057l7.943,4.586Z" transform="translate(-487.133 -553.057)" fill="#eff1f9"/>
</g>
</g>
<g id="组_879" data-name=" 879" transform="translate(639.368 684.9)">
<path id="路径_4098" data-name="路径 4098" d="M611,731.6l-80.366-46.4V558.038L611,604.437Z" transform="translate(-497.285 -511.638)" fill="#c2cae8"/>
<path id="路径_4099" data-name="路径 4099" d="M584.7,604.437v89.711L551.351,713.4v37.449L584.7,731.6l80.366-46.4V558.038Z" transform="translate(-470.985 -511.638)" fill="#d6dcef"/>
<path id="路径_4100" data-name="路径 4100" d="M611,630.391l80.366-46.4L611,537.593l-80.366,46.4Z" transform="translate(-497.285 -537.593)" fill="url(#linear-gradient-6)"/>
<path id="路径_4101" data-name="路径 4101" d="M611,630.391l80.366-46.4L611,537.593l-80.366,46.4Z" transform="translate(-497.285 -537.593)" fill="#eff1f9"/>
<path id="路径_4102" data-name="路径 4102" d="M596.306,663.221l33.35-19.254-80.366-46.4-33.35,19.254Z" transform="translate(-515.94 -461.456)" fill="#eff1f9"/>
<path id="路径_4103" data-name="路径 4103" d="M515.94,606.051v6.7l74.617,43.08V686.58l5.749,3.319V652.45Z" transform="translate(-515.94 -450.686)" fill="url(#linear-gradient-9)"/>
</g>
<g id="组_880" data-name=" 880" transform="translate(681.071 744.286)">
<path id="路径_4104" data-name="路径 4104" d="M601.576,616.735,534.315,577.9V563.76l67.261,38.833Z" transform="translate(-534.315 -563.76)" fill="#eff1f9"/>
<path id="路径_4105" data-name="路径 4105" d="M571.488,607.739l-13.472-7.778V585.818l13.472,7.778Z" transform="translate(-504.228 -535.757)" fill="#eff1f9"/>
<path id="路径_4106" data-name="路径 4106" d="M571.488,616.113l-13.472-7.778V594.192l13.472,7.778Z" transform="translate(-504.228 -525.126)" fill="#eff1f9"/>
<path id="路径_4107" data-name="路径 4107" d="M571.488,624.487l-13.472-7.778V602.567l13.472,7.778Z" transform="translate(-504.228 -514.495)" fill="#eff1f9"/>
<path id="路径_4108" data-name="路径 4108" d="M586.717,616.531l-52.4-30.254V572.134l52.4,30.254Z" transform="translate(-534.315 -553.129)" fill="#eff1f9"/>
<path id="路径_4109" data-name="路径 4109" d="M586.92,625.091l-41.06-23.828V587.12l41.06,23.828Z" transform="translate(-519.659 -534.104)" fill="#eff1f9"/>
</g>
<path id="路径_4110" data-name="路径 4110" d="M577.78,639.74l18.372-10.607V606.2L577.78,616.81Z" transform="translate(201.934 234.407)" fill="url(#linear-gradient-10)"/>
<path id="路径_4111" data-name="路径 4111" d="M579.626,627.816l9.994-5.77V609.572l-9.994,5.77Z" transform="translate(204.277 238.684)" fill="url(#linear-gradient-11)"/>
<image id="矩形_436" data-name="矩形 436" width="28.323" height="28.323" transform="translate(783.663 847.775)" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADQAAAA0CAYAAADFeBvrAAAAAXNSR0IArs4c6QAAADhlWElmTU0AKgAAAAgAAYdpAAQAAAABAAAAGgAAAAAAAqACAAQAAAABAAAANKADAAQAAAABAAAANAAAAAB+d885AAAICUlEQVRoBd1ay64UVRRtbogv5CmIgA+UxJCYqCP5AmbOjB9gnOnAOOMLjB9gnBkH/oUOTYhiMKJCjEaDUQGDISIC3u6+Xa619uOcqlv3dt/uvphYSeVU7Tpnn732WnvXpYsdTdMMlnHcvLX6yd7d959ehq9FfOxYFNCt28NP4WOEc4jcjCYYD+x98JVFglpk7UKA/r49PEsAAIKToGx02+jQgYdeWyS4edbOBejO3dF5BF0ATABqMBg1HMFSzRaBPnbo4bfmCW6eNVsCdPef8UVjosirD0Aw5eOQ4I8+uvvMPAFudc1MgFaH458YXEgpGCAjNVM1gA4o1RZsoyeO7Hlnq0FuZf5UQKvDtZ8dAOtEtTJp10yfbTSZIsPjj+97byuBzjp3Q0Cj8eT3CsAqrlEjKvpeAJwLoFk/tta6ntZaErC2ssHfiaf2fzRrsLPMW+lOWlub3ByPJ9cHTbOGzXmOeT3A2AxgG8CGc4BrrMW12zCX95iHNbG2wVrzUdk0R3as/eHyjVe7MSxy32JobdLcisyqYw0aSGdg7HRacs5ry1AM8FlPbdEXuiGZ7u2Gw5MnDn68CBiuFSDKwAIEgHZ90A5AIZPOvP7AsKa8lwxYP4Cyb+UfPp979tBn8wIjIBBT3imRPdiYbdZLnfW8LiCrtV0Wq8bg/rLG2vfFR0loM3z+5OFLWwW2QkDUc9aM1cgYjlgzOFUnGjv1UWqh1IzqzufZ2sZ8wF/WH+uO96xDJMbs7sPjGNP+1aVrT88BSA7lAM40EiQdtoDSpiA8EANKG8GzERQAuZZ2PXN/lryWjeDUcBhHgDfA3O/Li9eOnP/26iOzAmOXYzCWJVwra8aOBUMbnlfs9IPXPAalwHKkf+1BNujXfHn3Kwm05DGWOG3P2PuLr6/sOnfhyn3TgK2XnLLrAEwSKbsqMMt4gGBCnIkSmGwCgGcBIIESeAFbklBeB5S8wGF0cBynHCuWUTp0dtTxzFHFSmbOAnZGndkKqDaHL5eh+W1LWL7hb10SXO7JopThoNArmrWXXjg2AyDq15zLYcmQBW1ZdADGmLFj0si1hRkGbMHKF+cx01zro/lsM0CGJXfzW3zAlyVWjE7hZzBYCY3WoORcji2wcs8gFJjJQKxWwXJz2jIoA+dgWwyYTwfJ+Z6sklDadJKd8akXj02mosGElByuIZOSRTpDIMkAAXtgmb1kAgEJBAMgO1ybLT+TUBiIeVpXGCBIO+NPpmga9DfbgabgQZgz/d0GmwFRYAou5WLBaoNiMx/r/m4r7Jc9xADnE1SeAKBrb/1uhw2sNGtgB1NnO9C2ldFRUK6AU7d4ZkArGYUtslgYoA9sq1P+GFi/DAUegEOGNg97lSTEPvI3GxrMEkPphOCq7FlwsFlgymIlwyqIwsAGMkTNMbBgguyYXzFG/61TidkyO0TNGsosWY1E1mLkOyRBaWMCjYBiNPAeWGY+WRT4kHepRcyXAqI+lVDGgz/1mvEsbZog6oNdbp1+XYYWdCU5FT7BSRqURyQjwDuADmBs6DIMJgo78OUJNR+pFu4xx+FNQcFVWbR7AXBpOBNt8P31oXoz8IUBBi6muwC87irJ6SU6a5vuYva2HRljAHbtteCdKxmo2THd+/zCKlmQD4DHSABkLJntbdOeBM23PbqRzni/7sWKdew0FoSzI5tk5MG2dJ/BioFKhh6YA8j15sN8evJYx/6cSZiXHWI2hlhHHiTrg2eRTGQtCtdBKQgFFDJMxhSs+zF/sTZ8sW50HUlIBrU3I5vzsBrK7ACIs0LZwKcVs29egkhWMhAmQEmgr0qG9KFOan4lQ7dZAvRce83Vpru4JbnIoo0MzLKXAHxTk4VYKWDjmRgxJuAnGaCPBJushS3no00PZvprugugey/JOSvQcQCxbJvsZOsEZbYIVgCcgRazxk40CbEvdgiMzywJIXdKd+GDktN7ILNogVVBcHNjJYPN1mtM5NqKAQZbv1MseILw9142HrxE4X+RRlBnAYA8WJNZLxMI2LPoUkJ2S60VwLTBuWW/h4EKlO8TTNPfcg79piBpKZBs1965AIDsmDQqsGbbkAGXUrTiZDaZTtDRCDAu51jZt+eBlyWDjlyiPgyss+gBYWuyYO8Ol5DeXZUPk2EkA/NTAdEI9Mzkvhws8tL6Kfj6jTsfYOONvhz4z7vlh0cw559Jyg+FsG0yL35RlQ92wuE8f4Buhr/1Yz0+Ib5OeZEB1o236Rir+ojMR/stDDizVc3pme4riS6tTXfBtQDx4eGDu97EJ8S3PbCsn3V1lPUgOVY1RznKhgR4k6AUo0nQpqTpWTeehe9bkuvz9svVv86YDFtfDvibd/XDfp8Myw/7lGFn/ghSG/Xtt6ht5zQH+IT4Ludc/vXPNxBYyo8ZTwasSRibFQPGKtZYQ4DsQqrLa9Pd+NdJrjsh7vEJ8f2qBlyKVjvZ0UxWAK3A9Xeb1aFLrvzosbQ2HfHFOJWhmMjxmSf3f8gRX93wHysy270MOCuoF6uZuCdr9LFdx9Qa2mzj73784zTrAy0rv/sgcH1Dgq31LQl2zVl2m+7GtxCgcHbx++unCAR/lDmwfC8FONgHaARHh7Fmu8aZa2izAPAJ8XNvEta+o3moXW9vm+7GtRSGaqf46nacMqTEwBjH+ItgW9p0vTevlw4oNjj/zdUDlCHAjVlPy/rnQfjfaNw2QLHhuQu/7UQjoBTvybHtgO4JimqTpTSFyt9/fvm/A/Qvyw5oyuO8p0AAAAAASUVORK5CYII=" style="mix-blend-mode: soft-light;isolation: isolate"/>
<path id="路径_4112" data-name="路径 4112" d="M590.528,629.839,608.9,619.232V596.3l-18.372,10.607Z" transform="translate(218.117 221.837)" fill="url(#linear-gradient-10)"/>
<path id="路径_4113" data-name="路径 4113" d="M592.373,617.915l9.994-5.77V599.67l-9.994,5.77Z" transform="translate(220.46 226.114)" fill="url(#linear-gradient-11)"/>
<image id="矩形_437" data-name="矩形 437" width="28.323" height="28.323" transform="translate(812.531 825.443)" xlink:href="data:image/png;base64,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" style="mix-blend-mode: soft-light;isolation: isolate"/>
<path id="路径_4114" data-name="路径 4114" d="M584.014,614.93l13.5-7.793V590.29l-13.5,7.793Z" transform="translate(209.848 214.206)" fill="url(#linear-gradient-10)"/>
<path id="路径_4115" data-name="路径 4115" d="M584.786,609.943l9.994-5.77V591.7l-9.994,5.77Z" transform="translate(210.828 215.994)" fill="url(#linear-gradient-11)"/>
<image id="矩形_438" data-name="矩形 438" width="19.608" height="22.876" transform="translate(795.101 807.469)" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACQAAAAqCAYAAADbCvnoAAAAAXNSR0IArs4c6QAAADhlWElmTU0AKgAAAAgAAYdpAAQAAAABAAAAGgAAAAAAAqACAAQAAAABAAAAJKADAAQAAAABAAAAKgAAAAC29n+nAAAD2klEQVRYCe1YTYrUQBjNNAPiVgXFWSgyIIOLERd6E2/gDVx4A2/gDUTwAuLKreJmcKGIC8XBdgZ0nHHsbibpTvze91OpVLpjfntlQ5FUdSXv1XvvS6V7I8uyqI/Ppy9H99M0m1Kb7GxfetX2nhtdCX3eP34AEos0BRnXFjS2u3P5Y1NirQl9HZ88FCI5CSVE5HQsy6Z3bl05aEJq1GSyzd3//vsROR2nWZSQwtZiOkfL+2kWv303Pm/X1Tlu1plkc8aHp4+hAoGiAZgIRNaoHyVEMicWCTm7vs6xFqHDH5MnQiSaUgkkaQp1CmoQkcwbg3JELI2Su7tb8zpEbE4loZ+/pk+Rh4IiZEPGK2dQARaVWCFRTcnSPAOqe1yZoaPj2XPJiK5WQTU3tHoG5cyQOkTG+o7onNRZ1CVi80oKnZyevfRykueBQNUmtgLWlTKjxMw+A2lydIT+TOPXSmQiN+Swqg3lzEAhJejmaMDRn9+7vZU2IWJzN2dn8w8a2InKTjf0SlfCGoJqyUMls0quIZI8ZgBNjyM/C2oBwAulHIIqYc2RywxI4rqE1Gm9H41wA2nOAg4qQC0L+Rx5zjir5DnD1qkyc1zXVBV/PhEiyTkPRoyPXj7yCnJEZBEINyuihLGQuIs6IAZCUAK+J6F9BARAH5TzwYvAfFJISYIMyryTOkpIQbFaV8rFoCppVsDsQ17wxLY+5vjStz0fOXVUIVmxs4+DqiqIikFVmVp9qGMKIdRYKXKzxDqMSa50HtlkfVaSr2mrSHidhNqIgFjBOgAX7VO1YJ8RRXYabaAhCb/PZQ+Q0JYcuGifqMVKaqay2L9h13NkyAumWkevDaJADkzzbIztVRtbbaBVpLnsQ1v49UIqyCNbtA6EsZiqm7f5DpZ5oLqJyqsFKwLQpSpSsNtuoFVEnUIKbEHF0XvO5NapMky26sZtv/MUKoCSatTHXsVqFVRk0kOog0WwQmqJb51sCSAjGygUYeto7mDqMCEhIyAWVCXISmjGiIwr/06vF/+yEpYBGOpYYwWgiDaoZWP0K+Jq75Xlk4RlAGZABfaIhWT72UB9AuG5KSSZ8ciBKKyj11tTp5fXi5BA2GeFKjPDryRiX3jxEH3aOtw24TKjFkpfyr7XDbRqIZqhwnMGFeVypWU/aJB9giBkGSk8Z1z1ye/zxr9AfZAm56PtaxeeackTMauqvOShUJMbdp3Lv+1v3rj4QoJtjwAmRpXH/16sTR0spvQP2t77g+tU6vYv2GyoPWulkpShaFl7s/ft3LLxocdKCq1kvqYvVv4/tCb8Esx/QiVJgoG/9frSm/sV22oAAAAASUVORK5CYII=" style="mix-blend-mode: soft-light;isolation: isolate"/>
<g id="组_881" data-name=" 881" transform="translate(713.658 702.498)">
<path id="路径_4116" data-name="路径 4116" d="M602.22,550.869l-16.91,9.761,15.762,9.119,16.908-9.761,9.546,5.522-44,25.4-9.546-5.522,18.41-10.63-15.762-9.119-18.41,10.63-9.543-5.522,44-25.4Z" transform="translate(-548.674 -545.347)" fill="#d6dcef"/>
</g>
<g id="组_884" data-name=" 884" transform="translate(776.037 623.912)">
<path id="路径_4117" data-name="路径 4117" d="M591.774,553.852a9.6,9.6,0,0,1-4.133-.935A1.615,1.615,0,1,1,589.031,550a6.377,6.377,0,0,0,5.93-.234l21.181-12.23a1.617,1.617,0,0,1,1.616,2.8l-21.181,12.228A9.6,9.6,0,0,1,591.774,553.852Z" transform="translate(-562.754 -476.951)" fill="#2a4fca"/>
<path id="路径_4118" data-name="路径 4118" d="M611.195,558.5a.607.607,0,0,1-.6-.542c-.011-.132-1.437-13.109-9.541-17.643-1.938-1.085-3.5-1.287-4.63-.6-2.717,1.65-2.565,7.737-2.565,7.8a.605.605,0,1,1-1.21.039c-.009-.279-.175-6.856,3.143-8.872,1.534-.933,3.5-.74,5.853.574,8.658,4.845,10.1,18.017,10.156,18.576a.607.607,0,0,1-.543.665Z" transform="translate(-555.236 -475.957)" fill="#2a4fca"/>
<path id="路径_4119" data-name="路径 4119" d="M617.365,555.088a.6.6,0,0,1-.6-.545c-.013-.129-1.437-13.106-9.541-17.641-1.938-1.085-3.5-1.284-4.632-.6-2.258,1.373-2.614,6.1-2.562,7.8a.6.6,0,0,1-.586.624.626.626,0,0,1-.624-.585c-.009-.279-.175-6.856,3.143-8.871,1.534-.935,3.5-.74,5.851.574,8.658,4.845,10.1,18.018,10.156,18.576a.606.606,0,0,1-.54.665Z" transform="translate(-547.399 -480.29)" fill="#2a4fca"/>
<path id="路径_4120" data-name="路径 4120" d="M621.044,527.568l1.9-3.919-6.547-3.69a1,1,0,0,0-.949-.018h0a1.449,1.449,0,0,0-.3,2.369Z" transform="translate(-527.275 -499.156)" fill="url(#linear-gradient-16)"/>
<path id="路径_4121" data-name="路径 4121" d="M606.692,548.6l42.138-27.5a1.533,1.533,0,0,0-.073-2.61h0a1.531,1.531,0,0,0-1.448-.043L604.8,539.614Z" transform="translate(-539.808 -501.116)" fill="url(#linear-gradient-17)"/>
<g id="组_882" data-name=" 882" transform="translate(26.825 31.893)">
<path id="路径_4122" data-name="路径 4122" d="M634.124,529.786c-5.588-9-29.6-4.212-38.6,1.375a19.161,19.161,0,0,0-5.32,4.909c-4,23.358,25.268,6,30.625,8.179,3.583,1.462-4.237,16.063-15.108,18.344a17.139,17.139,0,0,1-16.545-5.3c.054.093.1.188.163.282a19.183,19.183,0,0,0,26.415,6.184C624.758,558.176,639.71,538.79,634.124,529.786Z" transform="translate(-586.46 -524.773)" fill="url(#linear-gradient-18)"/>
<path id="路径_4123" data-name="路径 4123" d="M607.242,556.275c10.871-2.281,18.692-16.883,15.108-18.344-5.356-2.183-34.626,15.179-30.625-8.179a19.184,19.184,0,0,0-1.028,21.227A17.139,17.139,0,0,0,607.242,556.275Z" transform="translate(-587.98 -518.453)" fill="url(#linear-gradient-19)"/>
<path id="路径_4124" data-name="路径 4124" d="M607.242,556.275c10.871-2.281,18.692-16.883,15.108-18.344-5.356-2.183-34.626,15.179-30.625-8.179a19.184,19.184,0,0,0-1.028,21.227A17.139,17.139,0,0,0,607.242,556.275Z" transform="translate(-587.98 -518.453)" fill="url(#linear-gradient-20)"/>
</g>
<path id="路径_4125" data-name="路径 4125" d="M599.68,558.417a9.611,9.611,0,0,1-4.133-.935,1.616,1.616,0,0,1,1.391-2.916,6.38,6.38,0,0,0,5.928-.234l21.183-12.23a1.616,1.616,0,0,1,1.616,2.8l-21.183,12.23A9.6,9.6,0,0,1,599.68,558.417Z" transform="translate(-552.717 -471.155)" fill="#2a4fca"/>
<path id="路径_4126" data-name="路径 4126" d="M620.788,532.14l5.624-3.245,2.227-16.5a.606.606,0,0,0-.9-.606h0a5.334,5.334,0,0,0-2.492,3.268Z" transform="translate(-519.505 -509.473)" fill="url(#linear-gradient-21)"/>
<path id="路径_4127" data-name="路径 4127" d="M617.477,524.592l4.251-2.456,6.316,3.209a.579.579,0,0,1,.027,1.019h0a3.689,3.689,0,0,1-2.828.363Z" transform="translate(-523.708 -496.226)" fill="url(#linear-gradient-22)"/>
<g id="组_883" data-name=" 883">
<image id="矩形_439" data-name="矩形 439" width="70.264" height="28.323" transform="translate(14.162)" xlink:href="data:image/png;base64,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"/>
<image id="矩形_440" data-name="矩形 440" width="47.932" height="38.672" transform="translate(49.021 9.26)" xlink:href="data:image/png;base64,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"/>
<image id="矩形_441" data-name="矩形 441" width="49.566" height="39.217" transform="translate(0 8.17)" xlink:href="data:image/png;base64,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"/>
<image id="矩形_442" data-name="矩形 442" width="70.808" height="28.868" transform="translate(12.528 27.779)" xlink:href="data:image/png;base64,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"/>
</g>
</g>
<path id="路径_4128" data-name="路径 4128" d="M470.426,568.313h-3.373a2.4,2.4,0,0,1-2.154-1.337l-2.719-5.49a2.4,2.4,0,0,0-2.154-1.337H448.911A2.4,2.4,0,0,0,446.6,561.9l-1.328,4.668a2.4,2.4,0,0,1-2.313,1.747h-.47a2.4,2.4,0,0,0-2.4,2.406v3.638a2.4,2.4,0,0,0,2.4,2.406h2.653a3.792,3.792,0,0,0,6.863,0h8.846a3.792,3.792,0,0,0,6.863,0h2.712a2.4,2.4,0,0,0,2.4-2.406v-3.638A2.4,2.4,0,0,0,470.426,568.313Zm-23.067-.068,1.382-5.76h11.608l2.5,5.76Z" transform="translate(27.131 175.943)" fill="#fff"/>
<g id="组_885" data-name=" 885" transform="translate(472.373 796.702)">
<path id="路径_4129" data-name="路径 4129" d="M557.3,654.349l-.363-.209L452.444,593.81a.727.727,0,1,1,.728-1.257L557.3,652.671l21.646-12.5a.726.726,0,1,1,.729,1.257Z" transform="translate(-430.013 -579.748)" fill="#fff"/>
<path id="路径_4130" data-name="路径 4130" d="M491.177,623.168a.726.726,0,0,1-.363-1.355L512.823,609.1a.727.727,0,0,1,.726,1.26L491.54,623.07A.734.734,0,0,1,491.177,623.168Z" transform="translate(-381.304 -558.734)" fill="#fff"/>
<path id="路径_4131" data-name="路径 4131" d="M483.5,618.736a.726.726,0,0,1-.363-1.355l22.009-12.707a.727.727,0,1,1,.726,1.26l-22.01,12.707A.719.719,0,0,1,483.5,618.736Z" transform="translate(-391.046 -564.359)" fill="#fff"/>
<path id="路径_4132" data-name="路径 4132" d="M475.83,614.306a.726.726,0,0,1-.365-1.355l22.01-12.707a.727.727,0,1,1,.729,1.257l-22.01,12.709A.755.755,0,0,1,475.83,614.306Z" transform="translate(-400.788 -569.983)" fill="#fff"/>
<path id="路径_4133" data-name="路径 4133" d="M468.156,609.877a.726.726,0,0,1-.363-1.355l22.01-12.709a.727.727,0,0,1,.726,1.26l-22.01,12.707A.722.722,0,0,1,468.156,609.877Z" transform="translate(-410.529 -575.608)" fill="#fff"/>
<path id="路径_4134" data-name="路径 4134" d="M460.483,605.445a.726.726,0,0,1-.365-1.355l22.01-12.707a.726.726,0,1,1,.726,1.257L460.846,605.35A.729.729,0,0,1,460.483,605.445Z" transform="translate(-420.271 -581.232)" fill="#fff"/>
<path id="路径_4135" data-name="路径 4135" d="M452.809,601.015a.726.726,0,0,1-.365-1.355l22.012-12.707a.726.726,0,1,1,.726,1.257l-22.01,12.707A.733.733,0,0,1,452.809,601.015Z" transform="translate(-430.013 -586.856)" fill="#fff"/>
<path id="路径_4136" data-name="路径 4136" d="M489.127,633.166a.726.726,0,0,1-.365-1.355l22.01-12.707a.727.727,0,1,1,.729,1.257l-22.01,12.707A.734.734,0,0,1,489.127,633.166Z" transform="translate(-383.907 -546.04)" fill="#fff"/>
<path id="路径_4137" data-name="路径 4137" d="M481.453,628.737a.727.727,0,0,1-.363-1.357l22.01-12.707a.727.727,0,0,1,.726,1.259L481.816,628.64A.732.732,0,0,1,481.453,628.737Z" transform="translate(-393.649 -551.665)" fill="#fff"/>
<path id="路径_4138" data-name="路径 4138" d="M473.78,624.305a.726.726,0,0,1-.365-1.355l22.009-12.707a.727.727,0,0,1,.726,1.26L474.141,624.21A.717.717,0,0,1,473.78,624.305Z" transform="translate(-403.391 -557.289)" fill="#fff"/>
<path id="路径_4139" data-name="路径 4139" d="M466.106,619.875a.726.726,0,0,1-.365-1.355l22.012-12.707a.726.726,0,0,1,.726,1.257l-22.01,12.707A.734.734,0,0,1,466.106,619.875Z" transform="translate(-413.132 -562.913)" fill="#fff"/>
<path id="路径_4140" data-name="路径 4140" d="M458.432,615.446a.727.727,0,0,1-.363-1.357l22.01-12.707a.727.727,0,0,1,.726,1.26L458.8,615.348A.733.733,0,0,1,458.432,615.446Z" transform="translate(-422.874 -568.538)" fill="#fff"/>
<path id="路径_4141" data-name="路径 4141" d="M450.759,611.015a.726.726,0,0,1-.365-1.355l22.01-12.707a.727.727,0,1,1,.728,1.257L451.12,610.92A.716.716,0,0,1,450.759,611.015Z" transform="translate(-432.616 -574.163)" fill="#fff"/>
<path id="路径_4142" data-name="路径 4142" d="M443.085,606.584a.726.726,0,0,1-.365-1.355l22.012-12.707a.726.726,0,0,1,.726,1.257l-22.01,12.707A.733.733,0,0,1,443.085,606.584Z" transform="translate(-442.357 -579.786)" fill="#fff"/>
</g>
<g id="组_889" data-name=" 889" transform="translate(552.833 515.596)">
<g id="组_886" data-name=" 886">
<path id="路径_4143" data-name="路径 4143" d="M479.367,482.431a1.559,1.559,0,0,1-1.557-1.559,17.9,17.9,0,0,1,17.879-17.879,1.558,1.558,0,0,1,0,3.116,14.779,14.779,0,0,0-14.763,14.763A1.559,1.559,0,0,1,479.367,482.431Z" transform="translate(-477.81 -462.993)" fill="#fff"/>
</g>
<g id="组_887" data-name=" 887" transform="translate(5.524 5.524)">
<path id="路径_4144" data-name="路径 4144" d="M481.8,479.341a1.559,1.559,0,0,1-1.559-1.559A12.369,12.369,0,0,1,492.6,465.427a1.559,1.559,0,0,1,0,3.118,9.248,9.248,0,0,0-9.239,9.237A1.558,1.558,0,0,1,481.8,479.341Z" transform="translate(-480.244 -465.427)" fill="#fff"/>
</g>
<g id="组_888" data-name=" 888" transform="translate(10.975 10.975)">
<path id="路径_4145" data-name="路径 4145" d="M484.2,476.292a1.558,1.558,0,0,1-1.557-1.559,6.911,6.911,0,0,1,6.9-6.9,1.559,1.559,0,0,1,0,3.118,3.791,3.791,0,0,0-3.788,3.785A1.559,1.559,0,0,1,484.2,476.292Z" transform="translate(-482.646 -467.829)" fill="#fff"/>
</g>
<circle id="椭圆_72" data-name="椭圆 72" cx="2.083" cy="2.083" r="2.083" transform="translate(16.142 16.064)" fill="#fff"/>
</g>
<g id="组_890" data-name=" 890" transform="translate(611.293 451.873)">
<path id="路径_4146" data-name="路径 4146" d="M537.915,434.915H512.583c-4.668-.055-9.014,4.289-9.014,9.65V469.9a9.707,9.707,0,0,0,9.707,9.707l6.527.054a4.871,4.871,0,0,1,4.87,4.87V505.81a1.426,1.426,0,0,0,1.425,1.425h0a1.426,1.426,0,0,0,1.425-1.425V484.529a4.871,4.871,0,0,1,4.87-4.87l6.214-.054a9.705,9.705,0,0,0,9.7-9.707V444.565C548.312,439.2,543.968,434.861,537.915,434.915Z" transform="translate(-503.569 -434.915)" fill="url(#linear-gradient)"/>
</g>
<g id="组_891" data-name=" 891" transform="translate(857.147 421.557)">
<path id="路径_4147" data-name="路径 4147" d="M646.245,421.557H620.913c-4.668-.055-9.014,4.292-9.014,9.652v25.332a9.705,9.705,0,0,0,9.707,9.7l6.527.055a4.871,4.871,0,0,1,4.87,4.87v21.281a1.425,1.425,0,0,0,1.425,1.425h0a1.425,1.425,0,0,0,1.425-1.425V471.171a4.871,4.871,0,0,1,4.87-4.87l6.214-.055a9.7,9.7,0,0,0,9.7-9.7V431.209C656.642,425.849,652.3,421.5,646.245,421.557Z" transform="translate(-611.899 -421.557)" fill="url(#linear-gradient)"/>
</g>
<g id="组_892" data-name=" 892" transform="translate(725.927 882.848)">
<path id="路径_4148" data-name="路径 4148" d="M558.528,677.027a1.476,1.476,0,0,1-1.475-1.477v-41.13a9.535,9.535,0,0,1,14.3-8.259,1.476,1.476,0,1,1-1.475,2.558,6.585,6.585,0,0,0-9.877,5.7v41.13A1.476,1.476,0,0,1,558.528,677.027Z" transform="translate(-550.306 -624.747)" fill="#059bfd"/>
<image id="矩形_443" data-name="矩形 443" width="44.664" height="66.995" transform="translate(0 1.421)" xlink:href="data:image/png;base64,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" style="mix-blend-mode: soft-light;isolation: isolate"/>
<path id="路径_4149" data-name="路径 4149" d="M561.709,625.7c1.475-1.589,7.816-.744,10.192.243a4.819,4.819,0,0,1,1.4.865,2.5,2.5,0,0,1,.272,3.747l-.043.05c-1.475,1.589-4.6,2.077-6.976,1.092S560.234,627.288,561.709,625.7Z" transform="translate(-544.803 -624.814)" fill="url(#linear-gradient-25)"/>
</g>
<path id="路径_4150" data-name="路径 4150" d="M520.648,448.8a4.775,4.775,0,1,0-5.426-.014l-3.431.949a2.7,2.7,0,0,0-1.977,2.6v4.559a1.873,1.873,0,0,0,1.872,1.872h12.444A1.871,1.871,0,0,0,526,456.889v-4.559a2.7,2.7,0,0,0-1.974-2.6Z" transform="translate(115.65 23.526)" fill="#fff"/>
<path id="路径_4151" data-name="路径 4151" d="M515.159,448.069l.833-.232-1.911-.529a3.44,3.44,0,1,0-3.908-.011l-1.92.531a2.7,2.7,0,0,0-1.974,2.6v2.185a1.871,1.871,0,0,0,1.872,1.872h5.032v-3.82A2.694,2.694,0,0,1,515.159,448.069Z" transform="translate(111.164 24.729)" fill="#fff"/>
<path id="路径_4152" data-name="路径 4152" d="M524.139,447.828l-1.879-.52a3.44,3.44,0,1,0-3.908-.011l-2.058.57.726.2a2.692,2.692,0,0,1,1.977,2.6v3.82h5.245a1.871,1.871,0,0,0,1.872-1.872v-2.185A2.7,2.7,0,0,0,524.139,447.828Z" transform="translate(123.877 24.729)" fill="#fff"/>
<g id="组_893" data-name=" 893" transform="translate(898.17 690.707)">
<path id="路径_4153" data-name="路径 4153" d="M664.322,540.152H638.99c-4.668-.054-9.015,4.289-9.015,9.65v25.332a9.707,9.707,0,0,0,9.707,9.707l6.527.054a4.869,4.869,0,0,1,4.87,4.87v21.279a1.426,1.426,0,0,0,1.425,1.425h0a1.425,1.425,0,0,0,1.425-1.425V589.766a4.871,4.871,0,0,1,4.87-4.87l6.214-.054a9.705,9.705,0,0,0,9.7-9.707V549.8C674.718,544.442,670.374,540.1,664.322,540.152Z" transform="translate(-629.975 -540.152)" fill="url(#linear-gradient)"/>
</g>
<path id="路径_4154" data-name="路径 4154" d="M633.891,546.637v14.7h27.288v-14.7Zm14.057,11.731v1.487h-.9v-1.443a4.2,4.2,0,0,1-2.188-.629l.343-.958a3.821,3.821,0,0,0,2.059.615c1.014,0,1.7-.588,1.7-1.4,0-.785-.558-1.271-1.616-1.7-1.457-.572-2.358-1.228-2.358-2.472a2.344,2.344,0,0,1,2.158-2.3v-1.443h.885v1.387a3.806,3.806,0,0,1,1.859.5l-.359.944a3.438,3.438,0,0,0-1.8-.486c-1.1,0-1.514.658-1.514,1.228,0,.744.529,1.114,1.77,1.629,1.473.6,2.215,1.344,2.215,2.615A2.485,2.485,0,0,1,647.948,558.368Z" transform="translate(273.167 158.789)" fill="#fff"/>
<path id="路径_4155" data-name="路径 4155" d="M615.828,427.732V445.74h26.909V427.732Zm16.892,1h3.3v2.188h-3.3Zm-5.088,0h3.3v2.188h-3.3Zm-10.181,0h3.3v2.188h-3.3Zm3.422,15.939h-3.3v-2.322h3.3Zm1.668-15.939h3.3v2.188h-3.3Zm3.422,15.939h-3.3v-2.322h3.3Zm5.09,0h-3.3v-2.322h3.3Zm-3.9-4.487a.627.627,0,0,1-.942-.542v-6.25a.627.627,0,0,1,.942-.542l5.413,3.123a.628.628,0,0,1,0,1.087Zm8.987,4.487h-3.3v-2.322h3.3Zm1.666-15.939h3.3v2.188h-3.3Zm3.422,15.939h-3.3v-2.322h3.3Z" transform="translate(250.236 7.839)" fill="#fff"/>
<path id="路径_4156" data-name="路径 4156" d="M603.022,685.754a.726.726,0,0,1-.372-1.35l130.857-77.531a.727.727,0,0,1,.74,1.251L603.392,685.651A.741.741,0,0,1,603.022,685.754Z" transform="translate(233.055 235.129)" fill="#fff"/>
<g id="组_894" data-name=" 894" transform="translate(865.668 855.058)">
<path id="路径_4157" data-name="路径 4157" d="M680.66,694.137l-3.328,1.922-58.35-37.532-3.328-44.036,3.328-1.922,61.678,35.61Z" transform="translate(-615.654 -612.569)" fill="#14b285"/>
<path id="路径_4158" data-name="路径 4158" d="M636.113,685.265l-5.227,3.018V634.4l5.227-3.018Z" transform="translate(-596.316 -588.681)" fill="#14b285"/>
<path id="路径_4159" data-name="路径 4159" d="M637.653,690.5l-12.1-6.985V629.638l12.1,6.985Z" transform="translate(-603.084 -590.9)" fill="#0c9"/>
<path id="路径_4160" data-name="路径 4160" d="M677.332,694.983l-61.678-35.61V613.416l61.678,35.61Z" transform="translate(-615.654 -611.494)" fill="url(#linear-gradient-27)"/>
</g>
<path id="路径_4161" data-name="路径 4161" d="M693.471,629.966l-35.019-20.653,4.493-2.675,35.466,20.477Z" transform="translate(304.347 234.958)" fill="#fff"/>
<g id="组_895" data-name=" 895" transform="translate(418.713 873.017)">
<path id="路径_4162" data-name="路径 4162" d="M435.223,628.023a1.266,1.266,0,0,1-1.11-1.87l2.378-4.371a1.266,1.266,0,0,1,2.224,1.21l-2.381,4.371A1.266,1.266,0,0,1,435.223,628.023Z" transform="translate(-399.359 -619.671)" fill="#fda388"/>
<path id="路径_4163" data-name="路径 4163" d="M435.237,621.208a2.716,2.716,0,1,1-.145,3.838A2.716,2.716,0,0,1,435.237,621.208Z" transform="translate(-398.84 -620.483)" fill="#fdbf8d"/>
<ellipse id="椭圆_73" data-name="椭圆 73" cx="15.185" cy="8.546" rx="15.185" ry="8.546" transform="translate(0 68.911)" opacity="0.15" fill="url(#linear-gradient-28)"/>
<path id="路径_4164" data-name="路径 4164" d="M428.794,659.922l-2-5.072a2.1,2.1,0,0,0-2.866-1.121h0a2.1,2.1,0,0,0-.847,3.044l2.982,4.564A1.547,1.547,0,0,0,428.794,659.922Z" transform="translate(-413.61 -578.541)" fill="#2a4fca"/>
<path id="路径_4165" data-name="路径 4165" d="M433.334,656.019l-3.77-3.942a2.1,2.1,0,0,0-3.075.041h0a2.1,2.1,0,0,0,.361,3.139l4.482,3.1A1.549,1.549,0,0,0,433.334,656.019Z" transform="translate(-409.534 -581.198)" fill="#2a4fca"/>
<path id="路径_4166" data-name="路径 4166" d="M427.942,641.693a1.924,1.924,0,0,1-.3-3.824c9.382-1.475,11.336-3.881,16.324-14.443a1.922,1.922,0,0,1,3.477,1.641c-5.131,10.866-7.932,14.827-19.2,16.6A1.943,1.943,0,0,1,427.942,641.693Z" transform="translate(-409.437 -618.146)" fill="#4e80fd"/>
<path id="路径_4167" data-name="路径 4167" d="M424.743,659.818a1.922,1.922,0,0,1-1.922-1.922v-4.875a1.922,1.922,0,0,1,3.845,0V657.9A1.922,1.922,0,0,1,424.743,659.818Z" transform="translate(-413.499 -581.615)" fill="#1f3b97"/>
<path id="路径_4168" data-name="路径 4168" d="M427.94,657.9a1.922,1.922,0,0,1-1.922-1.922V651.1a1.922,1.922,0,1,1,3.845,0v4.875A1.922,1.922,0,0,1,427.94,657.9Z" transform="translate(-409.44 -584.059)" fill="#1f3b97"/>
<path id="路径_4169" data-name="路径 4169" d="M424.8,671.984l-.1,0a2.024,2.024,0,0,1-1.925-2.12l1.393-28.845a2.024,2.024,0,0,1,4.044.2l-1.393,28.845A2.026,2.026,0,0,1,424.8,671.984Z" transform="translate(-413.556 -596.858)" fill="#059bfd"/>
<path id="路径_4170" data-name="路径 4170" d="M428.466,669.814a2.022,2.022,0,0,1-2.022-1.963l-.84-28.266a2.024,2.024,0,1,1,4.046-.12l.84,28.267a2.025,2.025,0,0,1-1.963,2.083Z" transform="translate(-409.966 -598.88)" fill="#059bfd"/>
<path id="路径_4171" data-name="路径 4171" d="M425.414,647.335a2.023,2.023,0,0,1-2.024-2.024v-6.5a2.025,2.025,0,0,1,1.616-1.984l4.834-.994a2.027,2.027,0,0,1,2.431,1.884l.188,3.885a2.018,2.018,0,0,1-.84,1.743l-5.022,3.613A2.016,2.016,0,0,1,425.414,647.335Zm2.024-6.879v.905l.924-.665-.02-.427Z" transform="translate(-412.777 -601.054)" fill="#059bfd"/>
<path id="路径_4172" data-name="路径 4172" d="M422.992,651.781c0-8.815-.03-11.186-.03-17.373,0-8.111,10.238-7,11.03-2.392.713,4.133.427,15.9.427,18.322,0,.676-.894,1.369-2.183,1.934-.365.161-1.257-5.572-1.257-5.572s-.765,6.277-1.2,6.382C426.612,653.846,422.992,653.789,422.992,651.781Z" transform="translate(-413.319 -610.395)" fill="#4e80fd"/>
<rect id="矩形_444" data-name="矩形 444" width="9.717" height="13.717" transform="translate(10.316 26.673) rotate(36.956)" fill="#2a4fca"/>
<path id="路径_4173" data-name="路径 4173" d="M426.328,649.178a1.919,1.919,0,0,1-1.06-.32c-3.554-2.351-5.361-5.1-5.367-8.175-.009-3.792,2.742-7.56,8.177-11.2a1.922,1.922,0,1,1,2.138,3.2c-4.178,2.8-6.475,5.633-6.47,7.989,0,1.707,1.232,3.382,3.645,4.977a1.924,1.924,0,0,1-1.062,3.529Z" transform="translate(-417.206 -609.463)" fill="#4e80fd"/>
<path id="路径_4174" data-name="路径 4174" d="M421.766,638.653a2.717,2.717,0,1,0,2.717-2.716A2.717,2.717,0,0,0,421.766,638.653Z" transform="translate(-414.838 -600.863)" fill="#fd9d6e"/>
<path id="路径_4175" data-name="路径 4175" d="M428.133,629.465c1.046,2.469.586,10.71.586,10.71s-4.11-7.621-3.994-10.4a1.626,1.626,0,0,1,1.63-1.344A1.872,1.872,0,0,1,428.133,629.465Z" transform="translate(-411.086 -610.396)" fill="#fff"/>
<path id="路径_4176" data-name="路径 4176" d="M426.208,633.426a1.33,1.33,0,0,1-.336-.046,1.267,1.267,0,0,1-.885-1.555l1.25-4.575a1.264,1.264,0,0,1,2.44.665l-1.251,4.578A1.266,1.266,0,0,1,426.208,633.426Z" transform="translate(-410.806 -613.075)" fill="#fda388"/>
<path id="路径_4177" data-name="路径 4177" d="M432.906,628.209a4.312,4.312,0,1,0-4.312,4.312A4.313,4.313,0,0,0,432.906,628.209Z" transform="translate(-411.644 -616.148)" fill="#fdbf8d"/>
<path id="路径_4178" data-name="路径 4178" d="M433.631,629.418s-1.464,1.793-5.386.59c0,0-2.027-.284-2.156,2.458,0,0-4.525-4.269.079-8.027C431.032,620.469,436.917,626.855,433.631,629.418Z" transform="translate(-411.874 -617.07)" fill="#2a4fca"/>
<circle id="椭圆_74" data-name="椭圆 74" cx="0.984" cy="0.984" r="0.984" transform="translate(13.651 12.876)" fill="#fdbf8d"/>
</g>
<g id="组_902" data-name=" 902" transform="translate(434.563 905.349)">
<ellipse id="椭圆_75" data-name="椭圆 75" cx="15.185" cy="8.546" rx="15.185" ry="8.546" transform="translate(0 55.153)" opacity="0.15" fill="url(#linear-gradient-29)"/>
<g id="组_901" data-name=" 901" transform="translate(7.663 2.498)">
<g id="组_900" data-name=" 900">
<g id="组_896" data-name=" 896" transform="translate(0.712 10.188)">
<path id="路径_4179" data-name="路径 4179" d="M436.259,657.629a2.044,2.044,0,0,1-1.216-.4c-2.719-2-5.283-4.319-5.619-7.651-.27-2.683.955-5.492,3.749-8.583a2.051,2.051,0,1,1,3.043,2.75c-1.945,2.152-2.855,3.976-2.71,5.422.166,1.643,1.707,3.091,3.972,4.759a2.051,2.051,0,0,1-1.219,3.7Z" transform="translate(-429.387 -640.319)" fill="#1f3b97"/>
</g>
<path id="路径_4180" data-name="路径 4180" d="M431.063,667.553a1.991,1.991,0,0,1-1.214-3.568l4.047-3.121a1.472,1.472,0,0,1,2.013,2.127l-3.338,3.87a1.992,1.992,0,0,1-1.489.692Zm4.435-4.607Zm-.8-1.039h0Z" transform="translate(-429.073 -604.437)" fill="#2a4fca"/>
<path id="路径_4181" data-name="路径 4181" d="M439.791,648.108a2.474,2.474,0,1,0-2.785,2.115A2.473,2.473,0,0,0,439.791,648.108Z" transform="translate(-421.72 -623.81)" fill="#ff8d80"/>
<path id="路径_4182" data-name="路径 4182" d="M430.981,680.057a1.644,1.644,0,0,1-1.555-2.17c3.706-10.919,3.549-26.1,3.547-26.251a1.642,1.642,0,0,1,1.62-1.661l.023,0a1.643,1.643,0,0,1,1.641,1.62c.007.645.163,15.9-3.724,27.35A1.641,1.641,0,0,1,430.981,680.057Z" transform="translate(-428.737 -617.876)" fill="#059bfd"/>
<path id="路径_4183" data-name="路径 4183" d="M435.354,668.08a1.991,1.991,0,0,1-.86-3.785l4.607-2.206a1.471,1.471,0,0,1,1.525,2.5l-4.069,3.089A2,2,0,0,1,435.354,668.08Zm4.314-4.809h0Z" transform="translate(-423.626 -602.679)" fill="#2a4fca"/>
<path id="路径_4184" data-name="路径 4184" d="M435.788,683.93a1.639,1.639,0,0,1-1.639-1.6l-.93-32.313a1.642,1.642,0,1,1,3.282-.093l.928,32.313a1.639,1.639,0,0,1-1.593,1.686Z" transform="translate(-423.811 -619.957)" fill="#059bfd"/>
<path id="路径_4185" data-name="路径 4185" d="M434.234,644.167a1.317,1.317,0,0,1-1.3-1.5l.556-3.942a1.313,1.313,0,0,1,2.6.368l-.556,3.942A1.313,1.313,0,0,1,434.234,644.167Z" transform="translate(-424.192 -633.585)" fill="#ff585d"/>
<g id="组_897" data-name=" 897" transform="translate(13.368 8.351)">
<path id="路径_4186" data-name="路径 4186" d="M440.057,652.3l5.542-8.488a2.79,2.79,0,0,0-.844-3.856h0a2.8,2.8,0,0,0-3.86.844l-5.544,8.49C433.712,651.6,437.663,655.336,440.057,652.3Z" transform="translate(-434.964 -639.509)" fill="url(#linear-gradient-30)"/>
</g>
<path id="路径_4187" data-name="路径 4187" d="M442.415,673.838c0-9.107.025-21.749.025-28.142,0-8.381-10.571-7.14-11.391-2.376-.735,4.271-.44,26.519-.44,29.025,0,.7.924,1.416,2.256,2,.379.168,2.09.729,2.542.837C438.677,675.973,442.415,675.912,442.415,673.838Z" transform="translate(-427.198 -631.082)" fill="#1f3b97"/>
<g id="组_898" data-name=" 898" transform="translate(10.053 9.599)">
<path id="路径_4188" data-name="路径 4188" d="M440.366,656.061a2.052,2.052,0,0,1-.837-3.926c1.947-.867,2.653-1.664,2.669-2.081.007-.213-.147-2.188-7.6-6.13a2.052,2.052,0,0,1,1.92-3.627c6.872,3.636,9.89,6.686,9.784,9.9-.079,2.3-1.793,4.219-5.1,5.692A2.042,2.042,0,0,1,440.366,656.061Z" transform="translate(-433.503 -640.059)" fill="#1f3b97"/>
</g>
<path id="路径_4189" data-name="路径 4189" d="M439.779,640.912a3.928,3.928,0,1,0-4.907,2.6A3.93,3.93,0,0,0,439.779,640.912Z" transform="translate(-425.237 -635.83)" fill="#ff8d80"/>
<g id="组_899" data-name=" 899" transform="translate(9.548 15.776)">
<path id="路径_4190" data-name="路径 4190" d="M438.374,654.1l3.82-5.955a2.788,2.788,0,0,0-.847-3.856l-2.351-1.5-5.329,8.306C432.029,653.4,435.978,657.138,438.374,654.1Z" transform="translate(-433.281 -642.781)" fill="url(#linear-gradient-31)"/>
<path id="路径_4191" data-name="路径 4191" d="M433.619,648.234a2.137,2.137,0,1,0,2.138-2.131A2.136,2.136,0,0,0,433.619,648.234Z" transform="translate(-432.851 -638.564)" fill="url(#linear-gradient-32)"/>
</g>
</g>
</g>
<path id="路径_4192" data-name="路径 4192" d="M442.37,642c-1.384,1.194,1.891,5.054-.157,6.3-1.393.847-2.746,1.255-3.406,2.036-1.087,1.28,1.282,2.821-.542,5.5-4.675,6.87-13.651.849-10.156-4.205,1.273-1.841,3.461-1.718,4.943-4.028,1.212-1.891.758-2.751.905-5.787.148-3.089,3.829-7.249,7.335-7.081,5.569.263,5.848,3.913,5.549,4.988C446.618,640.512,443.539,641,442.37,642Z" transform="translate(-423.637 -634.729)" fill="#2a4fca"/>
</g>
</g>
</svg>
</div>
</el-col>
<el-col :span="8">
<p style="color: #22cece">绿色供应链</p>
<el-card
shadow="never"
v-for="(item, index) in evaluation"
:key="index"
>
<span>{{ item.title }}</span>
<span class="score">{{ item.score }}</span>
</el-card>
<div
class="con-evaluation"
v-for="(item, index) in con_evaluation"
:key="index"
>
<div class="badge"></div><span>{{ item }}</span>
</div>
</el-col>
</el-row>
</div>
</template>
<script>
export default {
data() {
return {
companyValue: "我的公司",
chartsValue: "全观图",
evaluation: [
{ title: "客户评价", score: 3 },
{ title: "供应商评价", score: 1 },
{ title: "外包业务", score: 2 },
],
con_evaluation: [
"客户评价及公司对外宣传及评价较好;",
"供应商评价一般;",
"外包业务评价较好;",
],
};
},
methods: {},
};
</script>
<style lang='scss' scoped>
.el-row {
margin: 0 0 40px 0;
}
p {
margin: 0;
}
.strip {
justify-content: space-between;
padding:30px 40px;
border-radius: 30px;
box-sizing: border-box;
}
.el-select {
/deep/ .el-input__inner {
color: #22d3aa;
}
}
.el-card {
margin: 20px 0;
font-size: 14px;
/deep/ .el-card__body {
display: flex;
justify-content: space-between;
.score {
color: #22cece;
}
}
}
.con-evaluation{
display: flex;
align-items: center;
margin: 20px 0;
.badge{
margin-right: 20px;
}
span{
font-size: 14px;
color: #767676;
}
}
.svg-box{
width: 100%;
display: flex;
margin-top: 80px;
}
</style>

View File

@ -0,0 +1,142 @@
<!-- 环境 -->
<template>
<div>
<el-row>
<div class="strip" style="width: 100%; height: 40px; background: #22d3aa">
<h2 style="color: #fff">环境/Environmental</h2>
<h2 style="color: #fff">32/65</h2>
</div>
</el-row>
<el-row>
<el-col :span="16">
<el-select
v-model="companyValue"
style="margin-right: 20px"
></el-select>
<el-select v-model="chartsValue"></el-select>
</el-col>
</el-row>
<el-row>
<el-col :span="12" v-for="(item, index) in data" :key="index">
<div class="flex-sb" style="flex-wrap: wrap; margin: 20px 0">
<div style="color: #26C7C7; width: 100%;margin:10px 0">{{ item.title }}</div>
<div class="flex-sb" style="width: 90%">
<p>您的公司</p>
<el-progress
:percentage="item.company"
:color="'#D2D6D9'"
:show-text="false"
></el-progress>
</div>
<div class="flex-sb" style="width: 90%">
<p>行业平均</p>
<el-progress
:percentage="item.industry"
:color="'#26C7C7'"
:show-text="false"
></el-progress>
</div>
</div>
</el-col>
</el-row>
</div>
</template>
<script>
export default {
data() {
return {
companyValue: "行业筛选",
chartsValue: "全观",
data: [
{ title: "绿色理念/green concept", company: 80, industry: 85 },
{ title: "绿色产品/green product", company: 70, industry: 80 },
{
title: "绿色组织架构/Green Organization Structure",
company: 76,
industry: 75,
},
{ title: "绿色供应链/green supply chain", company: 60, industry: 87 },
{ title: "绿色环境/green environment", company: 90, industry: 85 },
{ title: "绿色评价/green evaluation", company: 60, industry: 55 },
{
title: "绿色生产与办公/Green production and office",
company: 70,
industry: 63,
},
],
};
},
methods: {},
};
</script>
<style lang='scss' scoped>
.el-row {
margin: 0 0 40px 0;
}
p {
margin: 0;
}
.strip {
justify-content: space-between;
padding: 30px 40px;
border-radius: 30px;
box-sizing: border-box;
}
.el-select {
/deep/ .el-input__inner {
color: #22d3aa;
}
}
.el-card {
margin: 20px 0;
font-size: 14px;
/deep/ .el-card__body {
display: flex;
justify-content: space-between;
.score {
color: #22cece;
}
}
}
.con-evaluation {
display: flex;
align-items: center;
margin: 20px 0;
.badge {
margin-right: 20px;
}
span {
font-size: 14px;
color: #767676;
}
}
.svg-box {
width: 100%;
display: flex;
margin-top: 80px;
}
.flex-sb {
p {
font-size: 12px;
width: 50px;
}
}
.el-progress {
width: calc(95% - 50px);
margin: 10px 0;
}
</style>

52
src/pages/menu/index.vue Normal file
View File

@ -0,0 +1,52 @@
<template>
<el-container>
<esg-header></esg-header>
<el-container class="container">
<esg-aside @getActiveIndex="getActiveIndex"></esg-aside>
<el-main>
<conclusion v-if="activeIndex === '1'"/>
<env v-else-if="activeIndex === '2'"/>
<esg-progress v-else/>
</el-main>
</el-container>
</el-container>
</template>
<script>
import esgHeader from "@/components/esgHeader";
import esgAside from "@/components/esgAside"
import conclusion from "./children/conclusion"
import env from './children/environmental'
import esgProgress from './children/progress.vue'
export default {
components: {
esgHeader,
esgAside,
conclusion,
env,
esgProgress
},
data() {
return {
form: {},
activeIndex:'1'
};
},
methods:{
getActiveIndex(key){
this.activeIndex = key
}
}
};
</script>
<style lang='scss' scoped>
.container {
height: calc(100% - 80px);
display: flex;
flex-wrap: nowrap;
}
.el-main{
padding: 40px 100px;
}
</style>

47
src/pages/user/login.vue Normal file
View File

@ -0,0 +1,47 @@
<template>
<el-container>
<esg-header :bgcolor="'#A3AAB1'"></esg-header>
<el-main style="background:#A3AAB1">
<div class="form-box">
<h2 style="color: #fff">LOGIN</h2>
<el-form ref="form" :model="form" style="width:500px">
<el-form-item>
<el-input placeholder="NAME"></el-input>
</el-form-item>
<el-form-item>
<el-input placeholder="PASSWORD"></el-input>
</el-form-item>
<el-form-item>
<el-radio label="1">同意上述条例和协议</el-radio>
</el-form-item>
<el-row style="margin-top: 20px">
<el-col :span="11"
><el-button size="large" type="info">SIGN IN</el-button></el-col
>
<el-col :span="11" :offset="2"
><el-button size="large" type="info">LOGIN</el-button></el-col
>
</el-row>
</el-form>
</div>
</el-main>
</el-container>
</template>
<script>
import esgHeader from "@/components/esgHeader";
export default {
components: {
esgHeader,
},
data() {
return {
form: {},
};
},
};
</script>
<style lang='scss' scoped>
@import "@/assets/css/user.scss"
</style>

View File

@ -0,0 +1,75 @@
<template>
<el-container>
<esg-header></esg-header>
<el-main>
<div class="form-box">
<h2 style="color: #fff">REGISTER</h2>
<el-form ref="form" :model="form">
<el-form-item>
<el-input placeholder="NAME"></el-input>
</el-form-item>
<el-row>
<el-col :span="11">
<el-form-item>
<el-input placeholder="PASSWORD"></el-input> </el-form-item
></el-col>
<el-col :span="11" :offset="2">
<el-form-item>
<el-input
placeholder="CONFIRM PASSWORD"
></el-input> </el-form-item
></el-col>
</el-row>
<el-row>
<el-col :span="11">
<el-form-item>
<el-input placeholder="COMPANY"></el-input> </el-form-item
></el-col>
<el-col :span="11" :offset="2">
<el-form-item>
<el-input placeholder="JOB TITLE"></el-input> </el-form-item
></el-col>
</el-row>
<el-row>
<el-col :span="11">
<el-form-item>
<el-input placeholder="EMAIL"></el-input> </el-form-item
></el-col>
<el-col :span="11" :offset="2">
<el-form-item>
<el-input placeholder="PHONE"></el-input> </el-form-item
></el-col>
</el-row>
<el-row>
<el-radio label="1">同意上述条例和协议</el-radio>
</el-row>
<el-row style="margin-top:20px">
<el-col :span="11"
><el-button size="large" type="info">SIGN IN</el-button></el-col
>
<el-col :span="11" :offset="2"
><el-button size="large" type="info">LOGIN</el-button></el-col
>
</el-row>
</el-form>
</div>
</el-main>
</el-container>
</template>
<script>
import esgHeader from "@/components/esgHeader";
export default {
components: {
esgHeader,
},
data() {
return {
form: {},
};
},
};
</script>
<style lang='scss' scoped>
@import "@/assets/css/user.scss"
</style>

40
src/router/index.js Normal file
View File

@ -0,0 +1,40 @@
import Vue from 'vue'
import Router from 'vue-router'
import home from '@/pages/home'
Vue.use(Router)
export default new Router({
routes: [
{
path: '/',
name: 'home',
component: home
},
{
path:'/login',
name: 'login',
component: ()=>import("@/pages/user/login")
},
{
path:'/register',
name: 'register',
component: ()=>import("@/pages/user/register")
},
{
path: '/home2',
name: 'home',
component: ()=>import("@/pages/home2")
},
{
path: '/home3',
name: 'home',
component: ()=>import("@/pages/home3")
},
{
path: '/conclusion',
name: 'conclusion',
component: ()=>import("@/pages/menu/index")
},
]
})

22
src/utils/message.js Normal file
View File

@ -0,0 +1,22 @@
import { Message } from "element-ui";
let messageInstance = null;
let mainMessage = function DoneMessage(options) {
//如果弹窗已存在先关闭
if (messageInstance) {
messageInstance.close();
}
messageInstance = Message(options);
}
let arr = ['success', 'warning', 'info', 'error'];
arr.forEach(function (type) {
mainMessage[type] = function (options) {
if (typeof options === 'string') {
options = {
message: options
};
}
options.type = type;
return mainMessage(options);
};
});
export const message = mainMessage;

0
static/.gitkeep Normal file
View File