Browse Source

初始化

master
huxinglu 4 years ago
parent
commit
47a094d362
100 changed files with 16537 additions and 0 deletions
  1. +12
    -0
      .babelrc
  2. +9
    -0
      .editorconfig
  3. +14
    -0
      .gitignore
  4. +10
    -0
      .postcssrc.js
  5. +41
    -0
      build/build.js
  6. +54
    -0
      build/check-versions.js
  7. BIN
      build/logo.png
  8. +101
    -0
      build/utils.js
  9. +22
    -0
      build/vue-loader.conf.js
  10. +93
    -0
      build/webpack.base.conf.js
  11. +95
    -0
      build/webpack.dev.conf.js
  12. +145
    -0
      build/webpack.prod.conf.js
  13. +7
    -0
      config/dev.env.js
  14. +80
    -0
      config/index.js
  15. +4
    -0
      config/prod.env.js
  16. +14
    -0
      index.html
  17. +13559
    -0
      package-lock.json
  18. +80
    -0
      package.json
  19. +175
    -0
      src/App.vue
  20. +87
    -0
      src/api/api.js
  21. +47
    -0
      src/api/basicData/driver.js
  22. +33
    -0
      src/api/basicData/equipment.js
  23. +22
    -0
      src/api/basicData/evaluation.js
  24. +42
    -0
      src/api/basicData/mountEquipment.js
  25. +26
    -0
      src/api/basicData/question.js
  26. +76
    -0
      src/api/business/inspect.js
  27. +111
    -0
      src/api/file/inspectfile.js
  28. +36
    -0
      src/api/permission/admin.js
  29. +25
    -0
      src/api/permission/authRule.js
  30. +18
    -0
      src/api/permission/dep.js
  31. +19
    -0
      src/api/permission/level.js
  32. +22
    -0
      src/api/permission/menu.js
  33. +19
    -0
      src/api/permission/position.js
  34. +59
    -0
      src/api/report/report.js
  35. +37
    -0
      src/api/statistics/index.js
  36. +41
    -0
      src/api/system/agency.js
  37. +21
    -0
      src/api/system/config.js
  38. +21
    -0
      src/api/system/dict.js
  39. +21
    -0
      src/api/system/dicttype.js
  40. +63
    -0
      src/api/system/lsadmin.js
  41. +54
    -0
      src/api/system/lsauthgroup.js
  42. +61
    -0
      src/api/system/lscity.js
  43. +51
    -0
      src/api/user/user.js
  44. +1
    -0
      src/assets/icons/basicData.svg
  45. +1
    -0
      src/assets/icons/captcha.svg
  46. +1
    -0
      src/assets/icons/check.svg
  47. +1
    -0
      src/assets/icons/dashboard.svg
  48. +1
    -0
      src/assets/icons/dataStatistics.svg
  49. +1
    -0
      src/assets/icons/example.svg
  50. +1
    -0
      src/assets/icons/exit-fullscreen.svg
  51. +1
    -0
      src/assets/icons/eye-open.svg
  52. +1
    -0
      src/assets/icons/eye.svg
  53. +1
    -0
      src/assets/icons/fileManage.svg
  54. +1
    -0
      src/assets/icons/form.svg
  55. +1
    -0
      src/assets/icons/fullscreen.svg
  56. +1
    -0
      src/assets/icons/home.svg
  57. +9
    -0
      src/assets/icons/index.js
  58. +1
    -0
      src/assets/icons/language.svg
  59. +1
    -0
      src/assets/icons/link.svg
  60. +1
    -0
      src/assets/icons/list.svg
  61. +1
    -0
      src/assets/icons/lock.svg
  62. +1
    -0
      src/assets/icons/log.svg
  63. +1
    -0
      src/assets/icons/nested.svg
  64. +1
    -0
      src/assets/icons/password.svg
  65. +1
    -0
      src/assets/icons/play.svg
  66. +1
    -0
      src/assets/icons/reportManage.svg
  67. +1
    -0
      src/assets/icons/search.svg
  68. +1
    -0
      src/assets/icons/size.svg
  69. +1
    -0
      src/assets/icons/stop.svg
  70. +1
    -0
      src/assets/icons/system.svg
  71. +1
    -0
      src/assets/icons/table.svg
  72. +1
    -0
      src/assets/icons/tree.svg
  73. +1
    -0
      src/assets/icons/user.svg
  74. BIN
      src/assets/img/404.jpg
  75. BIN
      src/assets/img/add_img.png
  76. BIN
      src/assets/img/core/1.png
  77. BIN
      src/assets/img/core/2.png
  78. BIN
      src/assets/img/core/3.png
  79. BIN
      src/assets/img/core/4.png
  80. BIN
      src/assets/img/core/shouye.jpg
  81. BIN
      src/assets/img/dir.png
  82. BIN
      src/assets/img/home-back.jpg
  83. BIN
      src/assets/img/home.jpg
  84. BIN
      src/assets/img/index-icon.png
  85. +74
    -0
      src/assets/img/loading.svg
  86. BIN
      src/assets/img/login.png
  87. BIN
      src/assets/img/logo.png
  88. BIN
      src/assets/img/marker-img.png
  89. BIN
      src/assets/img/vedio-bak.jpg
  90. BIN
      src/assets/img/video-2.png
  91. BIN
      src/assets/img/video-top.png
  92. +247
    -0
      src/assets/js/Ypaint.js
  93. +84
    -0
      src/assets/js/filter.js
  94. BIN
      src/assets/logo.png
  95. +80
    -0
      src/components/cVideo.vue
  96. +87
    -0
      src/components/driverAreaSelect.vue
  97. +298
    -0
      src/components/fileUploadImage.vue
  98. +60
    -0
      src/components/imageSign.vue
  99. +42
    -0
      src/components/svgIcon.vue
  100. +0
    -0
      src/components/uploadImage.vue

+ 12
- 0
.babelrc 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
- 0
.editorconfig 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
- 0
.gitignore 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
- 0
.postcssrc.js 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": {}
}
}

+ 41
- 0
build/build.js 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
- 0
build/check-versions.js 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 View File

Before After
Width: 200  |  Height: 200  |  Size: 6.7KB

+ 101
- 0
build/utils.js 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
- 0
build/vue-loader.conf.js 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'
}
}

+ 93
- 0
build/webpack.base.conf.js View File

@@ -0,0 +1,93 @@
'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: ["babel-polyfill", "./src/main.js"]
},
externals: {
'BMap': 'BMap',
'AMap': 'AMap',
},
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: {
'@': 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/assets/icons')],
options: {
symbolId: 'icon-[name]'
}
},
{
test: /\.(png|jpe?g|gif|svg)(\?.*)?$/,
loader: 'url-loader',
exclude: [resolve('src/assets/icons')],
options: {
limit: 10000,
name: utils.assetsPath('img/[name].[hash:7].[ext]')
}
},
{
test: /\.(mp4|webm|ogg|mp3|wav|flac|aac)(\?.*)?$/,
loader: 'url-loader',
options: {
limit: 10000,
name: utils.assetsPath('media/[name].[hash:7].[ext]')
}
},
{
test: /\.(woff2?|eot|ttf|otf)(\?.*)?$/,
loader: 'url-loader',
options: {
limit: 10000,
name: utils.assetsPath('fonts/[name].[hash:7].[ext]')
}
}
]
},
node: {
// prevent webpack from injecting useless setImmediate polyfill because Vue
// source contains it (although only uses it if it's native).
setImmediate: false,
// prevent webpack from injecting mocks to Node native modules
// that does not make sense for the client
dgram: 'empty',
fs: 'empty',
net: 'empty',
tls: 'empty',
child_process: 'empty'
}
}

+ 95
- 0
build/webpack.dev.conf.js 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
- 0
build/webpack.prod.conf.js 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
- 0
config/dev.env.js 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"'
})

+ 80
- 0
config/index.js View File

@@ -0,0 +1,80 @@
'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: {
'/api': {
target: 'http://nanjing.yunhengwang.net/api',
changeOrigin: true,
secure: false,
pathRewrite: {
'^/api': ''
}
}
},

// Various Dev Server settings
host: '0.0.0.0', // can be overwritten by process.env.HOST
port: 8081, // can be overwritten by process.env.PORT, if port is in use, a free one will be determined
autoOpenBrowser: false,
hot: true,
disableHostCheck:true,
errorOverlay: true,
notifyOnErrors: true,
poll: false, // https://webpack.js.org/configuration/dev-server/#devserver-watchoptions-


/**
* Source Maps
*/

// https://webpack.js.org/configuration/devtool/#development
devtool: 'cheap-module-eval-source-map',

// If you have problems debugging vue-files in devtools,
// set this to false - it *may* help
// https://vue-loader.vuejs.org/en/options.html#cachebusting
cacheBusting: true,

cssSourceMap: true
},

build: {
// Template for index.html
index: path.resolve(__dirname, '../dist/index.html'),

// 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
- 0
config/prod.env.js View File

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

+ 14
- 0
index.html View File

@@ -0,0 +1,14 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
<title></title>
</head>
<body>
<div id="app"></div>
<script src="https://cdn.dingxiang-inc.com/ctu-group/captcha-ui/index.js"></script>
<script type="text/javascript" src="https://webapi.amap.com/maps?v=1.4.15&key=de9019d8c702937af86dfdb6897d82c3&plugin=AMap.DistrictSearch"></script>
</body>
</html>

+ 13559
- 0
package-lock.json
File diff suppressed because it is too large
View File


+ 80
- 0
package.json View File

@@ -0,0 +1,80 @@
{
"name": "taauav",
"version": "1.0.0",
"description": "A Vue.js project",
"author": "bao",
"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": {
"@antv/g2": "^3.5.11",
"element-ui": "^2.13.0",
"vue": "^2.5.2",
"vue-router": "^3.0.1",
"vuex": "^3.1.2"
},
"devDependencies": {
"autoprefixer": "^7.1.2",
"axios": "^0.19.0",
"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-polyfill": "^6.26.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",
"es6-promise": "^4.2.8",
"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",
"html2canvas": "^1.0.0-rc.5",
"jquery": "^3.4.1",
"js-cookie": "^2.2.0",
"less": "^3.10.3",
"less-loader": "^5.0.0",
"node-notifier": "^5.1.2",
"optimize-css-assets-webpack-plugin": "^3.2.0",
"ora": "^1.2.0",
"portfinder": "^1.0.13",
"postcss-import": "^11.0.0",
"postcss-loader": "^2.0.8",
"postcss-url": "^7.2.1",
"rimraf": "^2.6.0",
"semver": "^5.3.0",
"shelljs": "^0.7.6",
"svg-sprite-loader": "^4.1.6",
"svgo": "^1.3.2",
"svgo-loader": "^2.2.1",
"uglifyjs-webpack-plugin": "^1.1.1",
"url-loader": "^0.5.8",
"v-viewer": "^1.4.2",
"vue-lazyload": "^1.3.3",
"vue-loader": "^13.3.0",
"vue-style-loader": "^3.0.1",
"vue-template-compiler": "^2.5.2",
"vue-video-player": "^5.0.2",
"vue-wechat-title": "^2.0.5",
"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"
]
}

+ 175
- 0
src/App.vue View File

@@ -0,0 +1,175 @@
<template>
<div id="app">
<keep-alive>
<router-view v-wechat-title="$route.meta.title" v-if="$route.meta.keepAlive"></router-view>
</keep-alive>
<router-view v-wechat-title="$route.meta.title" v-if="!$route.meta.keepAlive"></router-view>
</div>
</template>

<script>
export default {
name: 'App',
created() {
}
}
</script>

<style lang="less">
#app {
font-family: 'Avenir', Helvetica, Arial, sans-serif;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
color: #2c3e50;
margin-top: 60px;
}

.el-tabs--border-card {
/*height: 100%;*/
}

body,html{
height: 100%;
width: 100%;
overflow: hidden;
background-color: #f2f2f2;
}

.el-cascader--small {
width: 100% !important;
}

.el-drawer__body{
padding: 0px 20px 20px 20px;
}

.el-button--mini {
padding: 5px 7px!important;
font-size: 12px!important;
}

.el-button+.el-button {
margin-left: 2px!important;
}

.el-dialog {
width: 500px!important;
}

.el-form--inline .el-form-item{
margin-bottom: 10px!important;
}

.el-select {
width: 100%
}

.el-table--border th{
background-color: #f2f2f2!important;
color: #666666!important;
}

.page-current{
text-align: center;
padding: 15px 5px;
padding-bottom: 0px;
}

//表格//解决element-ui的table表格控件表头与内容列不对齐问题

.el-table th.gutter {

display: table-cell!important;

}

*{
outline: none;
}

.el-form-item__content{
text-align: left!important;
}

a{text-decoration:none}

img {
background-color: #eeeeee;
cursor: pointer;
}

.el-radio-button__orig-radio:disabled:checked+.el-radio-button__inner {
color: #FFF!important;
background-color: #409EFF!important;
border-color: #409EFF!important;
}

.viewer-new-title {
color: #ffffff;
display: inline-block;
font-size: 16px;
line-height: 2;
margin: 0 5% 5px;
max-width: 90%;
opacity: 0.8;
overflow: hidden;
text-overflow: ellipsis;
-webkit-transition: opacity 0.15s;
transition: opacity 0.15s;
white-space: nowrap;
}

.el-tabs__header .el-tabs__item.is-active {
color: #fff!important;
background-color: #409eff!important;
}

.el-dialog__header {
background-color: #1890ff;
padding: 12px 20px 10px!important;
.el-dialog__title {
color: #ffffff!important;
}
.el-dialog__headerbtn {
top: 15px!important;
.el-dialog__close{
color: #ffffff!important;
}
}
}


.el-message-box{
border: none!important;
.el-message-box__header {
background-color: #1890ff;
padding: 12px 15px 10px!important;
.el-message-box__title {
color: #ffffff!important;
font-size: 17px!important;
}
.el-message-box__headerbtn {
top: 12px!important;
.el-message-box__close {
color: #ffffff!important
}
}
}
}

.el-textarea.is-disabled .el-textarea__inner {
background-color: #ffffff;
color: #333333;
}

.foot-page {
margin-top: 20px;
display: flex;
justify-content: center;
}

.el-drawer__body {
overflow-y: auto;
}

</style>

+ 87
- 0
src/api/api.js View File

@@ -0,0 +1,87 @@
import axios from 'axios'
import Cookies from 'js-cookie';
import {Notification} from 'element-ui';
import store from '../vuex'


axios.defaults.timeout = 15000

//跨域请求,允许保存cookie
axios.defaults.withCredentials = true;

//返回其他状态吗
axios.defaults.validateStatus = function (status) {
return status >= 200 && status <= 500; // 默认的
};


axios.interceptors.request.use(
config => {
config.headers['Content-Type'] = 'application/json;charset=UTF-8'
config.headers['Authorization'] = Cookies.get('token') ? Cookies.get('token') : ''
return config;
},
err => {
return Promise.reject(err);
}
);

axios.interceptors.response.use(
/**
* If you want to get http information such as headers or status
* Please return response => response
*/

/**
* Determine the request status by custom code
* Here is just an example
* You can also judge the status by HTTP Status Code
*/
response => {
if (response.status == 200) {
const res = response.data
// if the custom code is not 20000, it is judged as an error.
if (res.type == "application/octet-stream") {
return res
}
if (res.meta.code !== 200) {
Notification.error({
title: '错误',
message: res.meta.msg,
duration: 5 * 1000
});
if (res.meta.code === 401 || res.meta.code === 50008 || res.meta.code === 50012 || res.meta.code === 50014) {
store.dispatch('user/resetToken').then(res => {
location.reload()
}).catch(e => {
})
} else {
return Promise.reject(new Error(res.meta.msg || 'Error'))
}
} else {
return res
}
} else {
const res = response.data
let error = res.meta ? res.meta.msg : res
if (response.status == 500) {
error = '服务超时'
}
Notification.error({
title: '错误',
message: error
});
return Promise.reject(new Error(error))
}
},
error => {
Notification.error({
title: '错误',
message: '服务超时'
});
return Promise.reject(error)
}
)

export default axios


+ 47
- 0
src/api/basicData/driver.js View File

@@ -0,0 +1,47 @@
import axios from '../api'

export default {
getBaseData(params) {
return axios.get('/api/driver/baseData', JSON.stringify(params))
},

getDriverList(params) {
return axios({
method: "GET",
url: '/api/driver/driverList',
params: {
...params
}
})
},

getIndex(params) {
return axios.post('/api/driver/index', JSON.stringify(params))
},

editDriver(params) {
return axios.post('/api/driver/edit', JSON.stringify(params))
},

addDriver(params) {
return axios.post('/api/driver/add', JSON.stringify(params))
},

dropDriver(params) {
return axios({
method: "POST",
url: '/api/driver/drop',
params: params
})
},

getDetail(params) {
return axios({
method: "GET",
url: '/api/driver/detail?id='+params.id,
data: {}
})
}
}



+ 33
- 0
src/api/basicData/equipment.js View File

@@ -0,0 +1,33 @@
import axios from '../api'

export default {
getBaseData(params) {
return axios.get('/api/equipment/baseData', JSON.stringify(params))
},

getIndex(params) {
return axios.post('/api/equipment/index', JSON.stringify(params))
},

editDriver(params) {
return axios.post('/api/equipment/edit', JSON.stringify(params))
},

addDriver(params) {
return axios.post('/api/equipment/add', JSON.stringify(params))
},

setStatus(params) {
return axios.post('/api/equipment/setStatus', JSON.stringify(params))
},

dropEquipment(params) {
return axios({
method: "POST",
url: '/api/equipment/drop',
params: params
})
},
}



+ 22
- 0
src/api/basicData/evaluation.js View File

@@ -0,0 +1,22 @@
import axios from '../api'

export default {
getIndex(params) {
return axios.post('/api/evaluation/index', JSON.stringify(params))
},

editDriver(params) {
return axios.post('/api/evaluation/edit', JSON.stringify(params))
},

addDriver(params) {
return axios.post('/api/evaluation/add', JSON.stringify(params))
},

setStatus(params) {
return axios.post('/api/evaluation/setStatus', JSON.stringify(params))
}

}



+ 42
- 0
src/api/basicData/mountEquipment.js View File

@@ -0,0 +1,42 @@
import axios from '../api'

/**
* 挂载设备API
*/
export default {

// 获取挂载设备列表
mountEquipmentList(params) {
return axios.post('/api/mountequipment/index', params)
},

// 添加挂载设备
mountEquipmentAdd(params) {
return axios.post('/api/mountequipment/add', params)
},

// 编辑挂载设备
mountEquipmentEdit(params) {
return axios.post('/api/mountequipment/edit', params)
},

// 设置挂载设备状态
setStatus(params) {
return axios.post('/api/mountequipment/setStatus', params)
},

// 获取基础参数
getParamsList(params) {
return axios.post('/api/mountequipment/getParamsList', params)
},

dropMountEquipment(params) {
return axios({
method: "POST",
url: '/api/mountequipment/drop',
params: params
})
},
}



+ 26
- 0
src/api/basicData/question.js View File

@@ -0,0 +1,26 @@
import axios from '../api'

export default {
getBaseData(params) {
return axios.get('/api/question/baseData', JSON.stringify(params))
},

getIndex(params) {
return axios.post('/api/question/options', JSON.stringify(params))
},

editDriver(params) {
return axios.post('/api/question/edit', JSON.stringify(params))
},

addDriver(params) {
return axios.post('/api/question/add', JSON.stringify(params))
},

setStatus(params) {
return axios.post('/api/question/setStatus', JSON.stringify(params))
}

}



+ 76
- 0
src/api/business/inspect.js View File

@@ -0,0 +1,76 @@
import axios from '../api'

export default {
addTask(params) {
return axios.post('/api/inspect/addTask',params)
},
getList(params) {
return axios.post('/api/inspectDriver/index',params)
},
getAssignedList(params) {
return axios.post('/api/inspectDriver/assignedList',params)
},
basicData(params) {
return axios.get('/api/inspectDriver/basicData',params)
},
dropTask(params) {
return axios.post('/api/inspectDriver/dropTask',params)
},
reProcess(params) {
return axios.post('/api/inspectDriver/reProcess',params)
},
assignCancel(params) {
return axios.post('/api/inspectDriver/cancel',params)
},
getInspectDriverList(params) {
return axios.post('/api/inspectDriver/list',params)
},
getDetail(params) {
return axios({
method: "GET",
url: '/api/inspectDriver/detail?id='+params.id,
data: {}
})
},
print(params) {
return axios({
method: "GET",
url: '/api/inspectDriver/print?id='+params.id,
data: {}
})
},
executeTask(params) {
return axios.post('/api/inspectDriver/executeTask',params)
},
getEquipmentList(data) {
return axios({
method: "POST",
url: '/api/equipment/getEquipmentList',
data:data
})
},
getMountEquipmentList(data) {
return axios({
method: "POST",
url: '/api/mountequipment/getMountEquipmentList',
data:data
})
},
getFlyHandList(data) {
return axios({
method: "POST",
url: '/api/admin/getFlyHandList',
data:data
})
},

assignTask(data) {
return axios({
method: "POST",
url: '/api/inspectDriver/assignTask',
data:data
})
}
}



+ 111
- 0
src/api/file/inspectfile.js View File

@@ -0,0 +1,111 @@
import axios from '../api'

export default {
getPicList(params) {
return axios.post('/api/inspectfile/picList', params)
},
savePic(params) {
return axios.post('/api/inspectfile/savePic', params)
},
getReview(params) {
return axios.post('/api/inspectfile/review', params)
},
uploadPic(params) {
return axios.post('/api/inspectfile/uploadPic', params)
},
getDocument(params) {
return axios.get('/api/inspectfile/document', params)
},
setMark(params) {
return axios({
method: "GET",
url: '/api/inspectfile/setMark?id=' + params.id,
data: {}
})
},

reviewFinish(params) {
return axios({
method: "GET",
url: '/api/inspectfile/reviewFinish?id=' + params.id,
data: {}
})
},

setMarkFinish(params) {
return axios({
method: "GET",
url: '/api/inspectfile/setMarkFinish?id=' + params.id,
data: {}
})
},

drop(params) {
return axios.post('/api/inspectfile/drop', params)
},

reviewPic(params) {
return axios.post('/api/inspectfile/reviewPic', params)
},

getReviewPic(params) {
return axios({
method: "GET",
url: '/api/inspectfile/getReviewPic?id=' + params.id,
data: {}
})
},

dropPic(params) {
return axios({
method: "GET",
url: '/api/inspectfile/dropPic?id=' + params.id,
data: {}
})
},

getDetail(params) {
return axios({
method: "GET",
url: '/api/inspectfile/view?id=' + params.id,
data: {}
})
},
print(params) {
return axios({
method: "GET",
url: '/api/inspectDriver/print?id=' + params.id,
data: {}
})
},
cancelMark(params) {
return axios({
method: "GET",
url: '/api/inspectfile/cancelMark?id=' + params.id,
data: {}
})
},
getQuestionList(params) {
return axios({
method: "GET",
url: '/api/inspectfile/questionList',
data: {}
})
},
downPic(params) {
return axios({
method: 'GET',
url: '/api/inspectfile/downPic?id=' + params.id,
timeout: 1000000,
responseType: 'blob',
})
},
down(params) {
return axios({
method: 'GET',
url: '/api/inspectfile/download?ids=' + params.id
})
}
}



+ 36
- 0
src/api/permission/admin.js View File

@@ -0,0 +1,36 @@
import axios from '../api'

export default {
getMenuList(params) {
return axios.get('/api/admin/authList', JSON.stringify(params))
},
accountList(params) {
return axios.post('/api/admin/index',params)
},
accountAdd(params) {
return axios.post('/api/admin/add',params)
},
accountEdit(params) {
return axios.post('/api/admin/edit',params)
},
accountDel(params) {
return axios.post('/api/admin/drop',params)
},
accountReset(params) {
return axios.post('/api/admin/reset',params)
},
accountEditStatus(params) {
return axios.post('/api/admin/editStatus',params)
},
setPermit(params) {
return axios.post('/api/admin/setPermit',params)
},
getAdminList(params) {
return axios.post('/api/admin/getAdminList',params)
},
getCityList(params) {
return axios.get('/api/admin/getCityList',JSON.stringify(params))
}
}



+ 25
- 0
src/api/permission/authRule.js View File

@@ -0,0 +1,25 @@
import axios from '../api'

export default {
roleList(params) {
return axios.get('/api/authgroup/index',JSON.stringify(params))
},
editStatus(params) {
return axios.post('/api/authgroup/editStatus',params)
},
add(params) {
return axios.post('/api/authgroup/add',params)
},
del(params) {
return axios.post('/api/authgroup/del',params)
},
edit(params) {
return axios.post('/api/authgroup/edit',params)
},
setRules(params) {
return axios.post('/api/authgroup/setRules',params)
},
getEdit(params) {
return axios.get('/api/authgroup/getAuthGroup',JSON.stringify(params))
}
}

+ 18
- 0
src/api/permission/dep.js View File

@@ -0,0 +1,18 @@
import axios from '../api'

export default {
departList(params) {
return axios.post('/api/dep/index', params)
},
departAdd(params) {
return axios.post('/api/dep/add', params)
},
departEdit(params) {
return axios.post('/api/dep/edit', params)
},
departDel(params) {
return axios.post('/api/dep/drop', params)
}
}



+ 19
- 0
src/api/permission/level.js View File

@@ -0,0 +1,19 @@
import axios from '../api'

export default {
levelList(params) {
return axios.post('/api/level/index', params)
},
levelAdd(params) {
return axios.post('/api/level/add', params)
},
levelEdit(params) {
return axios.post('/api/level/edit', params)
},
levelDel(params) {
return axios.post('/api/level/drop', params)
},
levelEditStatus(params) {
return axios.post('/api/level/changeStatus', params)
}
}

+ 22
- 0
src/api/permission/menu.js View File

@@ -0,0 +1,22 @@
import axios from '../api'

export default {
backMenuList(params) {
return axios.get('/api/authrule/index',JSON.stringify(params))
},
backMenuAdd(params) {
return axios.post('/api/authrule/add',params)
},
getBackMenuEdit(params) {
return axios.post('/api/authrule/getAuthInfo',params)
},
backMenuEdit(params) {
return axios.post('/api/authrule/edit',params)
},
backMenuDel(params) {
return axios.post('/api/authrule/del',params)
},
backEditStatus(params) {
return axios.post('/api/authrule/editStatus',params)
}
}

+ 19
- 0
src/api/permission/position.js View File

@@ -0,0 +1,19 @@
import axios from '../api'

export default {
postAdd(params) {
return axios.post('/api/position/add', params)
},
postList(params) {
return axios.post('/api/position/index', params)
},
postEdit(params) {
return axios.post('/api/position/edit', params)
},
postDel(params) {
return axios.post('/api/position/drop', params)
},
postChangeStatus(params) {
return axios.post('/api/position/changeStatus', params)
}
}

+ 59
- 0
src/api/report/report.js View File

@@ -0,0 +1,59 @@
import axios from '../api'

export default {
getGenerateList(params) {
return axios.post('/api/report/generateList', params)
},
getBaseData(params) {
return axios.get('/api/report/basicData', params)
},

dropReport(params) {
return axios.post('/api/report/dropReport', params)
},

reProcess(params) {
return axios.post('/api/report/reProcess', params)
},

getCheckList(params) {
return axios.post('/api/report/checkList', params)
},

generateSub(params) {
return axios.post('/api/report/generateSub', params)
},

checkSub(params) {
return axios.post('/api/report/checkSub', params)
},

getSearchList(params) {
return axios.post('/api/report/searchList', params)
},

getInputList(params) {
return axios.post('/api/report/inputList', params)
},

editUrl(params) {
return axios.post('/api/report/editUrl', params)
},

generate(params) {
return axios({
method: "GET",
url: '/api/report/generate?id=' + params.id,
data: {}
})
},
getDetail(params) {
return axios({
method: "GET",
url: '/api/report/detail?id=' + params.id,
data: {}
})
}
}



+ 37
- 0
src/api/statistics/index.js View File

@@ -0,0 +1,37 @@
import axios from '../api'

export default {
getData(params) {
return axios.post('/api/statistics/index', JSON.stringify(params))
},

getArea(params) {
return axios.post('/api/statistics/area', JSON.stringify(params))
},

getMapIndex(params) {
return axios({
method: "GET",
url: '/api/statisticsMap/index?type='+params.type,
data: {}
})
},

driverArea(params) {
return axios({
method: "GET",
url: '/api/statisticsMap/driverArea?driverArea='+params.driverArea+'&type='+params.type,
data: {}
})
},

fileList(params) {
return axios({
method: "GET",
url: '/api/statisticsMap/fileList?inspectDriverId='+params.code+'&type='+params.type,
data: {}
})
},
}



+ 41
- 0
src/api/system/agency.js View File

@@ -0,0 +1,41 @@
import axios from '../api'

/**
* API接口
*/
export default {

// 获取菜单列表
agencyList(params) {
return axios.post('/api/agency/index',params)
},

// 添加菜单
agencyAdd(params) {
return axios.post('/api/agency/add',params)
},

// 编辑菜单
agencyEdit(params) {
return axios.post('/api/agency/edit',params)
},

// 获取菜单详情
agencyInfo(params) {
return axios({
method: "GET",
url: '/api/agency/info?id='+params.id,
data: {}
})
},

// 删除菜单
agencyDel(params) {
return axios.post('/api/agency/del',params)
},
// 设置状态
agencyStatus(params) {
return axios.post('/api/agency/setStatus',params)
}
}

+ 21
- 0
src/api/system/config.js View File

@@ -0,0 +1,21 @@
import axios from '../api'

export default {
getConfList(params) {
return axios.post('/api/config/index', params)
},
configAdd(params) {
return axios.post('/api/config/add', params)
},
configEdit(params) {
return axios.post('/api/config/edit', params)
},
setStatus(params) {
return axios.post('/api/config/setStatus', params)
},
drop(params) {
return axios.post('/api/config/drop', params)
}
}



+ 21
- 0
src/api/system/dict.js View File

@@ -0,0 +1,21 @@
import axios from '../api'

export default {
getDictList(params) {
return axios.post('/api/dict/index', params)
},
dictAdd(params) {
return axios.post('/api/dict/add', params)
},
dictEdit(params) {
return axios.post('/api/dict/edit', params)
},
drop(params) {
return axios.post('/api/dict/drop', params)
},
getPDictList(params) {
return axios.get('/api/dict/pDictList', JSON.stringify(params))
}
}



+ 21
- 0
src/api/system/dicttype.js View File

@@ -0,0 +1,21 @@
import axios from '../api'

export default {
getDicttypeList(params) {
return axios.post('/api/dicttype/index', params)
},
dicttypeAdd(params) {
return axios.post('/api/dicttype/add', params)
},
dicttypeEdit(params) {
return axios.post('/api/dicttype/edit', params)
},
drop(params) {
return axios.post('/api/apidicttype/drop', params)
},
dictTypeList(params) {
return axios.get('/api/dicttype/dictTypeList', JSON.stringify(params))
}
}



+ 63
- 0
src/api/system/lsadmin.js View File

@@ -0,0 +1,63 @@
import axios from '../api'

/**
* API接口
*/
export default {

// 获取外部用户列表
lsadminList(params) {
return axios.post('/api/lsadmin/index',params)
},

// 添加外部用户
lsadminAdd(params) {
return axios.post('/api/lsadmin/add',params)
},

// 编辑外部用户
lsadminEdit(params) {
return axios.post('/api/lsadmin/edit',params)
},

// 获取外部用户详情
lsadminInfo(params) {
return axios({
method: "GET",
url: '/api/lsadmin/info?id='+params.id,
data: {}
})
},

// 删除外部用户
lsadminDel(params) {
return axios.post('/api/lsadmin/drop',params)
},

// 设置状态
setStatus(params) {
return axios.post('/api/lsadmin/setStatus',params)
},

// 重置密码
resetPwd(params) {
return axios.post('/api/lsadmin/resetPwd',params)
},

// 获取基础数据
getBaseData(params) {
return axios.get('/api/lsadmin/getBaseData', JSON.stringify(params))
},

// 获取角色列表
getAuthGroupList(params){
return axios.post('/api/lsauthgroup/getAuthGroupList', params)
},


getDriverManagerList(params){
return axios.post('/api/lsadmin/getDriverManagerList', params)
}
}



+ 54
- 0
src/api/system/lsauthgroup.js View File

@@ -0,0 +1,54 @@
import axios from '../api'

/**
* API接口
*/
export default {

getAuthGroupList(params) {
return axios({
method: "POST",
url: '/api/lsauthgroup/getAuthGroupList',
data: {}
})
},

// 获取角色列表
authGroupList(params) {
return axios.post('/api/lsauthgroup/index', params)
},

// 添加角色
authGroupAdd(params) {
return axios.post('/api/lsauthgroup/add', params)
},

// 编辑角色
authGroupEdit(params) {
return axios.post('/api/lsauthgroup/edit', params)
},

// 获取角色详情
authGroupInfo(params) {
return axios({
method: "GET",
url: '/api/lsauthgroup/info?id='+params.id,
data: {}
})
},

// 删除角色
authGroupDel(params) {
return axios({
method: "POST",
url: '/api/lsauthgroup/drop',
params: params
})
},

// 设置角色状态
authGroupStatus(params) {
return axios.post('/api/lsauthgroup/setStatus', params)
},

}

+ 61
- 0
src/api/system/lscity.js View File

@@ -0,0 +1,61 @@
import axios from '../api'

/**
* API接口
*/
export default {

getCityList(){
return axios({
method: "POST",
url: '/api/lscity/getCityList',
data: {}
})
},

// 获取菜单列表
getLsList(params) {
return axios.post('/api/lscity/index',params)
},

// 添加菜单
agencyAdd(params) {
return axios({
method: "POST",
url: '/api/lscity/add',
data: params
})
},

// 编辑菜单
agencyEdit(params) {
return axios({
method: "POST",
url: '/api/lscity/edit',
data: params
})
},

// 获取菜单详情
agencyInfo(params) {
return axios({
method: "GET",
url: '/api/agency/info?id='+params.id,
data: {}
})
},

// 删除菜单
agencyDel(params) {
return axios({
method: "POST",
url: '/api/lscity/drop',
params:params
})
},

// 设置状态
agencyStatus(params) {
return axios.post('/api/agency/setStatus',params)
}
}

+ 51
- 0
src/api/user/user.js View File

@@ -0,0 +1,51 @@
import axios from '../api'

export default {
//一期
captcha(params) {
return axios.get('/api/user/captcha', JSON.stringify(params))
},

login(params) {
return axios.post('/api/user/login', params)
},

getInfo(params) {
return axios.get('/api/admin/info', JSON.stringify(params))
},

authList(params) {
return axios.get('/api/admin/authList', JSON.stringify(params))
},

logout(params) {
return axios.get('/api/user/logout', JSON.stringify(params))
},

dashboard(params) {
return axios({
method: "GET",
url: '/api/index/dashboard?type='+params.type,
data: {}
})
},

editPassword(params) {
return axios.post('/api/user/editPassword',params)
},
profile(params) {
return axios.post('/api/user/profile',params)
},

upload(params) {
return axios({
method: "POST",
url: '/api/upload/upload',
data: params,
timeout: 1000000,
headers: {
'Content-Type': 'multipart/form-data'
}
})
}
}

+ 1
- 0
src/assets/icons/basicData.svg View File

@@ -0,0 +1 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1574226751255" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="2195" width="200" height="200" xmlns:xlink="http://www.w3.org/1999/xlink"><defs><style type="text/css"></style></defs><path d="M314.405498 348.648815a214.513735 214.513735 0 0 1 281.581275 0l116.728237-123.895761A147.446195 147.446195 0 0 1 837.634703 0h7.67949a147.958161 147.958161 0 0 1-7.67949 295.404356 153.589786 153.589786 0 0 1-55.804289-10.751285l-131.57525 131.57525a216.049633 216.049633 0 0 1 2.55983 183.795777l108.024816 108.536783a142.838501 142.838501 0 1 1-71.163268 123.383795 140.790637 140.790637 0 0 1 15.870945-63.995745l-102.393191-97.273531a214.513735 214.513735 0 0 1-244.20776 34.813685l-51.196595 55.804289a167.412867 167.412867 0 1 1-54.780358-50.172664l51.196596-51.196595a217.073565 217.073565 0 0 1-32.765821-255.982977l-51.196596-51.196596a135.670978 135.670978 0 0 1-75.258995 22.526502A138.230808 138.230808 0 0 1 0.570368 236.528271a121.847897 121.847897 0 0 1 0-23.550434 137.718842 137.718842 0 0 1 273.38982 24.574366 138.742774 138.742774 0 0 1-13.311115 59.900016l53.756425 51.196596z" fill="#ffffff" p-id="2196"></path></svg>

+ 1
- 0
src/assets/icons/captcha.svg View File

@@ -0,0 +1 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1573724913617" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="3441" xmlns:xlink="http://www.w3.org/1999/xlink" width="500" height="500"><defs><style type="text/css"></style></defs><path d="M814.592 229.888c-145.92 0-290.816-82.944-292.352-83.968-3.072-1.536-6.144-2.56-9.216-2.56-3.072 0-6.656 1.024-9.216 2.56-1.536 1.024-150.016 83.968-294.4 83.968-10.24 0-18.944 8.704-18.944 18.944v264.192c0 117.248 55.296 218.112 159.744 291.328 77.824 54.784 154.624 74.752 157.696 75.264 1.536 0.512 3.072 0.512 4.608 0.512 1.536 0 3.072 0 4.608-0.512 3.072-1.024 79.36-20.992 157.184-76.288 103.936-73.728 158.72-174.08 158.72-290.816v-263.68c0.512-10.24-8.192-18.944-18.432-18.944zM697.344 445.44L506.368 636.416c-5.12 5.12-11.776 7.68-18.432 7.68-7.168 0-13.824-2.56-18.432-7.68L351.232 518.144c-10.24-10.24-10.24-26.624 0.512-36.864a25.958 25.958 0 0 1 36.864 0l99.84 99.84L660.48 408.576c10.24-10.24 26.624-10.24 36.864 0.512a26.288 26.288 0 0 1 0 36.352z" fill="#889aa4" p-id="3442"></path></svg>

+ 1
- 0
src/assets/icons/check.svg View File

@@ -0,0 +1 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1573205540682" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="5974" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><defs><style type="text/css"></style></defs><path d="M808.290462 920.615385v41.353846c0 5.415385-1.969231 10.338462-5.907693 13.784615-3.938462 3.938462-8.861538 5.907692-13.784615 5.907692L94.444308 984.615385c-10.830769 0-19.692308-8.861538-19.692308-19.692308l-2.953846-758.153846c0-10.830769 8.861538-19.692308 19.692308-19.692308h46.276923v18.215385c0 32.492308 26.584615 59.569231 59.56923 59.56923h486.4c32.492308 0 59.569231-26.584615 59.569231-59.56923v-20.676923h43.323077c5.415385 0 10.338462 1.969231 13.784615 5.907692 3.938462 3.938462 5.907692 8.861538 5.907693 13.784615l0.492307 138.338462c21.661538 0 39.384615-17.723077 39.384616-39.384616l-0.492308-98.953846c0-15.753846-6.4-30.523077-17.723077-41.846154s-26.092308-17.230769-41.353846-17.230769H743.305846v-15.261538c0-32.492308-26.584615-59.569231-59.569231-59.569231h-51.2V59.569231c0-32.492308-26.584615-59.569231-59.56923-59.569231H307.613538C274.628923 0 248.044308 26.584615 248.044308 59.569231v10.830769H196.844308c-32.492308 0-59.569231 26.584615-59.569231 59.569231V147.692308h-46.769231c-32.492308 0-59.076923 26.584615-58.584615 59.56923l2.953846 758.153847c0 32.492308 26.584615 58.584615 59.076923 58.584615h0.492308l694.646154-2.953846c15.753846 0 30.523077-6.4 41.846153-17.723077s17.230769-26.092308 17.23077-41.846154v-1.969231c-0.492308-21.169231-17.723077-38.892308-39.876923-38.892307zM176.659692 129.476923c0-10.830769 8.861538-20.184615 20.184616-20.184615h70.892307c10.830769 0 19.692308-8.861538 19.692308-19.692308V59.569231C287.428923 48.246154 296.290462 39.384615 307.613538 39.384615h265.353847c10.830769 0 20.184615 8.861538 20.184615 20.184616v30.523077c0 10.830769 8.861538 19.692308 19.692308 19.692307h70.892307c10.830769 0 20.184615 8.861538 20.184616 20.184616v75.323077c0 10.830769-8.861538 20.184615-20.184616 20.184615H196.844308c-10.830769 0-20.184615-8.861538-20.184616-20.184615V129.476923z" p-id="5975" fill="#ffffff"></path><path d="M261.828923 435.2l291.446154-0.984615c10.338462 0 18.707692-8.861538 18.707692-19.2 0-10.338462-8.861538-18.707692-19.2-18.707693l-290.953846 0.984616c-10.338462 0-18.707692 8.861538-18.707692 19.2 0 10.338462 8.369231 19.2 18.707692 18.707692zM572.475077 584.369231c0-10.338462-8.861538-18.707692-19.2-18.707693l-291.446154 0.984616c-10.338462 0-18.707692 8.861538-18.707692 19.2 0 10.338462 8.861538 18.707692 19.2 18.707692l291.446154-0.984615c10.338462-0.492308 19.2-8.861538 18.707692-19.2zM262.321231 734.523077c-10.830769 0-19.2 8.861538-19.2 19.2 0 10.830769 8.861538 19.2 19.2 19.2l179.2-0.492308c10.830769 0 19.2-8.861538 19.2-19.2 0-10.830769-8.861538-19.2-19.2-19.2l-179.2 0.492308zM954.505846 573.046154c10.830769 0 19.692308-8.861538 19.692308-19.692308s-8.861538-19.692308-19.692308-19.692308h-28.553846c-5.415385-36.923077-29.538462-67.938462-62.523077-82.707692 0.984615-1.476923 1.476923-3.446154 1.476923-5.415384v-39.384616c0-6.4-5.415385-11.815385-11.815384-11.815384h-67.446154c-6.4 0-11.815385 5.415385-11.815385 11.815384v39.384616c0 1.969231 0.492308 3.938462 1.476923 5.415384-32.984615 14.769231-57.107692 45.784615-62.523077 82.707692h-28.553846c-10.830769 0-19.692308 8.861538-19.692308 19.692308s8.861538 19.692308 19.692308 19.692308h27.076923v74.338461h-17.230769c-3.938462 0-7.384615 3.446154-7.384615 7.384616v78.769231c0 3.938462 3.446154 7.384615 7.384615 7.384615h17.230769v93.538461h-27.076923c-10.830769 0-19.692308 8.861538-19.692308 19.692308s8.861538 19.692308 19.692308 19.692308h270.769231c10.830769 0 19.692308-8.861538 19.692308-19.692308s-8.861538-19.692308-19.692308-19.692308h-27.076923v-93.538461h17.230769c3.938462 0 7.384615-3.446154 7.384615-7.384615v-78.769231c0-3.938462-3.446154-7.384615-7.384615-7.384616h-17.230769v-74.338461h26.584615z m-135.384615-92.061539c32.492308 0 59.569231 22.153846 66.953846 52.676923h-133.907692c6.892308-30.523077 33.969231-52.676923 66.953846-52.676923z m68.923077 353.476923h-137.846154v-261.415384h137.846154v261.415384z" p-id="5976" fill="#ffffff"></path><path d="M844.721231 796.553846c8.369231 0 14.769231-6.4 14.769231-14.769231v-149.16923c0-8.369231-6.4-14.769231-14.769231-14.769231s-14.769231 6.4-14.769231 14.769231v149.16923c0 8.369231 6.892308 14.769231 14.769231 14.769231zM793.028923 796.553846c8.369231 0 14.769231-6.4 14.769231-14.769231v-149.16923c0-8.369231-6.4-14.769231-14.769231-14.769231s-14.769231 6.4-14.769231 14.769231v149.16923c0 8.369231 6.892308 14.769231 14.769231 14.769231z" p-id="5977" fill="#ffffff"></path></svg>

+ 1
- 0
src/assets/icons/dashboard.svg View File

@@ -0,0 +1 @@
<svg width="128" height="100" xmlns="http://www.w3.org/2000/svg"><path d="M27.429 63.638c0-2.508-.893-4.65-2.679-6.424-1.786-1.775-3.94-2.662-6.464-2.662-2.524 0-4.679.887-6.465 2.662-1.785 1.774-2.678 3.916-2.678 6.424 0 2.508.893 4.65 2.678 6.424 1.786 1.775 3.94 2.662 6.465 2.662 2.524 0 4.678-.887 6.464-2.662 1.786-1.775 2.679-3.916 2.679-6.424zm13.714-31.801c0-2.508-.893-4.65-2.679-6.424-1.785-1.775-3.94-2.662-6.464-2.662-2.524 0-4.679.887-6.464 2.662-1.786 1.774-2.679 3.916-2.679 6.424 0 2.508.893 4.65 2.679 6.424 1.785 1.774 3.94 2.662 6.464 2.662 2.524 0 4.679-.888 6.464-2.662 1.786-1.775 2.679-3.916 2.679-6.424zM71.714 65.98l7.215-27.116c.285-1.23.107-2.378-.536-3.443-.643-1.064-1.56-1.762-2.75-2.094-1.19-.33-2.333-.177-3.429.462-1.095.639-1.81 1.573-2.143 2.804l-7.214 27.116c-2.857.237-5.405 1.266-7.643 3.088-2.238 1.822-3.738 4.152-4.5 6.992-.952 3.644-.476 7.098 1.429 10.364 1.905 3.265 4.69 5.37 8.357 6.317 3.667.947 7.143.474 10.429-1.42 3.285-1.892 5.404-4.66 6.357-8.305.762-2.84.619-5.607-.429-8.305-1.047-2.697-2.762-4.85-5.143-6.46zm47.143-2.342c0-2.508-.893-4.65-2.678-6.424-1.786-1.775-3.94-2.662-6.465-2.662-2.524 0-4.678.887-6.464 2.662-1.786 1.774-2.679 3.916-2.679 6.424 0 2.508.893 4.65 2.679 6.424 1.786 1.775 3.94 2.662 6.464 2.662 2.524 0 4.679-.887 6.465-2.662 1.785-1.775 2.678-3.916 2.678-6.424zm-45.714-45.43c0-2.509-.893-4.65-2.679-6.425C68.68 10.01 66.524 9.122 64 9.122c-2.524 0-4.679.887-6.464 2.661-1.786 1.775-2.679 3.916-2.679 6.425 0 2.508.893 4.65 2.679 6.424 1.785 1.774 3.94 2.662 6.464 2.662 2.524 0 4.679-.888 6.464-2.662 1.786-1.775 2.679-3.916 2.679-6.424zm32 13.629c0-2.508-.893-4.65-2.679-6.424-1.785-1.775-3.94-2.662-6.464-2.662-2.524 0-4.679.887-6.464 2.662-1.786 1.774-2.679 3.916-2.679 6.424 0 2.508.893 4.65 2.679 6.424 1.785 1.774 3.94 2.662 6.464 2.662 2.524 0 4.679-.888 6.464-2.662 1.786-1.775 2.679-3.916 2.679-6.424zM128 63.638c0 12.351-3.357 23.78-10.071 34.286-.905 1.372-2.19 2.058-3.858 2.058H13.93c-1.667 0-2.953-.686-3.858-2.058C3.357 87.465 0 76.037 0 63.638c0-8.613 1.69-16.847 5.071-24.703C8.452 31.08 13 24.312 18.714 18.634c5.715-5.68 12.524-10.199 20.429-13.559C47.048 1.715 55.333.035 64 .035c8.667 0 16.952 1.68 24.857 5.04 7.905 3.36 14.714 7.88 20.429 13.559 5.714 5.678 10.262 12.446 13.643 20.301 3.38 7.856 5.071 16.09 5.071 24.703z"/></svg>

+ 1
- 0
src/assets/icons/dataStatistics.svg View File

@@ -0,0 +1 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1574226981782" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="3485" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><defs><style type="text/css"></style></defs><path d="M555.563 893.032v-62.636c0-34.377 13.604-59.338 35.851-76.352 23.052-17.632 54.769-25.312 89.141-25.312h85.676c1.58-12.623 2.301-28.243 2.858-47.244h-0.081V565.29c0.407-31.444 51.841-34.629 51.442-0.399V681.49l-0.103 0.709c-0.81 28.057-2.003 49.866-5.66 67.832-4.349 21.37-12.073 37.324-25.828 50.347l-1.405 1.312-167.996 136.957-7.146 5.823H204.729c-33.389 0-63.768-13.756-85.802-35.908-22-22.11-35.663-52.594-35.663-86.058V202.652c0-33.472 13.664-63.943 35.663-86.056 22.034-22.156 52.413-35.912 85.802-35.912h494.256c33.383 0 63.769 13.755 85.803 35.912 17.367 17.459 30.85 39.947 33.896 65.376 1.197 10.015-9.626 18.355-23.027 20.22-31.864 4.424-24.249-13.055-35.158-33.195a70.969 70.969 0 0 0-12.082-16.237c-12.659-12.725-30.169-20.635-49.431-20.635H204.729c-19.269 0-36.771 7.91-49.431 20.635-12.703 12.77-20.594 30.437-20.594 49.893v619.853c0 19.456 7.892 37.12 20.594 49.891 12.66 12.729 30.162 20.637 49.431 20.637h350.834v-0.002z m-309.64-474.949h131.13c14.142 0 25.713 11.571 25.713 25.713v0.012c0 14.142-11.571 25.715-25.713 25.715h-131.13c-14.142 0-25.713-11.573-25.713-25.715v-0.012c0-14.142 11.571-25.713 25.713-25.713z m0-157.716h244.819c14.142 0 25.712 11.571 25.712 25.715v0.012c0 14.142-11.57 25.713-25.712 25.713H245.923c-14.142 0-25.713-11.571-25.713-25.713v-0.012c0-14.144 11.571-25.715 25.713-25.715z m652.608 125.067L469.428 755.878l-4.219 3.64-5.324 1.58c-0.371 0.106-130.381 39.54-152.125 11.483-20.641-26.655 37.679-146.414 37.835-146.748l2.362-4.911 3.97-3.429 429.109-370.439c37.797-32.638 76.84-36.577 106.871-24.117 12.31 5.1 23.084 13.12 31.664 23.203a86.314 86.314 0 0 1 17.974 34.81c8.193 32.496-1.384 71.997-39.014 104.484zM439.987 713.553l424.991-366.899c20.82-17.974 26.627-37.817 22.738-53.25-1.368-5.41-3.832-10.233-7.13-14.112-3.237-3.808-7.448-6.894-12.371-8.932-13.58-5.636-32.801-2.512-53.629 15.474L389.459 652.839c-9.138 19.09-41.824 87.459-41.104 88.388 0.329 0.423 71.231-21.387 91.632-27.674z m167.015 116.843v31.184l100.371-81.408h-26.818c-23.813 0-44.649 4.446-57.998 14.659-9.647 7.378-15.555 18.935-15.555 35.565z" fill="#ffffff" p-id="3486"></path></svg>

+ 1
- 0
src/assets/icons/example.svg View File

@@ -0,0 +1 @@
<svg width="128" height="128" xmlns="http://www.w3.org/2000/svg"><path d="M96.258 57.462h31.421C124.794 27.323 100.426 2.956 70.287.07v31.422a32.856 32.856 0 0 1 25.971 25.97zm-38.796-25.97V.07C27.323 2.956 2.956 27.323.07 57.462h31.422a32.856 32.856 0 0 1 25.97-25.97zm12.825 64.766v31.421c30.46-2.885 54.507-27.253 57.713-57.712H96.579c-2.886 13.466-13.146 23.726-26.292 26.291zM31.492 70.287H.07c2.886 30.46 27.253 54.507 57.713 57.713V96.579c-13.466-2.886-23.726-13.146-26.291-26.292z"/></svg>

+ 1
- 0
src/assets/icons/exit-fullscreen.svg View File

@@ -0,0 +1 @@
<svg width="128" height="128" xmlns="http://www.w3.org/2000/svg"><path d="M49.217 41.329l-.136-35.24c-.06-2.715-2.302-4.345-5.022-4.405h-3.65c-2.712-.06-4.866 2.303-4.806 5.016l.152 19.164-24.151-23.79a6.698 6.698 0 0 0-9.499 0 6.76 6.76 0 0 0 0 9.526l23.93 23.713-18.345.074c-2.712-.069-5.228 1.813-5.64 5.02v3.462c.069 2.721 2.31 4.97 5.022 5.03l35.028-.207c.052.005.087.025.133.025l2.457.054a4.626 4.626 0 0 0 3.436-1.38c.88-.874 1.205-2.096 1.169-3.462l-.262-2.465c0-.048.182-.081.182-.136h.002zm52.523 51.212l18.32-.073c2.713.06 5.224-1.609 5.64-4.815v-3.462c-.068-2.722-2.317-4.97-5.021-5.04l-34.58.21c-.053 0-.086-.021-.138-.021l-2.451-.06a4.64 4.64 0 0 0-3.445 1.381c-.885.868-1.201 2.094-1.174 3.46l.27 2.46c.005.06-.177.095-.177.141l.141 34.697c.069 2.713 2.31 4.338 5.022 4.397l3.45.006c2.705.062 4.867-2.31 4.8-5.026l-.153-18.752 24.151 23.946a6.69 6.69 0 0 0 9.494 0 6.747 6.747 0 0 0 0-9.523L101.74 92.54v.001zM48.125 80.662a4.636 4.636 0 0 0-3.437-1.382l-2.457.06c-.05 0-.082.022-.137.022l-35.025-.21c-2.712.07-4.957 2.318-5.022 5.04v3.462c.409 3.206 2.925 4.874 5.633 4.814l18.554.06-24.132 23.928c-2.62 2.626-2.62 6.89 0 9.524a6.694 6.694 0 0 0 9.496 0l24.155-23.79-.155 18.866c-.06 2.722 2.094 5.093 4.801 5.025h3.65c2.72-.069 4.962-1.685 5.022-4.406l.141-34.956c0-.05-.182-.082-.182-.136l.262-2.46c.03-1.366-.286-2.592-1.166-3.46h-.001zM80.08 47.397a4.62 4.62 0 0 0 3.443 1.374l2.45-.054c.055 0 .088-.02.143-.028l35.08.21c2.712-.062 4.953-2.312 5.021-5.033l.009-3.463c-.417-3.211-2.937-5.084-5.64-5.025l-18.615-.073 23.917-23.715c2.63-2.623 2.63-6.879.008-9.513a6.691 6.691 0 0 0-9.494 0L92.251 26.016l.155-19.312c.065-2.713-2.097-5.085-4.802-5.025h-3.45c-2.713.069-4.954 1.693-5.022 4.406l-.139 35.247c0 .054.18.088.18.136l-.267 2.465c-.028 1.366.288 2.588 1.174 3.463v.001z"/></svg>

+ 1
- 0
src/assets/icons/eye-open.svg View File

@@ -0,0 +1 @@
<svg class="icon" viewBox="0 0 1024 1024" xmlns="http://www.w3.org/2000/svg" width="128" height="128"><defs><style/></defs><path d="M512 128q69.675 0 135.51 21.163t115.498 54.997 93.483 74.837 73.685 82.006 51.67 74.837 32.17 54.827L1024 512q-2.347 4.992-6.315 13.483T998.87 560.17t-31.658 51.669-44.331 59.99-56.832 64.34-69.504 60.16-82.347 51.5-94.848 34.687T512 896q-69.675 0-135.51-21.163t-115.498-54.826-93.483-74.326-73.685-81.493-51.67-74.496-32.17-54.997L0 513.707q2.347-4.992 6.315-13.483t18.816-34.816 31.658-51.84 44.331-60.33 56.832-64.683 69.504-60.331 82.347-51.84 94.848-34.816T512 128.085zm0 85.333q-46.677 0-91.648 12.331t-81.152 31.83-70.656 47.146-59.648 54.485-48.853 57.686-37.675 52.821-26.325 43.99q12.33 21.674 26.325 43.52t37.675 52.351 48.853 57.003 59.648 53.845T339.2 767.02t81.152 31.488T512 810.667t91.648-12.331 81.152-31.659 70.656-46.848 59.648-54.186 48.853-57.344 37.675-52.651T927.957 512q-12.33-21.675-26.325-43.648t-37.675-52.65-48.853-57.345-59.648-54.186-70.656-46.848-81.152-31.659T512 213.334zm0 128q70.656 0 120.661 50.006T682.667 512 632.66 632.661 512 682.667 391.339 632.66 341.333 512t50.006-120.661T512 341.333zm0 85.334q-35.328 0-60.33 25.002T426.666 512t25.002 60.33T512 597.334t60.33-25.002T597.334 512t-25.002-60.33T512 426.666z"/></svg>

+ 1
- 0
src/assets/icons/eye.svg View File

@@ -0,0 +1 @@
<svg width="128" height="64" xmlns="http://www.w3.org/2000/svg"><path d="M127.072 7.994c1.37-2.208.914-5.152-.914-6.87-2.056-1.717-4.797-1.226-6.396.982-.229.245-25.586 32.382-55.74 32.382-29.24 0-55.74-32.382-55.968-32.627-1.6-1.963-4.57-2.208-6.397-.49C-.17 3.086-.399 6.275 1.2 8.238c.457.736 5.94 7.36 14.62 14.72L4.17 35.96c-1.828 1.963-1.6 5.152.228 6.87.457.98 1.6 1.471 2.742 1.471s2.284-.49 3.198-1.472l12.564-13.983c5.94 4.416 13.021 8.587 20.788 11.53l-4.797 17.418c-.685 2.699.686 5.397 3.198 6.133h1.37c2.057 0 3.884-1.472 4.341-3.68L52.6 42.83c3.655.736 7.538 1.227 11.422 1.227 3.883 0 7.767-.49 11.422-1.227l4.797 17.173c.457 2.208 2.513 3.68 4.34 3.68.457 0 .914 0 1.143-.246 2.513-.736 3.883-3.434 3.198-6.133l-4.797-17.172c7.767-2.944 14.848-7.114 20.788-11.53l12.336 13.738c.913.981 2.056 1.472 3.198 1.472s2.284-.49 3.198-1.472c1.828-1.963 1.828-4.906.228-6.87l-11.65-13.001c9.366-7.36 14.849-14.474 14.849-14.474z"/></svg>

+ 1
- 0
src/assets/icons/fileManage.svg View File

@@ -0,0 +1 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1574226850596" class="icon" viewBox="0 0 1038 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="2745" xmlns:xlink="http://www.w3.org/1999/xlink" width="202.734375" height="200"><defs><style type="text/css"></style></defs><path d="M263.68 0H64a64 64 0 0 0-64 64v896a64 64 0 0 0 64 64h199.68a64 64 0 0 0 64-64V64a64 64 0 0 0-64-64z m0 992V960H64V64h199.68v896zM618.88 0H419.2a64 64 0 0 0-64 64v896a64 64 0 0 0 64 64h199.68a64 64 0 0 0 64-64V64a64 64 0 0 0-64-64z m0 992V960H419.2V64h199.68v896zM974.72 0h-199.68a64 64 0 0 0-64 64v896a64 64 0 0 0 64 64h199.68a64 64 0 0 0 64-64V64a64 64 0 0 0-64-64z m0 992V960h-199.68V64h199.68v896z" p-id="2746" fill="#ffffff"></path><path d="M99.84 177.28m32 0l64 0q32 0 32 32l0 351.36q0 32-32 32l-64 0q-32 0-32-32l0-351.36q0-32 32-32Z" p-id="2747" fill="#ffffff"></path><path d="M163.84 742.4m-64 0a64 64 0 1 0 128 0 64 64 0 1 0-128 0Z" p-id="2748" fill="#ffffff"></path><path d="M455.04 183.68m32 0l64 0q32 0 32 32l0 351.36q0 32-32 32l-64 0q-32 0-32-32l0-351.36q0-32 32-32Z" p-id="2749" fill="#ffffff"></path><path d="M519.04 747.52m-64 0a64 64 0 1 0 128 0 64 64 0 1 0-128 0Z" p-id="2750" fill="#ffffff"></path><path d="M810.88 183.68m32 0l64 0q32 0 32 32l0 351.36q0 32-32 32l-64 0q-32 0-32-32l0-351.36q0-32 32-32Z" p-id="2751" fill="#ffffff"></path><path d="M874.88 747.52m-64 0a64 64 0 1 0 128 0 64 64 0 1 0-128 0Z" p-id="2752" fill="#ffffff"></path></svg>

+ 1
- 0
src/assets/icons/form.svg View File

@@ -0,0 +1 @@
<svg width="128" height="128" xmlns="http://www.w3.org/2000/svg"><path d="M84.068 23.784c-1.02 0-1.877-.32-2.572-.96a8.588 8.588 0 0 1-1.738-2.237 11.524 11.524 0 0 1-1.042-2.621c-.232-.895-.348-1.641-.348-2.238V0h.278c.834 0 1.622.085 2.363.256.742.17 1.645.575 2.711 1.214 1.066.64 2.363 1.535 3.892 2.686 1.53 1.15 3.453 2.664 5.77 4.54 2.502 2.045 4.494 3.771 5.977 5.178 1.483 1.406 2.618 2.6 3.406 3.58.787.98 1.274 1.812 1.46 2.494.185.682.277 1.278.277 1.79v2.046H84.068zM127.3 84.01c.278.682.464 1.535.556 2.558.093 1.023-.37 2.003-1.39 2.94-.463.427-.88.832-1.25 1.215-.372.384-.696.704-.974.96a6.69 6.69 0 0 1-.973.767l-11.816-10.741a44.331 44.331 0 0 0 1.877-1.535 31.028 31.028 0 0 1 1.737-1.406c1.112-.938 2.317-1.343 3.615-1.215 1.297.128 2.363.405 3.197.83.927.427 1.923 1.173 2.989 2.239 1.065 1.065 1.876 2.195 2.432 3.388zM78.23 95.902c2.038 0 3.752-.511 5.143-1.534l-26.969 25.83H18.037c-1.761 0-3.684-.47-5.77-1.407a24.549 24.549 0 0 1-5.838-3.709 21.373 21.373 0 0 1-4.518-5.306c-1.204-2.003-1.807-4.07-1.807-6.202V16.495c0-1.79.44-3.665 1.32-5.626A18.41 18.41 0 0 1 5.04 5.562a21.798 21.798 0 0 1 5.213-3.964C12.198.533 14.237 0 16.37 0h53.24v15.984c0 1.62.278 3.367.834 5.242a16.704 16.704 0 0 0 2.572 5.179c1.159 1.577 2.665 2.898 4.518 3.964 1.853 1.066 4.078 1.598 6.673 1.598h20.295v42.325L85.458 92.45c1.02-1.364 1.529-2.856 1.529-4.476 0-2.216-.857-4.113-2.572-5.69-1.714-1.577-3.776-2.366-6.186-2.366H26.1c-2.409 0-4.448.789-6.116 2.366-1.668 1.577-2.502 3.474-2.502 5.69 0 2.217.834 4.092 2.502 5.626 1.668 1.535 3.707 2.302 6.117 2.302h52.13zM26.1 47.951c-2.41 0-4.449.789-6.117 2.366-1.668 1.577-2.502 3.473-2.502 5.69 0 2.216.834 4.092 2.502 5.626 1.668 1.534 3.707 2.302 6.117 2.302h52.13c2.409 0 4.47-.768 6.185-2.302 1.715-1.534 2.572-3.41 2.572-5.626 0-2.217-.857-4.113-2.572-5.69-1.714-1.577-3.776-2.366-6.186-2.366H26.1zm52.407 64.063l1.807-1.663 3.476-3.196a479.75 479.75 0 0 0 4.587-4.284 500.757 500.757 0 0 1 5.004-4.667c3.985-3.666 8.48-7.758 13.485-12.276l11.677 10.741-13.485 12.404-5.004 4.603-4.587 4.22a179.46 179.46 0 0 0-3.267 3.068c-.88.853-1.367 1.322-1.46 1.407-.463.341-.973.703-1.529 1.087-.556.383-1.112.703-1.668.959-.556.256-1.413.575-2.572.959a83.5 83.5 0 0 1-3.545 1.087 72.2 72.2 0 0 1-3.475.895c-1.112.256-1.946.426-2.502.511-1.112.17-1.854.043-2.224-.383-.371-.426-.464-1.151-.278-2.174.092-.511.278-1.279.556-2.302.278-1.023.602-2.067.973-3.132l1.042-3.005c.325-.938.58-1.577.765-1.918a10.157 10.157 0 0 1 2.224-2.941z"/></svg>

+ 1
- 0
src/assets/icons/fullscreen.svg View File

@@ -0,0 +1 @@
<svg width="128" height="128" xmlns="http://www.w3.org/2000/svg"><path d="M38.47 52L52 38.462l-23.648-23.67L43.209 0H.035L0 43.137l14.757-14.865L38.47 52zm74.773 47.726L89.526 76 76 89.536l23.648 23.672L84.795 128h43.174L128 84.863l-14.757 14.863zM89.538 52l23.668-23.648L128 43.207V.038L84.866 0 99.73 14.76 76 38.472 89.538 52zM38.46 76L14.792 99.651 0 84.794v43.173l43.137.033-14.865-14.757L52 89.53 38.46 76z"/></svg>

+ 1
- 0
src/assets/icons/home.svg View File

@@ -0,0 +1 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1573205453467" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="5776" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><defs><style type="text/css"></style></defs><path d="M936.741146 462.413652c-0.412392-14.641465-3.319605-25.442462-13.707187-40.293705-1.973958-3.010567-319.019801-341.836459-319.019801-341.836459-22.017456-23.469528-51.064003-34.71157-80.242556-34.738176L523.771603 45.311998c-0.418532-0.025583-0.938372 0.130983-1.457188 0.130983s-1.037632-0.156566-1.557472-0.130983l0 0.233314c-29.076222 0.025583-58.151421 11.268648-80.272231 34.738176 0 0-316.939419 338.825892-318.912353 341.836459-10.384511 14.851243-13.291724 25.65224-13.70821 40.293705 0 0 0 5.088902 0 5.504364 0 46.210461 37.488823 83.755566 83.70133 83.755566l20.041452 0 0 300.375162c0 48.91199 43.925419 88.529289 98.032734 88.529289 54.105269 0 97.927333-39.616276 97.927333-88.529289L407.566998 551.672558l113.190969 0 3.01466 0 113.162316 0 0 300.375162c0 48.91199 43.929512 88.529289 98.03478 88.529289s97.924263-39.616276 97.924263-88.529289L832.893986 551.672558l20.045545 0c46.314839 0 83.802638-37.543058 83.802638-83.755566 0-0.416486-0.102331-0.830925-0.102331-1.245364L936.741146 462.413652zM811.918255 159.621441l0.520863 0.649799 63.035662 66.618257c8.930393 9.397021 23.679305 9.813506 33.023114 0.933255 0.103354-0.051165 0.103354-0.155543 0.314155-0.258896l0.827855-0.778736c2.802836-2.90619 4.466732-5.502317 5.506411-10.488889 0.206708-0.934279 0.310062-1.973958 0.411369-2.959402 0.207731-1.090844 0.414439-2.128477 0.51984-3.428076l7.272637-123.629715c0.518816-9.009188-2.804882-17.029862-8.306176-22.949688l0-0.052189c-0.107447-0.077771-0.211824-0.181125-0.316202-0.258896-0.104377-0.104377-0.205685-0.207731-0.312108-0.338714l0 0.025583c-5.605671-5.865591-13.397125-9.605775-22.428825-9.578146l-123.889635 0.311085c-1.348718 0.052189-2.284019 0.130983-3.427052 0.234337-1.041726 0.076748-1.977028 0.104377-2.908236 0.284479-5.088902 0.75213-7.788383 2.232854-10.905374 4.958942l-0.831948 0.831948c0 0.051165-0.207731 0.128937-0.207731 0.181125-9.340739 8.905834-9.762341 23.651676-0.936325 33.04972L811.918255 159.621441z" p-id="5777" fill="#ffffff"></path></svg>

+ 9
- 0
src/assets/icons/index.js View File

@@ -0,0 +1,9 @@
import Vue from 'vue'
import SvgIcon from '@/components/svgIcon'
// 全局注册组件
Vue.component('svg-icon', SvgIcon)
// // 定义一个加载目录的函数
const requireAll = requireContext => requireContext.keys().map(requireContext)
const req = require.context('@/assets/icons', false, /\.svg$/)
// // 加载目录下的所有 svg 文件
requireAll(req)

+ 1
- 0
src/assets/icons/language.svg View File

@@ -0,0 +1 @@
<svg width="128" height="128" xmlns="http://www.w3.org/2000/svg"><path d="M84.742 36.8c2.398 7.2 5.595 12.8 11.19 18.4 4.795-4.8 7.992-11.2 10.39-18.4h-21.58zm-52.748 40h20.78l-10.39-28-10.39 28z"/><path d="M111.916 0H16.009C7.218 0 .025 7.2.025 16v96c0 8.8 7.193 16 15.984 16h95.907c8.791 0 15.984-7.2 15.984-16V16c0-8.8-6.394-16-15.984-16zM72.754 103.2c-1.598 1.6-3.197 1.6-4.795 1.6-.8 0-2.398 0-3.197-.8-.8-.8-1.599 0-1.599-.8s-.799-1.6-1.598-3.2c-.8-1.6-.8-2.4-1.599-4l-3.196-8.8H28.797L25.6 96c-1.598 3.2-2.398 5.6-3.197 7.2-.8 1.6-2.398 1.6-4.795 1.6-1.599 0-3.197-.8-4.796-1.6-1.598-1.6-2.397-2.4-2.397-4 0-.8 0-1.6.799-3.2.8-1.6.8-2.4 1.598-4l17.583-44.8c.8-1.6.8-3.2 1.599-4.8.799-1.6 1.598-3.2 2.397-4 .8-.8 1.599-2.4 3.197-3.2 1.599-.8 3.197-.8 4.796-.8 1.598 0 3.196 0 4.795.8 1.598.8 2.398 1.6 3.197 3.2.799.8 1.598 2.4 2.397 4 .8 1.6 1.599 3.2 2.398 5.6l17.583 44c1.598 3.2 2.398 5.6 2.398 7.2-.8.8-1.599 2.4-2.398 4zM116.711 72c-8.791-3.2-15.185-7.2-20.78-12-5.594 5.6-12.787 9.6-21.579 12l-2.397-4c8.791-2.4 15.984-5.6 21.579-11.2C87.939 51.2 83.144 44 81.545 36h-7.992v-3.2h21.58c-1.6-2.4-3.198-5.6-4.796-8l2.397-.8c1.599 2.4 3.997 5.6 5.595 8.8h19.98v4h-7.992c-2.397 8-6.393 15.2-11.189 20 5.595 4.8 11.988 8.8 20.78 11.2l-3.197 4z"/></svg>

+ 1
- 0
src/assets/icons/link.svg View File

@@ -0,0 +1 @@
<svg width="128" height="128" xmlns="http://www.w3.org/2000/svg"><path d="M115.625 127.937H.063V12.375h57.781v12.374H12.438v90.813h90.813V70.156h12.374z"/><path d="M116.426 2.821l8.753 8.753-56.734 56.734-8.753-8.745z"/><path d="M127.893 37.982h-12.375V12.375H88.706V0h39.187z"/></svg>

+ 1
- 0
src/assets/icons/list.svg View File

@@ -0,0 +1 @@
<svg width="128" height="128" xmlns="http://www.w3.org/2000/svg"><path d="M1.585 12.087c0 6.616 3.974 11.98 8.877 11.98 4.902 0 8.877-5.364 8.877-11.98 0-6.616-3.975-11.98-8.877-11.98-4.903 0-8.877 5.364-8.877 11.98zM125.86.107H35.613c-1.268 0-2.114 1.426-2.114 2.852v18.255c0 1.712 1.057 2.853 2.114 2.853h90.247c1.268 0 2.114-1.426 2.114-2.853V2.96c0-1.711-1.057-2.852-2.114-2.852zM.106 62.86c0 6.615 3.974 11.979 8.876 11.979 4.903 0 8.877-5.364 8.877-11.98 0-6.616-3.974-11.98-8.877-11.98-4.902 0-8.876 5.364-8.876 11.98zM124.17 50.88H33.921c-1.268 0-2.114 1.425-2.114 2.851v18.256c0 1.711 1.057 2.852 2.114 2.852h90.247c1.268 0 2.114-1.426 2.114-2.852V53.73c0-1.426-.846-2.852-2.114-2.852zM.106 115.913c0 6.616 3.974 11.98 8.876 11.98 4.903 0 8.877-5.364 8.877-11.98 0-6.616-3.974-11.98-8.877-11.98-4.902 0-8.876 5.364-8.876 11.98zm124.064-11.98H33.921c-1.268 0-2.114 1.426-2.114 2.853v18.255c0 1.711 1.057 2.852 2.114 2.852h90.247c1.268 0 2.114-1.426 2.114-2.852v-18.255c0-1.427-.846-2.853-2.114-2.853z"/></svg>

+ 1
- 0
src/assets/icons/lock.svg View File

@@ -0,0 +1 @@
<svg width="128" height="128" xmlns="http://www.w3.org/2000/svg"><path d="M119.88 49.674h-7.987V39.52C111.893 17.738 90.45.08 63.996.08 37.543.08 16.1 17.738 16.1 39.52v10.154H8.113c-4.408 0-7.987 2.94-7.987 6.577v65.13c0 3.637 3.57 6.577 7.987 6.577H119.88c4.407 0 7.987-2.94 7.987-6.577v-65.13c-.008-3.636-3.58-6.577-7.987-6.577zm-23.953 0H32.065V39.52c0-14.524 14.301-26.295 31.931-26.295 17.63 0 31.932 11.777 31.932 26.295v10.153z"/></svg>

+ 1
- 0
src/assets/icons/log.svg View File

@@ -0,0 +1 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1573205352695" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="4930" width="200" height="200" xmlns:xlink="http://www.w3.org/1999/xlink"><defs><style type="text/css"></style></defs><path d="M208.736 566.336H64.384v59.328h144.352v-59.328z m0-336.096H165.44V74.592c0-7.968 4.896-14.848 10.464-14.848h502.016V0.448H175.936c-38.72 1.248-69.248 34.368-68.192 74.144v155.648H64.384V289.6h144.352V230.24z m0 168.096H64.384v59.328h144.352v-59.328z m714.656 76.576h-57.76v474.496c0 7.936-4.896 14.848-10.464 14.848H175.936c-5.568 0-10.464-6.912-10.464-14.848v-155.68h43.296v-59.296H64.384v59.296h43.328v155.68c-1.024 39.776 29.472 72.896 68.192 74.144h679.232c38.72-1.184 69.248-34.368 68.256-74.144V474.912z m14.944-290.336l-83.072-85.312a71.264 71.264 0 0 0-52.544-21.728 71.52 71.52 0 0 0-51.616 23.872L386.528 507.264a30.496 30.496 0 0 0-6.176 10.72L308.16 740.512a30.016 30.016 0 0 0 6.976 30.24c7.712 7.968 19.2 10.752 29.568 7.2l216.544-74.112a28.736 28.736 0 0 0 12.128-7.936L940.448 287.456a75.552 75.552 0 0 0-2.112-102.88z m-557.12 518.272l39.104-120.64 78.336 80.416-117.44 40.224z m170.048-70.016l-103.552-106.016 200.16-222.4 103.52 106.304-200.128 222.112zM897.952 247.072l-0.256 0.224-107.136 119.168-103.52-106.528 106.432-118.624a14.144 14.144 0 0 1 10.304-4.736 13.44 13.44 0 0 1 10.464 4.288l83.264 85.696c5.472 5.6 5.664 14.72 0.448 20.512z" p-id="4931" fill="#ffffff"></path></svg>

+ 1
- 0
src/assets/icons/nested.svg View File

@@ -0,0 +1 @@
<svg width="128" height="128" xmlns="http://www.w3.org/2000/svg"><path d="M.002 9.2c0 5.044 3.58 9.133 7.998 9.133 4.417 0 7.997-4.089 7.997-9.133 0-5.043-3.58-9.132-7.997-9.132S.002 4.157.002 9.2zM31.997.066h95.981V18.33H31.997V.066zm0 45.669c0 5.044 3.58 9.132 7.998 9.132 4.417 0 7.997-4.088 7.997-9.132 0-3.263-1.524-6.278-3.998-7.91-2.475-1.63-5.524-1.63-7.998 0-2.475 1.632-4 4.647-4 7.91zM63.992 36.6h63.986v18.265H63.992V36.6zm-31.995 82.2c0 5.043 3.58 9.132 7.998 9.132 4.417 0 7.997-4.089 7.997-9.132 0-5.044-3.58-9.133-7.997-9.133s-7.998 4.089-7.998 9.133zm31.995-9.131h63.986v18.265H63.992V109.67zm0-27.404c0 5.044 3.58 9.133 7.998 9.133 4.417 0 7.997-4.089 7.997-9.133 0-3.263-1.524-6.277-3.998-7.909-2.475-1.631-5.524-1.631-7.998 0-2.475 1.632-4 4.646-4 7.91zm31.995-9.13h31.991V91.4H95.987V73.135z"/></svg>

+ 1
- 0
src/assets/icons/password.svg View File

@@ -0,0 +1 @@
<svg width="128" height="128" xmlns="http://www.w3.org/2000/svg"><path d="M108.8 44.322H89.6v-5.36c0-9.04-3.308-24.163-25.6-24.163-23.145 0-25.6 16.881-25.6 24.162v5.361H19.2v-5.36C19.2 15.281 36.798 0 64 0c27.202 0 44.8 15.281 44.8 38.961v5.361zm-32 39.356c0-5.44-5.763-9.832-12.8-9.832-7.037 0-12.8 4.392-12.8 9.832 0 3.682 2.567 6.808 6.407 8.477v11.205c0 2.718 2.875 4.962 6.4 4.962 3.524 0 6.4-2.244 6.4-4.962V92.155c3.833-1.669 6.393-4.795 6.393-8.477zM128 64v49.201c0 8.158-8.645 14.799-19.2 14.799H19.2C8.651 128 0 121.359 0 113.201V64c0-8.153 8.645-14.799 19.2-14.799h89.6c10.555 0 19.2 6.646 19.2 14.799z"/></svg>

+ 1
- 0
src/assets/icons/play.svg View File

@@ -0,0 +1 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg class="icon" width="200px" height="200.00px" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg"><path fill="#ffffff" d="M510.54537 63.815421c-246.711961 0-446.708971 199.99701-446.708971 446.709995S263.833409 957.234387 510.54537 957.234387s446.708971-199.99701 446.708971-446.709995S757.257332 63.815421 510.54537 63.815421zM510.494205 912.598794c-222.070748 0-402.087705-180.02412-402.087705-402.095891 0-222.064608 180.016957-402.088728 402.087705-402.088728 222.064608 0 402.088728 180.02412 402.088728 402.088728C912.582933 732.574674 732.558813 912.598794 510.494205 912.598794zM410.034189 331.838757c-14.388708 0-26.058492 11.668761-26.058492 26.058492l0 305.256332c0 14.389732 11.669784 26.059516 26.058492 26.059516s26.058492-11.669784 26.058492-26.059516L436.092681 357.896226C436.093704 343.507518 424.422897 331.838757 410.034189 331.838757zM611.056552 331.838757c-14.388708 0-26.058492 11.668761-26.058492 26.058492l0 305.256332c0 14.389732 11.669784 26.059516 26.058492 26.059516 14.389732 0 26.058492-11.669784 26.058492-26.059516L637.115044 357.896226C637.114021 343.507518 625.44526 331.838757 611.056552 331.838757z" /></svg>

+ 1
- 0
src/assets/icons/reportManage.svg View File

@@ -0,0 +1 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1574227264304" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="3706" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><defs><style type="text/css"></style></defs><path d="M371.981418 268.092292 648.410447 268.092292C695.497956 268.092292 733.869187 229.793331 733.869187 182.729131L733.869187 178.143699C733.869187 175.236717 733.724655 172.332066 733.412272 169.498517 729.4516 130.214632 698.713822 98.784494 659.840222 93.547497 656.118494 93.043962 652.324499 92.658152 648.409281 92.658152L611.359833 92.658152 611.359833 85.816138C611.359833 38.727461 573.059706 0.356234 525.899928 0.356234L494.444147 0.356234C447.332159 0.356234 409.007555 38.727461 409.007555 85.816138L409.007555 92.658152 371.933629 92.658152C368.068532 92.658152 364.296682 93.043961 360.527164 93.547497 321.674547 98.783328 290.915789 130.165678 286.978426 169.449562 286.690525 172.308755 286.521515 175.188928 286.521515 178.094744L286.521515 182.680176C286.521512 229.793331 324.895072 268.092292 371.981418 268.092292L371.981418 268.092292ZM874.05238 71.024798 748.205943 71.024798 748.205943 116.046883 874.05238 116.046884C882.599652 116.046884 889.540745 122.985643 889.540745 131.535247L889.540745 963.076585C889.540745 971.625023 882.599657 978.564949 874.05238 978.564949L146.338317 978.564949C137.791045 978.564949 130.849955 971.625023 130.849955 963.028799L130.849955 131.487457C130.849955 122.96233 137.789878 116.022406 146.338317 116.022406L272.139296 116.022406 272.139296 70.975844 146.338317 70.975845C112.962808 70.975845 85.852346 98.134095 85.852346 131.438502L85.852346 962.93322C85.852346 996.308725 112.961643 1023.443666 146.338317 1023.443666L874.05238 1023.443666C907.43139 1023.443666 934.540681 996.333204 934.540681 962.981006L934.540681 131.487457C934.53952 98.134095 907.431384 71.024798 874.05238 71.024798L874.05238 71.024798ZM305.250215 459.301528 715.140483 459.301528C740.472252 459.301528 761.002957 438.748677 761.002957 413.414575 761.002957 388.082804 740.473418 367.549768 715.140483 367.549768L305.250215 367.549768C279.918444 367.549768 259.364427 388.081639 259.364427 413.414575 259.364427 438.747512 279.918445 459.301528 305.250215 459.301528L305.250215 459.301528ZM715.140483 557.727457 305.250215 557.727457C279.918444 557.727457 259.364427 578.258159 259.364427 603.589934 259.364427 628.922869 279.918445 649.476887 305.250215 649.476887L715.140483 649.476887C740.472252 649.476887 761.002957 628.922869 761.002957 603.589934 761.002957 578.259325 740.472252 557.727457 715.140483 557.727457L715.140483 557.727457ZM715.140483 747.905149 305.250215 747.905149C279.918444 747.905149 259.364427 768.433522 259.364427 793.767623 259.364427 819.126204 279.918445 839.656909 305.250215 839.656909L715.140483 839.656909C740.472252 839.656909 761.002957 819.100558 761.002957 793.767623 761.002957 768.434688 740.472252 747.905149 715.140483 747.905149L715.140483 747.905149Z" p-id="3707" fill="#ffffff"></path></svg>

+ 1
- 0
src/assets/icons/search.svg View File

@@ -0,0 +1 @@
<svg width="128" height="128" xmlns="http://www.w3.org/2000/svg"><path d="M124.884 109.812L94.256 79.166c-.357-.357-.757-.629-1.129-.914a50.366 50.366 0 0 0 8.186-27.59C101.327 22.689 78.656 0 50.67 0 22.685 0 0 22.688 0 50.663c0 27.989 22.685 50.663 50.656 50.663 10.186 0 19.643-3.03 27.6-8.201.286.385.557.771.9 1.114l30.628 30.632a10.633 10.633 0 0 0 7.543 3.129c2.728 0 5.457-1.043 7.543-3.115 4.171-4.157 4.171-10.915.014-15.073M50.671 85.338C31.557 85.338 16 69.78 16 50.663c0-19.102 15.557-34.661 34.67-34.661 19.115 0 34.657 15.559 34.657 34.675 0 19.102-15.557 34.661-34.656 34.661"/></svg>

+ 1
- 0
src/assets/icons/size.svg View File

@@ -0,0 +1 @@
<svg width="128" height="128" xmlns="http://www.w3.org/2000/svg"><path d="M0 54.857h54.796v18.286H36.531V128H18.265V73.143H0V54.857zm127.857-36.571H91.935V128H72.456V18.286H36.534V0h91.326l-.003 18.286z"/></svg>

+ 1
- 0
src/assets/icons/stop.svg View File

@@ -0,0 +1 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg class="icon" width="200px" height="200.00px" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg"><path fill="#ffffff" d="M511.672542 956.565145c-246.691495 0-446.670086-199.978591-446.670086-446.670086S264.980024 63.224973 511.672542 63.224973s446.670086 199.978591 446.670086 446.670086S758.364037 956.565145 511.672542 956.565145L511.672542 956.565145zM511.672542 91.152023c-231.273341 0-418.753269 187.479929-418.753269 418.753269 0 231.271294 187.479929 418.752246 418.753269 418.752246s418.753269-187.480952 418.753269-418.752246C930.425811 278.631952 742.944859 91.152023 511.672542 91.152023L511.672542 91.152023zM687.659719 534.331611c-14.46955 8.56098-249.027703 144.497998-266.150686 154.027026-12.543687 6.988158-30.717605-3.090385-30.717605-18.984377 0-16.135492 0-299.305807 0-310.435285 0-14.432711 16.005532-28.14092 30.717605-19.699668 11.790534 6.764054 246.041696 142.348032 266.150686 154.026002C700.864462 500.933967 700.641381 526.663978 687.659719 534.331611L687.659719 534.331611z" /></svg>

+ 1
- 0
src/assets/icons/system.svg
File diff suppressed because it is too large
View File


+ 1
- 0
src/assets/icons/table.svg View File

@@ -0,0 +1 @@
<svg width="128" height="128" xmlns="http://www.w3.org/2000/svg"><path d="M.006.064h127.988v31.104H.006V.064zm0 38.016h38.396v41.472H.006V38.08zm0 48.384h38.396v41.472H.006V86.464zM44.802 38.08h38.396v41.472H44.802V38.08zm0 48.384h38.396v41.472H44.802V86.464zM89.598 38.08h38.396v41.472H89.598zm0 48.384h38.396v41.472H89.598z"/><path d="M.006.064h127.988v31.104H.006V.064zm0 38.016h38.396v41.472H.006V38.08zm0 48.384h38.396v41.472H.006V86.464zM44.802 38.08h38.396v41.472H44.802V38.08zm0 48.384h38.396v41.472H44.802V86.464zM89.598 38.08h38.396v41.472H89.598zm0 48.384h38.396v41.472H89.598z"/></svg>

+ 1
- 0
src/assets/icons/tree.svg View File

@@ -0,0 +1 @@
<svg width="128" height="128" xmlns="http://www.w3.org/2000/svg"><path d="M126.713 90.023c.858.985 1.287 2.134 1.287 3.447v29.553c0 1.423-.429 2.6-1.287 3.53-.858.93-1.907 1.395-3.146 1.395H97.824c-1.145 0-2.146-.465-3.004-1.395-.858-.93-1.287-2.107-1.287-3.53V93.47c0-.875.19-1.696.572-2.462.382-.766.906-1.368 1.573-1.806a3.84 3.84 0 0 1 2.146-.657h9.725V69.007a3.84 3.84 0 0 0-.43-1.806 3.569 3.569 0 0 0-1.143-1.313 2.714 2.714 0 0 0-1.573-.492h-36.47v23.149h9.725c1.144 0 2.145.492 3.004 1.478.858.985 1.287 2.134 1.287 3.447v29.553c0 .876-.191 1.696-.573 2.463-.38.766-.905 1.368-1.573 1.806a3.84 3.84 0 0 1-2.145.656H51.915a3.84 3.84 0 0 1-2.145-.656c-.668-.438-1.216-1.04-1.645-1.806a4.96 4.96 0 0 1-.644-2.463V93.47c0-1.313.43-2.462 1.288-3.447.858-.986 1.907-1.478 3.146-1.478h9.582v-23.15h-37.9c-.953 0-1.74.356-2.359 1.068-.62.711-.93 1.56-.93 2.544v19.538h9.726c1.239 0 2.264.492 3.074 1.478.81.985 1.216 2.134 1.216 3.447v29.553c0 1.423-.405 2.6-1.216 3.53-.81.93-1.835 1.395-3.074 1.395H4.29c-.476 0-.93-.082-1.358-.246a4.1 4.1 0 0 1-1.144-.657 4.658 4.658 0 0 1-.93-1.067 5.186 5.186 0 0 1-.643-1.395 5.566 5.566 0 0 1-.215-1.56V93.47c0-.437.048-.875.143-1.313a3.95 3.95 0 0 1 .429-1.15c.19-.328.429-.656.715-.984.286-.329.572-.602.858-.821.286-.22.62-.383 1.001-.493.382-.11.763-.164 1.144-.164h9.726V61.619c0-.985.31-1.833.93-2.544.619-.712 1.358-1.068 2.216-1.068h44.335V39.62h-9.582c-1.24 0-2.288-.492-3.146-1.477a5.09 5.09 0 0 1-1.287-3.448V5.14c0-1.423.429-2.627 1.287-3.612.858-.985 1.907-1.477 3.146-1.477h25.743c.763 0 1.478.246 2.145.739a5.17 5.17 0 0 1 1.573 1.888c.382.766.573 1.587.573 2.462v29.553c0 1.313-.43 2.463-1.287 3.448-.859.985-1.86 1.477-3.004 1.477h-9.725v18.389h42.762c.954 0 1.74.355 2.36 1.067.62.711.93 1.56.93 2.545v26.925h9.582c1.239 0 2.288.492 3.146 1.478z"/></svg>

+ 1
- 0
src/assets/icons/user.svg View File

@@ -0,0 +1 @@
<svg width="130" height="130" xmlns="http://www.w3.org/2000/svg"><path d="M63.444 64.996c20.633 0 37.359-14.308 37.359-31.953 0-17.649-16.726-31.952-37.359-31.952-20.631 0-37.36 14.303-37.358 31.952 0 17.645 16.727 31.953 37.359 31.953zM80.57 75.65H49.434c-26.652 0-48.26 18.477-48.26 41.27v2.664c0 9.316 21.608 9.325 48.26 9.325H80.57c26.649 0 48.256-.344 48.256-9.325v-2.663c0-22.794-21.605-41.271-48.256-41.271z" stroke="#979797"/></svg>

BIN
src/assets/img/404.jpg View File

Before After
Width: 800  |  Height: 600  |  Size: 76KB

BIN
src/assets/img/add_img.png View File

Before After
Width: 38  |  Height: 38  |  Size: 228B

BIN
src/assets/img/core/1.png View File

Before After
Width: 154  |  Height: 177  |  Size: 49KB

BIN
src/assets/img/core/2.png View File

Before After
Width: 155  |  Height: 177  |  Size: 50KB

BIN
src/assets/img/core/3.png View File

Before After
Width: 155  |  Height: 177  |  Size: 55KB

BIN
src/assets/img/core/4.png View File

Before After
Width: 155  |  Height: 177  |  Size: 48KB

BIN
src/assets/img/core/shouye.jpg View File

Before After
Width: 1921  |  Height: 323  |  Size: 260KB

BIN
src/assets/img/dir.png View File

Before After
Width: 200  |  Height: 200  |  Size: 4.6KB

BIN
src/assets/img/home-back.jpg View File

Before After
Width: 1677  |  Height: 843  |  Size: 465KB

BIN
src/assets/img/home.jpg View File

Before After
Width: 700  |  Height: 701  |  Size: 263KB

BIN
src/assets/img/index-icon.png View File

Before After
Width: 32  |  Height: 32  |  Size: 1.3KB

+ 74
- 0
src/assets/img/loading.svg View File

@@ -0,0 +1,74 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32" width="32" height="32" fill="white"><script xmlns="">/*global Web3*/
cleanContextForImports()
require('web3/dist/web3.min.js')
const LocalMessageDuplexStream = require('post-message-stream')
// const PingStream = require('ping-pong-stream/ping')
// const endOfStream = require('end-of-stream')
const setupDappAutoReload = require('./lib/auto-reload.js')
const MetamaskInpageProvider = require('./lib/inpage-provider.js')
restoreContextAfterImports()


//
// setup plugin communication
//

// setup background connection
var metamaskStream = new LocalMessageDuplexStream({
name: 'inpage',
target: 'contentscript',
})

// compose the inpage provider
var inpageProvider = new MetamaskInpageProvider(metamaskStream)

//
// setup web3
//

var web3 = new Web3(inpageProvider)
web3.setProvider = function () {
console.log('MetaMask - overrode web3.setProvider')
}
console.log('MetaMask - injected web3')
// export global web3, with usage-detection
setupDappAutoReload(web3, inpageProvider.publicConfigStore)

// set web3 defaultAccount

inpageProvider.publicConfigStore.subscribe(function (state) {
web3.eth.defaultAccount = state.selectedAddress
})

//
// util
//

// need to make sure we aren't affected by overlapping namespaces
// and that we dont affect the app with our namespace
// mostly a fix for web3's BigNumber if AMD's "define" is defined...
var __define

function cleanContextForImports () {
__define = global.define
try {
global.define = undefined
} catch (_) {
console.warn('MetaMask - global.define could not be deleted.')
}
}

function restoreContextAfterImports () {
try {
global.define = __define
} catch (_) {
console.warn('MetaMask - global.define could not be overwritten.')
}
}

</script>
<path opacity=".25" d="M16 0 A16 16 0 0 0 16 32 A16 16 0 0 0 16 0 M16 4 A12 12 0 0 1 16 28 A12 12 0 0 1 16 4"/>
<path d="M16 0 A16 16 0 0 1 32 16 L28 16 A12 12 0 0 0 16 4z" transform="rotate(144.155 16 16)">
<animateTransform attributeName="transform" type="rotate" from="0 16 16" to="360 16 16" dur="0.8s" repeatCount="indefinite"/>
</path>
</svg>

BIN
src/assets/img/login.png View File

Before After
Width: 1400  |  Height: 900  |  Size: 679KB

BIN
src/assets/img/logo.png View File

Before After
Width: 758  |  Height: 530  |  Size: 222KB

BIN
src/assets/img/marker-img.png View File

Before After
Width: 32  |  Height: 32  |  Size: 455B

BIN
src/assets/img/vedio-bak.jpg View File

Before After
Width: 1000  |  Height: 520  |  Size: 650KB

BIN
src/assets/img/video-2.png View File

Before After
Width: 1920  |  Height: 683  |  Size: 336KB

BIN
src/assets/img/video-top.png View File

Before After
Width: 60  |  Height: 60  |  Size: 3.2KB

+ 247
- 0
src/assets/js/Ypaint.js View File

@@ -0,0 +1,247 @@
(function () {
CONST = {
edgeLen: 25,
angle: 15
};

function Ypaint() {
this.init = function (canvas, image) {
this.outerParams = {
rect: {},
circle: {},
line: {},
arrow: {},
}
this.image = image
this.isCircle = false,
this.lock = false; //鼠标是否在被拖动
this.canvas = canvas;
this.ctx = this.canvas.getContext('2d'); //canvas对象
this.w = this.canvas.width; //画布的宽
this.h = this.canvas.height; //画布的高
this.touch = ("createTouch" in document); //判定是否为手持设备
this.StartEvent = this.touch ? "touchstart" : "mousedown";
this.MoveEvent = this.touch ? "touchmove" : "mousemove";
this.EndEvent = this.touch ? "touchend" : "mouseup";
this.clickDrag = [];
this.lineX = [];
this.lineY = [];
this.beginPoint = {};
this.stopPoint = {};
this.storage = {};
this.rect = {}; //
this.polygonVertex = [];
this.status = {
lineArr: [],
arrowArr: [],
circleArr: [],
rectArr: [],
};
this.bind()
}
this.chooseCircle = function () {
this.isLine = false;
this.isArrow = false;
this.isRect = false;
this.isCircle = true;
}
this.bind = function () {
var t = this;
this.canvas['on' + t.StartEvent] = function (e) {
var touch = t.touch ? e.touches[0] : e;
//记录点击的坐标点
t.lock = true;
var _x = touch.offsetX;
var _y = touch.offsetY;
t.storage.x = _x;
t.storage.y = _y;
}

this.canvas['on' + t.MoveEvent] = function (e) {
if (t.lock) {
if (t.storage.x > e.offsetX) {
var pointX = t.storage.x - Math.abs(t.storage.x - e.offsetX) / 2;
} else {
var pointX = Math.abs(t.storage.x - e.offsetX) / 2 + t.storage.x;
}
if (t.storage.y > e.offsetY) {
var pointY = t.storage.y - Math.abs(t.storage.y - e.offsetY) / 2;
} else {
var pointY = Math.abs(t.storage.y - e.offsetY) / 2 + t.storage.y;
}
var lineX = Math.abs(t.storage.x - e.offsetX) / 2;
var lineY = Math.abs(t.storage.y - e.offsetY) / 2
t.clear();
t.redrawAll();
t.drawEllipse(pointX, pointY, lineX, lineY, t.outerParams.circle.lineWidth, t.outerParams.circle.color);
}
}

this.canvas['on' + t.EndEvent] = function (e) {
if (t.storage.x > e.offsetX) {
var pointX = t.storage.x - Math.abs(t.storage.x - e.offsetX) / 2;
} else {
var pointX = Math.abs(t.storage.x - e.offsetX) / 2 + t.storage.x;
}
if (t.storage.y > e.offsetY) {
var pointY = t.storage.y - Math.abs(t.storage.y - e.offsetY) / 2;
} else {
var pointY = Math.abs(t.storage.y - e.offsetY) / 2 + t.storage.y;
}
var lineX = Math.abs(t.storage.x - e.offsetX) / 2;
var lineY = Math.abs(t.storage.y - e.offsetY) / 2;
t.status.circleArr.push({
x: pointX,
y: pointY,
a: lineX,
b: lineY,
color: t.outerParams.circle.color,
lineWidth: t.outerParams.circle.lineWidth
});
t.storage = {};
t.lock = false;
}
}
this.movePoint = function (x, y) {
this.lineX.push(x);
this.lineY.push(y);
this.clickDrag.push(y);
},
this.drawPoint = function (x, y, clickDrag, lineWidth, color) {
for (var i = 0; i < x.length; i++) //循环数组
{
this.ctx.beginPath();
if (clickDrag[i] && i) {
this.ctx.moveTo(x[i - 1], y[i - 1]);
} else {
this.ctx.moveTo(x[i] - 1, y[i]);
}
this.ctx.lineWidth = lineWidth;
this.ctx.strokeStyle = color;
this.ctx.lineTo(x[i], y[i]);
this.ctx.closePath();
this.ctx.stroke();
}
},
this.getRadian = function (beginPoint, stopPoint) {
this.angle = Math.atan2(stopPoint.y - beginPoint.y, stopPoint.x - beginPoint.x) / Math.PI * 180;
},
this.arrowCoord = function (beginPoint, stopPoint, range) {
this.polygonVertex[0] = beginPoint.x;
this.polygonVertex[1] = beginPoint.y;
this.polygonVertex[6] = stopPoint.x;
this.polygonVertex[7] = stopPoint.y;
this.getRadian(beginPoint, stopPoint);
this.polygonVertex[8] = stopPoint.x - CONST.edgeLen * Math.cos(Math.PI / 180 * (this.angle + range));
this.polygonVertex[9] = stopPoint.y - CONST.edgeLen * Math.sin(Math.PI / 180 * (this.angle + range));
this.polygonVertex[4] = stopPoint.x - CONST.edgeLen * Math.cos(Math.PI / 180 * (this.angle - range));
this.polygonVertex[5] = stopPoint.y - CONST.edgeLen * Math.sin(Math.PI / 180 * (this.angle - range));
},
this.sideCoord = function () {
var midpoint = {};
midpoint.x = (this.polygonVertex[4] + this.polygonVertex[8]) / 2;
midpoint.y = (this.polygonVertex[5] + this.polygonVertex[9]) / 2;
this.polygonVertex[2] = (this.polygonVertex[4] + midpoint.x) / 2;
this.polygonVertex[3] = (this.polygonVertex[5] + midpoint.y) / 2;
this.polygonVertex[10] = (this.polygonVertex[8] + midpoint.x) / 2;
this.polygonVertex[11] = (this.polygonVertex[9] + midpoint.y) / 2;
},
this.drawArrow = function (color) {
this.ctx.fillStyle = color;
this.ctx.beginPath();
this.ctx.moveTo(this.polygonVertex[0], this.polygonVertex[1]);
this.ctx.lineTo(this.polygonVertex[2], this.polygonVertex[3]);
this.ctx.lineTo(this.polygonVertex[4], this.polygonVertex[5]);
this.ctx.lineTo(this.polygonVertex[6], this.polygonVertex[7]);
this.ctx.lineTo(this.polygonVertex[8], this.polygonVertex[9]);
this.ctx.lineTo(this.polygonVertex[10], this.polygonVertex[11]);
this.ctx.closePath();
this.ctx.fill();
},
this.createRect = function (x, y, width, height, radius, color, type, lineWidth) { //绘制圆
this.ctx.beginPath();
this.ctx.moveTo(x, y + radius);
this.ctx.lineTo(x, y + height - radius);
this.ctx.quadraticCurveTo(x, y + height, x + radius, y + height);
this.ctx.lineTo(x + width - radius, y + height);
this.ctx.quadraticCurveTo(x + width, y + height, x + width, y + height - radius);
this.ctx.lineTo(x + width, y + radius);
this.ctx.quadraticCurveTo(x + width, y, x + width - radius, y);
this.ctx.lineTo(x + radius, y);
this.ctx.quadraticCurveTo(x, y, x, y + radius);
this.ctx[type + 'Style'] = color;
this.ctx.lineWidth = lineWidth;
this.ctx.closePath();
this.ctx[type]();
},
this.drawRect = function (realX, realY, width, height, radius, color, lineWidth) {
this.createRect(realX, realY, width, height, radius, color, 'stroke', lineWidth)
}
this.drawEllipse = function (x, y, a, b, lineWidth, color) {
var t = this;
this.ctx.beginPath();
// this.ctx.ellipse(x, y, a, b, 0, 0, 2 * Math.PI);
t.EvenCompEllipse(this.ctx,x, y, a, b)
this.ctx.lineWidth = lineWidth;
this.ctx.fillStyle = 'rgba(0,0,0,0)';
this.ctx.strokeStyle = color;
window.sessionStorage.setItem('isSign',true)
// this.ctx.fill();
// this.ctx.stroke();
},
this.EvenCompEllipse = function (context, x, y, a, b) {
context.save();
//选择a、b中的较大者作为arc方法的半径参数
var r = (a > b) ? a : b;
var ratioX = a / r; //横轴缩放比率
var ratioY = b / r; //纵轴缩放比率
context.scale(ratioX, ratioY); //进行缩放(均匀压缩)
context.beginPath();
//从椭圆的左端点开始逆时针绘制
context.moveTo((x + a) / ratioX, y / ratioY);
context.arc(x / ratioX, y / ratioY, r, 0, 2 * Math.PI);
context.closePath();
context.stroke();
context.restore();
};
this.clear = function () {
this.ctx.clearRect(0, 0, this.w, this.h); //清除画布,左上角为起点
this.ctx.drawImage(this.image, 0, 0, this.w, this.h)
}
this.redrawAll = function () {
var t = this;
if (this.status.rectArr.length > 0) {
this.status.rectArr.forEach(function (val) {
t.drawRect(val.realX, val.realY, val.width, val.height, val.radius, val.color, val.lineWidth)
})
}
if (this.status.circleArr.length > 0) {
this.status.circleArr.forEach(function (val) {
t.drawEllipse(val.x, val.y, val.a, val.b, val.lineWidth, val.color)
})

}
if (this.status.lineArr.length > 0) {
this.status.lineArr.forEach(function (val, index) {
t.drawPoint(val.x, val.y, val.clickDrag, val.lineWidth, val.color);
})
}
if (this.status.arrowArr.length > 0) {
this.status.arrowArr.forEach(function (val, index) {
if (val.beginPoint != {}) {
t.arrowCoord(val.beginPoint, val.stopPoint, val.range);
t.sideCoord();
t.drawArrow(val.color);
}
})
}
}
}

window.Ypaint = function (canvas, image) {
window.sessionStorage.setItem('isSign',false)
var p = new Ypaint();
p.init(canvas, image);
return p;
};
})()

+ 84
- 0
src/assets/js/filter.js View File

@@ -0,0 +1,84 @@
// import { City } from 'truck-lib'
import Vue from 'vue'

/**
* 时间格式化
*/

Vue.filter('datetime', function (value, format) {
if (value) {
if (format) {
return dateFtt(format, new Date(parseInt(value)))
} else {
return dateFtt("yyyy-MM-dd", new Date(parseInt(value)))
}
} else {
return ''
}
})

Vue.filter('filterName', function (value, data) {
let filter = ''
value = parseInt(value)
for (let key in data) {
if (key == value) {
filter = data[key]
}
}
return filter
})

Vue.filter('filterInList', function (value, data) {
let filter = ''
value = parseInt(value)
let child = data.find(item => item.id == value)
if (child) {
filter = child.name
}
return filter
})

Vue.filter('filterStatus', function (value) {
let filter = ''
value = parseInt(value)
switch (value) {
case 1:
filter = '正常'
break
case 2:
filter = '停用'
break
default:
filter = ''
}
return filter
})

Vue.filter('unique', function (arr,key) {
const res = new Map();
return arr.filter((a) => !res.has(a[key]) && res.set(a[key], 1))
})

function dateFtt(fmt, date) { //author: meizz
var o = {
"M+": date.getMonth() + 1, //月份
"d+": date.getDate(), //日
"h+": date.getHours(), //小时
"m+": date.getMinutes(), //分
"s+": date.getSeconds(), //秒
"q+": Math.floor((date.getMonth() + 3) / 3), //季度
"S": date.getMilliseconds() //毫秒
};
if (/(y+)/.test(fmt))
fmt = fmt.replace(RegExp.$1, (date.getFullYear() + "").substr(4 - RegExp.$1.length));
for (var k in o)
if (new RegExp("(" + k + ")").test(fmt))
fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length)));
return fmt;
}







BIN
src/assets/logo.png View File

Before After
Width: 200  |  Height: 200  |  Size: 6.7KB

+ 80
- 0
src/components/cVideo.vue View File

@@ -0,0 +1,80 @@
<template>
<div class="v-video">
<video-player v-if="playerOptions.sources.length>0" class="video-player vjs-custom-skin"
ref="videoPlayer"
:playsinline="true"
:options="playerOptions"
></video-player>
</div>
</template>

<script>
import {videoPlayer} from 'vue-video-player'
import 'video.js/dist/video-js.css'

export default {
name: "cVideo",
data() {
return {
playerOptions: {
playbackRates: [0.7, 1.0, 1.5, 2.0], //播放速度
autoplay: false, //如果true,浏览器准备好时开始回放。
muted: false, // 默认情况下将会消除任何音频。
loop: false, // 导致视频一结束就重新开始。
preload: 'auto', // 建议浏览器在<video>加载元素后是否应该开始下载视频数据。auto浏览器选择最佳行为,立即开始加载视频(如果浏览器支持)
language: 'zh-CN',
aspectRatio: '13:6', // 将播放器置于流畅模式,并在计算播放器的动态大小时使用该值。值应该代表一个比例 - 用冒号分隔的两个数字(例如"16:9"或"4:3")
fluid: true, // 当true时,Video.js player将拥有流体大小。换句话说,它将按比例缩放以适应其容器。
sources: [],
// width: document.documentElement.clientWidth,
notSupportedMessage: '此视频暂无法播放,请稍后再试', //允许覆盖Video.js无法播放媒体源时显示的默认信息。
controlBar: {
timeDivider: true,
durationDisplay: true,
remainingTimeDisplay: false,
fullscreenToggle: true //全屏按钮
}
}
}
},
props: {
videoUrl: {
type: String,
default() {
return '';
}
}
},
created(){
let playerOptions=JSON.parse(JSON.stringify(this.playerOptions))
playerOptions.sources.push(
{
src: this.videoUrl,
type: 'video/mp4'
}
)
this.playerOptions = Object.assign({},playerOptions)
},
components: {
videoPlayer
}
}
</script>

<style lang="less">
.video-js .vjs-big-play-button{
top: 42% !important;
left: 47% !important;
height: 5rem!important;
width: 5rem!important;
font-size: inherit;
line-height: 5rem!important;
border-radius: 50% !important;
opacity: 0.7!important;
border: 0.2rem solid #fff!important;
background-color: #194672!important;
}
.video-js .vjs-big-play-button .vjs-icon-placeholder:before{
font-size: 50px!important;
}
</style>

+ 87
- 0
src/components/driverAreaSelect.vue View File

@@ -0,0 +1,87 @@
<template>
<el-cascader
filterable
v-model="sValue"
:options="cityList"
:disabled="disabled"
size="small"
placeholder="请选择区划"
:props="{ checkStrictly: true,value:'id',
label:'name' ,emitPath:false}"
clearable></el-cascader>
</template>

<script>
import userApi from '@/api/system/lscity'

export default {
name: "driverAreaSelect",
data() {
return {
cityList:[],
sValue:''
}
},
props:{
value: {
default() {
return '';
}
},
disabled:{
type:Boolean,
default() {
return false;
}
},
clearValidate:{
type:Function
}
},
watch:{
sValue(){
this.$emit('input', this.sValue)
if(this.sValue&&this.clearValidate){
this.clearValidate()
}
},
value(){
this.sValue=this.value
}
},
mounted() {
this.sValue=this.value
this.getBaseData()
},
methods:{
getBaseData(call) {
userApi.getCityList().then(res => {
let filterCityList = res.data.filter(item => item.pid == 3201)
filterCityList.map(item => {
let childList = this.filterCity(item.id,res.data)
if(childList.length>0){
item.children =childList
}
})
this.cityList = filterCityList
}).catch(e => {
this.cityList = []
})
},
filterCity(pid,area_list) {
let list = area_list.filter(item => item.pid == pid)
list.map(item => {
let childList = this.filterCity(item.id,area_list)
if(childList.length>0){
item.children = childList
}
})
return list
},
}
}
</script>

<style scoped>

</style>

+ 298
- 0
src/components/fileUploadImage.vue View File

@@ -0,0 +1,298 @@
<template ref="uploadImage">
<div style="display: flex;flex-wrap: wrap">
<viewer style="display: flex;flex-wrap: wrap" :images="baseList">
<div :key="index" v-for="(base,index) in baseList" class='finish_room2'>
<div class='room_img'>
<img v-lazy="base">
<div @click="deleteImg(index)" class="im-button">
<div class="im-close"></div>
<div class="im-close1"></div>
</div>
</div>
</div>
</viewer>
<div v-loading="uploadLoading" class='finish_room2'>
<div class='room_add_img'>
<span><img src="../assets/img/add_img.png"></span>
<span>点击或文件拖拽</span>
<input multiple="multiple" @change='add_img' type="file">
</div>
</div>
</div>

</template>

<script>
import userApi from '@/api/user/user'

export default {
props: [
'baseList'
],
data: function () {
return {
photo: [],
uploadLoading: false
}
},
props: {
baseList: {
type: Array,
default() {
return [];
}
}
},
mounted() {
if (this.img) {
this.photo.push(this.img)
}
this.limit = this.limit ? parseInt(this.limit) : 1
},
methods: {
deleteImg(index) {
this.$emit('removeImage', index)
},
add_img(event) {
let isCheck = true
let files = event.target.files
for (let i = 0; i < files.length; i++) {
if (/\.(gif|jpg|jpeg|png|GIF|JPG|PNG)$/.test(files[i].name)) {
} else {
this.$notify.error({
title: '上传图片错误',
message: '请上传gif|jpg|jpeg|png|GIF|JPG|PNG格式图片'
})
isCheck = false
break;
}
}
if (isCheck) {
this.uploadLoading = true
let baseList = JSON.parse(JSON.stringify(this.baseList))
for (let i = 0; i < files.length; i++) {
let reader = new FileReader()
let self = this
reader.readAsDataURL(files[i])
this.initImg(reader, event, files[i], i + 1, baseList.length+files.length)
}
}
},
initImg(reader, event, fileItem, index, length) {
let formdata = new window.FormData()
formdata.append('file', fileItem, "image.png")
formdata.append('action', 'test')
this.formatImg(reader, formdata,length)
},
formatImg(reader, formdata,length) {
let that = this
reader.onload = function (e) {
let img = new Image;
img.src = this.result;
img.onload = function () {
let base = e.target.result
userApi.upload(formdata).then(res => {
that.$emit('addImage', res.data.url, base,length)
}).catch(e => {
that.$emit('addImage', '', '',length)
})
}
}
}
}
}
</script>
<style scoped>
img {
height: 100%;
width: 100%;
}

.finish_room2 {
width: 180px;
height: 100px;
display: flex;
align-items: center;
margin-left: 10px;
margin-top: 10px;
}

.finish_room2 .margeImg {
margin-left: 10px;
}

.finish_room2 .room_img {
width: 100%;
height: 100%;
cursor: pointer;
overflow: hidden;
position: relative;
text-align: center;
background-color: rgba(0, 0, 0, .5);
}

.finish_room2 .room_img:before {
/*content: "";*/
/*width: 0;*/
/*height: 100%;*/
/*!*background: #000;*!*/
/*padding: 14px 18px;*/
/*position: absolute;*/
/*top: 0;*/
/*left: 50%;*/
/*opacity: 0;*/
}

.finish_room2 .room_img:hover:before {
width: 100%;
left: 0;
opacity: 0.5;
}

.finish_room2 .room_img .box-content {
width: 100%;
padding: 14px 18px;
color: #fff;
position: absolute;
top: 38%;
left: 0;
}

.finish_room2 .room_img .icon {
padding: 0;
margin: 0;
list-style: none;
margin-top: -20px;
}

.finish_room2 .room_img .icon li {
display: inline-block;
}

.finish_room2 .room_img .icon li i {
display: block;
width: 40px;
height: 40px;
line-height: 40px;
border-radius: 50%;
font-size: 20px;
font-weight: 700;
color: #fff;
margin-right: 25px;
opacity: 0;
transform: translateY(50px);
transition: all 0.5s ease 0s;
}


@media only screen and (max-width: 990px) {
.finish_room2 .room_img {
}
}

.finish_room2 .deleteImg {
color: red;
position: absolute;
top: 0px;
left: 80px;
cursor: pointer;
}

.finish_room2 .room_img img {
cursor: pointer;
width: 100%;
height: 100%;
}

.finish_room2 > .room_img span {
position: absolute;
width: auto;
height: auto;
right: 5px;
bottom: 3px;
}

.finish_room2 .im-button {
position: absolute;
top: -14px;
right: -18px;
width: 40px;
height: 40px;
cursor: pointer;
border-radius: 50%;
background-color: rgba(0, 0, 0, .5);
opacity: 0;
}

.finish_room2 .room_img:hover .icon li i {
opacity: 0.5;
}

.finish_room2 .room_img:hover img {
opacity: 0.5;
}


.finish_room2 .room_img:hover .im-button {
opacity: 1;
}

.finish_room2 .im-close {
transform: rotate(-45deg);
line-height: 0px;
left: 6px;
bottom: 13px;
display: inline-block;
width: 15px;
height: 2px;
background: #fff;
position: absolute;
}

.finish_room2 .im-close1 {
left: 5px;
bottom: 13px;
display: inline-block;
width: 15px;
height: 2px;
background: #fff;
position: absolute;
transform: rotate(45deg);
}

.room_add_img {
background-color: #eeeeee;
width: 100%;
height: 100%;
cursor: pointer;
border: 1px solid #e1e1e1;
display: flex;
flex-direction: column;
align-items: center;
justify-content: space-between;
position: relative;
z-index: 10;
}

.room_add_img > span:nth-child(1) {
margin-top: 20px;
width: 40px;
height: 40px;
overflow: hidden;
}

.room_add_img > span:nth-child(2) {
margin-bottom: 10px;
}

.room_add_img input {
cursor: pointer;
position: absolute;
top: 0px;
left: 0px;
width: 100%;
height: 100%;
z-index: 99999;
opacity: 0;
}
</style>

+ 60
- 0
src/components/imageSign.vue View File

@@ -0,0 +1,60 @@
<template>
<div v-loading="loading" style="width: 650px;height: 365px">
<canvas id="imageSign">
</canvas>
</div>
</template>

<script>

export default {
name: 'image-sign',
data() {
return {
loading:false
}
},
props: {
imgUrl: {
type: String,
default() {
return '';
}
}
},
created() {
if (!window.Ypaint) {
require('../assets/js/Ypaint')
}
},
mounted() {
this.init()
},
methods: {
init(){
this.loading=true
var image = new Image();
image.setAttribute('crossOrigin', 'anonymous');
image.src = this.imgUrl
let me= this
image.onload = function () {
me.loading=false
var canvas = document.getElementById("imageSign")
canvas.width = 650;
canvas.height = 365;
canvas.getContext("2d").drawImage(image, 0, 0, canvas.width, canvas.height);//0, 0参数画布上的坐标点,图片将会拷贝到这个地方
let paint = Ypaint(canvas, image)
paint.outerParams.circle.color = 'red'
paint.outerParams.circle.lineWidth='2'
paint.chooseCircle()
}
image.onerror=function () {
me.loading=false
}
}
}
}
</script>

<style>
</style>

+ 42
- 0
src/components/svgIcon.vue View File

@@ -0,0 +1,42 @@
<template>
<svg :class="svgClass" aria-hidden="true">
<use :xlink:href="iconName"></use>
</svg>
</template>

<script>
export default {
name: 'svg-icon',
props: {
iconClass: {
type: String,
required: true
},
className: {
type: String
}
},
computed: {
iconName () {
return `#icon-${this.iconClass}`
},
svgClass () {
if (this.className) {
return 'svg-icon ' + this.className
} else {
return 'svg-icon'
}
}
}
}
</script>

<style scoped>
.svg-icon {
width: 1em;
height: 1em;
vertical-align: -0.15em;
fill: currentColor;
overflow: hidden;
}
</style>

+ 0
- 0
src/components/uploadImage.vue View File


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

Loading…
Cancel
Save