Commit d515cb9a by 潘建波

青岛社保首次提交

1 parent e67c0e05
Showing 170 changed files with 4820 additions and 0 deletions
{
"presets": [
["env", {
"modules": false,
"targets": {
"browsers": ["> 1%", "last 2 versions", "not ie <= 8"]
}
}],
"stage-2"
],
"plugins": ["transform-vue-jsx", "transform-runtime"],
"env": {
"test": {
"presets": ["env", "stage-2"],
"plugins": ["transform-vue-jsx", "transform-es2015-modules-commonjs", "dynamic-import-node"]
}
}
}
root = true
[*]
charset = utf-8
indent_style = space
indent_size = 2
end_of_line = lf
insert_final_newline = true
trim_trailing_whitespace = true
.DS_Store
node_modules/
/dist/
npm-debug.log*
yarn-debug.log*
yarn-error.log*
/test/unit/coverage/
# Editor directories and files
.idea
.vscode
*.suo
*.ntvs*
*.njsproj
*.sln
// https://github.com/michael-ciniawsky/postcss-load-config
module.exports = {
"plugins": {
"postcss-import": {},
"postcss-url": {},
// to edit target browsers: use "browserslist" field in package.json
"autoprefixer": {}
}
}
# web
> A Vue.js project
## Build Setup
``` bash
# install dependencies
npm install
# serve with hot reload at localhost:8080
npm run dev
# build for production with minification
npm run build
# build for production and view the bundle analyzer report
npm run build --report
# run unit tests
npm run unit
# run all tests
npm test
```
For a detailed explanation on how things work, check out the [guide](http://vuejs-templates.github.io/webpack/) and [docs for vue-loader](http://vuejs.github.io/vue-loader).
'use strict'
require('./check-versions')()
process.env.NODE_ENV = 'production'
const ora = require('ora')
const rm = require('rimraf')
const path = require('path')
const chalk = require('chalk')
const webpack = require('webpack')
const config = require('../config')
const webpackConfig = require('./webpack.prod.conf')
const spinner = ora('building for production...')
spinner.start()
rm(path.join(config.build.assetsRoot, config.build.assetsSubDirectory), err => {
if (err) throw err
webpack(webpackConfig, (err, stats) => {
spinner.stop()
if (err) throw err
process.stdout.write(stats.toString({
colors: true,
modules: false,
children: false, // If you are using ts-loader, setting this to true will make TypeScript errors show up during build.
chunks: false,
chunkModules: false
}) + '\n\n')
if (stats.hasErrors()) {
console.log(chalk.red(' Build failed with errors.\n'))
process.exit(1)
}
console.log(chalk.cyan(' Build complete.\n'))
console.log(chalk.yellow(
' Tip: built files are meant to be served over an HTTP server.\n' +
' Opening index.html over file:// won\'t work.\n'
))
})
})
'use strict'
const chalk = require('chalk')
const semver = require('semver')
const packageConfig = require('../package.json')
const shell = require('shelljs')
function exec (cmd) {
return require('child_process').execSync(cmd).toString().trim()
}
const versionRequirements = [
{
name: 'node',
currentVersion: semver.clean(process.version),
versionRequirement: packageConfig.engines.node
}
]
if (shell.which('npm')) {
versionRequirements.push({
name: 'npm',
currentVersion: exec('npm --version'),
versionRequirement: packageConfig.engines.npm
})
}
module.exports = function () {
const warnings = []
for (let i = 0; i < versionRequirements.length; i++) {
const mod = versionRequirements[i]
if (!semver.satisfies(mod.currentVersion, mod.versionRequirement)) {
warnings.push(mod.name + ': ' +
chalk.red(mod.currentVersion) + ' should be ' +
chalk.green(mod.versionRequirement)
)
}
}
if (warnings.length) {
console.log('')
console.log(chalk.yellow('To use this template, you must update following to modules:'))
console.log()
for (let i = 0; i < warnings.length; i++) {
const warning = warnings[i]
console.log(' ' + warning)
}
console.log()
process.exit(1)
}
}
'use strict'
const path = require('path')
const config = require('../config')
const ExtractTextPlugin = require('extract-text-webpack-plugin')
const packageConfig = require('../package.json')
exports.assetsPath = function (_path) {
const assetsSubDirectory = process.env.NODE_ENV === 'production'
? config.build.assetsSubDirectory
: config.dev.assetsSubDirectory
return path.posix.join(assetsSubDirectory, _path)
}
exports.cssLoaders = function (options) {
options = options || {}
const cssLoader = {
loader: 'css-loader',
options: {
sourceMap: options.sourceMap
}
}
const postcssLoader = {
loader: 'postcss-loader',
options: {
sourceMap: options.sourceMap
}
}
// generate loader string to be used with extract text plugin
function generateLoaders (loader, loaderOptions) {
const loaders = options.usePostCSS ? [cssLoader, postcssLoader] : [cssLoader]
if (loader) {
loaders.push({
loader: loader + '-loader',
options: Object.assign({}, loaderOptions, {
sourceMap: options.sourceMap
})
})
}
// Extract CSS when that option is specified
// (which is the case during production build)
if (options.extract) {
return ExtractTextPlugin.extract({
use: loaders,
fallback: 'vue-style-loader',
publicPath:'../../'
})
} else {
return ['vue-style-loader'].concat(loaders)
}
}
// https://vue-loader.vuejs.org/en/configurations/extract-css.html
return {
css: generateLoaders(),
postcss: generateLoaders(),
less: generateLoaders('less'),
sass: generateLoaders('sass', { indentedSyntax: true }),
scss: generateLoaders('sass'),
stylus: generateLoaders('stylus'),
styl: generateLoaders('stylus')
}
}
// Generate loaders for standalone style files (outside of .vue)
exports.styleLoaders = function (options) {
const output = []
const loaders = exports.cssLoaders(options)
for (const extension in loaders) {
const loader = loaders[extension]
output.push({
test: new RegExp('\\.' + extension + '$'),
use: loader
})
}
return output
}
exports.createNotifierCallback = () => {
const notifier = require('node-notifier')
return (severity, errors) => {
if (severity !== 'error') return
const error = errors[0]
const filename = error.file && error.file.split('!').pop()
notifier.notify({
title: packageConfig.name,
message: severity + ': ' + error.name,
subtitle: filename || '',
icon: path.join(__dirname, 'logo.png')
})
}
}
'use strict'
const utils = require('./utils')
const config = require('../config')
const isProduction = process.env.NODE_ENV === 'production'
const sourceMapEnabled = isProduction
? config.build.productionSourceMap
: config.dev.cssSourceMap
module.exports = {
loaders: utils.cssLoaders({
sourceMap: sourceMapEnabled,
extract: isProduction
}),
cssSourceMap: sourceMapEnabled,
cacheBusting: config.dev.cacheBusting,
transformToRequire: {
video: ['src', 'poster'],
source: 'src',
img: 'src',
image: 'xlink:href'
}
}
'use strict'
const path = require('path')
const utils = require('./utils')
const config = require('../config')
const vueLoaderConfig = require('./vue-loader.conf')
function resolve (dir) {
return path.join(__dirname, '..', dir)
}
module.exports = {
context: path.resolve(__dirname, '../'),
entry: {
 entry: ["babel-polyfill", "./src/main.js"]
},
output: {
path: config.build.assetsRoot,
filename: '[name].js',
publicPath: process.env.NODE_ENV === 'production'
? config.build.assetsPublicPath
: config.dev.assetsPublicPath
},
resolve: {
extensions: ['.js', '.vue', '.json'],
alias: {
'vue$': 'vue/dist/vue.esm.js',
'@': resolve('src'),
}
},
module: {
rules: [
{
test: /\.vue$/,
loader: 'vue-loader',
options: vueLoaderConfig
},
{
test: /\.js$/,
loader: 'babel-loader',
include: [resolve('src'), resolve('test'), resolve('node_modules/webpack-dev-server/client')]
},
{
test: /\.(png|jpe?g|gif|svg)(\?.*)?$/,
loader: 'url-loader',
options: {
limit: 80000,
name: utils.assetsPath('img/[name].[hash:7].[ext]')
}
},
{
test: /\.(mp4|webm|ogg|mp3|wav|flac|aac)(\?.*)?$/,
loader: 'url-loader',
options: {
limit: 80000,
name: utils.assetsPath('media/[name].[hash:7].[ext]')
}
},
{
test: /\.(woff2?|eot|ttf|otf)(\?.*)?$/,
loader: 'url-loader',
options: {
limit: 80000,
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'
}
}
'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)
}
})
})
'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 = process.env.NODE_ENV === 'testing'
? require('../config/test.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: process.env.NODE_ENV === 'testing'
? 'index.html'
: 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
'use strict'
const merge = require('webpack-merge')
const prodEnv = require('./prod.env')
module.exports = merge(prodEnv, {
NODE_ENV: '"development"'
})
'use strict'
// Template version: 1.3.1
// see http://vuejs-templates.github.io/webpack for documentation.
const path = require('path')
module.exports = {
dev: {
// Paths
assetsSubDirectory: 'static',
assetsPublicPath: '/',
proxyTable: {},
// Various Dev Server settings
host: 'localhost', // can be overwritten by process.env.HOST
port: 8990, // can be overwritten by process.env.PORT, if port is in use, a free one will be determined
autoOpenBrowser: false,
errorOverlay: true,
notifyOnErrors: true,
poll: false, // https://webpack.js.org/configuration/dev-server/#devserver-watchoptions-
/**
* Source Maps
*/
// https://webpack.js.org/configuration/devtool/#development
devtool: 'cheap-module-eval-source-map',
// If you have problems debugging vue-files in devtools,
// set this to false - it *may* help
// https://vue-loader.vuejs.org/en/options.html#cachebusting
cacheBusting: true,
cssSourceMap: true
},
build: {
// Template for index.html
index: path.resolve(__dirname, '../dist/index.html'),
// Paths
assetsRoot: path.resolve(__dirname, '../dist'),
assetsSubDirectory: 'static',
assetsPublicPath: './',
/**
* Source Maps
*/
productionSourceMap: true,
// https://webpack.js.org/configuration/devtool/#production
devtool: '#source-map',
// Gzip off by default as many popular static hosts such as
// Surge or Netlify already gzip all static assets for you.
// Before setting to `true`, make sure to:
// npm install --save-dev compression-webpack-plugin
productionGzip: false,
productionGzipExtensions: ['js', 'css'],
// Run the build command with an extra argument to
// View the bundle analyzer report after build finishes:
// `npm run build --report`
// Set to `true` or `false` to always turn it on or off
bundleAnalyzerReport: process.env.npm_config_report
}
}
'use strict'
module.exports = {
NODE_ENV: '"production"'
}
'use strict'
const merge = require('webpack-merge')
const devEnv = require('./dev.env')
module.exports = merge(devEnv, {
NODE_ENV: '"testing"'
})
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1.0">
<title>web</title>
</head>
<body>
<div id="app"></div>
<!-- built files will be auto injected -->
</body>
</html>
This diff could not be displayed because it is too large.
{
"name": "web",
"version": "1.0.0",
"description": "A Vue.js project",
"author": "panjianbo <13651030816@163.com>",
"private": true,
"scripts": {
"dev": "webpack-dev-server --inline --progress --config build/webpack.dev.conf.js",
"start": "npm run dev",
"unit": "jest --config test/unit/jest.conf.js --coverage",
"test": "npm run unit",
"build": "node build/build.js"
},
"dependencies": {
"@riophae/vue-treeselect": "^0.0.38",
"axios": "^0.18.0",
"babel-polyfill": "^6.26.0",
"cssnano": "^4.1.10",
"echarts": "^4.2.1",
"element-ui": "^2.8.2",
"file-saver": "^2.0.2",
"ol": "^6.0.0",
"stylus": "^0.54.5",
"stylus-loader": "^3.0.2",
"vue": "^2.5.2",
"vue-photo-zoom-pro": "^1.2.12",
"vue-piczoom": "^1.0.6",
"vue-resource": "^1.5.1",
"vue-router": "^3.0.1",
"vue-video-player": "^5.0.2",
"vue2.0-zoom": "^2.1.1",
"vuex": "^3.1.1",
"xlsx": "^0.15.1"
},
"devDependencies": {
"autoprefixer": "^7.1.2",
"babel-core": "^6.22.1",
"babel-helper-vue-jsx-merge-props": "^2.0.3",
"babel-jest": "^24.8.0",
"babel-loader": "^7.1.1",
"babel-plugin-dynamic-import-node": "^1.2.0",
"babel-plugin-syntax-jsx": "^6.18.0",
"babel-plugin-transform-es2015-modules-commonjs": "^6.26.0",
"babel-plugin-transform-runtime": "^6.22.0",
"babel-plugin-transform-vue-jsx": "^3.5.0",
"babel-preset-env": "^1.3.2",
"babel-preset-stage-2": "^6.22.0",
"chalk": "^2.0.1",
"copy-webpack-plugin": "^4.0.1",
"css-loader": "^3.0.0",
"extract-text-webpack-plugin": "^3.0.0",
"file-loader": "^1.1.4",
"friendly-errors-webpack-plugin": "^1.6.1",
"html-webpack-plugin": "^2.30.1",
"jest": "^24.8.0",
"jest-serializer-vue": "^0.3.0",
"node-notifier": "^5.1.2",
"optimize-css-assets-webpack-plugin": "^2.0.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",
"uglifyjs-webpack-plugin": "^1.0.0",
"url-loader": "^2.0.1",
"vue-jest": "^1.0.2",
"vue-loader": "^13.3.0",
"vue-style-loader": "^3.0.1",
"vue-template-compiler": "^2.5.2",
"webpack": "^3.6.0",
"webpack-bundle-analyzer": "^3.3.2",
"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"
]
}
<template>
<!-- <div id="app" class="dark-theme white-theme"> -->
<div id="app" :class="{'white-theme':theme=='white','dark-theme':theme=='dark'}">
<router-view/>
</div>
</template>
<script>
import {mapState} from 'vuex'
export default {
name: 'App',
data(){
return {
ctheme:'dark'
}
},
computed:{
...mapState(['theme'])
},
watch: {
theme(val){
this.theme = val
localStorage.setItem('theme',val)
}
},
}
</script>
<style>
#app {
font-family: "微软雅黑",Arial,sans-serif;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
color: #fff;
}
</style>
No preview for this file type
/* Logo 字体 */
@font-face {
font-family: "iconfont logo";
src: url('https://at.alicdn.com/t/font_985780_km7mi63cihi.eot?t=1545807318834');
src: url('https://at.alicdn.com/t/font_985780_km7mi63cihi.eot?t=1545807318834#iefix') format('embedded-opentype'),
url('https://at.alicdn.com/t/font_985780_km7mi63cihi.woff?t=1545807318834') format('woff'),
url('https://at.alicdn.com/t/font_985780_km7mi63cihi.ttf?t=1545807318834') format('truetype'),
url('https://at.alicdn.com/t/font_985780_km7mi63cihi.svg?t=1545807318834#iconfont') format('svg');
}
.logo {
font-family: "iconfont logo";
font-size: 160px;
font-style: normal;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
/* tabs */
.nav-tabs {
position: relative;
}
.nav-tabs .nav-more {
position: absolute;
right: 0;
bottom: 0;
height: 42px;
line-height: 42px;
color: #666;
}
#tabs {
border-bottom: 1px solid #eee;
}
#tabs li {
cursor: pointer;
width: 100px;
height: 40px;
line-height: 40px;
text-align: center;
font-size: 16px;
border-bottom: 2px solid transparent;
position: relative;
z-index: 1;
margin-bottom: -1px;
color: #666;
}
#tabs .active {
border-bottom-color: #f00;
color: #222;
}
.tab-container .content {
display: none;
}
/* 页面布局 */
.main {
padding: 30px 100px;
width: 960px;
margin: 0 auto;
}
.main .logo {
color: #333;
text-align: left;
margin-bottom: 30px;
line-height: 1;
height: 110px;
margin-top: -50px;
overflow: hidden;
*zoom: 1;
}
.main .logo a {
font-size: 160px;
color: #333;
}
.helps {
margin-top: 40px;
}
.helps pre {
padding: 20px;
margin: 10px 0;
border: solid 1px #e7e1cd;
background-color: #fffdef;
overflow: auto;
}
.icon_lists {
width: 100% !important;
overflow: hidden;
*zoom: 1;
}
.icon_lists li {
width: 100px;
margin-bottom: 10px;
margin-right: 20px;
text-align: center;
list-style: none !important;
cursor: default;
}
.icon_lists li .code-name {
line-height: 1.2;
}
.icon_lists .icon {
display: block;
height: 100px;
line-height: 100px;
font-size: 42px;
margin: 10px auto;
color: #333;
-webkit-transition: font-size 0.25s linear, width 0.25s linear;
-moz-transition: font-size 0.25s linear, width 0.25s linear;
transition: font-size 0.25s linear, width 0.25s linear;
}
.icon_lists .icon:hover {
font-size: 100px;
}
.icon_lists .svg-icon {
/* 通过设置 font-size 来改变图标大小 */
width: 1em;
/* 图标和文字相邻时,垂直对齐 */
vertical-align: -0.15em;
/* 通过设置 color 来改变 SVG 的颜色/fill */
fill: currentColor;
/* path 和 stroke 溢出 viewBox 部分在 IE 下会显示
normalize.css 中也包含这行 */
overflow: hidden;
}
.icon_lists li .name,
.icon_lists li .code-name {
color: #666;
}
/* markdown 样式 */
.markdown {
color: #666;
font-size: 14px;
line-height: 1.8;
}
.highlight {
line-height: 1.5;
}
.markdown img {
vertical-align: middle;
max-width: 100%;
}
.markdown h1 {
color: #404040;
font-weight: 500;
line-height: 40px;
margin-bottom: 24px;
}
.markdown h2,
.markdown h3,
.markdown h4,
.markdown h5,
.markdown h6 {
color: #404040;
margin: 1.6em 0 0.6em 0;
font-weight: 500;
clear: both;
}
.markdown h1 {
font-size: 28px;
}
.markdown h2 {
font-size: 22px;
}
.markdown h3 {
font-size: 16px;
}
.markdown h4 {
font-size: 14px;
}
.markdown h5 {
font-size: 12px;
}
.markdown h6 {
font-size: 12px;
}
.markdown hr {
height: 1px;
border: 0;
background: #e9e9e9;
margin: 16px 0;
clear: both;
}
.markdown p {
margin: 1em 0;
}
.markdown>p,
.markdown>blockquote,
.markdown>.highlight,
.markdown>ol,
.markdown>ul {
width: 80%;
}
.markdown ul>li {
list-style: circle;
}
.markdown>ul li,
.markdown blockquote ul>li {
margin-left: 20px;
padding-left: 4px;
}
.markdown>ul li p,
.markdown>ol li p {
margin: 0.6em 0;
}
.markdown ol>li {
list-style: decimal;
}
.markdown>ol li,
.markdown blockquote ol>li {
margin-left: 20px;
padding-left: 4px;
}
.markdown code {
margin: 0 3px;
padding: 0 5px;
background: #eee;
border-radius: 3px;
}
.markdown strong,
.markdown b {
font-weight: 600;
}
.markdown>table {
border-collapse: collapse;
border-spacing: 0px;
empty-cells: show;
border: 1px solid #e9e9e9;
width: 95%;
margin-bottom: 24px;
}
.markdown>table th {
white-space: nowrap;
color: #333;
font-weight: 600;
}
.markdown>table th,
.markdown>table td {
border: 1px solid #e9e9e9;
padding: 8px 16px;
text-align: left;
}
.markdown>table th {
background: #F7F7F7;
}
.markdown blockquote {
font-size: 90%;
color: #999;
border-left: 4px solid #e9e9e9;
padding-left: 0.8em;
margin: 1em 0;
}
.markdown blockquote p {
margin: 0;
}
.markdown .anchor {
opacity: 0;
transition: opacity 0.3s ease;
margin-left: 8px;
}
.markdown .waiting {
color: #ccc;
}
.markdown h1:hover .anchor,
.markdown h2:hover .anchor,
.markdown h3:hover .anchor,
.markdown h4:hover .anchor,
.markdown h5:hover .anchor,
.markdown h6:hover .anchor {
opacity: 1;
display: inline-block;
}
.markdown>br,
.markdown>p>br {
clear: both;
}
.hljs {
display: block;
background: white;
padding: 0.5em;
color: #333333;
overflow-x: auto;
}
.hljs-comment,
.hljs-meta {
color: #969896;
}
.hljs-string,
.hljs-variable,
.hljs-template-variable,
.hljs-strong,
.hljs-emphasis,
.hljs-quote {
color: #df5000;
}
.hljs-keyword,
.hljs-selector-tag,
.hljs-type {
color: #a71d5d;
}
.hljs-literal,
.hljs-symbol,
.hljs-bullet,
.hljs-attribute {
color: #0086b3;
}
.hljs-section,
.hljs-name {
color: #63a35c;
}
.hljs-tag {
color: #333333;
}
.hljs-title,
.hljs-attr,
.hljs-selector-id,
.hljs-selector-class,
.hljs-selector-attr,
.hljs-selector-pseudo {
color: #795da3;
}
.hljs-addition {
color: #55a532;
background-color: #eaffea;
}
.hljs-deletion {
color: #bd2c00;
background-color: #ffecec;
}
.hljs-link {
text-decoration: underline;
}
/* 代码高亮 */
/* PrismJS 1.15.0
https://prismjs.com/download.html#themes=prism&languages=markup+css+clike+javascript */
/**
* prism.js default theme for JavaScript, CSS and HTML
* Based on dabblet (http://dabblet.com)
* @author Lea Verou
*/
code[class*="language-"],
pre[class*="language-"] {
color: black;
background: none;
text-shadow: 0 1px white;
font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace;
text-align: left;
white-space: pre;
word-spacing: normal;
word-break: normal;
word-wrap: normal;
line-height: 1.5;
-moz-tab-size: 4;
-o-tab-size: 4;
tab-size: 4;
-webkit-hyphens: none;
-moz-hyphens: none;
-ms-hyphens: none;
hyphens: none;
}
pre[class*="language-"]::-moz-selection,
pre[class*="language-"] ::-moz-selection,
code[class*="language-"]::-moz-selection,
code[class*="language-"] ::-moz-selection {
text-shadow: none;
background: #b3d4fc;
}
pre[class*="language-"]::selection,
pre[class*="language-"] ::selection,
code[class*="language-"]::selection,
code[class*="language-"] ::selection {
text-shadow: none;
background: #b3d4fc;
}
@media print {
code[class*="language-"],
pre[class*="language-"] {
text-shadow: none;
}
}
/* Code blocks */
pre[class*="language-"] {
padding: 1em;
margin: .5em 0;
overflow: auto;
}
:not(pre)>code[class*="language-"],
pre[class*="language-"] {
background: #f5f2f0;
}
/* Inline code */
:not(pre)>code[class*="language-"] {
padding: .1em;
border-radius: .3em;
white-space: normal;
}
.token.comment,
.token.prolog,
.token.doctype,
.token.cdata {
color: slategray;
}
.token.punctuation {
color: #999;
}
.namespace {
opacity: .7;
}
.token.property,
.token.tag,
.token.boolean,
.token.number,
.token.constant,
.token.symbol,
.token.deleted {
color: #905;
}
.token.selector,
.token.attr-name,
.token.string,
.token.char,
.token.builtin,
.token.inserted {
color: #690;
}
.token.operator,
.token.entity,
.token.url,
.language-css .token.string,
.style .token.string {
color: #9a6e3a;
background: hsla(0, 0%, 100%, .5);
}
.token.atrule,
.token.attr-value,
.token.keyword {
color: #07a;
}
.token.function,
.token.class-name {
color: #DD4A68;
}
.token.regex,
.token.important,
.token.variable {
color: #e90;
}
.token.important,
.token.bold {
font-weight: bold;
}
.token.italic {
font-style: italic;
}
.token.entity {
cursor: help;
}
@font-face {font-family: "iconfont";
src: url('iconfont.eot?t=1568799704253'); /* IE9 */
src: url('iconfont.eot?t=1568799704253#iefix') format('embedded-opentype'), /* IE6-IE8 */
url('data:application/x-font-woff2;charset=utf-8;base64,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') format('woff2'),
url('iconfont.woff?t=1568799704253') format('woff'),
url('iconfont.ttf?t=1568799704253') format('truetype'), /* chrome, firefox, opera, Safari, Android, iOS 4.2+ */
url('iconfont.svg?t=1568799704253#iconfont') format('svg'); /* iOS 4.1- */
}
.iconfont {
font-family: "iconfont" !important;
font-size: 16px;
font-style: normal;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
.icon-shipin1:before {
content: "\e600";
}
.icon-daichuli:before {
content: "\e601";
}
.icon-guanbi:before {
content: "\e602";
}
.icon-shouye:before {
content: "\e603";
}
.icon-jianguan:before {
content: "\e604";
}
.icon-qiche:before {
content: "\e605";
}
.icon-tuichu:before {
content: "\e606";
}
.icon-shenhe:before {
content: "\e607";
}
.icon-yichuli:before {
content: "\e608";
}
.icon-yunhang:before {
content: "\e609";
}
.icon-xitong:before {
content: "\e60a";
}
.icon-zhifa:before {
content: "\e60b";
}
.icon-chaxun:before {
content: "\e60c";
}
.icon-zhifa1:before {
content: "\e60d";
}
{
"id": "1423038",
"name": "贵阳公交",
"font_family": "iconfont",
"css_prefix_text": "icon-",
"description": "",
"glyphs": [
{
"icon_id": "9533417",
"name": "球机",
"font_class": "shipin1",
"unicode": "e600",
"unicode_decimal": 58880
},
{
"icon_id": "10950691",
"name": "待处理",
"font_class": "daichuli",
"unicode": "e601",
"unicode_decimal": 58881
},
{
"icon_id": "10950692",
"name": "关 闭",
"font_class": "guanbi",
"unicode": "e602",
"unicode_decimal": 58882
},
{
"icon_id": "10950693",
"name": "首页",
"font_class": "shouye",
"unicode": "e603",
"unicode_decimal": 58883
},
{
"icon_id": "10950694",
"name": "监管",
"font_class": "jianguan",
"unicode": "e604",
"unicode_decimal": 58884
},
{
"icon_id": "10950695",
"name": "汽车",
"font_class": "qiche",
"unicode": "e605",
"unicode_decimal": 58885
},
{
"icon_id": "10950696",
"name": "退出",
"font_class": "tuichu",
"unicode": "e606",
"unicode_decimal": 58886
},
{
"icon_id": "10950697",
"name": "审核",
"font_class": "shenhe",
"unicode": "e607",
"unicode_decimal": 58887
},
{
"icon_id": "10950698",
"name": "已处理 ",
"font_class": "yichuli",
"unicode": "e608",
"unicode_decimal": 58888
},
{
"icon_id": "10950699",
"name": "运行",
"font_class": "yunhang",
"unicode": "e609",
"unicode_decimal": 58889
},
{
"icon_id": "10950700",
"name": "系统",
"font_class": "xitong",
"unicode": "e60a",
"unicode_decimal": 58890
},
{
"icon_id": "10950701",
"name": "执法 (1)",
"font_class": "zhifa",
"unicode": "e60b",
"unicode_decimal": 58891
},
{
"icon_id": "10950702",
"name": "查询",
"font_class": "chaxun",
"unicode": "e60c",
"unicode_decimal": 58892
},
{
"icon_id": "10950703",
"name": "执法",
"font_class": "zhifa1",
"unicode": "e60d",
"unicode_decimal": 58893
}
]
}
/* Logo 字体 */
@font-face {
font-family: "iconfont logo";
src: url('https://at.alicdn.com/t/font_985780_km7mi63cihi.eot?t=1545807318834');
src: url('https://at.alicdn.com/t/font_985780_km7mi63cihi.eot?t=1545807318834#iefix') format('embedded-opentype'),
url('https://at.alicdn.com/t/font_985780_km7mi63cihi.woff?t=1545807318834') format('woff'),
url('https://at.alicdn.com/t/font_985780_km7mi63cihi.ttf?t=1545807318834') format('truetype'),
url('https://at.alicdn.com/t/font_985780_km7mi63cihi.svg?t=1545807318834#iconfont') format('svg');
}
.logo {
font-family: "iconfont logo";
font-size: 160px;
font-style: normal;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
/* tabs */
.nav-tabs {
position: relative;
}
.nav-tabs .nav-more {
position: absolute;
right: 0;
bottom: 0;
height: 42px;
line-height: 42px;
color: #666;
}
#tabs {
border-bottom: 1px solid #eee;
}
#tabs li {
cursor: pointer;
width: 100px;
height: 40px;
line-height: 40px;
text-align: center;
font-size: 16px;
border-bottom: 2px solid transparent;
position: relative;
z-index: 1;
margin-bottom: -1px;
color: #666;
}
#tabs .active {
border-bottom-color: #f00;
color: #222;
}
.tab-container .content {
display: none;
}
/* 页面布局 */
.main {
padding: 30px 100px;
width: 960px;
margin: 0 auto;
}
.main .logo {
color: #333;
text-align: left;
margin-bottom: 30px;
line-height: 1;
height: 110px;
margin-top: -50px;
overflow: hidden;
*zoom: 1;
}
.main .logo a {
font-size: 160px;
color: #333;
}
.helps {
margin-top: 40px;
}
.helps pre {
padding: 20px;
margin: 10px 0;
border: solid 1px #e7e1cd;
background-color: #fffdef;
overflow: auto;
}
.icon_lists {
width: 100% !important;
overflow: hidden;
*zoom: 1;
}
.icon_lists li {
width: 100px;
margin-bottom: 10px;
margin-right: 20px;
text-align: center;
list-style: none !important;
cursor: default;
}
.icon_lists li .code-name {
line-height: 1.2;
}
.icon_lists .icon {
display: block;
height: 100px;
line-height: 100px;
font-size: 42px;
margin: 10px auto;
color: #333;
-webkit-transition: font-size 0.25s linear, width 0.25s linear;
-moz-transition: font-size 0.25s linear, width 0.25s linear;
transition: font-size 0.25s linear, width 0.25s linear;
}
.icon_lists .icon:hover {
font-size: 100px;
}
.icon_lists .svg-icon {
/* 通过设置 font-size 来改变图标大小 */
width: 1em;
/* 图标和文字相邻时,垂直对齐 */
vertical-align: -0.15em;
/* 通过设置 color 来改变 SVG 的颜色/fill */
fill: currentColor;
/* path 和 stroke 溢出 viewBox 部分在 IE 下会显示
normalize.css 中也包含这行 */
overflow: hidden;
}
.icon_lists li .name,
.icon_lists li .code-name {
color: #666;
}
/* markdown 样式 */
.markdown {
color: #666;
font-size: 14px;
line-height: 1.8;
}
.highlight {
line-height: 1.5;
}
.markdown img {
vertical-align: middle;
max-width: 100%;
}
.markdown h1 {
color: #404040;
font-weight: 500;
line-height: 40px;
margin-bottom: 24px;
}
.markdown h2,
.markdown h3,
.markdown h4,
.markdown h5,
.markdown h6 {
color: #404040;
margin: 1.6em 0 0.6em 0;
font-weight: 500;
clear: both;
}
.markdown h1 {
font-size: 28px;
}
.markdown h2 {
font-size: 22px;
}
.markdown h3 {
font-size: 16px;
}
.markdown h4 {
font-size: 14px;
}
.markdown h5 {
font-size: 12px;
}
.markdown h6 {
font-size: 12px;
}
.markdown hr {
height: 1px;
border: 0;
background: #e9e9e9;
margin: 16px 0;
clear: both;
}
.markdown p {
margin: 1em 0;
}
.markdown>p,
.markdown>blockquote,
.markdown>.highlight,
.markdown>ol,
.markdown>ul {
width: 80%;
}
.markdown ul>li {
list-style: circle;
}
.markdown>ul li,
.markdown blockquote ul>li {
margin-left: 20px;
padding-left: 4px;
}
.markdown>ul li p,
.markdown>ol li p {
margin: 0.6em 0;
}
.markdown ol>li {
list-style: decimal;
}
.markdown>ol li,
.markdown blockquote ol>li {
margin-left: 20px;
padding-left: 4px;
}
.markdown code {
margin: 0 3px;
padding: 0 5px;
background: #eee;
border-radius: 3px;
}
.markdown strong,
.markdown b {
font-weight: 600;
}
.markdown>table {
border-collapse: collapse;
border-spacing: 0px;
empty-cells: show;
border: 1px solid #e9e9e9;
width: 95%;
margin-bottom: 24px;
}
.markdown>table th {
white-space: nowrap;
color: #333;
font-weight: 600;
}
.markdown>table th,
.markdown>table td {
border: 1px solid #e9e9e9;
padding: 8px 16px;
text-align: left;
}
.markdown>table th {
background: #F7F7F7;
}
.markdown blockquote {
font-size: 90%;
color: #999;
border-left: 4px solid #e9e9e9;
padding-left: 0.8em;
margin: 1em 0;
}
.markdown blockquote p {
margin: 0;
}
.markdown .anchor {
opacity: 0;
transition: opacity 0.3s ease;
margin-left: 8px;
}
.markdown .waiting {
color: #ccc;
}
.markdown h1:hover .anchor,
.markdown h2:hover .anchor,
.markdown h3:hover .anchor,
.markdown h4:hover .anchor,
.markdown h5:hover .anchor,
.markdown h6:hover .anchor {
opacity: 1;
display: inline-block;
}
.markdown>br,
.markdown>p>br {
clear: both;
}
.hljs {
display: block;
background: white;
padding: 0.5em;
color: #333333;
overflow-x: auto;
}
.hljs-comment,
.hljs-meta {
color: #969896;
}
.hljs-string,
.hljs-variable,
.hljs-template-variable,
.hljs-strong,
.hljs-emphasis,
.hljs-quote {
color: #df5000;
}
.hljs-keyword,
.hljs-selector-tag,
.hljs-type {
color: #a71d5d;
}
.hljs-literal,
.hljs-symbol,
.hljs-bullet,
.hljs-attribute {
color: #0086b3;
}
.hljs-section,
.hljs-name {
color: #63a35c;
}
.hljs-tag {
color: #333333;
}
.hljs-title,
.hljs-attr,
.hljs-selector-id,
.hljs-selector-class,
.hljs-selector-attr,
.hljs-selector-pseudo {
color: #795da3;
}
.hljs-addition {
color: #55a532;
background-color: #eaffea;
}
.hljs-deletion {
color: #bd2c00;
background-color: #ffecec;
}
.hljs-link {
text-decoration: underline;
}
/* 代码高亮 */
/* PrismJS 1.15.0
https://prismjs.com/download.html#themes=prism&languages=markup+css+clike+javascript */
/**
* prism.js default theme for JavaScript, CSS and HTML
* Based on dabblet (http://dabblet.com)
* @author Lea Verou
*/
code[class*="language-"],
pre[class*="language-"] {
color: black;
background: none;
text-shadow: 0 1px white;
font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace;
text-align: left;
white-space: pre;
word-spacing: normal;
word-break: normal;
word-wrap: normal;
line-height: 1.5;
-moz-tab-size: 4;
-o-tab-size: 4;
tab-size: 4;
-webkit-hyphens: none;
-moz-hyphens: none;
-ms-hyphens: none;
hyphens: none;
}
pre[class*="language-"]::-moz-selection,
pre[class*="language-"] ::-moz-selection,
code[class*="language-"]::-moz-selection,
code[class*="language-"] ::-moz-selection {
text-shadow: none;
background: #b3d4fc;
}
pre[class*="language-"]::selection,
pre[class*="language-"] ::selection,
code[class*="language-"]::selection,
code[class*="language-"] ::selection {
text-shadow: none;
background: #b3d4fc;
}
@media print {
code[class*="language-"],
pre[class*="language-"] {
text-shadow: none;
}
}
/* Code blocks */
pre[class*="language-"] {
padding: 1em;
margin: .5em 0;
overflow: auto;
}
:not(pre)>code[class*="language-"],
pre[class*="language-"] {
background: #f5f2f0;
}
/* Inline code */
:not(pre)>code[class*="language-"] {
padding: .1em;
border-radius: .3em;
white-space: normal;
}
.token.comment,
.token.prolog,
.token.doctype,
.token.cdata {
color: slategray;
}
.token.punctuation {
color: #999;
}
.namespace {
opacity: .7;
}
.token.property,
.token.tag,
.token.boolean,
.token.number,
.token.constant,
.token.symbol,
.token.deleted {
color: #905;
}
.token.selector,
.token.attr-name,
.token.string,
.token.char,
.token.builtin,
.token.inserted {
color: #690;
}
.token.operator,
.token.entity,
.token.url,
.language-css .token.string,
.style .token.string {
color: #9a6e3a;
background: hsla(0, 0%, 100%, .5);
}
.token.atrule,
.token.attr-value,
.token.keyword {
color: #07a;
}
.token.function,
.token.class-name {
color: #DD4A68;
}
.token.regex,
.token.important,
.token.variable {
color: #e90;
}
.token.important,
.token.bold {
font-weight: bold;
}
.token.italic {
font-style: italic;
}
.token.entity {
cursor: help;
}
@font-face {font-family: "iconfont";
src: url('iconfont.eot?t=1568799704253'); /* IE9 */
src: url('iconfont.eot?t=1568799704253#iefix') format('embedded-opentype'), /* IE6-IE8 */
url('data:application/x-font-woff2;charset=utf-8;base64,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') format('woff2'),
url('iconfont.woff?t=1568799704253') format('woff'),
url('iconfont.ttf?t=1568799704253') format('truetype'), /* chrome, firefox, opera, Safari, Android, iOS 4.2+ */
url('iconfont.svg?t=1568799704253#iconfont') format('svg'); /* iOS 4.1- */
}
.iconfont {
font-family: "iconfont" !important;
font-size: 16px;
font-style: normal;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
[class^="gy-icon"], [class*=" gy-icon"] {
font-family:"iconfont" !important;
/* 以下内容参照第三方图标库本身的规则 */
font-size: 18px;
font-style:normal;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
.gy-icon-shipin1:before {
content: "\e600";
}
.gy-icon-daichuli:before {
content: "\e601";
}
.gy-icon-guanbi:before {
content: "\e602";
}
.gy-icon-shouye:before {
content: "\e603";
}
.gy-icon-jianguan:before {
content: "\e604";
}
.gy-icon-qiche:before {
content: "\e605";
}
.gy-icon-tuichu:before {
content: "\e606";
}
.gy-icon-shenhe:before {
content: "\e607";
}
.gy-icon-yichuli:before {
content: "\e608";
}
.gy-icon-yunhang:before {
content: "\e609";
}
.gy-icon-xitong:before {
content: "\e60a";
}
.gy-icon-zhifa:before {
content: "\e60b";
}
.gy-icon-chaxun:before {
content: "\e60c";
}
.gy-icon-zhifa1:before {
content: "\e60d";
}
No preview for this file type
{
"id": "1423038",
"name": "贵阳公交",
"font_family": "iconfont",
"css_prefix_text": "icon-",
"description": "",
"glyphs": [
{
"icon_id": "9533417",
"name": "球机",
"font_class": "shipin1",
"unicode": "e600",
"unicode_decimal": 58880
},
{
"icon_id": "10950691",
"name": "待处理",
"font_class": "daichuli",
"unicode": "e601",
"unicode_decimal": 58881
},
{
"icon_id": "10950692",
"name": "关 闭",
"font_class": "guanbi",
"unicode": "e602",
"unicode_decimal": 58882
},
{
"icon_id": "10950693",
"name": "首页",
"font_class": "shouye",
"unicode": "e603",
"unicode_decimal": 58883
},
{
"icon_id": "10950694",
"name": "监管",
"font_class": "jianguan",
"unicode": "e604",
"unicode_decimal": 58884
},
{
"icon_id": "10950695",
"name": "汽车",
"font_class": "qiche",
"unicode": "e605",
"unicode_decimal": 58885
},
{
"icon_id": "10950696",
"name": "退出",
"font_class": "tuichu",
"unicode": "e606",
"unicode_decimal": 58886
},
{
"icon_id": "10950697",
"name": "审核",
"font_class": "shenhe",
"unicode": "e607",
"unicode_decimal": 58887
},
{
"icon_id": "10950698",
"name": "已处理 ",
"font_class": "yichuli",
"unicode": "e608",
"unicode_decimal": 58888
},
{
"icon_id": "10950699",
"name": "运行",
"font_class": "yunhang",
"unicode": "e609",
"unicode_decimal": 58889
},
{
"icon_id": "10950700",
"name": "系统",
"font_class": "xitong",
"unicode": "e60a",
"unicode_decimal": 58890
},
{
"icon_id": "10950701",
"name": "执法 (1)",
"font_class": "zhifa",
"unicode": "e60b",
"unicode_decimal": 58891
},
{
"icon_id": "10950702",
"name": "查询",
"font_class": "chaxun",
"unicode": "e60c",
"unicode_decimal": 58892
},
{
"icon_id": "10950703",
"name": "执法",
"font_class": "zhifa1",
"unicode": "e60d",
"unicode_decimal": 58893
}
]
}
No preview for this file type
No preview for this file type
No preview for this file type
No preview for this file type
<?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="1568788031197" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="28427" xmlns:xlink="http://www.w3.org/1999/xlink" width="80" height="80"><defs><style type="text/css"></style></defs><path d="M753.40182882 759.75665253a19.59403977 19.59403977 0 0 1-13.85025679-5.74378297L267.74664771 282.20794526a19.55330372 19.55330372 0 1 1 27.7005136-27.7005136l471.84566037 471.84566036a19.63477582 19.63477582 0 0 1-13.89099286 33.40356051" fill="#434243" p-id="28428"></path><path d="M281.59690452 759.75665253a19.55330372 19.55330372 0 0 1-13.85025681-33.44429657l471.84566036-471.80492431a19.59403977 19.59403977 0 0 1 27.65977756 27.70051361L295.44716131 754.01286957a19.55330372 19.55330372 0 0 1-13.8502568 5.74378296" fill="#434243" p-id="28429"></path></svg>
\ No newline at end of file
<?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="1568787979891" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="25564" xmlns:xlink="http://www.w3.org/1999/xlink" width="80" height="80"><defs><style type="text/css"></style></defs><path d="M511.147576 1024c-156.50093 0-447.366145-228.522246-447.366145-444.586195V149.448092l42.214067-0.617767a662.349002 662.349002 0 0 0 204.892665-42.111105A937.409683 937.409683 0 0 0 486.436903 17.709316h0.514806a75.367553 75.367553 0 0 1 24.710673-17.709316 66.04957 66.04957 0 0 1 25.225479 17.657835l0.514806 0.308884a904.56508 904.56508 0 0 0 175.54874 89.009904 662.349002 662.349002 0 0 0 204.892665 42.111105l41.699261 0.617767v429.965713c0 215.806546-291.894827 444.328792-448.395757 444.328792z m0-947.242471a1203.873108 1203.873108 0 0 1-176.063546 85.766628 812.929667 812.929667 0 0 1-202.318636 47.928409l-2.574029 0.308884v372.153034c0 178.843497 271.302599 383.684682 382.500629 383.684681s381.985823-204.841184 381.985822-383.684681V210.452566h-3.088834a825.387964 825.387964 0 0 1-201.803831-47.928409 1120.989392 1120.989392 0 0 1-176.063546-85.715148l-1.029611-0.92665zM260.437205 408.395355V302.963149h217.762807L476.140789 298.896184a213.592881 213.592881 0 0 0-13.384947-28.262832l58.173043-9.266503c3.60364 10.296114 8.751697 24.298829 12.870142 39.485597l0.514806 2.110703h220.851641V405.306521h-53.024986V350.016389H314.491803V408.395355H260.437205z m223.940476 371.380825v-110.013976H367.001983v29.189483H312.947385V423.273239h171.430296v-45.560304h55.084208v45.611785h172.974713v273.876627h-54.054598v-27.387662H539.461889v109.653612H484.377681z m55.084208-157.221658h118.920115v-52.613141H539.461889v52.613141z m-172.459906 0h117.375698v-52.613141H367.001983v52.613141z m172.459906-97.813081h118.920115V470.583882H539.461889v53.900156z m-172.459906 0h117.375698V470.583882H367.001983v53.900156z" p-id="25565"></path></svg>
\ No newline at end of file
<?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="1568788011511" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="27069" xmlns:xlink="http://www.w3.org/1999/xlink" width="80" height="80"><defs><style type="text/css"></style></defs><path d="M248.32 93.696H157.696c-49.664 0-89.6 39.936-89.6 89.6v716.8c0 49.664 39.936 89.6 89.6 89.6h315.392v-59.904H157.696c-16.384 0-29.696-13.312-29.696-29.696v-716.8c0-16.384 13.312-29.696 29.696-29.696h90.624V93.696zM660.48 153.6V93.696h94.72c49.664 0 89.6 39.936 89.6 89.6v295.424h-59.904V183.296c0-16.384-13.312-29.696-29.696-29.696H660.48zM367.104 93.696h180.224V153.6H367.104V93.696zM307.2 34.304c19.968 0 29.696 9.728 29.696 29.696v119.296c0 19.968-9.728 29.696-29.696 29.696s-29.696-9.728-29.696-29.696V64c0-19.968 9.728-29.696 29.696-29.696zM605.696 34.304c19.968 0 29.696 9.728 29.696 29.696v119.296c0 19.968-9.728 29.696-29.696 29.696s-29.696-9.728-29.696-29.696V64c0-19.968 9.728-29.696 29.696-29.696z" p-id="27070"></path><path d="M217.6 303.104H665.6c19.968 0 29.696 9.728 29.696 29.696s-9.728 29.696-29.696 29.696H217.6c-19.968 0-29.696-9.728-29.696-29.696s9.728-29.696 29.696-29.696zM217.6 452.096h328.704c19.968 0 29.696 9.728 29.696 29.696s-9.728 29.696-29.696 29.696H217.6c-19.968 0-29.696-9.728-29.696-29.696 0-19.456 9.728-29.696 29.696-29.696zM217.6 601.6h179.2c19.968 0 29.696 9.728 29.696 29.696s-9.728 29.696-29.696 29.696h-179.2c-19.968 0-29.696-9.728-29.696-29.696s9.728-29.696 29.696-29.696zM695.296 921.6c94.208 0 170.496-76.288 170.496-170.496s-76.288-170.496-170.496-170.496-170.496 76.288-170.496 170.496 76.288 170.496 170.496 170.496z m0 68.096c-132.096 0-239.104-107.008-239.104-239.104s107.008-239.104 239.104-239.104 239.104 107.008 239.104 239.104-107.008 239.104-239.104 239.104z" p-id="27071"></path><path d="M819.2 676.352c-10.24-10.24-26.112-9.728-35.84 0l-121.344 122.88-65.536-62.976c-9.728-9.216-25.088-8.704-34.304 0.512l-1.536 1.536c-9.216 9.728-8.704 25.088 0.512 34.304l84.48 80.896c6.144 5.632 14.336 7.68 22.016 6.144 5.12-1.024 9.728-3.072 13.312-7.168l138.752-140.288c9.216-9.728 9.216-26.112-0.512-35.84z" p-id="27072"></path></svg>
\ No newline at end of file
<?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="1568787997980" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="26322" xmlns:xlink="http://www.w3.org/1999/xlink" width="80" height="80"><defs><style type="text/css"></style></defs><path d="M191.6 209.3h153.2v57.4h334.4v-57.4h153.2v252.5h46.4v-299H679.2V99.5H344.8v63.3H145.1v761.6h277.6V878H191.6V209.3zM391.3 146h241.5v74.3H391.3V146zM303 524.8h139.3v46.4H303v-46.4z m418-93.5H303v-46.4h418v46.4z m-57 65.9c-118 0-213.6 95.7-213.6 213.6 0 118 95.7 213.6 213.6 213.6 118 0 213.6-95.7 213.6-213.6 0.1-117.9-95.6-213.6-213.6-213.6z m118.3 331.9C750.7 860.7 708.7 878 664 878s-86.7-17.4-118.2-48.9c-31.6-31.6-48.9-73.6-48.9-118.2 0-44.7 17.4-86.6 48.9-118.2 23.1-23.1 51.7-38.5 82.9-45.2v201.4h146.7v-46.4H675.2V544c40.5 2.6 78.1 19.7 107.1 48.6 31.6 31.6 48.9 73.6 48.9 118.2 0 44.7-17.4 86.7-48.9 118.3z m0 0" p-id="26323"></path></svg>
\ No newline at end of file
<?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="1568787775350" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="17372" xmlns:xlink="http://www.w3.org/1999/xlink" width="80" height="80"><defs><style type="text/css"></style></defs><path d="M914.37 286H572.31V60.21a60.21 60.21 0 1 0-120.42 0V286H109.83a60.2 60.2 0 0 0 0 120.4h94.42l-63.7 118a320.78 320.78 0 0 0-15.13 32.71h-0.53l-3.82 10.75c-19.68 55.61-12.42 99.47 22.17 134.12a128.53 128.53 0 0 0 181.52 0c29.72-29.72 39.75-68.34 29.78-112.59h0.19l-0.47-1.63c-0.33-1.37-0.85-2.8-1.21-4.18l-4.28-14.78c-0.13-0.44-0.43-1-0.57-1.4l-3.67-10.29h-0.49a294.4 294.4 0 0 0-16.34-32.9l-63.6-117.8h187.79v496.64H316.62a60.2 60.2 0 0 0 0 120.4h391a60.2 60.2 0 0 0 0-120.4H572.31V406.41h187.23l-63.71 117.94a323.82 323.82 0 0 0-15.15 32.75h-0.51l-3.82 10.75c-0.3 0.84-0.31 1.56-0.59 2.4l-5.7 19.13h0.94c-10.33 43.85-3 80.21 24.7 109.65 23.21 24.72 56.62 39.2 91.67 39.75h2c34.29 0 67.24-13.37 90.74-36.85 29.65-29.72 39.67-68.33 29.7-112.55h0.23l-6-20.59c-0.2-0.68-0.67-1.5-0.89-2.2l-3.39-9.49h-0.47A299.74 299.74 0 0 0 883 524.2l-63.64-117.79h95a60.2 60.2 0 0 0 0-120.4zM302 679.18a96.22 96.22 0 0 1-135.9 0c-23.16-23.16-29-51.91-18.06-89.8h173.42c10.22 36.47 3.67 66.62-19.46 89.8z m7-122.08H160.09c2.64-5.54 5.65-11.34 8.92-17.58l65.18-120.69 65.39 121.05c2.88 5.04 6.28 11.12 9.42 17.22z m548.29 122c-17.79 17.85-44.91 27.07-69.42 27.4-26.36-0.42-51.41-11.18-68.66-29.59-21.4-22.76-26.56-50.79-15.92-87.57h173.4c10.22 36.51 3.72 66.66-19.4 89.8z m7-122H715.37c2.68-5.67 5.69-11.51 8.91-17.58l65.14-120.65 65.4 121c3.05 5.36 6.4 11.32 9.46 17.23z m50.09-193.67h-385V946h178.2a17.22 17.22 0 0 1 0 34.44h-391a17.22 17.22 0 0 1 0-34.44h178.29V363.43h-385a17.22 17.22 0 0 1 0-34.44h385V60.21a17.23 17.23 0 1 1 34.46 0V329h385a17.22 17.22 0 0 1 0 34.44z" fill="#666666" p-id="17373"></path></svg>
\ No newline at end of file
<?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="1568787760741" class="icon" viewBox="0 0 1031 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="16591" xmlns:xlink="http://www.w3.org/1999/xlink" width="80.546875" height="80"><defs><style type="text/css"></style></defs><path d="M924.318401 265.627452H744.184177V107.366967A107.491426 107.491426 0 0 0 636.81721 0H394.868157A107.491426 107.491426 0 0 0 287.50119 107.366967v158.260485H107.366967A107.491426 107.491426 0 0 0 0 372.994419v543.638614a107.491426 107.491426 0 0 0 107.366967 107.366967H924.318401a107.470683 107.470683 0 0 0 107.366966-107.283994V372.994419A107.491426 107.491426 0 0 0 924.318401 265.627452zM358.360069 107.283994a36.559946 36.559946 0 0 1 36.508088-36.508088v0.082973H636.81721a36.559946 36.559946 0 0 1 36.508088 36.508088v158.260485H358.360069V107.283994z m603.991047 556.955769h-1.566114v252.372527a36.559946 36.559946 0 0 1-36.508088 36.508088H107.366967a36.559946 36.559946 0 0 1-36.508088-36.508088V664.250134h-0.352635v-38.893559h0.394122v-252.445129a36.559946 36.559946 0 0 1 36.508087-36.508087v0.082973h816.951434a36.559946 36.559946 0 0 1 36.508088 36.508087v252.372528h1.524627v38.893559z" fill="#3688FF" p-id="16592"></path><path d="M579.700722 543.586756H451.984645a63.733579 63.733579 0 0 0-63.712836 63.660978v18.119213h6.22297v38.893559h-6.22297v18.119213a63.733579 63.733579 0 0 0 63.660978 63.660977h127.767935a63.723208 63.723208 0 0 0 63.712836-63.619491v-18.171071h-5.082092v-38.893559h5.082092v-18.108841a63.733579 63.733579 0 0 0-63.712836-63.660978z m21.645562 138.792963a21.676677 21.676677 0 0 1-21.645562 21.645562H451.984645a21.676677 21.676677 0 0 1-21.645562-21.645562v-75.183843a21.676677 21.676677 0 0 1 21.645562-21.645563h127.716077a21.676677 21.676677 0 0 1 21.645562 21.645563v75.121613z" fill="#3688FF" p-id="16593"></path><path d="M643.3617 625.366947h-5.040605v38.893559h324.030021v-38.893559H643.3617zM394.536265 664.260506v-38.893559H70.506244v38.893559H394.536265z" fill="#3688FF" p-id="16594"></path></svg>
\ No newline at end of file
<?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="1568787814131" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="18101" xmlns:xlink="http://www.w3.org/1999/xlink" width="80" height="80"><defs><style type="text/css"></style></defs><path d="M558.2848 897.792h-387.072V129.28h665.6v468.992c0 17.92 14.336 31.744 31.744 31.744 17.408 0 31.744-14.336 31.744-31.744v-468.992c0.512-35.328-28.16-64-63.488-64h-665.6c-35.328 0-64 28.672-64 64v768c0 35.328 28.672 64 64 64h387.072c17.92 0 31.744-14.336 31.744-31.744 0-17.408-14.336-31.744-31.744-31.744z" p-id="18102"></path><path d="M755.9168 326.912c0-17.92-14.336-31.744-31.744-31.744h-409.6c-17.92 0-31.744 14.336-31.744 31.744 0 17.92 14.336 31.744 31.744 31.744h409.6c17.92 0 31.744-14.336 31.744-31.744zM314.5728 475.392c-17.92 0-31.744 14.336-31.744 31.744 0 17.408 14.336 31.744 31.744 31.744h219.136c17.92 0 31.744-14.336 31.744-31.744 0-17.408-14.336-31.744-31.744-31.744h-219.136zM905.9328 882.432l-95.232-79.872c8.192-17.92 12.8-37.376 12.8-57.344 0-76.288-61.952-138.752-138.752-138.752-76.288 0-138.752 61.952-138.752 138.752 0 76.288 61.952 138.752 138.752 138.752 29.184 0 57.856-9.216 81.408-26.624l4.096-4.096 93.696 78.848c13.312 11.264 33.792 9.728 45.056-4.096 11.264-13.824 10.24-34.304-3.072-45.568z m-221.184-58.88c-43.008 0-77.824-34.816-77.824-77.824 0-43.008 34.816-77.824 77.824-77.824 43.008 0 77.824 34.816 77.824 77.824 0.512 42.496-34.816 77.824-77.824 77.824z" p-id="18103"></path></svg>
\ No newline at end of file
<?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="1568787834823" class="icon" viewBox="0 0 1282 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="18933" xmlns:xlink="http://www.w3.org/1999/xlink" width="100.15625" height="80"><defs><style type="text/css"></style></defs><path d="M1236.628095 409.23114a263.208634 263.208634 0 0 0-80.987272-59.206604L1083.24311 150.317285c-19.019738-61.353994-75.158643-150.317285-175.472422-150.317285H374.29771c-100.31378 0-156.452685 88.042981-175.472423 150.317285l-72.397713 199.707251a263.208634 263.208634 0 0 0-80.987272 59.206604 193.878621 193.878621 0 0 0-45.095185 122.707988v206.762959a49.389965 49.389965 0 0 0 33.744697 52.764435V920.30991a102.1544 102.1544 0 0 0 102.154399 102.46117h70.863864A102.1544 102.1544 0 0 0 308.955707 920.30991v-57.979525s214.738979 18.406198 331.311567 18.406198 331.311567-18.406198 331.311567-18.406198V920.30991A102.1544 102.1544 0 0 0 1074.040011 1023.998159h71.170633A102.1544 102.1544 0 0 0 1247.978584 920.30991v-128.843388a49.389965 49.389965 0 0 0 33.744697-53.071205v-206.762959a193.878621 193.878621 0 0 0-45.095186-122.401218zM248.215252 168.109943C261.713131 122.707988 303.127077 61.353994 372.15032 61.353994h537.767757c69.023243 0 110.130419 61.353994 122.707988 106.14241l66.875854 180.073972h-920.30991zM215.084096 968.472795H129.188504a39.880096 39.880096 0 0 1-40.186866-40.493636v-117.186129c8.282789 2.76093 165.655784 39.880096 165.655784 39.880096v76.999263A40.493636 40.493636 0 0 1 215.084096 968.472795z m978.596204-40.493636a39.880096 39.880096 0 0 1-40.186866 40.493636h-85.895592a40.493636 40.493636 0 0 1-40.186866-40.800406v-76.999263s157.372995-37.119166 165.655784-39.880096zM1227.424996 736.247928s-198.173401 81.907582-586.850952 81.907582S54.336632 736.247928 54.336632 736.247928v-205.22911c0-37.732706 43.561336-122.707988 118.106438-122.707988h937.182258c74.545103 0 118.413208 86.202362 118.106438 122.707988C1227.424996 557.707805 1227.424996 736.247928 1227.424996 736.247928z" p-id="18934"></path><path d="M301.593227 600.348831m-63.808153 0a63.808154 63.808154 0 1 0 127.616307 0 63.808154 63.808154 0 1 0-127.616307 0Z" p-id="18935"></path><path d="M980.475171 600.348831m-63.808154 0a63.808154 63.808154 0 1 0 127.616307 0 63.808154 63.808154 0 1 0-127.616307 0Z" p-id="18936"></path></svg>
\ No newline at end of file
<?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="1568787683450" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="9348" xmlns:xlink="http://www.w3.org/1999/xlink" width="80" height="80"><defs><style type="text/css"></style></defs><path d="M172.503 946.611v-51.087H362.78v-79.106c0-8.84 7.193-16.033 16.03-16.033h266.38c8.846 0 16.039 7.193 16.039 16.033v79.106H851.48v51.087H172.503z m-41.048-228.313c-29.825 0-54.085-24.259-54.085-54.085V131.457c0-29.815 24.264-54.07 54.085-54.07h761.094c29.82 0 54.08 24.254 54.08 54.07v532.756c0 29.825-24.26 54.085-54.08 54.085H131.455z m19.03-589.854c-12.14 0-22.012 9.88-22.012 22.019v494.689c0 12.14 9.873 22.012 22.012 22.012H873.52c12.14 0 22.017-9.873 22.017-22.012V150.464c0-12.14-9.878-22.019-22.017-22.019H150.485z m0 0" fill="" p-id="9349"></path><path d="M513.294 505.826c-51.49 0-97.627-31.92-127.26-58.7-28.012-25.307-47.074-51.087-51.618-57.454 3.628-6.513 18.376-31.534 44.133-57.053 26.943-26.692 71.332-58.508 129.795-58.508 58.507 0 104.9 31.574 133.523 58.06 26.784 24.788 43.557 50.086 47.673 56.593-4.495 6.54-22.985 32.466-50.313 57.873-29.04 27.001-74.467 59.19-125.933 59.19z m-1.289-205.691c-49.536 0-89.839 40.303-89.839 89.839s40.303 89.834 89.84 89.834c49.53 0 89.828-40.298 89.828-89.834s-40.298-89.84-89.829-89.84z m0.262 141.512c-6.77 0-13.661-1.37-19.922-3.96a52.541 52.541 0 0 1-16.885-11.282 52.425 52.425 0 0 1-11.283-16.891c-2.191-5.289-3.53-11.132-3.874-16.905l-0.302-5.012a52.582 52.582 0 0 1 3.909-17.545c2.599-6.262 6.498-12.105 11.288-16.885a52.41 52.41 0 0 1 16.885-11.29 52.514 52.514 0 0 1 19.922-3.959c6.775 0 13.661 1.37 19.917 3.96a52.514 52.514 0 0 1 16.885 11.289 52.375 52.375 0 0 1 11.283 16.885c2.191 5.289 3.53 11.133 3.875 16.905l0.296 4.987a52.517 52.517 0 0 1-3.909 17.565c-2.584 6.256-6.488 12.094-11.283 16.896a52.518 52.518 0 0 1-16.885 11.283 52.605 52.605 0 0 1-19.917 3.959z m0 0" fill="" p-id="9350"></path></svg>
\ No newline at end of file
<?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="1568787851610" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="19690" xmlns:xlink="http://www.w3.org/1999/xlink" width="80" height="80"><defs><style type="text/css"></style></defs><path d="M507.351709 718.583244a213.767643 213.767643 0 1 1 205.216937-213.586995 209.733155 209.733155 0 0 1-205.216937 213.586995z m0-355.697315a142.230753 142.230753 0 1 0 136.570426 142.11032 139.521022 139.521022 0 0 0-136.570426-142.11032zM373.731878 1024h-1.324757a31.252227 31.252227 0 0 1-8.49049-1.505406h-0.903244a509.369153 509.369153 0 0 1-204.373909-124.045449l-0.541947-0.541946a29.44574 29.44574 0 0 1-2.228-2.468866 26.796226 26.796226 0 0 1-1.987136-2.709731l-1.565622-2.589298v-0.421514a23.062819 23.062819 0 0 1-1.264541-2.649514v-0.541946l-0.903244-2.649515v-0.662378c0-0.903244-0.48173-1.806487-0.662379-2.709731v-0.541946c0-0.96346-0.361297-1.987136-0.481729-2.950596v-1.384973a25.652117 25.652117 0 0 1 0-3.010812 29.746821 29.746821 0 0 1 0-3.311893 41.007258 41.007258 0 0 1 1.023676-6.623786c0-1.023676 0.602162-2.047352 0.963459-3.010812l1.204325-2.950596v-0.48173l1.384974-2.649514v-0.96346a125.731504 125.731504 0 0 0 19.630493-67.803483 120.432475 120.432475 0 0 0-117.78296-122.540043H42.241491v-3.37211l-0.421514 3.37211H36.219867l-1.023676-0.361298H34.774677l-1.023676-0.48173-0.782811-0.361297-0.843027-0.361298-0.602163-0.361297-0.782811-0.421514-0.602162-0.361297-0.782811-0.48173-0.541946-0.301081-0.843028-0.541946-0.602162-0.48173-0.662379-0.48173-0.782811-0.602162-0.541946-0.48173-0.722595-0.662379-0.48173-0.421514-0.782811-0.722594-0.421513-0.48173-0.782811-0.843028-0.361298-0.421513-0.782811-0.903244 2.348433-2.348433-2.408649 2.167784-0.722595-0.903243v-0.421514a8.129192 8.129192 0 0 1-0.662379-0.903243l-0.361297-0.541947-0.602162-0.843027-1.625839-3.311893-0.361297-0.662379-0.421514-0.782811v-0.662378l-0.48173-1.023676v-0.541946l-0.48173-1.023676v-0.48173l-0.48173-1.324758v-0.602162l-0.48173-1.44519-0.361297-1.384973a0.722595 0.722595 0 0 0 0-0.361298v-0.722594a557.481926 557.481926 0 0 1 0-242.490789v-0.903243l0.361297-1.44519v-0.301081a13.548653 13.548653 0 0 1 0.421514-1.384974l0.541946-1.445189a4.937731 4.937731 0 0 1 0.541946-1.204325 1.92692 1.92692 0 0 1 0-0.48173l0.541946-1.083892v-0.602162l0.361298-0.722595 0.421514-0.722595 0.361297-0.662379 0.602162-0.843027 0.361298-0.602163 0.602162-0.903243 0.361298-0.48173 0.722594-0.903244V376.073285l0.782812-0.903244 0.481729-0.541946 0.662379-0.662378 0.361297-0.421514 0.602163-0.541946 0.421514-0.421514 0.662378-0.602162 0.602162-0.48173 0.541947-0.48173 0.903243-0.662379 0.421514-0.361297 0.843027-0.602162h0.541946l0.96346-0.602163h0.361298l1.144108-0.602162 1.204325-0.541946 1.204325-0.541946h0.421513l1.144109-0.421514h0.48173l1.083892-0.361297h17.884222a120.432475 120.432475 0 0 0 117.782961-122.540044A125.370206 125.370206 0 0 0 151.955475 175.914512v-0.48173l-0.361297-0.541946c-0.48173-0.843027-1.023676-1.746271-1.44519-2.649515v-0.361297a32.938282 32.938282 0 0 1-2.288217-6.021624c0-0.96346-0.421514-1.92692-0.602162-2.890379v-4.576434c0-1.083892 0-2.167785-0.421514-3.311893v-3.251677a29.566173 29.566173 0 0 1 0.782811-6.503354v-0.843027c0-0.903244 0.421514-1.806487 0.722595-2.709731v-0.602162c0-1.023676 0.662379-1.806487 0.96346-2.649515v-0.602162a27.639253 27.639253 0 0 1 1.264541-2.649515v-0.421513l1.625838-2.589298a28.301632 28.301632 0 0 1 1.987136-2.709731 45.583692 45.583692 0 0 1 2.288217-2.529082l0.662379-0.602162A510.091747 510.091747 0 0 1 362.351009 2.190667h0.421514A34.684553 34.684553 0 0 1 372.407121 0.323963h1.384973a32.697417 32.697417 0 0 1 10.116328 1.565623l0.96346 0.361297h0.361297l1.023676 0.421514h0.96346l1.144108 0.541946a34.744769 34.744769 0 0 1 16.077736 16.740114l0.48173 0.662378v0.361298a115.856041 115.856041 0 0 0 212.804183-0.602163 35.768445 35.768445 0 0 1 14.873411-16.3186l0.722594-0.421514 0.722595-0.361297 0.903244-0.421514 0.722595-0.301081h0.541946l0.843027-0.361297h0.782811a32.516768 32.516768 0 0 1 21.015467-0.602163h0.421514a510.21218 510.21218 0 0 1 205.999748 125.249774h1.92692v1.987136l1.384973 1.565622 0.361298 0.421514c0.602162 0.722595 1.144109 1.565622 1.686054 2.348433l1.565622 2.709731v0.361297a23.725198 23.725198 0 0 1 1.264541 2.709731v0.421514a20.473521 20.473521 0 0 1 1.023676 2.830163v0.361297c0 1.083892 0.602162 2.047352 0.782811 3.010812a1.083892 1.083892 0 0 1 0 0.421514 27.097307 27.097307 0 0 1 0.541947 3.131244 34.985634 34.985634 0 0 1-0.843028 13.006707v0.421514a25.230603 25.230603 0 0 1-0.96346 2.950596 39.923365 39.923365 0 0 1-1.204324 2.830163v0.541946l-1.384974 2.529082v0.541946a125.430423 125.430423 0 0 0-19.028331 66.90024 120.432475 120.432475 0 0 0 117.782961 122.540043h6.443137a36.49104 36.49104 0 0 1 3.673191 0 8.972219 8.972219 0 0 1 1.806487 0h5.419461l1.144109 0.421514 1.204324 0.541946 1.264541 0.602162h0.361298l1.625838 4.094704 1.204325 0.662379h0.421514l0.903243 0.602162 0.782811 0.541947 0.48173 0.361297 1.083892 0.843027a36.129742 36.129742 0 0 1 6.503354 7.466814 4.757083 4.757083 0 0 0 0.421514 0.722595l0.48173 0.782811 0.602162 1.083892v0.541946a2.709731 2.709731 0 0 1 0 0.602162l0.541946 1.083893 0.541946 1.324757a48.17299 48.17299 0 0 1 1.505406 5.058164 557.241061 557.241061 0 0 1 0 243.875762 37.876013 37.876013 0 0 1-1.505406 5.11838l-0.541946 1.144108c0 0.421514-0.421514 0.722595-0.541946 1.083893l-0.361297 0.602162a2.589298 2.589298 0 0 1 0 0.662379 3.432326 3.432326 0 0 1-0.361298 0.662378l-0.361297 0.602163-0.541946 0.963459-0.541947 0.903244v0.361297a42.994394 42.994394 0 0 1-3.071028 3.733407l-1.144108 1.144109a6.021624 6.021624 0 0 1-1.023676 0.963459l-0.421514 0.361298-0.722595 0.541946-0.903243 0.662379a7.828111 7.828111 0 0 1-1.083893 0.722594 33.179147 33.179147 0 0 1-7.225948 3.552758h-4.817299l-0.602162-3.311893 0.541946 3.311893H970.113493a120.432475 120.432475 0 0 0-117.78296 122.540044 126.454099 126.454099 0 0 0 18.968115 66.840023 2.589298 2.589298 0 0 0 0 0.421514 25.049955 25.049955 0 0 1 1.384973 2.529082v0.541946c0.48173 0.903244 0.843027 1.806487 1.204325 2.709731v0.361297l0.96346 3.010812a30.108119 30.108119 0 0 1 0.722595 3.251677v0.301081a33.660877 33.660877 0 0 1 0.48173 6.503354v3.432325a30.108119 30.108119 0 0 1-0.541947 3.010812v0.48173l-0.722594 2.830163v0.48173l-0.96346 2.830163v0.541946a25.591901 25.591901 0 0 1-1.264541 2.649515v0.48173a38.297527 38.297527 0 0 1-1.565622 2.649514c-0.722595 1.083892-1.384973 1.92692-2.047352 2.769947l-1.987136 2.228001a509.489585 509.489585 0 0 1-206.902992 125.972368 31.794173 31.794173 0 0 1-9.935679 1.565623H646.57165a31.432876 31.432876 0 0 1-4.275353-0.782811h-0.48173l-1.324757-0.361298-1.083893-0.361297h-0.541946l-0.782811-0.301081-0.722595-0.301082h-0.421513l-1.023676-0.48173h-0.361298a35.226499 35.226499 0 0 1-16.077735-16.920762 115.856041 115.856041 0 0 0-212.8644-0.662379v0.301081l-0.421513 0.662379a36.129742 36.129742 0 0 1-15.957303 16.619681l-1.023676 0.48173-0.662379 0.361298h-0.602162l-3.010812 2.408649 1.083892 3.191461-0.843027 0.361297h-0.722595l-1.324757 0.421514a31.673741 31.673741 0 0 1-9.514166 1.44519z m137.654319-162.583841a184.261687 184.261687 0 0 1 153.31054 83.640354 437.591398 437.591398 0 0 0 134.703723-82.315597 200.580287 200.580287 0 0 1 32.396336-209.01056 183.779957 183.779957 0 0 1 116.277555-62.384022 485.88482 485.88482 0 0 0 0-158.428921 183.659524 183.659524 0 0 1-116.277555-62.384022 200.580287 200.580287 0 0 1-32.396336-209.01056 438.133344 438.133344 0 0 0-134.703723-82.375813 182.274551 182.274551 0 0 1-306.560865 0 438.073127 438.073127 0 0 0-133.138101 80.99084 200.760936 200.760936 0 0 1-32.516768 211.178344 183.418659 183.418659 0 0 1-117.722744 61.842076 483.114873 483.114873 0 0 0 0 158.007407 183.418659 183.418659 0 0 1 117.722744 61.842076 200.760936 200.760936 0 0 1 32.516768 211.118129 437.832262 437.832262 0 0 0 133.138101 80.990839 184.382119 184.382119 0 0 1 153.250325-83.70057z" p-id="19691"></path></svg>
\ No newline at end of file
<?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="1568787966199" class="icon" viewBox="0 0 1149 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="24829" xmlns:xlink="http://www.w3.org/1999/xlink" width="89.765625" height="80"><defs><style type="text/css"></style></defs><path d="M1001.950836 0H147.11537a147.04928 147.04928 0 0 0-147.04928 146.586653v558.192458a147.04928 147.04928 0 0 0 147.04928 146.057937h393.39813v105.098929H306.275562a34.036125 34.036125 0 1 0 0 68.055729H842.807166a34.036125 34.036125 0 0 0 0-68.055729H608.569228v-105.098929h393.381608a147.148414 147.148414 0 0 0 147.148415-147.148415V147.148414A147.148414 147.148414 0 0 0 1001.950836 0z m80.084029 702.680768a80.067507 80.067507 0 0 1-80.067506 80.084029H147.11537a80.084029 80.084029 0 0 1-80.067507-80.084029v-4.956718h1014.987002z m0-72.07067H67.047863V147.148414a80.067507 80.067507 0 0 1 80.067507-80.084029h854.835466a80.150119 80.150119 0 0 1 56.060473 24.023557l1.999209 1.007866a80.133596 80.133596 0 0 1 22.024347 55.052606z" fill="" p-id="24830"></path><path d="M975.052384 372.018156H773.677482a21.479108 21.479108 0 0 0-17.365033 8.839479l-39.653739 54.606503-34.06917-101.877063a21.479108 21.479108 0 0 0-41.305977 2.197478l-25.940154 118.085528-14.704928-67.411355-44.230441-235.278848a21.479108 21.479108 0 0 0-41.619903-2.445314l-68.931415 220.441741H179.069674a21.479108 21.479108 0 0 0 0 42.958217h282.532886a21.479108 21.479108 0 0 0 20.504288-15.068421l47.914933-153.344311 28.368946 150.898997c0 0.198269 0.082612 0.396537 0.132179 0.594806l35.58923 163.786462a21.479108 21.479108 0 0 0 20.966914 16.918929 21.479108 21.479108 0 0 0 20.983437-16.869361l30.33511-138.110667 22.602631 67.741803a21.479108 21.479108 0 0 0 37.737141 5.832404l57.828369-79.472701h190.486646a21.479108 21.479108 0 0 0 0-42.958216z" fill="" p-id="24831"></path></svg>
\ No newline at end of file
<?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="1568787933761" class="icon" viewBox="0 0 1033 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="22862" xmlns:xlink="http://www.w3.org/1999/xlink" width="80.703125" height="80"><defs><style type="text/css"></style></defs><path d="M682.964021 1024H113.202892C45.762871 1024 0 978.237129 0 910.886314V113.202892C0 45.762871 45.762871 0 113.202892 0h569.761129c22.480007 0 40.678108 8.920638 40.678108 31.75747s-17.841275 31.75747-40.678108 31.75747H113.202892c-22.480007 0-49.687952 27.207945-49.687952 49.687952v797.683422c0 22.480007 27.207945 49.598746 49.687952 49.598746h569.761129c22.480007 0 40.678108 8.920638 40.678108 31.75747s-17.841275 31.75747-40.678108 31.75747zM788.762784 756.202457A40.678108 40.678108 0 0 1 759.949124 686.889102L963.42887 483.230943a40.767314 40.767314 0 0 1 57.62732 57.62732L817.576444 744.338009a41.034933 41.034933 0 0 1-28.81366 11.864448z" p-id="22863"></path><path d="M991.082847 544.604931a42.016204 42.016204 0 0 1-29.616517-12.221274L752.18817 323.016291A41.837791 41.837791 0 1 1 811.778029 263.872463L1020.699364 472.793797a41.926997 41.926997 0 0 1-29.616517 71.365102z" p-id="22864"></path><path d="M959.682202 544.604931H389.921073c-22.480007 0-40.678108-14.629846-40.678108-32.560328s17.841275-32.560328 40.678108-32.560327h569.761129c22.480007 0 40.767314 14.540639 40.767315 32.560327s-18.287307 32.560328-40.767315 32.560328z" p-id="22865"></path></svg>
\ No newline at end of file
<?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="1568787664765" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="8612" xmlns:xlink="http://www.w3.org/1999/xlink" width="80" height="80"><defs><style type="text/css"></style></defs><path d="M999.576 546.508a17.934 17.934 0 0 1-12.552-5.102L513.876 80.876 40.726 541.406c-7.122 6.936-18.518 6.78-25.454-0.344s-6.78-18.52 0.344-25.454L501.32 42.858a18 18 0 0 1 25.11 0l485.704 472.752a18 18 0 0 1-12.558 30.898z" fill="" p-id="8613"></path><path d="M729.744 978.246H298.006c-51.794 0-80.252-5.5-98.228-18.982-21.584-16.188-23.39-40.384-23.39-63.782V541.458c0-9.942 8.058-18 18-18s18 8.058 18 18v354.026c0 21.376 2.184 29.876 8.99 34.982 10.57 7.928 35.634 11.782 76.626 11.782h431.738c40.992 0 66.056-3.854 76.626-11.782 6.806-5.104 8.99-13.606 8.99-34.982V541.458c0-9.942 8.058-18 18-18s18 8.058 18 18v354.026c0 23.396-1.806 47.594-23.388 63.782-17.974 13.48-46.432 18.98-98.226 18.98z" fill="" p-id="8614"></path></svg>
\ No newline at end of file
// The Vue build version to load with the `import` command
// (runtime-only or standalone) has been set in webpack.base.conf with an alias.
import Vue from 'vue'
import App from './App'
import router from './router'
import axios from './util/http'
import store from './store/index.js'
import * as API from './util/api'
import { faceapi } from './util/initApi'
import './util/permission'
import './util/vproto'
import ElementUI from 'element-ui'
import 'element-ui/lib/theme-chalk/index.css'
import 'babel-polyfill'
import './util/permission'
import '../src/assets/css/public.css'
import selecttree from './views/public/selecttree'
import './assets/icon/iconfont.css'
//---图片放大
import VuePhotoZoomPro from 'vue-photo-zoom-pro'
//---视频播放
import VideoPlayer from 'vue-video-player'
import { Loading } from 'element-ui'
import echarts from 'echarts'
require('video.js/dist/video-js.css')
require('vue-video-player/src/custom-theme.css')
Vue.use(VideoPlayer)
//---视频播放end
Vue.config.productionTip = false
Vue.prototype.axios = axios;
Vue.prototype.API = API;
Vue.use(ElementUI);
Vue.use(selecttree);
//--图片放大
Vue.use(VuePhotoZoomPro)
Vue.use(Loading)
Vue.prototype.loading = Loading;
Vue.prototype.$echarts = echarts;
Vue.prototype.faceapi = faceapi;
let vue = new Vue({
el: '#app',
router,
store,
components: { App },
template: '<App/>'
})
import Vue from 'vue'
import Router from 'vue-router'
Vue.use(Router)
/**
* 公共路由
*/
export const constantRouterMap = [{
path: '/',
name: 'login',
component: reslove => require(['@/views/login/login'], reslove),
},
{
path: '/show',
name: '首页',
redirect: "/display",
component: reslove => require(['@/views/layout'], reslove),
meta: {
icon: 'gy-icon-shouye'
},
children: [{
path: '/display',
name: '首页',
component: reslove => require(['@/views/Home/show'], reslove),
}]
},
// {
// path: '/home',
// name: '首页',
// component: reslove => require(['@/views/layout'], reslove),
// children: [{
// path: '/show',
// name: '首页',
// component: reslove => require(['@/views/home/show'], reslove),
// }]
// },
{
path: '/illaudit',
name: '违法审核',
component: reslove => require(['@/views/Enforcelaw/aduit'], reslove)
}
]
/**
* 异步路由
*/
export const asyncRouterMap = [{
path: '/monitor',
name: '实时视频',
component: reslove => require(['@/views/layout'], reslove),
meta: {
icon: 'gy-icon-jianguan'
},
children: [
{
path: '/system/playvideo',
name: '实时视频',
component: reslove => require(['@/views/videos/playvideo'], reslove),
}
]
},{
path: '/enforcelaw/config',
name: '数据检索',
meta: {
icon: 'el-icon-search'
},
component: reslove => require(['@/views/layout'], reslove),
children: [{
path: '/search/filmedrecords',
name: '抓拍记录',
component: reslove => require(['@/views/Search/FilmedRecords'], reslove),
},
{
path: '/search/pices',
name: '以图搜图',
component: reslove => require(['@/views/Search/Searchpic'], reslove),
}, {
path: '/search/dbs',
name: '人口库管理',
component: reslove => require(['@/views/Search/facedb/database'], reslove),
}
]
},
{
path: '/activity',
name: '活动状态',
meta: {
icon: 'el-icon-map-location'
},
component: reslove => require(['@/views/layout'], reslove),
children: [
// {
// path: '/activity/status',
// name: '轨迹查询',
// component: reslove => require(['@/views/activity/status'], reslove),
// },
{
path: '/activity/report',
name: '状态报表',
component: reslove => require(['@/views/activity/report'], reslove),
}
]
},{
path: '/equipment',
name: '设备管理',
component: reslove => require(['@/views/layout'], reslove),
meta: {
icon: 'el-icon-video-camera'
},
children: [{
path: '/equipment/org',
name: '组织机构管理',
component: reslove => require(['@/views/Equipment/org.vue'], reslove),
},{
path: '/equipment/vchan',
name: '相机配置',
component: reslove => require(['@/views/Equipment/vchan.vue'], reslove),
},{
path: '/equipment/dev',
name: '设备状态',
component: reslove => require(['@/views/Equipment/dev.vue'], reslove),
}]
}, {
path: '/system',
name: '系统管理',
component: reslove => require(['@/views/layout'], reslove),
meta: {
icon: 'gy-icon-xitong'
},
children: [{
path: '/system/user',
name: '用户管理',
component: reslove => require(['@/views/System/Sysuser'], reslove),
}, {
path: '/system/role',
name: '角色管理',
component: reslove => require(['@/views/System/role'], reslove),
},{
path: '/system/setting',
name: '其他配置',
component: reslove => require(['@/views/System/Setting'], reslove),
}
]
}
]
export default new Router({
routes: constantRouterMap
})
const getters = {
roles: state => state.menu.roles,
permission_routers: state => state.menu.addRouter,
three_menu:state => state.menu.threeMenu,
dev_unid:state => state.initinfo.dev_unid,
faceInfo:state => state.alarm.faceInfo
}
export default getters
import Vue from 'vue'
import Vuex from 'vuex'
import state from './state'
import getters from './getters'
import mutations from './mutaition'
import menu from './modules/menu'
import initinfo from './modules/init_info'
import alarm from './modules/alarm'
Vue.use(Vuex);
const store = new Vuex.Store({
modules:{
menu,
initinfo,
alarm
},
state,
mutations,
getters
})
export default store
\ No newline at end of file
const alarm = {
state:{
alarmInfo:'',
faceInfo:''
},
mutations:{
SET_ALARM(state, data) {
console.log(state)
state.alarmInfo = data;
},
SET_FACE(state, data) {
state.faceInfo = data
}
},
actions:{
GetAlarmData({commit,state}, data) {
if (data.type=='request') {
commit('SET_ALARM',data)
}
if (data.type == 'face_img_search') {
commit('SET_FACE',data)
}
}
}
}
export default alarm
const info = {
state: {
dev_unid: '',
bodyheight:'',
org:[],
address:[],
facedbdata:[],
province:[]
},
mutations:{
SET_DEV: (state, dev) => {
state.dev_unid = dev;
},
SET_BODYHEIGHT: (state, height) => {
state.bodyheight = height
},
SET_ORG: (state, data) =>{
state.org = data;
},
SET_ADDRESS: (state, data) => {
state.address = data;
},
SET_FACEDB: (state, data) => {
state.facedbdata = data;
},
SET_PROVINCE: (state, data) => {
state.province = data;
}
},
actions: {
GetDev({ commit, state}) {
// getDev().then(response => {
// response.data
// let data = "9cb6e39adc5176b81879f6c22f1d963"
// if( response.data && response.data.length > 0){
// data = response.data[0];
// }
// commit("SET_DEV", data);
// })
},
},
}
/**
* 获取设备IP
*/
// function getDev() {
// return new Promise((reslove, reject) =>{
// axios.get(IP + '/api/v1/devconf_fx/devs?s=' + new Date().getTime()).then(response => {
// reslove(response);
// })
// });
// }
export default info
import axios from '../../util/http'
import {asyncRouterMap, constantRouterMap } from '@/router'
import {url} from '../../util/api'
/**
* 获取路由列表
*/
function getMenuInfo(token) {
return new Promise((reslove, reject) =>{
axios.get(url + "/auth/apps/" + 'e38b9e91e27df7295282cd1d876f5f26' + "/menus?shape=list").then(response => {
reslove(response);
})
});
}
/**
* cyl add
* 用于判断父级菜单是否有子级菜单被选中
* 如果有,那么该父节菜单也需要选中
*/
function existsChildren(router,roles){
for(let i = 0; i < roles.length; i++){
for(let k = 0; k < router.children.length; k++){
if(router.children[k].children && router.children[k].children.length>0){
existsChildren(router.children[k],roles);
}else{
if(roles[i].path === router.children[k].path){
return true;
}
}
}
}
return false;
}
/**
* 判断是否有权限
* @param {*} router
* @param {*} roles
*/
function hasPerminssion(router, roles) {
if(router.children && router.children.length>0){
if(existsChildren(router,roles)){
return true;
}
}
// let status = false
let status = true
if (roles) {
for(let i = 0; i < roles.length; i++){
if(roles[i].path === router.path){
status = true;
break;
}
}
}
return status
}
/**
* 根据后台返回的路由权限
* 动态匹配路由
* @param {*} asyncRouterMap
* @param {*} roles
*/
function filterAsyncRouter(asyncRouterMap, roles) {
const newData = [];
// return routers
asyncRouterMap.forEach(ele => {
let obj = {};
if (hasPerminssion(ele, roles)) {
obj['path'] = ele.path;
obj['name'] = ele.name;
obj['meta'] = ele.meta || {}
obj['component'] = ele.component;
if (ele.children && ele.children.length > 0) {
obj['children'] = filterAsyncRouter(ele.children, roles)
} else {
obj['children'] = []
}
} else {
return false
}
newData.push(obj)
});
return newData
}
/**
* 根据路由和当前跳转key(路由路径)
* 获取第三级路由
* @param {*} router
* @param {*} key
*/
function filterTwoMenu(router, key) {
let data = [],
state = true;
router.forEach(e => {
if(e.path == key)
if(e.children) {
data = e.children
} else {
data = [];
}
})
return data;
}
const menu = {
state: {
routers: constantRouterMap,
addRouter: [],
threeMenu:[],
},
mutations:{
SET_ROUTERS: (state, routers) => {
state.addRouter = routers;
state.routers = constantRouterMap.concat(routers);
},
SET_THREEMENU: (state, routers) => {
state.threeMenu = routers;
}
},
actions: {
GetMenuRole({ commit, state},data) {
if (data === ''){
commit('SET_ROUTERS', []);
return
}
return new Promise((resolve, reject) => {
getMenuInfo().then(response => {
let accessedRouters = filterAsyncRouter(asyncRouterMap,response.data.list_data);
// commit('SET_ROUTERS', accessedRouters);
commit('SET_ROUTERS', accessedRouters);
resolve(accessedRouters);
})
})
},
GetTwoMenu({commit, state},data) {
return new Promise((reslove,reject) => {
const tmenus = filterTwoMenu(state.routers, data);
commit('SET_THREEMENU', tmenus);
reslove(tmenus);
})
}
},
}
export default menu
export default {
setAddress(state, address) {
state.address = address;
},
setDevunid(state, data) {
state.dev_unid = data;
},
setImgsrc(state, data) {
state.imgsrc = data;
},
setCurVideo(state, data) {
state.videoInfo = data;
},
setTheme(state, data) {
state.theme = data;
},
setsessionID(state, data) {
state.sessionID = data;
}
}
export default {
imgsrc:'',
IP:'',
dev_unid:'',
theme:'white',
sessionID:''
}
export let url = 'http://192.168.9.208:20080/api/v1'
// export let url = 'http://52.1.113.109:20080/api/v1'
export let menus = `${url}/auth/apps/e38b9e91e27df7295282cd1d876f5f26/menus`
let timer = ()=>{
return new Date().getTime()
}
export let auth = {
login: `${url}/auth/users/login`,
user: `${url}/auth/users`,
edituser(userid){
return `${url}/auth/users/${userid}`
},
role: `${url}/auth/roles`,
editrole (roleid){
return `${url}/auth/roles/${roleid}`
},
menusRole(roleid){
return `${url}/auth/roles/${roleid}/apps/e38b9e91e27df7295282cd1d876f5f26/menus`
},
userRole(userid) {
return `${url}/auth/users/${userid}/roles`
},
deleteRole(roleid) {
return `${url}/auth/roles/${roleid}`
},
deleteuserRole(userid, roleid) {
return `${url}/auth/users/${userid}/roles/${roleid}`
},
perms(roleid){
return `${url}/auth/roles/${roleid}/perms`
},
ugrps: `${url}/auth/ugrps`,
delugrps(ugrp_unid) {
return `${url}/auth/ugrps/${ugrp_unid}`
},
userTogroup(groupid) {
return `${url}/auth/ugrps/${groupid}/users`
},
delUserToGroup(groupid, userid) {
return `${url}/auth/ugrps/${groupid}/users/${userid}`
},
///-------cyl add
getRoleUsers (roleid){
return `${url}/auth/roles/${roleid}/users`
},
}
export let org = {
getorgtree:`${url}/org/tree`,
getorg:`${url}/org`,
deleteorg (org_unid){
return `${url}/org/${org_unid}`
},
getvchan:`${url}/org/vchans`,
getvchanList:`${url}/org/vchans/list`,
editvchan (id){
return `${url}/org/vchans/${id}`
}
}
export let faceweb = `${url}/face_web`
import Vue from 'vue'
import VueResource from 'vue-resource'
import FileSaver from "file-saver";
import XLSX from "xlsx";
Vue.use(VueResource)
//const httpUrl = 'http://1.1.1.1:8080/'
/**
* 格式化枚举中文显示
* 其中枚举是单个字符
*/
function formatterInfo(value, options) {
if(value==null || value==""){
return "";
}
let res = value;
for (let i = 0; i < options.length; i++) {
if (value == options[i].value) {
res = options[i].label;
break;
}
}
return res;
}
/**
* 格式化枚举类型中文显示
* 其中枚举可能是多个字符
*/
function formatterMoreInfo(value, options) {
if(value==null || value==""){
return "";
}
let res = "";
let arrValue = value.split("");
for (let j = 0; j < arrValue.length; j++) {
let val = arrValue[j];
for (let i = 0; i < options.length; i++) {
if (val == options[i].value) {
res += "," + options[i].label;
break;
}
}
}
if (res == "") {
return value;
} else {
return res.substring(1);
}
}
/**
* 对部分枚举可能值是0开头的,但是表数据不规范的时候,导致01变为1这种情况进行解决
* @param {} value
* @param {*} options
*/
function formatterInfoChangInt(value, options) {
if(value==null || value==""){
return "";
}
let res = value;
for (let i = 0; i < options.length; i++) {
if (parseInt(value) == parseInt(options[i].value)) {
res = options[i].label;
break;
}
}
return res;
}
/**
* 处理图片访问地址的,目的是解决谷歌高版本浏览器不支持ftp协议
* @param {*} path
*/
function imgPathAnalysis(serip,path){
if(path !=null && path != "" && path.length > 10){
var path = path.trim().toLowerCase();
if(path.indexOf("ftp://") == 0){
return serip+"/image/showByByte"+"?ipath="+path;
}else{
return path;
}
}else{
return "";
}
}
function formatDate(date, fmt) {
if (/(y+)/.test(fmt)) {
fmt = fmt.replace(RegExp.$1, (date.getFullYear() + '').substr(4 - RegExp.$1.length));
}
let o = {
'M+': date.getMonth() + 1,
'd+': date.getDate(),
'h+': date.getHours(),
'm+': date.getMinutes(),
's+': date.getSeconds()
};
for (let k in o) {
if (new RegExp(`(${k})`).test(fmt)) {
let str = o[k] + '';
fmt = fmt.replace(RegExp.$1, (RegExp.$1.length === 1) ? str : padLeftZero(str));
}
}
return fmt;
}
function padLeftZero(str) {
return ('00' + str).substr(str.length);
}
function exportExcel(title) {
/* generate workbook object from table */
let wb = XLSX.utils.table_to_book(
document.querySelector("#rebateSetTable")
);
/* get binary string as output */
let wbout = XLSX.write(wb, {
bookType: "xlsx",
bookSST: true,
type: "array"
});
try {
FileSaver.saveAs(
new Blob([wbout], { type: "application/octet-stream" }),
title+".xlsx"
);
} catch (e) {
if (typeof console !== "undefined") console.log(e, wbout);
}
return wbout;
}
export default {
formatterInfo,
formatterMoreInfo,
formatterInfoChangInt,
imgPathAnalysis,
formatDate,
exportExcel
}
\ No newline at end of file
/**
* axios 全局配置
*/
import axios from 'axios'
import vue from 'vue'
import router from '../router'
const service = axios.create({
timeout: 2000000 //设置请求超时时间
})
import { Message, Loading } from 'element-ui';
let loading //定义loading变量
function startLoading() { //使用Element loading-start 方法
loading = Loading.service({
lock: true,
text: '加载中……',
background: 'rgba(0, 0, 0, 0.7)'
})
}
function endLoading() { //使用Element loading-close 方法
loading.close()
}
//那么 showFullScreenLoading() tryHideFullScreenLoading() 要干的事儿就是将同一时刻的请求合并。
//声明一个变量 needLoadingRequestCount,每次调用showFullScreenLoading方法 needLoadingRequestCount + 1。
//调用tryHideFullScreenLoading()方法,needLoadingRequestCount - 1。needLoadingRequestCount为 0 时,结束 loading。
let needLoadingRequestCount = 0
export function showFullScreenLoading() {
if (needLoadingRequestCount === 0) {
startLoading()
}
needLoadingRequestCount++
}
export function tryHideFullScreenLoading() {
if (needLoadingRequestCount <= 0) return
needLoadingRequestCount--
if (needLoadingRequestCount === 0) {
endLoading()
}
}
/**@param
* 请求前的拦截器
*/
service.interceptors.request.use(function (config) {
//截取API添加时间戳防止请求缓存
if (config.url.indexOf('?') > -1) {
if (config.url.split('?')[1].indexOf('&') > -1) {
config.url = config.url + '&s=' + new Date().getTime();
}
} else {
config.url = config.url + '?s=' + new Date().getTime();
}
if (config.url.indexOf('codes/countries') < 1) {
if (config.url.indexOf('cates') < 1) {
var token = localStorage.getItem('atoken');
if (token) {
// config.headers.authorization = '4db5183a-721b-4eee-b623-1d143890e813';
config.headers.authorization = token;
//showFullScreenLoading();
} else {
router.push('/');
}
}
}
return config
}, function (err) {
//tryHideFullScreenLoading();
});
/**
* @param
* 响应前的拦截器
*/
service.interceptors.response.use(function (res) {
//tryHideFullScreenLoading();
return res;
}, function (err) {
//tryHideFullScreenLoading();
// return Promise.reject(error);
})
export default service
import axios from 'axios'
import * as API from './api'
import store from '../store/index.js'
class api {
constructor() {
this.instance = null;
}
static getInstance() {
if (!this.instance) {
this.instance = new api();
}
return this.instance;
}
/**@augments
* 获取库相关信息
*/
getCarDbData() {
return new Promise((reslove, reject) => {
axios.get(API.url + "/alarm/traffic/vehicle_libs")
.then(response => {
reslove(response.data);
});
})
}
/**@augments
* 获取布控类别
*/
getMonitor() {
return new Promise((reslove, reject) => {
axios.get(API.url + "/alarm/traffic/monitor_cates")
.then(response => {
reslove(response.data.list_data);
});
})
}
/**
* @argument
* 获取城市
*/
getProvince() {
return new Promise((reslove, reject) => {
axios.get(API.url + "/codes/countries/0E229CD043/provinces?depth=1").then(res => {
store.commit('SET_PROVINCE', res.data.list_data)
reslove(res);
});
});
}
/**
* @argument
* 获取人员库
*/
getFaceDbData() {
return new Promise((reslove, reject) => {
axios.get(API.url + "/codes/custom/cates/4DD23AF66E/codes")
.then(response => {
store.commit('SET_FACEDB', response.data.list_data)
reslove(response.data);
});
})
}
/**@augments
* 初始化地点
*/
getOrg() {
return new Promise((reslove, reject) => {
axios.get(API.url + '/org/list', {
params: {
org_type: 'org',
}
}).then(response => {
store.commit('SET_ORG', response.data.list_data);
reslove(response.data);
})
})
}
/**@argument
* 列出所有地点
*/
getAddress() {
return new Promise((reslove, reject) => {
axios.get(API.url + '/org/list', {
params: {
org_type: 'address',
}
}).then(response => {
store.commit('SET_ADDRESS', response.data.list_data);
reslove(response.data);
})
})
}
/**@argument
* 获取地点值
*/
getSite() {
return new Promise((reslove, reject) => {
axios.get(API.url + '/codes/custom/cates/630A634844/codes').then(response => {
reslove(response.data);
})
});
}
/**@augments
* 上传图片
*/
uploadImg() {
return new Promise((reslove, reject) => {
axios.post("http://192.168.9.225:8080/FACE-DETECT-WEB/api/v1/face_web/search_src_pics/", data)
.then(function (response) {
reslove(response.data);
});
})
}
/**@argument
* 获取推送服务websocket连接地址
*/
getPushWebsocketUrl() {
return new Promise((reslove, reject) => {
axios.post("http://192.168.9.225:8080/FACE-DETECT-WEB/api/v1/face_web/search_src_pics/", data)
.then(function (response) {
reslove(response.data);
});
})
}
/**@argument
* 获取人脸websocket连接地址
*/
getFaceWebsocketUrl() {
return new Promise((reslove, reject) => {
var userName = localStorage.getItem("user_id");
var timer = new Date();
this.axios.get("http://192.168.9.225:8080/FACE-DETECT-WEB/api/v1/face_web/ws_url?src_type=user&user_unid=" + userName + "&client_unid=" + timer.getTime()).then((response) => {
this.openWs(response.data.ws_url);
});
});
}
/**@argument
* 获取设备信息
*/
getVchanList() {
return new Promise((reslove, reject) => {
let externList = {},
cameraList = {}
axios.get(IP + "/api/v1/org/vchans/list", {
params: {
limit: 1000,
}
}).then(function (response) {
reslove(response.data);
});
});
}
/**@argument
* websocket心跳
*/
wsclock(command) {
var date = new Date();
var datatimes = date.getTime();
var wsMessage = {
"type": "request",
"id": datatimes,
// command: "get /wsapi/v1/dtid/"+wsIP+"/keep_alive",//推送服务
command: command,
mts: datatimes
};
Ws.send(JSON.stringify(wsMessage));
}
// 获取code编码
getCodeName() {
axios.get(IP + '/api/v1/codes/traffic/cates').then(m => {
m.data.list_data.forEach(ele => {
this.setCodeLocalStorage(ele)
})
})
}
setCodeLocalStorage(res) {
axios.get(IP + '/api/v1/codes/traffic/cates/' + res.cate_unid + '/codes').then(response => {
if (response.data.list_data) {
response.data.list_data.forEach(ele => {
let codeKey = res.name + '-' + ele.code;
window.localStorage.setItem(codeKey, ele.name);
})
}
})
}
// behavior
setBehaviorLocal() {
axios.get(IP + '/api/v1/codes/event_types').then(m => {
if (m.data.list_data) {
m.data.list_data.forEach(ele => {
let behaviorKey = '安防事件-' + ele.code;
window.localStorage.setItem(behaviorKey, ele.name);
})
}
})
}
}
const faceapi = api.getInstance();
export {
faceapi
}
/**
* 权限模块
* 模块功能
* 1.获取菜单权限
* 2.获取设备信息
* 3.获取websocket信息
* 4.初始化加载所需api
*/
import router from '../router'
import store from '../store'
import {faceapi} from './initApi'
import {pushws} from './socket'
router.beforeEach((to, from, next) => {
if (to.path === '/') {
next()
} else {
if (store.getters.permission_routers.length === 0) { //判断当前用户是否拉取了路由
store.dispatch('GetMenuRole').then(res => { //获取菜单
router.addRoutes(res);
pushws();
/**
* 初始化页面所需api
**/
faceapi.setBehaviorLocal();
faceapi.getCodeName();
faceapi.getSite();
faceapi.getOrg();
faceapi.getAddress();
faceapi.getFaceDbData();
faceapi.getProvince();
//添加路由守卫确定是否打开新的页面
// router.beforeEach((to, from, next) => {
// if(to.matched.some(record => record.meta.openwin)) {
// let url = location.origin +'/#'+ to.meta.url
// window.open (url, 'newwindow', 'left=100, top=100 toolbar=no, menubar=no, scrollbars=no, resizable=no,location=no, status=no')
// return
// }else{
// next()
// }
// })
}).catch(() => {
})
} else {
}
// if (store.getters.dev_unid === ""){ //获取设备信息
// store.dispatch('GetDev')
// }
}
next()
});
import store from '../store'
import axios from './http'
import * as API from './api'
window.PushWs = null;
window.pushwsurl = null;
window.pushwsClock = null;
var sessionID = ''
export const pushws = function getpushws() {
let userName = localStorage.getItem("user_id");
let clientTimer = new Date().getTime();
sessionID = clientTimer;
axios.get(API.url + "/manage/push/ws_url?src_type=user&user_unid=" + userName + "&client_unid=" + clientTimer,{
headers: {
'authorization': localStorage.getItem('atoken')
}
})
.then(response => {
openWs("pushws", response.data.ws_url);
pushwsurl = response.data.ws_url;
});
}
function openWs(wstype, wsUrl) {
if ("WebSocket" in window) {
if (wstype == "pushws") PushWs = new WebSocket(wsUrl);
} else if ("MozWebSocket" in window) {
if (wstype == "pushws") PushWs = new MozWebSocket(wsUrl);
} else {
if (wstype == "pushws") PushWs = new SockJS(wsUrl);
}
/**
* 报警推送
*/
try {
PushWs.onerror = function (event) {
console.log("推送WebSocket:发生错误 ");
console.log("错误" + event);
};
PushWs.onclosed = function () {
getpushws();
console.log("推送服务ws关闭")
};
PushWs.onopen = function (event) {
debugger
console.log("推送WebSocket:已连接");
store.commit('setsessionID',sessionID)
pushwsClock = setInterval(wsPushclock, 20000);
};
/**
* 处理接收到的数据
* @param {*} event
*/
PushWs.onmessage = function (event) {
var data = JSON.parse(event.data);
store.dispatch("GetAlarmData", data)
if (data.command == "post /wsapi/v1/event/black_face_events") {
}
}
} catch (err) {
console.log(err);
}
/**
* 推送心跳
*/
function wsPushclock(command) {
let date = new Date();
let datatimes = date.getTime();
if (PushWs.readyState == 1) {
try {
let PushMessage = {
type: "request",
id: datatimes + 1,
command: "get /wsapi/v1/dtid/" + pushwsurl.split('connects/')[1] + "/keep_alive", //推送服务
mts: datatimes
};
PushWs.send(JSON.stringify(PushMessage));
} catch (err) {
console.log(err);
}
} else {
clearInterval(pushwsClock);
pushws();
}
}
}
import Vue from 'vue'
import store from '../store'
/**
* @param {src} 图片路径
* 图片放大
*/
Vue.prototype.zoomImg = function (data){
store.commit('setImgsrc',data);
}
Vue.filter('sexfn', function (value) {
if (!value)
return;
var str = '';
if (value == 1)
str = '男'
if (value == 2)
str = '女'
return str;
});
Vue.filter('dbnamefn', function (value) {
let dbData = store.state.initinfo.facedbdata,
dbname = '';
dbData.forEach(ele => {
if (ele.code == value){
dbname = ele.name;
}
});
return dbname
});
Vue.filter('filterDeployType', function (value) {
let dbData = store.state.alarmtype,
dbname = '';
dbData.forEach(ele => {
if (ele.type == value){
dbname = ele.name;
}
});
return dbname
});
/**
* @param {provenceid} 省份id
* @param {cityid} 城市id
*/
Vue.prototype.showCity = function (provenceid, cityid) {
this.cData = this.$store.state.initinfo.province;
var province = provenceid;
var provinceNmae = '';
var cityName = '';
var curProvince = '';
var city = cityid;
if (province) {
this.cData.forEach(function (ele) {
if (ele.code == province) {
if (ele.cities)
curProvince = ele.cities;
provinceNmae = ele.name
}
}, this);
if (city) {
if (curProvince)
curProvince.list_data.forEach(function (ele) {
if (ele.code == city) {
cityName = ele.name
}
});
}
} else {
provinceNmae = "--";
cityName = "--";
}
return provinceNmae + '-' + cityName
}
/**
* @param {obj}
* 格式化时间
*/
Vue.prototype.timeForm = function (obj) {
var nowY = obj.getFullYear()
var nowM = (obj.getMonth() + 1) < 10 ? '0' + (obj.getMonth() + 1) : (obj.getMonth() + 1)
var nowD = obj.getDate() < 10 ? '0' + obj.getDate() : obj.getDate()
var nowH = obj.getHours() < 10 ? '0' + obj.getHours() : obj.getHours()
var nowMi = obj.getMinutes() < 10 ? '0' + obj.getMinutes() : obj.getMinutes()
var nowS = obj.getSeconds() < 10 ? '0' + obj.getSeconds() : obj.getSeconds()
var timeNow = nowY + '-' + nowM + '-' + nowD + ' ' + nowH + ':' + nowMi + ':' + nowS;
return timeNow;
}
/**
* @param {obj}
* UTC时间处理
*/
Vue.prototype.setUtcTime = function (obj) {
if (obj && obj != '') {
let num = new Date(obj).getTime()
let offset = Math.abs(new Date().getTimezoneOffset())
let time;
if (isNaN(num)) {
let ary = obj.split(':')
let h = parseInt(ary[0]) - offset/60
if (h < 0) {
h += 24
}
if (h < 10) {
h = '0' + h
}
time = h + ":" + ary[1] + ":" + ary[2]
} else {
time = this.timeForm(new Date(new Date(obj).getTime() - offset*60000));
}
return time;
}
}
/**IE
* 检查浏览器
*/
function checkIE() {
var userAgent = navigator.userAgent; //取得浏览器的userAgent字符串
var isIE = userAgent.indexOf("compatible") > -1 && userAgent.indexOf("MSIE") > -1; //判断是否IE<11浏览器
var isEdge = userAgent.indexOf("Edge") > -1 && !isIE; //判断是否IE的Edge浏览器
var isIE11 = userAgent.indexOf('Trident') > -1 && userAgent.indexOf("rv:11.0") > -1;
if(isIE || isEdge || isIE11) {
return true
} else {
return false
}
}
Vue.prototype.showLocalTime = function (obj) {
if(obj == undefined) return
let dt = '',ndt = '';
if(checkIE()){
dt = obj.replace(/-/g,'/');
ndt = String(dt).split('.')[0];
} else {
ndt = obj
}
let num = new Date(ndt).getTime()
let offset = Math.abs(new Date().getTimezoneOffset())
let time;
if (isNaN(num)) {
let ary = obj.split(':')
let h = Number(ary[0]) + offset/60
if (h>=24) {
h -= 24
}
if (h<10) {
h = '0' + h
}
time = h + ":" + ary[1] + ":" + ary[2]
} else {
time = this.timeForm(new Date(new Date(ndt).getTime() + offset*60000));
}
return time;
}
/**
* 本地存储相机信息
*/
Vue.prototype.setCameralocalStor = function (key, val) {
if (window.localStorage) {
localStorage[key] = val;
} else {
alert('浏览器不支持本地存储');
}
}
/**
* @param {key}
* 获取本地存储相机信息
*/
Vue.prototype.getCameralocalStor = function (key) {
var val = '';
if (window.localStorage) {
val = localStorage[key];
} else {
alert('浏览器不支持本地存储');
}
return val;
}
/**
* 图片上传限制
*/
Vue.prototype.uploadImgCondition = function (file) {
const isJPG = file.type === "image/jpeg";
const isLt2M = file.size / 1024 / 1024 < 2;
if (!isJPG) {
this.$message.error("上传头像图片只能是 JPG 格式!");
}
if (!isLt2M) {
this.$message.error("上传头像图片大小不能超过 2MB!");
}
return isJPG && isLt2M;
}
/**
* base64图片
*/
Vue.prototype.base64Img = function (file) {
var file = file.file;
return new Promise((resolve, reject) => {
var srcs = "";
var reader = new FileReader();
if (file) {
reader.readAsDataURL(file);
}
reader.onloadend = function (evt) {
srcs = reader.result.split(",")[1];
let data = {
pic_base64: srcs,
format: file.type.split("/")[1],
ofilename: file.name,
t_format: "jpg"
};
data.src = evt.target.result
resolve(data);
};
})
}
/**
* code操作
*/
var codeNation = 1004; //民族
var codeCulture = 1005; //文化程度
var codeBlood = 1006; //血型
var codeRelationTOhead = 1009; //与户主关系
var codePersonType = 1012; //人员类别
var profession = 1013; //职业
var faith = 1020; //宗教信仰
var army = 1021; //服兵役情况
var personType = 1067; //关注人员类型
var marriage = 1007; //婚姻状况
// 获取code编码
Vue.prototype.getCode = (codeName, code) => {
var name = localStorage.getItem(codeName + '-' + code);
name = name ? name : ''
return name;
};
<template>
<div class="statusdetail">
<el-dialog
title="活动状态"
:visible.sync="show"
width="40%"
:before-close="handleClose">
<div v-show="curshow == 'chart'" class="report-select">
<el-select class="flr" v-model="period" @change="chageperiod">
<el-option label="天" value="day"></el-option>
<el-option label="周" value="week"></el-option>
<el-option label="月" value="month"></el-option>
</el-select>
</div>
<div class="activitychart" id="activitychart" v-show="curshow == 'chart'"></div>
<div class="imgbox" v-show="curshow == 'img'"></div>
<span slot="footer" class="dialog-footer">
<el-button @click="show = false">取 消</el-button>
<el-button type="primary" @click="show = false">确 定</el-button>
</span>
</el-dialog>
</div>
</template>
<script>
export default {
data() {
return {
show:false,
detaildata:'',
curshow:'img',
period:'week',
xdata:['01','02','03','04','05','06'],
apperadata:[23,60,20,36,23,85]
}
},
methods:{
initImg(){
this.show = true
this.curshow = 'img'
},
chageperiod(){
this.xdata = ['00:00','00:01','00:02','00:03','00:04','00:05']
this.apperadata = [123,60,32,36,213,85]
this.initchart()
},
initchart(data){
this.show = true;
this.curshow = 'chart'
this.detaildata = data
setTimeout(() => {
this.initactivityChart(this.data)
}, 0);
},
initactivityChart(){
var chart = this.$echarts.init(document.getElementById('activitychart'))
var option = {
tooltip: {
trigger: 'axis'
},
xAxis: [{
type: 'category',
data: this.xdata,
axisLine: {
lineStyle: {
color: "#999"
}
}
}],
yAxis: [{
type: 'value',
splitNumber: 4,
splitLine: {
lineStyle: {
type: 'dashed',
color: '#DDD'
}
},
axisLine: {
show: false,
lineStyle: {
color: "#333"
},
},
nameTextStyle: {
color: "#999"
},
splitArea: {
show: false
}
}],
series: [{
name: '次数',
type: 'line',
data: this.apperadata,
lineStyle: {
normal: {
width: 8,
color: {
type: 'linear',
colorStops: [{
offset: 0,
color: '#A9F387' // 0% 处的颜色
}, {
offset: 1,
color: '#48D8BF' // 100% 处的颜色
}],
globalCoord: false // 缺省为 false
},
shadowColor: 'rgba(72,216,191, 0.3)',
shadowBlur: 10,
shadowOffsetY: 20
}
},
itemStyle: {
normal: {
color: '#fff',
borderWidth: 10,
/*shadowColor: 'rgba(72,216,191, 0.3)',
shadowBlur: 100,*/
borderColor: "#A9F387"
}
},
smooth: true
}]
};
chart.setOption(option)
}
},
mounted(){
}
}
</script>
<style lang="stylus" scoped>
.activitychart{
height 40vh
width 40vw
}
.report-select{
width 100%
overflow hidden
}
</style>
<!---活动状态--->
<template>
<div class="template-box content_div_main">
<el-form :inline="true" class="search-form" size="small">
<el-form-item label="抓拍地点:">
<el-input type="text" class="bla bra br0" v-model="address" placeholder=""></el-input>
</el-form-item>
<el-form-item label="抓拍相机:">
<el-input type="text" class="bla bra br0" v-model="camera" placeholder=""></el-input>
</el-form-item>
<el-form-item label="查询库:">
<el-select v-model="value" placeholder="请选择">
<el-option
v-for="item in options"
:key="item.value"
:label="item.label"
:value="item.value"
></el-option>
</el-select>
</el-form-item>
<el-form-item label="查询时间:">
<el-date-picker
v-model="value1"
type="datetimerange"
range-separator="至"
start-placeholder="开始日期"
end-placeholder="结束日期"
></el-date-picker>
</el-form-item>
<el-form-item>
<el-button class="search-btn" @click="searchUser" icon="el-icon-search">查询</el-button>
<el-button class="search-btn ml10" @click="addGroupUser()" icon="el-icon-upload">导出</el-button>
</el-form-item>
</el-form>
<el-row class="table_m_type">
<el-table :data="tableData" style="width: 100%" height="680" >
<el-table-column type="index" label="#"></el-table-column>
<el-table-column prop="name" label="姓名" align="center"></el-table-column>
<el-table-column prop="age" label="年龄" align="center"></el-table-column>
<el-table-column prop="sex" label="性别" align="center"></el-table-column>
<el-table-column prop="carid" label="身份证号"></el-table-column>
<el-table-column prop="address" label="地点"></el-table-column>
<el-table-column prop="appearnum" label="出现次数" align="center"></el-table-column>
<el-table-column prop="lastappear" label="最后出现时间" ></el-table-column>
<el-table-column prop="signin" label="注册时间" ></el-table-column>
<el-table-column prop="pic" label="人脸图片">
<template slot-scope="scope">
<div class="show-img-box">
<img :src="scope.row.pic" alt="">
</div>
</template>
</el-table-column>
<el-table-column label="操作" width="200" align="center">
<template slot-scope="scope">
<div class="tab-btn-box">
<span @click="showImg(scope.row)" class="table-btn">所有抓图片</span>
<span @click="activityStatus(scope.row)" class="table-btn">活动状态</span>
</div>
</template>
</el-table-column>
</el-table>
</el-row>
<el-row class="block">
<el-pagination
class="mt10"
background
layout="prev, pager, next"
:total="1000">
</el-pagination>
</el-row>
<el-row>
<statusdetails ref="detail"></statusdetails>
</el-row>
</div>
</template>
<script>
import statusdetails from './detail'
export default {
components:{
statusdetails
},
data() {
return {
address: "",
camera: "",
options: [
{
value: "选项1",
label: "社保库1"
},
{
value: "选项2",
label: "社保库2"
},
{
value: "选项3",
label: "社保库3"
},
{
value: "选项4",
label: "社保库4"
},
{
value: "选项5",
label: "社保库5"
}
],
tableData: [
{
name: "王小虎",
age:'23',
sex:"男",
carid:"211232211221233341",
address: "上海市普陀区金沙江路 1518 弄",
appearnum:4,
lastappear:'2019-08-01 10:00:09',
signin:'2016-08-01 10:00:09',
pic:require('../videos/testimg/1.jpg')
},
{
name: "王小虎",
age:'23',
sex:"男",
carid:"211232211221233341",
address: "上海市普陀区金沙江路 1518 弄",
appearnum:4,
lastappear:'2019-08-01 10:00:09',
signin:'2016-08-01 10:00:09',
pic:require('../videos/testimg/1.jpg')
},
{
name: "王小虎",
age:'23',
sex:"男",
carid:"211232211221233341",
address: "上海市普陀区金沙江路 1518 弄",
appearnum:4,
lastappear:'2019-08-01 10:00:09',
signin:'2016-08-01 10:00:09',
pic:require('../videos/testimg/1.jpg')
},
{
name: "王小虎",
age:'23',
sex:"男",
carid:"211232211221233341",
address: "上海市普陀区金沙江路 1518 弄",
appearnum:4,
lastappear:'2019-08-01 10:00:09',
signin:'2016-08-01 10:00:09',
pic:require('../videos/testimg/1.jpg')
}
],
value: "",
value1: ""
};
},
methods: {
showImg(data){
this.$refs.detail.initImg(data)
},
activityStatus(data){
this.$refs.detail.initchart(data)
}
},
created() {}
};
</script>
<style lang="stylus" scoped>
.search-box {
color: #333;
background: #fff;
}
.show-img-box{
height 60px
width 60px
img{
height 100%
width 100%
}
}
</style>
<!---活动状态--->
<template>
<div class="template-box content_div_main">
<el-form :inline="true" class="search-form" size="small">
<el-form-item label="抓拍地点:">
<el-input type="text" class="bla bra br0" v-model="address" placeholder=""></el-input>
</el-form-item>
<el-form-item label="抓拍相机:">
<el-input type="text" class="bla bra br0" v-model="camera" placeholder=""></el-input>
</el-form-item>
<el-form-item label="人口库:">
<el-select v-model="dbname" class="br0 bra bla">
<el-option value="" label="请选择库类型"></el-option>
<el-option v-for="item in crucialData" :key="item.unid" :value="item.code" :label="item.name"></el-option>
</el-select>
</el-form-item>
<el-form-item label="查询时间:">
<el-date-picker
v-model="value1"
type="datetimerange"
range-separator="至"
start-placeholder="开始日期"
end-placeholder="结束日期"
></el-date-picker>
</el-form-item>
<el-form-item>
<el-button class="search-btn" @click="searchUser" icon="el-icon-search">查询</el-button>
<el-button class="search-btn ml10" @click="addGroupUser()" icon="el-icon-plus">添加</el-button>
</el-form-item>
</el-form>
<el-row class="table_m_type">
<el-table :data="tableData" style="width: 100%" height="720" >
<div slot="empty">
<div class="no-data-box">
<img src="../../assets/img/nodata.png" alt="暂无数据"/>
<div>暂无数据</div>
</div>
</div>
<el-table-column label="序号" type="index" width="120"></el-table-column>
<el-table-column label="姓名" property="name" type="name" width="180"></el-table-column>
<el-table-column label="性别" property="sex" :formatter="setSex" width="180"></el-table-column>
<el-table-column label="出生日期" property="birthday" :formatter="setBirthday"> </el-table-column>
<el-table-column label="身份证号" property="card_id"></el-table-column>
<el-table-column label="籍贯" property="provence" :formatter="setCity">
</el-table-column>
<el-table-column label="操作" width="300px" align="center">
<template slot-scope="scope">
<div class="tab-btn-box">
<span class="table-btn" size="" @click="handleSee(scope.$index, scope.row)">人员轨迹</span>
</div>
</template>
</el-table-column>
</el-table>
</el-row>
<el-row class="block mt10">
<el-pagination @size-change="handleSizeChange" @current-change="handleCurrentChange" :current-page.sync="currentPage" background
:page-size="limit" layout="total,prev, pager, next, jumper" :total="total"></el-pagination>
</el-row>
<el-row>
<statusdetails ref="statusdetail" :faceunid="faceunid"></statusdetails>
</el-row>
</div>
</template>
<script>
import statusdetails from './statusdetail'
export default {
components:{
statusdetails
},
data() {
return {
address: "",
camera: "",
currentPage: 1,
limit: 20,
total: 0,
offset: 0,
loading: false,
provenceName: "",
cityName: "",
detaildialong: false,
curData: '',
faceunid:'',
dbname:'',
crucialData:[],
cData: '',
tableData: [],
};
},
methods: {
initDbData(){
this.axios.get(this.API.url + "/codes/custom/cates/4DD23AF66E/codes").then((response)=> {
this.crucialData = response.data.list_data;
});
},
getFace(){
var Vthis = this;
this.axios
.get(this.API.faceweb + "/faces/crucial_faces", {
params: {
offset: Vthis.offset,
limit: this.limit,
is_crucial: true,
is_active: true,
sex: Vthis.facesex,
name__like: Vthis.facename,
card_id__like: Vthis.facecardid,
crucial_type: Vthis.dbname,
resident_unids: this.communityunid,
}
}).then( (response) =>{
Vthis.tableData = response.data.list_data;
Vthis.total = response.data.total_num;
});
},
handleSee(data){
this.faceunid = data.face_unid;
this.$refs.statusdetail.init(data)
},
handleSizeChange(val) {
alert(val);
},
handleCurrentChange(val) {
this.offset = (val - 1) * this.limit;
this.getFace();
},
},
created() {
this.getFace()
}
};
</script>
<style lang="stylus" scoped>
.search-box {
color: #333;
background: #fff;
}
</style>
<template>
<div class="statusdetail">
<el-dialog
title="轨迹状态"
:visible.sync="show"
width="50%"
:before-close="handleClose">
<el-table :data="gridData">
<el-table-column property="date" label="日期"></el-table-column>
<el-table-column property="name" label="姓名"></el-table-column>
<el-table-column property="address" label="抓怕地址"></el-table-column>
<el-table-column property="address" label="抓怕图片">
<div class="img-box">
<img src="../videos/testimg/1.jpg" alt="">
</div>
</el-table-column>
<el-row>
<div class="block">
<el-pagination class="flr mt10" @current-change="handleCurrentChange" :current-page.sync="page.currentPage" :page-size="page.limit" layout="total,prev, pager, next, jumper" :total="page.total">
</el-pagination>
</div>
</el-row>
</el-table>
<span slot="footer" class="dialog-footer">
<el-button @click="show = false">取 消</el-button>
<el-button type="primary" @click="show = false">确 定</el-button>
</span>
</el-dialog>
</div>
</template>
<script>
export default {
data() {
return {
show:false,
page: {
offset: 0,
currentPage: 1,
limit: 5,
total: 0
},
gridData: [{
date: '2016-05-02 16:00:00',
name: '王小虎',
address: '上海市普陀区金沙江路 1518 弄'
}, {
date: '2016-05-04 16:00:0',
name: '王小虎',
address: '上海市普陀区金沙江路 1518 弄'
}, {
date: '2016-05-01 16:00:0',
name: '王小虎',
address: '上海市普陀区金沙江路 1518 弄'
}, {
date: '2016-05-03 16:00:0',
name: '王小虎',
address: '上海市普陀区金沙江路 1518 弄'
}],
}
},
props: {
accunid: {},
faceunid: {}
},
methods:{
init(){
this.show = true;
console.log(data)
this.axios.get(this.API.url + '/faces/' + this.faceunid + '/face_events',{
params: {
limit: this.page.limit,
offset: this.page.offset,
}
})
},
handleCurrentChange(val) {
this.page.currentPage = val;
this.page.offset = (val - 1) * this.page.limit;
this.init();
},
},
mounted(){
}
}
</script>
<style lang="stylus" scoped>
.activitychart{
height 40vh
width 40vw
}
.img-box{
height 60px
width 60px
img{
height 100%
width 100%
}
}
</style>
<template>
<div>
<el-row class="mt30">
<el-col :span="4" class="ml50">
<el-input v-model="groupname" placeholder="部门名称"></el-input>
</el-col>
<el-col :span="4" class="ml50">
<el-button type="primary" icon="el-icon-search" @click="searchGroup()">查询</el-button>
<el-button type="primary" icon="el-icon-plus" @click="addgroupdialog=true">创建</el-button>
</el-col>
</el-row>
<el-row>
<el-table :data="grtableData" style="width:98%;margin:20px auto;" class="mt20">
<el-table-column type="index" width="">
</el-table-column>
<el-table-column prop="name" label="部门名称" width="">
</el-table-column>
<el-table-column label="创建时间" width="">
<template slot-scope="scope">
<span>{{showLocalTime(scope.row.create_dt)}}</span>
</template>
</el-table-column>
<el-table-column label="操作" align="center" width="">
<template slot-scope="scope">
<div class="tab-btn-box">
<span class="table-btn dengers" size="" @click="DeleteGroup(scope.$index, scope.row)">删除部门</span>
</div>
</template>
</el-table-column>
</el-table>
</el-row>
<el-row>
<el-pagination class="grouppage" @size-change="handleSizeChange" @current-change="handleCurrentChange"
:current-page.sync="currentPage" :page-size="page.limit" layout="total,prev, pager, next, jumper" :total="page.total">
</el-pagination>
</el-row>
<div class="creategrop-box">
<el-dialog title="添加部门" :visible.sync="addgroupdialog" width="30%">
<div>
<el-form ref="addgroupform" :model="addform" label-width="80px">
<el-form-item label="部门名称" prop="name" :rules="[{ required: true, message: '部门不能为空'}]">
<el-input v-model="addform.name"></el-input>
</el-form-item>
</el-form>
</div>
<span slot="footer" class="dialog-footer">
<el-button @click="addgroupdialog = false">取 消</el-button>
<el-button type="primary" @click="addGroup">确 定</el-button>
</span>
</el-dialog>
</div>
</div>
</template>
<script>
export default {
data() {
return {
groupname: "",
grtableData: [],
currentPage: 1,
addressData: [],
curEditData: "",
page: {
total: 0,
offset: 0,
limit: 20
},
dialogVisible: false,
addgroupdialog: false,
form: {
name: "",
org: "",
worktime: ""
},
addform: {
name: ""
},
editData: "",
gridData: []
};
},
methods: {
//搜索
searchGroup() {
this.getGroups();
},
/**删除部门 */
DeleteGroup(index, row) {
var data = {
name: row.name,
is_active: false
};
var Vthis = this;
this.$confirm("此操作将永久删除该文件, 是否继续?", "提示", {
confirmButtonText: "确定",
cancelButtonText: "取消",
type: "warning"
})
.then(() => {
this.axios
.post(this.API.auth.delugrps(row.ugrp_unid), data)
.then(function (response) {
Vthis.$message({
type: "info",
message: "删除成功!"
});
Vthis.getGroups();
});
})
.catch(() => {
this.$message({
type: "info",
message: "已取消删除"
});
});
},
handleSizeChange(val) {},
handleCurrentChange(val) {
this.currentPage = val;
this.page.offset = (val - 1) * this.page.limit;
},
addGroup() {
this.$refs["addgroupform"].validate(valid => {
if (valid) {
var Vthis = this;
this.axios
.post(this.API.auth.ugrps, this.addform)
.then(function (response) {
Vthis.$message({
type: "info",
message: "创建成功!"
});
Vthis.addgroupdialog = false;
Vthis.getGroups();
Vthis.$refs["addgroupform"].resetFields();
});
} else {
console.log("error submit!!");
return false;
}
});
},
getGroups() {
var Vthis = this;
this.axios
.get(this.API.auth.ugrps, {
params: {
offset: Vthis.offset,
limit: Vthis.page.limit,
name__like: Vthis.groupname,
is_active: true
}
})
.then(function (response) {
Vthis.grtableData = response.data.list_data;
Vthis.page.total = response.data.total_num;
});
},
},
created() {
this.getGroups();
}
};
</script>
<style lang="stylus" scoped>
.grouppage {
float: right;
margin-right: 20px;
}
.g-btn {
width: 100%;
}
</style>
<template>
<div>
<el-row class="mt30">
<el-col :span="4" class="ml50">
<el-select v-model="groupname" placeholder="请选择" class="el-sel br0">
<el-option v-for="item in groupData" :key="item.ugrp_unid" :label="item.name" :value="item.ugrp_unid">
</el-option>
</el-select>
</el-col>
<el-col :span="4" class="">
<el-input type="text" class="bl0 br0" v-model="username" placeholder="姓名"/>
</el-col>
<el-col :span="4" class="">
<el-input type="text" class="bra" v-model="mphone" placeholder="电话"/>
</el-col>
<el-col :span="4" class="">
<el-button type="primary" class="them-big-btn set-btn" icon="el-icon-search" @click="userGroupSearch">查询</el-button>
<el-button type="primary" class="them-big-btn set-btn ml10" @click="adduserGroup" icon="el-icon-plus">添加</el-button>
</el-col>
</el-row>
<el-row>
<el-table :data="grustableData" style="width:98%;margin:20px auto;" class="mt20">
<el-table-column type="index" width=""></el-table-column>
<el-table-column prop="name" label="姓名" width=""></el-table-column>
<el-table-column prop="sex" :formatter="setSex" label="性别" width=""></el-table-column>
<el-table-column prop="mphone" label="联系电话" width=""></el-table-column>
<el-table-column label="操作" align="center" width="">
<template slot-scope="scope" align="center">
<div class="tab-btn-box">
<span class="table-btn" size="" @click="handleEdit(scope.$index, scope.row)">编辑成员</span>
<span class="table-btn dengers" size="" @click="handleDelete(scope.$index, scope.row)">删除成员</span>
</div>
</template>
</el-table-column>
</el-table>
</el-row>
<el-row>
<!-- 添加 -->
<el-dialog :title="userdialogmsg" :visible.sync="adduserDialog" width="30%">
<div>
<el-form ref="userGroupform" :model="form" label-width="80px">
<el-form-item label="部门:">
<el-select v-model="form.group_name" placeholder="请选择活动区域" disabled="disabled" class="el-sel">
<el-option v-for="(item,index) in groupData" :label="item.name" :key="index" :value="item.ugrp_unid"></el-option>
</el-select>
</el-form-item>
<el-form-item label="姓名:" prop="name">
<el-input v-model="form.name"></el-input>
</el-form-item>
<el-form-item label="电话:" prop="mphone">
<el-input v-model="form.mphone"></el-input>
</el-form-item>
<el-form-item label="性别:">
<el-radio-group v-model="form.sex">
<el-radio label="1" ></el-radio>
<el-radio label="2" ></el-radio>
</el-radio-group>
</el-form-item>
</el-form>
</div>
<span slot="footer" class="dialog-footer">
<el-button @click="adduserDialog = false">取 消</el-button>
<el-button type="primary" @click="saveGroupUser">确 定</el-button>
</span>
</el-dialog>
</el-row>
<el-row>
<!-- 删除 -->
<el-dialog title="删除" :visible.sync="deleteuserDialog" size="tiny">
<div>
确定要删除该条记录
</div>
<span slot="footer" class="dialog-footer">
<el-button @click="deleteuserDialog = false">取 消</el-button>
<el-button type="primary" @click="saveGroupUser">确 定</el-button>
</span>
</el-dialog>
</el-row>
<el-row>
<div class="block">
<el-pagination class="pages flr mr20" @size-change="handleSizeChange" @current-change="handleCurrentChange"
:current-page.sync="page.currentPage" :page-size="page.limit" layout="total,prev, pager, next, jumper" :total="page.total">
</el-pagination>
</div>
</el-row>
</div>
</template>
<script>
export default {
data() {
return {
groupname: '',
username: '',
mphone: '',
groupData: [],
grustableData: [],
adduserDialog: false,
deleteuserDialog: false,
userdialogmsg: '添加成员',
form: {
norm_type: "employee",
user_type: "user",
group_name: '',
name: '',
sex: '',
mphone: '',
fax: '',
email: "",
is_active: true
},
page: {
offset: 0,
limit: 20,
total: 0,
currentPage: 0
},
}
},
methods: {
//查询
userGroupSearch() {
this.getUser();
},
adduserGroup() {
this.form = {
norm_type: "employee",
user_type: "user",
group_name: '',
name: '',
sex: '',
mphone: '',
fax: '',
email: "",
is_active: true
},
this.form.group_name = this.groupname;
this.adduserDialog = true;
},
handleEdit(index, row) { //编辑
this.userdialogmsg = '编辑成员信息'
this.form = row;
this.form.group_name = this.groupname;
this.adduserDialog = true;
},
handleDelete(index, row) {
this.$confirm('此操作将永久删除该文件, 是否继续?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(() => {
this.axios.delete(this.API.auth.delUserToGroup(this.groupname,row.user_unid), {}).then((
response) => {
this.adduserDialog = false;
this.delUser(row)
});
}).catch(() => {
this.$message({
type: 'info',
message: '已取消删除'
});
});
},
delUser(row){
this.axios.post(this.API.auth.edituser(row.user_unid), {
is_active: false
}).then((response) =>{
this.getUser();
this.$message({
type: "success",
message: "删除成功!"
});
});
},
saveGroupUser() {
this.adduserDialog = false;
var url = '';
if (this.form.user_unid) {
//编辑
url = this.API.auth.edituser(this.form.user_unid)
this.axios.post(url, this.form).then((response)=> {
this.adduserDialog = false;
this.$message({
type: 'info',
message: '修改成功!'
});
this.getUser()
});
} else {
//添加
url = this.API.auth.user
this.axios.post(url, this.form).then((response)=> {
this.adduserDialog = false;
this.addUserToGroups(response.data.user_unid);
});
}
},
addUserToGroups(userid) { // 将一个用户添加进一个组
this.axios.post(this.API.auth.userTogroup(this.groupname), {
"user_unid": userid,
}).then( (response) => {
this.$message({
type: 'success',
message: '创建成功!'
});
this.adduserDialog = false;
this.getUser();
});
},
setSex(row, column, cellValue) {
var sex = '';
if (cellValue == '1')
sex = '男'
if (cellValue == '2')
sex = '女'
return sex
},
getGroup(callback) {
this.axios.get(this.API.auth.ugrps, {
params: {
offset: this.page.offset,
limit: 1000,
is_active: true,
}
}).then((response) => {
this.groupData = response.data.list_data;
this.groupname = response.data.list_data[0].ugrp_unid
this.getUser();
});
},
getUser() {
this.axios.get(this.API.auth.userTogroup(this.groupname), {
params: {
offset: this.page.offset,
limit: this.page.limit,
name__like: this.username,
mphone__like: this.mphone,
is_active: true,
}
}).then((response) => {
this.grustableData = response.data.list_data;
this.page.total = response.data.total_num;
});
},
handleSizeChange(val) {},
handleCurrentChange(val) {
this.page.offset = (val - 1) * this.page.limit;
this.currentPage = val;
this.getUser()
}
},
created() {
this.getGroup();
}
}
</script>
<style lang="stylus" scoped>
.white-color
color #fff
</style>
<template>
<div>
<el-dialog title="车辆详情" :visible.sync="isShow" v-loading.body="loading" class="facedetail-box" :before-close="closedialong">
<div class="detail-aline"></div>
<el-row class="alarm-info-box">
<el-col :span="24" class='row'>
<el-col :span="12">
<span class="info-label"><span class="info-label-name">库类型:</span></span>
<span class="info-text">{{detailInfo.lib}}</span>
</el-col>
<el-col :span="12">
<span class="info-label"><span class="info-label-name">车牌号码:</span></span>
<span class="info-text">{{detailInfo.vehicle.plate_text}}</span>
</el-col>
</el-col>
<el-col :span="24" class='row'>
<el-col :span="12">
<span class="info-label"><span class="info-label-name">车牌类型:</span></span>
<span class="info-text">{{getCode('号牌类型',detailInfo.vehicle.plate_type)}}</span>
</el-col>
<el-col :span="12">
<span class="info-label"><span class="info-label-name">车辆类型:</span></span>
<span class="info-text">{{getCode('车辆类型',detailInfo.vehicle.vehicle_type)}}</span>
</el-col>
</el-col>
<el-col :span="24" class='row'>
<el-col :span="12">
<span class="info-label"><span class="info-label-name">车身颜色:</span></span>
<span class="info-text">{{getCode('车身颜色',detailInfo.vehicle.body_color)}}</span>
</el-col>
<el-col :span="12">
<span class="info-label"><span class="info-label-name">车主姓名:</span></span>
<span class="info-text">{{detailInfo.owner.name}}</span>
</el-col>
</el-col>
<el-col :span="24" class='row'>
<el-col :span="12">
<span class="info-label"><span class="info-label-name">身份证号:</span></span>
<span class="info-text">{{detailInfo.owner.cnsf_id}}</span>
</el-col>
</el-col>
<el-col :span="10">
<el-col :span="7" v-for="path in detailInfo.pics" :key="path.unid" class="pic-box">
<img :src="path.url_path" alt="">
</el-col>
</el-col>
</el-row>
<span slot="footer" class="dialog-footer">
<el-button @click="closedialong">关闭</el-button>
</span>
</el-dialog>
</div>
</template>
<script>
export default {
data() {
return {
isShow: false,
disabled: true,
detailInfo: {
owner:{},
vehicle:{}
},
loading: true,
cData: "",
dbData: [],
cartypeData:[]
};
},
methods: {
dataInit(data){
console.log(data)
let obj = data
obj.lib = this.$parent.setLib(1,1,data.lib_code)
this.detailInfo = data
this.isShow = true
},
closedialong() {
this.isShow = false
},
getFaceDetail(data) {
this.axios.get(FACEWS + "/faces/" + data.unid).then((response)=> {
this.detailInfo = response.data;
this.loading = false;
});
},
initDbData() {
this.axios
.get(this.IP + "/api/v1/codes/custom/cates/4DD23AF66E/codes")
.then(response => {
this.dbData = response.data.list_data;
});
},
initcartypeData() {
this.axios
.get(this.IP + "/api/v1/codes/simple/cates/09BB973F92/codes")
.then(response => {
this.cartypeData = response.data.list_data;
});
}
},
created() {
this.initDbData();
this.initcartypeData();
}
};
</script>
<style lang="stylus" scoped>
.alarm-info-box {
max-height: 500px;
overflow: auto;
}
.pic-box {
margin-right: 5%;
img {
width: 100%;
height: 100%;
}
}
.row
margin-bottom 15px
</style>
No preview for this file type
This diff could not be displayed because it is too large.
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!