This commit is contained in:
朱文强 2023-04-14 15:11:35 +08:00
commit 3af0c32022
436 changed files with 880768 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"]
}

14
.editorconfig Normal file
View File

@ -0,0 +1,14 @@
# http://editorconfig.org
root = true
[*]
charset = utf-8
indent_style = space
indent_size = 2
end_of_line = lf
insert_final_newline = true
trim_trailing_whitespace = true
[*.md]
insert_final_newline = false
trim_trailing_whitespace = false

15
.gitignore vendored Normal file
View File

@ -0,0 +1,15 @@
.DS_Store
node_modules/
dist/
npm-debug.log*
yarn-debug.log*
yarn-error.log*
package-lock.json
# 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": {}
}
}

4
Dockerfile Normal file
View File

@ -0,0 +1,4 @@
# Dockerfile
FROM nginx:alpine
COPY dist/ /usr/share/nginx/html/
EXPOSE 80

22
README.md Normal file
View File

@ -0,0 +1,22 @@
### 本地运行
```
npm install
npm run dev
```
### 打包
```
npm install
npm run build:prod
编译结果report/report-ui/dist目录
```
### 前端技术
- [npm](https://www.npmjs.com/)node.js的包管理工具用于统一管理我们前端项目中需要用到的包、插件、工具、命令等便于开发和维护。
- [webpack](https://webpack.docschina.org/):用于现代 JavaScript 应用程序的_静态模块打包工具
- [ES6](https://es6.ruanyifeng.com/)Javascript的新版本ECMAScript6的简称。利用ES6我们可以简化我们的JS代码同时利用其提供的强大功能来快速实现JS逻辑。
- [vue-cli](https://cli.vuejs.org/)Vue的脚手架工具用于自动生成Vue项目的目录及文件。
- [vue-router](https://router.vuejs.org/) Vue提供的前端路由工具利用其我们实现页面的路由控制局部刷新及按需加载构建单页应用实现前后端分离。
- [element-ui](https://element.eleme.cn/#/zh-CN)基于MVVM框架Vue开源出来的一套前端ui组件。
- [avue](https://www.avuejs.com/): 用该组件包裹后可以变成拖拽组件,采用相对于父类绝对定位;用键盘的上下左右也可以控制移动
- [vue-echarts](https://www.npmjs.com/package/vue-echarts/): vue-echarts是封装后的vue插件,基于 ECharts v4.0.1+ 开发
- [vue-superslide](https://www.npmjs.com/package/vue-super-slider/): Vue-SuperSlide(Github) 是 SuperSlide 的 Vue 封装版本
- [vuedraggable](https://github.com/SortableJS/Vue.Draggable/): 是一款基于Sortable.js实现的vue拖拽插件。

45
build/build.js Normal file
View File

@ -0,0 +1,45 @@
'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 ' + process.env.NODE_ENV + '...')
spinner.start()
rm(path.join(config.build.assetsRoot, config.build.assetsSubDirectory), err => {
if (err) throw err
webpack(webpackConfig, (err, stats) => {
spinner.stop()
if (err) throw err
process.stdout.write(
stats.toString({
colors: true,
modules: false,
children: false,
chunks: false,
chunkModules: false
}) + '\n\n'
)
if (stats.hasErrors()) {
console.log(chalk.red(' Build failed with errors.\n'))
process.exit(1)
}
console.log(chalk.cyan(' Build complete.\n'))
console.log(
chalk.yellow(
' Tip: built files are meant to be served over an HTTP server.\n' +
" Opening index.html over file:// won't work.\n"
)
)
})
})

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

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

108
build/utils.js Normal file
View File

@ -0,0 +1,108 @@
'use strict'
const path = require('path')
const config = require('../config')
const MiniCssExtractPlugin = require('mini-css-extract-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 = []
// Extract CSS when that option is specified
// (which is the case during production build)
if (options.extract) {
loaders.push(MiniCssExtractPlugin.loader)
} else {
loaders.push('vue-style-loader')
}
loaders.push(cssLoader)
if (options.usePostCSS) {
loaders.push(postcssLoader)
}
if (loader) {
loaders.push({
loader: loader + '-loader',
options: Object.assign({}, loaderOptions, {
sourceMap: options.sourceMap
})
})
}
return 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')
})
}
}

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

@ -0,0 +1,5 @@
'use strict'
module.exports = {
//You can set the vue-loader configuration by yourself.
}

View File

@ -0,0 +1,93 @@
'use strict'
const path = require('path')
const utils = require('./utils')
const config = require('../config')
const {
VueLoaderPlugin
} = require('vue-loader')
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: config.build.assetsPublicPath //process.env.NODE_ENV === 'production' ? config.build.assetsPublicPath : config.dev.assetsPublicPath
},
resolve: {
extensions: ['.js', '.vue', '.json'],
alias: {
'@': resolve('src')
}
},
module: {
rules: [{
test: /\.vue$/,
loader: 'vue-loader',
options: vueLoaderConfig
},
{
test: /\.js$/,
loader: 'babel-loader',
include: [
resolve('src'),
resolve('test'),
resolve('node_modules/webpack-dev-server/client')
]
},
{
test: /\.svg$/,
loader: 'svg-sprite-loader',
include: [resolve('src/icons')],
options: {
symbolId: 'icon-[name]'
}
},
{
test: /\.(png|jpe?g|gif|svg)(\?.*)?$/,
loader: 'url-loader',
exclude: [resolve('src/icons')],
options: {
limit: 10000,
name: utils.assetsPath('img/[name].[hash:7].[ext]')
}
},
{
test: /\.(mp4|webm|ogg|mp3|wav|flac|aac)(\?.*)?$/,
loader: 'url-loader',
options: {
limit: 10000,
name: utils.assetsPath('media/[name].[hash:7].[ext]')
}
},
{
test: /\.(woff2?|eot|ttf|otf)(\?.*)?$/,
loader: 'url-loader',
options: {
limit: 10000,
name: utils.assetsPath('fonts/[name].[hash:7].[ext]')
}
}
]
},
plugins: [new VueLoaderPlugin()],
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'
}
}

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

@ -0,0 +1,100 @@
'use strict'
const path = require('path')
const utils = require('./utils')
const webpack = require('webpack')
const config = require('../config')
const merge = require('webpack-merge')
const baseWebpackConfig = require('./webpack.base.conf')
const HtmlWebpackPlugin = require('html-webpack-plugin')
const FriendlyErrorsPlugin = require('friendly-errors-webpack-plugin')
const portfinder = require('portfinder')
function resolve(dir) {
return path.join(__dirname, '..', dir)
}
const HOST = process.env.HOST
const PORT = process.env.PORT && Number(process.env.PORT)
const devWebpackConfig = merge(baseWebpackConfig, {
mode: 'development',
output: {
path: config.build.assetsRoot,
filename: '[name].js',
publicPath: config.dev.assetsPublicPath
},
module: {
rules: utils.styleLoaders({
sourceMap: config.dev.cssSourceMap,
usePostCSS: true
})
},
// cheap-module-eval-source-map is faster for development
devtool: config.dev.devtool,
// these devServer options should be customized in /config/index.js
devServer: {
clientLogLevel: 'warning',
historyApiFallback: true,
hot: true,
compress: true,
host: HOST || config.dev.host,
port: PORT || config.dev.port,
open: config.dev.autoOpenBrowser,
overlay: config.dev.errorOverlay
? { warnings: false, errors: true }
: false,
publicPath: config.dev.assetsPublicPath,
proxy: config.dev.proxyTable,
quiet: true, // necessary for FriendlyErrorsPlugin
watchOptions: {
poll: config.dev.poll
}
},
plugins: [
new webpack.DefinePlugin({
'process.env': require('../config/dev.env')
}),
new webpack.HotModuleReplacementPlugin(),
// https://github.com/ampedandwired/html-webpack-plugin
new HtmlWebpackPlugin({
filename: 'index.html',
template: 'index.html',
inject: true,
favicon: resolve('static/favicon.ico'),
title: 'vue-admin-template'
})
]
})
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)
}
})
})

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

@ -0,0 +1,182 @@
'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 ScriptExtHtmlWebpackPlugin = require('script-ext-html-webpack-plugin')
const MiniCssExtractPlugin = require('mini-css-extract-plugin')
const OptimizeCSSAssetsPlugin = require('optimize-css-assets-webpack-plugin')
const UglifyJsPlugin = require('uglifyjs-webpack-plugin')
function resolve(dir) {
return path.join(__dirname, '..', dir)
}
var env = require('../config/dev.env')
if (process.env.NODE_ENV === 'testing') {
env = require('../config/test.env')
}
if (process.env.NODE_ENV === 'production') {
env = require('../config/prod.env')
}
// For NamedChunksPlugin
const seen = new Set()
const nameLength = 4
const webpackConfig = merge(baseWebpackConfig, {
mode: 'production',
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:8].js'),
chunkFilename: utils.assetsPath('js/[name].[chunkhash:8].js')
},
plugins: [
// http://vuejs.github.io/vue-loader/en/workflow/production.html
new webpack.DefinePlugin({
'process.env': env
}),
// extract css into its own file
new MiniCssExtractPlugin({
filename: utils.assetsPath('css/[name].[contenthash:8].css'),
chunkFilename: utils.assetsPath('css/[name].[contenthash:8].css')
}),
// generate dist index.html with correct asset hash for caching.
// you can customize output by editing /index.html
// see https://github.com/ampedandwired/html-webpack-plugin
new HtmlWebpackPlugin({
filename: config.build.index,
template: 'index.html',
inject: true,
favicon: resolve('static/favicon.ico'),
title: 'vue-admin-template',
minify: {
removeComments: true,
collapseWhitespace: true,
removeAttributeQuotes: true
// more options:
// https://github.com/kangax/html-minifier#options-quick-reference
}
// default sort mode uses toposort which cannot handle cyclic deps
// in certain cases, and in webpack 4, chunk order in HTML doesn't
// matter anyway
}),
new ScriptExtHtmlWebpackPlugin({
//`runtime` must same as runtimeChunk name. default is `runtime`
inline: /runtime\..*\.js$/
}),
// keep chunk.id stable when chunk has no name
new webpack.NamedChunksPlugin(chunk => {
if (chunk.name) {
return chunk.name
}
const modules = Array.from(chunk.modulesIterable)
if (modules.length > 1) {
const hash = require('hash-sum')
const joinedHash = hash(modules.map(m => m.id).join('_'))
let len = nameLength
while (seen.has(joinedHash.substr(0, len))) len++
seen.add(joinedHash.substr(0, len))
return `chunk-${joinedHash.substr(0, len)}`
} else {
return modules[0].id
}
}),
// keep module.id stable when vender modules does not change
new webpack.HashedModuleIdsPlugin(),
// copy custom static assets
new CopyWebpackPlugin([{
from: path.resolve(__dirname, '../static'),
to: config.build.assetsSubDirectory,
ignore: ['.*']
}])
],
optimization: {
splitChunks: {
chunks: 'all',
cacheGroups: {
libs: {
name: 'chunk-libs',
test: /[\\/]node_modules[\\/]/,
priority: 10,
chunks: 'initial' // 只打包初始时依赖的第三方
},
elementUI: {
name: 'chunk-elementUI', // 单独将 elementUI 拆包
priority: 20, // 权重要大于 libs 和 app 不然会被打包进 libs 或者 app
test: /[\\/]node_modules[\\/]element-ui[\\/]/
}
}
},
runtimeChunk: 'single',
minimizer: [
new UglifyJsPlugin({
uglifyOptions: {
mangle: {
safari10: true
}
},
sourceMap: config.build.productionSourceMap,
cache: true,
parallel: true
}),
// Compress extracted CSS. We are using this plugin so that possible
// duplicated CSS from different components can be deduped.
new OptimizeCSSAssetsPlugin()
]
}
})
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.generateAnalyzerReport || config.build.bundleAnalyzerReport) {
const BundleAnalyzerPlugin = require('webpack-bundle-analyzer')
.BundleAnalyzerPlugin
if (config.build.bundleAnalyzerReport) {
webpackConfig.plugins.push(
new BundleAnalyzerPlugin({
analyzerPort: 8080,
generateStatsFile: false
})
)
}
if (config.build.generateAnalyzerReport) {
webpackConfig.plugins.push(
new BundleAnalyzerPlugin({
analyzerMode: 'static',
reportFilename: 'bundle-report.html',
openAnalyzer: false
})
)
}
}
module.exports = webpackConfig

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

@ -0,0 +1,16 @@
/*
* @Author: zwq
* @Date: 2023-02-07 08:55:09
* @LastEditors: zwq
* @LastEditTime: 2023-02-27 14:59:13
* @Description:
*/
'use strict'
const merge = require('webpack-merge')
const prodEnv = require('./prod.env')
module.exports = merge(prodEnv, {
NODE_ENV: '"development"',
BASE_API: '"http://192.168.1.12:9095"'
//BASE_API: '"http://10.108.26.197:9095"'
})

93
config/index.js Normal file
View File

@ -0,0 +1,93 @@
/*
* @Author: zwq
* @Date: 2023-02-07 08:55:09
* @LastEditors: zwq
* @LastEditTime: 2023-02-24 10:25:00
* @Description:
*/
'use strict'
// Template version: 1.2.6
// see http://vuejs-templates.github.io/webpack for documentation.
const path = require('path')
module.exports = {
dev: {
// Paths
assetsSubDirectory: 'static',
assetsPublicPath: '/',
proxyTable: {},
// Various Dev Server settings
host: '192.168.1.59', // can be overwritten by process.env.HOST
port: 9528, // can be overwritten by process.env.PORT, if port is in use, a free one will be determined
autoOpenBrowser: true,
errorOverlay: true,
notifyOnErrors: false,
poll: false, // https://webpack.js.org/configuration/dev-server/#devserver-watchoptions-
// Use Eslint Loader?
// If true, your code will be linted during bundling and
// linting errors and warnings will be shown in the console.
useEslint: true,
// If true, eslint errors and warnings will also be shown in the error overlay
// in the browser.
showEslintErrorsInOverlay: false,
/**
* Source Maps
*/
// https://webpack.js.org/configuration/devtool/#development
devtool: 'cheap-source-map',
// CSS Sourcemaps off by default because relative paths are "buggy"
// with this option, according to the CSS-Loader README
// (https://github.com/webpack/css-loader#sourcemaps)
// In our experience, they generally work as expected,
// just be aware of this issue when enabling this option.
cssSourceMap: false
},
build: {
// Template for index.html
index: path.resolve(__dirname, '../dist/index.html'),
// Paths
assetsRoot: path.resolve(__dirname, '../dist'),
assetsSubDirectory: 'static',
/**
* You can set by youself according to actual condition
* You will need to set this if you plan to deploy your site under a sub path,
* for example GitHub pages. If you plan to deploy your site to https://foo.github.io/bar/,
* then assetsPublicPath should be set to "/bar/".
* In most cases please use '/' !!!
*/
assetsPublicPath: '/',
/**
* Source Maps
*/
productionSourceMap: false,
// https://webpack.js.org/configuration/devtool/#production
devtool: 'source-map',
// Gzip off by default as many popular static hosts such as
// Surge or Netlify already gzip all static assets for you.
// Before setting to `true`, make sure to:
// npm install --save-dev compression-webpack-plugin
productionGzip: false,
productionGzipExtensions: ['js', 'css'],
// Run the build command with an extra argument to
// View the bundle analyzer report after build finishes:
// `npm run build --report`
// Set to `true` or `false` to always turn it on or off
bundleAnalyzerReport: process.env.npm_config_report || false,
// `npm run build:prod --generate_report`
generateAnalyzerReport: process.env.npm_config_generate_report || false
}
}

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

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

8
config/test.env.js Normal file
View File

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

31
index.html Normal file
View File

@ -0,0 +1,31 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1.0">
<title>AJ-Report</title>
<link rel='stylesheet' href='./static/luckysheet/plugins/css/pluginsCss.css' />
<link rel='stylesheet' href='./static/luckysheet/plugins/plugins.css' />
<link rel='stylesheet' href='./static/luckysheet/css/luckysheet.css' />
<!-- <link rel='stylesheet' href='./static/luckysheet/assets/iconfont/iconfont.css' /> -->
<script src="./static/luckysheet/plugins/js/plugin.js"></script>
<script src="./static/luckysheet/luckysheet.umd.js"></script>
<!-- <link rel='stylesheet' href='https://cdn.jsdelivr.net/npm/luckysheet/dist/plugins/css/pluginsCss.css' />-->
<!-- <link rel='stylesheet' href='https://cdn.jsdelivr.net/npm/luckysheet/dist/plugins/plugins.css' />-->
<!-- <link rel='stylesheet' href='https://cdn.jsdelivr.net/npm/luckysheet/dist/css/luckysheet.css' />-->
<!-- <link rel='stylesheet' href='https://cdn.jsdelivr.net/npm/luckysheet/dist/assets/iconfont/iconfont.css' />-->
<!-- <script src="https://cdn.jsdelivr.net/npm/luckysheet/dist/plugins/js/plugin.js"></script>-->
<!-- <script src="https://cdn.jsdelivr.net/npm/luckysheet/dist/luckysheet.umd.js"></script>-->
</head>
<body>
<div id="app"></div>
<!-- built files will be auto injected -->
</body>
</html>

104
package.json Normal file
View File

@ -0,0 +1,104 @@
{
"name": "mirror-manager",
"version": "3.8.0",
"description": "mirror-manager",
"author": "mirror-team@anji-plus.com",
"scripts": {
"dev": "webpack-dev-server --inline --progress --config build/webpack.dev.conf.js",
"start": "npm run dev",
"build": "cross-env NODE_ENV=production node build/build.js",
"build:dev": "cross-env NODE_ENV=development node build/build.js",
"build:test": "cross-env NODE_ENV=testing node build/build.js",
"build:prod": "cross-env NODE_ENV=production node build/build.js"
},
"dependencies": {
"@ckeditor/ckeditor5-build-decoupled-document": "^23.1.0",
"@smallwei/avue": "^2.8.23",
"axios": "0.18.0",
"chokidar": "^3.5.2",
"codemirror": "^5.58.1",
"crypto-js": "^3.1.9-1",
"echarts": "^4.9.0",
"echarts-gl": "^1.1.1",
"element-ui": "^2.9.2",
"js-cookie": "2.2.0",
"jsbarcode": "^3.11.4",
"miment": "^0.0.9",
"moment": "^2.29.1",
"monaco-editor": "^0.20.0",
"normalize.css": "7.0.0",
"nprogress": "0.2.0",
"qrcodejs2": "0.0.2",
"sortablejs": "^1.10.2",
"uninstall": "0.0.0",
"v-chart": "^1.0.0",
"vue": "2.6.11",
"vue-codemirror": "^4.0.6",
"vue-color": "^2.8.1",
"vue-drag-resize": "^1.5.4",
"vue-echarts": "^5.0.0-beta.0",
"vue-json-editor": "^1.4.3",
"vue-router": "3.0.1",
"vue-ruler-tool": "^1.2.4",
"vue-superslide": "^0.1.1",
"vuedraggable": "^2.24.1",
"vuex": "3.0.1"
},
"devDependencies": {
"autoprefixer": "8.5.0",
"babel-core": "6.26.0",
"babel-helper-vue-jsx-merge-props": "2.0.3",
"babel-loader": "7.1.5",
"babel-plugin-syntax-jsx": "6.18.0",
"babel-plugin-transform-runtime": "6.23.0",
"babel-plugin-transform-vue-jsx": "3.7.0",
"babel-preset-env": "1.7.0",
"babel-preset-stage-2": "6.24.1",
"chalk": "2.4.1",
"copy-webpack-plugin": "4.5.2",
"cross-env": "^5.2.0",
"css-loader": "1.0.0",
"eventsource-polyfill": "0.9.6",
"file-loader": "1.1.11",
"friendly-errors-webpack-plugin": "1.7.0",
"html-webpack-plugin": "4.0.0-alpha",
"js-md5": "^0.7.3",
"mini-css-extract-plugin": "0.4.1",
"monaco-editor-webpack-plugin": "^4.1.1",
"node-notifier": "5.2.1",
"node-sass": "^4.7.2",
"optimize-css-assets-webpack-plugin": "5.0.0",
"ora": "3.0.0",
"path-to-regexp": "2.4.0",
"portfinder": "1.0.16",
"postcss-import": "12.0.0",
"postcss-loader": "2.1.6",
"postcss-url": "7.3.2",
"rimraf": "2.6.2",
"sass-loader": "7.0.3",
"script-ext-html-webpack-plugin": "2.0.1",
"semver": "5.5.0",
"shelljs": "0.8.2",
"svg-sprite-loader": "3.8.0",
"svgo": "1.0.5",
"uglifyjs-webpack-plugin": "1.2.7",
"url-loader": "1.0.1",
"vue-loader": "15.3.0",
"vue-style-loader": "4.1.2",
"vue-template-compiler": "2.6.11",
"webpack": "4.16.5",
"webpack-bundle-analyzer": "2.13.1",
"webpack-cli": "3.1.0",
"webpack-dev-server": "3.1.5",
"webpack-merge": "4.1.4"
},
"engines": {
"node": ">= 6.0.0",
"npm": ">= 3.0.0"
},
"browserslist": [
"> 1%",
"last 2 versions",
"not ie <= 8"
]
}

48
src/App.vue Normal file
View File

@ -0,0 +1,48 @@
<template>
<div id="app">
<router-view v-if="isRouterAlive" />
</div>
</template>
<script>
import "@/assets/iconfont/iconfont.css";
import { initDictToLocalstorage } from "@/api/dict-data";
export default {
name: "App",
provide() {
return {
reload: this.reload
};
},
data() {
return {
isRouterAlive: false
};
},
watch: {
$route(to, form) {
if (to.path == "/login") {
this.queryDictName();
}
}
},
computed: {},
created() {
this.queryDictName();
},
methods: {
queryDictName() {
//
initDictToLocalstorage(() => {
this.isRouterAlive = true;
});
},
reload() {
this.isRouterAlive = false;
this.$nextTick(function() {
this.isRouterAlive = true;
});
}
}
};
</script>

71
src/api/GaeaReport.js Normal file
View File

@ -0,0 +1,71 @@
import request from '@/utils/request'
import {getShareToken, getToken} from "@/utils/auth";
// 设计报表
export function design(data) {
return request({
url: 'report/design',
method: 'post',
data,
})
}
// 预览报表,渲染数据
export function preview(data) {
return request({
url: 'reportExcel/preview',
method: 'post',
headers: { 'Share-Token': getShareToken(), 'Authorization': getToken() },
data,
})
}
// 导出报表
export function exportExcel(data) {
return request({
url: 'reportExcel/exportExcel',
method: 'post',
data,
})
}
// 导出报表
export function exportPdf(data) {
return request({
url: 'reportExcel/exportPdf',
method: 'post',
data,
})
}
// 获取所有数据集
export function queryAllDataSet() {
return request({
url: 'dataSet/queryAllDataSet',
method: 'get',
})
}
// 获取对应数据集的列集合
export function detail(data) {
return request({
url: 'dataSet/detailBysetId/' + data,
method: 'get',
})
}
// 获取对应数据集的列集合
export function detailBysetCode(data) {
return request({
url: 'dataSet/detailBysetCode/' + data,
method: 'get',
})
}
// 根据reportCode获取报表表格详情
export function detailByReportCode(data) {
return request({
url: 'reportExcel/detailByReportCode/' + data,
method: 'get',
})
}

View File

@ -0,0 +1,42 @@
import request from '@/utils/request'
export function accessAuthorityList(params) {
return request({
url: 'accessAuthority/pageList',
method: 'GET',
params,
})
}
export function accessAuthorityAdd(data) {
return request({
url: 'accessAuthority',
method: 'post',
data
})
}
export function accessAuthorityDeleteBatch(data) {
return request({
url: 'accessAuthority/delete/batch',
method: 'post',
data
})
}
export function accessAuthorityUpdate(data) {
return request({
url: 'accessAuthority',
method: 'put', data,
})
}
export function accessAuthorityDetail(data) {
return request({
url: 'accessAuthority/' + data.id,
method: 'get',
params: { accessKey: data.accessKey }
})
}
export default { accessAuthorityList, accessAuthorityAdd, accessAuthorityDeleteBatch, accessAuthorityUpdate, accessAuthorityDetail }

58
src/api/accessRole.js Normal file
View File

@ -0,0 +1,58 @@
import request from '@/utils/request'
export function accessRoleList (params) {
return request({
url: 'accessRole/pageList',
method: 'GET',
params,
})
}
export function accessRoleAdd (data) {
return request({
url: 'accessRole',
method: 'post',
data
})
}
export function accessRoleDeleteBatch (data) {
return request({
url: 'accessRole/delete/batch',
method: 'post',
data
})
}
export function accessRoleUpdate (data) {
return request({
url: 'accessRole',
method: 'put', data,
})
}
export function accessRoleDetail (data) {
return request({
url: 'accessRole/' + data.id,
method: 'get',
params: { accessKey: data.accessKey }
})
}
export function accessRoleAuthorityTree (roleCode) {
return request({
url: 'accessRole/authorityTree/' + roleCode,
method: 'get',
})
}
export function saveAuthorityTree (data) {
return request({
url: 'accessRole/saveAuthorityTree',
method: 'post',
data
})
}
export default { accessRoleList, accessRoleAdd, accessRoleDeleteBatch, accessRoleUpdate, accessRoleDetail, accessRoleAuthorityTree, saveAuthorityTree }

59
src/api/accessUser.js Normal file
View File

@ -0,0 +1,59 @@
import request from '@/utils/request'
export function accessUserList (params) {
return request({
url: 'accessUser/pageList',
method: 'GET',
params,
})
}
export function accessUserAdd (data) {
return request({
url: 'accessUser',
method: 'post',
data
})
}
export function accessUserDeleteBatch (data) {
return request({
url: 'accessUser/delete/batch',
method: 'post',
data
})
}
export function accessUserUpdate (data) {
return request({
url: 'accessUser',
method: 'put', data,
})
}
export function accessUserDetail (data) {
return request({
url: 'accessUser/' + data.id,
method: 'get',
params: { accessKey: data.accessKey }
})
}
export function getRoleTree (loginName) {
return request({
url: 'accessUser/roleTree/' + loginName,
method: 'get',
})
}
export function saveRoleTree (data) {
return request({
url: 'accessUser/saveRoleTree',
method: 'post',
data
})
}
export default { accessUserList, accessUserAdd, accessUserDeleteBatch, accessUserUpdate, accessUserDetail, getRoleTree, saveRoleTree }

71
src/api/axios.js Normal file
View File

@ -0,0 +1,71 @@
import axios from 'axios';
import { Message, MessageBox } from 'element-ui';
axios.defaults.baseURL = process.env.BASE_API
const service = axios.create({
withCredentials: false,
timeout: 60000,
headers: {
'Content-Type': 'application/json',
}
})
service.interceptors.request.use(
config => {
return config
},
error => {
// Do something with request error
Promise.reject(error)
}
)
// response interceptor
service.interceptors.response.use(
response => {
const res = response.data;
if (res.code == 200) {
return res
}
else if (res.code == '50014') {
//登录超时或被登出,弹确认框,用户确认后,跳转到登录页面
MessageBox({
message: "当前登录已失效或异地登录,请重新登录",
type: 'error',
duration: 3 * 1000,
}).then(() => {
sessionStorage.clear();
localStorage.clear();
window.location.href = "/";
}).catch(err => {
})
} else if (res.code == "3100" || res.code == "3101") {
return res;
}
else {
Message({
message: res.repMsg || res.message,
type: 'error',
duration: 3 * 1000
})
return res;
}
},
error => {
var errorStatus = error.response.code;
var errorData = error.response.data;
var messageTxt = "";
if (errorStatus != 200) {
messageTxt = "服务器内部错误,请联系管理员";
} else {
messageTxt = '失败原因:' + errorData.code + '--' + errorData.repMsg;
}
Message({
message: messageTxt,
type: 'error',
duration: 5 * 1000
})
}
)
export default service

75
src/api/bigscreen.js Normal file
View File

@ -0,0 +1,75 @@
import request from '@/utils/request'
import { getShareToken, getToken } from "@/utils/auth";
import axios from 'axios';
// 保存大屏设计
export function insertDashboard(data) {
return request({
url: 'reportDashboard',
method: 'post',
data,
})
}
// 预览、查询大屏详情
export function detailDashboard(data) {
return request({
url: 'reportDashboard/' + data,
headers: { 'Share-Token': getShareToken(), 'Authorization': getToken() },
method: 'get',
})
}
// 数据集查询
export function queryAllDataSet(data) {
return request({
url: 'dataSet/queryAllDataSet',
method: 'get',
})
}
// 获取数据集信息
export function detailBysetId(data) {
return request({
url: 'dataSet/detailBysetId/' + data,
method: 'get',
})
}
// 获取动态数据
export function getData(data) {
return request({
url: 'reportDashboard/getData',
method: 'post',
headers: { 'Share-Token': getShareToken(), 'Authorization': getToken() },
data,
})
}
// 导出大屏
export function exportDashboard(data) {
return new Promise((resolve) =>{
axios({
method:'get',
url: process.env.BASE_API + '/reportDashboard/export',
headers: { 'Authorization': getToken() },
params:data,
responseType:'blob'
}).then(res =>{
resolve(res.data);
}).catch(err =>{
resolve('error');
})
})
}
// 导入大屏
export function importDashboard(data) {
return request({
url: 'reportDashboard/import',
method: 'post',
data,
})
}

View File

@ -0,0 +1,64 @@
import request from '@/api/axios'
// 分页查询
export const reqPageList = data => {
return request({
url: '/analysis-service/calculate/queryByPage',
method: 'post',
data
})
}
// 新增
export const reqAddDeviceType = data => {
return request({
url: '/analysis-service/calculate/create',
method: 'post',
data
})
}
// 编辑
export const reqEditDeviceType = data => {
return request({
url: '/analysis-service/calculate/updateById',
method: 'post',
data
})
}
// 删除
export const reqDeleteDeviceType = data => {
return request({
url: '/analysis-service/calculate/deleteByIds',
method: 'post',
data
})
}
// 根据id查明细
export const reqDetail = data => {
return request({
url: '/analysis-service/calculate/queryById',
method: 'post',
data
})
}
// 根据监控项id 拉取监控项树结构
export const reqItemTree = data => {
return request({
url: '/analysis-service/item/tree',
method: 'post',
data
})
}
// 计算执行sql 语句
export const reqExecuteSql = data => {
return request({
url: '/analysis-service/calculate/executeSql',
method: 'post',
data
})
}

25
src/api/common.js Normal file
View File

@ -0,0 +1,25 @@
/*
* @Author: qianlishi
* @Date: 2020-07-13 15:13:34
* @Last Modified by: qianlishi
* @Last Modified time: 2021-03-15 13:28:28
*/
import request from '@/utils/request'
// 数据字典接口
export function dataDictionary (dictName) {
return request({
url: '/gaeaDict/select/' + dictName,
method: 'GET',
})
}
// 图片上传接口
export function uploadImg (data) {
return request({
url: '/file/upload',
method: 'POST',
data,
})
}

79
src/api/dict-data.js Normal file
View File

@ -0,0 +1,79 @@
/*
* @Author: qianlishi
* @Date: 2020-07-13 15:13:17
* @Last Modified by: qianlishi
* @Last Modified time: 2020-12-15 15:34:34
*/
import request from '@/utils/request'
import { setStorageItem } from '@/utils/storage'
// 数据字典和基础数据查询的相关接口
/**
* 数据字典多类型编码查询接口
* type参数 类型 String
* type参数 格式 'type'
*/
export function getDictList (type) {
return request({
url: `/gaeaDict/select/${type}`,
method: 'get',
})
}
export function getDictCodes (project) {
return request({
url: `/gaeaDict/selectAll/${project}`,
method: 'get',
})
}
/**
* 数据字典多类型编码查询接口
* typeList参数 类型 Array
* typeList参数 格式 ['type1','type2',...]
*/
export function getMultipleDictList (typeList) {
const types = typeList + ''
return request({
url: `/v1/dict/types`,
method: 'get',
params: { types },
})
}
/**
* 主数据编码查询接口
* typeList参数 类型 Array
* typeList参数 格式 ['type1','type2',...]
*/
export function getBaseDataList (typeList) {
const types = typeList + ''
return request({
url: `/v1/master/types`,
method: 'get',
params: { types },
})
}
// 查询所有数据字典接口
export function getAllDict() {
return request({
url: '/gaeaDict/all',
method: 'GET',
})
}
// 将所有接口初始化到浏览器本地缓存
export function initDictToLocalstorage(callback) {
getAllDict().then((res) => {
if (res.code != 200) {
console.error('初始化数据字典到local storage失败: ' + res.message)
return
}
// 保存数据字典到localStorage
setStorageItem('AJReportDict', res.data)
if (callback != null) {
callback()
}
})
}

75
src/api/dict.js Normal file
View File

@ -0,0 +1,75 @@
import request from '@/utils/request'
// 字典管理查询
export function getDictList(params) {
return request({
url: '/gaeaDict/pageList',
method: 'GET',
params,
})
}
// 获取单个字典数据
export function getDictItems(dictCode) {
return request({
url: `/gaeaDict/select/${dictCode}`,
method: 'get',
})
}
// 字典管理新增
export function dictAdd(data) {
return request({
url: '/gaeaDict',
method: 'POST',
data,
})
}
// 字典管理编辑
export function dictEdit(data) {
return request({
url: '/gaeaDict',
method: 'PUT',
data,
})
}
export function dictDetail(data) {
return request({
url: '/gaeaDict/' + data.id,
method: 'get',
params: { accessKey: data.accessKey },
})
}
// 字典管理批量删除
export function dictsDelect(data) {
return request({
url: `/gaeaDict/delete/batch`,
method: 'POST',
data,
})
}
/**
* 刷新数据字典
* @param data
*/
export function freshDict(data) {
return request({
url: '/gaeaDict/freshDict',
method: 'POST',
data,
})
}
// 获取国家省份城市
export function queryCountryCity(value) {
return request({
url: `/countryCity/select`,
method: 'get',
params: {
value: value,
},
})
}
export default { dictDetail, getDictList, dictAdd, dictEdit, dictsDelect }

47
src/api/dictItem.js Normal file
View File

@ -0,0 +1,47 @@
import request from '@/utils/request'
// 字典项管理查询
export function dictItemPageList(params) {
return request({
url: '/gaeaDictItem/pageList',
method: 'GET',
params,
})
}
// 字典项管理新增
export function dictItemAdd(data) {
return request({
url: '/gaeaDictItem',
method: 'POST',
data,
})
}
// 字典项管理编辑
export function dictItemEdit(data) {
return request({
url: '/gaeaDictItem',
method: 'PUT',
data,
})
}
// 字典项管理批量删除
export function dictsItemDelect(data) {
return request({
url: `/gaeaDictItem/delete/batch`,
method: 'POST',
data,
})
}
export function dictItemDetail(data) {
return request({
url: '/gaeaDictItem/' + data.id,
method: 'get',
params: { accessKey: data.accessKey },
})
}
export default { dictItemDetail, dictItemPageList, dictItemAdd, dictItemEdit, dictsItemDelect }

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

@ -0,0 +1,58 @@
/*
* @Author: zyk
* @Date: 2021-02-23 15:13:17
* @Last Modified by: zyk
* @Last Modified time: 2021-03-15 13:28:36
*/
import request from '@/utils/request'
// 导出中心
export function download(fileId) {
return request({
url: `/file/download/${fileId}`,
responseType: 'blob',
method: 'GET',
})
}
export function fileList(params) {
return request({
url: '/file/pageList',
method: 'GET',
params,
})
}
export function fileAdd(data) {
return request({
url: '/file',
method: 'post',
data,
})
}
export function fileDel(data) {
return request({
url: `/file/delete/batch`,
method: 'POST',
data,
})
}
export function fileUpdate(data) {
return request({
url: '/file',
method: 'put',
data,
})
}
export function fileDetail(data) {
return request({
url: '/file/' + data.id,
method: 'get',
params: data,
})
}
export default { fileList, fileAdd, fileDel, fileUpdate, fileDetail }

25
src/api/login/index.js Normal file
View File

@ -0,0 +1,25 @@
import request from '@/utils/request'
export function login (data) {
return request({
url: 'accessUser/login',
method: 'post',
data
})
}
export function logout () {
return request({
url: 'accessUser/logout',
method: 'post'
})
}
// 登录之后 根据旧修改密码
export function reqUpdatePassword (data) {
return request({
url: '/accessUser/updatePassword',
method: 'post',
data
})
}

131
src/api/report.js Normal file
View File

@ -0,0 +1,131 @@
/*
* @Author: qianlishi
* @Date: 2020-07-13 15:13:37
* @Last Modified by: qianlishi
* @Last Modified time: 2021-03-04 10:46:26
*/
import request from '@/utils/request'
// resultset
export function dataSetPreview (data) {
return request({
url: `/dataSet/detailBysetId/${data.id}`,
method: 'get',
})
}
export function addDataSet (data) {
return request({
url: '/dataSet',
method: 'post',
data,
})
}
export function editDataSet (data) {
return request({
url: '/dataSet',
method: 'put',
data,
})
}
// delete dataset
export function deleteDataSet (data) {
return request({
url: '/dataSet/' + data.id,
method: 'delete',
data,
})
}
// 下拉数据源
export function queryAllDataSourceSet (data) {
return request({
url: '/dataSource/queryAllDataSource',
method: 'get',
data,
})
}
// 数据集高级规则js验证
export function verificationSet (data) {
return request({
url: '/dataSetParam/verification',
method: 'post',
data,
})
}
// 测试数据转换以及返回数据table列表
export function testTransformSet (data) {
return request({
url: '/dataSet/testTransform',
method: 'post',
data,
})
}
// report
export function reportPageList (params) {
return request({
url: '/report/pageList',
method: 'get',
params,
})
}
// report
export function addReport (data) {
return request({
url: '/report',
method: 'post',
data,
})
}
// report
export function editReport (data) {
return request({
url: '/report',
method: 'put',
data,
})
}
// report
export function delReport (data) {
return request({
url: '/report/delReport',
method: 'delete',
data,
})
}
// report
export function detailReport (id, accessKey) {
return request({
url: `/report/${id}?accessKey=${accessKey}`,
method: 'get',
})
}
// reportExcel
export function addReportExcel (data) {
return request({
url: '/reportExcel',
method: 'post',
data,
})
}
// reportExcel
export function editReportExcel (data) {
return request({
url: '/reportExcel',
method: 'put',
data,
})
}
// /dataSet/pageList
export function dataSetPageList (params) {
return request({
url: '/dataSet/pageList',
method: 'GET',
params,
})
}

42
src/api/reportDataSet.js Normal file
View File

@ -0,0 +1,42 @@
import request from '@/utils/request'
export function reportDataSetList(params) {
return request({
url: 'dataSet/pageList',
method: 'GET',
params,
})
}
export function reportDataSetAdd(data) {
return request({
url: 'dataSet',
method: 'post',
data
})
}
export function reportDataSetDeleteBatch(data) {
return request({
url: 'dataSet/delete/batch',
method: 'post',
data
})
}
export function reportDataSetUpdate(data) {
return request({
url: 'dataSet',
method: 'put', data,
})
}
export function reportDataSetDetail(data) {
return request({
url: 'dataSet/' + data.id,
method: 'get',
params: { accessKey: data.accessKey }
})
}
export default { reportDataSetList, reportDataSetAdd, reportDataSetDeleteBatch, reportDataSetUpdate, reportDataSetDetail }

View File

@ -0,0 +1,51 @@
import request from '@/utils/request'
export function reportDataSourceList(params) {
return request({
url: 'dataSource/pageList',
method: 'GET',
params,
})
}
export function reportDataSourceAdd(data) {
return request({
url: 'dataSource',
method: 'post',
data
})
}
export function reportDataSourceDeleteBatch(data) {
return request({
url: 'dataSource/delete/batch',
method: 'post',
data
})
}
export function reportDataSourceUpdate(data) {
return request({
url: 'dataSource',
method: 'put',
data
})
}
export function reportDataSourceDetail(data) {
return request({
url: 'dataSource/' + data.id,
method: 'get',
params: { accessKey: data.accessKey }
})
}
export function testConnection (data) {
return request({
url: '/dataSource/testConnection',
method: 'post',
data,
})
}
export default { reportDataSourceList, reportDataSourceAdd, reportDataSourceDeleteBatch, reportDataSourceUpdate, reportDataSourceDetail, testConnection}

66
src/api/reportShare.js Normal file
View File

@ -0,0 +1,66 @@
import request from '@/utils/request'
export function reportShareList(params) {
return request({
url: 'reportShare/pageList',
method: 'GET',
params,
})
}
export function reportShareAdd(data) {
return request({
url: 'reportDashboard/share',
method: 'post',
data
})
}
export function excelShareAdd(data) {
return request({
url: 'reportExcel/share',
method: 'post',
data
})
}
export function reportShareDelay(data) {
return request({
url: 'reportShare/shareDelay',
method: 'post',
data
})
}
export function reportShareDeleteBatch(data) {
return request({
url: 'reportShare/delete/batch',
method: 'post',
data
})
}
export function reportShareUpdate(data) {
return request({
url: 'reportShare',
method: 'put', data,
})
}
export function reportShareDetail(data) {
return request({
url: 'reportShare/' + data.id,
method: 'get',
params: {accessKey: data.accessKey}
})
}
export function reportShareDetailByCode(data) {
return request({
url: 'reportShare/detailByCode',
method: 'get',
params: {shareCode: data}
})
}
export default {reportShareList, reportShareAdd, reportShareDeleteBatch, reportShareUpdate, reportShareDetail}

50
src/api/reportmanage.js Normal file
View File

@ -0,0 +1,50 @@
import request from '@/utils/request'
export function reportList(params) {
return request({
url: '/report/pageList',
method: 'GET',
params,
})
}
export function reportAdd(data) {
return request({
url: '/report',
method: 'post',
data
})
}
export function reportDeleteBatch(data) {
return request({
url: '/report/delete/batch',
method: 'post',
data
})
}
export function reportUpdate(data) {
return request({
url: '/report',
method: 'put', data,
})
}
export function reportDetail(data) {
return request({
url: '/report/' + data.id,
method: 'get',
params: { accessKey: data.accessKey }
})
}
export function reportCopy(data) {
return request({
url: '/report/copy',
method: 'post',
data
})
}
export default { reportList, reportAdd, reportDeleteBatch, reportUpdate, reportDetail }

70
src/api/upload.js Normal file
View File

@ -0,0 +1,70 @@
import axios from 'axios';
import { Message, MessageBox } from 'element-ui';
import { delItem } from '@/utils/storage';
axios.defaults.baseURL = process.env.BASE_API
// axios.defaults.baseURL = 'http://10.108.12.23:8080' // 德明本地
// axios.defaults.baseURL = "http://haitongnla.test.anji-plus.com"
// axios.defaults.baseURL = "http://10.108.26.163:8080"
const service = axios.create({
withCredentials: true,
timeout: 60000,
headers: {
'Content-Type': 'multipart/form-data'
}
})
// response interceptor
service.interceptors.response.use(
response => {
const res = response.data;
if (res.repCode == '0000') {
return res
}
else if (res.repCode == '0024') {
//登录超时或被登出,弹确认框,用户确认后,跳转到登录页面
MessageBox({
message: "当前登录已失效或异地登录,请重新登录",
type: 'error',
duration: 3 * 1000,
}).then(() => {
console.log(1)
sessionStorage.clear();
localStorage.clear();
// location.reload();
window.location.href = "/";
}).catch(err => {
console.log(2)
})
}else if(res.repCode == "3100" || res.repCode == "3101"){
return res;
}
else {
Message({
message: res.repMsg,
type: 'error',
duration: 3 * 1000
})
return res;
}
},
error => {
var errorStatus = error.response.status;
var errorData = error.response.data;
var messageTxt = "";
if (errorStatus != 200) {
messageTxt = "服务器内部错误,请联系管理员";
} else {
messageTxt = '失败原因:' + errorData.repCode + '--' + errorData.repMsg;
}
Message({
message: messageTxt,
type: 'error',
duration: 5 * 1000
})
}
)
export default service

View File

@ -0,0 +1,539 @@
/* Logo 字体 */
@font-face {
font-family: "iconfont logo";
src: url('https://at.alicdn.com/t/font_985780_km7mi63cihi.eot?t=1545807318834');
src: url('https://at.alicdn.com/t/font_985780_km7mi63cihi.eot?t=1545807318834#iefix') format('embedded-opentype'),
url('https://at.alicdn.com/t/font_985780_km7mi63cihi.woff?t=1545807318834') format('woff'),
url('https://at.alicdn.com/t/font_985780_km7mi63cihi.ttf?t=1545807318834') format('truetype'),
url('https://at.alicdn.com/t/font_985780_km7mi63cihi.svg?t=1545807318834#iconfont') format('svg');
}
.logo {
font-family: "iconfont logo";
font-size: 160px;
font-style: normal;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
/* tabs */
.nav-tabs {
position: relative;
}
.nav-tabs .nav-more {
position: absolute;
right: 0;
bottom: 0;
height: 42px;
line-height: 42px;
color: #666;
}
#tabs {
border-bottom: 1px solid #eee;
}
#tabs li {
cursor: pointer;
width: 100px;
height: 40px;
line-height: 40px;
text-align: center;
font-size: 16px;
border-bottom: 2px solid transparent;
position: relative;
z-index: 1;
margin-bottom: -1px;
color: #666;
}
#tabs .active {
border-bottom-color: #f00;
color: #222;
}
.tab-container .content {
display: none;
}
/* 页面布局 */
.main {
padding: 30px 100px;
width: 960px;
margin: 0 auto;
}
.main .logo {
color: #333;
text-align: left;
margin-bottom: 30px;
line-height: 1;
height: 110px;
margin-top: -50px;
overflow: hidden;
*zoom: 1;
}
.main .logo a {
font-size: 160px;
color: #333;
}
.helps {
margin-top: 40px;
}
.helps pre {
padding: 20px;
margin: 10px 0;
border: solid 1px #e7e1cd;
background-color: #fffdef;
overflow: auto;
}
.icon_lists {
width: 100% !important;
overflow: hidden;
*zoom: 1;
}
.icon_lists li {
width: 100px;
margin-bottom: 10px;
margin-right: 20px;
text-align: center;
list-style: none !important;
cursor: default;
}
.icon_lists li .code-name {
line-height: 1.2;
}
.icon_lists .icon {
display: block;
height: 100px;
line-height: 100px;
font-size: 42px;
margin: 10px auto;
color: #333;
-webkit-transition: font-size 0.25s linear, width 0.25s linear;
-moz-transition: font-size 0.25s linear, width 0.25s linear;
transition: font-size 0.25s linear, width 0.25s linear;
}
.icon_lists .icon:hover {
font-size: 100px;
}
.icon_lists .svg-icon {
/* 通过设置 font-size 来改变图标大小 */
width: 1em;
/* 图标和文字相邻时,垂直对齐 */
vertical-align: -0.15em;
/* 通过设置 color 来改变 SVG 的颜色/fill */
fill: currentColor;
/* path stroke 溢出 viewBox 部分在 IE 下会显示
normalize.css 中也包含这行 */
overflow: hidden;
}
.icon_lists li .name,
.icon_lists li .code-name {
color: #666;
}
/* markdown 样式 */
.markdown {
color: #666;
font-size: 14px;
line-height: 1.8;
}
.highlight {
line-height: 1.5;
}
.markdown img {
vertical-align: middle;
max-width: 100%;
}
.markdown h1 {
color: #404040;
font-weight: 500;
line-height: 40px;
margin-bottom: 24px;
}
.markdown h2,
.markdown h3,
.markdown h4,
.markdown h5,
.markdown h6 {
color: #404040;
margin: 1.6em 0 0.6em 0;
font-weight: 500;
clear: both;
}
.markdown h1 {
font-size: 28px;
}
.markdown h2 {
font-size: 22px;
}
.markdown h3 {
font-size: 16px;
}
.markdown h4 {
font-size: 14px;
}
.markdown h5 {
font-size: 12px;
}
.markdown h6 {
font-size: 12px;
}
.markdown hr {
height: 1px;
border: 0;
background: #e9e9e9;
margin: 16px 0;
clear: both;
}
.markdown p {
margin: 1em 0;
}
.markdown>p,
.markdown>blockquote,
.markdown>.highlight,
.markdown>ol,
.markdown>ul {
width: 80%;
}
.markdown ul>li {
list-style: circle;
}
.markdown>ul li,
.markdown blockquote ul>li {
margin-left: 20px;
padding-left: 4px;
}
.markdown>ul li p,
.markdown>ol li p {
margin: 0.6em 0;
}
.markdown ol>li {
list-style: decimal;
}
.markdown>ol li,
.markdown blockquote ol>li {
margin-left: 20px;
padding-left: 4px;
}
.markdown code {
margin: 0 3px;
padding: 0 5px;
background: #eee;
border-radius: 3px;
}
.markdown strong,
.markdown b {
font-weight: 600;
}
.markdown>table {
border-collapse: collapse;
border-spacing: 0px;
empty-cells: show;
border: 1px solid #e9e9e9;
width: 95%;
margin-bottom: 24px;
}
.markdown>table th {
white-space: nowrap;
color: #333;
font-weight: 600;
}
.markdown>table th,
.markdown>table td {
border: 1px solid #e9e9e9;
padding: 8px 16px;
text-align: left;
}
.markdown>table th {
background: #F7F7F7;
}
.markdown blockquote {
font-size: 90%;
color: #999;
border-left: 4px solid #e9e9e9;
padding-left: 0.8em;
margin: 1em 0;
}
.markdown blockquote p {
margin: 0;
}
.markdown .anchor {
opacity: 0;
transition: opacity 0.3s ease;
margin-left: 8px;
}
.markdown .waiting {
color: #ccc;
}
.markdown h1:hover .anchor,
.markdown h2:hover .anchor,
.markdown h3:hover .anchor,
.markdown h4:hover .anchor,
.markdown h5:hover .anchor,
.markdown h6:hover .anchor {
opacity: 1;
display: inline-block;
}
.markdown>br,
.markdown>p>br {
clear: both;
}
.hljs {
display: block;
background: white;
padding: 0.5em;
color: #333333;
overflow-x: auto;
}
.hljs-comment,
.hljs-meta {
color: #969896;
}
.hljs-string,
.hljs-variable,
.hljs-template-variable,
.hljs-strong,
.hljs-emphasis,
.hljs-quote {
color: #df5000;
}
.hljs-keyword,
.hljs-selector-tag,
.hljs-type {
color: #a71d5d;
}
.hljs-literal,
.hljs-symbol,
.hljs-bullet,
.hljs-attribute {
color: #0086b3;
}
.hljs-section,
.hljs-name {
color: #63a35c;
}
.hljs-tag {
color: #333333;
}
.hljs-title,
.hljs-attr,
.hljs-selector-id,
.hljs-selector-class,
.hljs-selector-attr,
.hljs-selector-pseudo {
color: #795da3;
}
.hljs-addition {
color: #55a532;
background-color: #eaffea;
}
.hljs-deletion {
color: #bd2c00;
background-color: #ffecec;
}
.hljs-link {
text-decoration: underline;
}
/* 代码高亮 */
/* PrismJS 1.15.0
https://prismjs.com/download.html#themes=prism&languages=markup+css+clike+javascript */
/**
* prism.js default theme for JavaScript, CSS and HTML
* Based on dabblet (http://dabblet.com)
* @author Lea Verou
*/
code[class*="language-"],
pre[class*="language-"] {
color: black;
background: none;
text-shadow: 0 1px white;
font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace;
text-align: left;
white-space: pre;
word-spacing: normal;
word-break: normal;
word-wrap: normal;
line-height: 1.5;
-moz-tab-size: 4;
-o-tab-size: 4;
tab-size: 4;
-webkit-hyphens: none;
-moz-hyphens: none;
-ms-hyphens: none;
hyphens: none;
}
pre[class*="language-"]::-moz-selection,
pre[class*="language-"] ::-moz-selection,
code[class*="language-"]::-moz-selection,
code[class*="language-"] ::-moz-selection {
text-shadow: none;
background: #b3d4fc;
}
pre[class*="language-"]::selection,
pre[class*="language-"] ::selection,
code[class*="language-"]::selection,
code[class*="language-"] ::selection {
text-shadow: none;
background: #b3d4fc;
}
@media print {
code[class*="language-"],
pre[class*="language-"] {
text-shadow: none;
}
}
/* Code blocks */
pre[class*="language-"] {
padding: 1em;
margin: .5em 0;
overflow: auto;
}
:not(pre)>code[class*="language-"],
pre[class*="language-"] {
background: #f5f2f0;
}
/* Inline code */
:not(pre)>code[class*="language-"] {
padding: .1em;
border-radius: .3em;
white-space: normal;
}
.token.comment,
.token.prolog,
.token.doctype,
.token.cdata {
color: slategray;
}
.token.punctuation {
color: #999;
}
.namespace {
opacity: .7;
}
.token.property,
.token.tag,
.token.boolean,
.token.number,
.token.constant,
.token.symbol,
.token.deleted {
color: #905;
}
.token.selector,
.token.attr-name,
.token.string,
.token.char,
.token.builtin,
.token.inserted {
color: #690;
}
.token.operator,
.token.entity,
.token.url,
.language-css .token.string,
.style .token.string {
color: #9a6e3a;
background: hsla(0, 0%, 100%, .5);
}
.token.atrule,
.token.attr-value,
.token.keyword {
color: #07a;
}
.token.function,
.token.class-name {
color: #DD4A68;
}
.token.regex,
.token.important,
.token.variable {
color: #e90;
}
.token.important,
.token.bold {
font-weight: bold;
}
.token.italic {
font-style: italic;
}
.token.entity {
cursor: help;
}

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,511 @@
@font-face {
font-family: "iconfont"; /* Project id 1513211 */
src: url('iconfont.woff2?t=1666946350865') format('woff2'),
url('iconfont.woff?t=1666946350865') format('woff'),
url('iconfont.ttf?t=1666946350865') format('truetype');
}
.iconfont {
font-family: "iconfont" !important;
font-size: 16px;
font-style: normal;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
.iconleidatu:before {
content: "\e640";
}
.iconrelitu:before {
content: "\e683";
}
.iconhuifubeifen:before {
content: "\e60d";
}
.iconundo:before {
content: "\e60e";
}
.iconciyuntu:before {
content: "\e7af";
}
.icondaochu:before {
content: "\e618";
}
.icondaoru:before {
content: "\e608";
}
.iconduibitupu:before {
content: "\e9ca";
}
.iconzhexian:before {
content: "\e635";
}
.iconbianzu23:before {
content: "\e621";
}
.iconduidietu:before {
content: "\e61f";
}
.iconfill_folder:before {
content: "\e645";
}
.iconzidianxiang:before {
content: "\e7df";
}
.iconAPIwangguan:before {
content: "\e66b";
}
.icondatabase:before {
content: "\e7b6";
}
.iconbaifenbi:before {
content: "\e616";
}
.iconfolder-o:before {
content: "\e70f";
}
.iconjinlingyingcaiwangtubiao01:before {
content: "\e724";
}
.iconleft-copy:before {
content: "\e6af";
}
.iconfuzhi1:before {
content: "\e626";
}
.iconzhongguoditu:before {
content: "\e738";
}
.iconbiaoge:before {
content: "\e625";
}
.icongexingzhuangban:before {
content: "\e646";
}
.iconyibiaopan-chaobiao:before {
content: "\e72e";
}
.iconnandinggeermeiguitu:before {
content: "\e851";
}
.iconzhankai:before {
content: "\e631";
}
.iconexcel:before {
content: "\e650";
}
.iconbaocun:before {
content: "\e737";
}
.iconguanbi:before {
content: "\e6c5";
}
.iconpdf:before {
content: "\e614";
}
.iconfuzhi:before {
content: "\e61e";
}
.icon020kongxinbingtu:before {
content: "\e78c";
}
.iconshijian:before {
content: "\e662";
}
.iconsave:before {
content: "\e6f6";
}
.icontupian:before {
content: "\e612";
}
.iconzhuzhuangtu:before {
content: "\e691";
}
.iconchaolianjie:before {
content: "\e65f";
}
.iconziyuan:before {
content: "\e605";
}
.iconshipin:before {
content: "\ecc1";
}
.iconkuangjia:before {
content: "\e66a";
}
.iconyulan:before {
content: "\e728";
}
.iconhengxiangwenzi:before {
content: "\e601";
}
.iconicon_tubiao_bingtu:before {
content: "\e602";
}
.iconloudoutu:before {
content: "\e6d5";
}
.icontubiaozhexiantu:before {
content: "\e630";
}
.iconzhuxiantu:before {
content: "\e607";
}
.icontupian1:before {
content: "\e81d";
}
.iconyibiaopan:before {
content: "\e706";
}
.icon1:before {
content: "\e63b";
}
.iconxiazai:before {
content: "\e639";
}
.icon11-04:before {
content: "\e784";
}
.iconyouxiang:before {
content: "\e769";
}
.iconbangdingshouji:before {
content: "\e64d";
}
.iconshouji:before {
content: "\e854";
}
.icon52-shouji:before {
content: "\e871";
}
.iconhome:before {
content: "\e610";
}
.iconhome2:before {
content: "\e61a";
}
.iconKafka:before {
content: "\e65a";
}
.iconshujujieruKafkajiqun:before {
content: "\e64f";
}
.iconkafka:before {
content: "\e6f2";
}
.iconelasticsearch-Elasticsearch:before {
content: "\e853";
}
.iconapachekafka:before {
content: "\eb3f";
}
.iconelasticsearch:before {
content: "\eb85";
}
.iconwentifankui:before {
content: "\e8d1";
}
.iconwentifankui1:before {
content: "\e70e";
}
.iconwentifankui2:before {
content: "\e643";
}
.iconalikafkaxiaoxiduilieKafka:before {
content: "\e8a4";
}
.iconxiangmuchaxun-chakanshebei:before {
content: "\e682";
}
.iconelasticsearchElasticsearch:before {
content: "\e6a1";
}
.icon511tongji_shutu:before {
content: "\e64a";
}
.iconfenxiang1:before {
content: "\e615";
}
.iconfenxiang2:before {
content: "\e60f";
}
.iconfenxiang_2:before {
content: "\e600";
}
.iconNMStubiao-:before {
content: "\e628";
}
.iconwanchenganquanshijian:before {
content: "\e68a";
}
.iconeventbridgexiaoxishijianzongxian:before {
content: "\e74d";
}
.iconshu:before {
content: "\e629";
}
.iconshebeiguanji:before {
content: "\e61d";
}
.iconhaofangtuo400iconfontduanxin:before {
content: "\e6d8";
}
.iconnavicon-ywcs:before {
content: "\e661";
}
.iconliebiao:before {
content: "\e660";
}
.iconbianji:before {
content: "\e60c";
}
.iconyoujian:before {
content: "\e63a";
}
.iconshejiaodingding:before {
content: "\e678";
}
.iconzidianguanli:before {
content: "\e624";
}
.icontubiao:before {
content: "\e73f";
}
.icondingding:before {
content: "\e690";
}
.iconduanxin:before {
content: "\e603";
}
.icondirectmailyoujiantuisong:before {
content: "\e714";
}
.iconshebeisheshi:before {
content: "\e61c";
}
.icontongzhi:before {
content: "\e606";
}
.iconrizhi:before {
content: "\e663";
}
.iconchufaqipeizhi-hui:before {
content: "\e689";
}
.iconvcsshijuejisuanfuwu:before {
content: "\e759";
}
.iconbar_icon_shebei:before {
content: "\e60a";
}
.iconuser-before:before {
content: "\e617";
}
.iconkemuweihutubiao:before {
content: "\e60b";
}
.iconaccounting-subjects:before {
content: "\e677";
}
.iconRectangleCopy:before {
content: "\e6dd";
}
.iconchengbenshujuguanli:before {
content: "\e6c7";
}
.iconjibenshuju:before {
content: "\e71d";
}
.iconB-shengshiqu:before {
content: "\e72d";
}
.iconzuzhijigou:before {
content: "\e66e";
}
.iconanniu:before {
content: "\e8c5";
}
.iconcaidan2:before {
content: "\e61b";
}
.iconwenhao:before {
content: "\e67f";
}
.iconlajitong:before {
content: "\e636";
}
.iconzhongzhimima:before {
content: "\e620";
}
.iconshezhi:before {
content: "\e68f";
}
.iconzhongzhuan:before {
content: "\e69b";
}
.iconadd:before {
content: "\e6b9";
}
.iconminus:before {
content: "\e6ba";
}
.iconpassword:before {
content: "\e622";
}
.iconyonghu:before {
content: "\e604";
}
.iconquanxian:before {
content: "\e633";
}
.iconjiaose1:before {
content: "\e64c";
}
.iconzidian:before {
content: "\e716";
}
.iconcssz:before {
content: "\e672";
}
.iconbianji1:before {
content: "\e642";
}
.icondfzq-:before {
content: "\e609";
}
.iconfenxiang:before {
content: "\e641";
}
.iconshouquan1:before {
content: "\e634";
}
.iconjiantou:before {
content: "\e653";
}
.iconjiantou-copy-copy:before {
content: "\e654";
}

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,877 @@
{
"id": "1513211",
"name": "基础权限",
"font_family": "iconfont",
"css_prefix_text": "icon",
"description": "",
"glyphs": [
{
"icon_id": "9013588",
"name": "雷达图2",
"font_class": "leidatu",
"unicode": "e640",
"unicode_decimal": 58944
},
{
"icon_id": "19004935",
"name": "热力图",
"font_class": "relitu",
"unicode": "e683",
"unicode_decimal": 59011
},
{
"icon_id": "15047024",
"name": "恢复备份",
"font_class": "huifubeifen",
"unicode": "e60d",
"unicode_decimal": 58893
},
{
"icon_id": "19657550",
"name": "撤销",
"font_class": "undo",
"unicode": "e60e",
"unicode_decimal": 58894
},
{
"icon_id": "23043843",
"name": "词云图",
"font_class": "ciyuntu",
"unicode": "e7af",
"unicode_decimal": 59311
},
{
"icon_id": "14325372",
"name": "导出",
"font_class": "daochu",
"unicode": "e618",
"unicode_decimal": 58904
},
{
"icon_id": "15040056",
"name": "导入",
"font_class": "daoru",
"unicode": "e608",
"unicode_decimal": 58888
},
{
"icon_id": "18140536",
"name": "对比图谱",
"font_class": "duibitupu",
"unicode": "e9ca",
"unicode_decimal": 59850
},
{
"icon_id": "23013771",
"name": "折线",
"font_class": "zhexian",
"unicode": "e635",
"unicode_decimal": 58933
},
{
"icon_id": "18888301",
"name": "堆叠图",
"font_class": "bianzu23",
"unicode": "e621",
"unicode_decimal": 58913
},
{
"icon_id": "23457042",
"name": "堆叠图",
"font_class": "duidietu",
"unicode": "e61f",
"unicode_decimal": 58911
},
{
"icon_id": "5472881",
"name": "文件",
"font_class": "fill_folder",
"unicode": "e645",
"unicode_decimal": 58949
},
{
"icon_id": "15994720",
"name": "字典项",
"font_class": "zidianxiang",
"unicode": "e7df",
"unicode_decimal": 59359
},
{
"icon_id": "1364704",
"name": "API网关",
"font_class": "APIwangguan",
"unicode": "e66b",
"unicode_decimal": 58987
},
{
"icon_id": "14341931",
"name": "database",
"font_class": "database",
"unicode": "e7b6",
"unicode_decimal": 59318
},
{
"icon_id": "15338097",
"name": "百分比",
"font_class": "baifenbi",
"unicode": "e616",
"unicode_decimal": 58902
},
{
"icon_id": "15461480",
"name": "文件",
"font_class": "folder-o",
"unicode": "e70f",
"unicode_decimal": 59151
},
{
"icon_id": "182207",
"name": "上",
"font_class": "jinlingyingcaiwangtubiao01",
"unicode": "e724",
"unicode_decimal": 59172
},
{
"icon_id": "2773923",
"name": "下",
"font_class": "left-copy",
"unicode": "e6af",
"unicode_decimal": 59055
},
{
"icon_id": "4653465",
"name": "复制",
"font_class": "fuzhi1",
"unicode": "e626",
"unicode_decimal": 58918
},
{
"icon_id": "22378736",
"name": "中国地图",
"font_class": "zhongguoditu",
"unicode": "e738",
"unicode_decimal": 59192
},
{
"icon_id": "21338828",
"name": "表格",
"font_class": "biaoge",
"unicode": "e625",
"unicode_decimal": 58917
},
{
"icon_id": "13087633",
"name": "个性装扮",
"font_class": "gexingzhuangban",
"unicode": "e646",
"unicode_decimal": 58950
},
{
"icon_id": "16466332",
"name": "仪表盘-抄表",
"font_class": "yibiaopan-chaobiao",
"unicode": "e72e",
"unicode_decimal": 59182
},
{
"icon_id": "15872322",
"name": "南丁格尔玫瑰图",
"font_class": "nandinggeermeiguitu",
"unicode": "e851",
"unicode_decimal": 59473
},
{
"icon_id": "11990084",
"name": "展 开 ",
"font_class": "zhankai",
"unicode": "e631",
"unicode_decimal": 58929
},
{
"icon_id": "1990758",
"name": "excel",
"font_class": "excel",
"unicode": "e650",
"unicode_decimal": 58960
},
{
"icon_id": "9445573",
"name": "保存",
"font_class": "baocun",
"unicode": "e737",
"unicode_decimal": 59191
},
{
"icon_id": "11920154",
"name": "关 闭",
"font_class": "guanbi",
"unicode": "e6c5",
"unicode_decimal": 59077
},
{
"icon_id": "16968592",
"name": "pdf",
"font_class": "pdf",
"unicode": "e614",
"unicode_decimal": 58900
},
{
"icon_id": "21538118",
"name": "复制",
"font_class": "fuzhi",
"unicode": "e61e",
"unicode_decimal": 58910
},
{
"icon_id": "1066041",
"name": "020空心饼图",
"font_class": "020kongxinbingtu",
"unicode": "e78c",
"unicode_decimal": 59276
},
{
"icon_id": "2032219",
"name": "时间",
"font_class": "shijian",
"unicode": "e662",
"unicode_decimal": 58978
},
{
"icon_id": "2721664",
"name": "保存",
"font_class": "save",
"unicode": "e6f6",
"unicode_decimal": 59126
},
{
"icon_id": "4803230",
"name": "图片",
"font_class": "tupian",
"unicode": "e612",
"unicode_decimal": 58898
},
{
"icon_id": "5963559",
"name": "柱状图",
"font_class": "zhuzhuangtu",
"unicode": "e691",
"unicode_decimal": 59025
},
{
"icon_id": "6642296",
"name": "超链接",
"font_class": "chaolianjie",
"unicode": "e65f",
"unicode_decimal": 58975
},
{
"icon_id": "7732218",
"name": "文本",
"font_class": "ziyuan",
"unicode": "e605",
"unicode_decimal": 58885
},
{
"icon_id": "9592086",
"name": "视频",
"font_class": "shipin",
"unicode": "ecc1",
"unicode_decimal": 60609
},
{
"icon_id": "12252496",
"name": "框架",
"font_class": "kuangjia",
"unicode": "e66a",
"unicode_decimal": 58986
},
{
"icon_id": "14717060",
"name": "预览",
"font_class": "yulan",
"unicode": "e728",
"unicode_decimal": 59176
},
{
"icon_id": "14728974",
"name": "横向文字",
"font_class": "hengxiangwenzi",
"unicode": "e601",
"unicode_decimal": 58881
},
{
"icon_id": "15066193",
"name": "图表 _饼图",
"font_class": "icon_tubiao_bingtu",
"unicode": "e602",
"unicode_decimal": 58882
},
{
"icon_id": "17247792",
"name": "漏斗图",
"font_class": "loudoutu",
"unicode": "e6d5",
"unicode_decimal": 59093
},
{
"icon_id": "21925168",
"name": "图表 折线图",
"font_class": "tubiaozhexiantu",
"unicode": "e630",
"unicode_decimal": 58928
},
{
"icon_id": "22117888",
"name": "柱线图",
"font_class": "zhuxiantu",
"unicode": "e607",
"unicode_decimal": 58887
},
{
"icon_id": "22300259",
"name": "图片",
"font_class": "tupian1",
"unicode": "e81d",
"unicode_decimal": 59421
},
{
"icon_id": "22398839",
"name": "仪表盘",
"font_class": "yibiaopan",
"unicode": "e706",
"unicode_decimal": 59142
},
{
"icon_id": "18774317",
"name": "返回",
"font_class": "1",
"unicode": "e63b",
"unicode_decimal": 58939
},
{
"icon_id": "5388367",
"name": "下载",
"font_class": "xiazai",
"unicode": "e639",
"unicode_decimal": 58937
},
{
"icon_id": "14245657",
"name": "下载",
"font_class": "11-04",
"unicode": "e784",
"unicode_decimal": 59268
},
{
"icon_id": "4933441",
"name": "邮箱",
"font_class": "youxiang",
"unicode": "e769",
"unicode_decimal": 59241
},
{
"icon_id": "7140630",
"name": "绑定手机",
"font_class": "bangdingshouji",
"unicode": "e64d",
"unicode_decimal": 58957
},
{
"icon_id": "8288872",
"name": "手机",
"font_class": "shouji",
"unicode": "e854",
"unicode_decimal": 59476
},
{
"icon_id": "16218102",
"name": "52-手机",
"font_class": "52-shouji",
"unicode": "e871",
"unicode_decimal": 59505
},
{
"icon_id": "684484",
"name": "home",
"font_class": "home",
"unicode": "e610",
"unicode_decimal": 58896
},
{
"icon_id": "7165766",
"name": "home",
"font_class": "home2",
"unicode": "e61a",
"unicode_decimal": 58906
},
{
"icon_id": "981325",
"name": "Kafka",
"font_class": "Kafka",
"unicode": "e65a",
"unicode_decimal": 58970
},
{
"icon_id": "4772840",
"name": "数据接入—Kafka集群",
"font_class": "shujujieruKafkajiqun",
"unicode": "e64f",
"unicode_decimal": 58959
},
{
"icon_id": "8691927",
"name": "kafka",
"font_class": "kafka",
"unicode": "e6f2",
"unicode_decimal": 59122
},
{
"icon_id": "13140799",
"name": "elasticsearch-Elasticsearch",
"font_class": "elasticsearch-Elasticsearch",
"unicode": "e853",
"unicode_decimal": 59475
},
{
"icon_id": "15378137",
"name": "apachekafka",
"font_class": "apachekafka",
"unicode": "eb3f",
"unicode_decimal": 60223
},
{
"icon_id": "15378319",
"name": "elasticsearch",
"font_class": "elasticsearch",
"unicode": "eb85",
"unicode_decimal": 60293
},
{
"icon_id": "3253279",
"name": "问题反馈",
"font_class": "wentifankui",
"unicode": "e8d1",
"unicode_decimal": 59601
},
{
"icon_id": "3922909",
"name": "问题反馈",
"font_class": "wentifankui1",
"unicode": "e70e",
"unicode_decimal": 59150
},
{
"icon_id": "13177275",
"name": "问题反馈",
"font_class": "wentifankui2",
"unicode": "e643",
"unicode_decimal": 58947
},
{
"icon_id": "5583350",
"name": "alikafka 消息队列Kafka",
"font_class": "alikafkaxiaoxiduilieKafka",
"unicode": "e8a4",
"unicode_decimal": 59556
},
{
"icon_id": "11033199",
"name": "项目查询-查看设备",
"font_class": "xiangmuchaxun-chakanshebei",
"unicode": "e682",
"unicode_decimal": 59010
},
{
"icon_id": "13543355",
"name": "elasticsearch Elasticsearch",
"font_class": "elasticsearchElasticsearch",
"unicode": "e6a1",
"unicode_decimal": 59041
},
{
"icon_id": "1308482",
"name": "511统计_树图",
"font_class": "511tongji_shutu",
"unicode": "e64a",
"unicode_decimal": 58954
},
{
"icon_id": "8084555",
"name": "分享",
"font_class": "fenxiang1",
"unicode": "e615",
"unicode_decimal": 58901
},
{
"icon_id": "9148583",
"name": "分享",
"font_class": "fenxiang2",
"unicode": "e60f",
"unicode_decimal": 58895
},
{
"icon_id": "9810108",
"name": "分享",
"font_class": "fenxiang_2",
"unicode": "e600",
"unicode_decimal": 58880
},
{
"icon_id": "10064575",
"name": "告警-紧急",
"font_class": "NMStubiao-",
"unicode": "e628",
"unicode_decimal": 58920
},
{
"icon_id": "13186637",
"name": "完成安全事件",
"font_class": "wanchenganquanshijian",
"unicode": "e68a",
"unicode_decimal": 59018
},
{
"icon_id": "14772380",
"name": "eventbridge 消息事件总线",
"font_class": "eventbridgexiaoxishijianzongxian",
"unicode": "e74d",
"unicode_decimal": 59213
},
{
"icon_id": "16852593",
"name": "树",
"font_class": "shu",
"unicode": "e629",
"unicode_decimal": 58921
},
{
"icon_id": "16800949",
"name": "设备关机",
"font_class": "shebeiguanji",
"unicode": "e61d",
"unicode_decimal": 58909
},
{
"icon_id": "1111782",
"name": "好房拓 4.0.0 iconfont_短信",
"font_class": "haofangtuo400iconfontduanxin",
"unicode": "e6d8",
"unicode_decimal": 59096
},
{
"icon_id": "3703026",
"name": "业务参数",
"font_class": "navicon-ywcs",
"unicode": "e661",
"unicode_decimal": 58977
},
{
"icon_id": "3851361",
"name": "列表",
"font_class": "liebiao",
"unicode": "e660",
"unicode_decimal": 58976
},
{
"icon_id": "3858850",
"name": "编辑",
"font_class": "bianji",
"unicode": "e60c",
"unicode_decimal": 58892
},
{
"icon_id": "5203312",
"name": "邮件",
"font_class": "youjian",
"unicode": "e63a",
"unicode_decimal": 58938
},
{
"icon_id": "5321887",
"name": "社交钉钉",
"font_class": "shejiaodingding",
"unicode": "e678",
"unicode_decimal": 59000
},
{
"icon_id": "6627754",
"name": "字典管理",
"font_class": "zidianguanli",
"unicode": "e624",
"unicode_decimal": 58916
},
{
"icon_id": "7092362",
"name": "图表",
"font_class": "tubiao",
"unicode": "e73f",
"unicode_decimal": 59199
},
{
"icon_id": "9307592",
"name": "钉钉",
"font_class": "dingding",
"unicode": "e690",
"unicode_decimal": 59024
},
{
"icon_id": "10392609",
"name": "短信",
"font_class": "duanxin",
"unicode": "e603",
"unicode_decimal": 58883
},
{
"icon_id": "13592918",
"name": "directmail 邮件推送",
"font_class": "directmailyoujiantuisong",
"unicode": "e714",
"unicode_decimal": 59156
},
{
"icon_id": "16589013",
"name": "设备设施",
"font_class": "shebeisheshi",
"unicode": "e61c",
"unicode_decimal": 58908
},
{
"icon_id": "6249282",
"name": "通知",
"font_class": "tongzhi",
"unicode": "e606",
"unicode_decimal": 58886
},
{
"icon_id": "7450630",
"name": "日志",
"font_class": "rizhi",
"unicode": "e663",
"unicode_decimal": 58979
},
{
"icon_id": "11103449",
"name": "触发器配置-灰",
"font_class": "chufaqipeizhi-hui",
"unicode": "e689",
"unicode_decimal": 59017
},
{
"icon_id": "17566612",
"name": "vcs 视觉计算服务",
"font_class": "vcsshijuejisuanfuwu",
"unicode": "e759",
"unicode_decimal": 59225
},
{
"icon_id": "17755673",
"name": "设备",
"font_class": "bar_icon_shebei",
"unicode": "e60a",
"unicode_decimal": 58890
},
{
"icon_id": "1327507",
"name": "user-before",
"font_class": "user-before",
"unicode": "e617",
"unicode_decimal": 58903
},
{
"icon_id": "12353050",
"name": "科目维护图标",
"font_class": "kemuweihutubiao",
"unicode": "e60b",
"unicode_decimal": 58891
},
{
"icon_id": "2152435",
"name": "会计科目维护",
"font_class": "accounting-subjects",
"unicode": "e677",
"unicode_decimal": 58999
},
{
"icon_id": "7553622",
"name": "成本查询",
"font_class": "RectangleCopy",
"unicode": "e6dd",
"unicode_decimal": 59101
},
{
"icon_id": "12453907",
"name": "成本数据管理",
"font_class": "chengbenshujuguanli",
"unicode": "e6c7",
"unicode_decimal": 59079
},
{
"icon_id": "13745309",
"name": "基本数据",
"font_class": "jibenshuju",
"unicode": "e71d",
"unicode_decimal": 59165
},
{
"icon_id": "7193675",
"name": "B-省市区",
"font_class": "B-shengshiqu",
"unicode": "e72d",
"unicode_decimal": 59181
},
{
"icon_id": "16065650",
"name": "组织机构",
"font_class": "zuzhijigou",
"unicode": "e66e",
"unicode_decimal": 58990
},
{
"icon_id": "10885920",
"name": "按钮",
"font_class": "anniu",
"unicode": "e8c5",
"unicode_decimal": 59589
},
{
"icon_id": "7588087",
"name": "菜单",
"font_class": "caidan2",
"unicode": "e61b",
"unicode_decimal": 58907
},
{
"icon_id": "343234",
"name": "问号",
"font_class": "wenhao",
"unicode": "e67f",
"unicode_decimal": 59007
},
{
"icon_id": "485800",
"name": "垃圾桶",
"font_class": "lajitong",
"unicode": "e636",
"unicode_decimal": 58934
},
{
"icon_id": "524416",
"name": "重置密码",
"font_class": "zhongzhimima",
"unicode": "e620",
"unicode_decimal": 58912
},
{
"icon_id": "666885",
"name": "设置",
"font_class": "shezhi",
"unicode": "e68f",
"unicode_decimal": 59023
},
{
"icon_id": "666902",
"name": "中转",
"font_class": "zhongzhuan",
"unicode": "e69b",
"unicode_decimal": 59035
},
{
"icon_id": "1226780",
"name": "add",
"font_class": "add",
"unicode": "e6b9",
"unicode_decimal": 59065
},
{
"icon_id": "1226781",
"name": "minus",
"font_class": "minus",
"unicode": "e6ba",
"unicode_decimal": 59066
},
{
"icon_id": "1388130",
"name": "password",
"font_class": "password",
"unicode": "e622",
"unicode_decimal": 58914
},
{
"icon_id": "1824319",
"name": "用户",
"font_class": "yonghu",
"unicode": "e604",
"unicode_decimal": 58884
},
{
"icon_id": "2881221",
"name": "权限",
"font_class": "quanxian",
"unicode": "e633",
"unicode_decimal": 58931
},
{
"icon_id": "3280236",
"name": "角色",
"font_class": "jiaose1",
"unicode": "e64c",
"unicode_decimal": 58956
},
{
"icon_id": "3299246",
"name": "字典",
"font_class": "zidian",
"unicode": "e716",
"unicode_decimal": 59158
},
{
"icon_id": "4374688",
"name": "参数设置",
"font_class": "cssz",
"unicode": "e672",
"unicode_decimal": 58994
},
{
"icon_id": "4880425",
"name": "编辑",
"font_class": "bianji1",
"unicode": "e642",
"unicode_decimal": 58946
},
{
"icon_id": "5472800",
"name": "用户权限",
"font_class": "dfzq-",
"unicode": "e609",
"unicode_decimal": 58889
},
{
"icon_id": "6693043",
"name": "分享",
"font_class": "fenxiang",
"unicode": "e641",
"unicode_decimal": 58945
},
{
"icon_id": "10213484",
"name": "授权",
"font_class": "shouquan1",
"unicode": "e634",
"unicode_decimal": 58932
},
{
"icon_id": "13416544",
"name": "左箭头",
"font_class": "jiantou",
"unicode": "e653",
"unicode_decimal": 58963
},
{
"icon_id": "13416596",
"name": "左箭头",
"font_class": "jiantou-copy-copy",
"unicode": "e654",
"unicode_decimal": 58964
}
]
}

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 96 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 181 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 859 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 221 KiB

BIN
src/assets/images/close.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 297 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 727 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

BIN
src/assets/images/login.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 163 KiB

BIN
src/assets/images/login.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 821 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 940 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 778 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 300 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.2 KiB

103310
src/assets/map/china.json Normal file

File diff suppressed because it is too large Load Diff

14357
src/assets/map/上海市.json Normal file

File diff suppressed because it is too large Load Diff

21493
src/assets/map/云南省.json Normal file

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

17469
src/assets/map/北京市.json Normal file

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,761 @@
{
"type": "FeatureCollection",
"features": [
{
"type": "Feature",
"properties": {
"adcode": 710000,
"name": "台湾省",
"center": [
121.509062,
25.044332
],
"centroid": [
120.971485,
23.749452
],
"childrenNum": 0,
"level": "province",
"acroutes": [
100000
],
"parent": {
"adcode": 100000
}
},
"geometry": {
"type": "MultiPolygon",
"coordinates": [
[
[
[
120.443558,
22.441245
],
[
120.517584,
22.408536
],
[
120.569903,
22.361728
],
[
120.640505,
22.241347
],
[
120.659209,
22.15432
],
[
120.662001,
22.066983
],
[
120.651464,
22.033165
],
[
120.667691,
21.983168
],
[
120.70157,
21.927065
],
[
120.743246,
21.915569
],
[
120.78155,
21.923957
],
[
120.85468,
21.883333
],
[
120.87291,
21.897387
],
[
120.866482,
21.98436
],
[
120.907315,
22.033208
],
[
120.904154,
22.119757
],
[
120.914955,
22.302718
],
[
120.981658,
22.528305
],
[
121.015009,
22.584168
],
[
121.033292,
22.650725
],
[
121.078498,
22.669656
],
[
121.170544,
22.723133
],
[
121.210481,
22.770665
],
[
121.237931,
22.836327
],
[
121.324708,
22.945666
],
[
121.354687,
23.01006
],
[
121.370388,
23.084347
],
[
121.409535,
23.102669
],
[
121.430294,
23.137196
],
[
121.415015,
23.195973
],
[
121.440358,
23.272096
],
[
121.479558,
23.3223
],
[
121.497788,
23.419789
],
[
121.521497,
23.483198
],
[
121.523078,
23.538708
],
[
121.587778,
23.76102
],
[
121.621604,
23.92075
],
[
121.659381,
24.006893
],
[
121.639992,
24.064276
],
[
121.643838,
24.097713
],
[
121.678085,
24.133906
],
[
121.689044,
24.174401
],
[
121.809172,
24.339055
],
[
121.826717,
24.423579
],
[
121.867498,
24.478978
],
[
121.885464,
24.529677
],
[
121.892524,
24.617912
],
[
121.862598,
24.671515
],
[
121.837993,
24.76015
],
[
121.845053,
24.836269
],
[
121.932883,
24.938645
],
[
122.012178,
25.001469
],
[
121.980776,
25.03079
],
[
121.947425,
25.031955
],
[
121.917077,
25.137908
],
[
121.842155,
25.135332
],
[
121.782407,
25.160425
],
[
121.750531,
25.160716
],
[
121.707327,
25.191493
],
[
121.700319,
25.226913
],
[
121.655324,
25.241859
],
[
121.623026,
25.294694
],
[
121.584986,
25.308926
],
[
121.535038,
25.307515
],
[
121.444415,
25.270624
],
[
121.413487,
25.238912
],
[
121.371864,
25.159885
],
[
121.319281,
25.140691
],
[
121.209322,
25.127104
],
[
121.133135,
25.078728
],
[
121.102102,
25.075153
],
[
121.024704,
25.040479
],
[
121.009688,
24.993649
],
[
120.960899,
24.940227
],
[
120.908475,
24.852012
],
[
120.892299,
24.767526
],
[
120.823753,
24.688321
],
[
120.762371,
24.658335
],
[
120.688661,
24.600678
],
[
120.64277,
24.490172
],
[
120.589187,
24.432354
],
[
120.546299,
24.370413
],
[
120.521009,
24.312038
],
[
120.470534,
24.24259
],
[
120.451461,
24.182691
],
[
120.392029,
24.11824
],
[
120.316158,
23.984881
],
[
120.278276,
23.927798
],
[
120.245768,
23.840553
],
[
120.175377,
23.807385
],
[
120.102773,
23.700981
],
[
120.094817,
23.587466
],
[
120.121741,
23.504664
],
[
120.107831,
23.341264
],
[
120.081434,
23.29191
],
[
120.018947,
23.073115
],
[
120.029537,
23.048623
],
[
120.131382,
23.002118
],
[
120.149138,
22.896715
],
[
120.200403,
22.721101
],
[
120.274272,
22.560181
],
[
120.297191,
22.531315
],
[
120.443558,
22.441245
]
]
],
[
[
[
124.542984,
25.903911
],
[
124.586346,
25.913777
],
[
124.572805,
25.93974
],
[
124.541825,
25.931031
],
[
124.542984,
25.903911
]
]
],
[
[
[
123.445286,
25.725966
],
[
123.472104,
25.713024
],
[
123.508933,
25.723237
],
[
123.514834,
25.751226
],
[
123.483063,
25.768587
],
[
123.444496,
25.746514
],
[
123.445286,
25.725966
]
]
],
[
[
[
119.64597,
23.55091
],
[
119.701081,
23.550657
],
[
119.678057,
23.600041
],
[
119.610089,
23.603953
],
[
119.594388,
23.577245
],
[
119.566306,
23.584732
],
[
119.562565,
23.530377
],
[
119.573788,
23.505885
],
[
119.609141,
23.503864
],
[
119.64597,
23.55091
]
]
],
[
[
[
123.667207,
25.914066
],
[
123.707092,
25.916873
],
[
123.678008,
25.938667
],
[
123.667207,
25.914066
]
]
],
[
[
[
119.506031,
23.625567
],
[
119.505241,
23.575814
],
[
119.472416,
23.557136
],
[
119.523207,
23.563699
],
[
119.525578,
23.624895
],
[
119.506031,
23.625567
]
]
],
[
[
[
119.49739,
23.386683
],
[
119.495125,
23.350156
],
[
119.516885,
23.349903
],
[
119.49739,
23.386683
]
]
],
[
[
[
119.557454,
23.666474
],
[
119.604083,
23.616989
],
[
119.615516,
23.660925
],
[
119.586485,
23.675974
],
[
119.557454,
23.666474
]
]
],
[
[
[
121.46823,
22.676644
],
[
121.476502,
22.64166
],
[
121.513541,
22.631833
],
[
121.5147,
22.67639
],
[
121.46823,
22.676644
]
]
],
[
[
[
121.510538,
22.087185
],
[
121.507693,
22.048523
],
[
121.534089,
22.022146
],
[
121.594522,
21.995382
],
[
121.604586,
22.022699
],
[
121.575028,
22.037122
],
[
121.575607,
22.084421
],
[
121.510538,
22.087185
]
]
],
[
[
[
122.097533,
25.500168
],
[
122.093581,
25.47183
],
[
122.124825,
25.475932
],
[
122.097533,
25.500168
]
]
],
[
[
[
119.421467,
23.216684
],
[
119.421309,
23.18935
],
[
119.453396,
23.217697
],
[
119.421467,
23.216684
]
]
],
[
[
[
120.355042,
22.327259
],
[
120.395454,
22.342287
],
[
120.383072,
22.355573
],
[
120.355042,
22.327259
]
]
]
]
}
}
]
}

25715
src/assets/map/吉林省.json Normal file

File diff suppressed because it is too large Load Diff

28807
src/assets/map/四川省.json Normal file

File diff suppressed because it is too large Load Diff

12138
src/assets/map/天津市.json Normal file

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

22053
src/assets/map/安徽省.json Normal file

File diff suppressed because it is too large Load Diff

29293
src/assets/map/山东省.json Normal file

File diff suppressed because it is too large Load Diff

10503
src/assets/map/山西省.json Normal file

File diff suppressed because it is too large Load Diff

33743
src/assets/map/广东省.json Normal file

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

16899
src/assets/map/江苏省.json Normal file

File diff suppressed because it is too large Load Diff

21187
src/assets/map/江西省.json Normal file

File diff suppressed because it is too large Load Diff

12711
src/assets/map/河北省.json Normal file

File diff suppressed because it is too large Load Diff

26701
src/assets/map/河南省.json Normal file

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

27151
src/assets/map/湖北省.json Normal file

File diff suppressed because it is too large Load Diff

30605
src/assets/map/湖南省.json Normal file

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

18429
src/assets/map/甘肃省.json Normal file

File diff suppressed because it is too large Load Diff

20143
src/assets/map/福建省.json Normal file

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

22711
src/assets/map/贵州省.json Normal file

File diff suppressed because it is too large Load Diff

28197
src/assets/map/辽宁省.json Normal file

File diff suppressed because it is too large Load Diff

27761
src/assets/map/重庆市.json Normal file

File diff suppressed because it is too large Load Diff

12429
src/assets/map/陕西省.json Normal file

File diff suppressed because it is too large Load Diff

17541
src/assets/map/青海省.json Normal file

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,97 @@
.anji-card {
margin-bottom: 5px;
box-sizing: border-box;
padding: 0;
color: rgba(0, 0, 0, 0.65);
font-size: 14px;
font-variant: tabular-nums;
line-height: 1.5;
list-style: none;
font-feature-settings: "tnum";
position: relative;
background: #fff;
border-radius: 2px;
transition: all 0.3s;
.card-head {
display: flex;
align-items: center;
box-sizing: border-box;
min-height: 35px;
padding: 0 24px;
color: rgba(0, 0, 0, 0.85);
font-weight: 500;
font-size: 16px;
background: transparent;
border-bottom: 1px solid #e8e8e8;
border-radius: 2px 2px 0 0;
zoom: 1;
.main-card-header-button {
position: absolute;
right: 20px;
}
}
.card-body {
padding: 24px;
zoom: 1;
}
}
.el-form-item .el-form-item__label {
line-height: 28px;
}
.el-form-item__content {
line-height: 28px;
}
.el-input__icon {
line-height: 28px;
}
.el-input--suffix .el-input__inner {
height: 28px;
line-height: 28px;
}
.el-input .el-input__inner {
height: 28px;
line-height: 28px;
}
.el-button {
padding: 7px 15px;
font-size: 12px;
border-radius: 3px;
}
.el-dropdown-menu__item {
min-width: 80px;
max-width: 110px;
.el-button--text {
margin-left: 0;
}
}
.el-dropdown-menu__item:focus,
.el-dropdown-menu__item:not(.is-disabled):hover {
background: none !important;
}
.el-table td {
padding: 6px 0;
}
@keyframes turn {
0% {
-webkit-transform: rotate(0deg);
}
25% {
-webkit-transform: rotate(90deg);
}
50% {
-webkit-transform: rotate(180deg);
}
75% {
-webkit-transform: rotate(270deg);
}
100% {
-webkit-transform: rotate(360deg);
}
}

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