commit f1e0565db859364ed898725bc3362a290873b558 Author: SHAOJIAHAO <55341701@qq.com> Date: Tue Sep 1 12:25:00 2020 +0800 [新增]第一次提交文件 diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..e89330a --- /dev/null +++ b/.editorconfig @@ -0,0 +1,13 @@ +# Editor configuration, see https://editorconfig.org +root = true + +[*] +charset = utf-8 +indent_style = space +indent_size = 2 +insert_final_newline = true +trim_trailing_whitespace = true + +[*.md] +max_line_length = off +trim_trailing_whitespace = false diff --git a/README.md b/README.md new file mode 100644 index 0000000..fbf47bd --- /dev/null +++ b/README.md @@ -0,0 +1,9 @@ +# AX.Angular4PlanPlatform + +上海数字化预案编制管理平台前端项目。此项目在 Angular 框架基础上编写。 + +后续开发都基于此。 + +项目初始化:cnpm install + +项目启动:cnpm start diff --git a/angular.json b/angular.json new file mode 100644 index 0000000..b7c1f20 --- /dev/null +++ b/angular.json @@ -0,0 +1,142 @@ +{ + "$schema": "./node_modules/@angular/cli/lib/config/schema.json", + "version": 1, + "newProjectRoot": "projects", + "projects": { + "anxin119": { + "projectType": "application", + "schematics": { + "@schematics/angular:component": { + "style": "scss" + } + }, + "root": "", + "sourceRoot": "src", + "prefix": "app", + "architect": { + "build": { + "builder": "@angular-devkit/build-angular:browser", + "options": { + "outputPath": "dist/anxin119", + "index": "src/index.html", + "main": "src/main.ts", + "polyfills": "src/polyfills.ts", + "tsConfig": "tsconfig.app.json", + "aot": true, + "assets": [ + "src/favicon.ico", + "src/assets" + ], + "styles": [ + "src/styles.scss", + "./node_modules/swiper/css/swiper.min.css" + ], + "scripts": [ + "node_modules/echarts/dist/echarts.js", + "src/assets/mTokenK1/mToken_K1.js", + "./node_modules/swiper/js/swiper.min.js", + + "src/assets/acharts/acharts.min.js", + "src/assets/echarts/echarts.common.min.js", + "src/assets/chartstheme/chongqing.js", + + "src/assets/chartstheme/westeros.js", + "src/assets/chartstheme/echarts-skin.js" + + ] + }, + "configurations": { + "production": { + "fileReplacements": [ + { + "replace": "src/environments/environment.ts", + "with": "src/environments/environment.prod.ts" + } + ], + "optimization": true, + "outputHashing": "all", + "sourceMap": false, + "extractCss": true, + "namedChunks": false, + "extractLicenses": true, + "vendorChunk": false, + "buildOptimizer": true, + "budgets": [ + { + "type": "initial", + "maximumWarning": "2mb", + "maximumError": "5mb" + }, + { + "type": "anyComponentStyle", + "maximumWarning": "6kb", + "maximumError": "10kb" + } + ] + } + } + }, + "serve": { + "builder": "@angular-devkit/build-angular:dev-server", + "options": { + "browserTarget": "anxin119:build", + "proxyConfig": "proxy.config.json" + }, + "configurations": { + "production": { + "browserTarget": "anxin119:build:production" + } + } + }, + "extract-i18n": { + "builder": "@angular-devkit/build-angular:extract-i18n", + "options": { + "browserTarget": "anxin119:build" + } + }, + "test": { + "builder": "@angular-devkit/build-angular:karma", + "options": { + "main": "src/test.ts", + "polyfills": "src/polyfills.ts", + "tsConfig": "tsconfig.spec.json", + "karmaConfig": "karma.conf.js", + "assets": [ + "src/favicon.ico", + "src/assets" + ], + "styles": [ + "src/styles.scss" + ], + "scripts": [] + } + }, + "lint": { + "builder": "@angular-devkit/build-angular:tslint", + "options": { + "tsConfig": [ + "tsconfig.app.json", + "tsconfig.spec.json", + "e2e/tsconfig.json" + ], + "exclude": [ + "**/node_modules/**" + ] + } + }, + "e2e": { + "builder": "@angular-devkit/build-angular:protractor", + "options": { + "protractorConfig": "e2e/protractor.conf.js", + "devServerTarget": "anxin119:serve" + }, + "configurations": { + "production": { + "devServerTarget": "anxin119:serve:production" + } + } + } + } + }}, + "defaultProject": "anxin119" +} \ No newline at end of file diff --git a/browserslist b/browserslist new file mode 100644 index 0000000..8084853 --- /dev/null +++ b/browserslist @@ -0,0 +1,12 @@ +# This file is used by the build system to adjust CSS and JS output to support the specified browsers below. +# For additional information regarding the format and rule options, please see: +# https://github.com/browserslist/browserslist#queries + +# You can see what browsers were selected by your queries by running: +# npx browserslist + +> 0.5% +last 2 versions +Firefox ESR +not dead +not IE 9-11 # For IE 9-11 support, remove 'not'. \ No newline at end of file diff --git a/e2e/protractor.conf.js b/e2e/protractor.conf.js new file mode 100644 index 0000000..7c798cf --- /dev/null +++ b/e2e/protractor.conf.js @@ -0,0 +1,32 @@ +// @ts-check +// Protractor configuration file, see link for more information +// https://github.com/angular/protractor/blob/master/lib/config.ts + +const { SpecReporter } = require('jasmine-spec-reporter'); + +/** + * @type { import("protractor").Config } + */ +exports.config = { + allScriptsTimeout: 11000, + specs: [ + './src/**/*.e2e-spec.ts' + ], + capabilities: { + browserName: 'chrome' + }, + directConnect: true, + baseUrl: 'http://localhost:4200/', + framework: 'jasmine', + jasmineNodeOpts: { + showColors: true, + defaultTimeoutInterval: 30000, + print: function() {} + }, + onPrepare() { + require('ts-node').register({ + project: require('path').join(__dirname, './tsconfig.json') + }); + jasmine.getEnv().addReporter(new SpecReporter({ spec: { displayStacktrace: true } })); + } +}; \ No newline at end of file diff --git a/e2e/src/app.e2e-spec.ts b/e2e/src/app.e2e-spec.ts new file mode 100644 index 0000000..c33b59d --- /dev/null +++ b/e2e/src/app.e2e-spec.ts @@ -0,0 +1,23 @@ +import { AppPage } from './app.po'; +import { browser, logging } from 'protractor'; + +describe('workspace-project App', () => { + let page: AppPage; + + beforeEach(() => { + page = new AppPage(); + }); + + it('should display welcome message', () => { + page.navigateTo(); + expect(page.getTitleText()).toEqual('anxin119 app is running!'); + }); + + afterEach(async () => { + // Assert that there are no errors emitted from the browser + const logs = await browser.manage().logs().get(logging.Type.BROWSER); + expect(logs).not.toContain(jasmine.objectContaining({ + level: logging.Level.SEVERE, + } as logging.Entry)); + }); +}); diff --git a/e2e/src/app.po.ts b/e2e/src/app.po.ts new file mode 100644 index 0000000..b8498c2 --- /dev/null +++ b/e2e/src/app.po.ts @@ -0,0 +1,11 @@ +import { browser, by, element } from 'protractor'; + +export class AppPage { + navigateTo() { + return browser.get(browser.baseUrl) as Promise; + } + + getTitleText() { + return element(by.css('app-root .content span')).getText() as Promise; + } +} diff --git a/e2e/tsconfig.json b/e2e/tsconfig.json new file mode 100644 index 0000000..39b800f --- /dev/null +++ b/e2e/tsconfig.json @@ -0,0 +1,13 @@ +{ + "extends": "../tsconfig.json", + "compilerOptions": { + "outDir": "../out-tsc/e2e", + "module": "commonjs", + "target": "es5", + "types": [ + "jasmine", + "jasminewd2", + "node" + ] + } +} diff --git a/karma.conf.js b/karma.conf.js new file mode 100644 index 0000000..45eb74b --- /dev/null +++ b/karma.conf.js @@ -0,0 +1,32 @@ +// Karma configuration file, see link for more information +// https://karma-runner.github.io/1.0/config/configuration-file.html + +module.exports = function (config) { + config.set({ + basePath: '', + frameworks: ['jasmine', '@angular-devkit/build-angular'], + plugins: [ + require('karma-jasmine'), + require('karma-chrome-launcher'), + require('karma-jasmine-html-reporter'), + require('karma-coverage-istanbul-reporter'), + require('@angular-devkit/build-angular/plugins/karma') + ], + client: { + clearContext: false // leave Jasmine Spec Runner output visible in browser + }, + coverageIstanbulReporter: { + dir: require('path').join(__dirname, './coverage/anxin119'), + reports: ['html', 'lcovonly', 'text-summary'], + fixWebpackSourcePaths: true + }, + reporters: ['progress', 'kjhtml'], + port: 9876, + colors: true, + logLevel: config.LOG_INFO, + autoWatch: true, + browsers: ['Chrome'], + singleRun: false, + restartOnFileChange: true + }); +}; diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..19b617d --- /dev/null +++ b/package-lock.json @@ -0,0 +1,17786 @@ +{ + "name": "anxin119", + "version": "0.0.0", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "@angular-devkit/architect": { + "version": "0.900.1", + "resolved": "https://registry.npm.taobao.org/@angular-devkit/architect/download/@angular-devkit/architect-0.900.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40angular-devkit%2Farchitect%2Fdownload%2F%40angular-devkit%2Farchitect-0.900.1.tgz", + "integrity": "sha1-YKOaOI0a8ktk8BwW2FJ3fpVddto=", + "dev": true, + "requires": { + "@angular-devkit/core": "9.0.1", + "rxjs": "6.5.3" + }, + "dependencies": { + "rxjs": { + "version": "6.5.3", + "resolved": "https://registry.npm.taobao.org/rxjs/download/rxjs-6.5.3.tgz", + "integrity": "sha1-UQ4mMX9NuRp+sd532d2boKSJmjo=", + "dev": true, + "requires": { + "tslib": "^1.9.0" + } + } + } + }, + "@angular-devkit/build-angular": { + "version": "0.900.1", + "resolved": "https://registry.npm.taobao.org/@angular-devkit/build-angular/download/@angular-devkit/build-angular-0.900.1.tgz?cache=0&sync_timestamp=1581037635842&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40angular-devkit%2Fbuild-angular%2Fdownload%2F%40angular-devkit%2Fbuild-angular-0.900.1.tgz", + "integrity": "sha1-hOmJ6Y0luHwGxfuFL6aj9PxyPbE=", + "dev": true, + "requires": { + "@angular-devkit/architect": "0.900.1", + "@angular-devkit/build-optimizer": "0.900.1", + "@angular-devkit/build-webpack": "0.900.1", + "@angular-devkit/core": "9.0.1", + "@babel/core": "7.7.7", + "@babel/generator": "7.7.7", + "@babel/preset-env": "7.7.7", + "@ngtools/webpack": "9.0.1", + "ajv": "6.10.2", + "autoprefixer": "9.7.1", + "babel-loader": "8.0.6", + "browserslist": "4.8.3", + "cacache": "13.0.1", + "caniuse-lite": "1.0.30001020", + "circular-dependency-plugin": "5.2.0", + "copy-webpack-plugin": "5.1.1", + "core-js": "3.6.0", + "coverage-istanbul-loader": "2.0.3", + "cssnano": "4.1.10", + "file-loader": "4.2.0", + "find-cache-dir": "3.0.0", + "glob": "7.1.5", + "jest-worker": "24.9.0", + "karma-source-map-support": "1.4.0", + "less": "3.10.3", + "less-loader": "5.0.0", + "license-webpack-plugin": "2.1.3", + "loader-utils": "1.2.3", + "magic-string": "0.25.4", + "mini-css-extract-plugin": "0.8.0", + "minimatch": "3.0.4", + "open": "7.0.0", + "parse5": "4.0.0", + "postcss": "7.0.21", + "postcss-import": "12.0.1", + "postcss-loader": "3.0.0", + "raw-loader": "3.1.0", + "regenerator-runtime": "0.13.3", + "rimraf": "3.0.0", + "rollup": "1.25.2", + "rxjs": "6.5.3", + "sass": "1.23.3", + "sass-loader": "8.0.0", + "semver": "6.3.0", + "source-map": "0.7.3", + "source-map-loader": "0.2.4", + "source-map-support": "0.5.16", + "speed-measure-webpack-plugin": "1.3.1", + "style-loader": "1.0.0", + "stylus": "0.54.7", + "stylus-loader": "3.0.2", + "terser": "4.5.1", + "terser-webpack-plugin": "2.3.3", + "tree-kill": "1.2.2", + "webpack": "4.41.2", + "webpack-dev-middleware": "3.7.2", + "webpack-dev-server": "3.9.0", + "webpack-merge": "4.2.2", + "webpack-sources": "1.4.3", + "webpack-subresource-integrity": "1.3.4", + "worker-plugin": "3.2.0" + }, + "dependencies": { + "glob": { + "version": "7.1.5", + "resolved": "https://registry.npm.taobao.org/glob/download/glob-7.1.5.tgz?cache=0&sync_timestamp=1573078079496&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fglob%2Fdownload%2Fglob-7.1.5.tgz", + "integrity": "sha1-ZxTGm+4g88PmTE3ZBVU+UytAzcA=", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "rimraf": { + "version": "3.0.0", + "resolved": "https://registry.npm.taobao.org/rimraf/download/rimraf-3.0.0.tgz?cache=0&sync_timestamp=1581257110269&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Frimraf%2Fdownload%2Frimraf-3.0.0.tgz", + "integrity": "sha1-YUF21LMBC3Xlw5DrDulvbcDOu5s=", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + }, + "rxjs": { + "version": "6.5.3", + "resolved": "https://registry.npm.taobao.org/rxjs/download/rxjs-6.5.3.tgz", + "integrity": "sha1-UQ4mMX9NuRp+sd532d2boKSJmjo=", + "dev": true, + "requires": { + "tslib": "^1.9.0" + } + }, + "source-map-support": { + "version": "0.5.16", + "resolved": "https://registry.npm.taobao.org/source-map-support/download/source-map-support-0.5.16.tgz", + "integrity": "sha1-CuBp5/47p1OMZMmFFeNTOerFoEI=", + "dev": true, + "requires": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.6.1.tgz", + "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=", + "dev": true + } + } + } + } + }, + "@angular-devkit/build-optimizer": { + "version": "0.900.1", + "resolved": "https://registry.npm.taobao.org/@angular-devkit/build-optimizer/download/@angular-devkit/build-optimizer-0.900.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40angular-devkit%2Fbuild-optimizer%2Fdownload%2F%40angular-devkit%2Fbuild-optimizer-0.900.1.tgz", + "integrity": "sha1-uWIajmI00yM7YbqbqG5dZLjkErU=", + "dev": true, + "requires": { + "loader-utils": "1.2.3", + "source-map": "0.7.3", + "tslib": "1.10.0", + "typescript": "3.6.4", + "webpack-sources": "1.4.3" + }, + "dependencies": { + "typescript": { + "version": "3.6.4", + "resolved": "https://registry.npm.taobao.org/typescript/download/typescript-3.6.4.tgz", + "integrity": "sha1-sYdSuzeSvBoCgTNff26/G7/FuR0=", + "dev": true + } + } + }, + "@angular-devkit/build-webpack": { + "version": "0.900.1", + "resolved": "https://registry.npm.taobao.org/@angular-devkit/build-webpack/download/@angular-devkit/build-webpack-0.900.1.tgz", + "integrity": "sha1-G5DJyH7Cb6i0cezBcXXFvF9sdKQ=", + "dev": true, + "requires": { + "@angular-devkit/architect": "0.900.1", + "@angular-devkit/core": "9.0.1", + "rxjs": "6.5.3" + }, + "dependencies": { + "rxjs": { + "version": "6.5.3", + "resolved": "https://registry.npm.taobao.org/rxjs/download/rxjs-6.5.3.tgz", + "integrity": "sha1-UQ4mMX9NuRp+sd532d2boKSJmjo=", + "dev": true, + "requires": { + "tslib": "^1.9.0" + } + } + } + }, + "@angular-devkit/core": { + "version": "9.0.1", + "resolved": "https://registry.npm.taobao.org/@angular-devkit/core/download/@angular-devkit/core-9.0.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40angular-devkit%2Fcore%2Fdownload%2F%40angular-devkit%2Fcore-9.0.1.tgz", + "integrity": "sha1-7xB7Dp7uGiiSTN+SEIzdWrjfm2k=", + "dev": true, + "requires": { + "ajv": "6.10.2", + "fast-json-stable-stringify": "2.0.0", + "magic-string": "0.25.4", + "rxjs": "6.5.3", + "source-map": "0.7.3" + }, + "dependencies": { + "rxjs": { + "version": "6.5.3", + "resolved": "https://registry.npm.taobao.org/rxjs/download/rxjs-6.5.3.tgz", + "integrity": "sha1-UQ4mMX9NuRp+sd532d2boKSJmjo=", + "dev": true, + "requires": { + "tslib": "^1.9.0" + } + } + } + }, + "@angular-devkit/schematics": { + "version": "9.0.1", + "resolved": "https://registry.npm.taobao.org/@angular-devkit/schematics/download/@angular-devkit/schematics-9.0.1.tgz", + "integrity": "sha1-onororX+ySszVkvFB4xfE8lpkxo=", + "dev": true, + "requires": { + "@angular-devkit/core": "9.0.1", + "ora": "4.0.2", + "rxjs": "6.5.3" + }, + "dependencies": { + "rxjs": { + "version": "6.5.3", + "resolved": "https://registry.npm.taobao.org/rxjs/download/rxjs-6.5.3.tgz", + "integrity": "sha1-UQ4mMX9NuRp+sd532d2boKSJmjo=", + "dev": true, + "requires": { + "tslib": "^1.9.0" + } + } + } + }, + "@angular/animations": { + "version": "9.0.0", + "resolved": "https://registry.npm.taobao.org/@angular/animations/download/@angular/animations-9.0.0.tgz", + "integrity": "sha1-jSuFLFJzvMFh0T+C+q81ZqtWKVE=" + }, + "@angular/cdk": { + "version": "9.0.0", + "resolved": "https://registry.npm.taobao.org/@angular/cdk/download/@angular/cdk-9.0.0.tgz", + "integrity": "sha1-VzSBeulwRPkNME+g8lycGn+gv5Y=", + "requires": { + "parse5": "^5.0.0" + }, + "dependencies": { + "parse5": { + "version": "5.1.1", + "resolved": "https://registry.npm.taobao.org/parse5/download/parse5-5.1.1.tgz?cache=0&sync_timestamp=1573036762880&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fparse5%2Fdownload%2Fparse5-5.1.1.tgz", + "integrity": "sha1-9o5OW6GFKsLK3AD0VV//bCq7YXg=", + "optional": true + } + } + }, + "@angular/cli": { + "version": "9.0.1", + "resolved": "https://registry.npm.taobao.org/@angular/cli/download/@angular/cli-9.0.1.tgz?cache=0&sync_timestamp=1581037644954&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40angular%2Fcli%2Fdownload%2F%40angular%2Fcli-9.0.1.tgz", + "integrity": "sha1-OZzcT4UlYHS4CHOLo6TexBZ99To=", + "dev": true, + "requires": { + "@angular-devkit/architect": "0.900.1", + "@angular-devkit/core": "9.0.1", + "@angular-devkit/schematics": "9.0.1", + "@schematics/angular": "9.0.1", + "@schematics/update": "0.900.1", + "@yarnpkg/lockfile": "1.1.0", + "ansi-colors": "4.1.1", + "debug": "^4.1.1", + "ini": "1.3.5", + "inquirer": "7.0.0", + "npm-package-arg": "6.1.1", + "npm-pick-manifest": "3.0.2", + "open": "7.0.0", + "pacote": "9.5.8", + "read-package-tree": "5.3.1", + "rimraf": "3.0.0", + "semver": "6.3.0", + "symbol-observable": "1.2.0", + "universal-analytics": "^0.4.20", + "uuid": "^3.3.2" + }, + "dependencies": { + "ansi-colors": { + "version": "4.1.1", + "resolved": "https://registry.npm.taobao.org/ansi-colors/download/ansi-colors-4.1.1.tgz", + "integrity": "sha1-y7muJWv3UK8eqzRPIpqif+lLo0g=", + "dev": true + }, + "rimraf": { + "version": "3.0.0", + "resolved": "https://registry.npm.taobao.org/rimraf/download/rimraf-3.0.0.tgz", + "integrity": "sha1-YUF21LMBC3Xlw5DrDulvbcDOu5s=", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + } + } + }, + "@angular/common": { + "version": "9.0.0", + "resolved": "https://registry.npm.taobao.org/@angular/common/download/@angular/common-9.0.0.tgz", + "integrity": "sha1-DjskUtQvh9GCWkSKMa1yxZPuB4U=" + }, + "@angular/compiler": { + "version": "9.0.0", + "resolved": "https://registry.npm.taobao.org/@angular/compiler/download/@angular/compiler-9.0.0.tgz", + "integrity": "sha1-h+C+9MNptsra4H46QpV3j8k3mdU=" + }, + "@angular/compiler-cli": { + "version": "9.0.0", + "resolved": "https://registry.npm.taobao.org/@angular/compiler-cli/download/@angular/compiler-cli-9.0.0.tgz", + "integrity": "sha1-7M5oCCByWIX+0pivaZRr2qEtc9M=", + "dev": true, + "requires": { + "canonical-path": "1.0.0", + "chokidar": "^3.0.0", + "convert-source-map": "^1.5.1", + "dependency-graph": "^0.7.2", + "fs-extra": "4.0.2", + "magic-string": "^0.25.0", + "minimist": "^1.2.0", + "reflect-metadata": "^0.1.2", + "semver": "^6.3.0", + "source-map": "^0.6.1", + "yargs": "13.1.0" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npm.taobao.org/ansi-regex/download/ansi-regex-4.1.0.tgz", + "integrity": "sha1-i5+PCM8ay4Q3Vqg5yox+MWjFGZc=", + "dev": true + }, + "emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npm.taobao.org/emoji-regex/download/emoji-regex-7.0.3.tgz", + "integrity": "sha1-kzoEBShgyF6DwSJHnEdIqOTHIVY=", + "dev": true + }, + "fs-extra": { + "version": "4.0.2", + "resolved": "https://registry.npm.taobao.org/fs-extra/download/fs-extra-4.0.2.tgz", + "integrity": "sha1-+RcExT0bRh+JNFKwwwfZmXZHq2s=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + }, + "get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npm.taobao.org/get-caller-file/download/get-caller-file-2.0.5.tgz", + "integrity": "sha1-T5RBKoLbMvNuOwuXQfipf+sDH34=", + "dev": true + }, + "require-main-filename": { + "version": "2.0.0", + "resolved": "https://registry.npm.taobao.org/require-main-filename/download/require-main-filename-2.0.0.tgz", + "integrity": "sha1-0LMp7MfMD2Fkn2IhW+aa9UqomJs=", + "dev": true + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.6.1.tgz", + "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=", + "dev": true + }, + "string-width": { + "version": "3.1.0", + "resolved": "https://registry.npm.taobao.org/string-width/download/string-width-3.1.0.tgz", + "integrity": "sha1-InZ74htirxCBV0MG9prFG2IgOWE=", + "dev": true, + "requires": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + } + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npm.taobao.org/strip-ansi/download/strip-ansi-5.2.0.tgz", + "integrity": "sha1-jJpTb+tq/JYr36WxBKUJHBrZwK4=", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" + } + }, + "yargs": { + "version": "13.1.0", + "resolved": "https://registry.npm.taobao.org/yargs/download/yargs-13.1.0.tgz?cache=0&sync_timestamp=1577940861093&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fyargs%2Fdownload%2Fyargs-13.1.0.tgz", + "integrity": "sha1-snKc5L/AxYSTlxlRQJnYqRatIwE=", + "dev": true, + "requires": { + "cliui": "^4.0.0", + "find-up": "^3.0.0", + "get-caller-file": "^2.0.1", + "os-locale": "^3.1.0", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^3.0.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^13.0.0" + } + }, + "yargs-parser": { + "version": "13.1.1", + "resolved": "https://registry.npm.taobao.org/yargs-parser/download/yargs-parser-13.1.1.tgz?cache=0&sync_timestamp=1572648717575&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fyargs-parser%2Fdownload%2Fyargs-parser-13.1.1.tgz", + "integrity": "sha1-0mBYUyqgbTZf4JH2ofwGsvfl7KA=", + "dev": true, + "requires": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } + } + } + }, + "@angular/core": { + "version": "9.0.0", + "resolved": "https://registry.npm.taobao.org/@angular/core/download/@angular/core-9.0.0.tgz", + "integrity": "sha1-In3FPhrIGCT5mMbnYAC378UiZB4=" + }, + "@angular/fire": { + "version": "5.4.2", + "resolved": "https://registry.npm.taobao.org/@angular/fire/download/@angular/fire-5.4.2.tgz", + "integrity": "sha1-+y1Uk13g2DeJ6UDl9Xpv/A4e9Os=" + }, + "@angular/forms": { + "version": "9.0.0", + "resolved": "https://registry.npm.taobao.org/@angular/forms/download/@angular/forms-9.0.0.tgz", + "integrity": "sha1-IBfk3e4QH6V9xdyboRObHwJJlCI=" + }, + "@angular/language-service": { + "version": "9.0.0", + "resolved": "https://registry.npm.taobao.org/@angular/language-service/download/@angular/language-service-9.0.0.tgz", + "integrity": "sha1-JLpjrl21ZrcPfEC7FI3Deneqo3M=", + "dev": true + }, + "@angular/material": { + "version": "9.0.0", + "resolved": "https://registry.npm.taobao.org/@angular/material/download/@angular/material-9.0.0.tgz", + "integrity": "sha1-ZVv9TUBHM36ESAufkr6Oga83W5I=" + }, + "@angular/platform-browser": { + "version": "9.0.0", + "resolved": "https://registry.npm.taobao.org/@angular/platform-browser/download/@angular/platform-browser-9.0.0.tgz", + "integrity": "sha1-uUVPKdjtrwJGaLqp4HCD7vc96sI=" + }, + "@angular/platform-browser-dynamic": { + "version": "9.0.0", + "resolved": "https://registry.npm.taobao.org/@angular/platform-browser-dynamic/download/@angular/platform-browser-dynamic-9.0.0.tgz", + "integrity": "sha1-G4c1XCDQsqBGwZFAhXAaPVztUto=" + }, + "@angular/router": { + "version": "9.0.0", + "resolved": "https://registry.npm.taobao.org/@angular/router/download/@angular/router-9.0.0.tgz", + "integrity": "sha1-EXhPyM6cszFMfsEIP/m+fGERgcI=" + }, + "@babel/code-frame": { + "version": "7.5.5", + "resolved": "https://registry.npm.taobao.org/@babel/code-frame/download/@babel/code-frame-7.5.5.tgz", + "integrity": "sha1-vAeC9tafe31JUxIZaZuYj2aaj50=", + "dev": true, + "requires": { + "@babel/highlight": "^7.0.0" + } + }, + "@babel/core": { + "version": "7.7.7", + "resolved": "https://registry.npm.taobao.org/@babel/core/download/@babel/core-7.7.7.tgz?cache=0&sync_timestamp=1580387977677&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fcore%2Fdownload%2F%40babel%2Fcore-7.7.7.tgz", + "integrity": "sha1-7hVdLhIwC8wM/2qK1G8q9QY4A+k=", + "dev": true, + "requires": { + "@babel/code-frame": "^7.5.5", + "@babel/generator": "^7.7.7", + "@babel/helpers": "^7.7.4", + "@babel/parser": "^7.7.7", + "@babel/template": "^7.7.4", + "@babel/traverse": "^7.7.4", + "@babel/types": "^7.7.4", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "json5": "^2.1.0", + "lodash": "^4.17.13", + "resolve": "^1.3.2", + "semver": "^5.4.1", + "source-map": "^0.5.0" + }, + "dependencies": { + "json5": { + "version": "2.1.1", + "resolved": "https://registry.npm.taobao.org/json5/download/json5-2.1.1.tgz", + "integrity": "sha1-gbbLBOm6SW8ccAXQe0NoomOPkLY=", + "dev": true, + "requires": { + "minimist": "^1.2.0" + } + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npm.taobao.org/semver/download/semver-5.7.1.tgz", + "integrity": "sha1-qVT5Ma66UI0we78Gnv8MAclhFvc=", + "dev": true + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + } + } + }, + "@babel/generator": { + "version": "7.7.7", + "resolved": "https://registry.npm.taobao.org/@babel/generator/download/@babel/generator-7.7.7.tgz", + "integrity": "sha1-hZrHM8RMdBSOGnKYCmTshLhfT0U=", + "dev": true, + "requires": { + "@babel/types": "^7.7.4", + "jsesc": "^2.5.1", + "lodash": "^4.17.13", + "source-map": "^0.5.0" + }, + "dependencies": { + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + } + } + }, + "@babel/helper-annotate-as-pure": { + "version": "7.8.3", + "resolved": "https://registry.npm.taobao.org/@babel/helper-annotate-as-pure/download/@babel/helper-annotate-as-pure-7.8.3.tgz", + "integrity": "sha1-YLwLxlf2Ogkk/5pLSgskoTz03u4=", + "dev": true, + "requires": { + "@babel/types": "^7.8.3" + }, + "dependencies": { + "@babel/types": { + "version": "7.8.3", + "resolved": "https://registry.npm.taobao.org/@babel/types/download/@babel/types-7.8.3.tgz", + "integrity": "sha1-Wjg9/6VBbbG3Pe3/0xH/0HiPsxw=", + "dev": true, + "requires": { + "esutils": "^2.0.2", + "lodash": "^4.17.13", + "to-fast-properties": "^2.0.0" + } + } + } + }, + "@babel/helper-builder-binary-assignment-operator-visitor": { + "version": "7.8.3", + "resolved": "https://registry.npm.taobao.org/@babel/helper-builder-binary-assignment-operator-visitor/download/@babel/helper-builder-binary-assignment-operator-visitor-7.8.3.tgz", + "integrity": "sha1-yECXpCegYaxWocMOv1S3si0kFQM=", + "dev": true, + "requires": { + "@babel/helper-explode-assignable-expression": "^7.8.3", + "@babel/types": "^7.8.3" + }, + "dependencies": { + "@babel/types": { + "version": "7.8.3", + "resolved": "https://registry.npm.taobao.org/@babel/types/download/@babel/types-7.8.3.tgz", + "integrity": "sha1-Wjg9/6VBbbG3Pe3/0xH/0HiPsxw=", + "dev": true, + "requires": { + "esutils": "^2.0.2", + "lodash": "^4.17.13", + "to-fast-properties": "^2.0.0" + } + } + } + }, + "@babel/helper-call-delegate": { + "version": "7.8.3", + "resolved": "https://registry.npm.taobao.org/@babel/helper-call-delegate/download/@babel/helper-call-delegate-7.8.3.tgz", + "integrity": "sha1-3oJhmJiqYF1AnEK+b/uNcgRXlpI=", + "dev": true, + "requires": { + "@babel/helper-hoist-variables": "^7.8.3", + "@babel/traverse": "^7.8.3", + "@babel/types": "^7.8.3" + }, + "dependencies": { + "@babel/code-frame": { + "version": "7.8.3", + "resolved": "https://registry.npm.taobao.org/@babel/code-frame/download/@babel/code-frame-7.8.3.tgz", + "integrity": "sha1-M+JZA9dIEYFTThLsCiXxa2/PQZ4=", + "dev": true, + "requires": { + "@babel/highlight": "^7.8.3" + } + }, + "@babel/generator": { + "version": "7.8.4", + "resolved": "https://registry.npm.taobao.org/@babel/generator/download/@babel/generator-7.8.4.tgz", + "integrity": "sha1-NbvHRIaVb+QlGCn59sSDMOjQmF4=", + "dev": true, + "requires": { + "@babel/types": "^7.8.3", + "jsesc": "^2.5.1", + "lodash": "^4.17.13", + "source-map": "^0.5.0" + } + }, + "@babel/helper-function-name": { + "version": "7.8.3", + "resolved": "https://registry.npm.taobao.org/@babel/helper-function-name/download/@babel/helper-function-name-7.8.3.tgz", + "integrity": "sha1-7utmWgGx8RBo6fuGrVahyxqCTMo=", + "dev": true, + "requires": { + "@babel/helper-get-function-arity": "^7.8.3", + "@babel/template": "^7.8.3", + "@babel/types": "^7.8.3" + } + }, + "@babel/helper-get-function-arity": { + "version": "7.8.3", + "resolved": "https://registry.npm.taobao.org/@babel/helper-get-function-arity/download/@babel/helper-get-function-arity-7.8.3.tgz", + "integrity": "sha1-uJS5R70AQ4HOY+odufCFR+kgq9U=", + "dev": true, + "requires": { + "@babel/types": "^7.8.3" + } + }, + "@babel/helper-split-export-declaration": { + "version": "7.8.3", + "resolved": "https://registry.npm.taobao.org/@babel/helper-split-export-declaration/download/@babel/helper-split-export-declaration-7.8.3.tgz", + "integrity": "sha1-ManzAHD5E2inGCzwX4MXgQZfx6k=", + "dev": true, + "requires": { + "@babel/types": "^7.8.3" + } + }, + "@babel/highlight": { + "version": "7.8.3", + "resolved": "https://registry.npm.taobao.org/@babel/highlight/download/@babel/highlight-7.8.3.tgz", + "integrity": "sha1-KPFz0EIj6qpZvB1Dmjg25tEmV5c=", + "dev": true, + "requires": { + "chalk": "^2.0.0", + "esutils": "^2.0.2", + "js-tokens": "^4.0.0" + } + }, + "@babel/parser": { + "version": "7.8.4", + "resolved": "https://registry.npm.taobao.org/@babel/parser/download/@babel/parser-7.8.4.tgz", + "integrity": "sha1-0dvmRpHWA1ipdClfpT2gdN0s6Og=", + "dev": true + }, + "@babel/template": { + "version": "7.8.3", + "resolved": "https://registry.npm.taobao.org/@babel/template/download/@babel/template-7.8.3.tgz", + "integrity": "sha1-4CrQT+JipleAkyf1eAVsoV/U0bg=", + "dev": true, + "requires": { + "@babel/code-frame": "^7.8.3", + "@babel/parser": "^7.8.3", + "@babel/types": "^7.8.3" + } + }, + "@babel/traverse": { + "version": "7.8.4", + "resolved": "https://registry.npm.taobao.org/@babel/traverse/download/@babel/traverse-7.8.4.tgz", + "integrity": "sha1-8IRYIjZfnVsOMS7TlZ0/gn+Gnjw=", + "dev": true, + "requires": { + "@babel/code-frame": "^7.8.3", + "@babel/generator": "^7.8.4", + "@babel/helper-function-name": "^7.8.3", + "@babel/helper-split-export-declaration": "^7.8.3", + "@babel/parser": "^7.8.4", + "@babel/types": "^7.8.3", + "debug": "^4.1.0", + "globals": "^11.1.0", + "lodash": "^4.17.13" + } + }, + "@babel/types": { + "version": "7.8.3", + "resolved": "https://registry.npm.taobao.org/@babel/types/download/@babel/types-7.8.3.tgz", + "integrity": "sha1-Wjg9/6VBbbG3Pe3/0xH/0HiPsxw=", + "dev": true, + "requires": { + "esutils": "^2.0.2", + "lodash": "^4.17.13", + "to-fast-properties": "^2.0.0" + } + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + } + } + }, + "@babel/helper-create-regexp-features-plugin": { + "version": "7.8.3", + "resolved": "https://registry.npm.taobao.org/@babel/helper-create-regexp-features-plugin/download/@babel/helper-create-regexp-features-plugin-7.8.3.tgz", + "integrity": "sha1-x3QmjJXsB+6SR2o4YrdcwoOb63k=", + "dev": true, + "requires": { + "@babel/helper-regex": "^7.8.3", + "regexpu-core": "^4.6.0" + } + }, + "@babel/helper-define-map": { + "version": "7.8.3", + "resolved": "https://registry.npm.taobao.org/@babel/helper-define-map/download/@babel/helper-define-map-7.8.3.tgz", + "integrity": "sha1-oGVcrVRRw3YLcm66h18c2PqgLBU=", + "dev": true, + "requires": { + "@babel/helper-function-name": "^7.8.3", + "@babel/types": "^7.8.3", + "lodash": "^4.17.13" + }, + "dependencies": { + "@babel/code-frame": { + "version": "7.8.3", + "resolved": "https://registry.npm.taobao.org/@babel/code-frame/download/@babel/code-frame-7.8.3.tgz", + "integrity": "sha1-M+JZA9dIEYFTThLsCiXxa2/PQZ4=", + "dev": true, + "requires": { + "@babel/highlight": "^7.8.3" + } + }, + "@babel/helper-function-name": { + "version": "7.8.3", + "resolved": "https://registry.npm.taobao.org/@babel/helper-function-name/download/@babel/helper-function-name-7.8.3.tgz", + "integrity": "sha1-7utmWgGx8RBo6fuGrVahyxqCTMo=", + "dev": true, + "requires": { + "@babel/helper-get-function-arity": "^7.8.3", + "@babel/template": "^7.8.3", + "@babel/types": "^7.8.3" + } + }, + "@babel/helper-get-function-arity": { + "version": "7.8.3", + "resolved": "https://registry.npm.taobao.org/@babel/helper-get-function-arity/download/@babel/helper-get-function-arity-7.8.3.tgz", + "integrity": "sha1-uJS5R70AQ4HOY+odufCFR+kgq9U=", + "dev": true, + "requires": { + "@babel/types": "^7.8.3" + } + }, + "@babel/highlight": { + "version": "7.8.3", + "resolved": "https://registry.npm.taobao.org/@babel/highlight/download/@babel/highlight-7.8.3.tgz", + "integrity": "sha1-KPFz0EIj6qpZvB1Dmjg25tEmV5c=", + "dev": true, + "requires": { + "chalk": "^2.0.0", + "esutils": "^2.0.2", + "js-tokens": "^4.0.0" + } + }, + "@babel/parser": { + "version": "7.8.4", + "resolved": "https://registry.npm.taobao.org/@babel/parser/download/@babel/parser-7.8.4.tgz", + "integrity": "sha1-0dvmRpHWA1ipdClfpT2gdN0s6Og=", + "dev": true + }, + "@babel/template": { + "version": "7.8.3", + "resolved": "https://registry.npm.taobao.org/@babel/template/download/@babel/template-7.8.3.tgz", + "integrity": "sha1-4CrQT+JipleAkyf1eAVsoV/U0bg=", + "dev": true, + "requires": { + "@babel/code-frame": "^7.8.3", + "@babel/parser": "^7.8.3", + "@babel/types": "^7.8.3" + } + }, + "@babel/types": { + "version": "7.8.3", + "resolved": "https://registry.npm.taobao.org/@babel/types/download/@babel/types-7.8.3.tgz", + "integrity": "sha1-Wjg9/6VBbbG3Pe3/0xH/0HiPsxw=", + "dev": true, + "requires": { + "esutils": "^2.0.2", + "lodash": "^4.17.13", + "to-fast-properties": "^2.0.0" + } + } + } + }, + "@babel/helper-explode-assignable-expression": { + "version": "7.8.3", + "resolved": "https://registry.npm.taobao.org/@babel/helper-explode-assignable-expression/download/@babel/helper-explode-assignable-expression-7.8.3.tgz", + "integrity": "sha1-pyjcW06J4w/C38fQT6KKkwZT+YI=", + "dev": true, + "requires": { + "@babel/traverse": "^7.8.3", + "@babel/types": "^7.8.3" + }, + "dependencies": { + "@babel/code-frame": { + "version": "7.8.3", + "resolved": "https://registry.npm.taobao.org/@babel/code-frame/download/@babel/code-frame-7.8.3.tgz", + "integrity": "sha1-M+JZA9dIEYFTThLsCiXxa2/PQZ4=", + "dev": true, + "requires": { + "@babel/highlight": "^7.8.3" + } + }, + "@babel/generator": { + "version": "7.8.4", + "resolved": "https://registry.npm.taobao.org/@babel/generator/download/@babel/generator-7.8.4.tgz", + "integrity": "sha1-NbvHRIaVb+QlGCn59sSDMOjQmF4=", + "dev": true, + "requires": { + "@babel/types": "^7.8.3", + "jsesc": "^2.5.1", + "lodash": "^4.17.13", + "source-map": "^0.5.0" + } + }, + "@babel/helper-function-name": { + "version": "7.8.3", + "resolved": "https://registry.npm.taobao.org/@babel/helper-function-name/download/@babel/helper-function-name-7.8.3.tgz", + "integrity": "sha1-7utmWgGx8RBo6fuGrVahyxqCTMo=", + "dev": true, + "requires": { + "@babel/helper-get-function-arity": "^7.8.3", + "@babel/template": "^7.8.3", + "@babel/types": "^7.8.3" + } + }, + "@babel/helper-get-function-arity": { + "version": "7.8.3", + "resolved": "https://registry.npm.taobao.org/@babel/helper-get-function-arity/download/@babel/helper-get-function-arity-7.8.3.tgz", + "integrity": "sha1-uJS5R70AQ4HOY+odufCFR+kgq9U=", + "dev": true, + "requires": { + "@babel/types": "^7.8.3" + } + }, + "@babel/helper-split-export-declaration": { + "version": "7.8.3", + "resolved": "https://registry.npm.taobao.org/@babel/helper-split-export-declaration/download/@babel/helper-split-export-declaration-7.8.3.tgz", + "integrity": "sha1-ManzAHD5E2inGCzwX4MXgQZfx6k=", + "dev": true, + "requires": { + "@babel/types": "^7.8.3" + } + }, + "@babel/highlight": { + "version": "7.8.3", + "resolved": "https://registry.npm.taobao.org/@babel/highlight/download/@babel/highlight-7.8.3.tgz", + "integrity": "sha1-KPFz0EIj6qpZvB1Dmjg25tEmV5c=", + "dev": true, + "requires": { + "chalk": "^2.0.0", + "esutils": "^2.0.2", + "js-tokens": "^4.0.0" + } + }, + "@babel/parser": { + "version": "7.8.4", + "resolved": "https://registry.npm.taobao.org/@babel/parser/download/@babel/parser-7.8.4.tgz", + "integrity": "sha1-0dvmRpHWA1ipdClfpT2gdN0s6Og=", + "dev": true + }, + "@babel/template": { + "version": "7.8.3", + "resolved": "https://registry.npm.taobao.org/@babel/template/download/@babel/template-7.8.3.tgz", + "integrity": "sha1-4CrQT+JipleAkyf1eAVsoV/U0bg=", + "dev": true, + "requires": { + "@babel/code-frame": "^7.8.3", + "@babel/parser": "^7.8.3", + "@babel/types": "^7.8.3" + } + }, + "@babel/traverse": { + "version": "7.8.4", + "resolved": "https://registry.npm.taobao.org/@babel/traverse/download/@babel/traverse-7.8.4.tgz", + "integrity": "sha1-8IRYIjZfnVsOMS7TlZ0/gn+Gnjw=", + "dev": true, + "requires": { + "@babel/code-frame": "^7.8.3", + "@babel/generator": "^7.8.4", + "@babel/helper-function-name": "^7.8.3", + "@babel/helper-split-export-declaration": "^7.8.3", + "@babel/parser": "^7.8.4", + "@babel/types": "^7.8.3", + "debug": "^4.1.0", + "globals": "^11.1.0", + "lodash": "^4.17.13" + } + }, + "@babel/types": { + "version": "7.8.3", + "resolved": "https://registry.npm.taobao.org/@babel/types/download/@babel/types-7.8.3.tgz", + "integrity": "sha1-Wjg9/6VBbbG3Pe3/0xH/0HiPsxw=", + "dev": true, + "requires": { + "esutils": "^2.0.2", + "lodash": "^4.17.13", + "to-fast-properties": "^2.0.0" + } + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + } + } + }, + "@babel/helper-function-name": { + "version": "7.7.4", + "resolved": "https://registry.npm.taobao.org/@babel/helper-function-name/download/@babel/helper-function-name-7.7.4.tgz", + "integrity": "sha1-q24EHnE11DbY8KPsoV3ltno0Gi4=", + "dev": true, + "requires": { + "@babel/helper-get-function-arity": "^7.7.4", + "@babel/template": "^7.7.4", + "@babel/types": "^7.7.4" + } + }, + "@babel/helper-get-function-arity": { + "version": "7.7.4", + "resolved": "https://registry.npm.taobao.org/@babel/helper-get-function-arity/download/@babel/helper-get-function-arity-7.7.4.tgz", + "integrity": "sha1-y0Y0jS+ICOYy8KsEgXITDmNgBfA=", + "dev": true, + "requires": { + "@babel/types": "^7.7.4" + } + }, + "@babel/helper-hoist-variables": { + "version": "7.8.3", + "resolved": "https://registry.npm.taobao.org/@babel/helper-hoist-variables/download/@babel/helper-hoist-variables-7.8.3.tgz", + "integrity": "sha1-Hb6ba1XXjJtBg/yM3G4wzrg7cTQ=", + "dev": true, + "requires": { + "@babel/types": "^7.8.3" + }, + "dependencies": { + "@babel/types": { + "version": "7.8.3", + "resolved": "https://registry.npm.taobao.org/@babel/types/download/@babel/types-7.8.3.tgz", + "integrity": "sha1-Wjg9/6VBbbG3Pe3/0xH/0HiPsxw=", + "dev": true, + "requires": { + "esutils": "^2.0.2", + "lodash": "^4.17.13", + "to-fast-properties": "^2.0.0" + } + } + } + }, + "@babel/helper-member-expression-to-functions": { + "version": "7.8.3", + "resolved": "https://registry.npm.taobao.org/@babel/helper-member-expression-to-functions/download/@babel/helper-member-expression-to-functions-7.8.3.tgz", + "integrity": "sha1-ZZtxBJjqbB2ZB+DHPyBu7n2twkw=", + "dev": true, + "requires": { + "@babel/types": "^7.8.3" + }, + "dependencies": { + "@babel/types": { + "version": "7.8.3", + "resolved": "https://registry.npm.taobao.org/@babel/types/download/@babel/types-7.8.3.tgz", + "integrity": "sha1-Wjg9/6VBbbG3Pe3/0xH/0HiPsxw=", + "dev": true, + "requires": { + "esutils": "^2.0.2", + "lodash": "^4.17.13", + "to-fast-properties": "^2.0.0" + } + } + } + }, + "@babel/helper-module-imports": { + "version": "7.8.3", + "resolved": "https://registry.npm.taobao.org/@babel/helper-module-imports/download/@babel/helper-module-imports-7.8.3.tgz", + "integrity": "sha1-f+OVibOcAWMxtrjD9EHo8LFBlJg=", + "dev": true, + "requires": { + "@babel/types": "^7.8.3" + }, + "dependencies": { + "@babel/types": { + "version": "7.8.3", + "resolved": "https://registry.npm.taobao.org/@babel/types/download/@babel/types-7.8.3.tgz", + "integrity": "sha1-Wjg9/6VBbbG3Pe3/0xH/0HiPsxw=", + "dev": true, + "requires": { + "esutils": "^2.0.2", + "lodash": "^4.17.13", + "to-fast-properties": "^2.0.0" + } + } + } + }, + "@babel/helper-module-transforms": { + "version": "7.8.3", + "resolved": "https://registry.npm.taobao.org/@babel/helper-module-transforms/download/@babel/helper-module-transforms-7.8.3.tgz", + "integrity": "sha1-0wXjXQK+5yD7wsPDYjqgwxbAFZA=", + "dev": true, + "requires": { + "@babel/helper-module-imports": "^7.8.3", + "@babel/helper-simple-access": "^7.8.3", + "@babel/helper-split-export-declaration": "^7.8.3", + "@babel/template": "^7.8.3", + "@babel/types": "^7.8.3", + "lodash": "^4.17.13" + }, + "dependencies": { + "@babel/code-frame": { + "version": "7.8.3", + "resolved": "https://registry.npm.taobao.org/@babel/code-frame/download/@babel/code-frame-7.8.3.tgz", + "integrity": "sha1-M+JZA9dIEYFTThLsCiXxa2/PQZ4=", + "dev": true, + "requires": { + "@babel/highlight": "^7.8.3" + } + }, + "@babel/helper-split-export-declaration": { + "version": "7.8.3", + "resolved": "https://registry.npm.taobao.org/@babel/helper-split-export-declaration/download/@babel/helper-split-export-declaration-7.8.3.tgz", + "integrity": "sha1-ManzAHD5E2inGCzwX4MXgQZfx6k=", + "dev": true, + "requires": { + "@babel/types": "^7.8.3" + } + }, + "@babel/highlight": { + "version": "7.8.3", + "resolved": "https://registry.npm.taobao.org/@babel/highlight/download/@babel/highlight-7.8.3.tgz", + "integrity": "sha1-KPFz0EIj6qpZvB1Dmjg25tEmV5c=", + "dev": true, + "requires": { + "chalk": "^2.0.0", + "esutils": "^2.0.2", + "js-tokens": "^4.0.0" + } + }, + "@babel/parser": { + "version": "7.8.4", + "resolved": "https://registry.npm.taobao.org/@babel/parser/download/@babel/parser-7.8.4.tgz", + "integrity": "sha1-0dvmRpHWA1ipdClfpT2gdN0s6Og=", + "dev": true + }, + "@babel/template": { + "version": "7.8.3", + "resolved": "https://registry.npm.taobao.org/@babel/template/download/@babel/template-7.8.3.tgz", + "integrity": "sha1-4CrQT+JipleAkyf1eAVsoV/U0bg=", + "dev": true, + "requires": { + "@babel/code-frame": "^7.8.3", + "@babel/parser": "^7.8.3", + "@babel/types": "^7.8.3" + } + }, + "@babel/types": { + "version": "7.8.3", + "resolved": "https://registry.npm.taobao.org/@babel/types/download/@babel/types-7.8.3.tgz", + "integrity": "sha1-Wjg9/6VBbbG3Pe3/0xH/0HiPsxw=", + "dev": true, + "requires": { + "esutils": "^2.0.2", + "lodash": "^4.17.13", + "to-fast-properties": "^2.0.0" + } + } + } + }, + "@babel/helper-optimise-call-expression": { + "version": "7.8.3", + "resolved": "https://registry.npm.taobao.org/@babel/helper-optimise-call-expression/download/@babel/helper-optimise-call-expression-7.8.3.tgz", + "integrity": "sha1-ftBxgT0Jx1KY708giVYAa2ER7Lk=", + "dev": true, + "requires": { + "@babel/types": "^7.8.3" + }, + "dependencies": { + "@babel/types": { + "version": "7.8.3", + "resolved": "https://registry.npm.taobao.org/@babel/types/download/@babel/types-7.8.3.tgz", + "integrity": "sha1-Wjg9/6VBbbG3Pe3/0xH/0HiPsxw=", + "dev": true, + "requires": { + "esutils": "^2.0.2", + "lodash": "^4.17.13", + "to-fast-properties": "^2.0.0" + } + } + } + }, + "@babel/helper-plugin-utils": { + "version": "7.8.3", + "resolved": "https://registry.npm.taobao.org/@babel/helper-plugin-utils/download/@babel/helper-plugin-utils-7.8.3.tgz", + "integrity": "sha1-nqKTvhm6vA9S/4yoizTDYRsghnA=", + "dev": true + }, + "@babel/helper-regex": { + "version": "7.8.3", + "resolved": "https://registry.npm.taobao.org/@babel/helper-regex/download/@babel/helper-regex-7.8.3.tgz", + "integrity": "sha1-E5dyYH1RuT8j7/5yEFsxnSpMaWU=", + "dev": true, + "requires": { + "lodash": "^4.17.13" + } + }, + "@babel/helper-remap-async-to-generator": { + "version": "7.8.3", + "resolved": "https://registry.npm.taobao.org/@babel/helper-remap-async-to-generator/download/@babel/helper-remap-async-to-generator-7.8.3.tgz", + "integrity": "sha1-JzxgDYub9QBhQsHjWIfVVcEu3YY=", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.8.3", + "@babel/helper-wrap-function": "^7.8.3", + "@babel/template": "^7.8.3", + "@babel/traverse": "^7.8.3", + "@babel/types": "^7.8.3" + }, + "dependencies": { + "@babel/code-frame": { + "version": "7.8.3", + "resolved": "https://registry.npm.taobao.org/@babel/code-frame/download/@babel/code-frame-7.8.3.tgz", + "integrity": "sha1-M+JZA9dIEYFTThLsCiXxa2/PQZ4=", + "dev": true, + "requires": { + "@babel/highlight": "^7.8.3" + } + }, + "@babel/generator": { + "version": "7.8.4", + "resolved": "https://registry.npm.taobao.org/@babel/generator/download/@babel/generator-7.8.4.tgz", + "integrity": "sha1-NbvHRIaVb+QlGCn59sSDMOjQmF4=", + "dev": true, + "requires": { + "@babel/types": "^7.8.3", + "jsesc": "^2.5.1", + "lodash": "^4.17.13", + "source-map": "^0.5.0" + } + }, + "@babel/helper-function-name": { + "version": "7.8.3", + "resolved": "https://registry.npm.taobao.org/@babel/helper-function-name/download/@babel/helper-function-name-7.8.3.tgz", + "integrity": "sha1-7utmWgGx8RBo6fuGrVahyxqCTMo=", + "dev": true, + "requires": { + "@babel/helper-get-function-arity": "^7.8.3", + "@babel/template": "^7.8.3", + "@babel/types": "^7.8.3" + } + }, + "@babel/helper-get-function-arity": { + "version": "7.8.3", + "resolved": "https://registry.npm.taobao.org/@babel/helper-get-function-arity/download/@babel/helper-get-function-arity-7.8.3.tgz", + "integrity": "sha1-uJS5R70AQ4HOY+odufCFR+kgq9U=", + "dev": true, + "requires": { + "@babel/types": "^7.8.3" + } + }, + "@babel/helper-split-export-declaration": { + "version": "7.8.3", + "resolved": "https://registry.npm.taobao.org/@babel/helper-split-export-declaration/download/@babel/helper-split-export-declaration-7.8.3.tgz", + "integrity": "sha1-ManzAHD5E2inGCzwX4MXgQZfx6k=", + "dev": true, + "requires": { + "@babel/types": "^7.8.3" + } + }, + "@babel/highlight": { + "version": "7.8.3", + "resolved": "https://registry.npm.taobao.org/@babel/highlight/download/@babel/highlight-7.8.3.tgz", + "integrity": "sha1-KPFz0EIj6qpZvB1Dmjg25tEmV5c=", + "dev": true, + "requires": { + "chalk": "^2.0.0", + "esutils": "^2.0.2", + "js-tokens": "^4.0.0" + } + }, + "@babel/parser": { + "version": "7.8.4", + "resolved": "https://registry.npm.taobao.org/@babel/parser/download/@babel/parser-7.8.4.tgz", + "integrity": "sha1-0dvmRpHWA1ipdClfpT2gdN0s6Og=", + "dev": true + }, + "@babel/template": { + "version": "7.8.3", + "resolved": "https://registry.npm.taobao.org/@babel/template/download/@babel/template-7.8.3.tgz", + "integrity": "sha1-4CrQT+JipleAkyf1eAVsoV/U0bg=", + "dev": true, + "requires": { + "@babel/code-frame": "^7.8.3", + "@babel/parser": "^7.8.3", + "@babel/types": "^7.8.3" + } + }, + "@babel/traverse": { + "version": "7.8.4", + "resolved": "https://registry.npm.taobao.org/@babel/traverse/download/@babel/traverse-7.8.4.tgz", + "integrity": "sha1-8IRYIjZfnVsOMS7TlZ0/gn+Gnjw=", + "dev": true, + "requires": { + "@babel/code-frame": "^7.8.3", + "@babel/generator": "^7.8.4", + "@babel/helper-function-name": "^7.8.3", + "@babel/helper-split-export-declaration": "^7.8.3", + "@babel/parser": "^7.8.4", + "@babel/types": "^7.8.3", + "debug": "^4.1.0", + "globals": "^11.1.0", + "lodash": "^4.17.13" + } + }, + "@babel/types": { + "version": "7.8.3", + "resolved": "https://registry.npm.taobao.org/@babel/types/download/@babel/types-7.8.3.tgz", + "integrity": "sha1-Wjg9/6VBbbG3Pe3/0xH/0HiPsxw=", + "dev": true, + "requires": { + "esutils": "^2.0.2", + "lodash": "^4.17.13", + "to-fast-properties": "^2.0.0" + } + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + } + } + }, + "@babel/helper-replace-supers": { + "version": "7.8.3", + "resolved": "https://registry.npm.taobao.org/@babel/helper-replace-supers/download/@babel/helper-replace-supers-7.8.3.tgz", + "integrity": "sha1-kRktJfarvNQdqKmJ1EkldPsVMLw=", + "dev": true, + "requires": { + "@babel/helper-member-expression-to-functions": "^7.8.3", + "@babel/helper-optimise-call-expression": "^7.8.3", + "@babel/traverse": "^7.8.3", + "@babel/types": "^7.8.3" + }, + "dependencies": { + "@babel/code-frame": { + "version": "7.8.3", + "resolved": "https://registry.npm.taobao.org/@babel/code-frame/download/@babel/code-frame-7.8.3.tgz", + "integrity": "sha1-M+JZA9dIEYFTThLsCiXxa2/PQZ4=", + "dev": true, + "requires": { + "@babel/highlight": "^7.8.3" + } + }, + "@babel/generator": { + "version": "7.8.4", + "resolved": "https://registry.npm.taobao.org/@babel/generator/download/@babel/generator-7.8.4.tgz", + "integrity": "sha1-NbvHRIaVb+QlGCn59sSDMOjQmF4=", + "dev": true, + "requires": { + "@babel/types": "^7.8.3", + "jsesc": "^2.5.1", + "lodash": "^4.17.13", + "source-map": "^0.5.0" + } + }, + "@babel/helper-function-name": { + "version": "7.8.3", + "resolved": "https://registry.npm.taobao.org/@babel/helper-function-name/download/@babel/helper-function-name-7.8.3.tgz", + "integrity": "sha1-7utmWgGx8RBo6fuGrVahyxqCTMo=", + "dev": true, + "requires": { + "@babel/helper-get-function-arity": "^7.8.3", + "@babel/template": "^7.8.3", + "@babel/types": "^7.8.3" + } + }, + "@babel/helper-get-function-arity": { + "version": "7.8.3", + "resolved": "https://registry.npm.taobao.org/@babel/helper-get-function-arity/download/@babel/helper-get-function-arity-7.8.3.tgz", + "integrity": "sha1-uJS5R70AQ4HOY+odufCFR+kgq9U=", + "dev": true, + "requires": { + "@babel/types": "^7.8.3" + } + }, + "@babel/helper-split-export-declaration": { + "version": "7.8.3", + "resolved": "https://registry.npm.taobao.org/@babel/helper-split-export-declaration/download/@babel/helper-split-export-declaration-7.8.3.tgz", + "integrity": "sha1-ManzAHD5E2inGCzwX4MXgQZfx6k=", + "dev": true, + "requires": { + "@babel/types": "^7.8.3" + } + }, + "@babel/highlight": { + "version": "7.8.3", + "resolved": "https://registry.npm.taobao.org/@babel/highlight/download/@babel/highlight-7.8.3.tgz", + "integrity": "sha1-KPFz0EIj6qpZvB1Dmjg25tEmV5c=", + "dev": true, + "requires": { + "chalk": "^2.0.0", + "esutils": "^2.0.2", + "js-tokens": "^4.0.0" + } + }, + "@babel/parser": { + "version": "7.8.4", + "resolved": "https://registry.npm.taobao.org/@babel/parser/download/@babel/parser-7.8.4.tgz", + "integrity": "sha1-0dvmRpHWA1ipdClfpT2gdN0s6Og=", + "dev": true + }, + "@babel/template": { + "version": "7.8.3", + "resolved": "https://registry.npm.taobao.org/@babel/template/download/@babel/template-7.8.3.tgz", + "integrity": "sha1-4CrQT+JipleAkyf1eAVsoV/U0bg=", + "dev": true, + "requires": { + "@babel/code-frame": "^7.8.3", + "@babel/parser": "^7.8.3", + "@babel/types": "^7.8.3" + } + }, + "@babel/traverse": { + "version": "7.8.4", + "resolved": "https://registry.npm.taobao.org/@babel/traverse/download/@babel/traverse-7.8.4.tgz", + "integrity": "sha1-8IRYIjZfnVsOMS7TlZ0/gn+Gnjw=", + "dev": true, + "requires": { + "@babel/code-frame": "^7.8.3", + "@babel/generator": "^7.8.4", + "@babel/helper-function-name": "^7.8.3", + "@babel/helper-split-export-declaration": "^7.8.3", + "@babel/parser": "^7.8.4", + "@babel/types": "^7.8.3", + "debug": "^4.1.0", + "globals": "^11.1.0", + "lodash": "^4.17.13" + } + }, + "@babel/types": { + "version": "7.8.3", + "resolved": "https://registry.npm.taobao.org/@babel/types/download/@babel/types-7.8.3.tgz", + "integrity": "sha1-Wjg9/6VBbbG3Pe3/0xH/0HiPsxw=", + "dev": true, + "requires": { + "esutils": "^2.0.2", + "lodash": "^4.17.13", + "to-fast-properties": "^2.0.0" + } + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + } + } + }, + "@babel/helper-simple-access": { + "version": "7.8.3", + "resolved": "https://registry.npm.taobao.org/@babel/helper-simple-access/download/@babel/helper-simple-access-7.8.3.tgz", + "integrity": "sha1-f4EJkotNq0ZUB2mGr1dSMd62Oa4=", + "dev": true, + "requires": { + "@babel/template": "^7.8.3", + "@babel/types": "^7.8.3" + }, + "dependencies": { + "@babel/code-frame": { + "version": "7.8.3", + "resolved": "https://registry.npm.taobao.org/@babel/code-frame/download/@babel/code-frame-7.8.3.tgz", + "integrity": "sha1-M+JZA9dIEYFTThLsCiXxa2/PQZ4=", + "dev": true, + "requires": { + "@babel/highlight": "^7.8.3" + } + }, + "@babel/highlight": { + "version": "7.8.3", + "resolved": "https://registry.npm.taobao.org/@babel/highlight/download/@babel/highlight-7.8.3.tgz", + "integrity": "sha1-KPFz0EIj6qpZvB1Dmjg25tEmV5c=", + "dev": true, + "requires": { + "chalk": "^2.0.0", + "esutils": "^2.0.2", + "js-tokens": "^4.0.0" + } + }, + "@babel/parser": { + "version": "7.8.4", + "resolved": "https://registry.npm.taobao.org/@babel/parser/download/@babel/parser-7.8.4.tgz", + "integrity": "sha1-0dvmRpHWA1ipdClfpT2gdN0s6Og=", + "dev": true + }, + "@babel/template": { + "version": "7.8.3", + "resolved": "https://registry.npm.taobao.org/@babel/template/download/@babel/template-7.8.3.tgz", + "integrity": "sha1-4CrQT+JipleAkyf1eAVsoV/U0bg=", + "dev": true, + "requires": { + "@babel/code-frame": "^7.8.3", + "@babel/parser": "^7.8.3", + "@babel/types": "^7.8.3" + } + }, + "@babel/types": { + "version": "7.8.3", + "resolved": "https://registry.npm.taobao.org/@babel/types/download/@babel/types-7.8.3.tgz", + "integrity": "sha1-Wjg9/6VBbbG3Pe3/0xH/0HiPsxw=", + "dev": true, + "requires": { + "esutils": "^2.0.2", + "lodash": "^4.17.13", + "to-fast-properties": "^2.0.0" + } + } + } + }, + "@babel/helper-split-export-declaration": { + "version": "7.7.4", + "resolved": "https://registry.npm.taobao.org/@babel/helper-split-export-declaration/download/@babel/helper-split-export-declaration-7.7.4.tgz", + "integrity": "sha1-Vykq9gRDxKNiLPdAQN3Cjmgzb9g=", + "dev": true, + "requires": { + "@babel/types": "^7.7.4" + } + }, + "@babel/helper-wrap-function": { + "version": "7.8.3", + "resolved": "https://registry.npm.taobao.org/@babel/helper-wrap-function/download/@babel/helper-wrap-function-7.8.3.tgz", + "integrity": "sha1-nb2yu1XvFKqgH+jJm2Kb1TUthhA=", + "dev": true, + "requires": { + "@babel/helper-function-name": "^7.8.3", + "@babel/template": "^7.8.3", + "@babel/traverse": "^7.8.3", + "@babel/types": "^7.8.3" + }, + "dependencies": { + "@babel/code-frame": { + "version": "7.8.3", + "resolved": "https://registry.npm.taobao.org/@babel/code-frame/download/@babel/code-frame-7.8.3.tgz", + "integrity": "sha1-M+JZA9dIEYFTThLsCiXxa2/PQZ4=", + "dev": true, + "requires": { + "@babel/highlight": "^7.8.3" + } + }, + "@babel/generator": { + "version": "7.8.4", + "resolved": "https://registry.npm.taobao.org/@babel/generator/download/@babel/generator-7.8.4.tgz", + "integrity": "sha1-NbvHRIaVb+QlGCn59sSDMOjQmF4=", + "dev": true, + "requires": { + "@babel/types": "^7.8.3", + "jsesc": "^2.5.1", + "lodash": "^4.17.13", + "source-map": "^0.5.0" + } + }, + "@babel/helper-function-name": { + "version": "7.8.3", + "resolved": "https://registry.npm.taobao.org/@babel/helper-function-name/download/@babel/helper-function-name-7.8.3.tgz", + "integrity": "sha1-7utmWgGx8RBo6fuGrVahyxqCTMo=", + "dev": true, + "requires": { + "@babel/helper-get-function-arity": "^7.8.3", + "@babel/template": "^7.8.3", + "@babel/types": "^7.8.3" + } + }, + "@babel/helper-get-function-arity": { + "version": "7.8.3", + "resolved": "https://registry.npm.taobao.org/@babel/helper-get-function-arity/download/@babel/helper-get-function-arity-7.8.3.tgz", + "integrity": "sha1-uJS5R70AQ4HOY+odufCFR+kgq9U=", + "dev": true, + "requires": { + "@babel/types": "^7.8.3" + } + }, + "@babel/helper-split-export-declaration": { + "version": "7.8.3", + "resolved": "https://registry.npm.taobao.org/@babel/helper-split-export-declaration/download/@babel/helper-split-export-declaration-7.8.3.tgz", + "integrity": "sha1-ManzAHD5E2inGCzwX4MXgQZfx6k=", + "dev": true, + "requires": { + "@babel/types": "^7.8.3" + } + }, + "@babel/highlight": { + "version": "7.8.3", + "resolved": "https://registry.npm.taobao.org/@babel/highlight/download/@babel/highlight-7.8.3.tgz", + "integrity": "sha1-KPFz0EIj6qpZvB1Dmjg25tEmV5c=", + "dev": true, + "requires": { + "chalk": "^2.0.0", + "esutils": "^2.0.2", + "js-tokens": "^4.0.0" + } + }, + "@babel/parser": { + "version": "7.8.4", + "resolved": "https://registry.npm.taobao.org/@babel/parser/download/@babel/parser-7.8.4.tgz", + "integrity": "sha1-0dvmRpHWA1ipdClfpT2gdN0s6Og=", + "dev": true + }, + "@babel/template": { + "version": "7.8.3", + "resolved": "https://registry.npm.taobao.org/@babel/template/download/@babel/template-7.8.3.tgz", + "integrity": "sha1-4CrQT+JipleAkyf1eAVsoV/U0bg=", + "dev": true, + "requires": { + "@babel/code-frame": "^7.8.3", + "@babel/parser": "^7.8.3", + "@babel/types": "^7.8.3" + } + }, + "@babel/traverse": { + "version": "7.8.4", + "resolved": "https://registry.npm.taobao.org/@babel/traverse/download/@babel/traverse-7.8.4.tgz", + "integrity": "sha1-8IRYIjZfnVsOMS7TlZ0/gn+Gnjw=", + "dev": true, + "requires": { + "@babel/code-frame": "^7.8.3", + "@babel/generator": "^7.8.4", + "@babel/helper-function-name": "^7.8.3", + "@babel/helper-split-export-declaration": "^7.8.3", + "@babel/parser": "^7.8.4", + "@babel/types": "^7.8.3", + "debug": "^4.1.0", + "globals": "^11.1.0", + "lodash": "^4.17.13" + } + }, + "@babel/types": { + "version": "7.8.3", + "resolved": "https://registry.npm.taobao.org/@babel/types/download/@babel/types-7.8.3.tgz", + "integrity": "sha1-Wjg9/6VBbbG3Pe3/0xH/0HiPsxw=", + "dev": true, + "requires": { + "esutils": "^2.0.2", + "lodash": "^4.17.13", + "to-fast-properties": "^2.0.0" + } + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + } + } + }, + "@babel/helpers": { + "version": "7.8.4", + "resolved": "https://registry.npm.taobao.org/@babel/helpers/download/@babel/helpers-7.8.4.tgz", + "integrity": "sha1-dU6z7nJ8Fl4KJA1sIH3nxFXzb3M=", + "dev": true, + "requires": { + "@babel/template": "^7.8.3", + "@babel/traverse": "^7.8.4", + "@babel/types": "^7.8.3" + }, + "dependencies": { + "@babel/code-frame": { + "version": "7.8.3", + "resolved": "https://registry.npm.taobao.org/@babel/code-frame/download/@babel/code-frame-7.8.3.tgz", + "integrity": "sha1-M+JZA9dIEYFTThLsCiXxa2/PQZ4=", + "dev": true, + "requires": { + "@babel/highlight": "^7.8.3" + } + }, + "@babel/generator": { + "version": "7.8.4", + "resolved": "https://registry.npm.taobao.org/@babel/generator/download/@babel/generator-7.8.4.tgz", + "integrity": "sha1-NbvHRIaVb+QlGCn59sSDMOjQmF4=", + "dev": true, + "requires": { + "@babel/types": "^7.8.3", + "jsesc": "^2.5.1", + "lodash": "^4.17.13", + "source-map": "^0.5.0" + } + }, + "@babel/helper-function-name": { + "version": "7.8.3", + "resolved": "https://registry.npm.taobao.org/@babel/helper-function-name/download/@babel/helper-function-name-7.8.3.tgz", + "integrity": "sha1-7utmWgGx8RBo6fuGrVahyxqCTMo=", + "dev": true, + "requires": { + "@babel/helper-get-function-arity": "^7.8.3", + "@babel/template": "^7.8.3", + "@babel/types": "^7.8.3" + } + }, + "@babel/helper-get-function-arity": { + "version": "7.8.3", + "resolved": "https://registry.npm.taobao.org/@babel/helper-get-function-arity/download/@babel/helper-get-function-arity-7.8.3.tgz", + "integrity": "sha1-uJS5R70AQ4HOY+odufCFR+kgq9U=", + "dev": true, + "requires": { + "@babel/types": "^7.8.3" + } + }, + "@babel/helper-split-export-declaration": { + "version": "7.8.3", + "resolved": "https://registry.npm.taobao.org/@babel/helper-split-export-declaration/download/@babel/helper-split-export-declaration-7.8.3.tgz", + "integrity": "sha1-ManzAHD5E2inGCzwX4MXgQZfx6k=", + "dev": true, + "requires": { + "@babel/types": "^7.8.3" + } + }, + "@babel/highlight": { + "version": "7.8.3", + "resolved": "https://registry.npm.taobao.org/@babel/highlight/download/@babel/highlight-7.8.3.tgz", + "integrity": "sha1-KPFz0EIj6qpZvB1Dmjg25tEmV5c=", + "dev": true, + "requires": { + "chalk": "^2.0.0", + "esutils": "^2.0.2", + "js-tokens": "^4.0.0" + } + }, + "@babel/parser": { + "version": "7.8.4", + "resolved": "https://registry.npm.taobao.org/@babel/parser/download/@babel/parser-7.8.4.tgz", + "integrity": "sha1-0dvmRpHWA1ipdClfpT2gdN0s6Og=", + "dev": true + }, + "@babel/template": { + "version": "7.8.3", + "resolved": "https://registry.npm.taobao.org/@babel/template/download/@babel/template-7.8.3.tgz", + "integrity": "sha1-4CrQT+JipleAkyf1eAVsoV/U0bg=", + "dev": true, + "requires": { + "@babel/code-frame": "^7.8.3", + "@babel/parser": "^7.8.3", + "@babel/types": "^7.8.3" + } + }, + "@babel/traverse": { + "version": "7.8.4", + "resolved": "https://registry.npm.taobao.org/@babel/traverse/download/@babel/traverse-7.8.4.tgz", + "integrity": "sha1-8IRYIjZfnVsOMS7TlZ0/gn+Gnjw=", + "dev": true, + "requires": { + "@babel/code-frame": "^7.8.3", + "@babel/generator": "^7.8.4", + "@babel/helper-function-name": "^7.8.3", + "@babel/helper-split-export-declaration": "^7.8.3", + "@babel/parser": "^7.8.4", + "@babel/types": "^7.8.3", + "debug": "^4.1.0", + "globals": "^11.1.0", + "lodash": "^4.17.13" + } + }, + "@babel/types": { + "version": "7.8.3", + "resolved": "https://registry.npm.taobao.org/@babel/types/download/@babel/types-7.8.3.tgz", + "integrity": "sha1-Wjg9/6VBbbG3Pe3/0xH/0HiPsxw=", + "dev": true, + "requires": { + "esutils": "^2.0.2", + "lodash": "^4.17.13", + "to-fast-properties": "^2.0.0" + } + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + } + } + }, + "@babel/highlight": { + "version": "7.5.0", + "resolved": "https://registry.npm.taobao.org/@babel/highlight/download/@babel/highlight-7.5.0.tgz?cache=0&sync_timestamp=1562245140883&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fhighlight%2Fdownload%2F%40babel%2Fhighlight-7.5.0.tgz", + "integrity": "sha1-VtETEr2SSPphlZHQJHK+boyzJUA=", + "dev": true, + "requires": { + "chalk": "^2.0.0", + "esutils": "^2.0.2", + "js-tokens": "^4.0.0" + } + }, + "@babel/parser": { + "version": "7.7.7", + "resolved": "https://registry.npm.taobao.org/@babel/parser/download/@babel/parser-7.7.7.tgz", + "integrity": "sha1-G4hllUGc+S2BExbVtxWlP/OLSTc=", + "dev": true + }, + "@babel/plugin-proposal-async-generator-functions": { + "version": "7.8.3", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-proposal-async-generator-functions/download/@babel/plugin-proposal-async-generator-functions-7.8.3.tgz", + "integrity": "sha1-utMpxnCzgliXIbJ1QMfSiGAcbm8=", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.3", + "@babel/helper-remap-async-to-generator": "^7.8.3", + "@babel/plugin-syntax-async-generators": "^7.8.0" + } + }, + "@babel/plugin-proposal-dynamic-import": { + "version": "7.8.3", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-proposal-dynamic-import/download/@babel/plugin-proposal-dynamic-import-7.8.3.tgz", + "integrity": "sha1-OMT+VVdEgm6X4q6TCw+0zAfmYFQ=", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.3", + "@babel/plugin-syntax-dynamic-import": "^7.8.0" + } + }, + "@babel/plugin-proposal-json-strings": { + "version": "7.8.3", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-proposal-json-strings/download/@babel/plugin-proposal-json-strings-7.8.3.tgz", + "integrity": "sha1-2lIWsjipi1ih4F1oUhBLEPmnDWs=", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.3", + "@babel/plugin-syntax-json-strings": "^7.8.0" + } + }, + "@babel/plugin-proposal-object-rest-spread": { + "version": "7.8.3", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-proposal-object-rest-spread/download/@babel/plugin-proposal-object-rest-spread-7.8.3.tgz?cache=0&sync_timestamp=1578956763418&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-proposal-object-rest-spread%2Fdownload%2F%40babel%2Fplugin-proposal-object-rest-spread-7.8.3.tgz", + "integrity": "sha1-61rjZhGN3KZ77Vg7U9dVTK2ZUbs=", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.3", + "@babel/plugin-syntax-object-rest-spread": "^7.8.0" + } + }, + "@babel/plugin-proposal-optional-catch-binding": { + "version": "7.8.3", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-proposal-optional-catch-binding/download/@babel/plugin-proposal-optional-catch-binding-7.8.3.tgz", + "integrity": "sha1-ne6WqxZQ7tiGRq6XNMoWesSpxck=", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.0" + } + }, + "@babel/plugin-proposal-unicode-property-regex": { + "version": "7.8.3", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-proposal-unicode-property-regex/download/@babel/plugin-proposal-unicode-property-regex-7.8.3.tgz", + "integrity": "sha1-tkbDrepfmIAMmrRRBaw00GzUpH8=", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.8.3", + "@babel/helper-plugin-utils": "^7.8.3" + } + }, + "@babel/plugin-syntax-async-generators": { + "version": "7.8.4", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-syntax-async-generators/download/@babel/plugin-syntax-async-generators-7.8.4.tgz", + "integrity": "sha1-qYP7Gusuw/btBCohD2QOkOeG/g0=", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-dynamic-import": { + "version": "7.8.3", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-syntax-dynamic-import/download/@babel/plugin-syntax-dynamic-import-7.8.3.tgz", + "integrity": "sha1-Yr+Ysto80h1iYVT8lu5bPLaOrLM=", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-json-strings": { + "version": "7.8.3", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-syntax-json-strings/download/@babel/plugin-syntax-json-strings-7.8.3.tgz", + "integrity": "sha1-AcohtmjNghjJ5kDLbdiMVBKyyWo=", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-syntax-object-rest-spread/download/@babel/plugin-syntax-object-rest-spread-7.8.3.tgz", + "integrity": "sha1-YOIl7cvZimQDMqLnLdPmbxr1WHE=", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-optional-catch-binding": { + "version": "7.8.3", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-syntax-optional-catch-binding/download/@babel/plugin-syntax-optional-catch-binding-7.8.3.tgz", + "integrity": "sha1-YRGiZbz7Ag6579D9/X0mQCue1sE=", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-top-level-await": { + "version": "7.8.3", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-syntax-top-level-await/download/@babel/plugin-syntax-top-level-await-7.8.3.tgz", + "integrity": "sha1-Os3s5pXmsTqvV/wpHRqACVDHE5E=", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.3" + } + }, + "@babel/plugin-transform-arrow-functions": { + "version": "7.8.3", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-arrow-functions/download/@babel/plugin-transform-arrow-functions-7.8.3.tgz", + "integrity": "sha1-gndsLtDNnhpJlW2uuJYCTJRzuLY=", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.3" + } + }, + "@babel/plugin-transform-async-to-generator": { + "version": "7.8.3", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-async-to-generator/download/@babel/plugin-transform-async-to-generator-7.8.3.tgz", + "integrity": "sha1-Qwj60NlAnXHq+5sabuNfnWS2QIY=", + "dev": true, + "requires": { + "@babel/helper-module-imports": "^7.8.3", + "@babel/helper-plugin-utils": "^7.8.3", + "@babel/helper-remap-async-to-generator": "^7.8.3" + } + }, + "@babel/plugin-transform-block-scoped-functions": { + "version": "7.8.3", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-block-scoped-functions/download/@babel/plugin-transform-block-scoped-functions-7.8.3.tgz", + "integrity": "sha1-Q37sW3mbWFIHIISzrl72boNJ6KM=", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.3" + } + }, + "@babel/plugin-transform-block-scoping": { + "version": "7.8.3", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-block-scoping/download/@babel/plugin-transform-block-scoping-7.8.3.tgz", + "integrity": "sha1-l9Ndq2aFekN8FmNYuR0JBQyGjzo=", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.3", + "lodash": "^4.17.13" + } + }, + "@babel/plugin-transform-classes": { + "version": "7.8.3", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-classes/download/@babel/plugin-transform-classes-7.8.3.tgz", + "integrity": "sha1-Rv16nSu56onOiHIEd5ef4NcbIbg=", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.8.3", + "@babel/helper-define-map": "^7.8.3", + "@babel/helper-function-name": "^7.8.3", + "@babel/helper-optimise-call-expression": "^7.8.3", + "@babel/helper-plugin-utils": "^7.8.3", + "@babel/helper-replace-supers": "^7.8.3", + "@babel/helper-split-export-declaration": "^7.8.3", + "globals": "^11.1.0" + }, + "dependencies": { + "@babel/code-frame": { + "version": "7.8.3", + "resolved": "https://registry.npm.taobao.org/@babel/code-frame/download/@babel/code-frame-7.8.3.tgz", + "integrity": "sha1-M+JZA9dIEYFTThLsCiXxa2/PQZ4=", + "dev": true, + "requires": { + "@babel/highlight": "^7.8.3" + } + }, + "@babel/helper-function-name": { + "version": "7.8.3", + "resolved": "https://registry.npm.taobao.org/@babel/helper-function-name/download/@babel/helper-function-name-7.8.3.tgz", + "integrity": "sha1-7utmWgGx8RBo6fuGrVahyxqCTMo=", + "dev": true, + "requires": { + "@babel/helper-get-function-arity": "^7.8.3", + "@babel/template": "^7.8.3", + "@babel/types": "^7.8.3" + } + }, + "@babel/helper-get-function-arity": { + "version": "7.8.3", + "resolved": "https://registry.npm.taobao.org/@babel/helper-get-function-arity/download/@babel/helper-get-function-arity-7.8.3.tgz", + "integrity": "sha1-uJS5R70AQ4HOY+odufCFR+kgq9U=", + "dev": true, + "requires": { + "@babel/types": "^7.8.3" + } + }, + "@babel/helper-split-export-declaration": { + "version": "7.8.3", + "resolved": "https://registry.npm.taobao.org/@babel/helper-split-export-declaration/download/@babel/helper-split-export-declaration-7.8.3.tgz", + "integrity": "sha1-ManzAHD5E2inGCzwX4MXgQZfx6k=", + "dev": true, + "requires": { + "@babel/types": "^7.8.3" + } + }, + "@babel/highlight": { + "version": "7.8.3", + "resolved": "https://registry.npm.taobao.org/@babel/highlight/download/@babel/highlight-7.8.3.tgz", + "integrity": "sha1-KPFz0EIj6qpZvB1Dmjg25tEmV5c=", + "dev": true, + "requires": { + "chalk": "^2.0.0", + "esutils": "^2.0.2", + "js-tokens": "^4.0.0" + } + }, + "@babel/parser": { + "version": "7.8.4", + "resolved": "https://registry.npm.taobao.org/@babel/parser/download/@babel/parser-7.8.4.tgz", + "integrity": "sha1-0dvmRpHWA1ipdClfpT2gdN0s6Og=", + "dev": true + }, + "@babel/template": { + "version": "7.8.3", + "resolved": "https://registry.npm.taobao.org/@babel/template/download/@babel/template-7.8.3.tgz", + "integrity": "sha1-4CrQT+JipleAkyf1eAVsoV/U0bg=", + "dev": true, + "requires": { + "@babel/code-frame": "^7.8.3", + "@babel/parser": "^7.8.3", + "@babel/types": "^7.8.3" + } + }, + "@babel/types": { + "version": "7.8.3", + "resolved": "https://registry.npm.taobao.org/@babel/types/download/@babel/types-7.8.3.tgz", + "integrity": "sha1-Wjg9/6VBbbG3Pe3/0xH/0HiPsxw=", + "dev": true, + "requires": { + "esutils": "^2.0.2", + "lodash": "^4.17.13", + "to-fast-properties": "^2.0.0" + } + } + } + }, + "@babel/plugin-transform-computed-properties": { + "version": "7.8.3", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-computed-properties/download/@babel/plugin-transform-computed-properties-7.8.3.tgz", + "integrity": "sha1-ltDSi3985OtbEguy4OlDNDyG+Bs=", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.3" + } + }, + "@babel/plugin-transform-destructuring": { + "version": "7.8.3", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-destructuring/download/@babel/plugin-transform-destructuring-7.8.3.tgz", + "integrity": "sha1-IN372eRnaQaxBW7mCviFkMx6qgs=", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.3" + } + }, + "@babel/plugin-transform-dotall-regex": { + "version": "7.8.3", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-dotall-regex/download/@babel/plugin-transform-dotall-regex-7.8.3.tgz", + "integrity": "sha1-w8bsXuYSXGmTxcvKINyGIanqem4=", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.8.3", + "@babel/helper-plugin-utils": "^7.8.3" + } + }, + "@babel/plugin-transform-duplicate-keys": { + "version": "7.8.3", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-duplicate-keys/download/@babel/plugin-transform-duplicate-keys-7.8.3.tgz", + "integrity": "sha1-jRLfMJqlN/JyiZxWXqF2jihuIfE=", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.3" + } + }, + "@babel/plugin-transform-exponentiation-operator": { + "version": "7.8.3", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-exponentiation-operator/download/@babel/plugin-transform-exponentiation-operator-7.8.3.tgz", + "integrity": "sha1-WBptf1aXDga/UVYM1k9elHtw17c=", + "dev": true, + "requires": { + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.8.3", + "@babel/helper-plugin-utils": "^7.8.3" + } + }, + "@babel/plugin-transform-for-of": { + "version": "7.8.4", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-for-of/download/@babel/plugin-transform-for-of-7.8.4.tgz?cache=0&sync_timestamp=1580387791572&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-transform-for-of%2Fdownload%2F%40babel%2Fplugin-transform-for-of-7.8.4.tgz", + "integrity": "sha1-b+jq5daHUIbuGF3QsJioUTeDtH0=", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.3" + } + }, + "@babel/plugin-transform-function-name": { + "version": "7.8.3", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-function-name/download/@babel/plugin-transform-function-name-7.8.3.tgz", + "integrity": "sha1-J5NzyycyKqrWfCaD53bfxHGW7Ys=", + "dev": true, + "requires": { + "@babel/helper-function-name": "^7.8.3", + "@babel/helper-plugin-utils": "^7.8.3" + }, + "dependencies": { + "@babel/code-frame": { + "version": "7.8.3", + "resolved": "https://registry.npm.taobao.org/@babel/code-frame/download/@babel/code-frame-7.8.3.tgz", + "integrity": "sha1-M+JZA9dIEYFTThLsCiXxa2/PQZ4=", + "dev": true, + "requires": { + "@babel/highlight": "^7.8.3" + } + }, + "@babel/helper-function-name": { + "version": "7.8.3", + "resolved": "https://registry.npm.taobao.org/@babel/helper-function-name/download/@babel/helper-function-name-7.8.3.tgz", + "integrity": "sha1-7utmWgGx8RBo6fuGrVahyxqCTMo=", + "dev": true, + "requires": { + "@babel/helper-get-function-arity": "^7.8.3", + "@babel/template": "^7.8.3", + "@babel/types": "^7.8.3" + } + }, + "@babel/helper-get-function-arity": { + "version": "7.8.3", + "resolved": "https://registry.npm.taobao.org/@babel/helper-get-function-arity/download/@babel/helper-get-function-arity-7.8.3.tgz", + "integrity": "sha1-uJS5R70AQ4HOY+odufCFR+kgq9U=", + "dev": true, + "requires": { + "@babel/types": "^7.8.3" + } + }, + "@babel/highlight": { + "version": "7.8.3", + "resolved": "https://registry.npm.taobao.org/@babel/highlight/download/@babel/highlight-7.8.3.tgz", + "integrity": "sha1-KPFz0EIj6qpZvB1Dmjg25tEmV5c=", + "dev": true, + "requires": { + "chalk": "^2.0.0", + "esutils": "^2.0.2", + "js-tokens": "^4.0.0" + } + }, + "@babel/parser": { + "version": "7.8.4", + "resolved": "https://registry.npm.taobao.org/@babel/parser/download/@babel/parser-7.8.4.tgz", + "integrity": "sha1-0dvmRpHWA1ipdClfpT2gdN0s6Og=", + "dev": true + }, + "@babel/template": { + "version": "7.8.3", + "resolved": "https://registry.npm.taobao.org/@babel/template/download/@babel/template-7.8.3.tgz", + "integrity": "sha1-4CrQT+JipleAkyf1eAVsoV/U0bg=", + "dev": true, + "requires": { + "@babel/code-frame": "^7.8.3", + "@babel/parser": "^7.8.3", + "@babel/types": "^7.8.3" + } + }, + "@babel/types": { + "version": "7.8.3", + "resolved": "https://registry.npm.taobao.org/@babel/types/download/@babel/types-7.8.3.tgz", + "integrity": "sha1-Wjg9/6VBbbG3Pe3/0xH/0HiPsxw=", + "dev": true, + "requires": { + "esutils": "^2.0.2", + "lodash": "^4.17.13", + "to-fast-properties": "^2.0.0" + } + } + } + }, + "@babel/plugin-transform-literals": { + "version": "7.8.3", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-literals/download/@babel/plugin-transform-literals-7.8.3.tgz", + "integrity": "sha1-rvI5gj2RmU7Hto5VGTUl1229XcE=", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.3" + } + }, + "@babel/plugin-transform-member-expression-literals": { + "version": "7.8.3", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-member-expression-literals/download/@babel/plugin-transform-member-expression-literals-7.8.3.tgz", + "integrity": "sha1-lj/tS2IKx8v2Apx1VCQCn6OkBBA=", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.3" + } + }, + "@babel/plugin-transform-modules-amd": { + "version": "7.8.3", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-modules-amd/download/@babel/plugin-transform-modules-amd-7.8.3.tgz?cache=0&sync_timestamp=1578956828453&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-transform-modules-amd%2Fdownload%2F%40babel%2Fplugin-transform-modules-amd-7.8.3.tgz", + "integrity": "sha1-ZWBtRGFrUCJedvVXjzPFaKC4dqU=", + "dev": true, + "requires": { + "@babel/helper-module-transforms": "^7.8.3", + "@babel/helper-plugin-utils": "^7.8.3", + "babel-plugin-dynamic-import-node": "^2.3.0" + } + }, + "@babel/plugin-transform-modules-commonjs": { + "version": "7.8.3", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-modules-commonjs/download/@babel/plugin-transform-modules-commonjs-7.8.3.tgz", + "integrity": "sha1-3yUXBuwzG9BYo0vdcmE5FfgpKKU=", + "dev": true, + "requires": { + "@babel/helper-module-transforms": "^7.8.3", + "@babel/helper-plugin-utils": "^7.8.3", + "@babel/helper-simple-access": "^7.8.3", + "babel-plugin-dynamic-import-node": "^2.3.0" + } + }, + "@babel/plugin-transform-modules-systemjs": { + "version": "7.8.3", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-modules-systemjs/download/@babel/plugin-transform-modules-systemjs-7.8.3.tgz", + "integrity": "sha1-2LvyIsHb42YfRA8vAMFum7fQ1CA=", + "dev": true, + "requires": { + "@babel/helper-hoist-variables": "^7.8.3", + "@babel/helper-module-transforms": "^7.8.3", + "@babel/helper-plugin-utils": "^7.8.3", + "babel-plugin-dynamic-import-node": "^2.3.0" + } + }, + "@babel/plugin-transform-modules-umd": { + "version": "7.8.3", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-modules-umd/download/@babel/plugin-transform-modules-umd-7.8.3.tgz", + "integrity": "sha1-WS1XjOBsUvW5iwL5E9ZT/+lyZho=", + "dev": true, + "requires": { + "@babel/helper-module-transforms": "^7.8.3", + "@babel/helper-plugin-utils": "^7.8.3" + } + }, + "@babel/plugin-transform-named-capturing-groups-regex": { + "version": "7.8.3", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-named-capturing-groups-regex/download/@babel/plugin-transform-named-capturing-groups-regex-7.8.3.tgz", + "integrity": "sha1-oqcr/6ICrA4tBQav0JOcXsvEjGw=", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.8.3" + } + }, + "@babel/plugin-transform-new-target": { + "version": "7.8.3", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-new-target/download/@babel/plugin-transform-new-target-7.8.3.tgz", + "integrity": "sha1-YMwq5m2FyVq1QOs0urtkNNTHDEM=", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.3" + } + }, + "@babel/plugin-transform-object-super": { + "version": "7.8.3", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-object-super/download/@babel/plugin-transform-object-super-7.8.3.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-transform-object-super%2Fdownload%2F%40babel%2Fplugin-transform-object-super-7.8.3.tgz", + "integrity": "sha1-67ah56hv+paFi9asAQLWWUQmFyU=", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.3", + "@babel/helper-replace-supers": "^7.8.3" + } + }, + "@babel/plugin-transform-parameters": { + "version": "7.8.4", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-parameters/download/@babel/plugin-transform-parameters-7.8.4.tgz?cache=0&sync_timestamp=1580387794920&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-transform-parameters%2Fdownload%2F%40babel%2Fplugin-transform-parameters-7.8.4.tgz", + "integrity": "sha1-HVFV3gtl2wzPmXEWV0XTu5kNd9M=", + "dev": true, + "requires": { + "@babel/helper-call-delegate": "^7.8.3", + "@babel/helper-get-function-arity": "^7.8.3", + "@babel/helper-plugin-utils": "^7.8.3" + }, + "dependencies": { + "@babel/helper-get-function-arity": { + "version": "7.8.3", + "resolved": "https://registry.npm.taobao.org/@babel/helper-get-function-arity/download/@babel/helper-get-function-arity-7.8.3.tgz", + "integrity": "sha1-uJS5R70AQ4HOY+odufCFR+kgq9U=", + "dev": true, + "requires": { + "@babel/types": "^7.8.3" + } + }, + "@babel/types": { + "version": "7.8.3", + "resolved": "https://registry.npm.taobao.org/@babel/types/download/@babel/types-7.8.3.tgz", + "integrity": "sha1-Wjg9/6VBbbG3Pe3/0xH/0HiPsxw=", + "dev": true, + "requires": { + "esutils": "^2.0.2", + "lodash": "^4.17.13", + "to-fast-properties": "^2.0.0" + } + } + } + }, + "@babel/plugin-transform-property-literals": { + "version": "7.8.3", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-property-literals/download/@babel/plugin-transform-property-literals-7.8.3.tgz", + "integrity": "sha1-MxlDANhTnB7SjGKtUIe6OAe5gmM=", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.3" + } + }, + "@babel/plugin-transform-regenerator": { + "version": "7.8.3", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-regenerator/download/@babel/plugin-transform-regenerator-7.8.3.tgz", + "integrity": "sha1-sxAx6AWcB0lb8jYUyX89lpi8bsg=", + "dev": true, + "requires": { + "regenerator-transform": "^0.14.0" + } + }, + "@babel/plugin-transform-reserved-words": { + "version": "7.8.3", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-reserved-words/download/@babel/plugin-transform-reserved-words-7.8.3.tgz", + "integrity": "sha1-mgY1rE5mXSmxYoN908xQdF398fU=", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.3" + } + }, + "@babel/plugin-transform-shorthand-properties": { + "version": "7.8.3", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-shorthand-properties/download/@babel/plugin-transform-shorthand-properties-7.8.3.tgz", + "integrity": "sha1-KFRSFuAjqDLU06EYXtSSvP6sCMg=", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.3" + } + }, + "@babel/plugin-transform-spread": { + "version": "7.8.3", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-spread/download/@babel/plugin-transform-spread-7.8.3.tgz", + "integrity": "sha1-nI/+gXD9+4ixFOy5ILgvtulf5eg=", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.3" + } + }, + "@babel/plugin-transform-sticky-regex": { + "version": "7.8.3", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-sticky-regex/download/@babel/plugin-transform-sticky-regex-7.8.3.tgz", + "integrity": "sha1-vnoSkPgdrnZ0dUUhmeH3bWF1sQA=", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.3", + "@babel/helper-regex": "^7.8.3" + } + }, + "@babel/plugin-transform-template-literals": { + "version": "7.8.3", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-template-literals/download/@babel/plugin-transform-template-literals-7.8.3.tgz", + "integrity": "sha1-e/pHMrRV6mpDEwrcC6dn7A5AKoA=", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.8.3", + "@babel/helper-plugin-utils": "^7.8.3" + } + }, + "@babel/plugin-transform-typeof-symbol": { + "version": "7.8.4", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-typeof-symbol/download/@babel/plugin-transform-typeof-symbol-7.8.4.tgz?cache=0&sync_timestamp=1580387785094&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-transform-typeof-symbol%2Fdownload%2F%40babel%2Fplugin-transform-typeof-symbol-7.8.4.tgz", + "integrity": "sha1-7eQGIxXOCq+KZXqSCFjxovNfxBI=", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.3" + } + }, + "@babel/plugin-transform-unicode-regex": { + "version": "7.8.3", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-unicode-regex/download/@babel/plugin-transform-unicode-regex-7.8.3.tgz", + "integrity": "sha1-DO8247pz5cVyc+/7GC9GuRoeyq0=", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.8.3", + "@babel/helper-plugin-utils": "^7.8.3" + } + }, + "@babel/preset-env": { + "version": "7.7.7", + "resolved": "https://registry.npm.taobao.org/@babel/preset-env/download/@babel/preset-env-7.7.7.tgz?cache=0&sync_timestamp=1580387976946&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fpreset-env%2Fdownload%2F%40babel%2Fpreset-env-7.7.7.tgz", + "integrity": "sha1-wpQWe5HlPn422CDpQ+zo0Mf+Rqw=", + "dev": true, + "requires": { + "@babel/helper-module-imports": "^7.7.4", + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-proposal-async-generator-functions": "^7.7.4", + "@babel/plugin-proposal-dynamic-import": "^7.7.4", + "@babel/plugin-proposal-json-strings": "^7.7.4", + "@babel/plugin-proposal-object-rest-spread": "^7.7.7", + "@babel/plugin-proposal-optional-catch-binding": "^7.7.4", + "@babel/plugin-proposal-unicode-property-regex": "^7.7.7", + "@babel/plugin-syntax-async-generators": "^7.7.4", + "@babel/plugin-syntax-dynamic-import": "^7.7.4", + "@babel/plugin-syntax-json-strings": "^7.7.4", + "@babel/plugin-syntax-object-rest-spread": "^7.7.4", + "@babel/plugin-syntax-optional-catch-binding": "^7.7.4", + "@babel/plugin-syntax-top-level-await": "^7.7.4", + "@babel/plugin-transform-arrow-functions": "^7.7.4", + "@babel/plugin-transform-async-to-generator": "^7.7.4", + "@babel/plugin-transform-block-scoped-functions": "^7.7.4", + "@babel/plugin-transform-block-scoping": "^7.7.4", + "@babel/plugin-transform-classes": "^7.7.4", + "@babel/plugin-transform-computed-properties": "^7.7.4", + "@babel/plugin-transform-destructuring": "^7.7.4", + "@babel/plugin-transform-dotall-regex": "^7.7.7", + "@babel/plugin-transform-duplicate-keys": "^7.7.4", + "@babel/plugin-transform-exponentiation-operator": "^7.7.4", + "@babel/plugin-transform-for-of": "^7.7.4", + "@babel/plugin-transform-function-name": "^7.7.4", + "@babel/plugin-transform-literals": "^7.7.4", + "@babel/plugin-transform-member-expression-literals": "^7.7.4", + "@babel/plugin-transform-modules-amd": "^7.7.5", + "@babel/plugin-transform-modules-commonjs": "^7.7.5", + "@babel/plugin-transform-modules-systemjs": "^7.7.4", + "@babel/plugin-transform-modules-umd": "^7.7.4", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.7.4", + "@babel/plugin-transform-new-target": "^7.7.4", + "@babel/plugin-transform-object-super": "^7.7.4", + "@babel/plugin-transform-parameters": "^7.7.7", + "@babel/plugin-transform-property-literals": "^7.7.4", + "@babel/plugin-transform-regenerator": "^7.7.5", + "@babel/plugin-transform-reserved-words": "^7.7.4", + "@babel/plugin-transform-shorthand-properties": "^7.7.4", + "@babel/plugin-transform-spread": "^7.7.4", + "@babel/plugin-transform-sticky-regex": "^7.7.4", + "@babel/plugin-transform-template-literals": "^7.7.4", + "@babel/plugin-transform-typeof-symbol": "^7.7.4", + "@babel/plugin-transform-unicode-regex": "^7.7.4", + "@babel/types": "^7.7.4", + "browserslist": "^4.6.0", + "core-js-compat": "^3.6.0", + "invariant": "^2.2.2", + "js-levenshtein": "^1.1.3", + "semver": "^5.5.0" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npm.taobao.org/semver/download/semver-5.7.1.tgz", + "integrity": "sha1-qVT5Ma66UI0we78Gnv8MAclhFvc=", + "dev": true + } + } + }, + "@babel/template": { + "version": "7.7.4", + "resolved": "https://registry.npm.taobao.org/@babel/template/download/@babel/template-7.7.4.tgz", + "integrity": "sha1-Qop9nuz/4n3qwKmOI7+ONnXSp3s=", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0", + "@babel/parser": "^7.7.4", + "@babel/types": "^7.7.4" + } + }, + "@babel/traverse": { + "version": "7.7.4", + "resolved": "https://registry.npm.taobao.org/@babel/traverse/download/@babel/traverse-7.7.4.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Ftraverse%2Fdownload%2F%40babel%2Ftraverse-7.7.4.tgz", + "integrity": "sha1-nB58YPtnn+T8+qQlAIMzM8IFhVg=", + "dev": true, + "requires": { + "@babel/code-frame": "^7.5.5", + "@babel/generator": "^7.7.4", + "@babel/helper-function-name": "^7.7.4", + "@babel/helper-split-export-declaration": "^7.7.4", + "@babel/parser": "^7.7.4", + "@babel/types": "^7.7.4", + "debug": "^4.1.0", + "globals": "^11.1.0", + "lodash": "^4.17.13" + } + }, + "@babel/types": { + "version": "7.7.4", + "resolved": "https://registry.npm.taobao.org/@babel/types/download/@babel/types-7.7.4.tgz", + "integrity": "sha1-UWVw1TnkTd8wjAdWnCWP+U/ekZM=", + "dev": true, + "requires": { + "esutils": "^2.0.2", + "lodash": "^4.17.13", + "to-fast-properties": "^2.0.0" + } + }, + "@firebase/analytics": { + "version": "0.2.13", + "resolved": "https://registry.npm.taobao.org/@firebase/analytics/download/@firebase/analytics-0.2.13.tgz", + "integrity": "sha1-Vfqp16h/oIt2TAjT4Cbacdp3V3o=", + "requires": { + "@firebase/analytics-types": "0.2.6", + "@firebase/component": "0.1.5", + "@firebase/installations": "0.4.2", + "@firebase/util": "0.2.40", + "tslib": "1.10.0" + } + }, + "@firebase/analytics-types": { + "version": "0.2.6", + "resolved": "https://registry.npm.taobao.org/@firebase/analytics-types/download/@firebase/analytics-types-0.2.6.tgz", + "integrity": "sha1-yPQQLCxkkvVjpTOBoNtiDdasFxE=" + }, + "@firebase/app": { + "version": "0.5.4", + "resolved": "https://registry.npm.taobao.org/@firebase/app/download/@firebase/app-0.5.4.tgz", + "integrity": "sha1-PCPqvQ87L0jao1MPbGsY7rlqjsI=", + "requires": { + "@firebase/app-types": "0.5.1", + "@firebase/component": "0.1.5", + "@firebase/logger": "0.1.35", + "@firebase/util": "0.2.40", + "dom-storage": "2.1.0", + "tslib": "1.10.0", + "xmlhttprequest": "1.8.0" + } + }, + "@firebase/app-types": { + "version": "0.5.1", + "resolved": "https://registry.npm.taobao.org/@firebase/app-types/download/@firebase/app-types-0.5.1.tgz", + "integrity": "sha1-it1B0QxTN1moCjdtCdJK8KEAk0M=" + }, + "@firebase/auth": { + "version": "0.13.5", + "resolved": "https://registry.npm.taobao.org/@firebase/auth/download/@firebase/auth-0.13.5.tgz", + "integrity": "sha1-L8CuyJdERj0+FGCL9v4obyNBjaM=", + "requires": { + "@firebase/auth-types": "0.9.5" + } + }, + "@firebase/auth-interop-types": { + "version": "0.1.2", + "resolved": "https://registry.npm.taobao.org/@firebase/auth-interop-types/download/@firebase/auth-interop-types-0.1.2.tgz", + "integrity": "sha1-L3aro5tPIsUrtLLrfzG+tuwxKzM=" + }, + "@firebase/auth-types": { + "version": "0.9.5", + "resolved": "https://registry.npm.taobao.org/@firebase/auth-types/download/@firebase/auth-types-0.9.5.tgz", + "integrity": "sha1-FtbsLKAlkVKAiIQPgmymbjlPxP0=" + }, + "@firebase/component": { + "version": "0.1.5", + "resolved": "https://registry.npm.taobao.org/@firebase/component/download/@firebase/component-0.1.5.tgz", + "integrity": "sha1-V4NjOQc+vrrVy/yB2D0FB7NjDKY=", + "requires": { + "@firebase/util": "0.2.40", + "tslib": "1.10.0" + } + }, + "@firebase/database": { + "version": "0.5.21", + "resolved": "https://registry.npm.taobao.org/@firebase/database/download/@firebase/database-0.5.21.tgz", + "integrity": "sha1-JUQ5mp4Bi6tCQVWZMsyuaprhyzU=", + "requires": { + "@firebase/auth-interop-types": "0.1.2", + "@firebase/component": "0.1.5", + "@firebase/database-types": "0.4.11", + "@firebase/logger": "0.1.35", + "@firebase/util": "0.2.40", + "faye-websocket": "0.11.3", + "tslib": "1.10.0" + }, + "dependencies": { + "faye-websocket": { + "version": "0.11.3", + "resolved": "https://registry.npm.taobao.org/faye-websocket/download/faye-websocket-0.11.3.tgz", + "integrity": "sha1-XA6aiWjokSwoZjn96XeosgnyUI4=", + "requires": { + "websocket-driver": ">=0.5.1" + } + } + } + }, + "@firebase/database-types": { + "version": "0.4.11", + "resolved": "https://registry.npm.taobao.org/@firebase/database-types/download/@firebase/database-types-0.4.11.tgz", + "integrity": "sha1-92oeZo5yFaKFXe0qB0YBoJEda9s=", + "requires": { + "@firebase/app-types": "0.5.1" + } + }, + "@firebase/firestore": { + "version": "1.10.1", + "resolved": "https://registry.npm.taobao.org/@firebase/firestore/download/@firebase/firestore-1.10.1.tgz", + "integrity": "sha1-0AzPH281biuguv7nGglkbOu/qG8=", + "requires": { + "@firebase/component": "0.1.5", + "@firebase/firestore-types": "1.9.1", + "@firebase/logger": "0.1.35", + "@firebase/util": "0.2.40", + "@firebase/webchannel-wrapper": "0.2.35", + "@grpc/proto-loader": "^0.5.0", + "grpc": "1.24.2", + "tslib": "1.10.0" + } + }, + "@firebase/firestore-types": { + "version": "1.9.1", + "resolved": "https://registry.npm.taobao.org/@firebase/firestore-types/download/@firebase/firestore-types-1.9.1.tgz", + "integrity": "sha1-KlNys/MUkBGG7b/US4mPkSDPOkg=" + }, + "@firebase/functions": { + "version": "0.4.32", + "resolved": "https://registry.npm.taobao.org/@firebase/functions/download/@firebase/functions-0.4.32.tgz", + "integrity": "sha1-HXO6BmtuIaSOGySeCIMRGU4olFE=", + "requires": { + "@firebase/component": "0.1.5", + "@firebase/functions-types": "0.3.14", + "@firebase/messaging-types": "0.4.2", + "isomorphic-fetch": "2.2.1", + "tslib": "1.10.0" + } + }, + "@firebase/functions-types": { + "version": "0.3.14", + "resolved": "https://registry.npm.taobao.org/@firebase/functions-types/download/@firebase/functions-types-0.3.14.tgz", + "integrity": "sha1-ar3r/ibAiW4Bdu39F1AgEbaMMlk=" + }, + "@firebase/installations": { + "version": "0.4.2", + "resolved": "https://registry.npm.taobao.org/@firebase/installations/download/@firebase/installations-0.4.2.tgz", + "integrity": "sha1-Rxpsk2sCmqFeJQXceSV+KUdGddQ=", + "requires": { + "@firebase/component": "0.1.5", + "@firebase/installations-types": "0.3.1", + "@firebase/util": "0.2.40", + "idb": "3.0.2", + "tslib": "1.10.0" + } + }, + "@firebase/installations-types": { + "version": "0.3.1", + "resolved": "https://registry.npm.taobao.org/@firebase/installations-types/download/@firebase/installations-types-0.3.1.tgz", + "integrity": "sha1-+fkmQWgIEGDvgAfRoCtaJTF8MXY=" + }, + "@firebase/logger": { + "version": "0.1.35", + "resolved": "https://registry.npm.taobao.org/@firebase/logger/download/@firebase/logger-0.1.35.tgz", + "integrity": "sha1-6ZOOyl2BtytYG5pMkDH/69sx5W0=" + }, + "@firebase/messaging": { + "version": "0.6.4", + "resolved": "https://registry.npm.taobao.org/@firebase/messaging/download/@firebase/messaging-0.6.4.tgz", + "integrity": "sha1-YLZTfD6ubQm58WeMXi/s7Z282yg=", + "requires": { + "@firebase/component": "0.1.5", + "@firebase/installations": "0.4.2", + "@firebase/messaging-types": "0.4.2", + "@firebase/util": "0.2.40", + "idb": "3.0.2", + "tslib": "1.10.0" + } + }, + "@firebase/messaging-types": { + "version": "0.4.2", + "resolved": "https://registry.npm.taobao.org/@firebase/messaging-types/download/@firebase/messaging-types-0.4.2.tgz", + "integrity": "sha1-fNhIn7zOF8HzVTdkHEF4gyafrQI=" + }, + "@firebase/performance": { + "version": "0.2.32", + "resolved": "https://registry.npm.taobao.org/@firebase/performance/download/@firebase/performance-0.2.32.tgz", + "integrity": "sha1-D4VUD3/mFtIknqYFBHHws/rJhZg=", + "requires": { + "@firebase/component": "0.1.5", + "@firebase/installations": "0.4.2", + "@firebase/logger": "0.1.35", + "@firebase/performance-types": "0.0.9", + "@firebase/util": "0.2.40", + "tslib": "1.10.0" + } + }, + "@firebase/performance-types": { + "version": "0.0.9", + "resolved": "https://registry.npm.taobao.org/@firebase/performance-types/download/@firebase/performance-types-0.0.9.tgz", + "integrity": "sha1-JyJ7kRSc9Xw/WxX8GiNP3HkaZa4=" + }, + "@firebase/polyfill": { + "version": "0.3.31", + "resolved": "https://registry.npm.taobao.org/@firebase/polyfill/download/@firebase/polyfill-0.3.31.tgz", + "integrity": "sha1-4ixRtuSBla14huvvJakA3rCGYOQ=", + "requires": { + "core-js": "3.6.2", + "promise-polyfill": "8.1.3", + "whatwg-fetch": "2.0.4" + }, + "dependencies": { + "core-js": { + "version": "3.6.2", + "resolved": "https://registry.npm.taobao.org/core-js/download/core-js-3.6.2.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcore-js%2Fdownload%2Fcore-js-3.6.2.tgz", + "integrity": "sha1-J5nqGlkFDwrPUN/om5FtZQOxbKo=" + }, + "whatwg-fetch": { + "version": "2.0.4", + "resolved": "https://registry.npm.taobao.org/whatwg-fetch/download/whatwg-fetch-2.0.4.tgz", + "integrity": "sha1-3eal3zFfnTmZGqF2IYU9cguFVm8=" + } + } + }, + "@firebase/remote-config": { + "version": "0.1.13", + "resolved": "https://registry.npm.taobao.org/@firebase/remote-config/download/@firebase/remote-config-0.1.13.tgz", + "integrity": "sha1-SuKavyThP8ZzKdCaCOB/pmSG3ZI=", + "requires": { + "@firebase/component": "0.1.5", + "@firebase/installations": "0.4.2", + "@firebase/logger": "0.1.35", + "@firebase/remote-config-types": "0.1.6", + "@firebase/util": "0.2.40", + "tslib": "1.10.0" + } + }, + "@firebase/remote-config-types": { + "version": "0.1.6", + "resolved": "https://registry.npm.taobao.org/@firebase/remote-config-types/download/@firebase/remote-config-types-0.1.6.tgz", + "integrity": "sha1-n4Hl7e5nscKiWM9gnHxVFKBXXoY=" + }, + "@firebase/storage": { + "version": "0.3.26", + "resolved": "https://registry.npm.taobao.org/@firebase/storage/download/@firebase/storage-0.3.26.tgz", + "integrity": "sha1-QGggkoHlafGC/IowSgzBNgEZW74=", + "requires": { + "@firebase/component": "0.1.5", + "@firebase/storage-types": "0.3.9", + "@firebase/util": "0.2.40", + "tslib": "1.10.0" + } + }, + "@firebase/storage-types": { + "version": "0.3.9", + "resolved": "https://registry.npm.taobao.org/@firebase/storage-types/download/@firebase/storage-types-0.3.9.tgz", + "integrity": "sha1-Do9lMcgMYRDfgAtg1MMBN1REALA=" + }, + "@firebase/util": { + "version": "0.2.40", + "resolved": "https://registry.npm.taobao.org/@firebase/util/download/@firebase/util-0.2.40.tgz", + "integrity": "sha1-uMM0N8Y+CHScTIcgJdcHIdaQqmk=", + "requires": { + "tslib": "1.10.0" + } + }, + "@firebase/webchannel-wrapper": { + "version": "0.2.35", + "resolved": "https://registry.npm.taobao.org/@firebase/webchannel-wrapper/download/@firebase/webchannel-wrapper-0.2.35.tgz", + "integrity": "sha1-Iy6FdpjvswzdqYtvanoxqQXRYUc=" + }, + "@grpc/proto-loader": { + "version": "0.5.3", + "resolved": "https://registry.npm.taobao.org/@grpc/proto-loader/download/@grpc/proto-loader-0.5.3.tgz", + "integrity": "sha1-ojMHByC/dWDE1w4p55UMclSaEyw=", + "requires": { + "lodash.camelcase": "^4.3.0", + "protobufjs": "^6.8.6" + } + }, + "@istanbuljs/schema": { + "version": "0.1.2", + "resolved": "https://registry.npm.taobao.org/@istanbuljs/schema/download/@istanbuljs/schema-0.1.2.tgz", + "integrity": "sha1-JlIL8Jq+SlZEzVQU43ElqJVCQd0=", + "dev": true + }, + "@ngtools/webpack": { + "version": "9.0.1", + "resolved": "https://registry.npm.taobao.org/@ngtools/webpack/download/@ngtools/webpack-9.0.1.tgz", + "integrity": "sha1-Nv/1smmVmzfu5MI8jCK9doaqSGA=", + "dev": true, + "requires": { + "@angular-devkit/core": "9.0.1", + "enhanced-resolve": "4.1.1", + "rxjs": "6.5.3", + "webpack-sources": "1.4.3" + }, + "dependencies": { + "rxjs": { + "version": "6.5.3", + "resolved": "https://registry.npm.taobao.org/rxjs/download/rxjs-6.5.3.tgz", + "integrity": "sha1-UQ4mMX9NuRp+sd532d2boKSJmjo=", + "dev": true, + "requires": { + "tslib": "^1.9.0" + } + } + } + }, + "@protobufjs/aspromise": { + "version": "1.1.2", + "resolved": "https://registry.npm.taobao.org/@protobufjs/aspromise/download/@protobufjs/aspromise-1.1.2.tgz", + "integrity": "sha1-m4sMxmPWaafY9vXQiToU00jzD78=" + }, + "@protobufjs/base64": { + "version": "1.1.2", + "resolved": "https://registry.npm.taobao.org/@protobufjs/base64/download/@protobufjs/base64-1.1.2.tgz", + "integrity": "sha1-TIVzDlm5ofHzSQR9vyQpYDS7JzU=" + }, + "@protobufjs/codegen": { + "version": "2.0.4", + "resolved": "https://registry.npm.taobao.org/@protobufjs/codegen/download/@protobufjs/codegen-2.0.4.tgz", + "integrity": "sha1-fvN/DQEPsCitGtWXIuUG2SYoFcs=" + }, + "@protobufjs/eventemitter": { + "version": "1.1.0", + "resolved": "https://registry.npm.taobao.org/@protobufjs/eventemitter/download/@protobufjs/eventemitter-1.1.0.tgz", + "integrity": "sha1-NVy8mLr61ZePntCV85diHx0Ga3A=" + }, + "@protobufjs/fetch": { + "version": "1.1.0", + "resolved": "https://registry.npm.taobao.org/@protobufjs/fetch/download/@protobufjs/fetch-1.1.0.tgz", + "integrity": "sha1-upn7WYYUr2VwDBYZ/wbUVLDYTEU=", + "requires": { + "@protobufjs/aspromise": "^1.1.1", + "@protobufjs/inquire": "^1.1.0" + } + }, + "@protobufjs/float": { + "version": "1.0.2", + "resolved": "https://registry.npm.taobao.org/@protobufjs/float/download/@protobufjs/float-1.0.2.tgz", + "integrity": "sha1-Xp4avctz/Ap8uLKR33jIy9l7h9E=" + }, + "@protobufjs/inquire": { + "version": "1.1.0", + "resolved": "https://registry.npm.taobao.org/@protobufjs/inquire/download/@protobufjs/inquire-1.1.0.tgz", + "integrity": "sha1-/yAOPnzyQp4tyvwRQIKOjMY48Ik=" + }, + "@protobufjs/path": { + "version": "1.1.2", + "resolved": "https://registry.npm.taobao.org/@protobufjs/path/download/@protobufjs/path-1.1.2.tgz", + "integrity": "sha1-bMKyDFya1q0NzP0hynZz2Nf79o0=" + }, + "@protobufjs/pool": { + "version": "1.1.0", + "resolved": "https://registry.npm.taobao.org/@protobufjs/pool/download/@protobufjs/pool-1.1.0.tgz", + "integrity": "sha1-Cf0V8tbTq/qbZbw2ZQbWrXhG/1Q=" + }, + "@protobufjs/utf8": { + "version": "1.1.0", + "resolved": "https://registry.npm.taobao.org/@protobufjs/utf8/download/@protobufjs/utf8-1.1.0.tgz", + "integrity": "sha1-p3c2C1s5oaLlEG+OhY8v0tBgxXA=" + }, + "@schematics/angular": { + "version": "9.0.1", + "resolved": "https://registry.npm.taobao.org/@schematics/angular/download/@schematics/angular-9.0.1.tgz", + "integrity": "sha1-GwjJONpNzuJHK0ZB88vJBtbriK8=", + "dev": true, + "requires": { + "@angular-devkit/core": "9.0.1", + "@angular-devkit/schematics": "9.0.1" + } + }, + "@schematics/update": { + "version": "0.900.1", + "resolved": "https://registry.npm.taobao.org/@schematics/update/download/@schematics/update-0.900.1.tgz", + "integrity": "sha1-SSO+iLlLXbCwTNLH8+deZ6ShNog=", + "dev": true, + "requires": { + "@angular-devkit/core": "9.0.1", + "@angular-devkit/schematics": "9.0.1", + "@yarnpkg/lockfile": "1.1.0", + "ini": "1.3.5", + "npm-package-arg": "^7.0.0", + "pacote": "9.5.8", + "rxjs": "6.5.3", + "semver": "6.3.0", + "semver-intersect": "1.4.0" + }, + "dependencies": { + "npm-package-arg": { + "version": "7.0.0", + "resolved": "https://registry.npm.taobao.org/npm-package-arg/download/npm-package-arg-7.0.0.tgz", + "integrity": "sha1-Us3wi0kcDFnfaHxMklqJEC73lKU=", + "dev": true, + "requires": { + "hosted-git-info": "^3.0.2", + "osenv": "^0.1.5", + "semver": "^5.6.0", + "validate-npm-package-name": "^3.0.0" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npm.taobao.org/semver/download/semver-5.7.1.tgz?cache=0&sync_timestamp=1580434257623&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsemver%2Fdownload%2Fsemver-5.7.1.tgz", + "integrity": "sha1-qVT5Ma66UI0we78Gnv8MAclhFvc=", + "dev": true + } + } + }, + "rxjs": { + "version": "6.5.3", + "resolved": "https://registry.npm.taobao.org/rxjs/download/rxjs-6.5.3.tgz", + "integrity": "sha1-UQ4mMX9NuRp+sd532d2boKSJmjo=", + "dev": true, + "requires": { + "tslib": "^1.9.0" + } + } + } + }, + "@turf/along": { + "version": "5.1.5", + "resolved": "https://registry.npm.taobao.org/@turf/along/download/@turf/along-5.1.5.tgz", + "integrity": "sha1-YdbmplhKzdq1asVYTge/jL5fi+s=", + "requires": { + "@turf/bearing": "^5.1.5", + "@turf/destination": "^5.1.5", + "@turf/distance": "^5.1.5", + "@turf/helpers": "^5.1.5" + } + }, + "@turf/area": { + "version": "5.1.5", + "resolved": "https://registry.npm.taobao.org/@turf/area/download/@turf/area-5.1.5.tgz", + "integrity": "sha1-79iZv9Jgzb0VQbKjwVX4pdLu+h0=", + "requires": { + "@turf/helpers": "^5.1.5", + "@turf/meta": "^5.1.5" + } + }, + "@turf/bbox": { + "version": "5.1.5", + "resolved": "https://registry.npm.taobao.org/@turf/bbox/download/@turf/bbox-5.1.5.tgz", + "integrity": "sha1-MFHfUUrUxQ9KT5uKLRX9i2hA7aM=", + "requires": { + "@turf/helpers": "^5.1.5", + "@turf/meta": "^5.1.5" + } + }, + "@turf/bbox-clip": { + "version": "5.1.5", + "resolved": "https://registry.npm.taobao.org/@turf/bbox-clip/download/@turf/bbox-clip-5.1.5.tgz", + "integrity": "sha1-M2S1Mo3/nzz0HZ4C7a/zdNFQzIQ=", + "requires": { + "@turf/helpers": "^5.1.5", + "@turf/invariant": "^5.1.5", + "lineclip": "^1.1.5" + } + }, + "@turf/bbox-polygon": { + "version": "5.1.5", + "resolved": "https://registry.npm.taobao.org/@turf/bbox-polygon/download/@turf/bbox-polygon-5.1.5.tgz", + "integrity": "sha1-auuk7VHYXSluD3w4uIwznwHu4CQ=", + "requires": { + "@turf/helpers": "^5.1.5" + } + }, + "@turf/bearing": { + "version": "5.1.5", + "resolved": "https://registry.npm.taobao.org/@turf/bearing/download/@turf/bearing-5.1.5.tgz", + "integrity": "sha1-egt5ATbE70eX8CRjBdRcvi0ns/c=", + "requires": { + "@turf/helpers": "^5.1.5", + "@turf/invariant": "^5.1.5" + } + }, + "@turf/bezier-spline": { + "version": "5.1.5", + "resolved": "https://registry.npm.taobao.org/@turf/bezier-spline/download/@turf/bezier-spline-5.1.5.tgz", + "integrity": "sha1-WaJ7ul17l+8Vqz/VpA+9I4cEm8o=", + "requires": { + "@turf/helpers": "^5.1.5", + "@turf/invariant": "^5.1.5" + } + }, + "@turf/boolean-clockwise": { + "version": "5.1.5", + "resolved": "https://registry.npm.taobao.org/@turf/boolean-clockwise/download/@turf/boolean-clockwise-5.1.5.tgz", + "integrity": "sha1-MwK32sYsXikaB4nimvcoM4f6nes=", + "requires": { + "@turf/helpers": "^5.1.5", + "@turf/invariant": "^5.1.5" + } + }, + "@turf/boolean-contains": { + "version": "5.1.5", + "resolved": "https://registry.npm.taobao.org/@turf/boolean-contains/download/@turf/boolean-contains-5.1.5.tgz", + "integrity": "sha1-WW1jruY2961T7pn5/yTJaZSg7xQ=", + "requires": { + "@turf/bbox": "^5.1.5", + "@turf/boolean-point-in-polygon": "^5.1.5", + "@turf/boolean-point-on-line": "^5.1.5", + "@turf/helpers": "^5.1.5", + "@turf/invariant": "^5.1.5" + } + }, + "@turf/boolean-crosses": { + "version": "5.1.5", + "resolved": "https://registry.npm.taobao.org/@turf/boolean-crosses/download/@turf/boolean-crosses-5.1.5.tgz", + "integrity": "sha1-Ab+uollvFk3kpNMlCU3HwlXHFdY=", + "requires": { + "@turf/boolean-point-in-polygon": "^5.1.5", + "@turf/helpers": "^5.1.5", + "@turf/invariant": "^5.1.5", + "@turf/line-intersect": "^5.1.5", + "@turf/polygon-to-line": "^5.1.5" + } + }, + "@turf/boolean-disjoint": { + "version": "5.1.6", + "resolved": "https://registry.npm.taobao.org/@turf/boolean-disjoint/download/@turf/boolean-disjoint-5.1.6.tgz", + "integrity": "sha1-P72HCEsmkTP1/RVyXes8ZnX7ip0=", + "requires": { + "@turf/boolean-point-in-polygon": "^5.1.5", + "@turf/helpers": "^5.1.5", + "@turf/line-intersect": "^5.1.5", + "@turf/meta": "^5.1.5", + "@turf/polygon-to-line": "^5.1.5" + } + }, + "@turf/boolean-equal": { + "version": "5.1.5", + "resolved": "https://registry.npm.taobao.org/@turf/boolean-equal/download/@turf/boolean-equal-5.1.5.tgz", + "integrity": "sha1-Kfj21gu4RQff12WzIlTbjnLJOKQ=", + "requires": { + "@turf/clean-coords": "^5.1.5", + "@turf/helpers": "^5.1.5", + "@turf/invariant": "^5.1.5", + "geojson-equality": "0.1.6" + } + }, + "@turf/boolean-overlap": { + "version": "5.1.5", + "resolved": "https://registry.npm.taobao.org/@turf/boolean-overlap/download/@turf/boolean-overlap-5.1.5.tgz", + "integrity": "sha1-DU5kxSx3CijpPZ7834qLg3OsznU=", + "requires": { + "@turf/helpers": "^5.1.5", + "@turf/invariant": "^5.1.5", + "@turf/line-intersect": "^5.1.5", + "@turf/line-overlap": "^5.1.5", + "@turf/meta": "^5.1.5", + "geojson-equality": "0.1.6" + } + }, + "@turf/boolean-parallel": { + "version": "5.1.5", + "resolved": "https://registry.npm.taobao.org/@turf/boolean-parallel/download/@turf/boolean-parallel-5.1.5.tgz", + "integrity": "sha1-c5NYR16ltlx+GCejw+DopofTqF0=", + "requires": { + "@turf/clean-coords": "^5.1.5", + "@turf/helpers": "^5.1.5", + "@turf/line-segment": "^5.1.5", + "@turf/rhumb-bearing": "^5.1.5" + } + }, + "@turf/boolean-point-in-polygon": { + "version": "5.1.5", + "resolved": "https://registry.npm.taobao.org/@turf/boolean-point-in-polygon/download/@turf/boolean-point-in-polygon-5.1.5.tgz", + "integrity": "sha1-8BzBlNHgMKVIv9qYHLpDz9YpQbc=", + "requires": { + "@turf/helpers": "^5.1.5", + "@turf/invariant": "^5.1.5" + } + }, + "@turf/boolean-point-on-line": { + "version": "5.1.5", + "resolved": "https://registry.npm.taobao.org/@turf/boolean-point-on-line/download/@turf/boolean-point-on-line-5.1.5.tgz", + "integrity": "sha1-9jPF/4Aq0ku48Vja269v9KAj3Xs=", + "requires": { + "@turf/helpers": "^5.1.5", + "@turf/invariant": "^5.1.5" + } + }, + "@turf/boolean-within": { + "version": "5.1.5", + "resolved": "https://registry.npm.taobao.org/@turf/boolean-within/download/@turf/boolean-within-5.1.5.tgz", + "integrity": "sha1-RxBdVtB1Kp0Pv81Dw2pfkUnchpc=", + "requires": { + "@turf/bbox": "^5.1.5", + "@turf/boolean-point-in-polygon": "^5.1.5", + "@turf/boolean-point-on-line": "^5.1.5", + "@turf/helpers": "^5.1.5", + "@turf/invariant": "^5.1.5" + } + }, + "@turf/buffer": { + "version": "5.1.5", + "resolved": "https://registry.npm.taobao.org/@turf/buffer/download/@turf/buffer-5.1.5.tgz", + "integrity": "sha1-hByWJ8+5dLEirE4alW8EZrwCMcQ=", + "requires": { + "@turf/bbox": "^5.1.5", + "@turf/center": "^5.1.5", + "@turf/helpers": "^5.1.5", + "@turf/meta": "^5.1.5", + "@turf/projection": "^5.1.5", + "d3-geo": "1.7.1", + "turf-jsts": "*" + } + }, + "@turf/center": { + "version": "5.1.5", + "resolved": "https://registry.npm.taobao.org/@turf/center/download/@turf/center-5.1.5.tgz", + "integrity": "sha1-RKss2VT2PA03dX9xWKmcPvURS4A=", + "requires": { + "@turf/bbox": "^5.1.5", + "@turf/helpers": "^5.1.5" + } + }, + "@turf/center-mean": { + "version": "5.1.5", + "resolved": "https://registry.npm.taobao.org/@turf/center-mean/download/@turf/center-mean-5.1.5.tgz", + "integrity": "sha1-jI6YdTkeXwnw5uePXWYbiLIQigo=", + "requires": { + "@turf/bbox": "^5.1.5", + "@turf/helpers": "^5.1.5", + "@turf/meta": "^5.1.5" + } + }, + "@turf/center-median": { + "version": "5.1.5", + "resolved": "https://registry.npm.taobao.org/@turf/center-median/download/@turf/center-median-5.1.5.tgz", + "integrity": "sha1-u0Yb/noqSGAdikcnaFcYcjoUqHI=", + "requires": { + "@turf/center-mean": "^5.1.5", + "@turf/centroid": "^5.1.5", + "@turf/distance": "^5.1.5", + "@turf/helpers": "^5.1.5", + "@turf/meta": "^5.1.5" + } + }, + "@turf/center-of-mass": { + "version": "5.1.5", + "resolved": "https://registry.npm.taobao.org/@turf/center-of-mass/download/@turf/center-of-mass-5.1.5.tgz", + "integrity": "sha1-TTvXnYhJjbq4Mk1PafAyL2Uguco=", + "requires": { + "@turf/centroid": "^5.1.5", + "@turf/convex": "^5.1.5", + "@turf/helpers": "^5.1.5", + "@turf/invariant": "^5.1.5", + "@turf/meta": "^5.1.5" + } + }, + "@turf/centroid": { + "version": "5.1.5", + "resolved": "https://registry.npm.taobao.org/@turf/centroid/download/@turf/centroid-5.1.5.tgz", + "integrity": "sha1-d4radCFjNQIa2P0OemWoNJ1Tx2k=", + "requires": { + "@turf/helpers": "^5.1.5", + "@turf/meta": "^5.1.5" + } + }, + "@turf/circle": { + "version": "5.1.5", + "resolved": "https://registry.npm.taobao.org/@turf/circle/download/@turf/circle-5.1.5.tgz", + "integrity": "sha1-mxV3g1UIq1L7HBCypQZcuiuHtqU=", + "requires": { + "@turf/destination": "^5.1.5", + "@turf/helpers": "^5.1.5" + } + }, + "@turf/clean-coords": { + "version": "5.1.5", + "resolved": "https://registry.npm.taobao.org/@turf/clean-coords/download/@turf/clean-coords-5.1.5.tgz", + "integrity": "sha1-EoAKmKeMmkUqcuxChJPEOs8q2h8=", + "requires": { + "@turf/helpers": "^5.1.5", + "@turf/invariant": "^5.1.5" + } + }, + "@turf/clone": { + "version": "5.1.5", + "resolved": "https://registry.npm.taobao.org/@turf/clone/download/@turf/clone-5.1.5.tgz", + "integrity": "sha1-JT6NNUdxgZduM636tQoPAqfw42c=", + "requires": { + "@turf/helpers": "^5.1.5" + } + }, + "@turf/clusters": { + "version": "5.1.5", + "resolved": "https://registry.npm.taobao.org/@turf/clusters/download/@turf/clusters-5.1.5.tgz", + "integrity": "sha1-ZzpeXxsZycq6vFfJCO6t1oIiTdQ=", + "requires": { + "@turf/helpers": "^5.1.5", + "@turf/meta": "^5.1.5" + } + }, + "@turf/clusters-dbscan": { + "version": "5.1.5", + "resolved": "https://registry.npm.taobao.org/@turf/clusters-dbscan/download/@turf/clusters-dbscan-5.1.5.tgz", + "integrity": "sha1-V4H7TmVsdHoLjpk333MYHAMJ4m8=", + "requires": { + "@turf/clone": "^5.1.5", + "@turf/distance": "^5.1.5", + "@turf/helpers": "^5.1.5", + "@turf/invariant": "^5.1.5", + "@turf/meta": "^5.1.5", + "density-clustering": "1.3.0" + } + }, + "@turf/clusters-kmeans": { + "version": "5.1.5", + "resolved": "https://registry.npm.taobao.org/@turf/clusters-kmeans/download/@turf/clusters-kmeans-5.1.5.tgz", + "integrity": "sha1-/W3+qLEzuovcI3CsPKzuFYejAvE=", + "requires": { + "@turf/clone": "^5.1.5", + "@turf/helpers": "^5.1.5", + "@turf/invariant": "^5.1.5", + "@turf/meta": "^5.1.5", + "skmeans": "0.9.7" + } + }, + "@turf/collect": { + "version": "5.1.5", + "resolved": "https://registry.npm.taobao.org/@turf/collect/download/@turf/collect-5.1.5.tgz", + "integrity": "sha1-/pjJqMIY7PJP/DPXApUXt8GbKj4=", + "requires": { + "@turf/bbox": "^5.1.5", + "@turf/boolean-point-in-polygon": "^5.1.5", + "@turf/helpers": "^5.1.5", + "rbush": "^2.0.1" + }, + "dependencies": { + "quickselect": { + "version": "1.1.1", + "resolved": "https://registry.npm.taobao.org/quickselect/download/quickselect-1.1.1.tgz", + "integrity": "sha1-hS5BLOQY8jetW2YNcM/6xkeulMI=" + }, + "rbush": { + "version": "2.0.2", + "resolved": "https://registry.npm.taobao.org/rbush/download/rbush-2.0.2.tgz", + "integrity": "sha1-u2AFwnMbe6HVqaA1dykn0WphRgU=", + "requires": { + "quickselect": "^1.0.1" + } + } + } + }, + "@turf/combine": { + "version": "5.1.5", + "resolved": "https://registry.npm.taobao.org/@turf/combine/download/@turf/combine-5.1.5.tgz", + "integrity": "sha1-uxS976VVBDVxlfwaEkzX1TqMiQU=", + "requires": { + "@turf/helpers": "^5.1.5", + "@turf/meta": "^5.1.5" + } + }, + "@turf/concave": { + "version": "5.1.5", + "resolved": "https://registry.npm.taobao.org/@turf/concave/download/@turf/concave-5.1.5.tgz", + "integrity": "sha1-I7uqw4fQNLlldKG9cNBZI3qdIRA=", + "requires": { + "@turf/clone": "^5.1.5", + "@turf/distance": "^5.1.5", + "@turf/helpers": "^5.1.5", + "@turf/invariant": "^5.1.5", + "@turf/meta": "^5.1.5", + "@turf/tin": "^5.1.5", + "topojson-client": "3.x", + "topojson-server": "3.x" + } + }, + "@turf/convex": { + "version": "5.1.5", + "resolved": "https://registry.npm.taobao.org/@turf/convex/download/@turf/convex-5.1.5.tgz", + "integrity": "sha1-Dfk3fdACIWzpghsH9wXgN9rj4B0=", + "requires": { + "@turf/helpers": "^5.1.5", + "@turf/meta": "^5.1.5", + "concaveman": "*" + } + }, + "@turf/destination": { + "version": "5.1.5", + "resolved": "https://registry.npm.taobao.org/@turf/destination/download/@turf/destination-5.1.5.tgz", + "integrity": "sha1-7TU4G9zoO73cvQei4rzivd/7zCY=", + "requires": { + "@turf/helpers": "^5.1.5", + "@turf/invariant": "^5.1.5" + } + }, + "@turf/difference": { + "version": "5.1.5", + "resolved": "https://registry.npm.taobao.org/@turf/difference/download/@turf/difference-5.1.5.tgz", + "integrity": "sha1-ok1pCnvKgD8QkKnuO52Qb8Q3H0I=", + "requires": { + "@turf/area": "^5.1.5", + "@turf/helpers": "^5.1.5", + "@turf/invariant": "^5.1.5", + "@turf/meta": "^5.1.5", + "turf-jsts": "*" + } + }, + "@turf/dissolve": { + "version": "5.1.5", + "resolved": "https://registry.npm.taobao.org/@turf/dissolve/download/@turf/dissolve-5.1.5.tgz", + "integrity": "sha1-LPEzqQIdIWODHD16lY1lB/nYGTg=", + "requires": { + "@turf/boolean-overlap": "^5.1.5", + "@turf/clone": "^5.1.5", + "@turf/helpers": "^5.1.5", + "@turf/invariant": "^5.1.5", + "@turf/line-intersect": "^5.1.5", + "@turf/meta": "^5.1.5", + "@turf/union": "^5.1.5", + "geojson-rbush": "2.1.0", + "get-closest": "*" + } + }, + "@turf/distance": { + "version": "5.1.5", + "resolved": "https://registry.npm.taobao.org/@turf/distance/download/@turf/distance-5.1.5.tgz", + "integrity": "sha1-Oc8YIEu/h1h9cH5gmmARiQkVZAk=", + "requires": { + "@turf/helpers": "^5.1.5", + "@turf/invariant": "^5.1.5" + } + }, + "@turf/ellipse": { + "version": "5.1.5", + "resolved": "https://registry.npm.taobao.org/@turf/ellipse/download/@turf/ellipse-5.1.5.tgz", + "integrity": "sha1-1XyrhTmFkgzeYCKKeNgEWAJcVL4=", + "requires": { + "@turf/helpers": "^5.1.5", + "@turf/invariant": "^5.1.5", + "@turf/rhumb-destination": "^5.1.5", + "@turf/transform-rotate": "^5.1.5" + } + }, + "@turf/envelope": { + "version": "5.1.5", + "resolved": "https://registry.npm.taobao.org/@turf/envelope/download/@turf/envelope-5.1.5.tgz", + "integrity": "sha1-UBMwnFP91D369LWIplw/7X28EIo=", + "requires": { + "@turf/bbox": "^5.1.5", + "@turf/bbox-polygon": "^5.1.5", + "@turf/helpers": "^5.1.5" + } + }, + "@turf/explode": { + "version": "5.1.5", + "resolved": "https://registry.npm.taobao.org/@turf/explode/download/@turf/explode-5.1.5.tgz", + "integrity": "sha1-sSsvd0AEobSPYrqVsgocZVo94Rg=", + "requires": { + "@turf/helpers": "^5.1.5", + "@turf/meta": "^5.1.5" + } + }, + "@turf/flatten": { + "version": "5.1.5", + "resolved": "https://registry.npm.taobao.org/@turf/flatten/download/@turf/flatten-5.1.5.tgz", + "integrity": "sha1-2iknBnEz7WFpsLnWB7khVoiqE1g=", + "requires": { + "@turf/helpers": "^5.1.5", + "@turf/meta": "^5.1.5" + } + }, + "@turf/flip": { + "version": "5.1.5", + "resolved": "https://registry.npm.taobao.org/@turf/flip/download/@turf/flip-5.1.5.tgz", + "integrity": "sha1-Q29kOnIvDKU7n85jjkaT2zYIpoo=", + "requires": { + "@turf/clone": "^5.1.5", + "@turf/helpers": "^5.1.5", + "@turf/meta": "^5.1.5" + } + }, + "@turf/great-circle": { + "version": "5.1.5", + "resolved": "https://registry.npm.taobao.org/@turf/great-circle/download/@turf/great-circle-5.1.5.tgz", + "integrity": "sha1-3r+2cc5HVQnLY3MBwV/PzPo1mpM=", + "requires": { + "@turf/helpers": "^5.1.5", + "@turf/invariant": "^5.1.5" + } + }, + "@turf/helpers": { + "version": "5.1.5", + "resolved": "https://registry.npm.taobao.org/@turf/helpers/download/@turf/helpers-5.1.5.tgz", + "integrity": "sha1-FTQFInq5M9AEpbuWQantmZ/L4M8=" + }, + "@turf/hex-grid": { + "version": "5.1.5", + "resolved": "https://registry.npm.taobao.org/@turf/hex-grid/download/@turf/hex-grid-5.1.5.tgz", + "integrity": "sha1-m3ul/s9QUfHoWJL3E/zlxVBQKmo=", + "requires": { + "@turf/distance": "^5.1.5", + "@turf/helpers": "^5.1.5", + "@turf/intersect": "^5.1.5", + "@turf/invariant": "^5.1.5" + } + }, + "@turf/interpolate": { + "version": "5.1.5", + "resolved": "https://registry.npm.taobao.org/@turf/interpolate/download/@turf/interpolate-5.1.5.tgz", + "integrity": "sha1-DxLwq3VtbdEK+ykMpuh3ve8BPqo=", + "requires": { + "@turf/bbox": "^5.1.5", + "@turf/centroid": "^5.1.5", + "@turf/clone": "^5.1.5", + "@turf/distance": "^5.1.5", + "@turf/helpers": "^5.1.5", + "@turf/hex-grid": "^5.1.5", + "@turf/invariant": "^5.1.5", + "@turf/meta": "^5.1.5", + "@turf/point-grid": "^5.1.5", + "@turf/square-grid": "^5.1.5", + "@turf/triangle-grid": "^5.1.5" + } + }, + "@turf/intersect": { + "version": "5.1.6", + "resolved": "https://registry.npm.taobao.org/@turf/intersect/download/@turf/intersect-5.1.6.tgz", + "integrity": "sha1-E//M63pSnCp+XWaBqzumcfho6V8=", + "requires": { + "@turf/clean-coords": "^5.1.5", + "@turf/helpers": "^5.1.5", + "@turf/invariant": "^5.1.5", + "@turf/truncate": "^5.1.5", + "turf-jsts": "*" + } + }, + "@turf/invariant": { + "version": "5.1.5", + "resolved": "https://registry.npm.taobao.org/@turf/invariant/download/@turf/invariant-5.1.5.tgz", + "integrity": "sha1-9Z9P76CSJLFdzhZR+QPIaNV6JOE=", + "requires": { + "@turf/helpers": "^5.1.5" + } + }, + "@turf/isobands": { + "version": "5.1.5", + "resolved": "https://registry.npm.taobao.org/@turf/isobands/download/@turf/isobands-5.1.5.tgz", + "integrity": "sha1-a0TO9YTVUaMTBBh68jtKFYLj8I0=", + "requires": { + "@turf/area": "^5.1.5", + "@turf/bbox": "^5.1.5", + "@turf/boolean-point-in-polygon": "^5.1.5", + "@turf/explode": "^5.1.5", + "@turf/helpers": "^5.1.5", + "@turf/invariant": "^5.1.5", + "@turf/meta": "^5.1.5" + } + }, + "@turf/isolines": { + "version": "5.1.5", + "resolved": "https://registry.npm.taobao.org/@turf/isolines/download/@turf/isolines-5.1.5.tgz", + "integrity": "sha1-irTn9Cuz38VGFOW/FVln9+VdLeE=", + "requires": { + "@turf/bbox": "^5.1.5", + "@turf/helpers": "^5.1.5", + "@turf/invariant": "^5.1.5", + "@turf/meta": "^5.1.5" + } + }, + "@turf/kinks": { + "version": "5.1.5", + "resolved": "https://registry.npm.taobao.org/@turf/kinks/download/@turf/kinks-5.1.5.tgz", + "integrity": "sha1-irtpYdm7AQchO63fLCwmQNAlaYA=", + "requires": { + "@turf/helpers": "^5.1.5" + } + }, + "@turf/length": { + "version": "5.1.5", + "resolved": "https://registry.npm.taobao.org/@turf/length/download/@turf/length-5.1.5.tgz", + "integrity": "sha1-86X4ZMK5lqi7RxeUU1ofrxLuvvs=", + "requires": { + "@turf/distance": "^5.1.5", + "@turf/helpers": "^5.1.5", + "@turf/meta": "^5.1.5" + } + }, + "@turf/line-arc": { + "version": "5.1.5", + "resolved": "https://registry.npm.taobao.org/@turf/line-arc/download/@turf/line-arc-5.1.5.tgz", + "integrity": "sha1-AHinRHg1oSrkFKIR+aZNEYYVDhU=", + "requires": { + "@turf/circle": "^5.1.5", + "@turf/destination": "^5.1.5", + "@turf/helpers": "^5.1.5" + } + }, + "@turf/line-chunk": { + "version": "5.1.5", + "resolved": "https://registry.npm.taobao.org/@turf/line-chunk/download/@turf/line-chunk-5.1.5.tgz", + "integrity": "sha1-kQqFwFwG2dD5w4l3oF4IGNUIXEI=", + "requires": { + "@turf/helpers": "^5.1.5", + "@turf/length": "^5.1.5", + "@turf/line-slice-along": "^5.1.5", + "@turf/meta": "^5.1.5" + } + }, + "@turf/line-intersect": { + "version": "5.1.5", + "resolved": "https://registry.npm.taobao.org/@turf/line-intersect/download/@turf/line-intersect-5.1.5.tgz", + "integrity": "sha1-DikHGuQDKV5JFyO8SfXPrI0R3fM=", + "requires": { + "@turf/helpers": "^5.1.5", + "@turf/invariant": "^5.1.5", + "@turf/line-segment": "^5.1.5", + "@turf/meta": "^5.1.5", + "geojson-rbush": "2.1.0" + } + }, + "@turf/line-offset": { + "version": "5.1.5", + "resolved": "https://registry.npm.taobao.org/@turf/line-offset/download/@turf/line-offset-5.1.5.tgz", + "integrity": "sha1-KrWy8In4yRPiMdmUN4553KkLWh4=", + "requires": { + "@turf/helpers": "^5.1.5", + "@turf/invariant": "^5.1.5", + "@turf/meta": "^5.1.5" + } + }, + "@turf/line-overlap": { + "version": "5.1.5", + "resolved": "https://registry.npm.taobao.org/@turf/line-overlap/download/@turf/line-overlap-5.1.5.tgz", + "integrity": "sha1-lDxvh6A4bcQ9+sEdKz/5wRLNP2A=", + "requires": { + "@turf/boolean-point-on-line": "^5.1.5", + "@turf/helpers": "^5.1.5", + "@turf/invariant": "^5.1.5", + "@turf/line-segment": "^5.1.5", + "@turf/meta": "^5.1.5", + "@turf/nearest-point-on-line": "^5.1.5", + "geojson-rbush": "2.1.0" + } + }, + "@turf/line-segment": { + "version": "5.1.5", + "resolved": "https://registry.npm.taobao.org/@turf/line-segment/download/@turf/line-segment-5.1.5.tgz", + "integrity": "sha1-Mgeq7lRqskw9jcPMY/kcdwuAE+U=", + "requires": { + "@turf/helpers": "^5.1.5", + "@turf/invariant": "^5.1.5", + "@turf/meta": "^5.1.5" + } + }, + "@turf/line-slice": { + "version": "5.1.5", + "resolved": "https://registry.npm.taobao.org/@turf/line-slice/download/@turf/line-slice-5.1.5.tgz", + "integrity": "sha1-Hs/OFGKjeFeXVM7fRGTN4mgp8rU=", + "requires": { + "@turf/helpers": "^5.1.5", + "@turf/invariant": "^5.1.5", + "@turf/nearest-point-on-line": "^5.1.5" + } + }, + "@turf/line-slice-along": { + "version": "5.1.5", + "resolved": "https://registry.npm.taobao.org/@turf/line-slice-along/download/@turf/line-slice-along-5.1.5.tgz", + "integrity": "sha1-7drQoh70efKWihG9LdcomiEy6aU=", + "requires": { + "@turf/bearing": "^5.1.5", + "@turf/destination": "^5.1.5", + "@turf/distance": "^5.1.5", + "@turf/helpers": "^5.1.5" + } + }, + "@turf/line-split": { + "version": "5.1.5", + "resolved": "https://registry.npm.taobao.org/@turf/line-split/download/@turf/line-split-5.1.5.tgz", + "integrity": "sha1-Wy30w3YZty73JbUWPPmSbVVArLc=", + "requires": { + "@turf/bbox": "^5.1.5", + "@turf/helpers": "^5.1.5", + "@turf/invariant": "^5.1.5", + "@turf/line-intersect": "^5.1.5", + "@turf/line-segment": "^5.1.5", + "@turf/meta": "^5.1.5", + "@turf/nearest-point-on-line": "^5.1.5", + "@turf/square": "^5.1.5", + "@turf/truncate": "^5.1.5", + "geojson-rbush": "2.1.0" + } + }, + "@turf/line-to-polygon": { + "version": "5.1.5", + "resolved": "https://registry.npm.taobao.org/@turf/line-to-polygon/download/@turf/line-to-polygon-5.1.5.tgz", + "integrity": "sha1-ITz0Gmj4Ikd4ujnTGH3sPouBhlo=", + "requires": { + "@turf/bbox": "^5.1.5", + "@turf/helpers": "^5.1.5", + "@turf/invariant": "^5.1.5" + } + }, + "@turf/mask": { + "version": "5.1.5", + "resolved": "https://registry.npm.taobao.org/@turf/mask/download/@turf/mask-5.1.5.tgz", + "integrity": "sha1-mrD+8aJyyY/j70kvn/thggayQtU=", + "requires": { + "@turf/bbox": "^5.1.5", + "@turf/helpers": "^5.1.5", + "@turf/meta": "^5.1.5", + "@turf/union": "^5.1.5", + "rbush": "^2.0.1" + }, + "dependencies": { + "quickselect": { + "version": "1.1.1", + "resolved": "https://registry.npm.taobao.org/quickselect/download/quickselect-1.1.1.tgz", + "integrity": "sha1-hS5BLOQY8jetW2YNcM/6xkeulMI=" + }, + "rbush": { + "version": "2.0.2", + "resolved": "https://registry.npm.taobao.org/rbush/download/rbush-2.0.2.tgz", + "integrity": "sha1-u2AFwnMbe6HVqaA1dykn0WphRgU=", + "requires": { + "quickselect": "^1.0.1" + } + } + } + }, + "@turf/meta": { + "version": "5.1.6", + "resolved": "https://registry.npm.taobao.org/@turf/meta/download/@turf/meta-5.1.6.tgz", + "integrity": "sha1-wgqGPt7Qhp+yhUje6Ik0G8y0akY=", + "requires": { + "@turf/helpers": "^5.1.5" + } + }, + "@turf/midpoint": { + "version": "5.1.5", + "resolved": "https://registry.npm.taobao.org/@turf/midpoint/download/@turf/midpoint-5.1.5.tgz", + "integrity": "sha1-4mH2srDqgSTM7/VSomLdRlydBfA=", + "requires": { + "@turf/bearing": "^5.1.5", + "@turf/destination": "^5.1.5", + "@turf/distance": "^5.1.5", + "@turf/helpers": "^5.1.5" + } + }, + "@turf/nearest-point": { + "version": "5.1.5", + "resolved": "https://registry.npm.taobao.org/@turf/nearest-point/download/@turf/nearest-point-5.1.5.tgz", + "integrity": "sha1-EgUN5Bw5hEMiTHl43g9iE5ANNPs=", + "requires": { + "@turf/clone": "^5.1.5", + "@turf/distance": "^5.1.5", + "@turf/helpers": "^5.1.5", + "@turf/meta": "^5.1.5" + } + }, + "@turf/nearest-point-on-line": { + "version": "5.1.5", + "resolved": "https://registry.npm.taobao.org/@turf/nearest-point-on-line/download/@turf/nearest-point-on-line-5.1.5.tgz", + "integrity": "sha1-VgauKX8VlHUkvqUaKp71HsG/nDY=", + "requires": { + "@turf/bearing": "^5.1.5", + "@turf/destination": "^5.1.5", + "@turf/distance": "^5.1.5", + "@turf/helpers": "^5.1.5", + "@turf/invariant": "^5.1.5", + "@turf/line-intersect": "^5.1.5", + "@turf/meta": "^5.1.5" + } + }, + "@turf/nearest-point-to-line": { + "version": "5.1.6", + "resolved": "https://registry.npm.taobao.org/@turf/nearest-point-to-line/download/@turf/nearest-point-to-line-5.1.6.tgz", + "integrity": "sha1-0wt2BuVqPc6X9NttRdNSRw4LP4g=", + "requires": { + "@turf/helpers": "6.x", + "@turf/invariant": "6.x", + "@turf/meta": "6.x", + "@turf/point-to-line-distance": "^5.1.5", + "object-assign": "*" + }, + "dependencies": { + "@turf/helpers": { + "version": "6.1.4", + "resolved": "https://registry.npm.taobao.org/@turf/helpers/download/@turf/helpers-6.1.4.tgz", + "integrity": "sha1-1v1+vmeC3ZyH3KVVm9pcSK5MODY=" + }, + "@turf/invariant": { + "version": "6.1.2", + "resolved": "https://registry.npm.taobao.org/@turf/invariant/download/@turf/invariant-6.1.2.tgz", + "integrity": "sha1-YBPtYhn5rC7a2psx4d+lkY6wovc=", + "requires": { + "@turf/helpers": "6.x" + } + }, + "@turf/meta": { + "version": "6.0.2", + "resolved": "https://registry.npm.taobao.org/@turf/meta/download/@turf/meta-6.0.2.tgz", + "integrity": "sha1-65KVESbSSmE6wbe5nXM/zCD9MM8=", + "requires": { + "@turf/helpers": "6.x" + } + } + } + }, + "@turf/planepoint": { + "version": "5.1.5", + "resolved": "https://registry.npm.taobao.org/@turf/planepoint/download/@turf/planepoint-5.1.5.tgz", + "integrity": "sha1-GLvfAG91ne9eQsagBsn53oGyt/8=", + "requires": { + "@turf/helpers": "^5.1.5", + "@turf/invariant": "^5.1.5" + } + }, + "@turf/point-grid": { + "version": "5.1.5", + "resolved": "https://registry.npm.taobao.org/@turf/point-grid/download/@turf/point-grid-5.1.5.tgz", + "integrity": "sha1-MFFBJI9Quv42zn5mukuX56sjaIc=", + "requires": { + "@turf/boolean-within": "^5.1.5", + "@turf/distance": "^5.1.5", + "@turf/helpers": "^5.1.5", + "@turf/invariant": "^5.1.5" + } + }, + "@turf/point-on-feature": { + "version": "5.1.5", + "resolved": "https://registry.npm.taobao.org/@turf/point-on-feature/download/@turf/point-on-feature-5.1.5.tgz", + "integrity": "sha1-MMfwMkMCd8ZBjZbSieRba/shP+c=", + "requires": { + "@turf/boolean-point-in-polygon": "^5.1.5", + "@turf/center": "^5.1.5", + "@turf/explode": "^5.1.5", + "@turf/helpers": "^5.1.5", + "@turf/nearest-point": "^5.1.5" + } + }, + "@turf/point-to-line-distance": { + "version": "5.1.6", + "resolved": "https://registry.npm.taobao.org/@turf/point-to-line-distance/download/@turf/point-to-line-distance-5.1.6.tgz", + "integrity": "sha1-lU9stoVGQgoDDYSAOSUDJklw0tg=", + "requires": { + "@turf/bearing": "6.x", + "@turf/distance": "6.x", + "@turf/helpers": "6.x", + "@turf/invariant": "6.x", + "@turf/meta": "6.x", + "@turf/projection": "6.x", + "@turf/rhumb-bearing": "6.x", + "@turf/rhumb-distance": "6.x" + }, + "dependencies": { + "@turf/bearing": { + "version": "6.0.1", + "resolved": "https://registry.npm.taobao.org/@turf/bearing/download/@turf/bearing-6.0.1.tgz", + "integrity": "sha1-jaXRcJLlcfFwzee/suWw10kjyS0=", + "requires": { + "@turf/helpers": "6.x", + "@turf/invariant": "6.x" + } + }, + "@turf/clone": { + "version": "6.0.2", + "resolved": "https://registry.npm.taobao.org/@turf/clone/download/@turf/clone-6.0.2.tgz", + "integrity": "sha1-dWPOu7Pi4Z82FZm7JERn4NzCBck=", + "requires": { + "@turf/helpers": "6.x" + } + }, + "@turf/distance": { + "version": "6.0.1", + "resolved": "https://registry.npm.taobao.org/@turf/distance/download/@turf/distance-6.0.1.tgz", + "integrity": "sha1-B2Hyh4QobnhlpCfE5+NZNWnC3qg=", + "requires": { + "@turf/helpers": "6.x", + "@turf/invariant": "6.x" + } + }, + "@turf/helpers": { + "version": "6.1.4", + "resolved": "https://registry.npm.taobao.org/@turf/helpers/download/@turf/helpers-6.1.4.tgz", + "integrity": "sha1-1v1+vmeC3ZyH3KVVm9pcSK5MODY=" + }, + "@turf/invariant": { + "version": "6.1.2", + "resolved": "https://registry.npm.taobao.org/@turf/invariant/download/@turf/invariant-6.1.2.tgz", + "integrity": "sha1-YBPtYhn5rC7a2psx4d+lkY6wovc=", + "requires": { + "@turf/helpers": "6.x" + } + }, + "@turf/meta": { + "version": "6.0.2", + "resolved": "https://registry.npm.taobao.org/@turf/meta/download/@turf/meta-6.0.2.tgz", + "integrity": "sha1-65KVESbSSmE6wbe5nXM/zCD9MM8=", + "requires": { + "@turf/helpers": "6.x" + } + }, + "@turf/projection": { + "version": "6.0.1", + "resolved": "https://registry.npm.taobao.org/@turf/projection/download/@turf/projection-6.0.1.tgz", + "integrity": "sha1-vecK6EQbnO/d8m1xx9t0vD2XkrE=", + "requires": { + "@turf/clone": "6.x", + "@turf/helpers": "6.x", + "@turf/meta": "6.x" + } + }, + "@turf/rhumb-bearing": { + "version": "6.0.1", + "resolved": "https://registry.npm.taobao.org/@turf/rhumb-bearing/download/@turf/rhumb-bearing-6.0.1.tgz", + "integrity": "sha1-GCxMIf6VHgl/tGiuEo3CLvYHjz8=", + "requires": { + "@turf/helpers": "6.x", + "@turf/invariant": "6.x" + } + }, + "@turf/rhumb-distance": { + "version": "6.0.1", + "resolved": "https://registry.npm.taobao.org/@turf/rhumb-distance/download/@turf/rhumb-distance-6.0.1.tgz", + "integrity": "sha1-rhxcgjtLBPdc1/wkD3+TZH24vdQ=", + "requires": { + "@turf/helpers": "6.x", + "@turf/invariant": "6.x" + } + } + } + }, + "@turf/points-within-polygon": { + "version": "5.1.5", + "resolved": "https://registry.npm.taobao.org/@turf/points-within-polygon/download/@turf/points-within-polygon-5.1.5.tgz", + "integrity": "sha1-K4VaXfOq2lfC7oIKB1SrlJKKIzc=", + "requires": { + "@turf/boolean-point-in-polygon": "^5.1.5", + "@turf/helpers": "^5.1.5", + "@turf/meta": "^5.1.5" + } + }, + "@turf/polygon-tangents": { + "version": "5.1.5", + "resolved": "https://registry.npm.taobao.org/@turf/polygon-tangents/download/@turf/polygon-tangents-5.1.5.tgz", + "integrity": "sha1-K/AJkUcwJbF44lDcfLmuVAm71lI=", + "requires": { + "@turf/helpers": "^5.1.5", + "@turf/invariant": "^5.1.5" + } + }, + "@turf/polygon-to-line": { + "version": "5.1.5", + "resolved": "https://registry.npm.taobao.org/@turf/polygon-to-line/download/@turf/polygon-to-line-5.1.5.tgz", + "integrity": "sha1-I7tEjYTcTGUZmaxhGjbZHFklA2o=", + "requires": { + "@turf/helpers": "^5.1.5", + "@turf/invariant": "^5.1.5" + } + }, + "@turf/polygonize": { + "version": "5.1.5", + "resolved": "https://registry.npm.taobao.org/@turf/polygonize/download/@turf/polygonize-5.1.5.tgz", + "integrity": "sha1-BJP6EYefOdELmtAs5qI+lC0IqjI=", + "requires": { + "@turf/boolean-point-in-polygon": "^5.1.5", + "@turf/envelope": "^5.1.5", + "@turf/helpers": "^5.1.5", + "@turf/invariant": "^5.1.5", + "@turf/meta": "^5.1.5" + } + }, + "@turf/projection": { + "version": "5.1.5", + "resolved": "https://registry.npm.taobao.org/@turf/projection/download/@turf/projection-5.1.5.tgz", + "integrity": "sha1-JFF+7rLzaBa6n3EueubWo2jt91c=", + "requires": { + "@turf/clone": "^5.1.5", + "@turf/helpers": "^5.1.5", + "@turf/meta": "^5.1.5" + } + }, + "@turf/random": { + "version": "5.1.5", + "resolved": "https://registry.npm.taobao.org/@turf/random/download/@turf/random-5.1.5.tgz", + "integrity": "sha1-sy78k0Vgroulfo67UfJBw5+6Lns=", + "requires": { + "@turf/helpers": "^5.1.5" + } + }, + "@turf/rewind": { + "version": "5.1.5", + "resolved": "https://registry.npm.taobao.org/@turf/rewind/download/@turf/rewind-5.1.5.tgz", + "integrity": "sha1-nqPbSmi3PB/R3RH1djGxQ8/vock=", + "requires": { + "@turf/boolean-clockwise": "^5.1.5", + "@turf/clone": "^5.1.5", + "@turf/helpers": "^5.1.5", + "@turf/invariant": "^5.1.5", + "@turf/meta": "^5.1.5" + } + }, + "@turf/rhumb-bearing": { + "version": "5.1.5", + "resolved": "https://registry.npm.taobao.org/@turf/rhumb-bearing/download/@turf/rhumb-bearing-5.1.5.tgz", + "integrity": "sha1-rPalAkJ+uMSeGM2mrg7/qwxd3NI=", + "requires": { + "@turf/helpers": "^5.1.5", + "@turf/invariant": "^5.1.5" + } + }, + "@turf/rhumb-destination": { + "version": "5.1.5", + "resolved": "https://registry.npm.taobao.org/@turf/rhumb-destination/download/@turf/rhumb-destination-5.1.5.tgz", + "integrity": "sha1-sbKuuSFUfyrAwamUtqEw+SRjx0I=", + "requires": { + "@turf/helpers": "^5.1.5", + "@turf/invariant": "^5.1.5" + } + }, + "@turf/rhumb-distance": { + "version": "5.1.5", + "resolved": "https://registry.npm.taobao.org/@turf/rhumb-distance/download/@turf/rhumb-distance-5.1.5.tgz", + "integrity": "sha1-GAaFdiX0IlOE2tQT5p85U4/192U=", + "requires": { + "@turf/helpers": "^5.1.5", + "@turf/invariant": "^5.1.5" + } + }, + "@turf/sample": { + "version": "5.1.5", + "resolved": "https://registry.npm.taobao.org/@turf/sample/download/@turf/sample-5.1.5.tgz", + "integrity": "sha1-6ctEikeJzFbuPeLdZ4HiNDQ1tBE=", + "requires": { + "@turf/helpers": "^5.1.5" + } + }, + "@turf/sector": { + "version": "5.1.5", + "resolved": "https://registry.npm.taobao.org/@turf/sector/download/@turf/sector-5.1.5.tgz", + "integrity": "sha1-rCu5TBPt1gNPb9wrZwCBNdIPXgc=", + "requires": { + "@turf/circle": "^5.1.5", + "@turf/helpers": "^5.1.5", + "@turf/invariant": "^5.1.5", + "@turf/line-arc": "^5.1.5", + "@turf/meta": "^5.1.5" + } + }, + "@turf/shortest-path": { + "version": "5.1.5", + "resolved": "https://registry.npm.taobao.org/@turf/shortest-path/download/@turf/shortest-path-5.1.5.tgz", + "integrity": "sha1-hUroCW9rw+EwD6ynfz6PZ9j5Nas=", + "requires": { + "@turf/bbox": "^5.1.5", + "@turf/bbox-polygon": "^5.1.5", + "@turf/boolean-point-in-polygon": "^5.1.5", + "@turf/clean-coords": "^5.1.5", + "@turf/distance": "^5.1.5", + "@turf/helpers": "^5.1.5", + "@turf/invariant": "^5.1.5", + "@turf/meta": "^5.1.5", + "@turf/transform-scale": "^5.1.5" + } + }, + "@turf/simplify": { + "version": "5.1.5", + "resolved": "https://registry.npm.taobao.org/@turf/simplify/download/@turf/simplify-5.1.5.tgz", + "integrity": "sha1-Csjyei60IYGD7dmZjDJ1q+QIuSY=", + "requires": { + "@turf/clean-coords": "^5.1.5", + "@turf/clone": "^5.1.5", + "@turf/helpers": "^5.1.5", + "@turf/meta": "^5.1.5" + } + }, + "@turf/square": { + "version": "5.1.5", + "resolved": "https://registry.npm.taobao.org/@turf/square/download/@turf/square-5.1.5.tgz", + "integrity": "sha1-qnsh5gM8ySUsOlvW89iNq9b+0YA=", + "requires": { + "@turf/distance": "^5.1.5", + "@turf/helpers": "^5.1.5" + } + }, + "@turf/square-grid": { + "version": "5.1.5", + "resolved": "https://registry.npm.taobao.org/@turf/square-grid/download/@turf/square-grid-5.1.5.tgz", + "integrity": "sha1-G9X3uesU8LYLwjH+/nNR0aMvGlE=", + "requires": { + "@turf/boolean-contains": "^5.1.5", + "@turf/boolean-overlap": "^5.1.5", + "@turf/distance": "^5.1.5", + "@turf/helpers": "^5.1.5", + "@turf/intersect": "^5.1.5", + "@turf/invariant": "^5.1.5" + } + }, + "@turf/standard-deviational-ellipse": { + "version": "5.1.5", + "resolved": "https://registry.npm.taobao.org/@turf/standard-deviational-ellipse/download/@turf/standard-deviational-ellipse-5.1.5.tgz", + "integrity": "sha1-hc0oO14ayljyG9ZkEuQUtW2FIyQ=", + "requires": { + "@turf/center-mean": "^5.1.5", + "@turf/ellipse": "^5.1.5", + "@turf/helpers": "^5.1.5", + "@turf/invariant": "^5.1.5", + "@turf/meta": "^5.1.5", + "@turf/points-within-polygon": "^5.1.5" + } + }, + "@turf/tag": { + "version": "5.1.5", + "resolved": "https://registry.npm.taobao.org/@turf/tag/download/@turf/tag-5.1.5.tgz", + "integrity": "sha1-0e4aUIjs/UoUEQGcmCOczypJfSA=", + "requires": { + "@turf/boolean-point-in-polygon": "^5.1.5", + "@turf/clone": "^5.1.5", + "@turf/helpers": "^5.1.5", + "@turf/meta": "^5.1.5" + } + }, + "@turf/tesselate": { + "version": "5.1.5", + "resolved": "https://registry.npm.taobao.org/@turf/tesselate/download/@turf/tesselate-5.1.5.tgz", + "integrity": "sha1-MqWU6cIaAEIKn5DSxD3z4RZgYc0=", + "requires": { + "@turf/helpers": "^5.1.5", + "earcut": "^2.0.0" + } + }, + "@turf/tin": { + "version": "5.1.5", + "resolved": "https://registry.npm.taobao.org/@turf/tin/download/@turf/tin-5.1.5.tgz", + "integrity": "sha1-KCI+r8X76a6azKgc3P6l0UJMkX0=", + "requires": { + "@turf/helpers": "^5.1.5" + } + }, + "@turf/transform-rotate": { + "version": "5.1.5", + "resolved": "https://registry.npm.taobao.org/@turf/transform-rotate/download/@turf/transform-rotate-5.1.5.tgz", + "integrity": "sha1-0Jbt2eMA/jFQadVNjkWMQJIh7fs=", + "requires": { + "@turf/centroid": "^5.1.5", + "@turf/clone": "^5.1.5", + "@turf/helpers": "^5.1.5", + "@turf/invariant": "^5.1.5", + "@turf/meta": "^5.1.5", + "@turf/rhumb-bearing": "^5.1.5", + "@turf/rhumb-destination": "^5.1.5", + "@turf/rhumb-distance": "^5.1.5" + } + }, + "@turf/transform-scale": { + "version": "5.1.5", + "resolved": "https://registry.npm.taobao.org/@turf/transform-scale/download/@turf/transform-scale-5.1.5.tgz", + "integrity": "sha1-cP064BhWz3uunxWtVhzf6PiQAbk=", + "requires": { + "@turf/bbox": "^5.1.5", + "@turf/center": "^5.1.5", + "@turf/centroid": "^5.1.5", + "@turf/clone": "^5.1.5", + "@turf/helpers": "^5.1.5", + "@turf/invariant": "^5.1.5", + "@turf/meta": "^5.1.5", + "@turf/rhumb-bearing": "^5.1.5", + "@turf/rhumb-destination": "^5.1.5", + "@turf/rhumb-distance": "^5.1.5" + } + }, + "@turf/transform-translate": { + "version": "5.1.5", + "resolved": "https://registry.npm.taobao.org/@turf/transform-translate/download/@turf/transform-translate-5.1.5.tgz", + "integrity": "sha1-Uwolf7Hccmja3Ks05nkB6yo97GM=", + "requires": { + "@turf/clone": "^5.1.5", + "@turf/helpers": "^5.1.5", + "@turf/invariant": "^5.1.5", + "@turf/meta": "^5.1.5", + "@turf/rhumb-destination": "^5.1.5" + } + }, + "@turf/triangle-grid": { + "version": "5.1.5", + "resolved": "https://registry.npm.taobao.org/@turf/triangle-grid/download/@turf/triangle-grid-5.1.5.tgz", + "integrity": "sha1-ezZ2IQhVTBTyjK/zxIsc/ILI3IE=", + "requires": { + "@turf/distance": "^5.1.5", + "@turf/helpers": "^5.1.5", + "@turf/intersect": "^5.1.5", + "@turf/invariant": "^5.1.5" + } + }, + "@turf/truncate": { + "version": "5.1.5", + "resolved": "https://registry.npm.taobao.org/@turf/truncate/download/@turf/truncate-5.1.5.tgz", + "integrity": "sha1-nu37Oxi6gfLJjT6tCUMcyhiErYk=", + "requires": { + "@turf/helpers": "^5.1.5", + "@turf/meta": "^5.1.5" + } + }, + "@turf/turf": { + "version": "5.1.6", + "resolved": "https://registry.npm.taobao.org/@turf/turf/download/@turf/turf-5.1.6.tgz", + "integrity": "sha1-wxIlkoh+0jS3VGi4qMRb+Ib7+PY=", + "requires": { + "@turf/along": "5.1.x", + "@turf/area": "5.1.x", + "@turf/bbox": "5.1.x", + "@turf/bbox-clip": "5.1.x", + "@turf/bbox-polygon": "5.1.x", + "@turf/bearing": "5.1.x", + "@turf/bezier-spline": "5.1.x", + "@turf/boolean-clockwise": "5.1.x", + "@turf/boolean-contains": "5.1.x", + "@turf/boolean-crosses": "5.1.x", + "@turf/boolean-disjoint": "5.1.x", + "@turf/boolean-equal": "5.1.x", + "@turf/boolean-overlap": "5.1.x", + "@turf/boolean-parallel": "5.1.x", + "@turf/boolean-point-in-polygon": "5.1.x", + "@turf/boolean-point-on-line": "5.1.x", + "@turf/boolean-within": "5.1.x", + "@turf/buffer": "5.1.x", + "@turf/center": "5.1.x", + "@turf/center-mean": "5.1.x", + "@turf/center-median": "5.1.x", + "@turf/center-of-mass": "5.1.x", + "@turf/centroid": "5.1.x", + "@turf/circle": "5.1.x", + "@turf/clean-coords": "5.1.x", + "@turf/clone": "5.1.x", + "@turf/clusters": "5.1.x", + "@turf/clusters-dbscan": "5.1.x", + "@turf/clusters-kmeans": "5.1.x", + "@turf/collect": "5.1.x", + "@turf/combine": "5.1.x", + "@turf/concave": "5.1.x", + "@turf/convex": "5.1.x", + "@turf/destination": "5.1.x", + "@turf/difference": "5.1.x", + "@turf/dissolve": "5.1.x", + "@turf/distance": "5.1.x", + "@turf/ellipse": "5.1.x", + "@turf/envelope": "5.1.x", + "@turf/explode": "5.1.x", + "@turf/flatten": "5.1.x", + "@turf/flip": "5.1.x", + "@turf/great-circle": "5.1.x", + "@turf/helpers": "5.1.x", + "@turf/hex-grid": "5.1.x", + "@turf/interpolate": "5.1.x", + "@turf/intersect": "5.1.x", + "@turf/invariant": "5.1.x", + "@turf/isobands": "5.1.x", + "@turf/isolines": "5.1.x", + "@turf/kinks": "5.1.x", + "@turf/length": "5.1.x", + "@turf/line-arc": "5.1.x", + "@turf/line-chunk": "5.1.x", + "@turf/line-intersect": "5.1.x", + "@turf/line-offset": "5.1.x", + "@turf/line-overlap": "5.1.x", + "@turf/line-segment": "5.1.x", + "@turf/line-slice": "5.1.x", + "@turf/line-slice-along": "5.1.x", + "@turf/line-split": "5.1.x", + "@turf/line-to-polygon": "5.1.x", + "@turf/mask": "5.1.x", + "@turf/meta": "5.1.x", + "@turf/midpoint": "5.1.x", + "@turf/nearest-point": "5.1.x", + "@turf/nearest-point-on-line": "5.1.x", + "@turf/nearest-point-to-line": "5.1.x", + "@turf/planepoint": "5.1.x", + "@turf/point-grid": "5.1.x", + "@turf/point-on-feature": "5.1.x", + "@turf/point-to-line-distance": "5.1.x", + "@turf/points-within-polygon": "5.1.x", + "@turf/polygon-tangents": "5.1.x", + "@turf/polygon-to-line": "5.1.x", + "@turf/polygonize": "5.1.x", + "@turf/projection": "5.1.x", + "@turf/random": "5.1.x", + "@turf/rewind": "5.1.x", + "@turf/rhumb-bearing": "5.1.x", + "@turf/rhumb-destination": "5.1.x", + "@turf/rhumb-distance": "5.1.x", + "@turf/sample": "5.1.x", + "@turf/sector": "5.1.x", + "@turf/shortest-path": "5.1.x", + "@turf/simplify": "5.1.x", + "@turf/square": "5.1.x", + "@turf/square-grid": "5.1.x", + "@turf/standard-deviational-ellipse": "5.1.x", + "@turf/tag": "5.1.x", + "@turf/tesselate": "5.1.x", + "@turf/tin": "5.1.x", + "@turf/transform-rotate": "5.1.x", + "@turf/transform-scale": "5.1.x", + "@turf/transform-translate": "5.1.x", + "@turf/triangle-grid": "5.1.x", + "@turf/truncate": "5.1.x", + "@turf/union": "5.1.x", + "@turf/unkink-polygon": "5.1.x", + "@turf/voronoi": "5.1.x" + } + }, + "@turf/union": { + "version": "5.1.5", + "resolved": "https://registry.npm.taobao.org/@turf/union/download/@turf/union-5.1.5.tgz", + "integrity": "sha1-UyhbYJQEf8WNlqrA6pCGXsNNRUs=", + "requires": { + "@turf/helpers": "^5.1.5", + "turf-jsts": "*" + } + }, + "@turf/unkink-polygon": { + "version": "5.1.5", + "resolved": "https://registry.npm.taobao.org/@turf/unkink-polygon/download/@turf/unkink-polygon-5.1.5.tgz", + "integrity": "sha1-ewGEfFD7V0riV54Z5Ey6hSbSE8M=", + "requires": { + "@turf/area": "^5.1.5", + "@turf/boolean-point-in-polygon": "^5.1.5", + "@turf/helpers": "^5.1.5", + "@turf/meta": "^5.1.5", + "rbush": "^2.0.1" + }, + "dependencies": { + "quickselect": { + "version": "1.1.1", + "resolved": "https://registry.npm.taobao.org/quickselect/download/quickselect-1.1.1.tgz", + "integrity": "sha1-hS5BLOQY8jetW2YNcM/6xkeulMI=" + }, + "rbush": { + "version": "2.0.2", + "resolved": "https://registry.npm.taobao.org/rbush/download/rbush-2.0.2.tgz", + "integrity": "sha1-u2AFwnMbe6HVqaA1dykn0WphRgU=", + "requires": { + "quickselect": "^1.0.1" + } + } + } + }, + "@turf/voronoi": { + "version": "5.1.5", + "resolved": "https://registry.npm.taobao.org/@turf/voronoi/download/@turf/voronoi-5.1.5.tgz", + "integrity": "sha1-6FbpQG3MLyXWbdyJhYTifC6/ymY=", + "requires": { + "@turf/helpers": "^5.1.5", + "@turf/invariant": "^5.1.5", + "d3-voronoi": "1.1.2" + } + }, + "@types/bytebuffer": { + "version": "5.0.40", + "resolved": "https://registry.npm.taobao.org/@types/bytebuffer/download/@types/bytebuffer-5.0.40.tgz", + "integrity": "sha1-1vqsQNz7Cc2FbNxMAdNpC6U20+4=", + "requires": { + "@types/long": "*", + "@types/node": "*" + } + }, + "@types/cesium": { + "version": "1.65.3", + "resolved": "https://registry.npm.taobao.org/@types/cesium/download/@types/cesium-1.65.3.tgz", + "integrity": "sha1-vG0xrx67i8IAIsKtXHqnDIaNp5I=" + }, + "@types/estree": { + "version": "0.0.42", + "resolved": "https://registry.npm.taobao.org/@types/estree/download/@types/estree-0.0.42.tgz", + "integrity": "sha1-jQwfSAM57+2z5GBw4i3WPgQw3RE=", + "dev": true + }, + "@types/events": { + "version": "3.0.0", + "resolved": "https://registry.npm.taobao.org/@types/events/download/@types/events-3.0.0.tgz?cache=0&sync_timestamp=1572461527196&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Fevents%2Fdownload%2F%40types%2Fevents-3.0.0.tgz", + "integrity": "sha1-KGLz9Yqaf3w+eNefEw3U1xwlwqc=", + "dev": true + }, + "@types/glob": { + "version": "7.1.1", + "resolved": "https://registry.npm.taobao.org/@types/glob/download/@types/glob-7.1.1.tgz", + "integrity": "sha1-qlmhxuP7xCHgfM0xqUTDDrpSFXU=", + "dev": true, + "requires": { + "@types/events": "*", + "@types/minimatch": "*", + "@types/node": "*" + } + }, + "@types/jasmine": { + "version": "3.3.16", + "resolved": "https://registry.npm.taobao.org/@types/jasmine/download/@types/jasmine-3.3.16.tgz", + "integrity": "sha1-fIQHT11/hNqaFPgWzPua602hPyc=", + "dev": true + }, + "@types/jasminewd2": { + "version": "2.0.8", + "resolved": "https://registry.npm.taobao.org/@types/jasminewd2/download/@types/jasminewd2-2.0.8.tgz", + "integrity": "sha1-Z6/lCY1e8jhgc6e3OEtpqEDf6Ts=", + "dev": true, + "requires": { + "@types/jasmine": "*" + } + }, + "@types/long": { + "version": "4.0.1", + "resolved": "https://registry.npm.taobao.org/@types/long/download/@types/long-4.0.1.tgz", + "integrity": "sha1-RZxl+hhn2v5qjzIsTFFpVmPMVek=" + }, + "@types/minimatch": { + "version": "3.0.3", + "resolved": "https://registry.npm.taobao.org/@types/minimatch/download/@types/minimatch-3.0.3.tgz?cache=0&sync_timestamp=1572464707542&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Fminimatch%2Fdownload%2F%40types%2Fminimatch-3.0.3.tgz", + "integrity": "sha1-PcoOPzOyAPx9ETnAzZbBJoyt/Z0=", + "dev": true + }, + "@types/node": { + "version": "12.12.26", + "resolved": "https://registry.npm.taobao.org/@types/node/download/@types/node-12.12.26.tgz?cache=0&sync_timestamp=1580843161457&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Fnode%2Fdownload%2F%40types%2Fnode-12.12.26.tgz", + "integrity": "sha1-IT4VO6usDtFp1EptkZUB5o9Z3qk=" + }, + "@types/q": { + "version": "0.0.32", + "resolved": "https://registry.npm.taobao.org/@types/q/download/@types/q-0.0.32.tgz", + "integrity": "sha1-vShOV8hPEyXacCur/IKlMoGQwMU=", + "dev": true + }, + "@types/selenium-webdriver": { + "version": "3.0.16", + "resolved": "https://registry.npm.taobao.org/@types/selenium-webdriver/download/@types/selenium-webdriver-3.0.16.tgz?cache=0&sync_timestamp=1576496118589&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Fselenium-webdriver%2Fdownload%2F%40types%2Fselenium-webdriver-3.0.16.tgz", + "integrity": "sha1-UKR1X44z7azZxAZynpuTDSRRkCo=", + "dev": true + }, + "@types/source-list-map": { + "version": "0.1.2", + "resolved": "https://registry.npm.taobao.org/@types/source-list-map/download/@types/source-list-map-0.1.2.tgz", + "integrity": "sha1-AHiDYGP/rxdBI0m7o2QIfgrALsk=", + "dev": true + }, + "@types/swiper": { + "version": "5.3.0", + "resolved": "https://registry.npm.taobao.org/@types/swiper/download/@types/swiper-5.3.0.tgz?cache=0&sync_timestamp=1586226993478&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Fswiper%2Fdownload%2F%40types%2Fswiper-5.3.0.tgz", + "integrity": "sha1-Ga2dBDiv6krLcZAT2pgybRcQziA=" + }, + "@types/webpack-sources": { + "version": "0.1.6", + "resolved": "https://registry.npm.taobao.org/@types/webpack-sources/download/@types/webpack-sources-0.1.6.tgz", + "integrity": "sha1-PSHfwuwK0Md3WOeTYkJqm6fXy8s=", + "dev": true, + "requires": { + "@types/node": "*", + "@types/source-list-map": "*", + "source-map": "^0.6.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.6.1.tgz", + "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=", + "dev": true + } + } + }, + "@webassemblyjs/ast": { + "version": "1.8.5", + "resolved": "https://registry.npm.taobao.org/@webassemblyjs/ast/download/@webassemblyjs/ast-1.8.5.tgz", + "integrity": "sha1-UbHF/mV2o0lTv0slPfnw1JDZ41k=", + "dev": true, + "requires": { + "@webassemblyjs/helper-module-context": "1.8.5", + "@webassemblyjs/helper-wasm-bytecode": "1.8.5", + "@webassemblyjs/wast-parser": "1.8.5" + } + }, + "@webassemblyjs/floating-point-hex-parser": { + "version": "1.8.5", + "resolved": "https://registry.npm.taobao.org/@webassemblyjs/floating-point-hex-parser/download/@webassemblyjs/floating-point-hex-parser-1.8.5.tgz", + "integrity": "sha1-G6kmopI2E+3OSW/VsC6M6KX0lyE=", + "dev": true + }, + "@webassemblyjs/helper-api-error": { + "version": "1.8.5", + "resolved": "https://registry.npm.taobao.org/@webassemblyjs/helper-api-error/download/@webassemblyjs/helper-api-error-1.8.5.tgz", + "integrity": "sha1-xJ2tIvZFInxe22EL25aX8aq3Ifc=", + "dev": true + }, + "@webassemblyjs/helper-buffer": { + "version": "1.8.5", + "resolved": "https://registry.npm.taobao.org/@webassemblyjs/helper-buffer/download/@webassemblyjs/helper-buffer-1.8.5.tgz", + "integrity": "sha1-/qk+Qphj3V5DOFVfQikjhaZT8gQ=", + "dev": true + }, + "@webassemblyjs/helper-code-frame": { + "version": "1.8.5", + "resolved": "https://registry.npm.taobao.org/@webassemblyjs/helper-code-frame/download/@webassemblyjs/helper-code-frame-1.8.5.tgz", + "integrity": "sha1-mnQP9I4/qjAisd/1RCPfmqKTwl4=", + "dev": true, + "requires": { + "@webassemblyjs/wast-printer": "1.8.5" + } + }, + "@webassemblyjs/helper-fsm": { + "version": "1.8.5", + "resolved": "https://registry.npm.taobao.org/@webassemblyjs/helper-fsm/download/@webassemblyjs/helper-fsm-1.8.5.tgz", + "integrity": "sha1-ugt9Oz9+RzPaYFnJMyJ12GBwJFI=", + "dev": true + }, + "@webassemblyjs/helper-module-context": { + "version": "1.8.5", + "resolved": "https://registry.npm.taobao.org/@webassemblyjs/helper-module-context/download/@webassemblyjs/helper-module-context-1.8.5.tgz", + "integrity": "sha1-3vS5knsBAdyMu9jR7bW3ucguskU=", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.8.5", + "mamacro": "^0.0.3" + } + }, + "@webassemblyjs/helper-wasm-bytecode": { + "version": "1.8.5", + "resolved": "https://registry.npm.taobao.org/@webassemblyjs/helper-wasm-bytecode/download/@webassemblyjs/helper-wasm-bytecode-1.8.5.tgz", + "integrity": "sha1-U3p1Dt31weky83RCBlUckcG5PmE=", + "dev": true + }, + "@webassemblyjs/helper-wasm-section": { + "version": "1.8.5", + "resolved": "https://registry.npm.taobao.org/@webassemblyjs/helper-wasm-section/download/@webassemblyjs/helper-wasm-section-1.8.5.tgz", + "integrity": "sha1-dMpqa8vhnlCjtrRihH5pUD5r/L8=", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.8.5", + "@webassemblyjs/helper-buffer": "1.8.5", + "@webassemblyjs/helper-wasm-bytecode": "1.8.5", + "@webassemblyjs/wasm-gen": "1.8.5" + } + }, + "@webassemblyjs/ieee754": { + "version": "1.8.5", + "resolved": "https://registry.npm.taobao.org/@webassemblyjs/ieee754/download/@webassemblyjs/ieee754-1.8.5.tgz", + "integrity": "sha1-cSMp2+8kDza/V70ve4+5v0FUQh4=", + "dev": true, + "requires": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "@webassemblyjs/leb128": { + "version": "1.8.5", + "resolved": "https://registry.npm.taobao.org/@webassemblyjs/leb128/download/@webassemblyjs/leb128-1.8.5.tgz", + "integrity": "sha1-BE7es06mefPgTNT9mCTV41dnrhA=", + "dev": true, + "requires": { + "@xtuc/long": "4.2.2" + } + }, + "@webassemblyjs/utf8": { + "version": "1.8.5", + "resolved": "https://registry.npm.taobao.org/@webassemblyjs/utf8/download/@webassemblyjs/utf8-1.8.5.tgz", + "integrity": "sha1-qL87XY/+mGx8Hjc8y9wqCRXwztw=", + "dev": true + }, + "@webassemblyjs/wasm-edit": { + "version": "1.8.5", + "resolved": "https://registry.npm.taobao.org/@webassemblyjs/wasm-edit/download/@webassemblyjs/wasm-edit-1.8.5.tgz", + "integrity": "sha1-li2hKqWswcExyBxCMpkcgs5W4Bo=", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.8.5", + "@webassemblyjs/helper-buffer": "1.8.5", + "@webassemblyjs/helper-wasm-bytecode": "1.8.5", + "@webassemblyjs/helper-wasm-section": "1.8.5", + "@webassemblyjs/wasm-gen": "1.8.5", + "@webassemblyjs/wasm-opt": "1.8.5", + "@webassemblyjs/wasm-parser": "1.8.5", + "@webassemblyjs/wast-printer": "1.8.5" + } + }, + "@webassemblyjs/wasm-gen": { + "version": "1.8.5", + "resolved": "https://registry.npm.taobao.org/@webassemblyjs/wasm-gen/download/@webassemblyjs/wasm-gen-1.8.5.tgz", + "integrity": "sha1-VIQHZsLBAC62TtGr5yCt7XFPmLw=", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.8.5", + "@webassemblyjs/helper-wasm-bytecode": "1.8.5", + "@webassemblyjs/ieee754": "1.8.5", + "@webassemblyjs/leb128": "1.8.5", + "@webassemblyjs/utf8": "1.8.5" + } + }, + "@webassemblyjs/wasm-opt": { + "version": "1.8.5", + "resolved": "https://registry.npm.taobao.org/@webassemblyjs/wasm-opt/download/@webassemblyjs/wasm-opt-1.8.5.tgz", + "integrity": "sha1-sk2fa6UDlK8TSfUQr6j/y4pj0mQ=", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.8.5", + "@webassemblyjs/helper-buffer": "1.8.5", + "@webassemblyjs/wasm-gen": "1.8.5", + "@webassemblyjs/wasm-parser": "1.8.5" + } + }, + "@webassemblyjs/wasm-parser": { + "version": "1.8.5", + "resolved": "https://registry.npm.taobao.org/@webassemblyjs/wasm-parser/download/@webassemblyjs/wasm-parser-1.8.5.tgz", + "integrity": "sha1-IVdvDsiLkUJzV7hTY4NmjvfGa40=", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.8.5", + "@webassemblyjs/helper-api-error": "1.8.5", + "@webassemblyjs/helper-wasm-bytecode": "1.8.5", + "@webassemblyjs/ieee754": "1.8.5", + "@webassemblyjs/leb128": "1.8.5", + "@webassemblyjs/utf8": "1.8.5" + } + }, + "@webassemblyjs/wast-parser": { + "version": "1.8.5", + "resolved": "https://registry.npm.taobao.org/@webassemblyjs/wast-parser/download/@webassemblyjs/wast-parser-1.8.5.tgz", + "integrity": "sha1-4Q7s1ULQ5705T2gnxJ899tTu+4w=", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.8.5", + "@webassemblyjs/floating-point-hex-parser": "1.8.5", + "@webassemblyjs/helper-api-error": "1.8.5", + "@webassemblyjs/helper-code-frame": "1.8.5", + "@webassemblyjs/helper-fsm": "1.8.5", + "@xtuc/long": "4.2.2" + } + }, + "@webassemblyjs/wast-printer": { + "version": "1.8.5", + "resolved": "https://registry.npm.taobao.org/@webassemblyjs/wast-printer/download/@webassemblyjs/wast-printer-1.8.5.tgz", + "integrity": "sha1-EUu8SB/RDKDiOzVg+oEnSLC65bw=", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.8.5", + "@webassemblyjs/wast-parser": "1.8.5", + "@xtuc/long": "4.2.2" + } + }, + "@xtuc/ieee754": { + "version": "1.2.0", + "resolved": "https://registry.npm.taobao.org/@xtuc/ieee754/download/@xtuc/ieee754-1.2.0.tgz", + "integrity": "sha1-7vAUoxRa5Hehy8AM0eVSM23Ot5A=", + "dev": true + }, + "@xtuc/long": { + "version": "4.2.2", + "resolved": "https://registry.npm.taobao.org/@xtuc/long/download/@xtuc/long-4.2.2.tgz", + "integrity": "sha1-0pHGpOl5ibXGHZrPOWrk/hM6cY0=", + "dev": true + }, + "@yarnpkg/lockfile": { + "version": "1.1.0", + "resolved": "https://registry.npm.taobao.org/@yarnpkg/lockfile/download/@yarnpkg/lockfile-1.1.0.tgz", + "integrity": "sha1-53qX+9NFt22DJF7c0X05OxtB+zE=", + "dev": true + }, + "JSONStream": { + "version": "1.3.5", + "resolved": "https://registry.npm.taobao.org/JSONStream/download/JSONStream-1.3.5.tgz", + "integrity": "sha1-MgjB8I06TZkmGrZPkjArwV4RHKA=", + "dev": true, + "requires": { + "jsonparse": "^1.2.0", + "through": ">=2.2.7 <3" + } + }, + "accepts": { + "version": "1.3.7", + "resolved": "https://registry.npm.taobao.org/accepts/download/accepts-1.3.7.tgz", + "integrity": "sha1-UxvHJlF6OytB+FACHGzBXqq1B80=", + "dev": true, + "requires": { + "mime-types": "~2.1.24", + "negotiator": "0.6.2" + } + }, + "acorn": { + "version": "7.1.0", + "resolved": "https://registry.npm.taobao.org/acorn/download/acorn-7.1.0.tgz?cache=0&sync_timestamp=1574807785634&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Facorn%2Fdownload%2Facorn-7.1.0.tgz", + "integrity": "sha1-lJ028sKSU12mAig1hsJHfFfrLWw=", + "dev": true + }, + "adm-zip": { + "version": "0.4.13", + "resolved": "https://registry.npm.taobao.org/adm-zip/download/adm-zip-0.4.13.tgz", + "integrity": "sha1-WX4vjMNnIVHhMH0+lc3bx1ZyMUo=", + "dev": true + }, + "after": { + "version": "0.8.2", + "resolved": "https://registry.npm.taobao.org/after/download/after-0.8.2.tgz", + "integrity": "sha1-/ts5T58OAqqXaOcCvaI7UF+ufh8=", + "dev": true + }, + "agent-base": { + "version": "4.3.0", + "resolved": "https://registry.npm.taobao.org/agent-base/download/agent-base-4.3.0.tgz", + "integrity": "sha1-gWXwHENgCbzK0LHRIvBe13Dvxu4=", + "dev": true, + "requires": { + "es6-promisify": "^5.0.0" + } + }, + "agentkeepalive": { + "version": "3.5.2", + "resolved": "https://registry.npm.taobao.org/agentkeepalive/download/agentkeepalive-3.5.2.tgz", + "integrity": "sha1-oROSTdP6JKC8O3gQjEUMKr7gD2c=", + "dev": true, + "requires": { + "humanize-ms": "^1.2.1" + } + }, + "aggregate-error": { + "version": "3.0.1", + "resolved": "https://registry.npm.taobao.org/aggregate-error/download/aggregate-error-3.0.1.tgz?cache=0&sync_timestamp=1570168672550&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Faggregate-error%2Fdownload%2Faggregate-error-3.0.1.tgz", + "integrity": "sha1-2y/nJG5Tb0DZtUQqOeEX191qJOA=", + "dev": true, + "requires": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + } + }, + "ajv": { + "version": "6.10.2", + "resolved": "https://registry.npm.taobao.org/ajv/download/ajv-6.10.2.tgz", + "integrity": "sha1-086gTWsBeyiUrWkED+yLYj60vVI=", + "dev": true, + "requires": { + "fast-deep-equal": "^2.0.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "ajv-errors": { + "version": "1.0.1", + "resolved": "https://registry.npm.taobao.org/ajv-errors/download/ajv-errors-1.0.1.tgz", + "integrity": "sha1-81mGrOuRr63sQQL72FAUlQzvpk0=", + "dev": true + }, + "ajv-keywords": { + "version": "3.4.1", + "resolved": "https://registry.npm.taobao.org/ajv-keywords/download/ajv-keywords-3.4.1.tgz", + "integrity": "sha1-75FuJxxkrBIXH9g4TqrmsjRYVNo=", + "dev": true + }, + "alphanum-sort": { + "version": "1.0.2", + "resolved": "https://registry.npm.taobao.org/alphanum-sort/download/alphanum-sort-1.0.2.tgz", + "integrity": "sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM=", + "dev": true + }, + "angular-calendar": { + "version": "0.28.2", + "resolved": "https://registry.npm.taobao.org/angular-calendar/download/angular-calendar-0.28.2.tgz", + "integrity": "sha1-x/xtKUZcJc1vGxrRRN7FK3tigpM=", + "requires": { + "angular-draggable-droppable": "^4.3.8", + "angular-resizable-element": "^3.2.6", + "calendar-utils": "^0.7.0", + "positioning": "^2.0.0", + "tslib": "^1.9.0" + } + }, + "angular-draggable-droppable": { + "version": "4.3.8", + "resolved": "https://registry.npm.taobao.org/angular-draggable-droppable/download/angular-draggable-droppable-4.3.8.tgz", + "integrity": "sha1-+xOjWAFUeBUr0GbHCZ3QDTIBmB8=", + "requires": { + "dom-autoscroller": "^2.3.4", + "tslib": "^1.9.0" + } + }, + "angular-resizable-element": { + "version": "3.3.0", + "resolved": "https://registry.npm.taobao.org/angular-resizable-element/download/angular-resizable-element-3.3.0.tgz", + "integrity": "sha1-eSf3LtK3gpYeGDe5palWaSStIBM=", + "requires": { + "tslib": "^1.9.0" + } + }, + "animation-frame-polyfill": { + "version": "1.0.1", + "resolved": "https://registry.npm.taobao.org/animation-frame-polyfill/download/animation-frame-polyfill-1.0.1.tgz", + "integrity": "sha1-X1rZk6eHlL0Xas3lttzmKGdBDJ0=" + }, + "ansi-colors": { + "version": "3.2.4", + "resolved": "https://registry.npm.taobao.org/ansi-colors/download/ansi-colors-3.2.4.tgz", + "integrity": "sha1-46PaS/uubIapwoViXeEkojQCb78=", + "dev": true + }, + "ansi-escapes": { + "version": "4.3.0", + "resolved": "https://registry.npm.taobao.org/ansi-escapes/download/ansi-escapes-4.3.0.tgz", + "integrity": "sha1-pM4rM9ayFLeVDYWVwhLxKsnMVp0=", + "dev": true, + "requires": { + "type-fest": "^0.8.1" + } + }, + "ansi-html": { + "version": "0.0.7", + "resolved": "https://registry.npm.taobao.org/ansi-html/download/ansi-html-0.0.7.tgz", + "integrity": "sha1-gTWEAhliqenm/QOflA0S9WynhZ4=", + "dev": true + }, + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npm.taobao.org/ansi-regex/download/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npm.taobao.org/ansi-styles/download/ansi-styles-3.2.1.tgz", + "integrity": "sha1-QfuyAkPlCxK+DwS43tvwdSDOhB0=", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "anymatch": { + "version": "3.1.1", + "resolved": "https://registry.npm.taobao.org/anymatch/download/anymatch-3.1.1.tgz", + "integrity": "sha1-xV7PAhheJGklk5kxDBc84xIzsUI=", + "dev": true, + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + }, + "app-root-path": { + "version": "2.2.1", + "resolved": "https://registry.npm.taobao.org/app-root-path/download/app-root-path-2.2.1.tgz?cache=0&sync_timestamp=1572535971842&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fapp-root-path%2Fdownload%2Fapp-root-path-2.2.1.tgz", + "integrity": "sha1-0N9KaC7kCCc1g9Q/b3npiSYkvJo=", + "dev": true + }, + "append-transform": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/append-transform/download/append-transform-1.0.0.tgz?cache=0&sync_timestamp=1568135722905&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fappend-transform%2Fdownload%2Fappend-transform-1.0.0.tgz", + "integrity": "sha1-BGpSrlgqIovXL1is++KWfGeHWas=", + "dev": true, + "requires": { + "default-require-extensions": "^2.0.0" + } + }, + "aproba": { + "version": "1.2.0", + "resolved": "https://registry.npm.taobao.org/aproba/download/aproba-1.2.0.tgz", + "integrity": "sha1-aALmJk79GMeQobDVF/DyYnvyyUo=", + "dev": true + }, + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npm.taobao.org/argparse/download/argparse-1.0.10.tgz", + "integrity": "sha1-vNZ5HqWuCXJeF+WtmIE0zUCz2RE=", + "dev": true, + "requires": { + "sprintf-js": "~1.0.2" + } + }, + "aria-query": { + "version": "3.0.0", + "resolved": "https://registry.npm.taobao.org/aria-query/download/aria-query-3.0.0.tgz", + "integrity": "sha1-ZbP8wcoRVajJrmTW7uKX8V1RM8w=", + "dev": true, + "requires": { + "ast-types-flow": "0.0.7", + "commander": "^2.11.0" + } + }, + "arr-diff": { + "version": "4.0.0", + "resolved": "https://registry.npm.taobao.org/arr-diff/download/arr-diff-4.0.0.tgz", + "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", + "dev": true + }, + "arr-flatten": { + "version": "1.1.0", + "resolved": "https://registry.npm.taobao.org/arr-flatten/download/arr-flatten-1.1.0.tgz", + "integrity": "sha1-NgSLv/TntH4TZkQxbJlmnqWukfE=", + "dev": true + }, + "arr-union": { + "version": "3.1.0", + "resolved": "https://registry.npm.taobao.org/arr-union/download/arr-union-3.1.0.tgz", + "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", + "dev": true + }, + "array-flatten": { + "version": "2.1.2", + "resolved": "https://registry.npm.taobao.org/array-flatten/download/array-flatten-2.1.2.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Farray-flatten%2Fdownload%2Farray-flatten-2.1.2.tgz", + "integrity": "sha1-JO+AoowaiTYX4hSbDG0NeIKTsJk=", + "dev": true + }, + "array-from": { + "version": "2.1.1", + "resolved": "https://registry.npm.taobao.org/array-from/download/array-from-2.1.1.tgz", + "integrity": "sha1-z+nYwmYoudxa7MYqn12PHzUsEZU=" + }, + "array-union": { + "version": "1.0.2", + "resolved": "https://registry.npm.taobao.org/array-union/download/array-union-1.0.2.tgz", + "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", + "dev": true, + "requires": { + "array-uniq": "^1.0.1" + } + }, + "array-uniq": { + "version": "1.0.3", + "resolved": "https://registry.npm.taobao.org/array-uniq/download/array-uniq-1.0.3.tgz", + "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=", + "dev": true + }, + "array-unique": { + "version": "0.3.2", + "resolved": "https://registry.npm.taobao.org/array-unique/download/array-unique-0.3.2.tgz", + "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", + "dev": true + }, + "arraybuffer.slice": { + "version": "0.0.7", + "resolved": "https://registry.npm.taobao.org/arraybuffer.slice/download/arraybuffer.slice-0.0.7.tgz", + "integrity": "sha1-O7xCdd1YTMGxCAm4nU6LY6aednU=", + "dev": true + }, + "arrify": { + "version": "1.0.1", + "resolved": "https://registry.npm.taobao.org/arrify/download/arrify-1.0.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Farrify%2Fdownload%2Farrify-1.0.1.tgz", + "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", + "dev": true + }, + "asap": { + "version": "2.0.6", + "resolved": "https://registry.npm.taobao.org/asap/download/asap-2.0.6.tgz", + "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=", + "dev": true + }, + "ascli": { + "version": "1.0.1", + "resolved": "https://registry.npm.taobao.org/ascli/download/ascli-1.0.1.tgz", + "integrity": "sha1-vPpZdKYvGOgcq660lzKrSoj5Brw=", + "requires": { + "colour": "~0.7.1", + "optjs": "~3.2.2" + } + }, + "asn1": { + "version": "0.2.4", + "resolved": "https://registry.npm.taobao.org/asn1/download/asn1-0.2.4.tgz", + "integrity": "sha1-jSR136tVO7M+d7VOWeiAu4ziMTY=", + "dev": true, + "requires": { + "safer-buffer": "~2.1.0" + } + }, + "asn1.js": { + "version": "4.10.1", + "resolved": "https://registry.npm.taobao.org/asn1.js/download/asn1.js-4.10.1.tgz", + "integrity": "sha1-ucK/WAXx5kqt7tbfOiv6+1pz9aA=", + "dev": true, + "requires": { + "bn.js": "^4.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0" + } + }, + "assert": { + "version": "1.5.0", + "resolved": "https://registry.npm.taobao.org/assert/download/assert-1.5.0.tgz", + "integrity": "sha1-VcEJqvbgrv2z3EtxJAxwv1dLGOs=", + "dev": true, + "requires": { + "object-assign": "^4.1.1", + "util": "0.10.3" + }, + "dependencies": { + "inherits": { + "version": "2.0.1", + "resolved": "https://registry.npm.taobao.org/inherits/download/inherits-2.0.1.tgz", + "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=", + "dev": true + }, + "util": { + "version": "0.10.3", + "resolved": "https://registry.npm.taobao.org/util/download/util-0.10.3.tgz", + "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", + "dev": true, + "requires": { + "inherits": "2.0.1" + } + } + } + }, + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/assert-plus/download/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "dev": true + }, + "assign-symbols": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/assign-symbols/download/assign-symbols-1.0.0.tgz", + "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", + "dev": true + }, + "ast-types-flow": { + "version": "0.0.7", + "resolved": "https://registry.npm.taobao.org/ast-types-flow/download/ast-types-flow-0.0.7.tgz", + "integrity": "sha1-9wtzXGvKGlycItmCw+Oef+ujva0=", + "dev": true + }, + "async": { + "version": "2.6.3", + "resolved": "https://registry.npm.taobao.org/async/download/async-2.6.3.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fasync%2Fdownload%2Fasync-2.6.3.tgz", + "integrity": "sha1-1yYl4jRKNlbjo61Pp0n6gymdgv8=", + "dev": true, + "requires": { + "lodash": "^4.17.14" + } + }, + "async-each": { + "version": "1.0.3", + "resolved": "https://registry.npm.taobao.org/async-each/download/async-each-1.0.3.tgz", + "integrity": "sha1-tyfb+H12UWAvBvTUrDh/R9kbDL8=", + "dev": true + }, + "async-limiter": { + "version": "1.0.1", + "resolved": "https://registry.npm.taobao.org/async-limiter/download/async-limiter-1.0.1.tgz?cache=0&sync_timestamp=1574271725892&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fasync-limiter%2Fdownload%2Fasync-limiter-1.0.1.tgz", + "integrity": "sha1-3TeelPDbgxCwgpH51kwyCXZmF/0=", + "dev": true + }, + "asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npm.taobao.org/asynckit/download/asynckit-0.4.0.tgz", + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", + "dev": true + }, + "atob": { + "version": "2.1.2", + "resolved": "https://registry.npm.taobao.org/atob/download/atob-2.1.2.tgz", + "integrity": "sha1-bZUX654DDSQ2ZmZR6GvZ9vE1M8k=", + "dev": true + }, + "autoprefixer": { + "version": "9.7.1", + "resolved": "https://registry.npm.taobao.org/autoprefixer/download/autoprefixer-9.7.1.tgz", + "integrity": "sha1-n/xExV9cqJJT2btxhs77Ae9XdH8=", + "dev": true, + "requires": { + "browserslist": "^4.7.2", + "caniuse-lite": "^1.0.30001006", + "chalk": "^2.4.2", + "normalize-range": "^0.1.2", + "num2fraction": "^1.2.2", + "postcss": "^7.0.21", + "postcss-value-parser": "^4.0.2" + } + }, + "aws-sign2": { + "version": "0.7.0", + "resolved": "https://registry.npm.taobao.org/aws-sign2/download/aws-sign2-0.7.0.tgz", + "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", + "dev": true + }, + "aws4": { + "version": "1.9.0", + "resolved": "https://registry.npm.taobao.org/aws4/download/aws4-1.9.0.tgz?cache=0&sync_timestamp=1574808901079&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Faws4%2Fdownload%2Faws4-1.9.0.tgz", + "integrity": "sha1-JDkOatYThrCnRyZXVNKhchnehiw=", + "dev": true + }, + "axobject-query": { + "version": "2.0.2", + "resolved": "https://registry.npm.taobao.org/axobject-query/download/axobject-query-2.0.2.tgz", + "integrity": "sha1-6hh6vluQArN3+SXYv30cVhrfOPk=", + "dev": true, + "requires": { + "ast-types-flow": "0.0.7" + } + }, + "babel-code-frame": { + "version": "6.26.0", + "resolved": "https://registry.npm.taobao.org/babel-code-frame/download/babel-code-frame-6.26.0.tgz", + "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=", + "dev": true, + "requires": { + "chalk": "^1.1.3", + "esutils": "^2.0.2", + "js-tokens": "^3.0.2" + }, + "dependencies": { + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npm.taobao.org/ansi-styles/download/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npm.taobao.org/chalk/download/chalk-1.1.3.tgz?cache=0&sync_timestamp=1573282918610&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fchalk%2Fdownload%2Fchalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + } + }, + "js-tokens": { + "version": "3.0.2", + "resolved": "https://registry.npm.taobao.org/js-tokens/download/js-tokens-3.0.2.tgz", + "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=", + "dev": true + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-2.0.0.tgz?cache=0&sync_timestamp=1569557271992&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "babel-loader": { + "version": "8.0.6", + "resolved": "https://registry.npm.taobao.org/babel-loader/download/babel-loader-8.0.6.tgz", + "integrity": "sha1-4zvbbzYrA/S7FBoMIauHxQG3Dfs=", + "dev": true, + "requires": { + "find-cache-dir": "^2.0.0", + "loader-utils": "^1.0.2", + "mkdirp": "^0.5.1", + "pify": "^4.0.1" + }, + "dependencies": { + "find-cache-dir": { + "version": "2.1.0", + "resolved": "https://registry.npm.taobao.org/find-cache-dir/download/find-cache-dir-2.1.0.tgz", + "integrity": "sha1-jQ+UzRP+Q8bHwmGg2GEVypGMBfc=", + "dev": true, + "requires": { + "commondir": "^1.0.1", + "make-dir": "^2.0.0", + "pkg-dir": "^3.0.0" + } + } + } + }, + "babel-plugin-dynamic-import-node": { + "version": "2.3.0", + "resolved": "https://registry.npm.taobao.org/babel-plugin-dynamic-import-node/download/babel-plugin-dynamic-import-node-2.3.0.tgz", + "integrity": "sha1-8A9Qe9qjw+P/bn5emNkKesq5b38=", + "dev": true, + "requires": { + "object.assign": "^4.1.0" + } + }, + "backo2": { + "version": "1.0.2", + "resolved": "https://registry.npm.taobao.org/backo2/download/backo2-1.0.2.tgz", + "integrity": "sha1-MasayLEpNjRj41s+u2n038+6eUc=", + "dev": true + }, + "balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/balanced-match/download/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", + "dev": true + }, + "base": { + "version": "0.11.2", + "resolved": "https://registry.npm.taobao.org/base/download/base-0.11.2.tgz", + "integrity": "sha1-e95c7RRbbVUakNuH+DxVi060io8=", + "dev": true, + "requires": { + "cache-base": "^1.0.1", + "class-utils": "^0.3.5", + "component-emitter": "^1.2.1", + "define-property": "^1.0.0", + "isobject": "^3.0.1", + "mixin-deep": "^1.2.0", + "pascalcase": "^0.1.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/define-property/download/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/is-accessor-descriptor/download/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha1-FpwvbT3x+ZJhgHI2XJsOofaHhlY=", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/is-data-descriptor/download/is-data-descriptor-1.0.0.tgz", + "integrity": "sha1-2Eh2Mh0Oet0DmQQGq7u9NrqSaMc=", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npm.taobao.org/is-descriptor/download/is-descriptor-1.0.2.tgz", + "integrity": "sha1-OxWXRqZmBLBPjIFSS6NlxfFNhuw=", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + } + } + }, + "base64-arraybuffer": { + "version": "0.1.5", + "resolved": "https://registry.npm.taobao.org/base64-arraybuffer/download/base64-arraybuffer-0.1.5.tgz", + "integrity": "sha1-c5JncZI7Whl0etZmqlzUv5xunOg=", + "dev": true + }, + "base64-js": { + "version": "1.3.1", + "resolved": "https://registry.npm.taobao.org/base64-js/download/base64-js-1.3.1.tgz", + "integrity": "sha1-WOzoy3XdB+ce0IxzarxfrE2/jfE=", + "dev": true + }, + "base64id": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/base64id/download/base64id-1.0.0.tgz", + "integrity": "sha1-R2iMuZu2gE8OBtPnY7HDLlfY5rY=", + "dev": true + }, + "batch": { + "version": "0.6.1", + "resolved": "https://registry.npm.taobao.org/batch/download/batch-0.6.1.tgz", + "integrity": "sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY=", + "dev": true + }, + "bcrypt-pbkdf": { + "version": "1.0.2", + "resolved": "https://registry.npm.taobao.org/bcrypt-pbkdf/download/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", + "dev": true, + "requires": { + "tweetnacl": "^0.14.3" + } + }, + "better-assert": { + "version": "1.0.2", + "resolved": "https://registry.npm.taobao.org/better-assert/download/better-assert-1.0.2.tgz", + "integrity": "sha1-QIZrnhueC1W0gYlDEeaPr/rrxSI=", + "dev": true, + "requires": { + "callsite": "1.0.0" + } + }, + "big.js": { + "version": "5.2.2", + "resolved": "https://registry.npm.taobao.org/big.js/download/big.js-5.2.2.tgz", + "integrity": "sha1-ZfCvOC9Xi83HQr2cKB6cstd2gyg=", + "dev": true + }, + "binary-extensions": { + "version": "2.0.0", + "resolved": "https://registry.npm.taobao.org/binary-extensions/download/binary-extensions-2.0.0.tgz", + "integrity": "sha1-I8DfFPaogHf1+YbA0WfsA8PVU3w=", + "dev": true + }, + "bindings": { + "version": "1.5.0", + "resolved": "https://registry.npm.taobao.org/bindings/download/bindings-1.5.0.tgz", + "integrity": "sha1-EDU8npRTNLwFEabZCzj7x8nFBN8=", + "dev": true, + "optional": true, + "requires": { + "file-uri-to-path": "1.0.0" + } + }, + "blob": { + "version": "0.0.5", + "resolved": "https://registry.npm.taobao.org/blob/download/blob-0.0.5.tgz", + "integrity": "sha1-1oDu7yX4zZGtUz9bAe7UjmTK9oM=", + "dev": true + }, + "blocking-proxy": { + "version": "1.0.1", + "resolved": "https://registry.npm.taobao.org/blocking-proxy/download/blocking-proxy-1.0.1.tgz", + "integrity": "sha1-gdb9H+E6TA1pV99/kbdemNrEDLI=", + "dev": true, + "requires": { + "minimist": "^1.2.0" + } + }, + "bluebird": { + "version": "3.7.2", + "resolved": "https://registry.npm.taobao.org/bluebird/download/bluebird-3.7.2.tgz", + "integrity": "sha1-nyKcFb4nJFT/qXOs4NvueaGww28=", + "dev": true + }, + "bn.js": { + "version": "4.11.8", + "resolved": "https://registry.npm.taobao.org/bn.js/download/bn.js-4.11.8.tgz", + "integrity": "sha1-LN4J617jQfSEdGuwMJsyU7GxRC8=", + "dev": true + }, + "body-parser": { + "version": "1.19.0", + "resolved": "https://registry.npm.taobao.org/body-parser/download/body-parser-1.19.0.tgz", + "integrity": "sha1-lrJwnlfJxOCab9Zqj9l5hE9p8Io=", + "dev": true, + "requires": { + "bytes": "3.1.0", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "~1.1.2", + "http-errors": "1.7.2", + "iconv-lite": "0.4.24", + "on-finished": "~2.3.0", + "qs": "6.7.0", + "raw-body": "2.4.0", + "type-is": "~1.6.17" + }, + "dependencies": { + "bytes": { + "version": "3.1.0", + "resolved": "https://registry.npm.taobao.org/bytes/download/bytes-3.1.0.tgz", + "integrity": "sha1-9s95M6Ng4FiPqf3oVlHNx/gF0fY=", + "dev": true + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npm.taobao.org/debug/download/debug-2.6.9.tgz", + "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npm.taobao.org/ms/download/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "qs": { + "version": "6.7.0", + "resolved": "https://registry.npm.taobao.org/qs/download/qs-6.7.0.tgz", + "integrity": "sha1-QdwaAV49WB8WIXdr4xr7KHapsbw=", + "dev": true + } + } + }, + "bonjour": { + "version": "3.5.0", + "resolved": "https://registry.npm.taobao.org/bonjour/download/bonjour-3.5.0.tgz", + "integrity": "sha1-jokKGD2O6aI5OzhExpGkK897yfU=", + "dev": true, + "requires": { + "array-flatten": "^2.1.0", + "deep-equal": "^1.0.1", + "dns-equal": "^1.0.0", + "dns-txt": "^2.0.2", + "multicast-dns": "^6.0.1", + "multicast-dns-service-types": "^1.1.0" + } + }, + "boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/boolbase/download/boolbase-1.0.0.tgz", + "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=", + "dev": true + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npm.taobao.org/brace-expansion/download/brace-expansion-1.1.11.tgz", + "integrity": "sha1-PH/L9SnYcibz0vUrlm/1Jx60Qd0=", + "dev": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npm.taobao.org/braces/download/braces-3.0.2.tgz", + "integrity": "sha1-NFThpGLujVmeI23zNs2epPiv4Qc=", + "dev": true, + "requires": { + "fill-range": "^7.0.1" + } + }, + "brorand": { + "version": "1.1.0", + "resolved": "https://registry.npm.taobao.org/brorand/download/brorand-1.1.0.tgz", + "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=", + "dev": true + }, + "browserify-aes": { + "version": "1.2.0", + "resolved": "https://registry.npm.taobao.org/browserify-aes/download/browserify-aes-1.2.0.tgz", + "integrity": "sha1-Mmc0ZC9APavDADIJhTu3CtQo70g=", + "dev": true, + "requires": { + "buffer-xor": "^1.0.3", + "cipher-base": "^1.0.0", + "create-hash": "^1.1.0", + "evp_bytestokey": "^1.0.3", + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "browserify-cipher": { + "version": "1.0.1", + "resolved": "https://registry.npm.taobao.org/browserify-cipher/download/browserify-cipher-1.0.1.tgz", + "integrity": "sha1-jWR0wbhwv9q807z8wZNKEOlPFfA=", + "dev": true, + "requires": { + "browserify-aes": "^1.0.4", + "browserify-des": "^1.0.0", + "evp_bytestokey": "^1.0.0" + } + }, + "browserify-des": { + "version": "1.0.2", + "resolved": "https://registry.npm.taobao.org/browserify-des/download/browserify-des-1.0.2.tgz", + "integrity": "sha1-OvTx9Zg5QDVy8cZiBDdfen9wPpw=", + "dev": true, + "requires": { + "cipher-base": "^1.0.1", + "des.js": "^1.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "browserify-rsa": { + "version": "4.0.1", + "resolved": "https://registry.npm.taobao.org/browserify-rsa/download/browserify-rsa-4.0.1.tgz", + "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=", + "dev": true, + "requires": { + "bn.js": "^4.1.0", + "randombytes": "^2.0.1" + } + }, + "browserify-sign": { + "version": "4.0.4", + "resolved": "https://registry.npm.taobao.org/browserify-sign/download/browserify-sign-4.0.4.tgz", + "integrity": "sha1-qk62jl17ZYuqa/alfmMMvXqT0pg=", + "dev": true, + "requires": { + "bn.js": "^4.1.1", + "browserify-rsa": "^4.0.0", + "create-hash": "^1.1.0", + "create-hmac": "^1.1.2", + "elliptic": "^6.0.0", + "inherits": "^2.0.1", + "parse-asn1": "^5.0.0" + } + }, + "browserify-zlib": { + "version": "0.2.0", + "resolved": "https://registry.npm.taobao.org/browserify-zlib/download/browserify-zlib-0.2.0.tgz", + "integrity": "sha1-KGlFnZqjviRf6P4sofRuLn9U1z8=", + "dev": true, + "requires": { + "pako": "~1.0.5" + } + }, + "browserslist": { + "version": "4.8.3", + "resolved": "https://registry.npm.taobao.org/browserslist/download/browserslist-4.8.3.tgz?cache=0&sync_timestamp=1580344947770&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fbrowserslist%2Fdownload%2Fbrowserslist-4.8.3.tgz", + "integrity": "sha1-ZYAvzXcXfIeOAV8OMYnyxPYnukQ=", + "dev": true, + "requires": { + "caniuse-lite": "^1.0.30001017", + "electron-to-chromium": "^1.3.322", + "node-releases": "^1.1.44" + } + }, + "browserstack": { + "version": "1.5.3", + "resolved": "https://registry.npm.taobao.org/browserstack/download/browserstack-1.5.3.tgz", + "integrity": "sha1-k6tIeZoS75nb0HTdWVQQ3bGWp6w=", + "dev": true, + "requires": { + "https-proxy-agent": "^2.2.1" + } + }, + "buffer": { + "version": "4.9.2", + "resolved": "https://registry.npm.taobao.org/buffer/download/buffer-4.9.2.tgz?cache=0&sync_timestamp=1573257749794&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fbuffer%2Fdownload%2Fbuffer-4.9.2.tgz", + "integrity": "sha1-Iw6tNEACmIZEhBqwJEr4xEu+Pvg=", + "dev": true, + "requires": { + "base64-js": "^1.0.2", + "ieee754": "^1.1.4", + "isarray": "^1.0.0" + } + }, + "buffer-alloc": { + "version": "1.2.0", + "resolved": "https://registry.npm.taobao.org/buffer-alloc/download/buffer-alloc-1.2.0.tgz", + "integrity": "sha1-iQ3ZDZI6hz4I4Q5f1RpX5bfM4Ow=", + "dev": true, + "requires": { + "buffer-alloc-unsafe": "^1.1.0", + "buffer-fill": "^1.0.0" + } + }, + "buffer-alloc-unsafe": { + "version": "1.1.0", + "resolved": "https://registry.npm.taobao.org/buffer-alloc-unsafe/download/buffer-alloc-unsafe-1.1.0.tgz", + "integrity": "sha1-vX3CauKXLQ7aJTvgYdupkjScGfA=", + "dev": true + }, + "buffer-fill": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/buffer-fill/download/buffer-fill-1.0.0.tgz", + "integrity": "sha1-+PeLdniYiO858gXNY39o5wISKyw=", + "dev": true + }, + "buffer-from": { + "version": "1.1.1", + "resolved": "https://registry.npm.taobao.org/buffer-from/download/buffer-from-1.1.1.tgz", + "integrity": "sha1-MnE7wCj3XAL9txDXx7zsHyxgcO8=", + "dev": true + }, + "buffer-indexof": { + "version": "1.1.1", + "resolved": "https://registry.npm.taobao.org/buffer-indexof/download/buffer-indexof-1.1.1.tgz", + "integrity": "sha1-Uvq8xqYG0aADAoAmSO9o9jnaJow=", + "dev": true + }, + "buffer-xor": { + "version": "1.0.3", + "resolved": "https://registry.npm.taobao.org/buffer-xor/download/buffer-xor-1.0.3.tgz", + "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=", + "dev": true + }, + "builtin-modules": { + "version": "1.1.1", + "resolved": "https://registry.npm.taobao.org/builtin-modules/download/builtin-modules-1.1.1.tgz", + "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=", + "dev": true + }, + "builtin-status-codes": { + "version": "3.0.0", + "resolved": "https://registry.npm.taobao.org/builtin-status-codes/download/builtin-status-codes-3.0.0.tgz", + "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=", + "dev": true + }, + "builtins": { + "version": "1.0.3", + "resolved": "https://registry.npm.taobao.org/builtins/download/builtins-1.0.3.tgz", + "integrity": "sha1-y5T662HIaWRR2zZTThQi+U8K7og=", + "dev": true + }, + "bytebuffer": { + "version": "5.0.1", + "resolved": "https://registry.npm.taobao.org/bytebuffer/download/bytebuffer-5.0.1.tgz", + "integrity": "sha1-WC7qSxqHO20CCkjVjfhfC7ps/d0=", + "requires": { + "long": "~3" + }, + "dependencies": { + "long": { + "version": "3.2.0", + "resolved": "https://registry.npm.taobao.org/long/download/long-3.2.0.tgz", + "integrity": "sha1-2CG3E4yhy1gcFymQ7xTbIAtcR0s=" + } + } + }, + "bytes": { + "version": "3.0.0", + "resolved": "https://registry.npm.taobao.org/bytes/download/bytes-3.0.0.tgz", + "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=", + "dev": true + }, + "cacache": { + "version": "13.0.1", + "resolved": "https://registry.npm.taobao.org/cacache/download/cacache-13.0.1.tgz?cache=0&sync_timestamp=1580176348786&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcacache%2Fdownload%2Fcacache-13.0.1.tgz", + "integrity": "sha1-qAAMIWlwiQgvhSh6GuxuOCAkpxw=", + "dev": true, + "requires": { + "chownr": "^1.1.2", + "figgy-pudding": "^3.5.1", + "fs-minipass": "^2.0.0", + "glob": "^7.1.4", + "graceful-fs": "^4.2.2", + "infer-owner": "^1.0.4", + "lru-cache": "^5.1.1", + "minipass": "^3.0.0", + "minipass-collect": "^1.0.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.2", + "mkdirp": "^0.5.1", + "move-concurrently": "^1.0.1", + "p-map": "^3.0.0", + "promise-inflight": "^1.0.1", + "rimraf": "^2.7.1", + "ssri": "^7.0.0", + "unique-filename": "^1.1.1" + } + }, + "cache-base": { + "version": "1.0.1", + "resolved": "https://registry.npm.taobao.org/cache-base/download/cache-base-1.0.1.tgz", + "integrity": "sha1-Cn9GQWgxyLZi7jb+TnxZ129marI=", + "dev": true, + "requires": { + "collection-visit": "^1.0.0", + "component-emitter": "^1.2.1", + "get-value": "^2.0.6", + "has-value": "^1.0.0", + "isobject": "^3.0.1", + "set-value": "^2.0.0", + "to-object-path": "^0.3.0", + "union-value": "^1.0.0", + "unset-value": "^1.0.0" + } + }, + "calendar-utils": { + "version": "0.7.0", + "resolved": "https://registry.npm.taobao.org/calendar-utils/download/calendar-utils-0.7.0.tgz", + "integrity": "sha1-1X5X7v6ExNl/LO2FwPxfW/eyF2g=" + }, + "caller-callsite": { + "version": "2.0.0", + "resolved": "https://registry.npm.taobao.org/caller-callsite/download/caller-callsite-2.0.0.tgz?cache=0&sync_timestamp=1562668977312&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcaller-callsite%2Fdownload%2Fcaller-callsite-2.0.0.tgz", + "integrity": "sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ=", + "dev": true, + "requires": { + "callsites": "^2.0.0" + } + }, + "caller-path": { + "version": "2.0.0", + "resolved": "https://registry.npm.taobao.org/caller-path/download/caller-path-2.0.0.tgz", + "integrity": "sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ=", + "dev": true, + "requires": { + "caller-callsite": "^2.0.0" + } + }, + "callsite": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/callsite/download/callsite-1.0.0.tgz", + "integrity": "sha1-KAOY5dZkvXQDi28JBRU+borxvCA=", + "dev": true + }, + "callsites": { + "version": "2.0.0", + "resolved": "https://registry.npm.taobao.org/callsites/download/callsites-2.0.0.tgz", + "integrity": "sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA=", + "dev": true + }, + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npm.taobao.org/camelcase/download/camelcase-5.3.1.tgz", + "integrity": "sha1-48mzFWnhBoEd8kL3FXJaH0xJQyA=", + "dev": true + }, + "caniuse-api": { + "version": "3.0.0", + "resolved": "https://registry.npm.taobao.org/caniuse-api/download/caniuse-api-3.0.0.tgz", + "integrity": "sha1-Xk2Q4idJYdRikZl99Znj7QCO5MA=", + "dev": true, + "requires": { + "browserslist": "^4.0.0", + "caniuse-lite": "^1.0.0", + "lodash.memoize": "^4.1.2", + "lodash.uniq": "^4.5.0" + } + }, + "caniuse-lite": { + "version": "1.0.30001020", + "resolved": "https://registry.npm.taobao.org/caniuse-lite/download/caniuse-lite-1.0.30001020.tgz", + "integrity": "sha1-PwTBc3UA/9p4vpvrC1weIHDhWSY=", + "dev": true + }, + "canonical-path": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/canonical-path/download/canonical-path-1.0.0.tgz", + "integrity": "sha1-/LRwwjlY3vhQgYVr56hukE8YDR0=", + "dev": true + }, + "caseless": { + "version": "0.12.0", + "resolved": "https://registry.npm.taobao.org/caseless/download/caseless-0.12.0.tgz", + "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", + "dev": true + }, + "cesium": { + "version": "1.66.0", + "resolved": "https://registry.npm.taobao.org/cesium/download/cesium-1.66.0.tgz", + "integrity": "sha1-rIqYWDKXQOsiMEk2B26m+Ob6rYI=", + "requires": { + "esm": "^3.2.25" + } + }, + "cesium-typings": { + "version": "1.50.2", + "resolved": "https://registry.npm.taobao.org/cesium-typings/download/cesium-typings-1.50.2.tgz", + "integrity": "sha1-/Osooxu2SGDHIRFTP/Df/d3S8Zc=" + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npm.taobao.org/chalk/download/chalk-2.4.2.tgz?cache=0&sync_timestamp=1573282918610&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fchalk%2Fdownload%2Fchalk-2.4.2.tgz", + "integrity": "sha1-zUJUFnelQzPPVBpJEIwUMrRMlCQ=", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "chardet": { + "version": "0.7.0", + "resolved": "https://registry.npm.taobao.org/chardet/download/chardet-0.7.0.tgz", + "integrity": "sha1-kAlISfCTfy7twkJdDSip5fDLrZ4=", + "dev": true + }, + "chokidar": { + "version": "3.3.1", + "resolved": "https://registry.npm.taobao.org/chokidar/download/chokidar-3.3.1.tgz", + "integrity": "sha1-yE5bPRjZpNd1WP70ZrG/FrvrNFA=", + "dev": true, + "requires": { + "anymatch": "~3.1.1", + "braces": "~3.0.2", + "fsevents": "~2.1.2", + "glob-parent": "~5.1.0", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.3.0" + }, + "dependencies": { + "glob-parent": { + "version": "5.1.0", + "resolved": "https://registry.npm.taobao.org/glob-parent/download/glob-parent-5.1.0.tgz?cache=0&sync_timestamp=1569136652060&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fglob-parent%2Fdownload%2Fglob-parent-5.1.0.tgz", + "integrity": "sha1-X0wdHnSNMM1zrSlEs1d6gbCB6MI=", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + } + } + }, + "chownr": { + "version": "1.1.3", + "resolved": "https://registry.npm.taobao.org/chownr/download/chownr-1.1.3.tgz", + "integrity": "sha1-Qtg31SOWiNVfMDADpQgjD6ZycUI=", + "dev": true + }, + "chrome-trace-event": { + "version": "1.0.2", + "resolved": "https://registry.npm.taobao.org/chrome-trace-event/download/chrome-trace-event-1.0.2.tgz", + "integrity": "sha1-I0CQ7pfH1K0aLEvq4nUF3v/GCKQ=", + "dev": true, + "requires": { + "tslib": "^1.9.0" + } + }, + "cipher-base": { + "version": "1.0.4", + "resolved": "https://registry.npm.taobao.org/cipher-base/download/cipher-base-1.0.4.tgz", + "integrity": "sha1-h2Dk7MJy9MNjUy+SbYdKriwTl94=", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "circular-dependency-plugin": { + "version": "5.2.0", + "resolved": "https://registry.npm.taobao.org/circular-dependency-plugin/download/circular-dependency-plugin-5.2.0.tgz", + "integrity": "sha1-4J28LdPikoRCQD4tRbQc6ga8CpM=", + "dev": true + }, + "class-utils": { + "version": "0.3.6", + "resolved": "https://registry.npm.taobao.org/class-utils/download/class-utils-0.3.6.tgz", + "integrity": "sha1-+TNprouafOAv1B+q0MqDAzGQxGM=", + "dev": true, + "requires": { + "arr-union": "^3.1.0", + "define-property": "^0.2.5", + "isobject": "^3.0.0", + "static-extend": "^0.1.1" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npm.taobao.org/define-property/download/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + } + } + }, + "clean-stack": { + "version": "2.2.0", + "resolved": "https://registry.npm.taobao.org/clean-stack/download/clean-stack-2.2.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fclean-stack%2Fdownload%2Fclean-stack-2.2.0.tgz", + "integrity": "sha1-7oRy27Ep5yezHooQpCfe6d/kAIs=", + "dev": true + }, + "cli-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npm.taobao.org/cli-cursor/download/cli-cursor-3.1.0.tgz", + "integrity": "sha1-JkMFp65JDR0Dvwybp8kl0XU68wc=", + "dev": true, + "requires": { + "restore-cursor": "^3.1.0" + } + }, + "cli-spinners": { + "version": "2.2.0", + "resolved": "https://registry.npm.taobao.org/cli-spinners/download/cli-spinners-2.2.0.tgz", + "integrity": "sha1-6LmI2SBsaSMC2O6DTnqFwBRNj3c=", + "dev": true + }, + "cli-width": { + "version": "2.2.0", + "resolved": "https://registry.npm.taobao.org/cli-width/download/cli-width-2.2.0.tgz", + "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=", + "dev": true + }, + "cliui": { + "version": "4.1.0", + "resolved": "https://registry.npm.taobao.org/cliui/download/cliui-4.1.0.tgz?cache=0&sync_timestamp=1573943458671&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcliui%2Fdownload%2Fcliui-4.1.0.tgz", + "integrity": "sha1-NIQi2+gtgAswIu709qwQvy5NG0k=", + "dev": true, + "requires": { + "string-width": "^2.1.1", + "strip-ansi": "^4.0.0", + "wrap-ansi": "^2.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npm.taobao.org/ansi-regex/download/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npm.taobao.org/strip-ansi/download/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "^3.0.0" + } + } + } + }, + "clone": { + "version": "2.1.2", + "resolved": "https://registry.npm.taobao.org/clone/download/clone-2.1.2.tgz", + "integrity": "sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=", + "dev": true + }, + "clone-deep": { + "version": "4.0.1", + "resolved": "https://registry.npm.taobao.org/clone-deep/download/clone-deep-4.0.1.tgz", + "integrity": "sha1-wZ/Zvbv4WUK0/ZechNz31fB8I4c=", + "dev": true, + "requires": { + "is-plain-object": "^2.0.4", + "kind-of": "^6.0.2", + "shallow-clone": "^3.0.0" + } + }, + "coa": { + "version": "2.0.2", + "resolved": "https://registry.npm.taobao.org/coa/download/coa-2.0.2.tgz", + "integrity": "sha1-Q/bCEVG07yv1cYfbDXPeIp4+fsM=", + "dev": true, + "requires": { + "@types/q": "^1.5.1", + "chalk": "^2.4.1", + "q": "^1.1.2" + }, + "dependencies": { + "@types/q": { + "version": "1.5.2", + "resolved": "https://registry.npm.taobao.org/@types/q/download/@types/q-1.5.2.tgz", + "integrity": "sha1-aQoUdbhPKohP0HzXl8APXzE1bqg=", + "dev": true + } + } + }, + "code-point-at": { + "version": "1.1.0", + "resolved": "https://registry.npm.taobao.org/code-point-at/download/code-point-at-1.1.0.tgz", + "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=" + }, + "codelyzer": { + "version": "5.2.1", + "resolved": "https://registry.npm.taobao.org/codelyzer/download/codelyzer-5.2.1.tgz", + "integrity": "sha1-RP1DHhKACfOMdhgowz66y6lUnTI=", + "dev": true, + "requires": { + "app-root-path": "^2.2.1", + "aria-query": "^3.0.0", + "axobject-query": "2.0.2", + "css-selector-tokenizer": "^0.7.1", + "cssauron": "^1.4.0", + "damerau-levenshtein": "^1.0.4", + "semver-dsl": "^1.0.1", + "source-map": "^0.5.7", + "sprintf-js": "^1.1.2" + }, + "dependencies": { + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + }, + "sprintf-js": { + "version": "1.1.2", + "resolved": "https://registry.npm.taobao.org/sprintf-js/download/sprintf-js-1.1.2.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsprintf-js%2Fdownload%2Fsprintf-js-1.1.2.tgz", + "integrity": "sha1-2hdlJiv4wPVxdJ8q1sJjACB65nM=", + "dev": true + } + } + }, + "collection-visit": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/collection-visit/download/collection-visit-1.0.0.tgz", + "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", + "dev": true, + "requires": { + "map-visit": "^1.0.0", + "object-visit": "^1.0.0" + } + }, + "color": { + "version": "3.1.2", + "resolved": "https://registry.npm.taobao.org/color/download/color-3.1.2.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcolor%2Fdownload%2Fcolor-3.1.2.tgz", + "integrity": "sha1-aBSOf4XUGtdknF+oyBBvCY0inhA=", + "dev": true, + "requires": { + "color-convert": "^1.9.1", + "color-string": "^1.5.2" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npm.taobao.org/color-convert/download/color-convert-1.9.3.tgz", + "integrity": "sha1-u3GFBpDh8TZWfeYp0tVHHe2kweg=", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npm.taobao.org/color-name/download/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "color-string": { + "version": "1.5.3", + "resolved": "https://registry.npm.taobao.org/color-string/download/color-string-1.5.3.tgz", + "integrity": "sha1-ybvF8BtYtUkvPWhXRZy2WQziBMw=", + "dev": true, + "requires": { + "color-name": "^1.0.0", + "simple-swizzle": "^0.2.2" + } + }, + "colors": { + "version": "1.1.2", + "resolved": "https://registry.npm.taobao.org/colors/download/colors-1.1.2.tgz", + "integrity": "sha1-FopHAXVran9RoSzgyXv6KMCE7WM=", + "dev": true + }, + "colour": { + "version": "0.7.1", + "resolved": "https://registry.npm.taobao.org/colour/download/colour-0.7.1.tgz", + "integrity": "sha1-nLFpkX7F0SwHNtPoaFdG3xyt93g=" + }, + "combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npm.taobao.org/combined-stream/download/combined-stream-1.0.8.tgz", + "integrity": "sha1-w9RaizT9cwYxoRCoolIGgrMdWn8=", + "dev": true, + "requires": { + "delayed-stream": "~1.0.0" + } + }, + "commander": { + "version": "2.20.3", + "resolved": "https://registry.npm.taobao.org/commander/download/commander-2.20.3.tgz", + "integrity": "sha1-/UhehMA+tIgcIHIrpIA16FMa6zM=" + }, + "commondir": { + "version": "1.0.1", + "resolved": "https://registry.npm.taobao.org/commondir/download/commondir-1.0.1.tgz", + "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", + "dev": true + }, + "compare-versions": { + "version": "3.5.1", + "resolved": "https://registry.npm.taobao.org/compare-versions/download/compare-versions-3.5.1.tgz?cache=0&sync_timestamp=1564604665649&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcompare-versions%2Fdownload%2Fcompare-versions-3.5.1.tgz", + "integrity": "sha1-JuH1zw1Ip37O1QRrn2e2thB1o5M=", + "dev": true + }, + "component-bind": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/component-bind/download/component-bind-1.0.0.tgz", + "integrity": "sha1-AMYIq33Nk4l8AAllGx06jh5zu9E=", + "dev": true + }, + "component-emitter": { + "version": "1.3.0", + "resolved": "https://registry.npm.taobao.org/component-emitter/download/component-emitter-1.3.0.tgz", + "integrity": "sha1-FuQHD7qK4ptnnyIVhT7hgasuq8A=", + "dev": true + }, + "component-inherit": { + "version": "0.0.3", + "resolved": "https://registry.npm.taobao.org/component-inherit/download/component-inherit-0.0.3.tgz", + "integrity": "sha1-ZF/ErfWLcrZJ1crmUTVhnbJv8UM=", + "dev": true + }, + "compressible": { + "version": "2.0.18", + "resolved": "https://registry.npm.taobao.org/compressible/download/compressible-2.0.18.tgz", + "integrity": "sha1-r1PMprBw1MPAdQ+9dyhqbXzEb7o=", + "dev": true, + "requires": { + "mime-db": ">= 1.43.0 < 2" + }, + "dependencies": { + "mime-db": { + "version": "1.43.0", + "resolved": "https://registry.npm.taobao.org/mime-db/download/mime-db-1.43.0.tgz", + "integrity": "sha1-ChLgUCZQ5HPXNVNQUOfI9OtPrlg=", + "dev": true + } + } + }, + "compression": { + "version": "1.7.4", + "resolved": "https://registry.npm.taobao.org/compression/download/compression-1.7.4.tgz", + "integrity": "sha1-lVI+/xcMpXwpoMpB5v4TH0Hlu48=", + "dev": true, + "requires": { + "accepts": "~1.3.5", + "bytes": "3.0.0", + "compressible": "~2.0.16", + "debug": "2.6.9", + "on-headers": "~1.0.2", + "safe-buffer": "5.1.2", + "vary": "~1.1.2" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npm.taobao.org/debug/download/debug-2.6.9.tgz", + "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npm.taobao.org/ms/download/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } + } + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npm.taobao.org/concat-map/download/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true + }, + "concat-stream": { + "version": "1.6.2", + "resolved": "https://registry.npm.taobao.org/concat-stream/download/concat-stream-1.6.2.tgz", + "integrity": "sha1-kEvfGUzTEi/Gdcd/xKw9T/D9GjQ=", + "dev": true, + "requires": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" + } + }, + "concaveman": { + "version": "1.1.1", + "resolved": "https://registry.npm.taobao.org/concaveman/download/concaveman-1.1.1.tgz", + "integrity": "sha1-bCSCWAslI874L8K+wAoEFebmgWI=", + "requires": { + "monotone-convex-hull-2d": "^1.0.1", + "point-in-polygon": "^1.0.1", + "rbush": "^2.0.1", + "robust-orientation": "^1.1.3", + "tinyqueue": "^1.1.0" + }, + "dependencies": { + "quickselect": { + "version": "1.1.1", + "resolved": "https://registry.npm.taobao.org/quickselect/download/quickselect-1.1.1.tgz", + "integrity": "sha1-hS5BLOQY8jetW2YNcM/6xkeulMI=" + }, + "rbush": { + "version": "2.0.2", + "resolved": "https://registry.npm.taobao.org/rbush/download/rbush-2.0.2.tgz", + "integrity": "sha1-u2AFwnMbe6HVqaA1dykn0WphRgU=", + "requires": { + "quickselect": "^1.0.1" + } + } + } + }, + "connect": { + "version": "3.7.0", + "resolved": "https://registry.npm.taobao.org/connect/download/connect-3.7.0.tgz", + "integrity": "sha1-XUk0iRDKpeB6AYALAw0MNfIEhPg=", + "dev": true, + "requires": { + "debug": "2.6.9", + "finalhandler": "1.1.2", + "parseurl": "~1.3.3", + "utils-merge": "1.0.1" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npm.taobao.org/debug/download/debug-2.6.9.tgz", + "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npm.taobao.org/ms/download/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } + } + }, + "connect-history-api-fallback": { + "version": "1.6.0", + "resolved": "https://registry.npm.taobao.org/connect-history-api-fallback/download/connect-history-api-fallback-1.6.0.tgz", + "integrity": "sha1-izIIk1kwjRERFdgcrT/Oq4iPl7w=", + "dev": true + }, + "console-browserify": { + "version": "1.2.0", + "resolved": "https://registry.npm.taobao.org/console-browserify/download/console-browserify-1.2.0.tgz?cache=0&sync_timestamp=1572252287978&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fconsole-browserify%2Fdownload%2Fconsole-browserify-1.2.0.tgz", + "integrity": "sha1-ZwY871fOts9Jk6KrOlWECujEkzY=", + "dev": true + }, + "constants-browserify": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/constants-browserify/download/constants-browserify-1.0.0.tgz", + "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=", + "dev": true + }, + "content-disposition": { + "version": "0.5.3", + "resolved": "https://registry.npm.taobao.org/content-disposition/download/content-disposition-0.5.3.tgz", + "integrity": "sha1-4TDK9+cnkIfFYWwgB9BIVpiYT70=", + "dev": true, + "requires": { + "safe-buffer": "5.1.2" + } + }, + "content-type": { + "version": "1.0.4", + "resolved": "https://registry.npm.taobao.org/content-type/download/content-type-1.0.4.tgz", + "integrity": "sha1-4TjMdeBAxyexlm/l5fjJruJW/js=", + "dev": true + }, + "convert-source-map": { + "version": "1.7.0", + "resolved": "https://registry.npm.taobao.org/convert-source-map/download/convert-source-map-1.7.0.tgz?cache=0&sync_timestamp=1573003862096&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fconvert-source-map%2Fdownload%2Fconvert-source-map-1.7.0.tgz", + "integrity": "sha1-F6LLiC1/d9NJBYXizmxSRCSjpEI=", + "dev": true, + "requires": { + "safe-buffer": "~5.1.1" + } + }, + "cookie": { + "version": "0.4.0", + "resolved": "https://registry.npm.taobao.org/cookie/download/cookie-0.4.0.tgz", + "integrity": "sha1-vrQ35wIrO21JAZ0IhmUwPr6cFLo=", + "dev": true + }, + "cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npm.taobao.org/cookie-signature/download/cookie-signature-1.0.6.tgz", + "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=", + "dev": true + }, + "copy-concurrently": { + "version": "1.0.5", + "resolved": "https://registry.npm.taobao.org/copy-concurrently/download/copy-concurrently-1.0.5.tgz", + "integrity": "sha1-kilzmMrjSTf8r9bsgTnBgFHwteA=", + "dev": true, + "requires": { + "aproba": "^1.1.1", + "fs-write-stream-atomic": "^1.0.8", + "iferr": "^0.1.5", + "mkdirp": "^0.5.1", + "rimraf": "^2.5.4", + "run-queue": "^1.0.0" + } + }, + "copy-descriptor": { + "version": "0.1.1", + "resolved": "https://registry.npm.taobao.org/copy-descriptor/download/copy-descriptor-0.1.1.tgz", + "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", + "dev": true + }, + "copy-webpack-plugin": { + "version": "5.1.1", + "resolved": "https://registry.npm.taobao.org/copy-webpack-plugin/download/copy-webpack-plugin-5.1.1.tgz?cache=0&sync_timestamp=1576145009360&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcopy-webpack-plugin%2Fdownload%2Fcopy-webpack-plugin-5.1.1.tgz", + "integrity": "sha1-VIGgPeoRI9iKmIxv+LeCRyFPC4g=", + "dev": true, + "requires": { + "cacache": "^12.0.3", + "find-cache-dir": "^2.1.0", + "glob-parent": "^3.1.0", + "globby": "^7.1.1", + "is-glob": "^4.0.1", + "loader-utils": "^1.2.3", + "minimatch": "^3.0.4", + "normalize-path": "^3.0.0", + "p-limit": "^2.2.1", + "schema-utils": "^1.0.0", + "serialize-javascript": "^2.1.2", + "webpack-log": "^2.0.0" + }, + "dependencies": { + "cacache": { + "version": "12.0.3", + "resolved": "https://registry.npm.taobao.org/cacache/download/cacache-12.0.3.tgz", + "integrity": "sha1-vpmruk4b9d9GHNWiwQcfxDJXM5A=", + "dev": true, + "requires": { + "bluebird": "^3.5.5", + "chownr": "^1.1.1", + "figgy-pudding": "^3.5.1", + "glob": "^7.1.4", + "graceful-fs": "^4.1.15", + "infer-owner": "^1.0.3", + "lru-cache": "^5.1.1", + "mississippi": "^3.0.0", + "mkdirp": "^0.5.1", + "move-concurrently": "^1.0.1", + "promise-inflight": "^1.0.1", + "rimraf": "^2.6.3", + "ssri": "^6.0.1", + "unique-filename": "^1.1.1", + "y18n": "^4.0.0" + } + }, + "find-cache-dir": { + "version": "2.1.0", + "resolved": "https://registry.npm.taobao.org/find-cache-dir/download/find-cache-dir-2.1.0.tgz", + "integrity": "sha1-jQ+UzRP+Q8bHwmGg2GEVypGMBfc=", + "dev": true, + "requires": { + "commondir": "^1.0.1", + "make-dir": "^2.0.0", + "pkg-dir": "^3.0.0" + } + }, + "ssri": { + "version": "6.0.1", + "resolved": "https://registry.npm.taobao.org/ssri/download/ssri-6.0.1.tgz?cache=0&sync_timestamp=1571961490394&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fssri%2Fdownload%2Fssri-6.0.1.tgz", + "integrity": "sha1-KjxBso3UW2K2Nnbst0ABJlrp7dg=", + "dev": true, + "requires": { + "figgy-pudding": "^3.5.1" + } + } + } + }, + "core-js": { + "version": "3.6.0", + "resolved": "https://registry.npm.taobao.org/core-js/download/core-js-3.6.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcore-js%2Fdownload%2Fcore-js-3.6.0.tgz", + "integrity": "sha1-K4VORR3hln0eKYlgJc3BOiUY2eo=", + "dev": true + }, + "core-js-compat": { + "version": "3.6.4", + "resolved": "https://registry.npm.taobao.org/core-js-compat/download/core-js-compat-3.6.4.tgz", + "integrity": "sha1-k4R2Vp67bNqA0zm88Zn65PFv/xc=", + "dev": true, + "requires": { + "browserslist": "^4.8.3", + "semver": "7.0.0" + }, + "dependencies": { + "semver": { + "version": "7.0.0", + "resolved": "https://registry.npm.taobao.org/semver/download/semver-7.0.0.tgz", + "integrity": "sha1-XzyjV2HkfgWyBsba/yz4FPAxa44=", + "dev": true + } + } + }, + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npm.taobao.org/core-util-is/download/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", + "dev": true + }, + "cosmiconfig": { + "version": "5.2.1", + "resolved": "https://registry.npm.taobao.org/cosmiconfig/download/cosmiconfig-5.2.1.tgz", + "integrity": "sha1-BA9yaAnFked6F8CjYmykW08Wixo=", + "dev": true, + "requires": { + "import-fresh": "^2.0.0", + "is-directory": "^0.3.1", + "js-yaml": "^3.13.1", + "parse-json": "^4.0.0" + } + }, + "coverage-istanbul-loader": { + "version": "2.0.3", + "resolved": "https://registry.npm.taobao.org/coverage-istanbul-loader/download/coverage-istanbul-loader-2.0.3.tgz", + "integrity": "sha1-h9QvA/oP0/qHQ+x2lF2dZ/EFcio=", + "dev": true, + "requires": { + "convert-source-map": "^1.7.0", + "istanbul-lib-instrument": "^4.0.0", + "loader-utils": "^1.2.3", + "merge-source-map": "^1.1.0", + "schema-utils": "^2.6.1" + }, + "dependencies": { + "schema-utils": { + "version": "2.6.4", + "resolved": "https://registry.npm.taobao.org/schema-utils/download/schema-utils-2.6.4.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fschema-utils%2Fdownload%2Fschema-utils-2.6.4.tgz", + "integrity": "sha1-on779uTnhonZGHLuPM+lfXvdD1M=", + "dev": true, + "requires": { + "ajv": "^6.10.2", + "ajv-keywords": "^3.4.1" + } + } + } + }, + "create-ecdh": { + "version": "4.0.3", + "resolved": "https://registry.npm.taobao.org/create-ecdh/download/create-ecdh-4.0.3.tgz", + "integrity": "sha1-yREbbzMEXEaX8UR4f5JUzcd8Rf8=", + "dev": true, + "requires": { + "bn.js": "^4.1.0", + "elliptic": "^6.0.0" + } + }, + "create-hash": { + "version": "1.2.0", + "resolved": "https://registry.npm.taobao.org/create-hash/download/create-hash-1.2.0.tgz", + "integrity": "sha1-iJB4rxGmN1a8+1m9IhmWvjqe8ZY=", + "dev": true, + "requires": { + "cipher-base": "^1.0.1", + "inherits": "^2.0.1", + "md5.js": "^1.3.4", + "ripemd160": "^2.0.1", + "sha.js": "^2.4.0" + } + }, + "create-hmac": { + "version": "1.1.7", + "resolved": "https://registry.npm.taobao.org/create-hmac/download/create-hmac-1.1.7.tgz", + "integrity": "sha1-aRcMeLOrlXFHsriwRXLkfq0iQ/8=", + "dev": true, + "requires": { + "cipher-base": "^1.0.3", + "create-hash": "^1.1.0", + "inherits": "^2.0.1", + "ripemd160": "^2.0.0", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + } + }, + "create-point-cb": { + "version": "1.2.0", + "resolved": "https://registry.npm.taobao.org/create-point-cb/download/create-point-cb-1.2.0.tgz", + "integrity": "sha1-G85H/E/AGFXuEhONZ2sMsqfLznE=", + "requires": { + "type-func": "^1.0.1" + } + }, + "cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npm.taobao.org/cross-spawn/download/cross-spawn-6.0.5.tgz?cache=0&sync_timestamp=1570440024132&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcross-spawn%2Fdownload%2Fcross-spawn-6.0.5.tgz", + "integrity": "sha1-Sl7Hxk364iw6FBJNus3uhG2Ay8Q=", + "dev": true, + "requires": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npm.taobao.org/semver/download/semver-5.7.1.tgz", + "integrity": "sha1-qVT5Ma66UI0we78Gnv8MAclhFvc=", + "dev": true + } + } + }, + "crypto-browserify": { + "version": "3.12.0", + "resolved": "https://registry.npm.taobao.org/crypto-browserify/download/crypto-browserify-3.12.0.tgz", + "integrity": "sha1-OWz58xN/A+S45TLFj2mCVOAPgOw=", + "dev": true, + "requires": { + "browserify-cipher": "^1.0.0", + "browserify-sign": "^4.0.0", + "create-ecdh": "^4.0.0", + "create-hash": "^1.1.0", + "create-hmac": "^1.1.0", + "diffie-hellman": "^5.0.0", + "inherits": "^2.0.1", + "pbkdf2": "^3.0.3", + "public-encrypt": "^4.0.0", + "randombytes": "^2.0.0", + "randomfill": "^1.0.3" + } + }, + "css": { + "version": "2.2.4", + "resolved": "https://registry.npm.taobao.org/css/download/css-2.2.4.tgz", + "integrity": "sha1-xkZ1XHOXHyu6amAeLPL9cbEpiSk=", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "source-map": "^0.6.1", + "source-map-resolve": "^0.5.2", + "urix": "^0.1.0" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.6.1.tgz", + "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=", + "dev": true + } + } + }, + "css-color-names": { + "version": "0.0.4", + "resolved": "https://registry.npm.taobao.org/css-color-names/download/css-color-names-0.0.4.tgz", + "integrity": "sha1-gIrcLnnPhHOAabZGyyDsJ762KeA=", + "dev": true + }, + "css-declaration-sorter": { + "version": "4.0.1", + "resolved": "https://registry.npm.taobao.org/css-declaration-sorter/download/css-declaration-sorter-4.0.1.tgz?cache=0&sync_timestamp=1581171003780&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcss-declaration-sorter%2Fdownload%2Fcss-declaration-sorter-4.0.1.tgz", + "integrity": "sha1-wZiUD2OnbX42wecQGLABchBUyyI=", + "dev": true, + "requires": { + "postcss": "^7.0.1", + "timsort": "^0.3.0" + } + }, + "css-parse": { + "version": "2.0.0", + "resolved": "https://registry.npm.taobao.org/css-parse/download/css-parse-2.0.0.tgz", + "integrity": "sha1-pGjuZnwW2BzPBcWMONKpfHgNv9Q=", + "dev": true, + "requires": { + "css": "^2.0.0" + } + }, + "css-select": { + "version": "2.1.0", + "resolved": "https://registry.npm.taobao.org/css-select/download/css-select-2.1.0.tgz", + "integrity": "sha1-ajRlM1ZjWTSoG6ymjQJVQyEF2+8=", + "dev": true, + "requires": { + "boolbase": "^1.0.0", + "css-what": "^3.2.1", + "domutils": "^1.7.0", + "nth-check": "^1.0.2" + } + }, + "css-select-base-adapter": { + "version": "0.1.1", + "resolved": "https://registry.npm.taobao.org/css-select-base-adapter/download/css-select-base-adapter-0.1.1.tgz", + "integrity": "sha1-Oy/0lyzDYquIVhUHqVQIoUMhNdc=", + "dev": true + }, + "css-selector-tokenizer": { + "version": "0.7.1", + "resolved": "https://registry.npm.taobao.org/css-selector-tokenizer/download/css-selector-tokenizer-0.7.1.tgz", + "integrity": "sha1-oXcnGovKUBkXL0+JH8bu2cv2jV0=", + "dev": true, + "requires": { + "cssesc": "^0.1.0", + "fastparse": "^1.1.1", + "regexpu-core": "^1.0.0" + }, + "dependencies": { + "jsesc": { + "version": "0.5.0", + "resolved": "https://registry.npm.taobao.org/jsesc/download/jsesc-0.5.0.tgz", + "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", + "dev": true + }, + "regexpu-core": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/regexpu-core/download/regexpu-core-1.0.0.tgz?cache=0&sync_timestamp=1568402850982&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fregexpu-core%2Fdownload%2Fregexpu-core-1.0.0.tgz", + "integrity": "sha1-hqdj9Y7k18L2sQLkdkBQ3n7ZDGs=", + "dev": true, + "requires": { + "regenerate": "^1.2.1", + "regjsgen": "^0.2.0", + "regjsparser": "^0.1.4" + } + }, + "regjsgen": { + "version": "0.2.0", + "resolved": "https://registry.npm.taobao.org/regjsgen/download/regjsgen-0.2.0.tgz", + "integrity": "sha1-bAFq3qxVT3WCP+N6wFuS1aTtsfc=", + "dev": true + }, + "regjsparser": { + "version": "0.1.5", + "resolved": "https://registry.npm.taobao.org/regjsparser/download/regjsparser-0.1.5.tgz", + "integrity": "sha1-fuj4Tcb6eS0/0K4ijSS9lJ6tIFw=", + "dev": true, + "requires": { + "jsesc": "~0.5.0" + } + } + } + }, + "css-tree": { + "version": "1.0.0-alpha.37", + "resolved": "https://registry.npm.taobao.org/css-tree/download/css-tree-1.0.0-alpha.37.tgz?cache=0&sync_timestamp=1575583542748&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcss-tree%2Fdownload%2Fcss-tree-1.0.0-alpha.37.tgz", + "integrity": "sha1-mL69YsTB2flg7DQM+fdSLjBwmiI=", + "dev": true, + "requires": { + "mdn-data": "2.0.4", + "source-map": "^0.6.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.6.1.tgz", + "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=", + "dev": true + } + } + }, + "css-unit-converter": { + "version": "1.1.1", + "resolved": "https://registry.npm.taobao.org/css-unit-converter/download/css-unit-converter-1.1.1.tgz", + "integrity": "sha1-2bkoGtz9jO2TW9urqDeGiX9k6ZY=", + "dev": true + }, + "css-what": { + "version": "3.2.1", + "resolved": "https://registry.npm.taobao.org/css-what/download/css-what-3.2.1.tgz", + "integrity": "sha1-9KjxJCEGRiG0VnVeNKA6LCLfXaE=", + "dev": true + }, + "cssauron": { + "version": "1.4.0", + "resolved": "https://registry.npm.taobao.org/cssauron/download/cssauron-1.4.0.tgz", + "integrity": "sha1-pmAt/34EqDBtwNuaVR6S6LVmKtg=", + "dev": true, + "requires": { + "through": "X.X.X" + } + }, + "cssesc": { + "version": "0.1.0", + "resolved": "https://registry.npm.taobao.org/cssesc/download/cssesc-0.1.0.tgz", + "integrity": "sha1-yBSQPkViM3GgR3tAEJqq++6t27Q=", + "dev": true + }, + "cssnano": { + "version": "4.1.10", + "resolved": "https://registry.npm.taobao.org/cssnano/download/cssnano-4.1.10.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcssnano%2Fdownload%2Fcssnano-4.1.10.tgz", + "integrity": "sha1-CsQfCxPRPUZUh+ERt3jULaYxuLI=", + "dev": true, + "requires": { + "cosmiconfig": "^5.0.0", + "cssnano-preset-default": "^4.0.7", + "is-resolvable": "^1.0.0", + "postcss": "^7.0.0" + } + }, + "cssnano-preset-default": { + "version": "4.0.7", + "resolved": "https://registry.npm.taobao.org/cssnano-preset-default/download/cssnano-preset-default-4.0.7.tgz", + "integrity": "sha1-UexmLM/KD4izltzZZ5zbkxvhf3Y=", + "dev": true, + "requires": { + "css-declaration-sorter": "^4.0.1", + "cssnano-util-raw-cache": "^4.0.1", + "postcss": "^7.0.0", + "postcss-calc": "^7.0.1", + "postcss-colormin": "^4.0.3", + "postcss-convert-values": "^4.0.1", + "postcss-discard-comments": "^4.0.2", + "postcss-discard-duplicates": "^4.0.2", + "postcss-discard-empty": "^4.0.1", + "postcss-discard-overridden": "^4.0.1", + "postcss-merge-longhand": "^4.0.11", + "postcss-merge-rules": "^4.0.3", + "postcss-minify-font-values": "^4.0.2", + "postcss-minify-gradients": "^4.0.2", + "postcss-minify-params": "^4.0.2", + "postcss-minify-selectors": "^4.0.2", + "postcss-normalize-charset": "^4.0.1", + "postcss-normalize-display-values": "^4.0.2", + "postcss-normalize-positions": "^4.0.2", + "postcss-normalize-repeat-style": "^4.0.2", + "postcss-normalize-string": "^4.0.2", + "postcss-normalize-timing-functions": "^4.0.2", + "postcss-normalize-unicode": "^4.0.1", + "postcss-normalize-url": "^4.0.1", + "postcss-normalize-whitespace": "^4.0.2", + "postcss-ordered-values": "^4.1.2", + "postcss-reduce-initial": "^4.0.3", + "postcss-reduce-transforms": "^4.0.2", + "postcss-svgo": "^4.0.2", + "postcss-unique-selectors": "^4.0.1" + } + }, + "cssnano-util-get-arguments": { + "version": "4.0.0", + "resolved": "https://registry.npm.taobao.org/cssnano-util-get-arguments/download/cssnano-util-get-arguments-4.0.0.tgz", + "integrity": "sha1-7ToIKZ8h11dBsg87gfGU7UnMFQ8=", + "dev": true + }, + "cssnano-util-get-match": { + "version": "4.0.0", + "resolved": "https://registry.npm.taobao.org/cssnano-util-get-match/download/cssnano-util-get-match-4.0.0.tgz", + "integrity": "sha1-wOTKB/U4a7F+xeUiULT1lhNlFW0=", + "dev": true + }, + "cssnano-util-raw-cache": { + "version": "4.0.1", + "resolved": "https://registry.npm.taobao.org/cssnano-util-raw-cache/download/cssnano-util-raw-cache-4.0.1.tgz", + "integrity": "sha1-sm1f1fcqEd/np4RvtMZyYPlr8oI=", + "dev": true, + "requires": { + "postcss": "^7.0.0" + } + }, + "cssnano-util-same-parent": { + "version": "4.0.1", + "resolved": "https://registry.npm.taobao.org/cssnano-util-same-parent/download/cssnano-util-same-parent-4.0.1.tgz", + "integrity": "sha1-V0CC+yhZ0ttDOFWDXZqEVuoYu/M=", + "dev": true + }, + "csso": { + "version": "4.0.2", + "resolved": "https://registry.npm.taobao.org/csso/download/csso-4.0.2.tgz", + "integrity": "sha1-5fgas6Vrju+38Aks5yeTKfRU3j0=", + "dev": true, + "requires": { + "css-tree": "1.0.0-alpha.37" + } + }, + "custom-event": { + "version": "1.0.1", + "resolved": "https://registry.npm.taobao.org/custom-event/download/custom-event-1.0.1.tgz", + "integrity": "sha1-XQKkaFCt8bSjF5RqOSj8y1v9BCU=", + "dev": true + }, + "cyclist": { + "version": "1.0.1", + "resolved": "https://registry.npm.taobao.org/cyclist/download/cyclist-1.0.1.tgz", + "integrity": "sha1-WW6WmP0MgOEgOMK4LW6xs1tiJNk=", + "dev": true + }, + "d3-array": { + "version": "1.2.4", + "resolved": "https://registry.npm.taobao.org/d3-array/download/d3-array-1.2.4.tgz", + "integrity": "sha1-Y1zk1e6nWfb2BYY9vPww7cc39x8=" + }, + "d3-geo": { + "version": "1.7.1", + "resolved": "https://registry.npm.taobao.org/d3-geo/download/d3-geo-1.7.1.tgz", + "integrity": "sha1-RLvHohix/YWfPY/XxEPKg2Vpzpk=", + "requires": { + "d3-array": "1" + } + }, + "d3-voronoi": { + "version": "1.1.2", + "resolved": "https://registry.npm.taobao.org/d3-voronoi/download/d3-voronoi-1.1.2.tgz", + "integrity": "sha1-Fodmfo8TotFYyAwUgMWinLDYlzw=" + }, + "damerau-levenshtein": { + "version": "1.0.5", + "resolved": "https://registry.npm.taobao.org/damerau-levenshtein/download/damerau-levenshtein-1.0.5.tgz", + "integrity": "sha1-eAz3FE6y6NvRw7uDrjEQDMwxpBQ=", + "dev": true + }, + "dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npm.taobao.org/dashdash/download/dashdash-1.14.1.tgz", + "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", + "dev": true, + "requires": { + "assert-plus": "^1.0.0" + } + }, + "date-fns": { + "version": "2.9.0", + "resolved": "https://registry.npm.taobao.org/date-fns/download/date-fns-2.9.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdate-fns%2Fdownload%2Fdate-fns-2.9.0.tgz", + "integrity": "sha1-0LF1pcN+1fF7l+InK7wfpa7Gd9I=" + }, + "date-format": { + "version": "2.1.0", + "resolved": "https://registry.npm.taobao.org/date-format/download/date-format-2.1.0.tgz?cache=0&sync_timestamp=1572559173297&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdate-format%2Fdownload%2Fdate-format-2.1.0.tgz", + "integrity": "sha1-MdW16iEc9f12TNOLr50DPffhJc8=", + "dev": true + }, + "debug": { + "version": "4.1.1", + "resolved": "https://registry.npm.taobao.org/debug/download/debug-4.1.1.tgz", + "integrity": "sha1-O3ImAlUQnGtYnO4FDx1RYTlmR5E=", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "debuglog": { + "version": "1.0.1", + "resolved": "https://registry.npm.taobao.org/debuglog/download/debuglog-1.0.1.tgz", + "integrity": "sha1-qiT/uaw9+aI1GDfPstJ5NgzXhJI=", + "dev": true + }, + "decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npm.taobao.org/decamelize/download/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=" + }, + "decode-uri-component": { + "version": "0.2.0", + "resolved": "https://registry.npm.taobao.org/decode-uri-component/download/decode-uri-component-0.2.0.tgz", + "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", + "dev": true + }, + "deep-equal": { + "version": "1.1.1", + "resolved": "https://registry.npm.taobao.org/deep-equal/download/deep-equal-1.1.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdeep-equal%2Fdownload%2Fdeep-equal-1.1.1.tgz", + "integrity": "sha1-tcmMlCzv+vfLBR4k4UNKJaLmB2o=", + "requires": { + "is-arguments": "^1.0.4", + "is-date-object": "^1.0.1", + "is-regex": "^1.0.4", + "object-is": "^1.0.1", + "object-keys": "^1.1.1", + "regexp.prototype.flags": "^1.2.0" + } + }, + "default-gateway": { + "version": "4.2.0", + "resolved": "https://registry.npm.taobao.org/default-gateway/download/default-gateway-4.2.0.tgz", + "integrity": "sha1-FnEEx1AMIRX23WmwpTa7jtcgVSs=", + "dev": true, + "requires": { + "execa": "^1.0.0", + "ip-regex": "^2.1.0" + } + }, + "default-require-extensions": { + "version": "2.0.0", + "resolved": "https://registry.npm.taobao.org/default-require-extensions/download/default-require-extensions-2.0.0.tgz", + "integrity": "sha1-9fj7sYp9bVCyH2QfZJ67Uiz+JPc=", + "dev": true, + "requires": { + "strip-bom": "^3.0.0" + } + }, + "defaults": { + "version": "1.0.3", + "resolved": "https://registry.npm.taobao.org/defaults/download/defaults-1.0.3.tgz", + "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=", + "dev": true, + "requires": { + "clone": "^1.0.2" + }, + "dependencies": { + "clone": { + "version": "1.0.4", + "resolved": "https://registry.npm.taobao.org/clone/download/clone-1.0.4.tgz", + "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=", + "dev": true + } + } + }, + "define-properties": { + "version": "1.1.3", + "resolved": "https://registry.npm.taobao.org/define-properties/download/define-properties-1.1.3.tgz", + "integrity": "sha1-z4jabL7ib+bbcJT2HYcMvYTO6fE=", + "requires": { + "object-keys": "^1.0.12" + } + }, + "define-property": { + "version": "2.0.2", + "resolved": "https://registry.npm.taobao.org/define-property/download/define-property-2.0.2.tgz", + "integrity": "sha1-1Flono1lS6d+AqgX+HENcCyxbp0=", + "dev": true, + "requires": { + "is-descriptor": "^1.0.2", + "isobject": "^3.0.1" + }, + "dependencies": { + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/is-accessor-descriptor/download/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha1-FpwvbT3x+ZJhgHI2XJsOofaHhlY=", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/is-data-descriptor/download/is-data-descriptor-1.0.0.tgz", + "integrity": "sha1-2Eh2Mh0Oet0DmQQGq7u9NrqSaMc=", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npm.taobao.org/is-descriptor/download/is-descriptor-1.0.2.tgz", + "integrity": "sha1-OxWXRqZmBLBPjIFSS6NlxfFNhuw=", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + } + } + }, + "del": { + "version": "4.1.1", + "resolved": "https://registry.npm.taobao.org/del/download/del-4.1.1.tgz", + "integrity": "sha1-no8RciLqRKMf86FWwEm5kFKp8LQ=", + "dev": true, + "requires": { + "@types/glob": "^7.1.1", + "globby": "^6.1.0", + "is-path-cwd": "^2.0.0", + "is-path-in-cwd": "^2.0.0", + "p-map": "^2.0.0", + "pify": "^4.0.1", + "rimraf": "^2.6.3" + }, + "dependencies": { + "globby": { + "version": "6.1.0", + "resolved": "https://registry.npm.taobao.org/globby/download/globby-6.1.0.tgz", + "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=", + "dev": true, + "requires": { + "array-union": "^1.0.1", + "glob": "^7.0.3", + "object-assign": "^4.0.1", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" + }, + "dependencies": { + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npm.taobao.org/pify/download/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + } + } + }, + "p-map": { + "version": "2.1.0", + "resolved": "https://registry.npm.taobao.org/p-map/download/p-map-2.1.0.tgz?cache=0&sync_timestamp=1563032875018&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fp-map%2Fdownload%2Fp-map-2.1.0.tgz", + "integrity": "sha1-MQko/u+cnsxltosXaTAYpmXOoXU=", + "dev": true + } + } + }, + "delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/delayed-stream/download/delayed-stream-1.0.0.tgz", + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", + "dev": true + }, + "density-clustering": { + "version": "1.3.0", + "resolved": "https://registry.npm.taobao.org/density-clustering/download/density-clustering-1.3.0.tgz", + "integrity": "sha1-3J9ZyPCrl+FiSsZJMP0xlIF9ysU=" + }, + "depd": { + "version": "1.1.2", + "resolved": "https://registry.npm.taobao.org/depd/download/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", + "dev": true + }, + "dependency-graph": { + "version": "0.7.2", + "resolved": "https://registry.npm.taobao.org/dependency-graph/download/dependency-graph-0.7.2.tgz", + "integrity": "sha1-kdud5utyaZIJ2IrqTB/VIhysHEk=", + "dev": true + }, + "des.js": { + "version": "1.0.1", + "resolved": "https://registry.npm.taobao.org/des.js/download/des.js-1.0.1.tgz", + "integrity": "sha1-U4IULhvcU/hdhtU+X0qn3rkeCEM=", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0" + } + }, + "destroy": { + "version": "1.0.4", + "resolved": "https://registry.npm.taobao.org/destroy/download/destroy-1.0.4.tgz", + "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=", + "dev": true + }, + "detect-node": { + "version": "2.0.4", + "resolved": "https://registry.npm.taobao.org/detect-node/download/detect-node-2.0.4.tgz", + "integrity": "sha1-AU7o+PZpxcWAI9pkuBecCDooxGw=", + "dev": true + }, + "dezalgo": { + "version": "1.0.3", + "resolved": "https://registry.npm.taobao.org/dezalgo/download/dezalgo-1.0.3.tgz", + "integrity": "sha1-f3Qt4Gb8dIvI24IFad3c5Jvw1FY=", + "dev": true, + "requires": { + "asap": "^2.0.0", + "wrappy": "1" + } + }, + "di": { + "version": "0.0.1", + "resolved": "https://registry.npm.taobao.org/di/download/di-0.0.1.tgz", + "integrity": "sha1-gGZJMmzqp8qjMG112YXqJ0i6kTw=", + "dev": true + }, + "diff": { + "version": "3.5.0", + "resolved": "https://registry.npm.taobao.org/diff/download/diff-3.5.0.tgz", + "integrity": "sha1-gAwN0eCov7yVg1wgKtIg/jF+WhI=", + "dev": true + }, + "diffie-hellman": { + "version": "5.0.3", + "resolved": "https://registry.npm.taobao.org/diffie-hellman/download/diffie-hellman-5.0.3.tgz", + "integrity": "sha1-QOjumPVaIUlgcUaSHGPhrl89KHU=", + "dev": true, + "requires": { + "bn.js": "^4.1.0", + "miller-rabin": "^4.0.0", + "randombytes": "^2.0.0" + } + }, + "dir-glob": { + "version": "2.2.2", + "resolved": "https://registry.npm.taobao.org/dir-glob/download/dir-glob-2.2.2.tgz", + "integrity": "sha1-+gnwaUFTyJGLGLoN6vrpR2n8UMQ=", + "dev": true, + "requires": { + "path-type": "^3.0.0" + } + }, + "dns-equal": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/dns-equal/download/dns-equal-1.0.0.tgz", + "integrity": "sha1-s55/HabrCnW6nBcySzR1PEfgZU0=", + "dev": true + }, + "dns-packet": { + "version": "1.3.1", + "resolved": "https://registry.npm.taobao.org/dns-packet/download/dns-packet-1.3.1.tgz", + "integrity": "sha1-EqpCaYEHW+UAuRDu3NC0fdfe2lo=", + "dev": true, + "requires": { + "ip": "^1.1.0", + "safe-buffer": "^5.0.1" + } + }, + "dns-txt": { + "version": "2.0.2", + "resolved": "https://registry.npm.taobao.org/dns-txt/download/dns-txt-2.0.2.tgz", + "integrity": "sha1-uR2Ab10nGI5Ks+fRB9iBocxGQrY=", + "dev": true, + "requires": { + "buffer-indexof": "^1.0.0" + } + }, + "dom-autoscroller": { + "version": "2.3.4", + "resolved": "https://registry.npm.taobao.org/dom-autoscroller/download/dom-autoscroller-2.3.4.tgz", + "integrity": "sha1-HtJcveK9878+t2KTcImyDs7xkL0=", + "requires": { + "animation-frame-polyfill": "^1.0.0", + "create-point-cb": "^1.0.0", + "dom-mousemove-dispatcher": "^1.0.1", + "dom-plane": "^1.0.1", + "dom-set": "^1.0.1", + "type-func": "^1.0.1" + } + }, + "dom-mousemove-dispatcher": { + "version": "1.0.1", + "resolved": "https://registry.npm.taobao.org/dom-mousemove-dispatcher/download/dom-mousemove-dispatcher-1.0.1.tgz", + "integrity": "sha1-okpt35Oye7NpT3IIdUalf8fpFA8=" + }, + "dom-plane": { + "version": "1.0.2", + "resolved": "https://registry.npm.taobao.org/dom-plane/download/dom-plane-1.0.2.tgz", + "integrity": "sha1-+MheaXxYfxR+j8L6wd4HjB/kFyw=", + "requires": { + "create-point-cb": "^1.0.0" + } + }, + "dom-serialize": { + "version": "2.2.1", + "resolved": "https://registry.npm.taobao.org/dom-serialize/download/dom-serialize-2.2.1.tgz", + "integrity": "sha1-ViromZ9Evl6jB29UGdzVnrQ6yVs=", + "dev": true, + "requires": { + "custom-event": "~1.0.0", + "ent": "~2.2.0", + "extend": "^3.0.0", + "void-elements": "^2.0.0" + } + }, + "dom-serializer": { + "version": "0.2.2", + "resolved": "https://registry.npm.taobao.org/dom-serializer/download/dom-serializer-0.2.2.tgz", + "integrity": "sha1-GvuB9TNxcXXUeGVd68XjMtn5u1E=", + "dev": true, + "requires": { + "domelementtype": "^2.0.1", + "entities": "^2.0.0" + }, + "dependencies": { + "domelementtype": { + "version": "2.0.1", + "resolved": "https://registry.npm.taobao.org/domelementtype/download/domelementtype-2.0.1.tgz", + "integrity": "sha1-H4vf6R9aeAYydOgDtL3O326U+U0=", + "dev": true + } + } + }, + "dom-set": { + "version": "1.1.1", + "resolved": "https://registry.npm.taobao.org/dom-set/download/dom-set-1.1.1.tgz", + "integrity": "sha1-XCxhDuSDm1IO1fmN28vjFMD6lUo=", + "requires": { + "array-from": "^2.1.1", + "is-array": "^1.0.1", + "iselement": "^1.1.4" + } + }, + "dom-storage": { + "version": "2.1.0", + "resolved": "https://registry.npm.taobao.org/dom-storage/download/dom-storage-2.1.0.tgz", + "integrity": "sha1-APuGi8kgE1fqJDx7z9MwTB406jk=" + }, + "dom7": { + "version": "2.1.3", + "resolved": "https://registry.npm.taobao.org/dom7/download/dom7-2.1.3.tgz", + "integrity": "sha1-pzb5w7+8TKA5qBzQlfl9HX894Zw=", + "requires": { + "ssr-window": "^1.0.1" + } + }, + "domain-browser": { + "version": "1.2.0", + "resolved": "https://registry.npm.taobao.org/domain-browser/download/domain-browser-1.2.0.tgz", + "integrity": "sha1-PTH1AZGmdJ3RN1p/Ui6CPULlTto=", + "dev": true + }, + "domelementtype": { + "version": "1.3.1", + "resolved": "https://registry.npm.taobao.org/domelementtype/download/domelementtype-1.3.1.tgz", + "integrity": "sha1-0EjESzew0Qp/Kj1f7j9DM9eQSB8=", + "dev": true + }, + "domutils": { + "version": "1.7.0", + "resolved": "https://registry.npm.taobao.org/domutils/download/domutils-1.7.0.tgz", + "integrity": "sha1-Vuo0HoNOBuZ0ivehyyXaZ+qfjCo=", + "dev": true, + "requires": { + "dom-serializer": "0", + "domelementtype": "1" + } + }, + "dot-prop": { + "version": "4.2.0", + "resolved": "https://registry.npm.taobao.org/dot-prop/download/dot-prop-4.2.0.tgz", + "integrity": "sha1-HxngwuGqDjJ5fEl5nyg3rGr2nFc=", + "dev": true, + "requires": { + "is-obj": "^1.0.0" + } + }, + "duplexify": { + "version": "3.7.1", + "resolved": "https://registry.npm.taobao.org/duplexify/download/duplexify-3.7.1.tgz", + "integrity": "sha1-Kk31MX9sz9kfhtb9JdjYoQO4gwk=", + "dev": true, + "requires": { + "end-of-stream": "^1.0.0", + "inherits": "^2.0.1", + "readable-stream": "^2.0.0", + "stream-shift": "^1.0.0" + } + }, + "e-ngx-cesium": { + "version": "6.3.2", + "resolved": "https://registry.npm.taobao.org/e-ngx-cesium/download/e-ngx-cesium-6.3.2.tgz", + "integrity": "sha1-IwpQcI56SjWDuIqabN65MQYMUKQ=", + "requires": { + "@turf/turf": "^5.1.5", + "cesium": "^1.50.0", + "cesium-typings": "^1.50.0", + "font-awesome": "^4.7.0", + "lodash": "^4.17.4" + } + }, + "earcut": { + "version": "2.2.2", + "resolved": "https://registry.npm.taobao.org/earcut/download/earcut-2.2.2.tgz", + "integrity": "sha1-QbC8NfY+D+gNp83f8oUR5+LoDRE=" + }, + "ecc-jsbn": { + "version": "0.1.2", + "resolved": "https://registry.npm.taobao.org/ecc-jsbn/download/ecc-jsbn-0.1.2.tgz", + "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", + "dev": true, + "requires": { + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" + } + }, + "echarts": { + "version": "4.6.0", + "resolved": "https://registry.npm.taobao.org/echarts/download/echarts-4.6.0.tgz?cache=0&sync_timestamp=1577438297540&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fecharts%2Fdownload%2Fecharts-4.6.0.tgz", + "integrity": "sha1-taR6EEbOyTzu75VPnuVHUTQFWOw=", + "requires": { + "zrender": "4.2.0" + } + }, + "ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npm.taobao.org/ee-first/download/ee-first-1.1.1.tgz", + "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=", + "dev": true + }, + "electron-to-chromium": { + "version": "1.3.346", + "resolved": "https://registry.npm.taobao.org/electron-to-chromium/download/electron-to-chromium-1.3.346.tgz", + "integrity": "sha1-sIvsv71kpCBhGVr9Okkj0EFsXUY=", + "dev": true + }, + "elliptic": { + "version": "6.5.2", + "resolved": "https://registry.npm.taobao.org/elliptic/download/elliptic-6.5.2.tgz?cache=0&sync_timestamp=1574449990666&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Felliptic%2Fdownload%2Felliptic-6.5.2.tgz", + "integrity": "sha1-BcVnjXFzwEnYykM1UiJKSV0ON2I=", + "dev": true, + "requires": { + "bn.js": "^4.4.0", + "brorand": "^1.0.1", + "hash.js": "^1.0.0", + "hmac-drbg": "^1.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.0" + } + }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npm.taobao.org/emoji-regex/download/emoji-regex-8.0.0.tgz", + "integrity": "sha1-6Bj9ac5cz8tARZT4QpY79TFkzDc=", + "dev": true + }, + "emojis-list": { + "version": "2.1.0", + "resolved": "https://registry.npm.taobao.org/emojis-list/download/emojis-list-2.1.0.tgz", + "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=", + "dev": true + }, + "encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npm.taobao.org/encodeurl/download/encodeurl-1.0.2.tgz", + "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", + "dev": true + }, + "encoding": { + "version": "0.1.12", + "resolved": "https://registry.npm.taobao.org/encoding/download/encoding-0.1.12.tgz", + "integrity": "sha1-U4tm8+5izRq1HsMjgp0flIDHS+s=", + "requires": { + "iconv-lite": "~0.4.13" + } + }, + "end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npm.taobao.org/end-of-stream/download/end-of-stream-1.4.4.tgz?cache=0&sync_timestamp=1569416272686&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fend-of-stream%2Fdownload%2Fend-of-stream-1.4.4.tgz", + "integrity": "sha1-WuZKX0UFe682JuwU2gyl5LJDHrA=", + "dev": true, + "requires": { + "once": "^1.4.0" + } + }, + "engine.io": { + "version": "3.2.1", + "resolved": "https://registry.npm.taobao.org/engine.io/download/engine.io-3.2.1.tgz?cache=0&sync_timestamp=1568404651035&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fengine.io%2Fdownload%2Fengine.io-3.2.1.tgz", + "integrity": "sha1-tgKBw1SEpw7gNR6g6/+D7IyVIqI=", + "dev": true, + "requires": { + "accepts": "~1.3.4", + "base64id": "1.0.0", + "cookie": "0.3.1", + "debug": "~3.1.0", + "engine.io-parser": "~2.1.0", + "ws": "~3.3.1" + }, + "dependencies": { + "cookie": { + "version": "0.3.1", + "resolved": "https://registry.npm.taobao.org/cookie/download/cookie-0.3.1.tgz", + "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s=", + "dev": true + }, + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npm.taobao.org/debug/download/debug-3.1.0.tgz", + "integrity": "sha1-W7WgZyYotkFJVmuhaBnmFRjGcmE=", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npm.taobao.org/ms/download/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "ws": { + "version": "3.3.3", + "resolved": "https://registry.npm.taobao.org/ws/download/ws-3.3.3.tgz", + "integrity": "sha1-8c+E/i1ekB686U767OeF8YeiKPI=", + "dev": true, + "requires": { + "async-limiter": "~1.0.0", + "safe-buffer": "~5.1.0", + "ultron": "~1.1.0" + } + } + } + }, + "engine.io-client": { + "version": "3.2.1", + "resolved": "https://registry.npm.taobao.org/engine.io-client/download/engine.io-client-3.2.1.tgz?cache=0&sync_timestamp=1568404651365&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fengine.io-client%2Fdownload%2Fengine.io-client-3.2.1.tgz", + "integrity": "sha1-b1TAR13khxWKGnx30QF4cItq3TY=", + "dev": true, + "requires": { + "component-emitter": "1.2.1", + "component-inherit": "0.0.3", + "debug": "~3.1.0", + "engine.io-parser": "~2.1.1", + "has-cors": "1.1.0", + "indexof": "0.0.1", + "parseqs": "0.0.5", + "parseuri": "0.0.5", + "ws": "~3.3.1", + "xmlhttprequest-ssl": "~1.5.4", + "yeast": "0.1.2" + }, + "dependencies": { + "component-emitter": { + "version": "1.2.1", + "resolved": "https://registry.npm.taobao.org/component-emitter/download/component-emitter-1.2.1.tgz", + "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=", + "dev": true + }, + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npm.taobao.org/debug/download/debug-3.1.0.tgz", + "integrity": "sha1-W7WgZyYotkFJVmuhaBnmFRjGcmE=", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npm.taobao.org/ms/download/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "ws": { + "version": "3.3.3", + "resolved": "https://registry.npm.taobao.org/ws/download/ws-3.3.3.tgz", + "integrity": "sha1-8c+E/i1ekB686U767OeF8YeiKPI=", + "dev": true, + "requires": { + "async-limiter": "~1.0.0", + "safe-buffer": "~5.1.0", + "ultron": "~1.1.0" + } + } + } + }, + "engine.io-parser": { + "version": "2.1.3", + "resolved": "https://registry.npm.taobao.org/engine.io-parser/download/engine.io-parser-2.1.3.tgz", + "integrity": "sha1-dXq5cPvy37Mse3SwMyFtVznveaY=", + "dev": true, + "requires": { + "after": "0.8.2", + "arraybuffer.slice": "~0.0.7", + "base64-arraybuffer": "0.1.5", + "blob": "0.0.5", + "has-binary2": "~1.0.2" + } + }, + "enhanced-resolve": { + "version": "4.1.1", + "resolved": "https://registry.npm.taobao.org/enhanced-resolve/download/enhanced-resolve-4.1.1.tgz?cache=0&sync_timestamp=1572991320122&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fenhanced-resolve%2Fdownload%2Fenhanced-resolve-4.1.1.tgz", + "integrity": "sha1-KTfiuAZs0P584JkKmPDXGjUYn2Y=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "memory-fs": "^0.5.0", + "tapable": "^1.0.0" + } + }, + "ent": { + "version": "2.2.0", + "resolved": "https://registry.npm.taobao.org/ent/download/ent-2.2.0.tgz", + "integrity": "sha1-6WQhkyWiHQX0RGai9obtbOX13R0=", + "dev": true + }, + "entities": { + "version": "2.0.0", + "resolved": "https://registry.npm.taobao.org/entities/download/entities-2.0.0.tgz", + "integrity": "sha1-aNYITKsbB5dnVA2A5Wo5tCPkq/Q=", + "dev": true + }, + "err-code": { + "version": "1.1.2", + "resolved": "https://registry.npm.taobao.org/err-code/download/err-code-1.1.2.tgz?cache=0&sync_timestamp=1563379842735&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ferr-code%2Fdownload%2Ferr-code-1.1.2.tgz", + "integrity": "sha1-BuARbTAo9q70gGhJ6w6mp0iuaWA=", + "dev": true + }, + "errno": { + "version": "0.1.7", + "resolved": "https://registry.npm.taobao.org/errno/download/errno-0.1.7.tgz", + "integrity": "sha1-RoTXF3mtOa8Xfj8AeZb3xnyFJhg=", + "dev": true, + "requires": { + "prr": "~1.0.1" + } + }, + "error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npm.taobao.org/error-ex/download/error-ex-1.3.2.tgz", + "integrity": "sha1-tKxAZIEH/c3PriQvQovqihTU8b8=", + "dev": true, + "requires": { + "is-arrayish": "^0.2.1" + } + }, + "es-abstract": { + "version": "1.17.0", + "resolved": "https://registry.npm.taobao.org/es-abstract/download/es-abstract-1.17.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fes-abstract%2Fdownload%2Fes-abstract-1.17.0.tgz", + "integrity": "sha1-9CpRfQA2pVkduyxGNZHci7UDCbE=", + "requires": { + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1", + "is-callable": "^1.1.5", + "is-regex": "^1.0.5", + "object-inspect": "^1.7.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.0", + "string.prototype.trimleft": "^2.1.1", + "string.prototype.trimright": "^2.1.1" + } + }, + "es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npm.taobao.org/es-to-primitive/download/es-to-primitive-1.2.1.tgz?cache=0&sync_timestamp=1573280885098&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fes-to-primitive%2Fdownload%2Fes-to-primitive-1.2.1.tgz", + "integrity": "sha1-5VzUyc3BiLzvsDs2bHNjI/xciYo=", + "requires": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + } + }, + "es6-promise": { + "version": "4.2.8", + "resolved": "https://registry.npm.taobao.org/es6-promise/download/es6-promise-4.2.8.tgz", + "integrity": "sha1-TrIVlMlyvEBVPSduUQU5FD21Pgo=", + "dev": true + }, + "es6-promisify": { + "version": "5.0.0", + "resolved": "https://registry.npm.taobao.org/es6-promisify/download/es6-promisify-5.0.0.tgz", + "integrity": "sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM=", + "dev": true, + "requires": { + "es6-promise": "^4.0.3" + } + }, + "escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npm.taobao.org/escape-html/download/escape-html-1.0.3.tgz", + "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=", + "dev": true + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npm.taobao.org/escape-string-regexp/download/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true + }, + "eslint-scope": { + "version": "4.0.3", + "resolved": "https://registry.npm.taobao.org/eslint-scope/download/eslint-scope-4.0.3.tgz", + "integrity": "sha1-ygODMxD2iJoyZHgaqC5j65z+eEg=", + "dev": true, + "requires": { + "esrecurse": "^4.1.0", + "estraverse": "^4.1.1" + } + }, + "esm": { + "version": "3.2.25", + "resolved": "https://registry.npm.taobao.org/esm/download/esm-3.2.25.tgz", + "integrity": "sha1-NCwYwp1WFXaIulzjH4Qx+7eVzBA=" + }, + "esprima": { + "version": "4.0.1", + "resolved": "https://registry.npm.taobao.org/esprima/download/esprima-4.0.1.tgz", + "integrity": "sha1-E7BM2z5sXRnfkatph6hpVhmwqnE=", + "dev": true + }, + "esrecurse": { + "version": "4.2.1", + "resolved": "https://registry.npm.taobao.org/esrecurse/download/esrecurse-4.2.1.tgz", + "integrity": "sha1-AHo7n9vCs7uH5IeeoZyS/b05Qs8=", + "dev": true, + "requires": { + "estraverse": "^4.1.0" + } + }, + "estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npm.taobao.org/estraverse/download/estraverse-4.3.0.tgz?cache=0&sync_timestamp=1565734335990&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Festraverse%2Fdownload%2Festraverse-4.3.0.tgz", + "integrity": "sha1-OYrT88WiSUi+dyXoPRGn3ijNvR0=", + "dev": true + }, + "esutils": { + "version": "2.0.3", + "resolved": "https://registry.npm.taobao.org/esutils/download/esutils-2.0.3.tgz", + "integrity": "sha1-dNLrTeC42hKTcRkQ1Qd1ubcQ72Q=", + "dev": true + }, + "etag": { + "version": "1.8.1", + "resolved": "https://registry.npm.taobao.org/etag/download/etag-1.8.1.tgz", + "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=", + "dev": true + }, + "eventemitter3": { + "version": "4.0.0", + "resolved": "https://registry.npm.taobao.org/eventemitter3/download/eventemitter3-4.0.0.tgz", + "integrity": "sha1-1lF2FjiH7lnzhtZMgmELaWpKdOs=", + "dev": true + }, + "events": { + "version": "3.1.0", + "resolved": "https://registry.npm.taobao.org/events/download/events-3.1.0.tgz", + "integrity": "sha1-hCea8bNMt1qoi/X/KR9tC9mzGlk=", + "dev": true + }, + "eventsource": { + "version": "1.0.7", + "resolved": "https://registry.npm.taobao.org/eventsource/download/eventsource-1.0.7.tgz", + "integrity": "sha1-j7xyyT/NNAiAkLwKTmT0tc7m2NA=", + "dev": true, + "requires": { + "original": "^1.0.0" + } + }, + "evp_bytestokey": { + "version": "1.0.3", + "resolved": "https://registry.npm.taobao.org/evp_bytestokey/download/evp_bytestokey-1.0.3.tgz", + "integrity": "sha1-f8vbGY3HGVlDLv4ThCaE4FJaywI=", + "dev": true, + "requires": { + "md5.js": "^1.3.4", + "safe-buffer": "^5.1.1" + } + }, + "execa": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/execa/download/execa-1.0.0.tgz?cache=0&sync_timestamp=1576776304100&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fexeca%2Fdownload%2Fexeca-1.0.0.tgz", + "integrity": "sha1-xiNqW7TfbW8V6I5/AXeYIWdJ3dg=", + "dev": true, + "requires": { + "cross-spawn": "^6.0.0", + "get-stream": "^4.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + } + }, + "exit": { + "version": "0.1.2", + "resolved": "https://registry.npm.taobao.org/exit/download/exit-0.1.2.tgz", + "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=", + "dev": true + }, + "expand-brackets": { + "version": "2.1.4", + "resolved": "https://registry.npm.taobao.org/expand-brackets/download/expand-brackets-2.1.4.tgz", + "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", + "dev": true, + "requires": { + "debug": "^2.3.3", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "posix-character-classes": "^0.1.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npm.taobao.org/debug/download/debug-2.6.9.tgz", + "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npm.taobao.org/define-property/download/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npm.taobao.org/extend-shallow/download/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npm.taobao.org/ms/download/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } + } + }, + "express": { + "version": "4.17.1", + "resolved": "https://registry.npm.taobao.org/express/download/express-4.17.1.tgz", + "integrity": "sha1-RJH8OGBc9R+GKdOcK10Cb5ikwTQ=", + "dev": true, + "requires": { + "accepts": "~1.3.7", + "array-flatten": "1.1.1", + "body-parser": "1.19.0", + "content-disposition": "0.5.3", + "content-type": "~1.0.4", + "cookie": "0.4.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "~1.1.2", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "~1.1.2", + "fresh": "0.5.2", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.5", + "qs": "6.7.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.1.2", + "send": "0.17.1", + "serve-static": "1.14.1", + "setprototypeof": "1.1.1", + "statuses": "~1.5.0", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "dependencies": { + "array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npm.taobao.org/array-flatten/download/array-flatten-1.1.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Farray-flatten%2Fdownload%2Farray-flatten-1.1.1.tgz", + "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=", + "dev": true + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npm.taobao.org/debug/download/debug-2.6.9.tgz", + "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npm.taobao.org/ms/download/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "qs": { + "version": "6.7.0", + "resolved": "https://registry.npm.taobao.org/qs/download/qs-6.7.0.tgz", + "integrity": "sha1-QdwaAV49WB8WIXdr4xr7KHapsbw=", + "dev": true + } + } + }, + "extend": { + "version": "3.0.2", + "resolved": "https://registry.npm.taobao.org/extend/download/extend-3.0.2.tgz", + "integrity": "sha1-+LETa0Bx+9jrFAr/hYsQGewpFfo=", + "dev": true + }, + "extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npm.taobao.org/extend-shallow/download/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "dev": true, + "requires": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + }, + "dependencies": { + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npm.taobao.org/is-extendable/download/is-extendable-1.0.1.tgz", + "integrity": "sha1-p0cPnkJnM9gb2B4RVSZOOjUHyrQ=", + "dev": true, + "requires": { + "is-plain-object": "^2.0.4" + } + } + } + }, + "external-editor": { + "version": "3.1.0", + "resolved": "https://registry.npm.taobao.org/external-editor/download/external-editor-3.1.0.tgz", + "integrity": "sha1-ywP3QL764D6k0oPK7SdBqD8zVJU=", + "dev": true, + "requires": { + "chardet": "^0.7.0", + "iconv-lite": "^0.4.24", + "tmp": "^0.0.33" + } + }, + "extglob": { + "version": "2.0.4", + "resolved": "https://registry.npm.taobao.org/extglob/download/extglob-2.0.4.tgz", + "integrity": "sha1-rQD+TcYSqSMuhxhxHcXLWrAoVUM=", + "dev": true, + "requires": { + "array-unique": "^0.3.2", + "define-property": "^1.0.0", + "expand-brackets": "^2.1.4", + "extend-shallow": "^2.0.1", + "fragment-cache": "^0.2.1", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/define-property/download/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npm.taobao.org/extend-shallow/download/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/is-accessor-descriptor/download/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha1-FpwvbT3x+ZJhgHI2XJsOofaHhlY=", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/is-data-descriptor/download/is-data-descriptor-1.0.0.tgz", + "integrity": "sha1-2Eh2Mh0Oet0DmQQGq7u9NrqSaMc=", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npm.taobao.org/is-descriptor/download/is-descriptor-1.0.2.tgz", + "integrity": "sha1-OxWXRqZmBLBPjIFSS6NlxfFNhuw=", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + } + } + }, + "extsprintf": { + "version": "1.3.0", + "resolved": "https://registry.npm.taobao.org/extsprintf/download/extsprintf-1.3.0.tgz", + "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", + "dev": true + }, + "fast-deep-equal": { + "version": "2.0.1", + "resolved": "https://registry.npm.taobao.org/fast-deep-equal/download/fast-deep-equal-2.0.1.tgz", + "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=", + "dev": true + }, + "fast-json-stable-stringify": { + "version": "2.0.0", + "resolved": "https://registry.npm.taobao.org/fast-json-stable-stringify/download/fast-json-stable-stringify-2.0.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffast-json-stable-stringify%2Fdownload%2Ffast-json-stable-stringify-2.0.0.tgz", + "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=", + "dev": true + }, + "fastparse": { + "version": "1.1.2", + "resolved": "https://registry.npm.taobao.org/fastparse/download/fastparse-1.1.2.tgz", + "integrity": "sha1-kXKMWllC7O2FMSg8eUQe5BIsNak=", + "dev": true + }, + "faye-websocket": { + "version": "0.10.0", + "resolved": "https://registry.npm.taobao.org/faye-websocket/download/faye-websocket-0.10.0.tgz", + "integrity": "sha1-TkkvjQTftviQA1B/btvy1QHnxvQ=", + "dev": true, + "requires": { + "websocket-driver": ">=0.5.1" + } + }, + "figgy-pudding": { + "version": "3.5.1", + "resolved": "https://registry.npm.taobao.org/figgy-pudding/download/figgy-pudding-3.5.1.tgz", + "integrity": "sha1-hiRwESkBxyeg5JWoB0S9W6odZ5A=", + "dev": true + }, + "figures": { + "version": "3.1.0", + "resolved": "https://registry.npm.taobao.org/figures/download/figures-3.1.0.tgz?cache=0&sync_timestamp=1571715625804&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffigures%2Fdownload%2Ffigures-3.1.0.tgz", + "integrity": "sha1-SxmN0H2NcVMGQoZK8tRd2eRZxOw=", + "dev": true, + "requires": { + "escape-string-regexp": "^1.0.5" + } + }, + "file-loader": { + "version": "4.2.0", + "resolved": "https://registry.npm.taobao.org/file-loader/download/file-loader-4.2.0.tgz", + "integrity": "sha1-X7Ek0jadcHXXCppavs0S5gqVIV4=", + "dev": true, + "requires": { + "loader-utils": "^1.2.3", + "schema-utils": "^2.0.0" + }, + "dependencies": { + "schema-utils": { + "version": "2.6.4", + "resolved": "https://registry.npm.taobao.org/schema-utils/download/schema-utils-2.6.4.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fschema-utils%2Fdownload%2Fschema-utils-2.6.4.tgz", + "integrity": "sha1-on779uTnhonZGHLuPM+lfXvdD1M=", + "dev": true, + "requires": { + "ajv": "^6.10.2", + "ajv-keywords": "^3.4.1" + } + } + } + }, + "file-uri-to-path": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/file-uri-to-path/download/file-uri-to-path-1.0.0.tgz", + "integrity": "sha1-VTp7hEb/b2hDWcRF8eN6BdrMM90=", + "dev": true, + "optional": true + }, + "fileset": { + "version": "2.0.3", + "resolved": "https://registry.npm.taobao.org/fileset/download/fileset-2.0.3.tgz", + "integrity": "sha1-jnVIqW08wjJ+5eZ0FocjozO7oqA=", + "dev": true, + "requires": { + "glob": "^7.0.3", + "minimatch": "^3.0.3" + } + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npm.taobao.org/fill-range/download/fill-range-7.0.1.tgz", + "integrity": "sha1-GRmmp8df44ssfHflGYU12prN2kA=", + "dev": true, + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "finalhandler": { + "version": "1.1.2", + "resolved": "https://registry.npm.taobao.org/finalhandler/download/finalhandler-1.1.2.tgz", + "integrity": "sha1-t+fQAP/RGTjQ/bBTUG9uur6fWH0=", + "dev": true, + "requires": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "statuses": "~1.5.0", + "unpipe": "~1.0.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npm.taobao.org/debug/download/debug-2.6.9.tgz", + "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npm.taobao.org/ms/download/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } + } + }, + "find-cache-dir": { + "version": "3.0.0", + "resolved": "https://registry.npm.taobao.org/find-cache-dir/download/find-cache-dir-3.0.0.tgz", + "integrity": "sha1-zUt92Xtxhbfhfb/i1uQRXuPuuPw=", + "dev": true, + "requires": { + "commondir": "^1.0.1", + "make-dir": "^3.0.0", + "pkg-dir": "^4.1.0" + }, + "dependencies": { + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npm.taobao.org/find-up/download/find-up-4.1.0.tgz", + "integrity": "sha1-l6/n1s3AvFkoWEt8jXsW6KmqXRk=", + "dev": true, + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npm.taobao.org/locate-path/download/locate-path-5.0.0.tgz", + "integrity": "sha1-Gvujlq/WdqbUJQTQpno6frn2KqA=", + "dev": true, + "requires": { + "p-locate": "^4.1.0" + } + }, + "make-dir": { + "version": "3.0.0", + "resolved": "https://registry.npm.taobao.org/make-dir/download/make-dir-3.0.0.tgz", + "integrity": "sha1-G1859rknDtM/nwVMXA+EMEmJ+AE=", + "dev": true, + "requires": { + "semver": "^6.0.0" + } + }, + "p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npm.taobao.org/p-locate/download/p-locate-4.1.0.tgz", + "integrity": "sha1-o0KLtwiLOmApL2aRkni3wpetTwc=", + "dev": true, + "requires": { + "p-limit": "^2.2.0" + } + }, + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npm.taobao.org/path-exists/download/path-exists-4.0.0.tgz", + "integrity": "sha1-UTvb4tO5XXdi6METfvoZXGxhtbM=", + "dev": true + }, + "pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npm.taobao.org/pkg-dir/download/pkg-dir-4.2.0.tgz", + "integrity": "sha1-8JkTPfft5CLoHR2ESCcO6z5CYfM=", + "dev": true, + "requires": { + "find-up": "^4.0.0" + } + } + } + }, + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npm.taobao.org/find-up/download/find-up-3.0.0.tgz", + "integrity": "sha1-SRafHXmTQwZG2mHsxa41XCHJe3M=", + "dev": true, + "requires": { + "locate-path": "^3.0.0" + } + }, + "firebase": { + "version": "7.8.1", + "resolved": "https://registry.npm.taobao.org/firebase/download/firebase-7.8.1.tgz", + "integrity": "sha1-HyoXcdiazxqsGjb7NdWHCk2k2VM=", + "requires": { + "@firebase/analytics": "0.2.13", + "@firebase/app": "0.5.4", + "@firebase/app-types": "0.5.1", + "@firebase/auth": "0.13.5", + "@firebase/database": "0.5.21", + "@firebase/firestore": "1.10.1", + "@firebase/functions": "0.4.32", + "@firebase/installations": "0.4.2", + "@firebase/messaging": "0.6.4", + "@firebase/performance": "0.2.32", + "@firebase/polyfill": "0.3.31", + "@firebase/remote-config": "0.1.13", + "@firebase/storage": "0.3.26", + "@firebase/util": "0.2.40" + } + }, + "flatted": { + "version": "2.0.1", + "resolved": "https://registry.npm.taobao.org/flatted/download/flatted-2.0.1.tgz", + "integrity": "sha1-aeV8qo8OrLwoHS4stFjUb9tEngg=", + "dev": true + }, + "flush-write-stream": { + "version": "1.1.1", + "resolved": "https://registry.npm.taobao.org/flush-write-stream/download/flush-write-stream-1.1.1.tgz", + "integrity": "sha1-jdfYc6G6vCB9lOrQwuDkQnbr8ug=", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "readable-stream": "^2.3.6" + } + }, + "follow-redirects": { + "version": "1.9.0", + "resolved": "https://registry.npm.taobao.org/follow-redirects/download/follow-redirects-1.9.0.tgz", + "integrity": "sha1-jVvNxltxCP4VCGScecEtcy3O208=", + "dev": true, + "requires": { + "debug": "^3.0.0" + }, + "dependencies": { + "debug": { + "version": "3.2.6", + "resolved": "https://registry.npm.taobao.org/debug/download/debug-3.2.6.tgz", + "integrity": "sha1-6D0X3hbYp++3cX7b5fsQE17uYps=", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + } + } + }, + "font-awesome": { + "version": "4.7.0", + "resolved": "https://registry.npm.taobao.org/font-awesome/download/font-awesome-4.7.0.tgz", + "integrity": "sha1-j6jPBBGhoxr9B7BtKQK7n8gVoTM=" + }, + "for-in": { + "version": "1.0.2", + "resolved": "https://registry.npm.taobao.org/for-in/download/for-in-1.0.2.tgz", + "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", + "dev": true + }, + "forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npm.taobao.org/forever-agent/download/forever-agent-0.6.1.tgz", + "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", + "dev": true + }, + "form-data": { + "version": "2.3.3", + "resolved": "https://registry.npm.taobao.org/form-data/download/form-data-2.3.3.tgz", + "integrity": "sha1-3M5SwF9kTymManq5Nr1yTO/786Y=", + "dev": true, + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" + } + }, + "forwarded": { + "version": "0.1.2", + "resolved": "https://registry.npm.taobao.org/forwarded/download/forwarded-0.1.2.tgz", + "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=", + "dev": true + }, + "fragment-cache": { + "version": "0.2.1", + "resolved": "https://registry.npm.taobao.org/fragment-cache/download/fragment-cache-0.2.1.tgz", + "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", + "dev": true, + "requires": { + "map-cache": "^0.2.2" + } + }, + "fresh": { + "version": "0.5.2", + "resolved": "https://registry.npm.taobao.org/fresh/download/fresh-0.5.2.tgz", + "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=", + "dev": true + }, + "from2": { + "version": "2.3.0", + "resolved": "https://registry.npm.taobao.org/from2/download/from2-2.3.0.tgz", + "integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "readable-stream": "^2.0.0" + } + }, + "fs-access": { + "version": "1.0.1", + "resolved": "https://registry.npm.taobao.org/fs-access/download/fs-access-1.0.1.tgz", + "integrity": "sha1-1qh/JiJxzv6+wwxVNAf7mV2od3o=", + "dev": true, + "requires": { + "null-check": "^1.0.0" + } + }, + "fs-extra": { + "version": "7.0.1", + "resolved": "https://registry.npm.taobao.org/fs-extra/download/fs-extra-7.0.1.tgz", + "integrity": "sha1-TxicRKoSO4lfcigE9V6iPq3DSOk=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + }, + "fs-minipass": { + "version": "2.1.0", + "resolved": "https://registry.npm.taobao.org/fs-minipass/download/fs-minipass-2.1.0.tgz", + "integrity": "sha1-f1A2/b8SxjwWkZDL5BmchSJx+fs=", + "dev": true, + "requires": { + "minipass": "^3.0.0" + } + }, + "fs-write-stream-atomic": { + "version": "1.0.10", + "resolved": "https://registry.npm.taobao.org/fs-write-stream-atomic/download/fs-write-stream-atomic-1.0.10.tgz", + "integrity": "sha1-tH31NJPvkR33VzHnCp3tAYnbQMk=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "iferr": "^0.1.5", + "imurmurhash": "^0.1.4", + "readable-stream": "1 || 2" + } + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/fs.realpath/download/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true + }, + "fsevents": { + "version": "2.1.2", + "resolved": "https://registry.npm.taobao.org/fsevents/download/fsevents-2.1.2.tgz?cache=0&sync_timestamp=1576323112997&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffsevents%2Fdownload%2Ffsevents-2.1.2.tgz", + "integrity": "sha1-TAofs0vGjlQ7S4Kp7Dkr+9qECAU=", + "dev": true, + "optional": true + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npm.taobao.org/function-bind/download/function-bind-1.1.1.tgz", + "integrity": "sha1-pWiZ0+o8m6uHS7l3O3xe3pL0iV0=" + }, + "genfun": { + "version": "5.0.0", + "resolved": "https://registry.npm.taobao.org/genfun/download/genfun-5.0.0.tgz", + "integrity": "sha1-ndlxCgaQClxKW/V6yl2k5S/nZTc=", + "dev": true + }, + "geojson-equality": { + "version": "0.1.6", + "resolved": "https://registry.npm.taobao.org/geojson-equality/download/geojson-equality-0.1.6.tgz", + "integrity": "sha1-oXE3TvBD5dR5eZWEC65GSOB1LXI=", + "requires": { + "deep-equal": "^1.0.0" + } + }, + "geojson-rbush": { + "version": "2.1.0", + "resolved": "https://registry.npm.taobao.org/geojson-rbush/download/geojson-rbush-2.1.0.tgz", + "integrity": "sha1-O9c745H8ELCuaT2bis6iquC4Oo0=", + "requires": { + "@turf/helpers": "*", + "@turf/meta": "*", + "rbush": "*" + } + }, + "get-caller-file": { + "version": "1.0.3", + "resolved": "https://registry.npm.taobao.org/get-caller-file/download/get-caller-file-1.0.3.tgz", + "integrity": "sha1-+Xj6TJDR3+f/LWvtoqUV5xO9z0o=", + "dev": true + }, + "get-closest": { + "version": "0.0.4", + "resolved": "https://registry.npm.taobao.org/get-closest/download/get-closest-0.0.4.tgz", + "integrity": "sha1-JprHdtHmAiqg/Vht1wjop9Miaa8=" + }, + "get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npm.taobao.org/get-stream/download/get-stream-4.1.0.tgz", + "integrity": "sha1-wbJVV189wh1Zv8ec09K0axw6VLU=", + "dev": true, + "requires": { + "pump": "^3.0.0" + } + }, + "get-value": { + "version": "2.0.6", + "resolved": "https://registry.npm.taobao.org/get-value/download/get-value-2.0.6.tgz", + "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", + "dev": true + }, + "getpass": { + "version": "0.1.7", + "resolved": "https://registry.npm.taobao.org/getpass/download/getpass-0.1.7.tgz", + "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", + "dev": true, + "requires": { + "assert-plus": "^1.0.0" + } + }, + "glob": { + "version": "7.1.4", + "resolved": "https://registry.npm.taobao.org/glob/download/glob-7.1.4.tgz?cache=0&sync_timestamp=1573078079496&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fglob%2Fdownload%2Fglob-7.1.4.tgz", + "integrity": "sha1-qmCKL2xXetNX4a5aXCbZqNGWklU=", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "glob-parent": { + "version": "3.1.0", + "resolved": "https://registry.npm.taobao.org/glob-parent/download/glob-parent-3.1.0.tgz?cache=0&sync_timestamp=1569136652060&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fglob-parent%2Fdownload%2Fglob-parent-3.1.0.tgz", + "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", + "dev": true, + "requires": { + "is-glob": "^3.1.0", + "path-dirname": "^1.0.0" + }, + "dependencies": { + "is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npm.taobao.org/is-glob/download/is-glob-3.1.0.tgz", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "dev": true, + "requires": { + "is-extglob": "^2.1.0" + } + } + } + }, + "globals": { + "version": "11.12.0", + "resolved": "https://registry.npm.taobao.org/globals/download/globals-11.12.0.tgz", + "integrity": "sha1-q4eVM4hooLq9hSV1gBjCp+uVxC4=", + "dev": true + }, + "globby": { + "version": "7.1.1", + "resolved": "https://registry.npm.taobao.org/globby/download/globby-7.1.1.tgz", + "integrity": "sha1-+yzP+UAfhgCUXfral0QMypcrhoA=", + "dev": true, + "requires": { + "array-union": "^1.0.1", + "dir-glob": "^2.0.0", + "glob": "^7.1.2", + "ignore": "^3.3.5", + "pify": "^3.0.0", + "slash": "^1.0.0" + }, + "dependencies": { + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npm.taobao.org/pify/download/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true + } + } + }, + "graceful-fs": { + "version": "4.2.3", + "resolved": "https://registry.npm.taobao.org/graceful-fs/download/graceful-fs-4.2.3.tgz", + "integrity": "sha1-ShL/G2A3bvCYYsIJPt2Qgyi+hCM=", + "dev": true + }, + "grpc": { + "version": "1.24.2", + "resolved": "https://registry.npm.taobao.org/grpc/download/grpc-1.24.2.tgz", + "integrity": "sha1-dtBHv6ewW2B8u+OruZBl3O/gwJk=", + "requires": { + "@types/bytebuffer": "^5.0.40", + "lodash.camelcase": "^4.3.0", + "lodash.clone": "^4.5.0", + "nan": "^2.13.2", + "node-pre-gyp": "^0.14.0", + "protobufjs": "^5.0.3" + }, + "dependencies": { + "abbrev": { + "version": "1.1.1", + "bundled": true + }, + "ansi-regex": { + "version": "2.1.1", + "bundled": true + }, + "aproba": { + "version": "1.2.0", + "bundled": true + }, + "are-we-there-yet": { + "version": "1.1.5", + "bundled": true, + "requires": { + "delegates": "^1.0.0", + "readable-stream": "^2.0.6" + } + }, + "balanced-match": { + "version": "1.0.0", + "bundled": true + }, + "brace-expansion": { + "version": "1.1.11", + "bundled": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "camelcase": { + "version": "2.1.1", + "resolved": "https://registry.npm.taobao.org/camelcase/download/camelcase-2.1.1.tgz", + "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=" + }, + "chownr": { + "version": "1.1.3", + "bundled": true + }, + "cliui": { + "version": "3.2.0", + "resolved": "https://registry.npm.taobao.org/cliui/download/cliui-3.2.0.tgz?cache=0&sync_timestamp=1573943458671&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcliui%2Fdownload%2Fcliui-3.2.0.tgz", + "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", + "requires": { + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wrap-ansi": "^2.0.0" + } + }, + "code-point-at": { + "version": "1.1.0", + "bundled": true + }, + "concat-map": { + "version": "0.0.1", + "bundled": true + }, + "console-control-strings": { + "version": "1.1.0", + "bundled": true + }, + "core-util-is": { + "version": "1.0.2", + "bundled": true + }, + "debug": { + "version": "3.2.6", + "bundled": true, + "requires": { + "ms": "^2.1.1" + } + }, + "deep-extend": { + "version": "0.6.0", + "bundled": true + }, + "delegates": { + "version": "1.0.0", + "bundled": true + }, + "detect-libc": { + "version": "1.0.3", + "bundled": true + }, + "fs-minipass": { + "version": "1.2.7", + "bundled": true, + "requires": { + "minipass": "^2.6.0" + } + }, + "fs.realpath": { + "version": "1.0.0", + "bundled": true + }, + "gauge": { + "version": "2.7.4", + "bundled": true, + "requires": { + "aproba": "^1.0.3", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.0", + "object-assign": "^4.1.0", + "signal-exit": "^3.0.0", + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wide-align": "^1.1.0" + } + }, + "glob": { + "version": "7.1.4", + "bundled": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "has-unicode": { + "version": "2.0.1", + "bundled": true + }, + "iconv-lite": { + "version": "0.4.24", + "bundled": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "ignore-walk": { + "version": "3.0.3", + "bundled": true, + "requires": { + "minimatch": "^3.0.4" + } + }, + "inflight": { + "version": "1.0.6", + "bundled": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4", + "bundled": true + }, + "ini": { + "version": "1.3.5", + "bundled": true + }, + "invert-kv": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/invert-kv/download/invert-kv-1.0.0.tgz", + "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=" + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "bundled": true, + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "isarray": { + "version": "1.0.0", + "bundled": true + }, + "lcid": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/lcid/download/lcid-1.0.0.tgz", + "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=", + "requires": { + "invert-kv": "^1.0.0" + } + }, + "minimatch": { + "version": "3.0.4", + "bundled": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "1.2.0", + "bundled": true + }, + "minipass": { + "version": "2.9.0", + "bundled": true, + "requires": { + "safe-buffer": "^5.1.2", + "yallist": "^3.0.0" + } + }, + "minizlib": { + "version": "1.3.3", + "bundled": true, + "requires": { + "minipass": "^2.9.0" + } + }, + "mkdirp": { + "version": "0.5.1", + "bundled": true, + "requires": { + "minimist": "0.0.8" + }, + "dependencies": { + "minimist": { + "version": "0.0.8", + "bundled": true + } + } + }, + "ms": { + "version": "2.1.2", + "bundled": true + }, + "needle": { + "version": "2.4.0", + "bundled": true, + "requires": { + "debug": "^3.2.6", + "iconv-lite": "^0.4.4", + "sax": "^1.2.4" + } + }, + "node-pre-gyp": { + "version": "0.14.0", + "bundled": true, + "requires": { + "detect-libc": "^1.0.2", + "mkdirp": "^0.5.1", + "needle": "^2.2.1", + "nopt": "^4.0.1", + "npm-packlist": "^1.1.6", + "npmlog": "^4.0.2", + "rc": "^1.2.7", + "rimraf": "^2.6.1", + "semver": "^5.3.0", + "tar": "^4.4.2" + } + }, + "nopt": { + "version": "4.0.1", + "bundled": true, + "requires": { + "abbrev": "1", + "osenv": "^0.1.4" + } + }, + "npm-bundled": { + "version": "1.0.6", + "bundled": true + }, + "npm-packlist": { + "version": "1.4.6", + "bundled": true, + "requires": { + "ignore-walk": "^3.0.1", + "npm-bundled": "^1.0.1" + } + }, + "npmlog": { + "version": "4.1.2", + "bundled": true, + "requires": { + "are-we-there-yet": "~1.1.2", + "console-control-strings": "~1.1.0", + "gauge": "~2.7.3", + "set-blocking": "~2.0.0" + } + }, + "number-is-nan": { + "version": "1.0.1", + "bundled": true + }, + "object-assign": { + "version": "4.1.1", + "bundled": true + }, + "once": { + "version": "1.4.0", + "bundled": true, + "requires": { + "wrappy": "1" + } + }, + "os-homedir": { + "version": "1.0.2", + "bundled": true + }, + "os-locale": { + "version": "1.4.0", + "resolved": "https://registry.npm.taobao.org/os-locale/download/os-locale-1.4.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fos-locale%2Fdownload%2Fos-locale-1.4.0.tgz", + "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=", + "requires": { + "lcid": "^1.0.0" + } + }, + "os-tmpdir": { + "version": "1.0.2", + "bundled": true + }, + "osenv": { + "version": "0.1.5", + "bundled": true, + "requires": { + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.0" + } + }, + "path-is-absolute": { + "version": "1.0.1", + "bundled": true + }, + "process-nextick-args": { + "version": "2.0.1", + "bundled": true + }, + "protobufjs": { + "version": "5.0.3", + "resolved": "https://registry.npm.taobao.org/protobufjs/download/protobufjs-5.0.3.tgz", + "integrity": "sha1-5N/p+2fJCyYw0VhoJJvMSWFGehc=", + "requires": { + "ascli": "~1", + "bytebuffer": "~5", + "glob": "^7.0.5", + "yargs": "^3.10.0" + } + }, + "rc": { + "version": "1.2.8", + "bundled": true, + "requires": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + } + }, + "readable-stream": { + "version": "2.3.6", + "bundled": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "rimraf": { + "version": "2.7.1", + "bundled": true, + "requires": { + "glob": "^7.1.3" + } + }, + "safe-buffer": { + "version": "5.1.2", + "bundled": true + }, + "safer-buffer": { + "version": "2.1.2", + "bundled": true + }, + "sax": { + "version": "1.2.4", + "bundled": true + }, + "semver": { + "version": "5.7.1", + "bundled": true + }, + "set-blocking": { + "version": "2.0.0", + "bundled": true + }, + "signal-exit": { + "version": "3.0.2", + "bundled": true + }, + "string-width": { + "version": "1.0.2", + "bundled": true, + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + }, + "string_decoder": { + "version": "1.1.1", + "bundled": true, + "requires": { + "safe-buffer": "~5.1.0" + } + }, + "strip-ansi": { + "version": "3.0.1", + "bundled": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "strip-json-comments": { + "version": "2.0.1", + "bundled": true + }, + "tar": { + "version": "4.4.13", + "bundled": true, + "requires": { + "chownr": "^1.1.1", + "fs-minipass": "^1.2.5", + "minipass": "^2.8.6", + "minizlib": "^1.2.1", + "mkdirp": "^0.5.0", + "safe-buffer": "^5.1.2", + "yallist": "^3.0.3" + } + }, + "util-deprecate": { + "version": "1.0.2", + "bundled": true + }, + "wide-align": { + "version": "1.1.3", + "bundled": true, + "requires": { + "string-width": "^1.0.2 || 2" + } + }, + "wrappy": { + "version": "1.0.2", + "bundled": true + }, + "y18n": { + "version": "3.2.1", + "resolved": "https://registry.npm.taobao.org/y18n/download/y18n-3.2.1.tgz", + "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=" + }, + "yallist": { + "version": "3.1.1", + "bundled": true + }, + "yargs": { + "version": "3.32.0", + "resolved": "https://registry.npm.taobao.org/yargs/download/yargs-3.32.0.tgz?cache=0&sync_timestamp=1577940861093&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fyargs%2Fdownload%2Fyargs-3.32.0.tgz", + "integrity": "sha1-AwiOnr+edWtpdRYR0qXvWRSCyZU=", + "requires": { + "camelcase": "^2.0.1", + "cliui": "^3.0.3", + "decamelize": "^1.1.1", + "os-locale": "^1.4.0", + "string-width": "^1.0.1", + "window-size": "^0.1.4", + "y18n": "^3.2.0" + } + } + } + }, + "handle-thing": { + "version": "2.0.0", + "resolved": "https://registry.npm.taobao.org/handle-thing/download/handle-thing-2.0.0.tgz", + "integrity": "sha1-DgOWlf9QyT/CiFV9aW88HcZ3Z1Q=", + "dev": true + }, + "handlebars": { + "version": "4.5.3", + "resolved": "https://registry.npm.taobao.org/handlebars/download/handlebars-4.5.3.tgz?cache=0&sync_timestamp=1574061127997&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fhandlebars%2Fdownload%2Fhandlebars-4.5.3.tgz", + "integrity": "sha1-XPdb2HFPdgVxNRGla+fDSb7LBII=", + "dev": true, + "requires": { + "neo-async": "^2.6.0", + "optimist": "^0.6.1", + "source-map": "^0.6.1", + "uglify-js": "^3.1.4" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.6.1.tgz", + "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=", + "dev": true + } + } + }, + "har-schema": { + "version": "2.0.0", + "resolved": "https://registry.npm.taobao.org/har-schema/download/har-schema-2.0.0.tgz", + "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", + "dev": true + }, + "har-validator": { + "version": "5.1.3", + "resolved": "https://registry.npm.taobao.org/har-validator/download/har-validator-5.1.3.tgz", + "integrity": "sha1-HvievT5JllV2de7ZiTEQ3DUPoIA=", + "dev": true, + "requires": { + "ajv": "^6.5.5", + "har-schema": "^2.0.0" + } + }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npm.taobao.org/has/download/has-1.0.3.tgz", + "integrity": "sha1-ci18v8H2qoJB8W3YFOAR4fQeh5Y=", + "requires": { + "function-bind": "^1.1.1" + } + }, + "has-ansi": { + "version": "2.0.0", + "resolved": "https://registry.npm.taobao.org/has-ansi/download/has-ansi-2.0.0.tgz?cache=0&sync_timestamp=1568144153016&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fhas-ansi%2Fdownload%2Fhas-ansi-2.0.0.tgz", + "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "has-binary2": { + "version": "1.0.3", + "resolved": "https://registry.npm.taobao.org/has-binary2/download/has-binary2-1.0.3.tgz", + "integrity": "sha1-d3asYn8+p3JQz8My2rfd9eT10R0=", + "dev": true, + "requires": { + "isarray": "2.0.1" + }, + "dependencies": { + "isarray": { + "version": "2.0.1", + "resolved": "https://registry.npm.taobao.org/isarray/download/isarray-2.0.1.tgz?cache=0&sync_timestamp=1562592125418&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fisarray%2Fdownload%2Fisarray-2.0.1.tgz", + "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=", + "dev": true + } + } + }, + "has-cors": { + "version": "1.1.0", + "resolved": "https://registry.npm.taobao.org/has-cors/download/has-cors-1.1.0.tgz", + "integrity": "sha1-XkdHk/fqmEPRu5nCPu9J/xJv/zk=", + "dev": true + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npm.taobao.org/has-flag/download/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "has-symbols": { + "version": "1.0.1", + "resolved": "https://registry.npm.taobao.org/has-symbols/download/has-symbols-1.0.1.tgz?cache=0&sync_timestamp=1573950719586&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fhas-symbols%2Fdownload%2Fhas-symbols-1.0.1.tgz", + "integrity": "sha1-n1IUdYpEGWxAbZvXbOv4HsLdMeg=" + }, + "has-value": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/has-value/download/has-value-1.0.0.tgz", + "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", + "dev": true, + "requires": { + "get-value": "^2.0.6", + "has-values": "^1.0.0", + "isobject": "^3.0.0" + } + }, + "has-values": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/has-values/download/has-values-1.0.0.tgz", + "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", + "dev": true, + "requires": { + "is-number": "^3.0.0", + "kind-of": "^4.0.0" + }, + "dependencies": { + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npm.taobao.org/is-number/download/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npm.taobao.org/kind-of/download/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "kind-of": { + "version": "4.0.0", + "resolved": "https://registry.npm.taobao.org/kind-of/download/kind-of-4.0.0.tgz", + "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "hash-base": { + "version": "3.0.4", + "resolved": "https://registry.npm.taobao.org/hash-base/download/hash-base-3.0.4.tgz", + "integrity": "sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "hash.js": { + "version": "1.1.7", + "resolved": "https://registry.npm.taobao.org/hash.js/download/hash.js-1.1.7.tgz", + "integrity": "sha1-C6vKU46NTuSg+JiNaIZlN6ADz0I=", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "minimalistic-assert": "^1.0.1" + } + }, + "hex-color-regex": { + "version": "1.1.0", + "resolved": "https://registry.npm.taobao.org/hex-color-regex/download/hex-color-regex-1.1.0.tgz", + "integrity": "sha1-TAb8y0YC/iYCs8k9+C1+fb8aio4=", + "dev": true + }, + "hmac-drbg": { + "version": "1.0.1", + "resolved": "https://registry.npm.taobao.org/hmac-drbg/download/hmac-drbg-1.0.1.tgz", + "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", + "dev": true, + "requires": { + "hash.js": "^1.0.3", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.1" + } + }, + "hosted-git-info": { + "version": "3.0.2", + "resolved": "https://registry.npm.taobao.org/hosted-git-info/download/hosted-git-info-3.0.2.tgz?cache=0&sync_timestamp=1570493570687&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fhosted-git-info%2Fdownload%2Fhosted-git-info-3.0.2.tgz", + "integrity": "sha1-i3470RS1m1F4b4ut4POd3IAnWpc=", + "dev": true, + "requires": { + "lru-cache": "^5.1.1" + } + }, + "hpack.js": { + "version": "2.1.6", + "resolved": "https://registry.npm.taobao.org/hpack.js/download/hpack.js-2.1.6.tgz", + "integrity": "sha1-h3dMCUnlE/QuhFdbPEVoH63ioLI=", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "obuf": "^1.0.0", + "readable-stream": "^2.0.1", + "wbuf": "^1.1.0" + } + }, + "hsl-regex": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/hsl-regex/download/hsl-regex-1.0.0.tgz", + "integrity": "sha1-1JMwx4ntgZ4nakwNJy3/owsY/m4=", + "dev": true + }, + "hsla-regex": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/hsla-regex/download/hsla-regex-1.0.0.tgz", + "integrity": "sha1-wc56MWjIxmFAM6S194d/OyJfnDg=", + "dev": true + }, + "html-comment-regex": { + "version": "1.1.2", + "resolved": "https://registry.npm.taobao.org/html-comment-regex/download/html-comment-regex-1.1.2.tgz", + "integrity": "sha1-l9RoiutcgYhqNk+qDK0d2hTUM6c=", + "dev": true + }, + "html-entities": { + "version": "1.2.1", + "resolved": "https://registry.npm.taobao.org/html-entities/download/html-entities-1.2.1.tgz", + "integrity": "sha1-DfKTUfByEWNRXfueVUPl9u7VFi8=", + "dev": true + }, + "http-cache-semantics": { + "version": "3.8.1", + "resolved": "https://registry.npm.taobao.org/http-cache-semantics/download/http-cache-semantics-3.8.1.tgz", + "integrity": "sha1-ObDhat2bYFvwqe89nar0hDtMrNI=", + "dev": true + }, + "http-deceiver": { + "version": "1.2.7", + "resolved": "https://registry.npm.taobao.org/http-deceiver/download/http-deceiver-1.2.7.tgz", + "integrity": "sha1-+nFolEq5pRnTN8sL7HKE3D5yPYc=", + "dev": true + }, + "http-errors": { + "version": "1.7.2", + "resolved": "https://registry.npm.taobao.org/http-errors/download/http-errors-1.7.2.tgz", + "integrity": "sha1-T1ApzxMjnzEDblsuVSkrz7zIXI8=", + "dev": true, + "requires": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.1", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.0" + }, + "dependencies": { + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npm.taobao.org/inherits/download/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true + } + } + }, + "http-parser-js": { + "version": "0.4.10", + "resolved": "https://registry.npm.taobao.org/http-parser-js/download/http-parser-js-0.4.10.tgz", + "integrity": "sha1-ksnBN0w1CF912zWexWzCV8u5P6Q=" + }, + "http-proxy": { + "version": "1.18.0", + "resolved": "https://registry.npm.taobao.org/http-proxy/download/http-proxy-1.18.0.tgz", + "integrity": "sha1-2+VfY+daNH2389mZdPJpKjFKajo=", + "dev": true, + "requires": { + "eventemitter3": "^4.0.0", + "follow-redirects": "^1.0.0", + "requires-port": "^1.0.0" + } + }, + "http-proxy-agent": { + "version": "2.1.0", + "resolved": "https://registry.npm.taobao.org/http-proxy-agent/download/http-proxy-agent-2.1.0.tgz", + "integrity": "sha1-5IIb7vWyFCogJr1zkm/lN2McVAU=", + "dev": true, + "requires": { + "agent-base": "4", + "debug": "3.1.0" + }, + "dependencies": { + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npm.taobao.org/debug/download/debug-3.1.0.tgz", + "integrity": "sha1-W7WgZyYotkFJVmuhaBnmFRjGcmE=", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npm.taobao.org/ms/download/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } + } + }, + "http-proxy-middleware": { + "version": "0.19.1", + "resolved": "https://registry.npm.taobao.org/http-proxy-middleware/download/http-proxy-middleware-0.19.1.tgz", + "integrity": "sha1-GDx9xKoUeRUDBkmMIQza+WCApDo=", + "dev": true, + "requires": { + "http-proxy": "^1.17.0", + "is-glob": "^4.0.0", + "lodash": "^4.17.11", + "micromatch": "^3.1.10" + } + }, + "http-signature": { + "version": "1.2.0", + "resolved": "https://registry.npm.taobao.org/http-signature/download/http-signature-1.2.0.tgz?cache=0&sync_timestamp=1572997209501&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fhttp-signature%2Fdownload%2Fhttp-signature-1.2.0.tgz", + "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", + "dev": true, + "requires": { + "assert-plus": "^1.0.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" + } + }, + "https-browserify": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/https-browserify/download/https-browserify-1.0.0.tgz", + "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=", + "dev": true + }, + "https-proxy-agent": { + "version": "2.2.4", + "resolved": "https://registry.npm.taobao.org/https-proxy-agent/download/https-proxy-agent-2.2.4.tgz?cache=0&sync_timestamp=1576014210252&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fhttps-proxy-agent%2Fdownload%2Fhttps-proxy-agent-2.2.4.tgz", + "integrity": "sha1-TuenN6vZJniik9mzShr00NCMeHs=", + "dev": true, + "requires": { + "agent-base": "^4.3.0", + "debug": "^3.1.0" + }, + "dependencies": { + "debug": { + "version": "3.2.6", + "resolved": "https://registry.npm.taobao.org/debug/download/debug-3.2.6.tgz", + "integrity": "sha1-6D0X3hbYp++3cX7b5fsQE17uYps=", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + } + } + }, + "humanize-ms": { + "version": "1.2.1", + "resolved": "https://registry.npm.taobao.org/humanize-ms/download/humanize-ms-1.2.1.tgz", + "integrity": "sha1-xG4xWaKT9riW2ikxbYtv6Lt5u+0=", + "dev": true, + "requires": { + "ms": "^2.0.0" + } + }, + "iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npm.taobao.org/iconv-lite/download/iconv-lite-0.4.24.tgz", + "integrity": "sha1-ICK0sl+93CHS9SSXSkdKr+czkIs=", + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "idb": { + "version": "3.0.2", + "resolved": "https://registry.npm.taobao.org/idb/download/idb-3.0.2.tgz", + "integrity": "sha1-yOkSLV3dQPE7YK5mXkhi+LE/o4Q=" + }, + "ieee754": { + "version": "1.1.13", + "resolved": "https://registry.npm.taobao.org/ieee754/download/ieee754-1.1.13.tgz", + "integrity": "sha1-7BaFWOlaoYH9h9N/VcMrvLZwi4Q=", + "dev": true + }, + "iferr": { + "version": "0.1.5", + "resolved": "https://registry.npm.taobao.org/iferr/download/iferr-0.1.5.tgz", + "integrity": "sha1-xg7taebY/bazEEofy8ocGS3FtQE=", + "dev": true + }, + "ignore": { + "version": "3.3.10", + "resolved": "https://registry.npm.taobao.org/ignore/download/ignore-3.3.10.tgz", + "integrity": "sha1-Cpf7h2mG6AgcYxFg+PnziRV/AEM=", + "dev": true + }, + "ignore-walk": { + "version": "3.0.3", + "resolved": "https://registry.npm.taobao.org/ignore-walk/download/ignore-walk-3.0.3.tgz", + "integrity": "sha1-AX4kRxhL/q3nwjjkrv3R6PlbHjc=", + "dev": true, + "requires": { + "minimatch": "^3.0.4" + } + }, + "image-size": { + "version": "0.5.5", + "resolved": "https://registry.npm.taobao.org/image-size/download/image-size-0.5.5.tgz?cache=0&sync_timestamp=1569840751769&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fimage-size%2Fdownload%2Fimage-size-0.5.5.tgz", + "integrity": "sha1-Cd/Uq50g4p6xw+gLiZA3jfnjy5w=", + "dev": true, + "optional": true + }, + "immediate": { + "version": "3.0.6", + "resolved": "https://registry.npm.taobao.org/immediate/download/immediate-3.0.6.tgz", + "integrity": "sha1-nbHb0Pr43m++D13V5Wu2BigN5ps=", + "dev": true + }, + "import-cwd": { + "version": "2.1.0", + "resolved": "https://registry.npm.taobao.org/import-cwd/download/import-cwd-2.1.0.tgz", + "integrity": "sha1-qmzzbnInYShcs3HsZRn1PiQ1sKk=", + "dev": true, + "requires": { + "import-from": "^2.1.0" + } + }, + "import-fresh": { + "version": "2.0.0", + "resolved": "https://registry.npm.taobao.org/import-fresh/download/import-fresh-2.0.0.tgz?cache=0&sync_timestamp=1573664960772&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fimport-fresh%2Fdownload%2Fimport-fresh-2.0.0.tgz", + "integrity": "sha1-2BNVwVYS04bGH53dOSLUMEgipUY=", + "dev": true, + "requires": { + "caller-path": "^2.0.0", + "resolve-from": "^3.0.0" + } + }, + "import-from": { + "version": "2.1.0", + "resolved": "https://registry.npm.taobao.org/import-from/download/import-from-2.1.0.tgz", + "integrity": "sha1-M1238qev/VOqpHHUuAId7ja387E=", + "dev": true, + "requires": { + "resolve-from": "^3.0.0" + } + }, + "import-local": { + "version": "2.0.0", + "resolved": "https://registry.npm.taobao.org/import-local/download/import-local-2.0.0.tgz", + "integrity": "sha1-VQcL44pZk88Y72236WH1vuXFoJ0=", + "dev": true, + "requires": { + "pkg-dir": "^3.0.0", + "resolve-cwd": "^2.0.0" + } + }, + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npm.taobao.org/imurmurhash/download/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "dev": true + }, + "indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npm.taobao.org/indent-string/download/indent-string-4.0.0.tgz", + "integrity": "sha1-Yk+PRJfWGbLZdoUx1Y9BIoVNclE=", + "dev": true + }, + "indexes-of": { + "version": "1.0.1", + "resolved": "https://registry.npm.taobao.org/indexes-of/download/indexes-of-1.0.1.tgz", + "integrity": "sha1-8w9xbI4r00bHtn0985FVZqfAVgc=", + "dev": true + }, + "indexof": { + "version": "0.0.1", + "resolved": "https://registry.npm.taobao.org/indexof/download/indexof-0.0.1.tgz", + "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=", + "dev": true + }, + "infer-owner": { + "version": "1.0.4", + "resolved": "https://registry.npm.taobao.org/infer-owner/download/infer-owner-1.0.4.tgz", + "integrity": "sha1-xM78qo5RBRwqQLos6KPScpWvlGc=", + "dev": true + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npm.taobao.org/inflight/download/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npm.taobao.org/inherits/download/inherits-2.0.4.tgz", + "integrity": "sha1-D6LGT5MpF8NDOg3tVTY6rjdBa3w=", + "dev": true + }, + "ini": { + "version": "1.3.5", + "resolved": "https://registry.npm.taobao.org/ini/download/ini-1.3.5.tgz", + "integrity": "sha1-7uJfVtscnsYIXgwid4CD9Zar+Sc=", + "dev": true + }, + "inquirer": { + "version": "7.0.0", + "resolved": "https://registry.npm.taobao.org/inquirer/download/inquirer-7.0.0.tgz?cache=0&sync_timestamp=1579939863311&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Finquirer%2Fdownload%2Finquirer-7.0.0.tgz", + "integrity": "sha1-nisDLd532h2124BHWLj+o6lwUZo=", + "dev": true, + "requires": { + "ansi-escapes": "^4.2.1", + "chalk": "^2.4.2", + "cli-cursor": "^3.1.0", + "cli-width": "^2.0.0", + "external-editor": "^3.0.3", + "figures": "^3.0.0", + "lodash": "^4.17.15", + "mute-stream": "0.0.8", + "run-async": "^2.2.0", + "rxjs": "^6.4.0", + "string-width": "^4.1.0", + "strip-ansi": "^5.1.0", + "through": "^2.3.6" + }, + "dependencies": { + "ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npm.taobao.org/ansi-regex/download/ansi-regex-5.0.0.tgz", + "integrity": "sha1-OIU59VF5vzkznIGvMKZU1p+Hy3U=", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npm.taobao.org/is-fullwidth-code-point/download/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha1-8Rb4Bk/pCz94RKOJl8C3UFEmnx0=", + "dev": true + }, + "string-width": { + "version": "4.2.0", + "resolved": "https://registry.npm.taobao.org/string-width/download/string-width-4.2.0.tgz", + "integrity": "sha1-lSGCxGzHssMT0VluYjmSvRY7crU=", + "dev": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.0" + }, + "dependencies": { + "strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npm.taobao.org/strip-ansi/download/strip-ansi-6.0.0.tgz", + "integrity": "sha1-CxVx3XZpzNTz4G4U7x7tJiJa5TI=", + "dev": true, + "requires": { + "ansi-regex": "^5.0.0" + } + } + } + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npm.taobao.org/strip-ansi/download/strip-ansi-5.2.0.tgz", + "integrity": "sha1-jJpTb+tq/JYr36WxBKUJHBrZwK4=", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npm.taobao.org/ansi-regex/download/ansi-regex-4.1.0.tgz", + "integrity": "sha1-i5+PCM8ay4Q3Vqg5yox+MWjFGZc=", + "dev": true + } + } + } + } + }, + "internal-ip": { + "version": "4.3.0", + "resolved": "https://registry.npm.taobao.org/internal-ip/download/internal-ip-4.3.0.tgz", + "integrity": "sha1-hFRSuq2dLKO2nGNaE3rLmg2tCQc=", + "dev": true, + "requires": { + "default-gateway": "^4.2.0", + "ipaddr.js": "^1.9.0" + } + }, + "invariant": { + "version": "2.2.4", + "resolved": "https://registry.npm.taobao.org/invariant/download/invariant-2.2.4.tgz", + "integrity": "sha1-YQ88ksk1nOHbYW5TgAjSP/NRWOY=", + "dev": true, + "requires": { + "loose-envify": "^1.0.0" + } + }, + "invert-kv": { + "version": "2.0.0", + "resolved": "https://registry.npm.taobao.org/invert-kv/download/invert-kv-2.0.0.tgz", + "integrity": "sha1-c5P1r6Weyf9fZ6J2INEcIm4+7AI=", + "dev": true + }, + "ip": { + "version": "1.1.5", + "resolved": "https://registry.npm.taobao.org/ip/download/ip-1.1.5.tgz", + "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=", + "dev": true + }, + "ip-regex": { + "version": "2.1.0", + "resolved": "https://registry.npm.taobao.org/ip-regex/download/ip-regex-2.1.0.tgz", + "integrity": "sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk=", + "dev": true + }, + "ipaddr.js": { + "version": "1.9.0", + "resolved": "https://registry.npm.taobao.org/ipaddr.js/download/ipaddr.js-1.9.0.tgz", + "integrity": "sha1-N9905DCg5HVQ/lSi3v4w2KzZX2U=", + "dev": true + }, + "is-absolute-url": { + "version": "2.1.0", + "resolved": "https://registry.npm.taobao.org/is-absolute-url/download/is-absolute-url-2.1.0.tgz?cache=0&sync_timestamp=1569735515256&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-absolute-url%2Fdownload%2Fis-absolute-url-2.1.0.tgz", + "integrity": "sha1-UFMN+4T8yap9vnhS6Do3uTufKqY=", + "dev": true + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npm.taobao.org/is-accessor-descriptor/download/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npm.taobao.org/kind-of/download/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-arguments": { + "version": "1.0.4", + "resolved": "https://registry.npm.taobao.org/is-arguments/download/is-arguments-1.0.4.tgz", + "integrity": "sha1-P6+WbHy6D/Q3+zH2JQCC/PBEjPM=" + }, + "is-array": { + "version": "1.0.1", + "resolved": "https://registry.npm.taobao.org/is-array/download/is-array-1.0.1.tgz", + "integrity": "sha1-6YUMwsyGDDvAl36EzPDdRkWEJ5o=" + }, + "is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npm.taobao.org/is-arrayish/download/is-arrayish-0.2.1.tgz", + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", + "dev": true + }, + "is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npm.taobao.org/is-binary-path/download/is-binary-path-2.1.0.tgz", + "integrity": "sha1-6h9/O4DwZCNug0cPhsCcJU+0Wwk=", + "dev": true, + "requires": { + "binary-extensions": "^2.0.0" + } + }, + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npm.taobao.org/is-buffer/download/is-buffer-1.1.6.tgz", + "integrity": "sha1-76ouqdqg16suoTqXsritUf776L4=", + "dev": true + }, + "is-callable": { + "version": "1.1.5", + "resolved": "https://registry.npm.taobao.org/is-callable/download/is-callable-1.1.5.tgz?cache=0&sync_timestamp=1576778289528&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-callable%2Fdownload%2Fis-callable-1.1.5.tgz", + "integrity": "sha1-9+RrWWiQRW23Tn9ul2yzJz0G+qs=" + }, + "is-color-stop": { + "version": "1.1.0", + "resolved": "https://registry.npm.taobao.org/is-color-stop/download/is-color-stop-1.1.0.tgz", + "integrity": "sha1-z/9HGu5N1cnhWFmPvhKWe1za00U=", + "dev": true, + "requires": { + "css-color-names": "^0.0.4", + "hex-color-regex": "^1.1.0", + "hsl-regex": "^1.0.0", + "hsla-regex": "^1.0.0", + "rgb-regex": "^1.0.1", + "rgba-regex": "^1.0.0" + } + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npm.taobao.org/is-data-descriptor/download/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npm.taobao.org/kind-of/download/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-date-object": { + "version": "1.0.2", + "resolved": "https://registry.npm.taobao.org/is-date-object/download/is-date-object-1.0.2.tgz?cache=0&sync_timestamp=1576729182289&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-date-object%2Fdownload%2Fis-date-object-1.0.2.tgz", + "integrity": "sha1-vac28s2P0G0yhE53Q7+nSUw7/X4=" + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npm.taobao.org/is-descriptor/download/is-descriptor-0.1.6.tgz", + "integrity": "sha1-Nm2CQN3kh8pRgjsaufB6EKeCUco=", + "dev": true, + "requires": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "dependencies": { + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npm.taobao.org/kind-of/download/kind-of-5.1.0.tgz", + "integrity": "sha1-cpyR4thXt6QZofmqZWhcTDP1hF0=", + "dev": true + } + } + }, + "is-directory": { + "version": "0.3.1", + "resolved": "https://registry.npm.taobao.org/is-directory/download/is-directory-0.3.1.tgz", + "integrity": "sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE=", + "dev": true + }, + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npm.taobao.org/is-extendable/download/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "dev": true + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npm.taobao.org/is-extglob/download/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npm.taobao.org/is-fullwidth-code-point/download/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "is-glob": { + "version": "4.0.1", + "resolved": "https://registry.npm.taobao.org/is-glob/download/is-glob-4.0.1.tgz", + "integrity": "sha1-dWfb6fL14kZ7x3q4PEopSCQHpdw=", + "dev": true, + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-interactive": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/is-interactive/download/is-interactive-1.0.0.tgz?cache=0&sync_timestamp=1569142823241&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-interactive%2Fdownload%2Fis-interactive-1.0.0.tgz", + "integrity": "sha1-zqbmrlyHCnsKAAQHC3tYfgJSkS4=", + "dev": true + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npm.taobao.org/is-number/download/is-number-7.0.0.tgz", + "integrity": "sha1-dTU0W4lnNNX4DE0GxQlVUnoU8Ss=", + "dev": true + }, + "is-obj": { + "version": "1.0.1", + "resolved": "https://registry.npm.taobao.org/is-obj/download/is-obj-1.0.1.tgz", + "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=", + "dev": true + }, + "is-path-cwd": { + "version": "2.2.0", + "resolved": "https://registry.npm.taobao.org/is-path-cwd/download/is-path-cwd-2.2.0.tgz", + "integrity": "sha1-Z9Q7gmZKe1GR/ZEZEn6zAASKn9s=", + "dev": true + }, + "is-path-in-cwd": { + "version": "2.1.0", + "resolved": "https://registry.npm.taobao.org/is-path-in-cwd/download/is-path-in-cwd-2.1.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-path-in-cwd%2Fdownload%2Fis-path-in-cwd-2.1.0.tgz", + "integrity": "sha1-v+Lcomxp85cmWkAJljYCk1oFOss=", + "dev": true, + "requires": { + "is-path-inside": "^2.1.0" + } + }, + "is-path-inside": { + "version": "2.1.0", + "resolved": "https://registry.npm.taobao.org/is-path-inside/download/is-path-inside-2.1.0.tgz?cache=0&sync_timestamp=1569835858319&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-path-inside%2Fdownload%2Fis-path-inside-2.1.0.tgz", + "integrity": "sha1-fJgQWH1lmkDSe8201WFuqwWUlLI=", + "dev": true, + "requires": { + "path-is-inside": "^1.0.2" + } + }, + "is-plain-obj": { + "version": "1.1.0", + "resolved": "https://registry.npm.taobao.org/is-plain-obj/download/is-plain-obj-1.1.0.tgz", + "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=", + "dev": true + }, + "is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npm.taobao.org/is-plain-object/download/is-plain-object-2.0.4.tgz", + "integrity": "sha1-LBY7P6+xtgbZ0Xko8FwqHDjgdnc=", + "dev": true, + "requires": { + "isobject": "^3.0.1" + } + }, + "is-promise": { + "version": "2.1.0", + "resolved": "https://registry.npm.taobao.org/is-promise/download/is-promise-2.1.0.tgz", + "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=", + "dev": true + }, + "is-regex": { + "version": "1.0.5", + "resolved": "https://registry.npm.taobao.org/is-regex/download/is-regex-1.0.5.tgz", + "integrity": "sha1-OdWJo1i/GJZ/cmlnEguPwa7XTq4=", + "requires": { + "has": "^1.0.3" + } + }, + "is-resolvable": { + "version": "1.1.0", + "resolved": "https://registry.npm.taobao.org/is-resolvable/download/is-resolvable-1.1.0.tgz", + "integrity": "sha1-+xj4fOH+uSUWnJpAfBkxijIG7Yg=", + "dev": true + }, + "is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npm.taobao.org/is-stream/download/is-stream-1.1.0.tgz", + "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=" + }, + "is-svg": { + "version": "3.0.0", + "resolved": "https://registry.npm.taobao.org/is-svg/download/is-svg-3.0.0.tgz", + "integrity": "sha1-kyHb0pwhLlypnE+peUxxS8r6L3U=", + "dev": true, + "requires": { + "html-comment-regex": "^1.1.0" + } + }, + "is-symbol": { + "version": "1.0.3", + "resolved": "https://registry.npm.taobao.org/is-symbol/download/is-symbol-1.0.3.tgz", + "integrity": "sha1-OOEBS55jKb4N6dJKQU/XRB7GGTc=", + "requires": { + "has-symbols": "^1.0.1" + } + }, + "is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/is-typedarray/download/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", + "dev": true + }, + "is-windows": { + "version": "1.0.2", + "resolved": "https://registry.npm.taobao.org/is-windows/download/is-windows-1.0.2.tgz", + "integrity": "sha1-0YUOuXkezRjmGCzhKjDzlmNLsZ0=", + "dev": true + }, + "is-wsl": { + "version": "2.1.1", + "resolved": "https://registry.npm.taobao.org/is-wsl/download/is-wsl-2.1.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-wsl%2Fdownload%2Fis-wsl-2.1.1.tgz", + "integrity": "sha1-ShwVLUKd89RBZpSY4khtNZbrrx0=", + "dev": true + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/isarray/download/isarray-1.0.0.tgz?cache=0&sync_timestamp=1562592125418&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fisarray%2Fdownload%2Fisarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "isbinaryfile": { + "version": "3.0.3", + "resolved": "https://registry.npm.taobao.org/isbinaryfile/download/isbinaryfile-3.0.3.tgz", + "integrity": "sha1-XW3vPt6/boyoyunDAYOoBLX4voA=", + "dev": true, + "requires": { + "buffer-alloc": "^1.2.0" + } + }, + "iselement": { + "version": "1.1.4", + "resolved": "https://registry.npm.taobao.org/iselement/download/iselement-1.1.4.tgz", + "integrity": "sha1-flW1Ko68pQp+LoDluNKEDzI1MUY=" + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npm.taobao.org/isexe/download/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "dev": true + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npm.taobao.org/isobject/download/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + }, + "isomorphic-fetch": { + "version": "2.2.1", + "resolved": "https://registry.npm.taobao.org/isomorphic-fetch/download/isomorphic-fetch-2.2.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fisomorphic-fetch%2Fdownload%2Fisomorphic-fetch-2.2.1.tgz", + "integrity": "sha1-YRrhrPFPXoH3KVB0coGf6XM1WKk=", + "requires": { + "node-fetch": "^1.0.1", + "whatwg-fetch": ">=0.10.0" + } + }, + "isstream": { + "version": "0.1.2", + "resolved": "https://registry.npm.taobao.org/isstream/download/isstream-0.1.2.tgz", + "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", + "dev": true + }, + "istanbul-api": { + "version": "2.1.6", + "resolved": "https://registry.npm.taobao.org/istanbul-api/download/istanbul-api-2.1.6.tgz", + "integrity": "sha1-1hcCqdHGatidkuZtQB4WsL2ko18=", + "dev": true, + "requires": { + "async": "^2.6.2", + "compare-versions": "^3.4.0", + "fileset": "^2.0.3", + "istanbul-lib-coverage": "^2.0.5", + "istanbul-lib-hook": "^2.0.7", + "istanbul-lib-instrument": "^3.3.0", + "istanbul-lib-report": "^2.0.8", + "istanbul-lib-source-maps": "^3.0.6", + "istanbul-reports": "^2.2.4", + "js-yaml": "^3.13.1", + "make-dir": "^2.1.0", + "minimatch": "^3.0.4", + "once": "^1.4.0" + }, + "dependencies": { + "istanbul-lib-coverage": { + "version": "2.0.5", + "resolved": "https://registry.npm.taobao.org/istanbul-lib-coverage/download/istanbul-lib-coverage-2.0.5.tgz", + "integrity": "sha1-Z18KtpUD+tSx2En3NrqsqAM0T0k=", + "dev": true + }, + "istanbul-lib-instrument": { + "version": "3.3.0", + "resolved": "https://registry.npm.taobao.org/istanbul-lib-instrument/download/istanbul-lib-instrument-3.3.0.tgz?cache=0&sync_timestamp=1577062492583&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fistanbul-lib-instrument%2Fdownload%2Fistanbul-lib-instrument-3.3.0.tgz", + "integrity": "sha1-pfY9kfC7wMPkee9MXeAnM17G1jA=", + "dev": true, + "requires": { + "@babel/generator": "^7.4.0", + "@babel/parser": "^7.4.3", + "@babel/template": "^7.4.0", + "@babel/traverse": "^7.4.3", + "@babel/types": "^7.4.0", + "istanbul-lib-coverage": "^2.0.5", + "semver": "^6.0.0" + } + } + } + }, + "istanbul-lib-coverage": { + "version": "3.0.0", + "resolved": "https://registry.npm.taobao.org/istanbul-lib-coverage/download/istanbul-lib-coverage-3.0.0.tgz", + "integrity": "sha1-9ZRKN8cLVQsCp4pcOyBVsoDOyOw=", + "dev": true + }, + "istanbul-lib-hook": { + "version": "2.0.7", + "resolved": "https://registry.npm.taobao.org/istanbul-lib-hook/download/istanbul-lib-hook-2.0.7.tgz", + "integrity": "sha1-yVaV84PU+PYN8fBCUqlVDhW1sTM=", + "dev": true, + "requires": { + "append-transform": "^1.0.0" + } + }, + "istanbul-lib-instrument": { + "version": "4.0.1", + "resolved": "https://registry.npm.taobao.org/istanbul-lib-instrument/download/istanbul-lib-instrument-4.0.1.tgz?cache=0&sync_timestamp=1580741110293&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fistanbul-lib-instrument%2Fdownload%2Fistanbul-lib-instrument-4.0.1.tgz", + "integrity": "sha1-YfE6wsls/vsHb+cTEVbMBZB4dOY=", + "dev": true, + "requires": { + "@babel/core": "^7.7.5", + "@babel/parser": "^7.7.5", + "@babel/template": "^7.7.4", + "@babel/traverse": "^7.7.4", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.0.0", + "semver": "^6.3.0" + } + }, + "istanbul-lib-report": { + "version": "2.0.8", + "resolved": "https://registry.npm.taobao.org/istanbul-lib-report/download/istanbul-lib-report-2.0.8.tgz", + "integrity": "sha1-WoETzXRtQ8SInro2qxDn1QybTzM=", + "dev": true, + "requires": { + "istanbul-lib-coverage": "^2.0.5", + "make-dir": "^2.1.0", + "supports-color": "^6.1.0" + }, + "dependencies": { + "istanbul-lib-coverage": { + "version": "2.0.5", + "resolved": "https://registry.npm.taobao.org/istanbul-lib-coverage/download/istanbul-lib-coverage-2.0.5.tgz", + "integrity": "sha1-Z18KtpUD+tSx2En3NrqsqAM0T0k=", + "dev": true + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-6.1.0.tgz?cache=0&sync_timestamp=1569557271992&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-6.1.0.tgz", + "integrity": "sha1-B2Srxpxj1ayELdSGfo0CXogN+PM=", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "istanbul-lib-source-maps": { + "version": "3.0.6", + "resolved": "https://registry.npm.taobao.org/istanbul-lib-source-maps/download/istanbul-lib-source-maps-3.0.6.tgz", + "integrity": "sha1-KEmXxIIRdS7EhiU9qX44ed77qMg=", + "dev": true, + "requires": { + "debug": "^4.1.1", + "istanbul-lib-coverage": "^2.0.5", + "make-dir": "^2.1.0", + "rimraf": "^2.6.3", + "source-map": "^0.6.1" + }, + "dependencies": { + "istanbul-lib-coverage": { + "version": "2.0.5", + "resolved": "https://registry.npm.taobao.org/istanbul-lib-coverage/download/istanbul-lib-coverage-2.0.5.tgz", + "integrity": "sha1-Z18KtpUD+tSx2En3NrqsqAM0T0k=", + "dev": true + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.6.1.tgz", + "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=", + "dev": true + } + } + }, + "istanbul-reports": { + "version": "2.2.6", + "resolved": "https://registry.npm.taobao.org/istanbul-reports/download/istanbul-reports-2.2.6.tgz", + "integrity": "sha1-e08mYNgrKTA6j+YJH4ykvwWNoa8=", + "dev": true, + "requires": { + "handlebars": "^4.1.2" + } + }, + "jasmine": { + "version": "2.8.0", + "resolved": "https://registry.npm.taobao.org/jasmine/download/jasmine-2.8.0.tgz", + "integrity": "sha1-awicChFXax8W3xG4AUbZHU6Lij4=", + "dev": true, + "requires": { + "exit": "^0.1.2", + "glob": "^7.0.6", + "jasmine-core": "~2.8.0" + }, + "dependencies": { + "jasmine-core": { + "version": "2.8.0", + "resolved": "https://registry.npm.taobao.org/jasmine-core/download/jasmine-core-2.8.0.tgz", + "integrity": "sha1-vMl5rh+f0FcB5F5S5l06XWPxok4=", + "dev": true + } + } + }, + "jasmine-core": { + "version": "3.4.0", + "resolved": "https://registry.npm.taobao.org/jasmine-core/download/jasmine-core-3.4.0.tgz", + "integrity": "sha1-KnRhjpZgJlMMNRjwPp+EXSZHPOM=", + "dev": true + }, + "jasmine-spec-reporter": { + "version": "4.2.1", + "resolved": "https://registry.npm.taobao.org/jasmine-spec-reporter/download/jasmine-spec-reporter-4.2.1.tgz", + "integrity": "sha1-HWMq7ANBZwrTJPkrqEtLMrNeniI=", + "dev": true, + "requires": { + "colors": "1.1.2" + } + }, + "jasminewd2": { + "version": "2.2.0", + "resolved": "https://registry.npm.taobao.org/jasminewd2/download/jasminewd2-2.2.0.tgz", + "integrity": "sha1-43zwsX8ZnM4jvqcbIDk5Uka07E4=", + "dev": true + }, + "jest-worker": { + "version": "24.9.0", + "resolved": "https://registry.npm.taobao.org/jest-worker/download/jest-worker-24.9.0.tgz", + "integrity": "sha1-Xb/bWy0yLphWeJgjipaXvM5ns+U=", + "dev": true, + "requires": { + "merge-stream": "^2.0.0", + "supports-color": "^6.1.0" + }, + "dependencies": { + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-6.1.0.tgz?cache=0&sync_timestamp=1569557271992&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-6.1.0.tgz", + "integrity": "sha1-B2Srxpxj1ayELdSGfo0CXogN+PM=", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "js-levenshtein": { + "version": "1.1.6", + "resolved": "https://registry.npm.taobao.org/js-levenshtein/download/js-levenshtein-1.1.6.tgz", + "integrity": "sha1-xs7ljrNVA3LfjeuF+tXOZs4B1Z0=", + "dev": true + }, + "js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npm.taobao.org/js-tokens/download/js-tokens-4.0.0.tgz", + "integrity": "sha1-GSA/tZmR35jjoocFDUZHzerzJJk=", + "dev": true + }, + "js-yaml": { + "version": "3.13.1", + "resolved": "https://registry.npm.taobao.org/js-yaml/download/js-yaml-3.13.1.tgz", + "integrity": "sha1-r/FRswv9+o5J4F2iLnQV6d+jeEc=", + "dev": true, + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + }, + "jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npm.taobao.org/jsbn/download/jsbn-0.1.1.tgz", + "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", + "dev": true + }, + "jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npm.taobao.org/jsesc/download/jsesc-2.5.2.tgz", + "integrity": "sha1-gFZNLkg9rPbo7yCWUKZ98/DCg6Q=", + "dev": true + }, + "json-parse-better-errors": { + "version": "1.0.2", + "resolved": "https://registry.npm.taobao.org/json-parse-better-errors/download/json-parse-better-errors-1.0.2.tgz", + "integrity": "sha1-u4Z8+zRQ5pEHwTHRxRS6s9yLyqk=", + "dev": true + }, + "json-schema": { + "version": "0.2.3", + "resolved": "https://registry.npm.taobao.org/json-schema/download/json-schema-0.2.3.tgz", + "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", + "dev": true + }, + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npm.taobao.org/json-schema-traverse/download/json-schema-traverse-0.4.1.tgz", + "integrity": "sha1-afaofZUTq4u4/mO9sJecRI5oRmA=", + "dev": true + }, + "json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npm.taobao.org/json-stringify-safe/download/json-stringify-safe-5.0.1.tgz", + "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", + "dev": true + }, + "json3": { + "version": "3.3.3", + "resolved": "https://registry.npm.taobao.org/json3/download/json3-3.3.3.tgz", + "integrity": "sha1-f8EON1/FrkLEcFpcwKpvYr4wW4E=", + "dev": true + }, + "json5": { + "version": "1.0.1", + "resolved": "https://registry.npm.taobao.org/json5/download/json5-1.0.1.tgz", + "integrity": "sha1-d5+wAYYE+oVOrL9iUhgNg1Q+Pb4=", + "dev": true, + "requires": { + "minimist": "^1.2.0" + } + }, + "jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npm.taobao.org/jsonfile/download/jsonfile-4.0.0.tgz", + "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6" + } + }, + "jsonparse": { + "version": "1.3.1", + "resolved": "https://registry.npm.taobao.org/jsonparse/download/jsonparse-1.3.1.tgz", + "integrity": "sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=", + "dev": true + }, + "jsprim": { + "version": "1.4.1", + "resolved": "https://registry.npm.taobao.org/jsprim/download/jsprim-1.4.1.tgz", + "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", + "dev": true, + "requires": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.2.3", + "verror": "1.10.0" + } + }, + "jszip": { + "version": "3.2.2", + "resolved": "https://registry.npm.taobao.org/jszip/download/jszip-3.2.2.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fjszip%2Fdownload%2Fjszip-3.2.2.tgz", + "integrity": "sha1-sUOBbffhBqlZepTHdJM4WtylvR0=", + "dev": true, + "requires": { + "lie": "~3.3.0", + "pako": "~1.0.2", + "readable-stream": "~2.3.6", + "set-immediate-shim": "~1.0.1" + } + }, + "karma": { + "version": "4.1.0", + "resolved": "https://registry.npm.taobao.org/karma/download/karma-4.1.0.tgz", + "integrity": "sha1-0HOHyXQ6V1tA+vc+ij61Qhwhk+E=", + "dev": true, + "requires": { + "bluebird": "^3.3.0", + "body-parser": "^1.16.1", + "braces": "^2.3.2", + "chokidar": "^2.0.3", + "colors": "^1.1.0", + "connect": "^3.6.0", + "core-js": "^2.2.0", + "di": "^0.0.1", + "dom-serialize": "^2.2.0", + "flatted": "^2.0.0", + "glob": "^7.1.1", + "graceful-fs": "^4.1.2", + "http-proxy": "^1.13.0", + "isbinaryfile": "^3.0.0", + "lodash": "^4.17.11", + "log4js": "^4.0.0", + "mime": "^2.3.1", + "minimatch": "^3.0.2", + "optimist": "^0.6.1", + "qjobs": "^1.1.4", + "range-parser": "^1.2.0", + "rimraf": "^2.6.0", + "safe-buffer": "^5.0.1", + "socket.io": "2.1.1", + "source-map": "^0.6.1", + "tmp": "0.0.33", + "useragent": "2.3.0" + }, + "dependencies": { + "anymatch": { + "version": "2.0.0", + "resolved": "https://registry.npm.taobao.org/anymatch/download/anymatch-2.0.0.tgz", + "integrity": "sha1-vLJLTzeTTZqnrBe0ra+J58du8us=", + "dev": true, + "requires": { + "micromatch": "^3.1.4", + "normalize-path": "^2.1.1" + }, + "dependencies": { + "normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npm.taobao.org/normalize-path/download/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "dev": true, + "requires": { + "remove-trailing-separator": "^1.0.1" + } + } + } + }, + "binary-extensions": { + "version": "1.13.1", + "resolved": "https://registry.npm.taobao.org/binary-extensions/download/binary-extensions-1.13.1.tgz", + "integrity": "sha1-WYr+VHVbKGilMw0q/51Ou1Mgm2U=", + "dev": true + }, + "braces": { + "version": "2.3.2", + "resolved": "https://registry.npm.taobao.org/braces/download/braces-2.3.2.tgz", + "integrity": "sha1-WXn9PxTNUxVl5fot8av/8d+u5yk=", + "dev": true, + "requires": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + } + }, + "chokidar": { + "version": "2.1.8", + "resolved": "https://registry.npm.taobao.org/chokidar/download/chokidar-2.1.8.tgz", + "integrity": "sha1-gEs6e2qZNYw8XGHnHYco8EHP+Rc=", + "dev": true, + "requires": { + "anymatch": "^2.0.0", + "async-each": "^1.0.1", + "braces": "^2.3.2", + "fsevents": "^1.2.7", + "glob-parent": "^3.1.0", + "inherits": "^2.0.3", + "is-binary-path": "^1.0.0", + "is-glob": "^4.0.0", + "normalize-path": "^3.0.0", + "path-is-absolute": "^1.0.0", + "readdirp": "^2.2.1", + "upath": "^1.1.1" + } + }, + "core-js": { + "version": "2.6.11", + "resolved": "https://registry.npm.taobao.org/core-js/download/core-js-2.6.11.tgz?cache=0&sync_timestamp=1577253942551&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcore-js%2Fdownload%2Fcore-js-2.6.11.tgz", + "integrity": "sha1-OIMUafmSK97Y7iHJ3EaYXgOZMIw=", + "dev": true + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npm.taobao.org/extend-shallow/download/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + }, + "fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npm.taobao.org/fill-range/download/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "dev": true, + "requires": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + } + }, + "fsevents": { + "version": "1.2.11", + "resolved": "https://registry.npm.taobao.org/fsevents/download/fsevents-1.2.11.tgz?cache=0&sync_timestamp=1576323112997&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffsevents%2Fdownload%2Ffsevents-1.2.11.tgz", + "integrity": "sha1-Z79X9HWPAu3oj7KhcS/vTRU1i+M=", + "dev": true, + "optional": true, + "requires": { + "bindings": "^1.5.0", + "nan": "^2.12.1", + "node-pre-gyp": "*" + }, + "dependencies": { + "abbrev": { + "version": "1.1.1", + "bundled": true, + "dev": true, + "optional": true + }, + "ansi-regex": { + "version": "2.1.1", + "bundled": true, + "dev": true, + "optional": true + }, + "aproba": { + "version": "1.2.0", + "bundled": true, + "dev": true, + "optional": true + }, + "are-we-there-yet": { + "version": "1.1.5", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "delegates": "^1.0.0", + "readable-stream": "^2.0.6" + } + }, + "balanced-match": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "brace-expansion": { + "version": "1.1.11", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "chownr": { + "version": "1.1.3", + "bundled": true, + "dev": true, + "optional": true + }, + "code-point-at": { + "version": "1.1.0", + "bundled": true, + "dev": true, + "optional": true + }, + "concat-map": { + "version": "0.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "console-control-strings": { + "version": "1.1.0", + "bundled": true, + "dev": true, + "optional": true + }, + "core-util-is": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "debug": { + "version": "3.2.6", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "ms": "^2.1.1" + } + }, + "deep-extend": { + "version": "0.6.0", + "bundled": true, + "dev": true, + "optional": true + }, + "delegates": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "detect-libc": { + "version": "1.0.3", + "bundled": true, + "dev": true, + "optional": true + }, + "fs-minipass": { + "version": "1.2.7", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "minipass": "^2.6.0" + } + }, + "fs.realpath": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "gauge": { + "version": "2.7.4", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "aproba": "^1.0.3", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.0", + "object-assign": "^4.1.0", + "signal-exit": "^3.0.0", + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wide-align": "^1.1.0" + } + }, + "glob": { + "version": "7.1.6", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "has-unicode": { + "version": "2.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "iconv-lite": { + "version": "0.4.24", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "ignore-walk": { + "version": "3.0.3", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "minimatch": "^3.0.4" + } + }, + "inflight": { + "version": "1.0.6", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4", + "bundled": true, + "dev": true, + "optional": true + }, + "ini": { + "version": "1.3.5", + "bundled": true, + "dev": true, + "optional": true + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "isarray": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "minimatch": { + "version": "3.0.4", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "0.0.8", + "bundled": true, + "dev": true, + "optional": true + }, + "minipass": { + "version": "2.9.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "safe-buffer": "^5.1.2", + "yallist": "^3.0.0" + } + }, + "minizlib": { + "version": "1.3.3", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "minipass": "^2.9.0" + } + }, + "mkdirp": { + "version": "0.5.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "minimist": "0.0.8" + } + }, + "ms": { + "version": "2.1.2", + "bundled": true, + "dev": true, + "optional": true + }, + "needle": { + "version": "2.4.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "debug": "^3.2.6", + "iconv-lite": "^0.4.4", + "sax": "^1.2.4" + } + }, + "node-pre-gyp": { + "version": "0.14.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "detect-libc": "^1.0.2", + "mkdirp": "^0.5.1", + "needle": "^2.2.1", + "nopt": "^4.0.1", + "npm-packlist": "^1.1.6", + "npmlog": "^4.0.2", + "rc": "^1.2.7", + "rimraf": "^2.6.1", + "semver": "^5.3.0", + "tar": "^4.4.2" + } + }, + "nopt": { + "version": "4.0.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "abbrev": "1", + "osenv": "^0.1.4" + } + }, + "npm-bundled": { + "version": "1.1.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "npm-normalize-package-bin": "^1.0.1" + } + }, + "npm-normalize-package-bin": { + "version": "1.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "npm-packlist": { + "version": "1.4.7", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "ignore-walk": "^3.0.1", + "npm-bundled": "^1.0.1" + } + }, + "npmlog": { + "version": "4.1.2", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "are-we-there-yet": "~1.1.2", + "console-control-strings": "~1.1.0", + "gauge": "~2.7.3", + "set-blocking": "~2.0.0" + } + }, + "number-is-nan": { + "version": "1.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "object-assign": { + "version": "4.1.1", + "bundled": true, + "dev": true, + "optional": true + }, + "once": { + "version": "1.4.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "wrappy": "1" + } + }, + "os-homedir": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "os-tmpdir": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "osenv": { + "version": "0.1.5", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.0" + } + }, + "path-is-absolute": { + "version": "1.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "process-nextick-args": { + "version": "2.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "rc": { + "version": "1.2.8", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + }, + "dependencies": { + "minimist": { + "version": "1.2.0", + "bundled": true, + "dev": true, + "optional": true + } + } + }, + "readable-stream": { + "version": "2.3.6", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "rimraf": { + "version": "2.7.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "glob": "^7.1.3" + } + }, + "safe-buffer": { + "version": "5.1.2", + "bundled": true, + "dev": true, + "optional": true + }, + "safer-buffer": { + "version": "2.1.2", + "bundled": true, + "dev": true, + "optional": true + }, + "sax": { + "version": "1.2.4", + "bundled": true, + "dev": true, + "optional": true + }, + "semver": { + "version": "5.7.1", + "bundled": true, + "dev": true, + "optional": true + }, + "set-blocking": { + "version": "2.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "signal-exit": { + "version": "3.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "string-width": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + }, + "string_decoder": { + "version": "1.1.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "safe-buffer": "~5.1.0" + } + }, + "strip-ansi": { + "version": "3.0.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "strip-json-comments": { + "version": "2.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "tar": { + "version": "4.4.13", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "chownr": "^1.1.1", + "fs-minipass": "^1.2.5", + "minipass": "^2.8.6", + "minizlib": "^1.2.1", + "mkdirp": "^0.5.0", + "safe-buffer": "^5.1.2", + "yallist": "^3.0.3" + } + }, + "util-deprecate": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "wide-align": { + "version": "1.1.3", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "string-width": "^1.0.2 || 2" + } + }, + "wrappy": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "yallist": { + "version": "3.1.1", + "bundled": true, + "dev": true, + "optional": true + } + } + }, + "is-binary-path": { + "version": "1.0.1", + "resolved": "https://registry.npm.taobao.org/is-binary-path/download/is-binary-path-1.0.1.tgz", + "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", + "dev": true, + "requires": { + "binary-extensions": "^1.0.0" + } + }, + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npm.taobao.org/is-number/download/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + } + }, + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npm.taobao.org/kind-of/download/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + }, + "mime": { + "version": "2.4.4", + "resolved": "https://registry.npm.taobao.org/mime/download/mime-2.4.4.tgz", + "integrity": "sha1-vXuRE1/GsBzePpuuM9ZZtj2IV+U=", + "dev": true + }, + "readdirp": { + "version": "2.2.1", + "resolved": "https://registry.npm.taobao.org/readdirp/download/readdirp-2.2.1.tgz", + "integrity": "sha1-DodiKjMlqjPokihcr4tOhGUppSU=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.11", + "micromatch": "^3.1.10", + "readable-stream": "^2.0.2" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.6.1.tgz", + "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=", + "dev": true + }, + "to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npm.taobao.org/to-regex-range/download/to-regex-range-2.1.1.tgz", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "dev": true, + "requires": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + } + } + } + }, + "karma-chrome-launcher": { + "version": "2.2.0", + "resolved": "https://registry.npm.taobao.org/karma-chrome-launcher/download/karma-chrome-launcher-2.2.0.tgz", + "integrity": "sha1-zxudBxNswY/iOTJ9JGVMPbw2is8=", + "dev": true, + "requires": { + "fs-access": "^1.0.0", + "which": "^1.2.1" + } + }, + "karma-coverage-istanbul-reporter": { + "version": "2.0.6", + "resolved": "https://registry.npm.taobao.org/karma-coverage-istanbul-reporter/download/karma-coverage-istanbul-reporter-2.0.6.tgz", + "integrity": "sha1-e26ciHgUR7uHqmrCS/dLk+VYrcM=", + "dev": true, + "requires": { + "istanbul-api": "^2.1.6", + "minimatch": "^3.0.4" + } + }, + "karma-jasmine": { + "version": "2.0.1", + "resolved": "https://registry.npm.taobao.org/karma-jasmine/download/karma-jasmine-2.0.1.tgz", + "integrity": "sha1-JuPjHy+vJy3YDrsOGJiRTMOhl2M=", + "dev": true, + "requires": { + "jasmine-core": "^3.3" + } + }, + "karma-jasmine-html-reporter": { + "version": "1.5.1", + "resolved": "https://registry.npm.taobao.org/karma-jasmine-html-reporter/download/karma-jasmine-html-reporter-1.5.1.tgz?cache=0&sync_timestamp=1577250900227&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fkarma-jasmine-html-reporter%2Fdownload%2Fkarma-jasmine-html-reporter-1.5.1.tgz", + "integrity": "sha1-D60tKsQWvARyQxiq0puJvYb3v7w=", + "dev": true + }, + "karma-source-map-support": { + "version": "1.4.0", + "resolved": "https://registry.npm.taobao.org/karma-source-map-support/download/karma-source-map-support-1.4.0.tgz", + "integrity": "sha1-WFJs7M9+hzDlbv/Zek3o1xKsDWs=", + "dev": true, + "requires": { + "source-map-support": "^0.5.5" + } + }, + "killable": { + "version": "1.0.1", + "resolved": "https://registry.npm.taobao.org/killable/download/killable-1.0.1.tgz", + "integrity": "sha1-TIzkQRh6Bhx0dPuHygjipjgZSJI=", + "dev": true + }, + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npm.taobao.org/kind-of/download/kind-of-6.0.2.tgz", + "integrity": "sha1-ARRrNqYhjmTljzqNZt5df8b20FE=", + "dev": true + }, + "lcid": { + "version": "2.0.0", + "resolved": "https://registry.npm.taobao.org/lcid/download/lcid-2.0.0.tgz", + "integrity": "sha1-bvXS32DlL4LrIopMNz6NHzlyU88=", + "dev": true, + "requires": { + "invert-kv": "^2.0.0" + } + }, + "less": { + "version": "3.10.3", + "resolved": "https://registry.npm.taobao.org/less/download/less-3.10.3.tgz", + "integrity": "sha1-QXoJddXu7MUs/0vPo8CdNXgeZ5I=", + "dev": true, + "requires": { + "clone": "^2.1.2", + "errno": "^0.1.1", + "graceful-fs": "^4.1.2", + "image-size": "~0.5.0", + "mime": "^1.4.1", + "mkdirp": "^0.5.0", + "promise": "^7.1.1", + "request": "^2.83.0", + "source-map": "~0.6.0" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.6.1.tgz", + "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=", + "dev": true, + "optional": true + } + } + }, + "less-loader": { + "version": "5.0.0", + "resolved": "https://registry.npm.taobao.org/less-loader/download/less-loader-5.0.0.tgz", + "integrity": "sha1-SY3eOmxsT4h0WO6e0/CGoSrRtGY=", + "dev": true, + "requires": { + "clone": "^2.1.1", + "loader-utils": "^1.1.0", + "pify": "^4.0.1" + } + }, + "license-webpack-plugin": { + "version": "2.1.3", + "resolved": "https://registry.npm.taobao.org/license-webpack-plugin/download/license-webpack-plugin-2.1.3.tgz?cache=0&sync_timestamp=1571015436334&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Flicense-webpack-plugin%2Fdownload%2Flicense-webpack-plugin-2.1.3.tgz", + "integrity": "sha1-ZW+mqLLnEe41wnrI4WWahyQO9/M=", + "dev": true, + "requires": { + "@types/webpack-sources": "^0.1.5", + "webpack-sources": "^1.2.0" + } + }, + "lie": { + "version": "3.3.0", + "resolved": "https://registry.npm.taobao.org/lie/download/lie-3.3.0.tgz", + "integrity": "sha1-3Pgt7lRfRgdNryAMfBxaCOD0D2o=", + "dev": true, + "requires": { + "immediate": "~3.0.5" + } + }, + "lineclip": { + "version": "1.1.5", + "resolved": "https://registry.npm.taobao.org/lineclip/download/lineclip-1.1.5.tgz", + "integrity": "sha1-K/JgZ9lDVP6r+R5CdoI221YW/RM=" + }, + "loader-runner": { + "version": "2.4.0", + "resolved": "https://registry.npm.taobao.org/loader-runner/download/loader-runner-2.4.0.tgz?cache=0&sync_timestamp=1574712695617&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Floader-runner%2Fdownload%2Floader-runner-2.4.0.tgz", + "integrity": "sha1-7UcGa/5TTX6ExMe5mYwqdWB9k1c=", + "dev": true + }, + "loader-utils": { + "version": "1.2.3", + "resolved": "https://registry.npm.taobao.org/loader-utils/download/loader-utils-1.2.3.tgz", + "integrity": "sha1-H/XcaRHJ8KBiUxpMBLYJQGEIwsc=", + "dev": true, + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^2.0.0", + "json5": "^1.0.1" + } + }, + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npm.taobao.org/locate-path/download/locate-path-3.0.0.tgz", + "integrity": "sha1-2+w7OrdZdYBxtY/ln8QYca8hQA4=", + "dev": true, + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + } + }, + "lodash": { + "version": "4.17.15", + "resolved": "https://registry.npm.taobao.org/lodash/download/lodash-4.17.15.tgz", + "integrity": "sha1-tEf2ZwoEVbv+7dETku/zMOoJdUg=" + }, + "lodash.camelcase": { + "version": "4.3.0", + "resolved": "https://registry.npm.taobao.org/lodash.camelcase/download/lodash.camelcase-4.3.0.tgz", + "integrity": "sha1-soqmKIorn8ZRA1x3EfZathkDMaY=" + }, + "lodash.clone": { + "version": "4.5.0", + "resolved": "https://registry.npm.taobao.org/lodash.clone/download/lodash.clone-4.5.0.tgz", + "integrity": "sha1-GVhwRQ9aExkkeN9Lw9I9LeoZB7Y=" + }, + "lodash.clonedeep": { + "version": "4.5.0", + "resolved": "https://registry.npm.taobao.org/lodash.clonedeep/download/lodash.clonedeep-4.5.0.tgz", + "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=", + "dev": true + }, + "lodash.memoize": { + "version": "4.1.2", + "resolved": "https://registry.npm.taobao.org/lodash.memoize/download/lodash.memoize-4.1.2.tgz", + "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=", + "dev": true + }, + "lodash.uniq": { + "version": "4.5.0", + "resolved": "https://registry.npm.taobao.org/lodash.uniq/download/lodash.uniq-4.5.0.tgz", + "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=", + "dev": true + }, + "log-symbols": { + "version": "3.0.0", + "resolved": "https://registry.npm.taobao.org/log-symbols/download/log-symbols-3.0.0.tgz", + "integrity": "sha1-86CFFqXeqJMzan3uFNGKHP2rd8Q=", + "dev": true, + "requires": { + "chalk": "^2.4.2" + } + }, + "log4js": { + "version": "4.5.1", + "resolved": "https://registry.npm.taobao.org/log4js/download/log4js-4.5.1.tgz", + "integrity": "sha1-5UNiXpfZ5vPm58n8GW3WqyyuMLU=", + "dev": true, + "requires": { + "date-format": "^2.0.0", + "debug": "^4.1.1", + "flatted": "^2.0.0", + "rfdc": "^1.1.4", + "streamroller": "^1.0.6" + } + }, + "loglevel": { + "version": "1.6.6", + "resolved": "https://registry.npm.taobao.org/loglevel/download/loglevel-1.6.6.tgz?cache=0&sync_timestamp=1573147570728&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Floglevel%2Fdownload%2Floglevel-1.6.6.tgz", + "integrity": "sha1-DuYwDMBY22s1UfocS/c7g7t3ExI=", + "dev": true + }, + "long": { + "version": "4.0.0", + "resolved": "https://registry.npm.taobao.org/long/download/long-4.0.0.tgz", + "integrity": "sha1-mntxz7fTYaGU6lVSQckvdGjVvyg=" + }, + "loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npm.taobao.org/loose-envify/download/loose-envify-1.4.0.tgz", + "integrity": "sha1-ce5R+nvkyuwaY4OffmgtgTLTDK8=", + "dev": true, + "requires": { + "js-tokens": "^3.0.0 || ^4.0.0" + } + }, + "lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npm.taobao.org/lru-cache/download/lru-cache-5.1.1.tgz", + "integrity": "sha1-HaJ+ZxAnGUdpXa9oSOhH8B2EuSA=", + "dev": true, + "requires": { + "yallist": "^3.0.2" + }, + "dependencies": { + "yallist": { + "version": "3.1.1", + "resolved": "https://registry.npm.taobao.org/yallist/download/yallist-3.1.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fyallist%2Fdownload%2Fyallist-3.1.1.tgz", + "integrity": "sha1-27fa+b/YusmrRev2ArjLrQ1dCP0=", + "dev": true + } + } + }, + "magic-string": { + "version": "0.25.4", + "resolved": "https://registry.npm.taobao.org/magic-string/download/magic-string-0.25.4.tgz?cache=0&sync_timestamp=1578578366977&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmagic-string%2Fdownload%2Fmagic-string-0.25.4.tgz", + "integrity": "sha1-MluKCnn8Qj2xCbd/1aGRg7e6UUM=", + "dev": true, + "requires": { + "sourcemap-codec": "^1.4.4" + } + }, + "make-dir": { + "version": "2.1.0", + "resolved": "https://registry.npm.taobao.org/make-dir/download/make-dir-2.1.0.tgz", + "integrity": "sha1-XwMQ4YuL6JjMBwCSlaMK5B6R5vU=", + "dev": true, + "requires": { + "pify": "^4.0.1", + "semver": "^5.6.0" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npm.taobao.org/semver/download/semver-5.7.1.tgz", + "integrity": "sha1-qVT5Ma66UI0we78Gnv8MAclhFvc=", + "dev": true + } + } + }, + "make-error": { + "version": "1.3.5", + "resolved": "https://registry.npm.taobao.org/make-error/download/make-error-1.3.5.tgz", + "integrity": "sha1-7+ToH22yjK3WBccPKcgxtY73dsg=", + "dev": true + }, + "make-fetch-happen": { + "version": "5.0.2", + "resolved": "https://registry.npm.taobao.org/make-fetch-happen/download/make-fetch-happen-5.0.2.tgz?cache=0&sync_timestamp=1576543101528&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmake-fetch-happen%2Fdownload%2Fmake-fetch-happen-5.0.2.tgz", + "integrity": "sha1-qoOHEE8mh+3KAchofuRQE9AtGb0=", + "dev": true, + "requires": { + "agentkeepalive": "^3.4.1", + "cacache": "^12.0.0", + "http-cache-semantics": "^3.8.1", + "http-proxy-agent": "^2.1.0", + "https-proxy-agent": "^2.2.3", + "lru-cache": "^5.1.1", + "mississippi": "^3.0.0", + "node-fetch-npm": "^2.0.2", + "promise-retry": "^1.1.1", + "socks-proxy-agent": "^4.0.0", + "ssri": "^6.0.0" + }, + "dependencies": { + "cacache": { + "version": "12.0.3", + "resolved": "https://registry.npm.taobao.org/cacache/download/cacache-12.0.3.tgz?cache=0&sync_timestamp=1580176348786&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcacache%2Fdownload%2Fcacache-12.0.3.tgz", + "integrity": "sha1-vpmruk4b9d9GHNWiwQcfxDJXM5A=", + "dev": true, + "requires": { + "bluebird": "^3.5.5", + "chownr": "^1.1.1", + "figgy-pudding": "^3.5.1", + "glob": "^7.1.4", + "graceful-fs": "^4.1.15", + "infer-owner": "^1.0.3", + "lru-cache": "^5.1.1", + "mississippi": "^3.0.0", + "mkdirp": "^0.5.1", + "move-concurrently": "^1.0.1", + "promise-inflight": "^1.0.1", + "rimraf": "^2.6.3", + "ssri": "^6.0.1", + "unique-filename": "^1.1.1", + "y18n": "^4.0.0" + } + }, + "ssri": { + "version": "6.0.1", + "resolved": "https://registry.npm.taobao.org/ssri/download/ssri-6.0.1.tgz?cache=0&sync_timestamp=1571961490394&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fssri%2Fdownload%2Fssri-6.0.1.tgz", + "integrity": "sha1-KjxBso3UW2K2Nnbst0ABJlrp7dg=", + "dev": true, + "requires": { + "figgy-pudding": "^3.5.1" + } + } + } + }, + "mamacro": { + "version": "0.0.3", + "resolved": "https://registry.npm.taobao.org/mamacro/download/mamacro-0.0.3.tgz", + "integrity": "sha1-rSyVdhl8nxq/MI0Hh4Zb2XWj8+Q=", + "dev": true + }, + "map-age-cleaner": { + "version": "0.1.3", + "resolved": "https://registry.npm.taobao.org/map-age-cleaner/download/map-age-cleaner-0.1.3.tgz", + "integrity": "sha1-fVg6cwZDTAVf5HSw9FB45uG0uSo=", + "dev": true, + "requires": { + "p-defer": "^1.0.0" + } + }, + "map-cache": { + "version": "0.2.2", + "resolved": "https://registry.npm.taobao.org/map-cache/download/map-cache-0.2.2.tgz", + "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", + "dev": true + }, + "map-visit": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/map-visit/download/map-visit-1.0.0.tgz", + "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", + "dev": true, + "requires": { + "object-visit": "^1.0.0" + } + }, + "md5.js": { + "version": "1.3.5", + "resolved": "https://registry.npm.taobao.org/md5.js/download/md5.js-1.3.5.tgz", + "integrity": "sha1-tdB7jjIW4+J81yjXL3DR5qNCAF8=", + "dev": true, + "requires": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "mdn-data": { + "version": "2.0.4", + "resolved": "https://registry.npm.taobao.org/mdn-data/download/mdn-data-2.0.4.tgz?cache=0&sync_timestamp=1573816302294&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmdn-data%2Fdownload%2Fmdn-data-2.0.4.tgz", + "integrity": "sha1-aZs8OKxvHXKAkaZGULZdOIUC/Vs=", + "dev": true + }, + "media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npm.taobao.org/media-typer/download/media-typer-0.3.0.tgz", + "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=", + "dev": true + }, + "mem": { + "version": "4.3.0", + "resolved": "https://registry.npm.taobao.org/mem/download/mem-4.3.0.tgz", + "integrity": "sha1-Rhr0l7xK4JYIzbLmDu+2m/90QXg=", + "dev": true, + "requires": { + "map-age-cleaner": "^0.1.1", + "mimic-fn": "^2.0.0", + "p-is-promise": "^2.0.0" + } + }, + "memory-fs": { + "version": "0.5.0", + "resolved": "https://registry.npm.taobao.org/memory-fs/download/memory-fs-0.5.0.tgz?cache=0&sync_timestamp=1570537491040&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmemory-fs%2Fdownload%2Fmemory-fs-0.5.0.tgz", + "integrity": "sha1-MkwBKIuIZSlm0WHbd4OHIIRajjw=", + "dev": true, + "requires": { + "errno": "^0.1.3", + "readable-stream": "^2.0.1" + } + }, + "merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npm.taobao.org/merge-descriptors/download/merge-descriptors-1.0.1.tgz", + "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=", + "dev": true + }, + "merge-source-map": { + "version": "1.1.0", + "resolved": "https://registry.npm.taobao.org/merge-source-map/download/merge-source-map-1.1.0.tgz", + "integrity": "sha1-L93n5gIJOfcJBqaPLXrmheTIxkY=", + "dev": true, + "requires": { + "source-map": "^0.6.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.6.1.tgz", + "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=", + "dev": true + } + } + }, + "merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npm.taobao.org/merge-stream/download/merge-stream-2.0.0.tgz", + "integrity": "sha1-UoI2KaFN0AyXcPtq1H3GMQ8sH2A=", + "dev": true + }, + "methods": { + "version": "1.1.2", + "resolved": "https://registry.npm.taobao.org/methods/download/methods-1.1.2.tgz", + "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=", + "dev": true + }, + "micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npm.taobao.org/micromatch/download/micromatch-3.1.10.tgz", + "integrity": "sha1-cIWbyVyYQJUvNZoGij/En57PrCM=", + "dev": true, + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + }, + "dependencies": { + "braces": { + "version": "2.3.2", + "resolved": "https://registry.npm.taobao.org/braces/download/braces-2.3.2.tgz", + "integrity": "sha1-WXn9PxTNUxVl5fot8av/8d+u5yk=", + "dev": true, + "requires": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npm.taobao.org/extend-shallow/download/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npm.taobao.org/fill-range/download/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "dev": true, + "requires": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npm.taobao.org/extend-shallow/download/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npm.taobao.org/is-number/download/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npm.taobao.org/kind-of/download/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npm.taobao.org/to-regex-range/download/to-regex-range-2.1.1.tgz", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "dev": true, + "requires": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + } + } + } + }, + "miller-rabin": { + "version": "4.0.1", + "resolved": "https://registry.npm.taobao.org/miller-rabin/download/miller-rabin-4.0.1.tgz", + "integrity": "sha1-8IA1HIZbDcViqEYpZtqlNUPHik0=", + "dev": true, + "requires": { + "bn.js": "^4.0.0", + "brorand": "^1.0.1" + } + }, + "mime": { + "version": "1.6.0", + "resolved": "https://registry.npm.taobao.org/mime/download/mime-1.6.0.tgz", + "integrity": "sha1-Ms2eXGRVO9WNGaVor0Uqz/BJgbE=", + "dev": true + }, + "mime-db": { + "version": "1.42.0", + "resolved": "https://registry.npm.taobao.org/mime-db/download/mime-db-1.42.0.tgz", + "integrity": "sha1-PiUpB7THrbkGWXtLZWNics+ee6w=", + "dev": true + }, + "mime-types": { + "version": "2.1.25", + "resolved": "https://registry.npm.taobao.org/mime-types/download/mime-types-2.1.25.tgz?cache=0&sync_timestamp=1573568362177&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmime-types%2Fdownload%2Fmime-types-2.1.25.tgz", + "integrity": "sha1-OXctRmIfk+KoCoVsU7hqYhVqZDc=", + "dev": true, + "requires": { + "mime-db": "1.42.0" + } + }, + "mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npm.taobao.org/mimic-fn/download/mimic-fn-2.1.0.tgz", + "integrity": "sha1-ftLCzMyvhNP/y3pptXcR/CCDQBs=", + "dev": true + }, + "mini-css-extract-plugin": { + "version": "0.8.0", + "resolved": "https://registry.npm.taobao.org/mini-css-extract-plugin/download/mini-css-extract-plugin-0.8.0.tgz", + "integrity": "sha1-gdQexP5YxxOpatfHI82y0L1NcOE=", + "dev": true, + "requires": { + "loader-utils": "^1.1.0", + "normalize-url": "1.9.1", + "schema-utils": "^1.0.0", + "webpack-sources": "^1.1.0" + }, + "dependencies": { + "normalize-url": { + "version": "1.9.1", + "resolved": "https://registry.npm.taobao.org/normalize-url/download/normalize-url-1.9.1.tgz", + "integrity": "sha1-LMDWazHqIwNkWENuNiDYWVTGbDw=", + "dev": true, + "requires": { + "object-assign": "^4.0.1", + "prepend-http": "^1.0.0", + "query-string": "^4.1.0", + "sort-keys": "^1.0.0" + } + } + } + }, + "minimalistic-assert": { + "version": "1.0.1", + "resolved": "https://registry.npm.taobao.org/minimalistic-assert/download/minimalistic-assert-1.0.1.tgz", + "integrity": "sha1-LhlN4ERibUoQ5/f7wAznPoPk1cc=", + "dev": true + }, + "minimalistic-crypto-utils": { + "version": "1.0.1", + "resolved": "https://registry.npm.taobao.org/minimalistic-crypto-utils/download/minimalistic-crypto-utils-1.0.1.tgz", + "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=", + "dev": true + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npm.taobao.org/minimatch/download/minimatch-3.0.4.tgz", + "integrity": "sha1-UWbihkV/AzBgZL5Ul+jbsMPTIIM=", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npm.taobao.org/minimist/download/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "dev": true + }, + "minipass": { + "version": "3.1.1", + "resolved": "https://registry.npm.taobao.org/minipass/download/minipass-3.1.1.tgz", + "integrity": "sha1-dgfOd4RyoYWtbYkIKqIHD3nO3NU=", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "minipass-collect": { + "version": "1.0.2", + "resolved": "https://registry.npm.taobao.org/minipass-collect/download/minipass-collect-1.0.2.tgz", + "integrity": "sha1-IrgTv3Rdxu26JXa5QAIq1u3Ixhc=", + "dev": true, + "requires": { + "minipass": "^3.0.0" + } + }, + "minipass-flush": { + "version": "1.0.5", + "resolved": "https://registry.npm.taobao.org/minipass-flush/download/minipass-flush-1.0.5.tgz", + "integrity": "sha1-gucTXX6JpQ/+ZGEKeHlTxMTLs3M=", + "dev": true, + "requires": { + "minipass": "^3.0.0" + } + }, + "minipass-pipeline": { + "version": "1.2.2", + "resolved": "https://registry.npm.taobao.org/minipass-pipeline/download/minipass-pipeline-1.2.2.tgz", + "integrity": "sha1-PctrtKVG4ylpx61xDyx5qGq7qTo=", + "dev": true, + "requires": { + "minipass": "^3.0.0" + } + }, + "minizlib": { + "version": "1.3.3", + "resolved": "https://registry.npm.taobao.org/minizlib/download/minizlib-1.3.3.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fminizlib%2Fdownload%2Fminizlib-1.3.3.tgz", + "integrity": "sha1-IpDeloGKNMKVUcio0wEha9Zahh0=", + "dev": true, + "requires": { + "minipass": "^2.9.0" + }, + "dependencies": { + "minipass": { + "version": "2.9.0", + "resolved": "https://registry.npm.taobao.org/minipass/download/minipass-2.9.0.tgz", + "integrity": "sha1-5xN2Ln0+Mv7YAxFc+T4EvKn8yaY=", + "dev": true, + "requires": { + "safe-buffer": "^5.1.2", + "yallist": "^3.0.0" + } + }, + "yallist": { + "version": "3.1.1", + "resolved": "https://registry.npm.taobao.org/yallist/download/yallist-3.1.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fyallist%2Fdownload%2Fyallist-3.1.1.tgz", + "integrity": "sha1-27fa+b/YusmrRev2ArjLrQ1dCP0=", + "dev": true + } + } + }, + "mississippi": { + "version": "3.0.0", + "resolved": "https://registry.npm.taobao.org/mississippi/download/mississippi-3.0.0.tgz", + "integrity": "sha1-6goykfl+C16HdrNj1fChLZTGcCI=", + "dev": true, + "requires": { + "concat-stream": "^1.5.0", + "duplexify": "^3.4.2", + "end-of-stream": "^1.1.0", + "flush-write-stream": "^1.0.0", + "from2": "^2.1.0", + "parallel-transform": "^1.1.0", + "pump": "^3.0.0", + "pumpify": "^1.3.3", + "stream-each": "^1.1.0", + "through2": "^2.0.0" + } + }, + "mixin-deep": { + "version": "1.3.2", + "resolved": "https://registry.npm.taobao.org/mixin-deep/download/mixin-deep-1.3.2.tgz", + "integrity": "sha1-ESC0PcNZp4Xc5ltVuC4lfM9HlWY=", + "dev": true, + "requires": { + "for-in": "^1.0.2", + "is-extendable": "^1.0.1" + }, + "dependencies": { + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npm.taobao.org/is-extendable/download/is-extendable-1.0.1.tgz", + "integrity": "sha1-p0cPnkJnM9gb2B4RVSZOOjUHyrQ=", + "dev": true, + "requires": { + "is-plain-object": "^2.0.4" + } + } + } + }, + "mkdirp": { + "version": "0.5.1", + "resolved": "https://registry.npm.taobao.org/mkdirp/download/mkdirp-0.5.1.tgz", + "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "dev": true, + "requires": { + "minimist": "0.0.8" + }, + "dependencies": { + "minimist": { + "version": "0.0.8", + "resolved": "https://registry.npm.taobao.org/minimist/download/minimist-0.0.8.tgz", + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", + "dev": true + } + } + }, + "monotone-convex-hull-2d": { + "version": "1.0.1", + "resolved": "https://registry.npm.taobao.org/monotone-convex-hull-2d/download/monotone-convex-hull-2d-1.0.1.tgz", + "integrity": "sha1-R/Xa6t88Sv03dkuqGqh4ekDu4Iw=", + "requires": { + "robust-orientation": "^1.1.3" + } + }, + "move-concurrently": { + "version": "1.0.1", + "resolved": "https://registry.npm.taobao.org/move-concurrently/download/move-concurrently-1.0.1.tgz", + "integrity": "sha1-viwAX9oy4LKa8fBdfEszIUxwH5I=", + "dev": true, + "requires": { + "aproba": "^1.1.1", + "copy-concurrently": "^1.0.0", + "fs-write-stream-atomic": "^1.0.8", + "mkdirp": "^0.5.1", + "rimraf": "^2.5.4", + "run-queue": "^1.0.3" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npm.taobao.org/ms/download/ms-2.1.2.tgz", + "integrity": "sha1-0J0fNXtEP0kzgqjrPM0YOHKuYAk=", + "dev": true + }, + "multicast-dns": { + "version": "6.2.3", + "resolved": "https://registry.npm.taobao.org/multicast-dns/download/multicast-dns-6.2.3.tgz", + "integrity": "sha1-oOx72QVcQoL3kMPIL04o2zsxsik=", + "dev": true, + "requires": { + "dns-packet": "^1.3.1", + "thunky": "^1.0.2" + } + }, + "multicast-dns-service-types": { + "version": "1.1.0", + "resolved": "https://registry.npm.taobao.org/multicast-dns-service-types/download/multicast-dns-service-types-1.1.0.tgz", + "integrity": "sha1-iZ8R2WhuXgXLkbNdXw5jt3PPyQE=", + "dev": true + }, + "mute-stream": { + "version": "0.0.8", + "resolved": "https://registry.npm.taobao.org/mute-stream/download/mute-stream-0.0.8.tgz", + "integrity": "sha1-FjDEKyJR/4HiooPelqVJfqkuXg0=", + "dev": true + }, + "nan": { + "version": "2.14.0", + "resolved": "https://registry.npm.taobao.org/nan/download/nan-2.14.0.tgz", + "integrity": "sha1-eBj3IgJ7JFmobwKV1DTR/CM2xSw=" + }, + "nanomatch": { + "version": "1.2.13", + "resolved": "https://registry.npm.taobao.org/nanomatch/download/nanomatch-1.2.13.tgz", + "integrity": "sha1-uHqKpPwN6P5r6IiVs4mD/yZb0Rk=", + "dev": true, + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "fragment-cache": "^0.2.1", + "is-windows": "^1.0.2", + "kind-of": "^6.0.2", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + } + }, + "negotiator": { + "version": "0.6.2", + "resolved": "https://registry.npm.taobao.org/negotiator/download/negotiator-0.6.2.tgz", + "integrity": "sha1-/qz3zPUlp3rpY0Q2pkiD/+yjRvs=", + "dev": true + }, + "neo-async": { + "version": "2.6.1", + "resolved": "https://registry.npm.taobao.org/neo-async/download/neo-async-2.6.1.tgz", + "integrity": "sha1-rCetpmFn+ohJpq3dg39rGJrSCBw=", + "dev": true + }, + "ng2-file-upload": { + "version": "1.4.0", + "resolved": "https://registry.npm.taobao.org/ng2-file-upload/download/ng2-file-upload-1.4.0.tgz", + "integrity": "sha1-jeoo1XMjTFKvR0rSpAAbM1Jx5cQ=", + "requires": { + "tslib": "^1.9.0" + } + }, + "ngx-countdown": { + "version": "9.0.1", + "resolved": "https://registry.npm.taobao.org/ngx-countdown/download/ngx-countdown-9.0.1.tgz", + "integrity": "sha1-6pbbzbgq9YdPCEkKh2nd+RnjTI0=" + }, + "ngx-echarts": { + "version": "4.2.2", + "resolved": "https://registry.npm.taobao.org/ngx-echarts/download/ngx-echarts-4.2.2.tgz", + "integrity": "sha1-nrX2n5IwhIaeoBTxF5Fc1sw2Y0M=", + "requires": { + "tslib": "^1.9.0" + } + }, + "ngx-perfect-scrollbar": { + "version": "8.0.0", + "resolved": "https://registry.npm.taobao.org/ngx-perfect-scrollbar/download/ngx-perfect-scrollbar-8.0.0.tgz", + "integrity": "sha1-GcG7+bGjbYmwCmj3g045Qn0pGC8=", + "requires": { + "perfect-scrollbar": "^1.4.0", + "resize-observer-polyfill": "^1.5.0" + } + }, + "nice-try": { + "version": "1.0.5", + "resolved": "https://registry.npm.taobao.org/nice-try/download/nice-try-1.0.5.tgz", + "integrity": "sha1-ozeKdpbOfSI+iPybdkvX7xCJ42Y=", + "dev": true + }, + "node-fetch": { + "version": "1.7.3", + "resolved": "https://registry.npm.taobao.org/node-fetch/download/node-fetch-1.7.3.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fnode-fetch%2Fdownload%2Fnode-fetch-1.7.3.tgz", + "integrity": "sha1-mA9vcthSEaU0fGsrwYxbhMPrR+8=", + "requires": { + "encoding": "^0.1.11", + "is-stream": "^1.0.1" + } + }, + "node-fetch-npm": { + "version": "2.0.2", + "resolved": "https://registry.npm.taobao.org/node-fetch-npm/download/node-fetch-npm-2.0.2.tgz", + "integrity": "sha1-cljJBGGC3KNFtCCO2pGNrzNpf/c=", + "dev": true, + "requires": { + "encoding": "^0.1.11", + "json-parse-better-errors": "^1.0.0", + "safe-buffer": "^5.1.1" + } + }, + "node-forge": { + "version": "0.9.0", + "resolved": "https://registry.npm.taobao.org/node-forge/download/node-forge-0.9.0.tgz", + "integrity": "sha1-1iQFDtu0SHStyhK7mlLsY8t4JXk=", + "dev": true + }, + "node-libs-browser": { + "version": "2.2.1", + "resolved": "https://registry.npm.taobao.org/node-libs-browser/download/node-libs-browser-2.2.1.tgz", + "integrity": "sha1-tk9RPRgzhiX5A0bSew0jXmMfZCU=", + "dev": true, + "requires": { + "assert": "^1.1.1", + "browserify-zlib": "^0.2.0", + "buffer": "^4.3.0", + "console-browserify": "^1.1.0", + "constants-browserify": "^1.0.0", + "crypto-browserify": "^3.11.0", + "domain-browser": "^1.1.1", + "events": "^3.0.0", + "https-browserify": "^1.0.0", + "os-browserify": "^0.3.0", + "path-browserify": "0.0.1", + "process": "^0.11.10", + "punycode": "^1.2.4", + "querystring-es3": "^0.2.0", + "readable-stream": "^2.3.3", + "stream-browserify": "^2.0.1", + "stream-http": "^2.7.2", + "string_decoder": "^1.0.0", + "timers-browserify": "^2.0.4", + "tty-browserify": "0.0.0", + "url": "^0.11.0", + "util": "^0.11.0", + "vm-browserify": "^1.0.1" + }, + "dependencies": { + "punycode": { + "version": "1.4.1", + "resolved": "https://registry.npm.taobao.org/punycode/download/punycode-1.4.1.tgz", + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", + "dev": true + } + } + }, + "node-releases": { + "version": "1.1.48", + "resolved": "https://registry.npm.taobao.org/node-releases/download/node-releases-1.1.48.tgz?cache=0&sync_timestamp=1580980678309&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fnode-releases%2Fdownload%2Fnode-releases-1.1.48.tgz", + "integrity": "sha1-f2R/DEU6BJW81ky9R3jCYDXC8Do=", + "dev": true, + "requires": { + "semver": "^6.3.0" + } + }, + "normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npm.taobao.org/normalize-package-data/download/normalize-package-data-2.5.0.tgz", + "integrity": "sha1-5m2xg4sgDB38IzIl0SyzZSDiNKg=", + "dev": true, + "requires": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + }, + "dependencies": { + "hosted-git-info": { + "version": "2.8.5", + "resolved": "https://registry.npm.taobao.org/hosted-git-info/download/hosted-git-info-2.8.5.tgz?cache=0&sync_timestamp=1570493570687&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fhosted-git-info%2Fdownload%2Fhosted-git-info-2.8.5.tgz", + "integrity": "sha1-dZz88sTRVq3lmwst+r3cQqa5xww=", + "dev": true + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npm.taobao.org/semver/download/semver-5.7.1.tgz", + "integrity": "sha1-qVT5Ma66UI0we78Gnv8MAclhFvc=", + "dev": true + } + } + }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npm.taobao.org/normalize-path/download/normalize-path-3.0.0.tgz", + "integrity": "sha1-Dc1p/yOhybEf0JeDFmRKA4ghamU=", + "dev": true + }, + "normalize-range": { + "version": "0.1.2", + "resolved": "https://registry.npm.taobao.org/normalize-range/download/normalize-range-0.1.2.tgz", + "integrity": "sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=", + "dev": true + }, + "normalize-url": { + "version": "3.3.0", + "resolved": "https://registry.npm.taobao.org/normalize-url/download/normalize-url-3.3.0.tgz", + "integrity": "sha1-suHE3E98bVd0PfczpPWXjRhlBVk=", + "dev": true + }, + "npm-bundled": { + "version": "1.1.1", + "resolved": "https://registry.npm.taobao.org/npm-bundled/download/npm-bundled-1.1.1.tgz?cache=0&sync_timestamp=1575936466832&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fnpm-bundled%2Fdownload%2Fnpm-bundled-1.1.1.tgz", + "integrity": "sha1-Ht1XCGWpTNsbyCIHdeKUZsn7I0s=", + "dev": true, + "requires": { + "npm-normalize-package-bin": "^1.0.1" + } + }, + "npm-normalize-package-bin": { + "version": "1.0.1", + "resolved": "https://registry.npm.taobao.org/npm-normalize-package-bin/download/npm-normalize-package-bin-1.0.1.tgz?cache=0&sync_timestamp=1575936472299&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fnpm-normalize-package-bin%2Fdownload%2Fnpm-normalize-package-bin-1.0.1.tgz", + "integrity": "sha1-bnmkHyP9I1wGIyGCKNp9nCO49uI=", + "dev": true + }, + "npm-package-arg": { + "version": "6.1.1", + "resolved": "https://registry.npm.taobao.org/npm-package-arg/download/npm-package-arg-6.1.1.tgz", + "integrity": "sha1-AhaMsKSaK3W/mIooaY3ntSnfXLc=", + "dev": true, + "requires": { + "hosted-git-info": "^2.7.1", + "osenv": "^0.1.5", + "semver": "^5.6.0", + "validate-npm-package-name": "^3.0.0" + }, + "dependencies": { + "hosted-git-info": { + "version": "2.8.5", + "resolved": "https://registry.npm.taobao.org/hosted-git-info/download/hosted-git-info-2.8.5.tgz?cache=0&sync_timestamp=1570493570687&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fhosted-git-info%2Fdownload%2Fhosted-git-info-2.8.5.tgz", + "integrity": "sha1-dZz88sTRVq3lmwst+r3cQqa5xww=", + "dev": true + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npm.taobao.org/semver/download/semver-5.7.1.tgz", + "integrity": "sha1-qVT5Ma66UI0we78Gnv8MAclhFvc=", + "dev": true + } + } + }, + "npm-packlist": { + "version": "1.4.8", + "resolved": "https://registry.npm.taobao.org/npm-packlist/download/npm-packlist-1.4.8.tgz?cache=0&sync_timestamp=1579784145028&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fnpm-packlist%2Fdownload%2Fnpm-packlist-1.4.8.tgz", + "integrity": "sha1-Vu5swTW5+YrT1Rwcldoiu7my7z4=", + "dev": true, + "requires": { + "ignore-walk": "^3.0.1", + "npm-bundled": "^1.0.1", + "npm-normalize-package-bin": "^1.0.1" + } + }, + "npm-pick-manifest": { + "version": "3.0.2", + "resolved": "https://registry.npm.taobao.org/npm-pick-manifest/download/npm-pick-manifest-3.0.2.tgz", + "integrity": "sha1-9Nnl/UviFT5fTl+be+jcQZqZq7c=", + "dev": true, + "requires": { + "figgy-pudding": "^3.5.1", + "npm-package-arg": "^6.0.0", + "semver": "^5.4.1" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npm.taobao.org/semver/download/semver-5.7.1.tgz", + "integrity": "sha1-qVT5Ma66UI0we78Gnv8MAclhFvc=", + "dev": true + } + } + }, + "npm-registry-fetch": { + "version": "4.0.2", + "resolved": "https://registry.npm.taobao.org/npm-registry-fetch/download/npm-registry-fetch-4.0.2.tgz?cache=0&sync_timestamp=1576573503812&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fnpm-registry-fetch%2Fdownload%2Fnpm-registry-fetch-4.0.2.tgz", + "integrity": "sha1-KxQ0+TzL5rY4X45F9F25PhaSHXo=", + "dev": true, + "requires": { + "JSONStream": "^1.3.4", + "bluebird": "^3.5.1", + "figgy-pudding": "^3.4.1", + "lru-cache": "^5.1.1", + "make-fetch-happen": "^5.0.0", + "npm-package-arg": "^6.1.0", + "safe-buffer": "^5.2.0" + }, + "dependencies": { + "safe-buffer": { + "version": "5.2.0", + "resolved": "https://registry.npm.taobao.org/safe-buffer/download/safe-buffer-5.2.0.tgz", + "integrity": "sha1-t02uxJsRSPiMZLaNSbHoFcHy9Rk=", + "dev": true + } + } + }, + "npm-run-path": { + "version": "2.0.2", + "resolved": "https://registry.npm.taobao.org/npm-run-path/download/npm-run-path-2.0.2.tgz?cache=0&sync_timestamp=1577053378987&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fnpm-run-path%2Fdownload%2Fnpm-run-path-2.0.2.tgz", + "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", + "dev": true, + "requires": { + "path-key": "^2.0.0" + } + }, + "nth-check": { + "version": "1.0.2", + "resolved": "https://registry.npm.taobao.org/nth-check/download/nth-check-1.0.2.tgz", + "integrity": "sha1-sr0pXDfj3VijvwcAN2Zjuk2c8Fw=", + "dev": true, + "requires": { + "boolbase": "~1.0.0" + } + }, + "null-check": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/null-check/download/null-check-1.0.0.tgz", + "integrity": "sha1-l33/1xdgErnsMNKjnbXPcqBDnt0=", + "dev": true + }, + "num2fraction": { + "version": "1.2.2", + "resolved": "https://registry.npm.taobao.org/num2fraction/download/num2fraction-1.2.2.tgz", + "integrity": "sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4=", + "dev": true + }, + "number-is-nan": { + "version": "1.0.1", + "resolved": "https://registry.npm.taobao.org/number-is-nan/download/number-is-nan-1.0.1.tgz", + "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=" + }, + "oauth-sign": { + "version": "0.9.0", + "resolved": "https://registry.npm.taobao.org/oauth-sign/download/oauth-sign-0.9.0.tgz", + "integrity": "sha1-R6ewFrqmi1+g7PPe4IqFxnmsZFU=", + "dev": true + }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npm.taobao.org/object-assign/download/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" + }, + "object-component": { + "version": "0.0.3", + "resolved": "https://registry.npm.taobao.org/object-component/download/object-component-0.0.3.tgz", + "integrity": "sha1-8MaapQ78lbhmwYb0AKM3acsvEpE=", + "dev": true + }, + "object-copy": { + "version": "0.1.0", + "resolved": "https://registry.npm.taobao.org/object-copy/download/object-copy-0.1.0.tgz", + "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", + "dev": true, + "requires": { + "copy-descriptor": "^0.1.0", + "define-property": "^0.2.5", + "kind-of": "^3.0.3" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npm.taobao.org/define-property/download/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npm.taobao.org/kind-of/download/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "object-inspect": { + "version": "1.7.0", + "resolved": "https://registry.npm.taobao.org/object-inspect/download/object-inspect-1.7.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fobject-inspect%2Fdownload%2Fobject-inspect-1.7.0.tgz", + "integrity": "sha1-9Pa9GBrXfwBrXs5gvQtvOY/3Smc=" + }, + "object-is": { + "version": "1.0.2", + "resolved": "https://registry.npm.taobao.org/object-is/download/object-is-1.0.2.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fobject-is%2Fdownload%2Fobject-is-1.0.2.tgz", + "integrity": "sha1-a4DrhP5FFJj2UAeYLwNaW0Re3sQ=" + }, + "object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npm.taobao.org/object-keys/download/object-keys-1.1.1.tgz", + "integrity": "sha1-HEfyct8nfzsdrwYWd9nILiMixg4=" + }, + "object-visit": { + "version": "1.0.1", + "resolved": "https://registry.npm.taobao.org/object-visit/download/object-visit-1.0.1.tgz", + "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", + "dev": true, + "requires": { + "isobject": "^3.0.0" + } + }, + "object.assign": { + "version": "4.1.0", + "resolved": "https://registry.npm.taobao.org/object.assign/download/object.assign-4.1.0.tgz", + "integrity": "sha1-lovxEA15Vrs8oIbwBvhGs7xACNo=", + "requires": { + "define-properties": "^1.1.2", + "function-bind": "^1.1.1", + "has-symbols": "^1.0.0", + "object-keys": "^1.0.11" + } + }, + "object.getownpropertydescriptors": { + "version": "2.1.0", + "resolved": "https://registry.npm.taobao.org/object.getownpropertydescriptors/download/object.getownpropertydescriptors-2.1.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fobject.getownpropertydescriptors%2Fdownload%2Fobject.getownpropertydescriptors-2.1.0.tgz", + "integrity": "sha1-Npvx+VktiridcS3O1cuBx8U1Jkk=", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.0-next.1" + } + }, + "object.pick": { + "version": "1.3.0", + "resolved": "https://registry.npm.taobao.org/object.pick/download/object.pick-1.3.0.tgz", + "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", + "dev": true, + "requires": { + "isobject": "^3.0.1" + } + }, + "object.values": { + "version": "1.1.1", + "resolved": "https://registry.npm.taobao.org/object.values/download/object.values-1.1.1.tgz", + "integrity": "sha1-aKmezeNWt+kpWjxeDOMdyMlT3l4=", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.0-next.1", + "function-bind": "^1.1.1", + "has": "^1.0.3" + } + }, + "obuf": { + "version": "1.1.2", + "resolved": "https://registry.npm.taobao.org/obuf/download/obuf-1.1.2.tgz", + "integrity": "sha1-Cb6jND1BhZ69RGKS0RydTbYZCE4=", + "dev": true + }, + "on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npm.taobao.org/on-finished/download/on-finished-2.3.0.tgz", + "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", + "dev": true, + "requires": { + "ee-first": "1.1.1" + } + }, + "on-headers": { + "version": "1.0.2", + "resolved": "https://registry.npm.taobao.org/on-headers/download/on-headers-1.0.2.tgz", + "integrity": "sha1-dysK5qqlJcOZ5Imt+tkMQD6zwo8=", + "dev": true + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npm.taobao.org/once/download/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, + "requires": { + "wrappy": "1" + } + }, + "onetime": { + "version": "5.1.0", + "resolved": "https://registry.npm.taobao.org/onetime/download/onetime-5.1.0.tgz", + "integrity": "sha1-//DzyRYX/mK7UBiWNumayKbfe+U=", + "dev": true, + "requires": { + "mimic-fn": "^2.1.0" + } + }, + "open": { + "version": "7.0.0", + "resolved": "https://registry.npm.taobao.org/open/download/open-7.0.0.tgz", + "integrity": "sha1-flKZmxTrc/kPDwgH/pOJfErnPsk=", + "dev": true, + "requires": { + "is-wsl": "^2.1.0" + } + }, + "opn": { + "version": "5.5.0", + "resolved": "https://registry.npm.taobao.org/opn/download/opn-5.5.0.tgz", + "integrity": "sha1-/HFk+rVtI1kExRw7J9pnWMo7m/w=", + "dev": true, + "requires": { + "is-wsl": "^1.1.0" + }, + "dependencies": { + "is-wsl": { + "version": "1.1.0", + "resolved": "https://registry.npm.taobao.org/is-wsl/download/is-wsl-1.1.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-wsl%2Fdownload%2Fis-wsl-1.1.0.tgz", + "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=", + "dev": true + } + } + }, + "optimist": { + "version": "0.6.1", + "resolved": "https://registry.npm.taobao.org/optimist/download/optimist-0.6.1.tgz", + "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=", + "dev": true, + "requires": { + "minimist": "~0.0.1", + "wordwrap": "~0.0.2" + }, + "dependencies": { + "minimist": { + "version": "0.0.10", + "resolved": "https://registry.npm.taobao.org/minimist/download/minimist-0.0.10.tgz", + "integrity": "sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8=", + "dev": true + } + } + }, + "optjs": { + "version": "3.2.2", + "resolved": "https://registry.npm.taobao.org/optjs/download/optjs-3.2.2.tgz", + "integrity": "sha1-aabOicRCpEQDFBrS+bNwvVu29O4=" + }, + "ora": { + "version": "4.0.2", + "resolved": "https://registry.npm.taobao.org/ora/download/ora-4.0.2.tgz", + "integrity": "sha1-Dh5o/UWxNdKGSLJ88ICB+m6KKX0=", + "dev": true, + "requires": { + "chalk": "^2.4.2", + "cli-cursor": "^3.1.0", + "cli-spinners": "^2.2.0", + "is-interactive": "^1.0.0", + "log-symbols": "^3.0.0", + "strip-ansi": "^5.2.0", + "wcwidth": "^1.0.1" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npm.taobao.org/ansi-regex/download/ansi-regex-4.1.0.tgz", + "integrity": "sha1-i5+PCM8ay4Q3Vqg5yox+MWjFGZc=", + "dev": true + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npm.taobao.org/strip-ansi/download/strip-ansi-5.2.0.tgz", + "integrity": "sha1-jJpTb+tq/JYr36WxBKUJHBrZwK4=", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" + } + } + } + }, + "original": { + "version": "1.0.2", + "resolved": "https://registry.npm.taobao.org/original/download/original-1.0.2.tgz", + "integrity": "sha1-5EKmHP/hxf0gpl8yYcJmY7MD8l8=", + "dev": true, + "requires": { + "url-parse": "^1.4.3" + } + }, + "os-browserify": { + "version": "0.3.0", + "resolved": "https://registry.npm.taobao.org/os-browserify/download/os-browserify-0.3.0.tgz", + "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=", + "dev": true + }, + "os-homedir": { + "version": "1.0.2", + "resolved": "https://registry.npm.taobao.org/os-homedir/download/os-homedir-1.0.2.tgz", + "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", + "dev": true + }, + "os-locale": { + "version": "3.1.0", + "resolved": "https://registry.npm.taobao.org/os-locale/download/os-locale-3.1.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fos-locale%2Fdownload%2Fos-locale-3.1.0.tgz", + "integrity": "sha1-qAKm7hfyTBBIOrmTVxnO9O0Wvxo=", + "dev": true, + "requires": { + "execa": "^1.0.0", + "lcid": "^2.0.0", + "mem": "^4.0.0" + } + }, + "os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npm.taobao.org/os-tmpdir/download/os-tmpdir-1.0.2.tgz", + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", + "dev": true + }, + "osenv": { + "version": "0.1.5", + "resolved": "https://registry.npm.taobao.org/osenv/download/osenv-0.1.5.tgz", + "integrity": "sha1-hc36+uso6Gd/QW4odZK18/SepBA=", + "dev": true, + "requires": { + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.0" + } + }, + "p-defer": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/p-defer/download/p-defer-1.0.0.tgz", + "integrity": "sha1-n26xgvbJqozXQwBKfU+WsZaw+ww=", + "dev": true + }, + "p-finally": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/p-finally/download/p-finally-1.0.0.tgz", + "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", + "dev": true + }, + "p-is-promise": { + "version": "2.1.0", + "resolved": "https://registry.npm.taobao.org/p-is-promise/download/p-is-promise-2.1.0.tgz", + "integrity": "sha1-kYzrrqJIpiz3/6uOO8qMX4gvxC4=", + "dev": true + }, + "p-limit": { + "version": "2.2.2", + "resolved": "https://registry.npm.taobao.org/p-limit/download/p-limit-2.2.2.tgz?cache=0&sync_timestamp=1577904187480&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fp-limit%2Fdownload%2Fp-limit-2.2.2.tgz", + "integrity": "sha1-YSebZ3IfUoeqHBOpp/u8SMkpGx4=", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npm.taobao.org/p-locate/download/p-locate-3.0.0.tgz", + "integrity": "sha1-Mi1poFwCZLJZl9n0DNiokasAZKQ=", + "dev": true, + "requires": { + "p-limit": "^2.0.0" + } + }, + "p-map": { + "version": "3.0.0", + "resolved": "https://registry.npm.taobao.org/p-map/download/p-map-3.0.0.tgz?cache=0&sync_timestamp=1563032875018&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fp-map%2Fdownload%2Fp-map-3.0.0.tgz", + "integrity": "sha1-1wTZr4orpoTiYA2aIVmD1BQal50=", + "dev": true, + "requires": { + "aggregate-error": "^3.0.0" + } + }, + "p-retry": { + "version": "3.0.1", + "resolved": "https://registry.npm.taobao.org/p-retry/download/p-retry-3.0.1.tgz", + "integrity": "sha1-MWtMiJPiyNwc+okfQGxLQivr8yg=", + "dev": true, + "requires": { + "retry": "^0.12.0" + } + }, + "p-try": { + "version": "2.2.0", + "resolved": "https://registry.npm.taobao.org/p-try/download/p-try-2.2.0.tgz", + "integrity": "sha1-yyhoVA4xPWHeWPr741zpAE1VQOY=", + "dev": true + }, + "pacote": { + "version": "9.5.8", + "resolved": "https://registry.npm.taobao.org/pacote/download/pacote-9.5.8.tgz", + "integrity": "sha1-I0gO/cT6dFFYVcns85z2QHj5l4Y=", + "dev": true, + "requires": { + "bluebird": "^3.5.3", + "cacache": "^12.0.2", + "chownr": "^1.1.2", + "figgy-pudding": "^3.5.1", + "get-stream": "^4.1.0", + "glob": "^7.1.3", + "infer-owner": "^1.0.4", + "lru-cache": "^5.1.1", + "make-fetch-happen": "^5.0.0", + "minimatch": "^3.0.4", + "minipass": "^2.3.5", + "mississippi": "^3.0.0", + "mkdirp": "^0.5.1", + "normalize-package-data": "^2.4.0", + "npm-package-arg": "^6.1.0", + "npm-packlist": "^1.1.12", + "npm-pick-manifest": "^3.0.0", + "npm-registry-fetch": "^4.0.0", + "osenv": "^0.1.5", + "promise-inflight": "^1.0.1", + "promise-retry": "^1.1.1", + "protoduck": "^5.0.1", + "rimraf": "^2.6.2", + "safe-buffer": "^5.1.2", + "semver": "^5.6.0", + "ssri": "^6.0.1", + "tar": "^4.4.10", + "unique-filename": "^1.1.1", + "which": "^1.3.1" + }, + "dependencies": { + "cacache": { + "version": "12.0.3", + "resolved": "https://registry.npm.taobao.org/cacache/download/cacache-12.0.3.tgz?cache=0&sync_timestamp=1580176348786&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcacache%2Fdownload%2Fcacache-12.0.3.tgz", + "integrity": "sha1-vpmruk4b9d9GHNWiwQcfxDJXM5A=", + "dev": true, + "requires": { + "bluebird": "^3.5.5", + "chownr": "^1.1.1", + "figgy-pudding": "^3.5.1", + "glob": "^7.1.4", + "graceful-fs": "^4.1.15", + "infer-owner": "^1.0.3", + "lru-cache": "^5.1.1", + "mississippi": "^3.0.0", + "mkdirp": "^0.5.1", + "move-concurrently": "^1.0.1", + "promise-inflight": "^1.0.1", + "rimraf": "^2.6.3", + "ssri": "^6.0.1", + "unique-filename": "^1.1.1", + "y18n": "^4.0.0" + } + }, + "minipass": { + "version": "2.9.0", + "resolved": "https://registry.npm.taobao.org/minipass/download/minipass-2.9.0.tgz", + "integrity": "sha1-5xN2Ln0+Mv7YAxFc+T4EvKn8yaY=", + "dev": true, + "requires": { + "safe-buffer": "^5.1.2", + "yallist": "^3.0.0" + } + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npm.taobao.org/semver/download/semver-5.7.1.tgz", + "integrity": "sha1-qVT5Ma66UI0we78Gnv8MAclhFvc=", + "dev": true + }, + "ssri": { + "version": "6.0.1", + "resolved": "https://registry.npm.taobao.org/ssri/download/ssri-6.0.1.tgz?cache=0&sync_timestamp=1571961490394&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fssri%2Fdownload%2Fssri-6.0.1.tgz", + "integrity": "sha1-KjxBso3UW2K2Nnbst0ABJlrp7dg=", + "dev": true, + "requires": { + "figgy-pudding": "^3.5.1" + } + }, + "yallist": { + "version": "3.1.1", + "resolved": "https://registry.npm.taobao.org/yallist/download/yallist-3.1.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fyallist%2Fdownload%2Fyallist-3.1.1.tgz", + "integrity": "sha1-27fa+b/YusmrRev2ArjLrQ1dCP0=", + "dev": true + } + } + }, + "pako": { + "version": "1.0.10", + "resolved": "https://registry.npm.taobao.org/pako/download/pako-1.0.10.tgz", + "integrity": "sha1-Qyi621CGpCaqkPVBl31JVdpclzI=", + "dev": true + }, + "parallel-transform": { + "version": "1.2.0", + "resolved": "https://registry.npm.taobao.org/parallel-transform/download/parallel-transform-1.2.0.tgz", + "integrity": "sha1-kEnKN9bLIYLDsdLHIL6U0UpYFPw=", + "dev": true, + "requires": { + "cyclist": "^1.0.1", + "inherits": "^2.0.3", + "readable-stream": "^2.1.5" + } + }, + "parse-asn1": { + "version": "5.1.5", + "resolved": "https://registry.npm.taobao.org/parse-asn1/download/parse-asn1-5.1.5.tgz", + "integrity": "sha1-ADJxND2ljclMrOSU+u89IUfs6g4=", + "dev": true, + "requires": { + "asn1.js": "^4.0.0", + "browserify-aes": "^1.0.0", + "create-hash": "^1.1.0", + "evp_bytestokey": "^1.0.0", + "pbkdf2": "^3.0.3", + "safe-buffer": "^5.1.1" + } + }, + "parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npm.taobao.org/parse-json/download/parse-json-4.0.0.tgz", + "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", + "dev": true, + "requires": { + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" + } + }, + "parse5": { + "version": "4.0.0", + "resolved": "https://registry.npm.taobao.org/parse5/download/parse5-4.0.0.tgz?cache=0&sync_timestamp=1573036762880&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fparse5%2Fdownload%2Fparse5-4.0.0.tgz", + "integrity": "sha1-bXhlbj2o14tOwLkG98CO8d/j9gg=", + "dev": true + }, + "parseqs": { + "version": "0.0.5", + "resolved": "https://registry.npm.taobao.org/parseqs/download/parseqs-0.0.5.tgz", + "integrity": "sha1-1SCKNzjkZ2bikbouoXNoSSGouJ0=", + "dev": true, + "requires": { + "better-assert": "~1.0.0" + } + }, + "parseuri": { + "version": "0.0.5", + "resolved": "https://registry.npm.taobao.org/parseuri/download/parseuri-0.0.5.tgz?cache=0&sync_timestamp=1568821215232&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fparseuri%2Fdownload%2Fparseuri-0.0.5.tgz", + "integrity": "sha1-gCBKUNTbt3m/3G6+J3jZDkvOMgo=", + "dev": true, + "requires": { + "better-assert": "~1.0.0" + } + }, + "parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npm.taobao.org/parseurl/download/parseurl-1.3.3.tgz", + "integrity": "sha1-naGee+6NEt/wUT7Vt2lXeTvC6NQ=", + "dev": true + }, + "pascalcase": { + "version": "0.1.1", + "resolved": "https://registry.npm.taobao.org/pascalcase/download/pascalcase-0.1.1.tgz", + "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", + "dev": true + }, + "path-browserify": { + "version": "0.0.1", + "resolved": "https://registry.npm.taobao.org/path-browserify/download/path-browserify-0.0.1.tgz", + "integrity": "sha1-5sTd1+06onxoogzE5Q4aTug7vEo=", + "dev": true + }, + "path-dirname": { + "version": "1.0.2", + "resolved": "https://registry.npm.taobao.org/path-dirname/download/path-dirname-1.0.2.tgz", + "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=", + "dev": true + }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npm.taobao.org/path-exists/download/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npm.taobao.org/path-is-absolute/download/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true + }, + "path-is-inside": { + "version": "1.0.2", + "resolved": "https://registry.npm.taobao.org/path-is-inside/download/path-is-inside-1.0.2.tgz", + "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=", + "dev": true + }, + "path-key": { + "version": "2.0.1", + "resolved": "https://registry.npm.taobao.org/path-key/download/path-key-2.0.1.tgz?cache=0&sync_timestamp=1574441376633&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpath-key%2Fdownload%2Fpath-key-2.0.1.tgz", + "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", + "dev": true + }, + "path-parse": { + "version": "1.0.6", + "resolved": "https://registry.npm.taobao.org/path-parse/download/path-parse-1.0.6.tgz", + "integrity": "sha1-1i27VnlAXXLEc37FhgDp3c8G0kw=", + "dev": true + }, + "path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npm.taobao.org/path-to-regexp/download/path-to-regexp-0.1.7.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpath-to-regexp%2Fdownload%2Fpath-to-regexp-0.1.7.tgz", + "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=", + "dev": true + }, + "path-type": { + "version": "3.0.0", + "resolved": "https://registry.npm.taobao.org/path-type/download/path-type-3.0.0.tgz", + "integrity": "sha1-zvMdyOCho7sNEFwM2Xzzv0f0428=", + "dev": true, + "requires": { + "pify": "^3.0.0" + }, + "dependencies": { + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npm.taobao.org/pify/download/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true + } + } + }, + "pbkdf2": { + "version": "3.0.17", + "resolved": "https://registry.npm.taobao.org/pbkdf2/download/pbkdf2-3.0.17.tgz", + "integrity": "sha1-l2wgZTBhexTrsyEUI597CTNuk6Y=", + "dev": true, + "requires": { + "create-hash": "^1.1.2", + "create-hmac": "^1.1.4", + "ripemd160": "^2.0.1", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + } + }, + "perfect-scrollbar": { + "version": "1.5.0", + "resolved": "https://registry.npm.taobao.org/perfect-scrollbar/download/perfect-scrollbar-1.5.0.tgz", + "integrity": "sha1-gh0iTtj/YZkMI/JttjBIzcdba4M=" + }, + "performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npm.taobao.org/performance-now/download/performance-now-2.1.0.tgz", + "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", + "dev": true + }, + "picomatch": { + "version": "2.2.1", + "resolved": "https://registry.npm.taobao.org/picomatch/download/picomatch-2.2.1.tgz", + "integrity": "sha1-IbrIiLbthgH4Mc54FuM1vHefCko=", + "dev": true + }, + "pify": { + "version": "4.0.1", + "resolved": "https://registry.npm.taobao.org/pify/download/pify-4.0.1.tgz", + "integrity": "sha1-SyzSXFDVmHNcUCkiJP2MbfQeMjE=", + "dev": true + }, + "pinkie": { + "version": "2.0.4", + "resolved": "https://registry.npm.taobao.org/pinkie/download/pinkie-2.0.4.tgz", + "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", + "dev": true + }, + "pinkie-promise": { + "version": "2.0.1", + "resolved": "https://registry.npm.taobao.org/pinkie-promise/download/pinkie-promise-2.0.1.tgz", + "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", + "dev": true, + "requires": { + "pinkie": "^2.0.0" + } + }, + "pkg-dir": { + "version": "3.0.0", + "resolved": "https://registry.npm.taobao.org/pkg-dir/download/pkg-dir-3.0.0.tgz", + "integrity": "sha1-J0kCDyOe2ZCIGx9xIQ1R62UjvqM=", + "dev": true, + "requires": { + "find-up": "^3.0.0" + } + }, + "point-in-polygon": { + "version": "1.0.1", + "resolved": "https://registry.npm.taobao.org/point-in-polygon/download/point-in-polygon-1.0.1.tgz", + "integrity": "sha1-1Ztk6P7kHElFiqyCtWcYxZV7Kvc=" + }, + "portfinder": { + "version": "1.0.25", + "resolved": "https://registry.npm.taobao.org/portfinder/download/portfinder-1.0.25.tgz", + "integrity": "sha1-JU/TN/+6hp9LnTftwpgFnLTTXso=", + "dev": true, + "requires": { + "async": "^2.6.2", + "debug": "^3.1.1", + "mkdirp": "^0.5.1" + }, + "dependencies": { + "debug": { + "version": "3.2.6", + "resolved": "https://registry.npm.taobao.org/debug/download/debug-3.2.6.tgz", + "integrity": "sha1-6D0X3hbYp++3cX7b5fsQE17uYps=", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + } + } + }, + "positioning": { + "version": "2.0.0", + "resolved": "https://registry.npm.taobao.org/positioning/download/positioning-2.0.0.tgz", + "integrity": "sha1-aXhc8r9s2rtv7z/RQaZLhp5X8wU=" + }, + "posix-character-classes": { + "version": "0.1.1", + "resolved": "https://registry.npm.taobao.org/posix-character-classes/download/posix-character-classes-0.1.1.tgz", + "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", + "dev": true + }, + "postcss": { + "version": "7.0.21", + "resolved": "https://registry.npm.taobao.org/postcss/download/postcss-7.0.21.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss%2Fdownload%2Fpostcss-7.0.21.tgz", + "integrity": "sha1-BrsHgkwZwgIcXQVtWxDDW5iffhc=", + "dev": true, + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.6.1.tgz", + "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=", + "dev": true + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-6.1.0.tgz?cache=0&sync_timestamp=1569557271992&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-6.1.0.tgz", + "integrity": "sha1-B2Srxpxj1ayELdSGfo0CXogN+PM=", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "postcss-calc": { + "version": "7.0.1", + "resolved": "https://registry.npm.taobao.org/postcss-calc/download/postcss-calc-7.0.1.tgz", + "integrity": "sha1-Ntd7qwI7Dsu5eJ2E3LI8SUEUVDY=", + "dev": true, + "requires": { + "css-unit-converter": "^1.1.1", + "postcss": "^7.0.5", + "postcss-selector-parser": "^5.0.0-rc.4", + "postcss-value-parser": "^3.3.1" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npm.taobao.org/postcss-value-parser/download/postcss-value-parser-3.3.1.tgz", + "integrity": "sha1-n/giVH4okyE88cMO+lGsX9G6goE=", + "dev": true + } + } + }, + "postcss-colormin": { + "version": "4.0.3", + "resolved": "https://registry.npm.taobao.org/postcss-colormin/download/postcss-colormin-4.0.3.tgz", + "integrity": "sha1-rgYLzpPteUrHEmTwgTLVUJVr04E=", + "dev": true, + "requires": { + "browserslist": "^4.0.0", + "color": "^3.0.0", + "has": "^1.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npm.taobao.org/postcss-value-parser/download/postcss-value-parser-3.3.1.tgz", + "integrity": "sha1-n/giVH4okyE88cMO+lGsX9G6goE=", + "dev": true + } + } + }, + "postcss-convert-values": { + "version": "4.0.1", + "resolved": "https://registry.npm.taobao.org/postcss-convert-values/download/postcss-convert-values-4.0.1.tgz", + "integrity": "sha1-yjgT7U2g+BL51DcDWE5Enr4Ymn8=", + "dev": true, + "requires": { + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npm.taobao.org/postcss-value-parser/download/postcss-value-parser-3.3.1.tgz", + "integrity": "sha1-n/giVH4okyE88cMO+lGsX9G6goE=", + "dev": true + } + } + }, + "postcss-discard-comments": { + "version": "4.0.2", + "resolved": "https://registry.npm.taobao.org/postcss-discard-comments/download/postcss-discard-comments-4.0.2.tgz", + "integrity": "sha1-H7q9LCRr/2qq15l7KwkY9NevQDM=", + "dev": true, + "requires": { + "postcss": "^7.0.0" + } + }, + "postcss-discard-duplicates": { + "version": "4.0.2", + "resolved": "https://registry.npm.taobao.org/postcss-discard-duplicates/download/postcss-discard-duplicates-4.0.2.tgz", + "integrity": "sha1-P+EzzTyCKC5VD8myORdqkge3hOs=", + "dev": true, + "requires": { + "postcss": "^7.0.0" + } + }, + "postcss-discard-empty": { + "version": "4.0.1", + "resolved": "https://registry.npm.taobao.org/postcss-discard-empty/download/postcss-discard-empty-4.0.1.tgz", + "integrity": "sha1-yMlR6fc+2UKAGUWERKAq2Qu592U=", + "dev": true, + "requires": { + "postcss": "^7.0.0" + } + }, + "postcss-discard-overridden": { + "version": "4.0.1", + "resolved": "https://registry.npm.taobao.org/postcss-discard-overridden/download/postcss-discard-overridden-4.0.1.tgz", + "integrity": "sha1-ZSrvipZybwKfXj4AFG7npOdV/1c=", + "dev": true, + "requires": { + "postcss": "^7.0.0" + } + }, + "postcss-import": { + "version": "12.0.1", + "resolved": "https://registry.npm.taobao.org/postcss-import/download/postcss-import-12.0.1.tgz", + "integrity": "sha1-z4x6sLXMq1ZJAkU25WX4QZKLcVM=", + "dev": true, + "requires": { + "postcss": "^7.0.1", + "postcss-value-parser": "^3.2.3", + "read-cache": "^1.0.0", + "resolve": "^1.1.7" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npm.taobao.org/postcss-value-parser/download/postcss-value-parser-3.3.1.tgz", + "integrity": "sha1-n/giVH4okyE88cMO+lGsX9G6goE=", + "dev": true + } + } + }, + "postcss-load-config": { + "version": "2.1.0", + "resolved": "https://registry.npm.taobao.org/postcss-load-config/download/postcss-load-config-2.1.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-load-config%2Fdownload%2Fpostcss-load-config-2.1.0.tgz", + "integrity": "sha1-yE1pK3u3tB3c7ZTuYuirMbQXsAM=", + "dev": true, + "requires": { + "cosmiconfig": "^5.0.0", + "import-cwd": "^2.0.0" + } + }, + "postcss-loader": { + "version": "3.0.0", + "resolved": "https://registry.npm.taobao.org/postcss-loader/download/postcss-loader-3.0.0.tgz", + "integrity": "sha1-a5eUPkfHLYRfqeA/Jzdz1OjdbC0=", + "dev": true, + "requires": { + "loader-utils": "^1.1.0", + "postcss": "^7.0.0", + "postcss-load-config": "^2.0.0", + "schema-utils": "^1.0.0" + } + }, + "postcss-merge-longhand": { + "version": "4.0.11", + "resolved": "https://registry.npm.taobao.org/postcss-merge-longhand/download/postcss-merge-longhand-4.0.11.tgz", + "integrity": "sha1-YvSaE+Sg7gTnuY9CuxYGLKJUniQ=", + "dev": true, + "requires": { + "css-color-names": "0.0.4", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0", + "stylehacks": "^4.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npm.taobao.org/postcss-value-parser/download/postcss-value-parser-3.3.1.tgz", + "integrity": "sha1-n/giVH4okyE88cMO+lGsX9G6goE=", + "dev": true + } + } + }, + "postcss-merge-rules": { + "version": "4.0.3", + "resolved": "https://registry.npm.taobao.org/postcss-merge-rules/download/postcss-merge-rules-4.0.3.tgz", + "integrity": "sha1-NivqT/Wh+Y5AdacTxsslrv75plA=", + "dev": true, + "requires": { + "browserslist": "^4.0.0", + "caniuse-api": "^3.0.0", + "cssnano-util-same-parent": "^4.0.0", + "postcss": "^7.0.0", + "postcss-selector-parser": "^3.0.0", + "vendors": "^1.0.0" + }, + "dependencies": { + "postcss-selector-parser": { + "version": "3.1.1", + "resolved": "https://registry.npm.taobao.org/postcss-selector-parser/download/postcss-selector-parser-3.1.1.tgz", + "integrity": "sha1-T4dfSvsMllc9XPTXQBGu4lCn6GU=", + "dev": true, + "requires": { + "dot-prop": "^4.1.1", + "indexes-of": "^1.0.1", + "uniq": "^1.0.1" + } + } + } + }, + "postcss-minify-font-values": { + "version": "4.0.2", + "resolved": "https://registry.npm.taobao.org/postcss-minify-font-values/download/postcss-minify-font-values-4.0.2.tgz", + "integrity": "sha1-zUw0TM5HQ0P6xdgiBqssvLiv1aY=", + "dev": true, + "requires": { + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npm.taobao.org/postcss-value-parser/download/postcss-value-parser-3.3.1.tgz", + "integrity": "sha1-n/giVH4okyE88cMO+lGsX9G6goE=", + "dev": true + } + } + }, + "postcss-minify-gradients": { + "version": "4.0.2", + "resolved": "https://registry.npm.taobao.org/postcss-minify-gradients/download/postcss-minify-gradients-4.0.2.tgz", + "integrity": "sha1-k7KcL/UJnFNe7NpWxKpuZlpmNHE=", + "dev": true, + "requires": { + "cssnano-util-get-arguments": "^4.0.0", + "is-color-stop": "^1.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npm.taobao.org/postcss-value-parser/download/postcss-value-parser-3.3.1.tgz", + "integrity": "sha1-n/giVH4okyE88cMO+lGsX9G6goE=", + "dev": true + } + } + }, + "postcss-minify-params": { + "version": "4.0.2", + "resolved": "https://registry.npm.taobao.org/postcss-minify-params/download/postcss-minify-params-4.0.2.tgz", + "integrity": "sha1-a5zvAwwR41Jh+V9hjJADbWgNuHQ=", + "dev": true, + "requires": { + "alphanum-sort": "^1.0.0", + "browserslist": "^4.0.0", + "cssnano-util-get-arguments": "^4.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0", + "uniqs": "^2.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npm.taobao.org/postcss-value-parser/download/postcss-value-parser-3.3.1.tgz", + "integrity": "sha1-n/giVH4okyE88cMO+lGsX9G6goE=", + "dev": true + } + } + }, + "postcss-minify-selectors": { + "version": "4.0.2", + "resolved": "https://registry.npm.taobao.org/postcss-minify-selectors/download/postcss-minify-selectors-4.0.2.tgz", + "integrity": "sha1-4uXrQL/uUA0M2SQ1APX46kJi+9g=", + "dev": true, + "requires": { + "alphanum-sort": "^1.0.0", + "has": "^1.0.0", + "postcss": "^7.0.0", + "postcss-selector-parser": "^3.0.0" + }, + "dependencies": { + "postcss-selector-parser": { + "version": "3.1.1", + "resolved": "https://registry.npm.taobao.org/postcss-selector-parser/download/postcss-selector-parser-3.1.1.tgz", + "integrity": "sha1-T4dfSvsMllc9XPTXQBGu4lCn6GU=", + "dev": true, + "requires": { + "dot-prop": "^4.1.1", + "indexes-of": "^1.0.1", + "uniq": "^1.0.1" + } + } + } + }, + "postcss-normalize-charset": { + "version": "4.0.1", + "resolved": "https://registry.npm.taobao.org/postcss-normalize-charset/download/postcss-normalize-charset-4.0.1.tgz", + "integrity": "sha1-izWt067oOhNrBHHg1ZvlilAoXdQ=", + "dev": true, + "requires": { + "postcss": "^7.0.0" + } + }, + "postcss-normalize-display-values": { + "version": "4.0.2", + "resolved": "https://registry.npm.taobao.org/postcss-normalize-display-values/download/postcss-normalize-display-values-4.0.2.tgz", + "integrity": "sha1-Db4EpM6QY9RmftK+R2u4MMglk1o=", + "dev": true, + "requires": { + "cssnano-util-get-match": "^4.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npm.taobao.org/postcss-value-parser/download/postcss-value-parser-3.3.1.tgz", + "integrity": "sha1-n/giVH4okyE88cMO+lGsX9G6goE=", + "dev": true + } + } + }, + "postcss-normalize-positions": { + "version": "4.0.2", + "resolved": "https://registry.npm.taobao.org/postcss-normalize-positions/download/postcss-normalize-positions-4.0.2.tgz", + "integrity": "sha1-BfdX+E8mBDc3g2ipH4ky1LECkX8=", + "dev": true, + "requires": { + "cssnano-util-get-arguments": "^4.0.0", + "has": "^1.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npm.taobao.org/postcss-value-parser/download/postcss-value-parser-3.3.1.tgz", + "integrity": "sha1-n/giVH4okyE88cMO+lGsX9G6goE=", + "dev": true + } + } + }, + "postcss-normalize-repeat-style": { + "version": "4.0.2", + "resolved": "https://registry.npm.taobao.org/postcss-normalize-repeat-style/download/postcss-normalize-repeat-style-4.0.2.tgz", + "integrity": "sha1-xOu8KJ85kaAo1EdRy90RkYsXkQw=", + "dev": true, + "requires": { + "cssnano-util-get-arguments": "^4.0.0", + "cssnano-util-get-match": "^4.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npm.taobao.org/postcss-value-parser/download/postcss-value-parser-3.3.1.tgz", + "integrity": "sha1-n/giVH4okyE88cMO+lGsX9G6goE=", + "dev": true + } + } + }, + "postcss-normalize-string": { + "version": "4.0.2", + "resolved": "https://registry.npm.taobao.org/postcss-normalize-string/download/postcss-normalize-string-4.0.2.tgz", + "integrity": "sha1-zUTECrB6DHo23F6Zqs4eyk7CaQw=", + "dev": true, + "requires": { + "has": "^1.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npm.taobao.org/postcss-value-parser/download/postcss-value-parser-3.3.1.tgz", + "integrity": "sha1-n/giVH4okyE88cMO+lGsX9G6goE=", + "dev": true + } + } + }, + "postcss-normalize-timing-functions": { + "version": "4.0.2", + "resolved": "https://registry.npm.taobao.org/postcss-normalize-timing-functions/download/postcss-normalize-timing-functions-4.0.2.tgz", + "integrity": "sha1-jgCcoqOUnNr4rSPmtquZy159KNk=", + "dev": true, + "requires": { + "cssnano-util-get-match": "^4.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npm.taobao.org/postcss-value-parser/download/postcss-value-parser-3.3.1.tgz", + "integrity": "sha1-n/giVH4okyE88cMO+lGsX9G6goE=", + "dev": true + } + } + }, + "postcss-normalize-unicode": { + "version": "4.0.1", + "resolved": "https://registry.npm.taobao.org/postcss-normalize-unicode/download/postcss-normalize-unicode-4.0.1.tgz", + "integrity": "sha1-hBvUj9zzAZrUuqdJOj02O1KuHPs=", + "dev": true, + "requires": { + "browserslist": "^4.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npm.taobao.org/postcss-value-parser/download/postcss-value-parser-3.3.1.tgz", + "integrity": "sha1-n/giVH4okyE88cMO+lGsX9G6goE=", + "dev": true + } + } + }, + "postcss-normalize-url": { + "version": "4.0.1", + "resolved": "https://registry.npm.taobao.org/postcss-normalize-url/download/postcss-normalize-url-4.0.1.tgz", + "integrity": "sha1-EOQ3+GvHx+WPe5ZS7YeNqqlfquE=", + "dev": true, + "requires": { + "is-absolute-url": "^2.0.0", + "normalize-url": "^3.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npm.taobao.org/postcss-value-parser/download/postcss-value-parser-3.3.1.tgz", + "integrity": "sha1-n/giVH4okyE88cMO+lGsX9G6goE=", + "dev": true + } + } + }, + "postcss-normalize-whitespace": { + "version": "4.0.2", + "resolved": "https://registry.npm.taobao.org/postcss-normalize-whitespace/download/postcss-normalize-whitespace-4.0.2.tgz", + "integrity": "sha1-vx1AcP5Pzqh9E0joJdjMDF+qfYI=", + "dev": true, + "requires": { + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npm.taobao.org/postcss-value-parser/download/postcss-value-parser-3.3.1.tgz", + "integrity": "sha1-n/giVH4okyE88cMO+lGsX9G6goE=", + "dev": true + } + } + }, + "postcss-ordered-values": { + "version": "4.1.2", + "resolved": "https://registry.npm.taobao.org/postcss-ordered-values/download/postcss-ordered-values-4.1.2.tgz", + "integrity": "sha1-DPdcgg7H1cTSgBiVWeC1ceusDu4=", + "dev": true, + "requires": { + "cssnano-util-get-arguments": "^4.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npm.taobao.org/postcss-value-parser/download/postcss-value-parser-3.3.1.tgz", + "integrity": "sha1-n/giVH4okyE88cMO+lGsX9G6goE=", + "dev": true + } + } + }, + "postcss-reduce-initial": { + "version": "4.0.3", + "resolved": "https://registry.npm.taobao.org/postcss-reduce-initial/download/postcss-reduce-initial-4.0.3.tgz", + "integrity": "sha1-f9QuvqXpyBRgljniwuhK4nC6SN8=", + "dev": true, + "requires": { + "browserslist": "^4.0.0", + "caniuse-api": "^3.0.0", + "has": "^1.0.0", + "postcss": "^7.0.0" + } + }, + "postcss-reduce-transforms": { + "version": "4.0.2", + "resolved": "https://registry.npm.taobao.org/postcss-reduce-transforms/download/postcss-reduce-transforms-4.0.2.tgz", + "integrity": "sha1-F++kBerMbge+NBSlyi0QdGgdTik=", + "dev": true, + "requires": { + "cssnano-util-get-match": "^4.0.0", + "has": "^1.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npm.taobao.org/postcss-value-parser/download/postcss-value-parser-3.3.1.tgz", + "integrity": "sha1-n/giVH4okyE88cMO+lGsX9G6goE=", + "dev": true + } + } + }, + "postcss-selector-parser": { + "version": "5.0.0", + "resolved": "https://registry.npm.taobao.org/postcss-selector-parser/download/postcss-selector-parser-5.0.0.tgz", + "integrity": "sha1-JJBENWaXsztk8aj3yAki3d7nGVw=", + "dev": true, + "requires": { + "cssesc": "^2.0.0", + "indexes-of": "^1.0.1", + "uniq": "^1.0.1" + }, + "dependencies": { + "cssesc": { + "version": "2.0.0", + "resolved": "https://registry.npm.taobao.org/cssesc/download/cssesc-2.0.0.tgz", + "integrity": "sha1-OxO9G7HLNuG8taTc0n9UxdyzVwM=", + "dev": true + } + } + }, + "postcss-svgo": { + "version": "4.0.2", + "resolved": "https://registry.npm.taobao.org/postcss-svgo/download/postcss-svgo-4.0.2.tgz", + "integrity": "sha1-F7mXvHEbMzurFDqu07jT1uPTglg=", + "dev": true, + "requires": { + "is-svg": "^3.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0", + "svgo": "^1.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npm.taobao.org/postcss-value-parser/download/postcss-value-parser-3.3.1.tgz", + "integrity": "sha1-n/giVH4okyE88cMO+lGsX9G6goE=", + "dev": true + } + } + }, + "postcss-unique-selectors": { + "version": "4.0.1", + "resolved": "https://registry.npm.taobao.org/postcss-unique-selectors/download/postcss-unique-selectors-4.0.1.tgz", + "integrity": "sha1-lEaRHzKJv9ZMbWgPBzwDsfnuS6w=", + "dev": true, + "requires": { + "alphanum-sort": "^1.0.0", + "postcss": "^7.0.0", + "uniqs": "^2.0.0" + } + }, + "postcss-value-parser": { + "version": "4.0.2", + "resolved": "https://registry.npm.taobao.org/postcss-value-parser/download/postcss-value-parser-4.0.2.tgz", + "integrity": "sha1-SCKCwJpCcG0fyaBptz9E7Ag5Hck=", + "dev": true + }, + "prepend-http": { + "version": "1.0.4", + "resolved": "https://registry.npm.taobao.org/prepend-http/download/prepend-http-1.0.4.tgz", + "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=", + "dev": true + }, + "private": { + "version": "0.1.8", + "resolved": "https://registry.npm.taobao.org/private/download/private-0.1.8.tgz", + "integrity": "sha1-I4Hts2ifelPWUxkAYPz4ItLzaP8=", + "dev": true + }, + "process": { + "version": "0.11.10", + "resolved": "https://registry.npm.taobao.org/process/download/process-0.11.10.tgz", + "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=", + "dev": true + }, + "process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npm.taobao.org/process-nextick-args/download/process-nextick-args-2.0.1.tgz", + "integrity": "sha1-eCDZsWEgzFXKmud5JoCufbptf+I=", + "dev": true + }, + "promise": { + "version": "7.3.1", + "resolved": "https://registry.npm.taobao.org/promise/download/promise-7.3.1.tgz", + "integrity": "sha1-BktyYCsY+Q8pGSuLG8QY/9Hr078=", + "dev": true, + "optional": true, + "requires": { + "asap": "~2.0.3" + } + }, + "promise-inflight": { + "version": "1.0.1", + "resolved": "https://registry.npm.taobao.org/promise-inflight/download/promise-inflight-1.0.1.tgz", + "integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM=", + "dev": true + }, + "promise-polyfill": { + "version": "8.1.3", + "resolved": "https://registry.npm.taobao.org/promise-polyfill/download/promise-polyfill-8.1.3.tgz", + "integrity": "sha1-jJmzz1PzqRxoIm/9573oHX+QQRY=" + }, + "promise-retry": { + "version": "1.1.1", + "resolved": "https://registry.npm.taobao.org/promise-retry/download/promise-retry-1.1.1.tgz", + "integrity": "sha1-ZznpaOMFHaIM5kl/srUPaRHfPW0=", + "dev": true, + "requires": { + "err-code": "^1.0.0", + "retry": "^0.10.0" + }, + "dependencies": { + "retry": { + "version": "0.10.1", + "resolved": "https://registry.npm.taobao.org/retry/download/retry-0.10.1.tgz", + "integrity": "sha1-52OI0heZLCUnUCQdPTlW/tmNj/Q=", + "dev": true + } + } + }, + "protobufjs": { + "version": "6.8.8", + "resolved": "https://registry.npm.taobao.org/protobufjs/download/protobufjs-6.8.8.tgz", + "integrity": "sha1-yLTxKC/XqQ5vWxCe0RyEr4KQjnw=", + "requires": { + "@protobufjs/aspromise": "^1.1.2", + "@protobufjs/base64": "^1.1.2", + "@protobufjs/codegen": "^2.0.4", + "@protobufjs/eventemitter": "^1.1.0", + "@protobufjs/fetch": "^1.1.0", + "@protobufjs/float": "^1.0.2", + "@protobufjs/inquire": "^1.1.0", + "@protobufjs/path": "^1.1.2", + "@protobufjs/pool": "^1.1.0", + "@protobufjs/utf8": "^1.1.0", + "@types/long": "^4.0.0", + "@types/node": "^10.1.0", + "long": "^4.0.0" + }, + "dependencies": { + "@types/node": { + "version": "10.17.14", + "resolved": "https://registry.npm.taobao.org/@types/node/download/@types/node-10.17.14.tgz?cache=0&sync_timestamp=1580843161457&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Fnode%2Fdownload%2F%40types%2Fnode-10.17.14.tgz", + "integrity": "sha1-tsYOvy+15CKf3XUf+d364PXzFUE=" + } + } + }, + "protoduck": { + "version": "5.0.1", + "resolved": "https://registry.npm.taobao.org/protoduck/download/protoduck-5.0.1.tgz", + "integrity": "sha1-A8NlnKGAB7aaUP2Cp+vMUWJhFR8=", + "dev": true, + "requires": { + "genfun": "^5.0.0" + } + }, + "protractor": { + "version": "5.4.2", + "resolved": "https://registry.npm.taobao.org/protractor/download/protractor-5.4.2.tgz", + "integrity": "sha1-Mp7+N/SLIUGrlGd5m+LU0S60jBM=", + "dev": true, + "requires": { + "@types/q": "^0.0.32", + "@types/selenium-webdriver": "^3.0.0", + "blocking-proxy": "^1.0.0", + "browserstack": "^1.5.1", + "chalk": "^1.1.3", + "glob": "^7.0.3", + "jasmine": "2.8.0", + "jasminewd2": "^2.1.0", + "optimist": "~0.6.0", + "q": "1.4.1", + "saucelabs": "^1.5.0", + "selenium-webdriver": "3.6.0", + "source-map-support": "~0.4.0", + "webdriver-js-extender": "2.1.0", + "webdriver-manager": "^12.0.6" + }, + "dependencies": { + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npm.taobao.org/ansi-styles/download/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npm.taobao.org/chalk/download/chalk-1.1.3.tgz?cache=0&sync_timestamp=1573282918610&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fchalk%2Fdownload%2Fchalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + } + }, + "del": { + "version": "2.2.2", + "resolved": "https://registry.npm.taobao.org/del/download/del-2.2.2.tgz", + "integrity": "sha1-wSyYHQZ4RshLyvhiz/kw2Qf/0ag=", + "dev": true, + "requires": { + "globby": "^5.0.0", + "is-path-cwd": "^1.0.0", + "is-path-in-cwd": "^1.0.0", + "object-assign": "^4.0.1", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0", + "rimraf": "^2.2.8" + } + }, + "globby": { + "version": "5.0.0", + "resolved": "https://registry.npm.taobao.org/globby/download/globby-5.0.0.tgz", + "integrity": "sha1-69hGZ8oNuzMLmbz8aOrCvFQ3Dg0=", + "dev": true, + "requires": { + "array-union": "^1.0.1", + "arrify": "^1.0.0", + "glob": "^7.0.3", + "object-assign": "^4.0.1", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" + } + }, + "is-path-cwd": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/is-path-cwd/download/is-path-cwd-1.0.0.tgz", + "integrity": "sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0=", + "dev": true + }, + "is-path-in-cwd": { + "version": "1.0.1", + "resolved": "https://registry.npm.taobao.org/is-path-in-cwd/download/is-path-in-cwd-1.0.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-path-in-cwd%2Fdownload%2Fis-path-in-cwd-1.0.1.tgz", + "integrity": "sha1-WsSLNF72dTOb1sekipEhELJBz1I=", + "dev": true, + "requires": { + "is-path-inside": "^1.0.0" + } + }, + "is-path-inside": { + "version": "1.0.1", + "resolved": "https://registry.npm.taobao.org/is-path-inside/download/is-path-inside-1.0.1.tgz?cache=0&sync_timestamp=1569835858319&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-path-inside%2Fdownload%2Fis-path-inside-1.0.1.tgz", + "integrity": "sha1-jvW33lBDej/cprToZe96pVy0gDY=", + "dev": true, + "requires": { + "path-is-inside": "^1.0.1" + } + }, + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npm.taobao.org/pify/download/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npm.taobao.org/semver/download/semver-5.7.1.tgz", + "integrity": "sha1-qVT5Ma66UI0we78Gnv8MAclhFvc=", + "dev": true + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + }, + "source-map-support": { + "version": "0.4.18", + "resolved": "https://registry.npm.taobao.org/source-map-support/download/source-map-support-0.4.18.tgz", + "integrity": "sha1-Aoam3ovkJkEzhZTpfM6nXwosWF8=", + "dev": true, + "requires": { + "source-map": "^0.5.6" + } + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-2.0.0.tgz?cache=0&sync_timestamp=1569557271992&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + }, + "webdriver-manager": { + "version": "12.1.7", + "resolved": "https://registry.npm.taobao.org/webdriver-manager/download/webdriver-manager-12.1.7.tgz", + "integrity": "sha1-7U6u6PkGszwUboabVehQVTobEWI=", + "dev": true, + "requires": { + "adm-zip": "^0.4.9", + "chalk": "^1.1.1", + "del": "^2.2.0", + "glob": "^7.0.3", + "ini": "^1.3.4", + "minimist": "^1.2.0", + "q": "^1.4.1", + "request": "^2.87.0", + "rimraf": "^2.5.2", + "semver": "^5.3.0", + "xml2js": "^0.4.17" + } + } + } + }, + "proxy-addr": { + "version": "2.0.5", + "resolved": "https://registry.npm.taobao.org/proxy-addr/download/proxy-addr-2.0.5.tgz", + "integrity": "sha1-NMvWSi2B9LH9IedvnwbIpFKZ7jQ=", + "dev": true, + "requires": { + "forwarded": "~0.1.2", + "ipaddr.js": "1.9.0" + } + }, + "prr": { + "version": "1.0.1", + "resolved": "https://registry.npm.taobao.org/prr/download/prr-1.0.1.tgz", + "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=", + "dev": true + }, + "pseudomap": { + "version": "1.0.2", + "resolved": "https://registry.npm.taobao.org/pseudomap/download/pseudomap-1.0.2.tgz", + "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=", + "dev": true + }, + "psl": { + "version": "1.7.0", + "resolved": "https://registry.npm.taobao.org/psl/download/psl-1.7.0.tgz", + "integrity": "sha1-8cTEeo75cWfepda79IFtc26ISjw=", + "dev": true + }, + "public-encrypt": { + "version": "4.0.3", + "resolved": "https://registry.npm.taobao.org/public-encrypt/download/public-encrypt-4.0.3.tgz", + "integrity": "sha1-T8ydd6B+SLp1J+fL4N4z0HATMeA=", + "dev": true, + "requires": { + "bn.js": "^4.1.0", + "browserify-rsa": "^4.0.0", + "create-hash": "^1.1.0", + "parse-asn1": "^5.0.0", + "randombytes": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "pump": { + "version": "3.0.0", + "resolved": "https://registry.npm.taobao.org/pump/download/pump-3.0.0.tgz", + "integrity": "sha1-tKIRaBW94vTh6mAjVOjHVWUQemQ=", + "dev": true, + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "pumpify": { + "version": "1.5.1", + "resolved": "https://registry.npm.taobao.org/pumpify/download/pumpify-1.5.1.tgz?cache=0&sync_timestamp=1569938272548&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpumpify%2Fdownload%2Fpumpify-1.5.1.tgz", + "integrity": "sha1-NlE74karJ1cLGjdKXOJ4v9dDcM4=", + "dev": true, + "requires": { + "duplexify": "^3.6.0", + "inherits": "^2.0.3", + "pump": "^2.0.0" + }, + "dependencies": { + "pump": { + "version": "2.0.1", + "resolved": "https://registry.npm.taobao.org/pump/download/pump-2.0.1.tgz", + "integrity": "sha1-Ejma3W5M91Jtlzy8i1zi4pCLOQk=", + "dev": true, + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + } + } + }, + "punycode": { + "version": "2.1.1", + "resolved": "https://registry.npm.taobao.org/punycode/download/punycode-2.1.1.tgz", + "integrity": "sha1-tYsBCsQMIsVldhbI0sLALHv0eew=", + "dev": true + }, + "q": { + "version": "1.4.1", + "resolved": "https://registry.npm.taobao.org/q/download/q-1.4.1.tgz", + "integrity": "sha1-VXBbzZPF82c1MMLCy8DCs63cKG4=", + "dev": true + }, + "qjobs": { + "version": "1.2.0", + "resolved": "https://registry.npm.taobao.org/qjobs/download/qjobs-1.2.0.tgz", + "integrity": "sha1-xF6cYYAL0IfviNfiVkI73Unl0HE=", + "dev": true + }, + "qs": { + "version": "6.5.2", + "resolved": "https://registry.npm.taobao.org/qs/download/qs-6.5.2.tgz", + "integrity": "sha1-yzroBuh0BERYTvFUzo7pjUA/PjY=", + "dev": true + }, + "query-string": { + "version": "4.3.4", + "resolved": "https://registry.npm.taobao.org/query-string/download/query-string-4.3.4.tgz", + "integrity": "sha1-u7aTucqRXCMlFbIosaArYJBD2+s=", + "dev": true, + "requires": { + "object-assign": "^4.1.0", + "strict-uri-encode": "^1.0.0" + } + }, + "querystring": { + "version": "0.2.0", + "resolved": "https://registry.npm.taobao.org/querystring/download/querystring-0.2.0.tgz", + "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=", + "dev": true + }, + "querystring-es3": { + "version": "0.2.1", + "resolved": "https://registry.npm.taobao.org/querystring-es3/download/querystring-es3-0.2.1.tgz", + "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=", + "dev": true + }, + "querystringify": { + "version": "2.1.1", + "resolved": "https://registry.npm.taobao.org/querystringify/download/querystringify-2.1.1.tgz", + "integrity": "sha1-YOWl/WSn+L+k0qsu1v30yFutFU4=", + "dev": true + }, + "quickselect": { + "version": "2.0.0", + "resolved": "https://registry.npm.taobao.org/quickselect/download/quickselect-2.0.0.tgz", + "integrity": "sha1-8ZaApIal7vtYEwPgI+mPqvJd0Bg=" + }, + "randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npm.taobao.org/randombytes/download/randombytes-2.1.0.tgz", + "integrity": "sha1-32+ENy8CcNxlzfYpE0mrekc9Tyo=", + "dev": true, + "requires": { + "safe-buffer": "^5.1.0" + } + }, + "randomfill": { + "version": "1.0.4", + "resolved": "https://registry.npm.taobao.org/randomfill/download/randomfill-1.0.4.tgz", + "integrity": "sha1-ySGW/IarQr6YPxvzF3giSTHWFFg=", + "dev": true, + "requires": { + "randombytes": "^2.0.5", + "safe-buffer": "^5.1.0" + } + }, + "range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npm.taobao.org/range-parser/download/range-parser-1.2.1.tgz", + "integrity": "sha1-PPNwI9GZ4cJNGlW4SADC8+ZGgDE=", + "dev": true + }, + "raw-body": { + "version": "2.4.0", + "resolved": "https://registry.npm.taobao.org/raw-body/download/raw-body-2.4.0.tgz", + "integrity": "sha1-oc5vucm8NWylLoklarWQWeE9AzI=", + "dev": true, + "requires": { + "bytes": "3.1.0", + "http-errors": "1.7.2", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "dependencies": { + "bytes": { + "version": "3.1.0", + "resolved": "https://registry.npm.taobao.org/bytes/download/bytes-3.1.0.tgz", + "integrity": "sha1-9s95M6Ng4FiPqf3oVlHNx/gF0fY=", + "dev": true + } + } + }, + "raw-loader": { + "version": "3.1.0", + "resolved": "https://registry.npm.taobao.org/raw-loader/download/raw-loader-3.1.0.tgz?cache=0&sync_timestamp=1574695040943&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fraw-loader%2Fdownload%2Fraw-loader-3.1.0.tgz", + "integrity": "sha1-Xp05mloiLMDeGPQsO8XklndTKz8=", + "dev": true, + "requires": { + "loader-utils": "^1.1.0", + "schema-utils": "^2.0.1" + }, + "dependencies": { + "schema-utils": { + "version": "2.6.4", + "resolved": "https://registry.npm.taobao.org/schema-utils/download/schema-utils-2.6.4.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fschema-utils%2Fdownload%2Fschema-utils-2.6.4.tgz", + "integrity": "sha1-on779uTnhonZGHLuPM+lfXvdD1M=", + "dev": true, + "requires": { + "ajv": "^6.10.2", + "ajv-keywords": "^3.4.1" + } + } + } + }, + "rbush": { + "version": "3.0.1", + "resolved": "https://registry.npm.taobao.org/rbush/download/rbush-3.0.1.tgz", + "integrity": "sha1-X6+op5s7mv3+UAhAOnIMwd6ILs8=", + "requires": { + "quickselect": "^2.0.0" + } + }, + "read-cache": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/read-cache/download/read-cache-1.0.0.tgz", + "integrity": "sha1-5mTvMRYRZsl1HNvo28+GtftY93Q=", + "dev": true, + "requires": { + "pify": "^2.3.0" + }, + "dependencies": { + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npm.taobao.org/pify/download/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + } + } + }, + "read-package-json": { + "version": "2.1.1", + "resolved": "https://registry.npm.taobao.org/read-package-json/download/read-package-json-2.1.1.tgz", + "integrity": "sha1-FqpmxZ59Ta1iiPF53ZKV/Vm7mPE=", + "dev": true, + "requires": { + "glob": "^7.1.1", + "graceful-fs": "^4.1.2", + "json-parse-better-errors": "^1.0.1", + "normalize-package-data": "^2.0.0", + "npm-normalize-package-bin": "^1.0.0" + } + }, + "read-package-tree": { + "version": "5.3.1", + "resolved": "https://registry.npm.taobao.org/read-package-tree/download/read-package-tree-5.3.1.tgz", + "integrity": "sha1-oyy2TH8x64pvMe8G+c7fdAaP5jY=", + "dev": true, + "requires": { + "read-package-json": "^2.0.0", + "readdir-scoped-modules": "^1.0.0", + "util-promisify": "^2.1.0" + } + }, + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npm.taobao.org/readable-stream/download/readable-stream-2.3.7.tgz", + "integrity": "sha1-Hsoc9xGu+BTAT2IlKjamL2yyO1c=", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "readdir-scoped-modules": { + "version": "1.1.0", + "resolved": "https://registry.npm.taobao.org/readdir-scoped-modules/download/readdir-scoped-modules-1.1.0.tgz", + "integrity": "sha1-jUVAe0+HCg3K68DihnDRjnRRQwk=", + "dev": true, + "requires": { + "debuglog": "^1.0.1", + "dezalgo": "^1.0.0", + "graceful-fs": "^4.1.2", + "once": "^1.3.0" + } + }, + "readdirp": { + "version": "3.3.0", + "resolved": "https://registry.npm.taobao.org/readdirp/download/readdirp-3.3.0.tgz", + "integrity": "sha1-mERY0ToeQuLp9YQbEp4WLzaa/xc=", + "dev": true, + "requires": { + "picomatch": "^2.0.7" + } + }, + "reflect-metadata": { + "version": "0.1.13", + "resolved": "https://registry.npm.taobao.org/reflect-metadata/download/reflect-metadata-0.1.13.tgz", + "integrity": "sha1-Z648pXyXKiqhZCsQ/jY/4y1J3Ag=", + "dev": true + }, + "regenerate": { + "version": "1.4.0", + "resolved": "https://registry.npm.taobao.org/regenerate/download/regenerate-1.4.0.tgz", + "integrity": "sha1-SoVuxLVuQHfFV1icroXnpMiGmhE=", + "dev": true + }, + "regenerate-unicode-properties": { + "version": "8.1.0", + "resolved": "https://registry.npm.taobao.org/regenerate-unicode-properties/download/regenerate-unicode-properties-8.1.0.tgz", + "integrity": "sha1-71Hg8OpK1CS3e/fLQfPgFccKPw4=", + "dev": true, + "requires": { + "regenerate": "^1.4.0" + } + }, + "regenerator-runtime": { + "version": "0.13.3", + "resolved": "https://registry.npm.taobao.org/regenerator-runtime/download/regenerator-runtime-0.13.3.tgz", + "integrity": "sha1-fPanfY9cb2Drc8X8GVWyzrAea/U=", + "dev": true + }, + "regenerator-transform": { + "version": "0.14.1", + "resolved": "https://registry.npm.taobao.org/regenerator-transform/download/regenerator-transform-0.14.1.tgz", + "integrity": "sha1-Oy/OThq3cywI9mXf2zFHScfd0vs=", + "dev": true, + "requires": { + "private": "^0.1.6" + } + }, + "regex-not": { + "version": "1.0.2", + "resolved": "https://registry.npm.taobao.org/regex-not/download/regex-not-1.0.2.tgz", + "integrity": "sha1-H07OJ+ALC2XgJHpoEOaoXYOldSw=", + "dev": true, + "requires": { + "extend-shallow": "^3.0.2", + "safe-regex": "^1.1.0" + } + }, + "regexp.prototype.flags": { + "version": "1.3.0", + "resolved": "https://registry.npm.taobao.org/regexp.prototype.flags/download/regexp.prototype.flags-1.3.0.tgz", + "integrity": "sha1-erqJs8E6ZFCdq888qNn7ub31y3U=", + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.0-next.1" + } + }, + "regexpu-core": { + "version": "4.6.0", + "resolved": "https://registry.npm.taobao.org/regexpu-core/download/regexpu-core-4.6.0.tgz?cache=0&sync_timestamp=1568402850982&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fregexpu-core%2Fdownload%2Fregexpu-core-4.6.0.tgz", + "integrity": "sha1-IDfBizJ8/Oim/qKk7EQfJDKvuLY=", + "dev": true, + "requires": { + "regenerate": "^1.4.0", + "regenerate-unicode-properties": "^8.1.0", + "regjsgen": "^0.5.0", + "regjsparser": "^0.6.0", + "unicode-match-property-ecmascript": "^1.0.4", + "unicode-match-property-value-ecmascript": "^1.1.0" + } + }, + "regjsgen": { + "version": "0.5.1", + "resolved": "https://registry.npm.taobao.org/regjsgen/download/regjsgen-0.5.1.tgz", + "integrity": "sha1-SPC/Gl6iBRlpKcDZeYtC0e2YRDw=", + "dev": true + }, + "regjsparser": { + "version": "0.6.2", + "resolved": "https://registry.npm.taobao.org/regjsparser/download/regjsparser-0.6.2.tgz", + "integrity": "sha1-/WLHU5kUZ9nR/+Cp9n8npSkCS5Y=", + "dev": true, + "requires": { + "jsesc": "~0.5.0" + }, + "dependencies": { + "jsesc": { + "version": "0.5.0", + "resolved": "https://registry.npm.taobao.org/jsesc/download/jsesc-0.5.0.tgz", + "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", + "dev": true + } + } + }, + "remove-trailing-separator": { + "version": "1.1.0", + "resolved": "https://registry.npm.taobao.org/remove-trailing-separator/download/remove-trailing-separator-1.1.0.tgz", + "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", + "dev": true + }, + "repeat-element": { + "version": "1.1.3", + "resolved": "https://registry.npm.taobao.org/repeat-element/download/repeat-element-1.1.3.tgz", + "integrity": "sha1-eC4NglwMWjuzlzH4Tv7mt0Lmsc4=", + "dev": true + }, + "repeat-string": { + "version": "1.6.1", + "resolved": "https://registry.npm.taobao.org/repeat-string/download/repeat-string-1.6.1.tgz", + "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", + "dev": true + }, + "request": { + "version": "2.88.0", + "resolved": "https://registry.npm.taobao.org/request/download/request-2.88.0.tgz", + "integrity": "sha1-nC/KT301tZLv5Xx/ClXoEFIST+8=", + "dev": true, + "requires": { + "aws-sign2": "~0.7.0", + "aws4": "^1.8.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.6", + "extend": "~3.0.2", + "forever-agent": "~0.6.1", + "form-data": "~2.3.2", + "har-validator": "~5.1.0", + "http-signature": "~1.2.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.19", + "oauth-sign": "~0.9.0", + "performance-now": "^2.1.0", + "qs": "~6.5.2", + "safe-buffer": "^5.1.2", + "tough-cookie": "~2.4.3", + "tunnel-agent": "^0.6.0", + "uuid": "^3.3.2" + } + }, + "require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npm.taobao.org/require-directory/download/require-directory-2.1.1.tgz", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", + "dev": true + }, + "require-main-filename": { + "version": "1.0.1", + "resolved": "https://registry.npm.taobao.org/require-main-filename/download/require-main-filename-1.0.1.tgz", + "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=", + "dev": true + }, + "requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/requires-port/download/requires-port-1.0.0.tgz", + "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=", + "dev": true + }, + "resize-observer-polyfill": { + "version": "1.5.1", + "resolved": "https://registry.npm.taobao.org/resize-observer-polyfill/download/resize-observer-polyfill-1.5.1.tgz", + "integrity": "sha1-DpAg3T0hAkRY1OvSfiPkAmmBBGQ=" + }, + "resolve": { + "version": "1.14.1", + "resolved": "https://registry.npm.taobao.org/resolve/download/resolve-1.14.1.tgz", + "integrity": "sha1-ngGMVA/PDEJ9Z4uZMcv0XphLyv8=", + "dev": true, + "requires": { + "path-parse": "^1.0.6" + } + }, + "resolve-cwd": { + "version": "2.0.0", + "resolved": "https://registry.npm.taobao.org/resolve-cwd/download/resolve-cwd-2.0.0.tgz", + "integrity": "sha1-AKn3OHVW4nA46uIyyqNypqWbZlo=", + "dev": true, + "requires": { + "resolve-from": "^3.0.0" + } + }, + "resolve-from": { + "version": "3.0.0", + "resolved": "https://registry.npm.taobao.org/resolve-from/download/resolve-from-3.0.0.tgz", + "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=", + "dev": true + }, + "resolve-url": { + "version": "0.2.1", + "resolved": "https://registry.npm.taobao.org/resolve-url/download/resolve-url-0.2.1.tgz", + "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", + "dev": true + }, + "restore-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npm.taobao.org/restore-cursor/download/restore-cursor-3.1.0.tgz", + "integrity": "sha1-OfZ8VLOnpYzqUjbZXPADQjljH34=", + "dev": true, + "requires": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + } + }, + "ret": { + "version": "0.1.15", + "resolved": "https://registry.npm.taobao.org/ret/download/ret-0.1.15.tgz", + "integrity": "sha1-uKSCXVvbH8P29Twrwz+BOIaBx7w=", + "dev": true + }, + "retry": { + "version": "0.12.0", + "resolved": "https://registry.npm.taobao.org/retry/download/retry-0.12.0.tgz", + "integrity": "sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs=", + "dev": true + }, + "rfdc": { + "version": "1.1.4", + "resolved": "https://registry.npm.taobao.org/rfdc/download/rfdc-1.1.4.tgz", + "integrity": "sha1-unLME2egzNnPgahws7WL060H+MI=", + "dev": true + }, + "rgb-regex": { + "version": "1.0.1", + "resolved": "https://registry.npm.taobao.org/rgb-regex/download/rgb-regex-1.0.1.tgz", + "integrity": "sha1-wODWiC3w4jviVKR16O3UGRX+rrE=", + "dev": true + }, + "rgba-regex": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/rgba-regex/download/rgba-regex-1.0.0.tgz", + "integrity": "sha1-QzdOLiyglosO8VI0YLfXMP8i7rM=", + "dev": true + }, + "rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npm.taobao.org/rimraf/download/rimraf-2.7.1.tgz", + "integrity": "sha1-NXl/E6f9rcVmFCwp1PB8ytSD4+w=", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + }, + "ripemd160": { + "version": "2.0.2", + "resolved": "https://registry.npm.taobao.org/ripemd160/download/ripemd160-2.0.2.tgz", + "integrity": "sha1-ocGm9iR1FXe6XQeRTLyShQWFiQw=", + "dev": true, + "requires": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1" + } + }, + "robust-orientation": { + "version": "1.1.3", + "resolved": "https://registry.npm.taobao.org/robust-orientation/download/robust-orientation-1.1.3.tgz", + "integrity": "sha1-2v9bANO+TmByLw6cAVbvln8cIEk=", + "requires": { + "robust-scale": "^1.0.2", + "robust-subtract": "^1.0.0", + "robust-sum": "^1.0.0", + "two-product": "^1.0.2" + } + }, + "robust-scale": { + "version": "1.0.2", + "resolved": "https://registry.npm.taobao.org/robust-scale/download/robust-scale-1.0.2.tgz", + "integrity": "sha1-d1Ey7QlULQKOWLLMecBikLz3jDI=", + "requires": { + "two-product": "^1.0.2", + "two-sum": "^1.0.0" + } + }, + "robust-subtract": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/robust-subtract/download/robust-subtract-1.0.0.tgz", + "integrity": "sha1-4LFk4e2LpOOl3aRaEgODSNvtPpo=" + }, + "robust-sum": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/robust-sum/download/robust-sum-1.0.0.tgz", + "integrity": "sha1-FmRuUlKStNJdgnV6KGlV4Lv6U9k=" + }, + "rollup": { + "version": "1.25.2", + "resolved": "https://registry.npm.taobao.org/rollup/download/rollup-1.25.2.tgz?cache=0&sync_timestamp=1580452414800&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Frollup%2Fdownload%2Frollup-1.25.2.tgz", + "integrity": "sha1-c59Qi9j37OUrtsH82oNGavgrf20=", + "dev": true, + "requires": { + "@types/estree": "*", + "@types/node": "*", + "acorn": "^7.1.0" + } + }, + "run-async": { + "version": "2.3.0", + "resolved": "https://registry.npm.taobao.org/run-async/download/run-async-2.3.0.tgz", + "integrity": "sha1-A3GrSuC91yDUFm19/aZP96RFpsA=", + "dev": true, + "requires": { + "is-promise": "^2.1.0" + } + }, + "run-queue": { + "version": "1.0.3", + "resolved": "https://registry.npm.taobao.org/run-queue/download/run-queue-1.0.3.tgz", + "integrity": "sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec=", + "dev": true, + "requires": { + "aproba": "^1.1.1" + } + }, + "rxjs": { + "version": "6.5.4", + "resolved": "https://registry.npm.taobao.org/rxjs/download/rxjs-6.5.4.tgz", + "integrity": "sha1-4Hd/4NGEzseHLfFH8wNXLUFOIRw=", + "requires": { + "tslib": "^1.9.0" + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npm.taobao.org/safe-buffer/download/safe-buffer-5.1.2.tgz", + "integrity": "sha1-mR7GnSluAxN0fVm9/St0XDX4go0=" + }, + "safe-regex": { + "version": "1.1.0", + "resolved": "https://registry.npm.taobao.org/safe-regex/download/safe-regex-1.1.0.tgz", + "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", + "dev": true, + "requires": { + "ret": "~0.1.10" + } + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npm.taobao.org/safer-buffer/download/safer-buffer-2.1.2.tgz", + "integrity": "sha1-RPoWGwGHuVSd2Eu5GAL5vYOFzWo=" + }, + "sass": { + "version": "1.23.3", + "resolved": "https://registry.npm.taobao.org/sass/download/sass-1.23.3.tgz?cache=0&sync_timestamp=1581130265905&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsass%2Fdownload%2Fsass-1.23.3.tgz", + "integrity": "sha1-8HUDuejSvPBu9p6L7qXQhVibFiA=", + "dev": true, + "requires": { + "chokidar": ">=2.0.0 <4.0.0" + } + }, + "sass-loader": { + "version": "8.0.0", + "resolved": "https://registry.npm.taobao.org/sass-loader/download/sass-loader-8.0.0.tgz?cache=0&sync_timestamp=1578921665787&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsass-loader%2Fdownload%2Fsass-loader-8.0.0.tgz", + "integrity": "sha1-57B6PjV/ll5rA91FsBawqXRq95c=", + "dev": true, + "requires": { + "clone-deep": "^4.0.1", + "loader-utils": "^1.2.3", + "neo-async": "^2.6.1", + "schema-utils": "^2.1.0", + "semver": "^6.3.0" + }, + "dependencies": { + "schema-utils": { + "version": "2.6.4", + "resolved": "https://registry.npm.taobao.org/schema-utils/download/schema-utils-2.6.4.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fschema-utils%2Fdownload%2Fschema-utils-2.6.4.tgz", + "integrity": "sha1-on779uTnhonZGHLuPM+lfXvdD1M=", + "dev": true, + "requires": { + "ajv": "^6.10.2", + "ajv-keywords": "^3.4.1" + } + } + } + }, + "saucelabs": { + "version": "1.5.0", + "resolved": "https://registry.npm.taobao.org/saucelabs/download/saucelabs-1.5.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsaucelabs%2Fdownload%2Fsaucelabs-1.5.0.tgz", + "integrity": "sha1-lAWnPDYNRJsjKDmRmobDltN5/Z0=", + "dev": true, + "requires": { + "https-proxy-agent": "^2.2.1" + } + }, + "sax": { + "version": "1.2.4", + "resolved": "https://registry.npm.taobao.org/sax/download/sax-1.2.4.tgz", + "integrity": "sha1-KBYjTiN4vdxOU1T6tcqold9xANk=", + "dev": true + }, + "schema-utils": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/schema-utils/download/schema-utils-1.0.0.tgz?cache=0&sync_timestamp=1574946791935&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fschema-utils%2Fdownload%2Fschema-utils-1.0.0.tgz", + "integrity": "sha1-C3mpMgTXtgDUsoUNH2bCo0lRx3A=", + "dev": true, + "requires": { + "ajv": "^6.1.0", + "ajv-errors": "^1.0.0", + "ajv-keywords": "^3.1.0" + } + }, + "select-hose": { + "version": "2.0.0", + "resolved": "https://registry.npm.taobao.org/select-hose/download/select-hose-2.0.0.tgz", + "integrity": "sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo=", + "dev": true + }, + "selenium-webdriver": { + "version": "3.6.0", + "resolved": "https://registry.npm.taobao.org/selenium-webdriver/download/selenium-webdriver-3.6.0.tgz", + "integrity": "sha1-K6h6FmLAILiYjJga5iyyoBKY6vw=", + "dev": true, + "requires": { + "jszip": "^3.1.3", + "rimraf": "^2.5.4", + "tmp": "0.0.30", + "xml2js": "^0.4.17" + }, + "dependencies": { + "tmp": { + "version": "0.0.30", + "resolved": "https://registry.npm.taobao.org/tmp/download/tmp-0.0.30.tgz", + "integrity": "sha1-ckGdSovn1s51FI/YsyTlk6cRwu0=", + "dev": true, + "requires": { + "os-tmpdir": "~1.0.1" + } + } + } + }, + "selfsigned": { + "version": "1.10.7", + "resolved": "https://registry.npm.taobao.org/selfsigned/download/selfsigned-1.10.7.tgz?cache=0&sync_timestamp=1569952074772&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fselfsigned%2Fdownload%2Fselfsigned-1.10.7.tgz", + "integrity": "sha1-2lgZ/QSdVXTyjoipvMbbxubzkGs=", + "dev": true, + "requires": { + "node-forge": "0.9.0" + } + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npm.taobao.org/semver/download/semver-6.3.0.tgz", + "integrity": "sha1-7gpkyK9ejO6mdoexM3YeG+y9HT0=", + "dev": true + }, + "semver-dsl": { + "version": "1.0.1", + "resolved": "https://registry.npm.taobao.org/semver-dsl/download/semver-dsl-1.0.1.tgz", + "integrity": "sha1-02eN5VVeimH2Ke7QJTZq5fJzQKA=", + "dev": true, + "requires": { + "semver": "^5.3.0" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npm.taobao.org/semver/download/semver-5.7.1.tgz", + "integrity": "sha1-qVT5Ma66UI0we78Gnv8MAclhFvc=", + "dev": true + } + } + }, + "semver-intersect": { + "version": "1.4.0", + "resolved": "https://registry.npm.taobao.org/semver-intersect/download/semver-intersect-1.4.0.tgz", + "integrity": "sha1-vdnAa+3N0v7bjNNSw8Q+6MYTIfM=", + "dev": true, + "requires": { + "semver": "^5.0.0" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npm.taobao.org/semver/download/semver-5.7.1.tgz", + "integrity": "sha1-qVT5Ma66UI0we78Gnv8MAclhFvc=", + "dev": true + } + } + }, + "send": { + "version": "0.17.1", + "resolved": "https://registry.npm.taobao.org/send/download/send-0.17.1.tgz", + "integrity": "sha1-wdiwWfeQD3Rm3Uk4vcROEd2zdsg=", + "dev": true, + "requires": { + "debug": "2.6.9", + "depd": "~1.1.2", + "destroy": "~1.0.4", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "~1.7.2", + "mime": "1.6.0", + "ms": "2.1.1", + "on-finished": "~2.3.0", + "range-parser": "~1.2.1", + "statuses": "~1.5.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npm.taobao.org/debug/download/debug-2.6.9.tgz", + "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=", + "dev": true, + "requires": { + "ms": "2.0.0" + }, + "dependencies": { + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npm.taobao.org/ms/download/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } + } + }, + "ms": { + "version": "2.1.1", + "resolved": "https://registry.npm.taobao.org/ms/download/ms-2.1.1.tgz", + "integrity": "sha1-MKWGTrPrsKZvLr5tcnrwagnYbgo=", + "dev": true + } + } + }, + "serialize-javascript": { + "version": "2.1.2", + "resolved": "https://registry.npm.taobao.org/serialize-javascript/download/serialize-javascript-2.1.2.tgz?cache=0&sync_timestamp=1575883256113&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fserialize-javascript%2Fdownload%2Fserialize-javascript-2.1.2.tgz", + "integrity": "sha1-7OxTsOAxe9yV73arcHS3OEeF+mE=", + "dev": true + }, + "serve-index": { + "version": "1.9.1", + "resolved": "https://registry.npm.taobao.org/serve-index/download/serve-index-1.9.1.tgz", + "integrity": "sha1-03aNabHn2C5c4FD/9bRTvqEqkjk=", + "dev": true, + "requires": { + "accepts": "~1.3.4", + "batch": "0.6.1", + "debug": "2.6.9", + "escape-html": "~1.0.3", + "http-errors": "~1.6.2", + "mime-types": "~2.1.17", + "parseurl": "~1.3.2" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npm.taobao.org/debug/download/debug-2.6.9.tgz", + "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "http-errors": { + "version": "1.6.3", + "resolved": "https://registry.npm.taobao.org/http-errors/download/http-errors-1.6.3.tgz", + "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", + "dev": true, + "requires": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.0", + "statuses": ">= 1.4.0 < 2" + } + }, + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npm.taobao.org/inherits/download/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npm.taobao.org/ms/download/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "setprototypeof": { + "version": "1.1.0", + "resolved": "https://registry.npm.taobao.org/setprototypeof/download/setprototypeof-1.1.0.tgz?cache=0&sync_timestamp=1563425484616&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsetprototypeof%2Fdownload%2Fsetprototypeof-1.1.0.tgz", + "integrity": "sha1-0L2FU2iHtv58DYGMuWLZ2RxU5lY=", + "dev": true + } + } + }, + "serve-static": { + "version": "1.14.1", + "resolved": "https://registry.npm.taobao.org/serve-static/download/serve-static-1.14.1.tgz", + "integrity": "sha1-Zm5jbcTwEPfvKZcKiKZ0MgiYsvk=", + "dev": true, + "requires": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.17.1" + } + }, + "set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npm.taobao.org/set-blocking/download/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", + "dev": true + }, + "set-immediate-shim": { + "version": "1.0.1", + "resolved": "https://registry.npm.taobao.org/set-immediate-shim/download/set-immediate-shim-1.0.1.tgz", + "integrity": "sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E=", + "dev": true + }, + "set-value": { + "version": "2.0.1", + "resolved": "https://registry.npm.taobao.org/set-value/download/set-value-2.0.1.tgz", + "integrity": "sha1-oY1AUw5vB95CKMfe/kInr4ytAFs=", + "dev": true, + "requires": { + "extend-shallow": "^2.0.1", + "is-extendable": "^0.1.1", + "is-plain-object": "^2.0.3", + "split-string": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npm.taobao.org/extend-shallow/download/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npm.taobao.org/setimmediate/download/setimmediate-1.0.5.tgz", + "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=", + "dev": true + }, + "setprototypeof": { + "version": "1.1.1", + "resolved": "https://registry.npm.taobao.org/setprototypeof/download/setprototypeof-1.1.1.tgz?cache=0&sync_timestamp=1563425484616&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsetprototypeof%2Fdownload%2Fsetprototypeof-1.1.1.tgz", + "integrity": "sha1-fpWsskqpL1iF4KvvW6ExMw1K5oM=", + "dev": true + }, + "sha.js": { + "version": "2.4.11", + "resolved": "https://registry.npm.taobao.org/sha.js/download/sha.js-2.4.11.tgz", + "integrity": "sha1-N6XPC4HsvGlD3hCbopYNGyZYSuc=", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "shallow-clone": { + "version": "3.0.1", + "resolved": "https://registry.npm.taobao.org/shallow-clone/download/shallow-clone-3.0.1.tgz", + "integrity": "sha1-jymBrZJTH1UDWwH7IwdppA4C76M=", + "dev": true, + "requires": { + "kind-of": "^6.0.2" + } + }, + "shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npm.taobao.org/shebang-command/download/shebang-command-1.2.0.tgz", + "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + "dev": true, + "requires": { + "shebang-regex": "^1.0.0" + } + }, + "shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/shebang-regex/download/shebang-regex-1.0.0.tgz", + "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", + "dev": true + }, + "signal-exit": { + "version": "3.0.2", + "resolved": "https://registry.npm.taobao.org/signal-exit/download/signal-exit-3.0.2.tgz", + "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", + "dev": true + }, + "simple-swizzle": { + "version": "0.2.2", + "resolved": "https://registry.npm.taobao.org/simple-swizzle/download/simple-swizzle-0.2.2.tgz", + "integrity": "sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo=", + "dev": true, + "requires": { + "is-arrayish": "^0.3.1" + }, + "dependencies": { + "is-arrayish": { + "version": "0.3.2", + "resolved": "https://registry.npm.taobao.org/is-arrayish/download/is-arrayish-0.3.2.tgz", + "integrity": "sha1-RXSirlb3qyBolvtDHq7tBm/fjwM=", + "dev": true + } + } + }, + "skmeans": { + "version": "0.9.7", + "resolved": "https://registry.npm.taobao.org/skmeans/download/skmeans-0.9.7.tgz", + "integrity": "sha1-cmcM67coUI9W4pwOENEeYjUpzl0=" + }, + "slash": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/slash/download/slash-1.0.0.tgz", + "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=", + "dev": true + }, + "smart-buffer": { + "version": "4.1.0", + "resolved": "https://registry.npm.taobao.org/smart-buffer/download/smart-buffer-4.1.0.tgz", + "integrity": "sha1-kWBcJdkWUvRmHqacz0XxszHKIbo=", + "dev": true + }, + "snapdragon": { + "version": "0.8.2", + "resolved": "https://registry.npm.taobao.org/snapdragon/download/snapdragon-0.8.2.tgz", + "integrity": "sha1-ZJIufFZbDhQgS6GqfWlkJ40lGC0=", + "dev": true, + "requires": { + "base": "^0.11.1", + "debug": "^2.2.0", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "map-cache": "^0.2.2", + "source-map": "^0.5.6", + "source-map-resolve": "^0.5.0", + "use": "^3.1.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npm.taobao.org/debug/download/debug-2.6.9.tgz", + "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npm.taobao.org/define-property/download/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npm.taobao.org/extend-shallow/download/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npm.taobao.org/ms/download/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + } + } + }, + "snapdragon-node": { + "version": "2.1.1", + "resolved": "https://registry.npm.taobao.org/snapdragon-node/download/snapdragon-node-2.1.1.tgz", + "integrity": "sha1-bBdfhv8UvbByRWPo88GwIaKGhTs=", + "dev": true, + "requires": { + "define-property": "^1.0.0", + "isobject": "^3.0.0", + "snapdragon-util": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/define-property/download/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/is-accessor-descriptor/download/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha1-FpwvbT3x+ZJhgHI2XJsOofaHhlY=", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/is-data-descriptor/download/is-data-descriptor-1.0.0.tgz", + "integrity": "sha1-2Eh2Mh0Oet0DmQQGq7u9NrqSaMc=", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npm.taobao.org/is-descriptor/download/is-descriptor-1.0.2.tgz", + "integrity": "sha1-OxWXRqZmBLBPjIFSS6NlxfFNhuw=", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + } + } + }, + "snapdragon-util": { + "version": "3.0.1", + "resolved": "https://registry.npm.taobao.org/snapdragon-util/download/snapdragon-util-3.0.1.tgz", + "integrity": "sha1-+VZHlIbyrNeXAGk/b3uAXkWrVuI=", + "dev": true, + "requires": { + "kind-of": "^3.2.0" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npm.taobao.org/kind-of/download/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "socket.io": { + "version": "2.1.1", + "resolved": "https://registry.npm.taobao.org/socket.io/download/socket.io-2.1.1.tgz?cache=0&sync_timestamp=1569002852515&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsocket.io%2Fdownload%2Fsocket.io-2.1.1.tgz", + "integrity": "sha1-oGnF/qvuPmshSnW0DOBlLhz7mYA=", + "dev": true, + "requires": { + "debug": "~3.1.0", + "engine.io": "~3.2.0", + "has-binary2": "~1.0.2", + "socket.io-adapter": "~1.1.0", + "socket.io-client": "2.1.1", + "socket.io-parser": "~3.2.0" + }, + "dependencies": { + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npm.taobao.org/debug/download/debug-3.1.0.tgz", + "integrity": "sha1-W7WgZyYotkFJVmuhaBnmFRjGcmE=", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npm.taobao.org/ms/download/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } + } + }, + "socket.io-adapter": { + "version": "1.1.2", + "resolved": "https://registry.npm.taobao.org/socket.io-adapter/download/socket.io-adapter-1.1.2.tgz?cache=0&sync_timestamp=1574684498510&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsocket.io-adapter%2Fdownload%2Fsocket.io-adapter-1.1.2.tgz", + "integrity": "sha1-qz8Nb2a4/H/KOVmrWZH4IiF4m+k=", + "dev": true + }, + "socket.io-client": { + "version": "2.1.1", + "resolved": "https://registry.npm.taobao.org/socket.io-client/download/socket.io-client-2.1.1.tgz?cache=0&sync_timestamp=1569002853390&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsocket.io-client%2Fdownload%2Fsocket.io-client-2.1.1.tgz", + "integrity": "sha1-3LOBA0NqtFeN2wJmOK4vIbYjZx8=", + "dev": true, + "requires": { + "backo2": "1.0.2", + "base64-arraybuffer": "0.1.5", + "component-bind": "1.0.0", + "component-emitter": "1.2.1", + "debug": "~3.1.0", + "engine.io-client": "~3.2.0", + "has-binary2": "~1.0.2", + "has-cors": "1.1.0", + "indexof": "0.0.1", + "object-component": "0.0.3", + "parseqs": "0.0.5", + "parseuri": "0.0.5", + "socket.io-parser": "~3.2.0", + "to-array": "0.1.4" + }, + "dependencies": { + "component-emitter": { + "version": "1.2.1", + "resolved": "https://registry.npm.taobao.org/component-emitter/download/component-emitter-1.2.1.tgz", + "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=", + "dev": true + }, + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npm.taobao.org/debug/download/debug-3.1.0.tgz", + "integrity": "sha1-W7WgZyYotkFJVmuhaBnmFRjGcmE=", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npm.taobao.org/ms/download/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } + } + }, + "socket.io-parser": { + "version": "3.2.0", + "resolved": "https://registry.npm.taobao.org/socket.io-parser/download/socket.io-parser-3.2.0.tgz", + "integrity": "sha1-58Yii2qh+BTmFIrqMltRqpSZ4Hc=", + "dev": true, + "requires": { + "component-emitter": "1.2.1", + "debug": "~3.1.0", + "isarray": "2.0.1" + }, + "dependencies": { + "component-emitter": { + "version": "1.2.1", + "resolved": "https://registry.npm.taobao.org/component-emitter/download/component-emitter-1.2.1.tgz", + "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=", + "dev": true + }, + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npm.taobao.org/debug/download/debug-3.1.0.tgz", + "integrity": "sha1-W7WgZyYotkFJVmuhaBnmFRjGcmE=", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "isarray": { + "version": "2.0.1", + "resolved": "https://registry.npm.taobao.org/isarray/download/isarray-2.0.1.tgz?cache=0&sync_timestamp=1562592125418&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fisarray%2Fdownload%2Fisarray-2.0.1.tgz", + "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=", + "dev": true + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npm.taobao.org/ms/download/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } + } + }, + "sockjs": { + "version": "0.3.19", + "resolved": "https://registry.npm.taobao.org/sockjs/download/sockjs-0.3.19.tgz", + "integrity": "sha1-2Xa76ACve9IK4IWY1YI5NQiZPA0=", + "dev": true, + "requires": { + "faye-websocket": "^0.10.0", + "uuid": "^3.0.1" + } + }, + "sockjs-client": { + "version": "1.4.0", + "resolved": "https://registry.npm.taobao.org/sockjs-client/download/sockjs-client-1.4.0.tgz", + "integrity": "sha1-yfJWjhnI/YFztJl+o0IOC7MGx9U=", + "dev": true, + "requires": { + "debug": "^3.2.5", + "eventsource": "^1.0.7", + "faye-websocket": "~0.11.1", + "inherits": "^2.0.3", + "json3": "^3.3.2", + "url-parse": "^1.4.3" + }, + "dependencies": { + "debug": { + "version": "3.2.6", + "resolved": "https://registry.npm.taobao.org/debug/download/debug-3.2.6.tgz", + "integrity": "sha1-6D0X3hbYp++3cX7b5fsQE17uYps=", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "faye-websocket": { + "version": "0.11.3", + "resolved": "https://registry.npm.taobao.org/faye-websocket/download/faye-websocket-0.11.3.tgz", + "integrity": "sha1-XA6aiWjokSwoZjn96XeosgnyUI4=", + "dev": true, + "requires": { + "websocket-driver": ">=0.5.1" + } + } + } + }, + "socks": { + "version": "2.3.3", + "resolved": "https://registry.npm.taobao.org/socks/download/socks-2.3.3.tgz?cache=0&sync_timestamp=1573063369351&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsocks%2Fdownload%2Fsocks-2.3.3.tgz", + "integrity": "sha1-ARKfCl1TTSuJdxLtis6rfuZdeOM=", + "dev": true, + "requires": { + "ip": "1.1.5", + "smart-buffer": "^4.1.0" + } + }, + "socks-proxy-agent": { + "version": "4.0.2", + "resolved": "https://registry.npm.taobao.org/socks-proxy-agent/download/socks-proxy-agent-4.0.2.tgz", + "integrity": "sha1-PImR8xRbJ5nnDhG9X7yLGWMRY4Y=", + "dev": true, + "requires": { + "agent-base": "~4.2.1", + "socks": "~2.3.2" + }, + "dependencies": { + "agent-base": { + "version": "4.2.1", + "resolved": "https://registry.npm.taobao.org/agent-base/download/agent-base-4.2.1.tgz", + "integrity": "sha1-2J5ZmfeXh1Z0wH2H8mD8Qeg+jKk=", + "dev": true, + "requires": { + "es6-promisify": "^5.0.0" + } + } + } + }, + "sort-keys": { + "version": "1.1.2", + "resolved": "https://registry.npm.taobao.org/sort-keys/download/sort-keys-1.1.2.tgz", + "integrity": "sha1-RBttTTRnmPG05J6JIK37oOVD+a0=", + "dev": true, + "requires": { + "is-plain-obj": "^1.0.0" + } + }, + "source-list-map": { + "version": "2.0.1", + "resolved": "https://registry.npm.taobao.org/source-list-map/download/source-list-map-2.0.1.tgz", + "integrity": "sha1-OZO9hzv8SEecyp6jpUeDXHwVSzQ=", + "dev": true + }, + "source-map": { + "version": "0.7.3", + "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.7.3.tgz", + "integrity": "sha1-UwL4FpAxc1ImVECS5kmB91F1A4M=", + "dev": true + }, + "source-map-loader": { + "version": "0.2.4", + "resolved": "https://registry.npm.taobao.org/source-map-loader/download/source-map-loader-0.2.4.tgz", + "integrity": "sha1-wYsNxuI79m9nkkN1V8VpoR4HInE=", + "dev": true, + "requires": { + "async": "^2.5.0", + "loader-utils": "^1.1.0" + } + }, + "source-map-resolve": { + "version": "0.5.3", + "resolved": "https://registry.npm.taobao.org/source-map-resolve/download/source-map-resolve-0.5.3.tgz?cache=0&sync_timestamp=1577562191980&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsource-map-resolve%2Fdownload%2Fsource-map-resolve-0.5.3.tgz", + "integrity": "sha1-GQhmvs51U+H48mei7oLGBrVQmho=", + "dev": true, + "requires": { + "atob": "^2.1.2", + "decode-uri-component": "^0.2.0", + "resolve-url": "^0.2.1", + "source-map-url": "^0.4.0", + "urix": "^0.1.0" + } + }, + "source-map-support": { + "version": "0.5.13", + "resolved": "https://registry.npm.taobao.org/source-map-support/download/source-map-support-0.5.13.tgz", + "integrity": "sha1-MbJKnC5zwt6FBmwP631Edn7VKTI=", + "dev": true, + "requires": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.6.1.tgz", + "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=", + "dev": true + } + } + }, + "source-map-url": { + "version": "0.4.0", + "resolved": "https://registry.npm.taobao.org/source-map-url/download/source-map-url-0.4.0.tgz", + "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=", + "dev": true + }, + "sourcemap-codec": { + "version": "1.4.8", + "resolved": "https://registry.npm.taobao.org/sourcemap-codec/download/sourcemap-codec-1.4.8.tgz", + "integrity": "sha1-6oBL2UhXQC5pktBaOO8a41qatMQ=", + "dev": true + }, + "spdx-correct": { + "version": "3.1.0", + "resolved": "https://registry.npm.taobao.org/spdx-correct/download/spdx-correct-3.1.0.tgz", + "integrity": "sha1-+4PlBERSaPFUsHTiGMh8ADzTHfQ=", + "dev": true, + "requires": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-exceptions": { + "version": "2.2.0", + "resolved": "https://registry.npm.taobao.org/spdx-exceptions/download/spdx-exceptions-2.2.0.tgz", + "integrity": "sha1-LqRQrudPKom/uUUZwH/Nb0EyKXc=", + "dev": true + }, + "spdx-expression-parse": { + "version": "3.0.0", + "resolved": "https://registry.npm.taobao.org/spdx-expression-parse/download/spdx-expression-parse-3.0.0.tgz", + "integrity": "sha1-meEZt6XaAOBUkcn6M4t5BII7QdA=", + "dev": true, + "requires": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-license-ids": { + "version": "3.0.5", + "resolved": "https://registry.npm.taobao.org/spdx-license-ids/download/spdx-license-ids-3.0.5.tgz", + "integrity": "sha1-NpS1gEVnpFjTyARYQqY1hjL2JlQ=", + "dev": true + }, + "spdy": { + "version": "4.0.1", + "resolved": "https://registry.npm.taobao.org/spdy/download/spdy-4.0.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fspdy%2Fdownload%2Fspdy-4.0.1.tgz", + "integrity": "sha1-bxLtHF236k8k67i4m6WMh8CCV/I=", + "dev": true, + "requires": { + "debug": "^4.1.0", + "handle-thing": "^2.0.0", + "http-deceiver": "^1.2.7", + "select-hose": "^2.0.0", + "spdy-transport": "^3.0.0" + } + }, + "spdy-transport": { + "version": "3.0.0", + "resolved": "https://registry.npm.taobao.org/spdy-transport/download/spdy-transport-3.0.0.tgz", + "integrity": "sha1-ANSGOmQArXXfkzYaFghgXl3NzzE=", + "dev": true, + "requires": { + "debug": "^4.1.0", + "detect-node": "^2.0.4", + "hpack.js": "^2.1.6", + "obuf": "^1.1.2", + "readable-stream": "^3.0.6", + "wbuf": "^1.7.3" + }, + "dependencies": { + "readable-stream": { + "version": "3.5.0", + "resolved": "https://registry.npm.taobao.org/readable-stream/download/readable-stream-3.5.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Freadable-stream%2Fdownload%2Freadable-stream-3.5.0.tgz", + "integrity": "sha1-Rl1w5tEIf2Fi0HnNC123++v9FgY=", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + } + } + }, + "speed-measure-webpack-plugin": { + "version": "1.3.1", + "resolved": "https://registry.npm.taobao.org/speed-measure-webpack-plugin/download/speed-measure-webpack-plugin-1.3.1.tgz", + "integrity": "sha1-aYQKXNwItGOGl9rH2wN/WV1/NqA=", + "dev": true, + "requires": { + "chalk": "^2.0.1" + } + }, + "split-string": { + "version": "3.1.0", + "resolved": "https://registry.npm.taobao.org/split-string/download/split-string-3.1.0.tgz", + "integrity": "sha1-fLCd2jqGWFcFxks5pkZgOGguj+I=", + "dev": true, + "requires": { + "extend-shallow": "^3.0.0" + } + }, + "sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npm.taobao.org/sprintf-js/download/sprintf-js-1.0.3.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsprintf-js%2Fdownload%2Fsprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", + "dev": true + }, + "sshpk": { + "version": "1.16.1", + "resolved": "https://registry.npm.taobao.org/sshpk/download/sshpk-1.16.1.tgz", + "integrity": "sha1-+2YcC+8ps520B2nuOfpwCT1vaHc=", + "dev": true, + "requires": { + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "safer-buffer": "^2.0.2", + "tweetnacl": "~0.14.0" + } + }, + "ssr-window": { + "version": "1.0.1", + "resolved": "https://registry.npm.taobao.org/ssr-window/download/ssr-window-1.0.1.tgz", + "integrity": "sha1-MHUqakZm53Z/C35qpvwv29DZs2k=" + }, + "ssri": { + "version": "7.1.0", + "resolved": "https://registry.npm.taobao.org/ssri/download/ssri-7.1.0.tgz?cache=0&sync_timestamp=1571961490394&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fssri%2Fdownload%2Fssri-7.1.0.tgz", + "integrity": "sha1-ksJBv23oI2W1x/tL126XVSLhKU0=", + "dev": true, + "requires": { + "figgy-pudding": "^3.5.1", + "minipass": "^3.1.1" + } + }, + "stable": { + "version": "0.1.8", + "resolved": "https://registry.npm.taobao.org/stable/download/stable-0.1.8.tgz", + "integrity": "sha1-g26zyDgv4pNv6vVEYxAXzn1Ho88=", + "dev": true + }, + "static-extend": { + "version": "0.1.2", + "resolved": "https://registry.npm.taobao.org/static-extend/download/static-extend-0.1.2.tgz", + "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", + "dev": true, + "requires": { + "define-property": "^0.2.5", + "object-copy": "^0.1.0" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npm.taobao.org/define-property/download/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + } + } + }, + "statuses": { + "version": "1.5.0", + "resolved": "https://registry.npm.taobao.org/statuses/download/statuses-1.5.0.tgz", + "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", + "dev": true + }, + "stream-browserify": { + "version": "2.0.2", + "resolved": "https://registry.npm.taobao.org/stream-browserify/download/stream-browserify-2.0.2.tgz", + "integrity": "sha1-h1IdOKRKp+6RzhzSpH3wy0ndZgs=", + "dev": true, + "requires": { + "inherits": "~2.0.1", + "readable-stream": "^2.0.2" + } + }, + "stream-each": { + "version": "1.2.3", + "resolved": "https://registry.npm.taobao.org/stream-each/download/stream-each-1.2.3.tgz", + "integrity": "sha1-6+J6DDibBPvMIzZClS4Qcxr6m64=", + "dev": true, + "requires": { + "end-of-stream": "^1.1.0", + "stream-shift": "^1.0.0" + } + }, + "stream-http": { + "version": "2.8.3", + "resolved": "https://registry.npm.taobao.org/stream-http/download/stream-http-2.8.3.tgz", + "integrity": "sha1-stJCRpKIpaJ+xP6JM6z2I95lFPw=", + "dev": true, + "requires": { + "builtin-status-codes": "^3.0.0", + "inherits": "^2.0.1", + "readable-stream": "^2.3.6", + "to-arraybuffer": "^1.0.0", + "xtend": "^4.0.0" + } + }, + "stream-shift": { + "version": "1.0.1", + "resolved": "https://registry.npm.taobao.org/stream-shift/download/stream-shift-1.0.1.tgz?cache=0&sync_timestamp=1576147157429&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstream-shift%2Fdownload%2Fstream-shift-1.0.1.tgz", + "integrity": "sha1-1wiCgVWasneEJCebCHfaPDktWj0=", + "dev": true + }, + "streamroller": { + "version": "1.0.6", + "resolved": "https://registry.npm.taobao.org/streamroller/download/streamroller-1.0.6.tgz", + "integrity": "sha1-gWfYSW7Z8Z8F7ksVjZYRMhuMrNk=", + "dev": true, + "requires": { + "async": "^2.6.2", + "date-format": "^2.0.0", + "debug": "^3.2.6", + "fs-extra": "^7.0.1", + "lodash": "^4.17.14" + }, + "dependencies": { + "debug": { + "version": "3.2.6", + "resolved": "https://registry.npm.taobao.org/debug/download/debug-3.2.6.tgz", + "integrity": "sha1-6D0X3hbYp++3cX7b5fsQE17uYps=", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + } + } + }, + "strict-uri-encode": { + "version": "1.1.0", + "resolved": "https://registry.npm.taobao.org/strict-uri-encode/download/strict-uri-encode-1.1.0.tgz", + "integrity": "sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM=", + "dev": true + }, + "string-width": { + "version": "2.1.1", + "resolved": "https://registry.npm.taobao.org/string-width/download/string-width-2.1.1.tgz", + "integrity": "sha1-q5Pyeo3BPSjKyBXEYhQ6bZASrp4=", + "dev": true, + "requires": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npm.taobao.org/ansi-regex/download/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npm.taobao.org/strip-ansi/download/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "^3.0.0" + } + } + } + }, + "string.prototype.trimleft": { + "version": "2.1.1", + "resolved": "https://registry.npm.taobao.org/string.prototype.trimleft/download/string.prototype.trimleft-2.1.1.tgz", + "integrity": "sha1-m9uKxqvW1gKxek7TIYcNL43O/HQ=", + "requires": { + "define-properties": "^1.1.3", + "function-bind": "^1.1.1" + } + }, + "string.prototype.trimright": { + "version": "2.1.1", + "resolved": "https://registry.npm.taobao.org/string.prototype.trimright/download/string.prototype.trimright-2.1.1.tgz", + "integrity": "sha1-RAMUsVmWyGbOigNBiU1FGGIAxdk=", + "requires": { + "define-properties": "^1.1.3", + "function-bind": "^1.1.1" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npm.taobao.org/string_decoder/download/string_decoder-1.1.1.tgz?cache=0&sync_timestamp=1565170823020&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstring_decoder%2Fdownload%2Fstring_decoder-1.1.1.tgz", + "integrity": "sha1-nPFhG6YmhdcDCunkujQUnDrwP8g=", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npm.taobao.org/strip-ansi/download/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npm.taobao.org/strip-bom/download/strip-bom-3.0.0.tgz", + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", + "dev": true + }, + "strip-eof": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/strip-eof/download/strip-eof-1.0.0.tgz", + "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", + "dev": true + }, + "style-loader": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/style-loader/download/style-loader-1.0.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstyle-loader%2Fdownload%2Fstyle-loader-1.0.0.tgz", + "integrity": "sha1-HVKW+RZejiyF0k7uC3yvnsjKH4I=", + "dev": true, + "requires": { + "loader-utils": "^1.2.3", + "schema-utils": "^2.0.1" + }, + "dependencies": { + "schema-utils": { + "version": "2.6.4", + "resolved": "https://registry.npm.taobao.org/schema-utils/download/schema-utils-2.6.4.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fschema-utils%2Fdownload%2Fschema-utils-2.6.4.tgz", + "integrity": "sha1-on779uTnhonZGHLuPM+lfXvdD1M=", + "dev": true, + "requires": { + "ajv": "^6.10.2", + "ajv-keywords": "^3.4.1" + } + } + } + }, + "stylehacks": { + "version": "4.0.3", + "resolved": "https://registry.npm.taobao.org/stylehacks/download/stylehacks-4.0.3.tgz", + "integrity": "sha1-Zxj8r00eB9ihMYaQiB6NlnJqcdU=", + "dev": true, + "requires": { + "browserslist": "^4.0.0", + "postcss": "^7.0.0", + "postcss-selector-parser": "^3.0.0" + }, + "dependencies": { + "postcss-selector-parser": { + "version": "3.1.1", + "resolved": "https://registry.npm.taobao.org/postcss-selector-parser/download/postcss-selector-parser-3.1.1.tgz", + "integrity": "sha1-T4dfSvsMllc9XPTXQBGu4lCn6GU=", + "dev": true, + "requires": { + "dot-prop": "^4.1.1", + "indexes-of": "^1.0.1", + "uniq": "^1.0.1" + } + } + } + }, + "stylus": { + "version": "0.54.7", + "resolved": "https://registry.npm.taobao.org/stylus/download/stylus-0.54.7.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstylus%2Fdownload%2Fstylus-0.54.7.tgz", + "integrity": "sha1-xs5Hk5Ze5Ti86+UPMVN7/ATYjNI=", + "dev": true, + "requires": { + "css-parse": "~2.0.0", + "debug": "~3.1.0", + "glob": "^7.1.3", + "mkdirp": "~0.5.x", + "safer-buffer": "^2.1.2", + "sax": "~1.2.4", + "semver": "^6.0.0", + "source-map": "^0.7.3" + }, + "dependencies": { + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npm.taobao.org/debug/download/debug-3.1.0.tgz", + "integrity": "sha1-W7WgZyYotkFJVmuhaBnmFRjGcmE=", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npm.taobao.org/ms/download/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } + } + }, + "stylus-loader": { + "version": "3.0.2", + "resolved": "https://registry.npm.taobao.org/stylus-loader/download/stylus-loader-3.0.2.tgz", + "integrity": "sha1-J6cGQgsFo44DjnyssVNXjUUFE8Y=", + "dev": true, + "requires": { + "loader-utils": "^1.0.2", + "lodash.clonedeep": "^4.5.0", + "when": "~3.6.x" + } + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-5.5.0.tgz?cache=0&sync_timestamp=1569557271992&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-5.5.0.tgz", + "integrity": "sha1-4uaaRKyHcveKHsCzW2id9lMO/I8=", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + }, + "svgo": { + "version": "1.3.2", + "resolved": "https://registry.npm.taobao.org/svgo/download/svgo-1.3.2.tgz?cache=0&sync_timestamp=1572433377078&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsvgo%2Fdownload%2Fsvgo-1.3.2.tgz", + "integrity": "sha1-ttxRHAYzRsnkFbgeQ0ARRbltQWc=", + "dev": true, + "requires": { + "chalk": "^2.4.1", + "coa": "^2.0.2", + "css-select": "^2.0.0", + "css-select-base-adapter": "^0.1.1", + "css-tree": "1.0.0-alpha.37", + "csso": "^4.0.2", + "js-yaml": "^3.13.1", + "mkdirp": "~0.5.1", + "object.values": "^1.1.0", + "sax": "~1.2.4", + "stable": "^0.1.8", + "unquote": "~1.1.1", + "util.promisify": "~1.0.0" + } + }, + "swiper": { + "version": "5.3.7", + "resolved": "https://registry.npm.taobao.org/swiper/download/swiper-5.3.7.tgz?cache=0&sync_timestamp=1586538009404&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fswiper%2Fdownload%2Fswiper-5.3.7.tgz", + "integrity": "sha1-E0nAVXMOkkfkSCtyYxFmEZuD9Ak=", + "requires": { + "dom7": "^2.1.3", + "ssr-window": "^1.0.1" + } + }, + "symbol-observable": { + "version": "1.2.0", + "resolved": "https://registry.npm.taobao.org/symbol-observable/download/symbol-observable-1.2.0.tgz", + "integrity": "sha1-wiaIrtTqs83C3+rLtWFmBWCgCAQ=", + "dev": true + }, + "tapable": { + "version": "1.1.3", + "resolved": "https://registry.npm.taobao.org/tapable/download/tapable-1.1.3.tgz", + "integrity": "sha1-ofzMBrWNth/XpF2i2kT186Pme6I=", + "dev": true + }, + "tar": { + "version": "4.4.13", + "resolved": "https://registry.npm.taobao.org/tar/download/tar-4.4.13.tgz?cache=0&sync_timestamp=1570286254496&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ftar%2Fdownload%2Ftar-4.4.13.tgz", + "integrity": "sha1-Q7NkvFKIjVVSmGN7ENYHkCVKtSU=", + "dev": true, + "requires": { + "chownr": "^1.1.1", + "fs-minipass": "^1.2.5", + "minipass": "^2.8.6", + "minizlib": "^1.2.1", + "mkdirp": "^0.5.0", + "safe-buffer": "^5.1.2", + "yallist": "^3.0.3" + }, + "dependencies": { + "fs-minipass": { + "version": "1.2.7", + "resolved": "https://registry.npm.taobao.org/fs-minipass/download/fs-minipass-1.2.7.tgz", + "integrity": "sha1-zP+FcIQef+QmVpPaiJNsVa7X98c=", + "dev": true, + "requires": { + "minipass": "^2.6.0" + } + }, + "minipass": { + "version": "2.9.0", + "resolved": "https://registry.npm.taobao.org/minipass/download/minipass-2.9.0.tgz", + "integrity": "sha1-5xN2Ln0+Mv7YAxFc+T4EvKn8yaY=", + "dev": true, + "requires": { + "safe-buffer": "^5.1.2", + "yallist": "^3.0.0" + } + }, + "yallist": { + "version": "3.1.1", + "resolved": "https://registry.npm.taobao.org/yallist/download/yallist-3.1.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fyallist%2Fdownload%2Fyallist-3.1.1.tgz", + "integrity": "sha1-27fa+b/YusmrRev2ArjLrQ1dCP0=", + "dev": true + } + } + }, + "terser": { + "version": "4.5.1", + "resolved": "https://registry.npm.taobao.org/terser/download/terser-4.5.1.tgz", + "integrity": "sha1-Y7Uta2zjRKpv7c0O4GppV5nrUL0=", + "dev": true, + "requires": { + "commander": "^2.20.0", + "source-map": "~0.6.1", + "source-map-support": "~0.5.12" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.6.1.tgz", + "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=", + "dev": true + } + } + }, + "terser-webpack-plugin": { + "version": "2.3.3", + "resolved": "https://registry.npm.taobao.org/terser-webpack-plugin/download/terser-webpack-plugin-2.3.3.tgz?cache=0&sync_timestamp=1580403891929&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fterser-webpack-plugin%2Fdownload%2Fterser-webpack-plugin-2.3.3.tgz", + "integrity": "sha1-uJBDFovUFBU7q4b0NirCPVN7eLA=", + "dev": true, + "requires": { + "cacache": "^13.0.1", + "find-cache-dir": "^3.2.0", + "jest-worker": "^25.1.0", + "p-limit": "^2.2.2", + "schema-utils": "^2.6.4", + "serialize-javascript": "^2.1.2", + "source-map": "^0.6.1", + "terser": "^4.4.3", + "webpack-sources": "^1.4.3" + }, + "dependencies": { + "find-cache-dir": { + "version": "3.2.0", + "resolved": "https://registry.npm.taobao.org/find-cache-dir/download/find-cache-dir-3.2.0.tgz", + "integrity": "sha1-5/5EwavBKZ9RYUblYxCP0QBsGHQ=", + "dev": true, + "requires": { + "commondir": "^1.0.1", + "make-dir": "^3.0.0", + "pkg-dir": "^4.1.0" + } + }, + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npm.taobao.org/find-up/download/find-up-4.1.0.tgz", + "integrity": "sha1-l6/n1s3AvFkoWEt8jXsW6KmqXRk=", + "dev": true, + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npm.taobao.org/has-flag/download/has-flag-4.0.0.tgz", + "integrity": "sha1-lEdx/ZyByBJlxNaUGGDaBrtZR5s=", + "dev": true + }, + "jest-worker": { + "version": "25.1.0", + "resolved": "https://registry.npm.taobao.org/jest-worker/download/jest-worker-25.1.0.tgz?cache=0&sync_timestamp=1579654868650&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fjest-worker%2Fdownload%2Fjest-worker-25.1.0.tgz", + "integrity": "sha1-ddA4utb99Y66DS7Bg1hWxJfjkHo=", + "dev": true, + "requires": { + "merge-stream": "^2.0.0", + "supports-color": "^7.0.0" + } + }, + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npm.taobao.org/locate-path/download/locate-path-5.0.0.tgz", + "integrity": "sha1-Gvujlq/WdqbUJQTQpno6frn2KqA=", + "dev": true, + "requires": { + "p-locate": "^4.1.0" + } + }, + "make-dir": { + "version": "3.0.0", + "resolved": "https://registry.npm.taobao.org/make-dir/download/make-dir-3.0.0.tgz", + "integrity": "sha1-G1859rknDtM/nwVMXA+EMEmJ+AE=", + "dev": true, + "requires": { + "semver": "^6.0.0" + } + }, + "p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npm.taobao.org/p-locate/download/p-locate-4.1.0.tgz", + "integrity": "sha1-o0KLtwiLOmApL2aRkni3wpetTwc=", + "dev": true, + "requires": { + "p-limit": "^2.2.0" + } + }, + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npm.taobao.org/path-exists/download/path-exists-4.0.0.tgz", + "integrity": "sha1-UTvb4tO5XXdi6METfvoZXGxhtbM=", + "dev": true + }, + "pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npm.taobao.org/pkg-dir/download/pkg-dir-4.2.0.tgz", + "integrity": "sha1-8JkTPfft5CLoHR2ESCcO6z5CYfM=", + "dev": true, + "requires": { + "find-up": "^4.0.0" + } + }, + "schema-utils": { + "version": "2.6.4", + "resolved": "https://registry.npm.taobao.org/schema-utils/download/schema-utils-2.6.4.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fschema-utils%2Fdownload%2Fschema-utils-2.6.4.tgz", + "integrity": "sha1-on779uTnhonZGHLuPM+lfXvdD1M=", + "dev": true, + "requires": { + "ajv": "^6.10.2", + "ajv-keywords": "^3.4.1" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.6.1.tgz", + "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=", + "dev": true + }, + "supports-color": { + "version": "7.1.0", + "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-7.1.0.tgz?cache=0&sync_timestamp=1569557271992&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-7.1.0.tgz", + "integrity": "sha1-aOMlkd9z4lrRxLSRCKLsUHliv9E=", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "through": { + "version": "2.3.8", + "resolved": "https://registry.npm.taobao.org/through/download/through-2.3.8.tgz", + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", + "dev": true + }, + "through2": { + "version": "2.0.5", + "resolved": "https://registry.npm.taobao.org/through2/download/through2-2.0.5.tgz", + "integrity": "sha1-AcHjnrMdB8t9A6lqcIIyYLIxMs0=", + "dev": true, + "requires": { + "readable-stream": "~2.3.6", + "xtend": "~4.0.1" + } + }, + "thunky": { + "version": "1.1.0", + "resolved": "https://registry.npm.taobao.org/thunky/download/thunky-1.1.0.tgz", + "integrity": "sha1-Wrr3FKlAXbBQRzK7zNLO3Z75U30=", + "dev": true + }, + "timers-browserify": { + "version": "2.0.11", + "resolved": "https://registry.npm.taobao.org/timers-browserify/download/timers-browserify-2.0.11.tgz", + "integrity": "sha1-gAsfPu4nLlvFPuRloE0OgEwxIR8=", + "dev": true, + "requires": { + "setimmediate": "^1.0.4" + } + }, + "timsort": { + "version": "0.3.0", + "resolved": "https://registry.npm.taobao.org/timsort/download/timsort-0.3.0.tgz", + "integrity": "sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q=", + "dev": true + }, + "tinyqueue": { + "version": "1.2.3", + "resolved": "https://registry.npm.taobao.org/tinyqueue/download/tinyqueue-1.2.3.tgz", + "integrity": "sha1-tqYd4jBgWE2in4I2LkXfHsc1Pz0=" + }, + "tmp": { + "version": "0.0.33", + "resolved": "https://registry.npm.taobao.org/tmp/download/tmp-0.0.33.tgz", + "integrity": "sha1-bTQzWIl2jSGyvNoKonfO07G/rfk=", + "dev": true, + "requires": { + "os-tmpdir": "~1.0.2" + } + }, + "to-array": { + "version": "0.1.4", + "resolved": "https://registry.npm.taobao.org/to-array/download/to-array-0.1.4.tgz", + "integrity": "sha1-F+bBH3PdTz10zaek/zI46a2b+JA=", + "dev": true + }, + "to-arraybuffer": { + "version": "1.0.1", + "resolved": "https://registry.npm.taobao.org/to-arraybuffer/download/to-arraybuffer-1.0.1.tgz", + "integrity": "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=", + "dev": true + }, + "to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npm.taobao.org/to-fast-properties/download/to-fast-properties-2.0.0.tgz", + "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", + "dev": true + }, + "to-object-path": { + "version": "0.3.0", + "resolved": "https://registry.npm.taobao.org/to-object-path/download/to-object-path-0.3.0.tgz", + "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npm.taobao.org/kind-of/download/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "to-regex": { + "version": "3.0.2", + "resolved": "https://registry.npm.taobao.org/to-regex/download/to-regex-3.0.2.tgz", + "integrity": "sha1-E8/dmzNlUvMLUfM6iuG0Knp1mc4=", + "dev": true, + "requires": { + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "regex-not": "^1.0.2", + "safe-regex": "^1.1.0" + } + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npm.taobao.org/to-regex-range/download/to-regex-range-5.0.1.tgz", + "integrity": "sha1-FkjESq58jZiKMmAY7XL1tN0DkuQ=", + "dev": true, + "requires": { + "is-number": "^7.0.0" + } + }, + "toidentifier": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/toidentifier/download/toidentifier-1.0.0.tgz", + "integrity": "sha1-fhvjRw8ed5SLxD2Uo8j013UrpVM=", + "dev": true + }, + "topojson-client": { + "version": "3.1.0", + "resolved": "https://registry.npm.taobao.org/topojson-client/download/topojson-client-3.1.0.tgz", + "integrity": "sha1-Iuix7QiiuSL+60r29Ttu8JpGe5k=", + "requires": { + "commander": "2" + } + }, + "topojson-server": { + "version": "3.0.1", + "resolved": "https://registry.npm.taobao.org/topojson-server/download/topojson-server-3.0.1.tgz", + "integrity": "sha1-0rPsCVtnMimb52pIQGERsyAaNPU=", + "requires": { + "commander": "2" + } + }, + "tough-cookie": { + "version": "2.4.3", + "resolved": "https://registry.npm.taobao.org/tough-cookie/download/tough-cookie-2.4.3.tgz", + "integrity": "sha1-U/Nto/R3g7CSWvoG/587FlKA94E=", + "dev": true, + "requires": { + "psl": "^1.1.24", + "punycode": "^1.4.1" + }, + "dependencies": { + "punycode": { + "version": "1.4.1", + "resolved": "https://registry.npm.taobao.org/punycode/download/punycode-1.4.1.tgz", + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", + "dev": true + } + } + }, + "tree-kill": { + "version": "1.2.2", + "resolved": "https://registry.npm.taobao.org/tree-kill/download/tree-kill-1.2.2.tgz?cache=0&sync_timestamp=1576090178663&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ftree-kill%2Fdownload%2Ftree-kill-1.2.2.tgz", + "integrity": "sha1-TKCakJLIi3OnzcXooBtQeweQoMw=", + "dev": true + }, + "ts-node": { + "version": "7.0.1", + "resolved": "https://registry.npm.taobao.org/ts-node/download/ts-node-7.0.1.tgz", + "integrity": "sha1-lWLcLR5tJI0kvFX3c+P2FDN9m68=", + "dev": true, + "requires": { + "arrify": "^1.0.0", + "buffer-from": "^1.1.0", + "diff": "^3.1.0", + "make-error": "^1.1.1", + "minimist": "^1.2.0", + "mkdirp": "^0.5.1", + "source-map-support": "^0.5.6", + "yn": "^2.0.0" + } + }, + "tslib": { + "version": "1.10.0", + "resolved": "https://registry.npm.taobao.org/tslib/download/tslib-1.10.0.tgz", + "integrity": "sha1-w8GflZc/sKYpc/sJ2Q2WHuQ+XIo=" + }, + "tslint": { + "version": "5.15.0", + "resolved": "https://registry.npm.taobao.org/tslint/download/tslint-5.15.0.tgz", + "integrity": "sha1-b/sYCYbWOvoeUx/rKhNNv5YeJ9M=", + "dev": true, + "requires": { + "babel-code-frame": "^6.22.0", + "builtin-modules": "^1.1.1", + "chalk": "^2.3.0", + "commander": "^2.12.1", + "diff": "^3.2.0", + "glob": "^7.1.1", + "js-yaml": "^3.13.0", + "minimatch": "^3.0.4", + "mkdirp": "^0.5.1", + "resolve": "^1.3.2", + "semver": "^5.3.0", + "tslib": "^1.8.0", + "tsutils": "^2.29.0" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npm.taobao.org/semver/download/semver-5.7.1.tgz", + "integrity": "sha1-qVT5Ma66UI0we78Gnv8MAclhFvc=", + "dev": true + } + } + }, + "tsutils": { + "version": "2.29.0", + "resolved": "https://registry.npm.taobao.org/tsutils/download/tsutils-2.29.0.tgz", + "integrity": "sha1-MrSIUBRnrL7dS4VJhnOggSrKC5k=", + "dev": true, + "requires": { + "tslib": "^1.8.1" + } + }, + "tty-browserify": { + "version": "0.0.0", + "resolved": "https://registry.npm.taobao.org/tty-browserify/download/tty-browserify-0.0.0.tgz", + "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=", + "dev": true + }, + "tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npm.taobao.org/tunnel-agent/download/tunnel-agent-0.6.0.tgz", + "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", + "dev": true, + "requires": { + "safe-buffer": "^5.0.1" + } + }, + "turf-jsts": { + "version": "1.2.3", + "resolved": "https://registry.npm.taobao.org/turf-jsts/download/turf-jsts-1.2.3.tgz", + "integrity": "sha1-WXV/VCr7/5pXe79BHxg7j0jTiqQ=" + }, + "tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npm.taobao.org/tweetnacl/download/tweetnacl-0.14.5.tgz", + "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", + "dev": true + }, + "two-product": { + "version": "1.0.2", + "resolved": "https://registry.npm.taobao.org/two-product/download/two-product-1.0.2.tgz", + "integrity": "sha1-Z9ldSyV6kh4stL16+VEfkIhSLqo=" + }, + "two-sum": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/two-sum/download/two-sum-1.0.0.tgz", + "integrity": "sha1-MdPzIjnk9zHsqd+RVeKyl/AIq2Q=" + }, + "type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npm.taobao.org/type-fest/download/type-fest-0.8.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ftype-fest%2Fdownload%2Ftype-fest-0.8.1.tgz", + "integrity": "sha1-CeJJ696FHTseSNJ8EFREZn8XuD0=", + "dev": true + }, + "type-func": { + "version": "1.0.3", + "resolved": "https://registry.npm.taobao.org/type-func/download/type-func-1.0.3.tgz", + "integrity": "sha1-qxhCNK6A2NUAV87+/zstl9CK6bA=" + }, + "type-is": { + "version": "1.6.18", + "resolved": "https://registry.npm.taobao.org/type-is/download/type-is-1.6.18.tgz", + "integrity": "sha1-TlUs0F3wlGfcvE73Od6J8s83wTE=", + "dev": true, + "requires": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + } + }, + "typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npm.taobao.org/typedarray/download/typedarray-0.0.6.tgz", + "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", + "dev": true + }, + "typescript": { + "version": "3.7.5", + "resolved": "https://registry.npm.taobao.org/typescript/download/typescript-3.7.5.tgz", + "integrity": "sha1-BpLiH2X9QQi5MwI4qsEd0uF3oa4=", + "dev": true + }, + "uglify-js": { + "version": "3.7.3", + "resolved": "https://registry.npm.taobao.org/uglify-js/download/uglify-js-3.7.3.tgz?cache=0&sync_timestamp=1577407829710&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fuglify-js%2Fdownload%2Fuglify-js-3.7.3.tgz", + "integrity": "sha1-+Rj86RgvRm1RQPJLsP81wtMtzGo=", + "dev": true, + "optional": true, + "requires": { + "commander": "~2.20.3", + "source-map": "~0.6.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.6.1.tgz", + "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=", + "dev": true, + "optional": true + } + } + }, + "ultron": { + "version": "1.1.1", + "resolved": "https://registry.npm.taobao.org/ultron/download/ultron-1.1.1.tgz", + "integrity": "sha1-n+FTahCmZKZSZqHjzPhf02MCvJw=", + "dev": true + }, + "unicode-canonical-property-names-ecmascript": { + "version": "1.0.4", + "resolved": "https://registry.npm.taobao.org/unicode-canonical-property-names-ecmascript/download/unicode-canonical-property-names-ecmascript-1.0.4.tgz", + "integrity": "sha1-JhmADEyCWADv3YNDr33Zkzy+KBg=", + "dev": true + }, + "unicode-match-property-ecmascript": { + "version": "1.0.4", + "resolved": "https://registry.npm.taobao.org/unicode-match-property-ecmascript/download/unicode-match-property-ecmascript-1.0.4.tgz", + "integrity": "sha1-jtKjJWmWG86SJ9Cc0/+7j+1fAgw=", + "dev": true, + "requires": { + "unicode-canonical-property-names-ecmascript": "^1.0.4", + "unicode-property-aliases-ecmascript": "^1.0.4" + } + }, + "unicode-match-property-value-ecmascript": { + "version": "1.1.0", + "resolved": "https://registry.npm.taobao.org/unicode-match-property-value-ecmascript/download/unicode-match-property-value-ecmascript-1.1.0.tgz", + "integrity": "sha1-W0tCbgjROoA2Xg1lesemwexGonc=", + "dev": true + }, + "unicode-property-aliases-ecmascript": { + "version": "1.0.5", + "resolved": "https://registry.npm.taobao.org/unicode-property-aliases-ecmascript/download/unicode-property-aliases-ecmascript-1.0.5.tgz", + "integrity": "sha1-qcxsx85joKMCP8meNBuUQx1AWlc=", + "dev": true + }, + "union-value": { + "version": "1.0.1", + "resolved": "https://registry.npm.taobao.org/union-value/download/union-value-1.0.1.tgz", + "integrity": "sha1-C2/nuDWuzaYcbqTU8CwUIh4QmEc=", + "dev": true, + "requires": { + "arr-union": "^3.1.0", + "get-value": "^2.0.6", + "is-extendable": "^0.1.1", + "set-value": "^2.0.1" + } + }, + "uniq": { + "version": "1.0.1", + "resolved": "https://registry.npm.taobao.org/uniq/download/uniq-1.0.1.tgz", + "integrity": "sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8=", + "dev": true + }, + "uniqs": { + "version": "2.0.0", + "resolved": "https://registry.npm.taobao.org/uniqs/download/uniqs-2.0.0.tgz", + "integrity": "sha1-/+3ks2slKQaW5uFl1KWe25mOawI=", + "dev": true + }, + "unique-filename": { + "version": "1.1.1", + "resolved": "https://registry.npm.taobao.org/unique-filename/download/unique-filename-1.1.1.tgz", + "integrity": "sha1-HWl2k2mtoFgxA6HmrodoG1ZXMjA=", + "dev": true, + "requires": { + "unique-slug": "^2.0.0" + } + }, + "unique-slug": { + "version": "2.0.2", + "resolved": "https://registry.npm.taobao.org/unique-slug/download/unique-slug-2.0.2.tgz", + "integrity": "sha1-uqvOkQg/xk6UWw861hPiZPfNTmw=", + "dev": true, + "requires": { + "imurmurhash": "^0.1.4" + } + }, + "universal-analytics": { + "version": "0.4.20", + "resolved": "https://registry.npm.taobao.org/universal-analytics/download/universal-analytics-0.4.20.tgz", + "integrity": "sha1-1rZOUxK/dPfDaOMCSpIhNdvySwM=", + "dev": true, + "requires": { + "debug": "^3.0.0", + "request": "^2.88.0", + "uuid": "^3.0.0" + }, + "dependencies": { + "debug": { + "version": "3.2.6", + "resolved": "https://registry.npm.taobao.org/debug/download/debug-3.2.6.tgz", + "integrity": "sha1-6D0X3hbYp++3cX7b5fsQE17uYps=", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + } + } + }, + "universalify": { + "version": "0.1.2", + "resolved": "https://registry.npm.taobao.org/universalify/download/universalify-0.1.2.tgz", + "integrity": "sha1-tkb2m+OULavOzJ1mOcgNwQXvqmY=", + "dev": true + }, + "unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/unpipe/download/unpipe-1.0.0.tgz", + "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", + "dev": true + }, + "unquote": { + "version": "1.1.1", + "resolved": "https://registry.npm.taobao.org/unquote/download/unquote-1.1.1.tgz", + "integrity": "sha1-j97XMk7G6IoP+LkF58CYzcCG1UQ=", + "dev": true + }, + "unset-value": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/unset-value/download/unset-value-1.0.0.tgz", + "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", + "dev": true, + "requires": { + "has-value": "^0.3.1", + "isobject": "^3.0.0" + }, + "dependencies": { + "has-value": { + "version": "0.3.1", + "resolved": "https://registry.npm.taobao.org/has-value/download/has-value-0.3.1.tgz", + "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", + "dev": true, + "requires": { + "get-value": "^2.0.3", + "has-values": "^0.1.4", + "isobject": "^2.0.0" + }, + "dependencies": { + "isobject": { + "version": "2.1.0", + "resolved": "https://registry.npm.taobao.org/isobject/download/isobject-2.1.0.tgz", + "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", + "dev": true, + "requires": { + "isarray": "1.0.0" + } + } + } + }, + "has-values": { + "version": "0.1.4", + "resolved": "https://registry.npm.taobao.org/has-values/download/has-values-0.1.4.tgz", + "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=", + "dev": true + } + } + }, + "upath": { + "version": "1.2.0", + "resolved": "https://registry.npm.taobao.org/upath/download/upath-1.2.0.tgz?cache=0&sync_timestamp=1567458131109&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fupath%2Fdownload%2Fupath-1.2.0.tgz", + "integrity": "sha1-j2bbzVWog6za5ECK+LA1pQRMGJQ=", + "dev": true + }, + "uri-js": { + "version": "4.2.2", + "resolved": "https://registry.npm.taobao.org/uri-js/download/uri-js-4.2.2.tgz", + "integrity": "sha1-lMVA4f93KVbiKZUHwBCupsiDjrA=", + "dev": true, + "requires": { + "punycode": "^2.1.0" + } + }, + "urix": { + "version": "0.1.0", + "resolved": "https://registry.npm.taobao.org/urix/download/urix-0.1.0.tgz", + "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", + "dev": true + }, + "url": { + "version": "0.11.0", + "resolved": "https://registry.npm.taobao.org/url/download/url-0.11.0.tgz", + "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=", + "dev": true, + "requires": { + "punycode": "1.3.2", + "querystring": "0.2.0" + }, + "dependencies": { + "punycode": { + "version": "1.3.2", + "resolved": "https://registry.npm.taobao.org/punycode/download/punycode-1.3.2.tgz", + "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=", + "dev": true + } + } + }, + "url-parse": { + "version": "1.4.7", + "resolved": "https://registry.npm.taobao.org/url-parse/download/url-parse-1.4.7.tgz", + "integrity": "sha1-qKg1NejACjFuQDpdtKwbm4U64ng=", + "dev": true, + "requires": { + "querystringify": "^2.1.1", + "requires-port": "^1.0.0" + } + }, + "use": { + "version": "3.1.1", + "resolved": "https://registry.npm.taobao.org/use/download/use-3.1.1.tgz", + "integrity": "sha1-1QyMrHmhn7wg8pEfVuuXP04QBw8=", + "dev": true + }, + "useragent": { + "version": "2.3.0", + "resolved": "https://registry.npm.taobao.org/useragent/download/useragent-2.3.0.tgz", + "integrity": "sha1-IX+UOtVAyyEoZYqyP8lg9qiMmXI=", + "dev": true, + "requires": { + "lru-cache": "4.1.x", + "tmp": "0.0.x" + }, + "dependencies": { + "lru-cache": { + "version": "4.1.5", + "resolved": "https://registry.npm.taobao.org/lru-cache/download/lru-cache-4.1.5.tgz", + "integrity": "sha1-i75Q6oW+1ZvJ4z3KuCNe6bz0Q80=", + "dev": true, + "requires": { + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" + } + }, + "yallist": { + "version": "2.1.2", + "resolved": "https://registry.npm.taobao.org/yallist/download/yallist-2.1.2.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fyallist%2Fdownload%2Fyallist-2.1.2.tgz", + "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", + "dev": true + } + } + }, + "util": { + "version": "0.11.1", + "resolved": "https://registry.npm.taobao.org/util/download/util-0.11.1.tgz", + "integrity": "sha1-MjZzNyDsZLsn9uJvQhqqLhtYjWE=", + "dev": true, + "requires": { + "inherits": "2.0.3" + }, + "dependencies": { + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npm.taobao.org/inherits/download/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true + } + } + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npm.taobao.org/util-deprecate/download/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", + "dev": true + }, + "util-promisify": { + "version": "2.1.0", + "resolved": "https://registry.npm.taobao.org/util-promisify/download/util-promisify-2.1.0.tgz", + "integrity": "sha1-PCI2R2xNMsX/PEcAKt18E7moKlM=", + "dev": true, + "requires": { + "object.getownpropertydescriptors": "^2.0.3" + } + }, + "util.promisify": { + "version": "1.0.1", + "resolved": "https://registry.npm.taobao.org/util.promisify/download/util.promisify-1.0.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Futil.promisify%2Fdownload%2Futil.promisify-1.0.1.tgz", + "integrity": "sha1-a693dLgO6w91INi4HQeYKlmruu4=", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.2", + "has-symbols": "^1.0.1", + "object.getownpropertydescriptors": "^2.1.0" + }, + "dependencies": { + "es-abstract": { + "version": "1.17.4", + "resolved": "https://registry.npm.taobao.org/es-abstract/download/es-abstract-1.17.4.tgz?cache=0&sync_timestamp=1579624493239&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fes-abstract%2Fdownload%2Fes-abstract-1.17.4.tgz", + "integrity": "sha1-467fGXBrIOfCWUw1/A1XYFp54YQ=", + "dev": true, + "requires": { + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1", + "is-callable": "^1.1.5", + "is-regex": "^1.0.5", + "object-inspect": "^1.7.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.0", + "string.prototype.trimleft": "^2.1.1", + "string.prototype.trimright": "^2.1.1" + } + } + } + }, + "utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npm.taobao.org/utils-merge/download/utils-merge-1.0.1.tgz", + "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=", + "dev": true + }, + "uuid": { + "version": "3.3.3", + "resolved": "https://registry.npm.taobao.org/uuid/download/uuid-3.3.3.tgz", + "integrity": "sha1-RWjwIW54dg7h2/Ok0s9T4iQRKGY=", + "dev": true + }, + "validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npm.taobao.org/validate-npm-package-license/download/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha1-/JH2uce6FchX9MssXe/uw51PQQo=", + "dev": true, + "requires": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "validate-npm-package-name": { + "version": "3.0.0", + "resolved": "https://registry.npm.taobao.org/validate-npm-package-name/download/validate-npm-package-name-3.0.0.tgz", + "integrity": "sha1-X6kS2B630MdK/BQN5zF/DKffQ34=", + "dev": true, + "requires": { + "builtins": "^1.0.3" + } + }, + "vary": { + "version": "1.1.2", + "resolved": "https://registry.npm.taobao.org/vary/download/vary-1.1.2.tgz", + "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=", + "dev": true + }, + "vendors": { + "version": "1.0.4", + "resolved": "https://registry.npm.taobao.org/vendors/download/vendors-1.0.4.tgz?cache=0&sync_timestamp=1579858502549&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fvendors%2Fdownload%2Fvendors-1.0.4.tgz", + "integrity": "sha1-4rgApT56Kbk1BsPPQRANFsTErY4=", + "dev": true + }, + "verror": { + "version": "1.10.0", + "resolved": "https://registry.npm.taobao.org/verror/download/verror-1.10.0.tgz", + "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", + "dev": true, + "requires": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + } + }, + "vm-browserify": { + "version": "1.1.2", + "resolved": "https://registry.npm.taobao.org/vm-browserify/download/vm-browserify-1.1.2.tgz", + "integrity": "sha1-eGQcSIuObKkadfUR56OzKobl3aA=", + "dev": true + }, + "void-elements": { + "version": "2.0.1", + "resolved": "https://registry.npm.taobao.org/void-elements/download/void-elements-2.0.1.tgz", + "integrity": "sha1-wGavtYK7HLQSjWDqkjkulNXp2+w=", + "dev": true + }, + "watchpack": { + "version": "1.6.0", + "resolved": "https://registry.npm.taobao.org/watchpack/download/watchpack-1.6.0.tgz?cache=0&sync_timestamp=1573060177479&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fwatchpack%2Fdownload%2Fwatchpack-1.6.0.tgz", + "integrity": "sha1-S8EsLr6KonenHx0/FNaFx7RGzQA=", + "dev": true, + "requires": { + "chokidar": "^2.0.2", + "graceful-fs": "^4.1.2", + "neo-async": "^2.5.0" + }, + "dependencies": { + "anymatch": { + "version": "2.0.0", + "resolved": "https://registry.npm.taobao.org/anymatch/download/anymatch-2.0.0.tgz", + "integrity": "sha1-vLJLTzeTTZqnrBe0ra+J58du8us=", + "dev": true, + "requires": { + "micromatch": "^3.1.4", + "normalize-path": "^2.1.1" + }, + "dependencies": { + "normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npm.taobao.org/normalize-path/download/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "dev": true, + "requires": { + "remove-trailing-separator": "^1.0.1" + } + } + } + }, + "binary-extensions": { + "version": "1.13.1", + "resolved": "https://registry.npm.taobao.org/binary-extensions/download/binary-extensions-1.13.1.tgz", + "integrity": "sha1-WYr+VHVbKGilMw0q/51Ou1Mgm2U=", + "dev": true + }, + "braces": { + "version": "2.3.2", + "resolved": "https://registry.npm.taobao.org/braces/download/braces-2.3.2.tgz", + "integrity": "sha1-WXn9PxTNUxVl5fot8av/8d+u5yk=", + "dev": true, + "requires": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + } + }, + "chokidar": { + "version": "2.1.8", + "resolved": "https://registry.npm.taobao.org/chokidar/download/chokidar-2.1.8.tgz", + "integrity": "sha1-gEs6e2qZNYw8XGHnHYco8EHP+Rc=", + "dev": true, + "requires": { + "anymatch": "^2.0.0", + "async-each": "^1.0.1", + "braces": "^2.3.2", + "fsevents": "^1.2.7", + "glob-parent": "^3.1.0", + "inherits": "^2.0.3", + "is-binary-path": "^1.0.0", + "is-glob": "^4.0.0", + "normalize-path": "^3.0.0", + "path-is-absolute": "^1.0.0", + "readdirp": "^2.2.1", + "upath": "^1.1.1" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npm.taobao.org/extend-shallow/download/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + }, + "fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npm.taobao.org/fill-range/download/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "dev": true, + "requires": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + } + }, + "fsevents": { + "version": "1.2.11", + "resolved": "https://registry.npm.taobao.org/fsevents/download/fsevents-1.2.11.tgz?cache=0&sync_timestamp=1576323112997&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffsevents%2Fdownload%2Ffsevents-1.2.11.tgz", + "integrity": "sha1-Z79X9HWPAu3oj7KhcS/vTRU1i+M=", + "dev": true, + "optional": true, + "requires": { + "bindings": "^1.5.0", + "nan": "^2.12.1", + "node-pre-gyp": "*" + }, + "dependencies": { + "abbrev": { + "version": "1.1.1", + "bundled": true, + "dev": true, + "optional": true + }, + "ansi-regex": { + "version": "2.1.1", + "bundled": true, + "dev": true, + "optional": true + }, + "aproba": { + "version": "1.2.0", + "bundled": true, + "dev": true, + "optional": true + }, + "are-we-there-yet": { + "version": "1.1.5", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "delegates": "^1.0.0", + "readable-stream": "^2.0.6" + } + }, + "balanced-match": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "brace-expansion": { + "version": "1.1.11", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "chownr": { + "version": "1.1.3", + "bundled": true, + "dev": true, + "optional": true + }, + "code-point-at": { + "version": "1.1.0", + "bundled": true, + "dev": true, + "optional": true + }, + "concat-map": { + "version": "0.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "console-control-strings": { + "version": "1.1.0", + "bundled": true, + "dev": true, + "optional": true + }, + "core-util-is": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "debug": { + "version": "3.2.6", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "ms": "^2.1.1" + } + }, + "deep-extend": { + "version": "0.6.0", + "bundled": true, + "dev": true, + "optional": true + }, + "delegates": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "detect-libc": { + "version": "1.0.3", + "bundled": true, + "dev": true, + "optional": true + }, + "fs-minipass": { + "version": "1.2.7", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "minipass": "^2.6.0" + } + }, + "fs.realpath": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "gauge": { + "version": "2.7.4", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "aproba": "^1.0.3", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.0", + "object-assign": "^4.1.0", + "signal-exit": "^3.0.0", + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wide-align": "^1.1.0" + } + }, + "glob": { + "version": "7.1.6", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "has-unicode": { + "version": "2.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "iconv-lite": { + "version": "0.4.24", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "ignore-walk": { + "version": "3.0.3", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "minimatch": "^3.0.4" + } + }, + "inflight": { + "version": "1.0.6", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4", + "bundled": true, + "dev": true, + "optional": true + }, + "ini": { + "version": "1.3.5", + "bundled": true, + "dev": true, + "optional": true + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "isarray": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "minimatch": { + "version": "3.0.4", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "0.0.8", + "bundled": true, + "dev": true, + "optional": true + }, + "minipass": { + "version": "2.9.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "safe-buffer": "^5.1.2", + "yallist": "^3.0.0" + } + }, + "minizlib": { + "version": "1.3.3", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "minipass": "^2.9.0" + } + }, + "mkdirp": { + "version": "0.5.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "minimist": "0.0.8" + } + }, + "ms": { + "version": "2.1.2", + "bundled": true, + "dev": true, + "optional": true + }, + "needle": { + "version": "2.4.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "debug": "^3.2.6", + "iconv-lite": "^0.4.4", + "sax": "^1.2.4" + } + }, + "node-pre-gyp": { + "version": "0.14.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "detect-libc": "^1.0.2", + "mkdirp": "^0.5.1", + "needle": "^2.2.1", + "nopt": "^4.0.1", + "npm-packlist": "^1.1.6", + "npmlog": "^4.0.2", + "rc": "^1.2.7", + "rimraf": "^2.6.1", + "semver": "^5.3.0", + "tar": "^4.4.2" + } + }, + "nopt": { + "version": "4.0.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "abbrev": "1", + "osenv": "^0.1.4" + } + }, + "npm-bundled": { + "version": "1.1.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "npm-normalize-package-bin": "^1.0.1" + } + }, + "npm-normalize-package-bin": { + "version": "1.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "npm-packlist": { + "version": "1.4.7", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "ignore-walk": "^3.0.1", + "npm-bundled": "^1.0.1" + } + }, + "npmlog": { + "version": "4.1.2", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "are-we-there-yet": "~1.1.2", + "console-control-strings": "~1.1.0", + "gauge": "~2.7.3", + "set-blocking": "~2.0.0" + } + }, + "number-is-nan": { + "version": "1.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "object-assign": { + "version": "4.1.1", + "bundled": true, + "dev": true, + "optional": true + }, + "once": { + "version": "1.4.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "wrappy": "1" + } + }, + "os-homedir": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "os-tmpdir": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "osenv": { + "version": "0.1.5", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.0" + } + }, + "path-is-absolute": { + "version": "1.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "process-nextick-args": { + "version": "2.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "rc": { + "version": "1.2.8", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + }, + "dependencies": { + "minimist": { + "version": "1.2.0", + "bundled": true, + "dev": true, + "optional": true + } + } + }, + "readable-stream": { + "version": "2.3.6", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "rimraf": { + "version": "2.7.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "glob": "^7.1.3" + } + }, + "safe-buffer": { + "version": "5.1.2", + "bundled": true, + "dev": true, + "optional": true + }, + "safer-buffer": { + "version": "2.1.2", + "bundled": true, + "dev": true, + "optional": true + }, + "sax": { + "version": "1.2.4", + "bundled": true, + "dev": true, + "optional": true + }, + "semver": { + "version": "5.7.1", + "bundled": true, + "dev": true, + "optional": true + }, + "set-blocking": { + "version": "2.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "signal-exit": { + "version": "3.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "string-width": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + }, + "string_decoder": { + "version": "1.1.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "safe-buffer": "~5.1.0" + } + }, + "strip-ansi": { + "version": "3.0.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "strip-json-comments": { + "version": "2.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "tar": { + "version": "4.4.13", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "chownr": "^1.1.1", + "fs-minipass": "^1.2.5", + "minipass": "^2.8.6", + "minizlib": "^1.2.1", + "mkdirp": "^0.5.0", + "safe-buffer": "^5.1.2", + "yallist": "^3.0.3" + } + }, + "util-deprecate": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "wide-align": { + "version": "1.1.3", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "string-width": "^1.0.2 || 2" + } + }, + "wrappy": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "yallist": { + "version": "3.1.1", + "bundled": true, + "dev": true, + "optional": true + } + } + }, + "is-binary-path": { + "version": "1.0.1", + "resolved": "https://registry.npm.taobao.org/is-binary-path/download/is-binary-path-1.0.1.tgz", + "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", + "dev": true, + "requires": { + "binary-extensions": "^1.0.0" + } + }, + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npm.taobao.org/is-number/download/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + } + }, + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npm.taobao.org/kind-of/download/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + }, + "readdirp": { + "version": "2.2.1", + "resolved": "https://registry.npm.taobao.org/readdirp/download/readdirp-2.2.1.tgz", + "integrity": "sha1-DodiKjMlqjPokihcr4tOhGUppSU=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.11", + "micromatch": "^3.1.10", + "readable-stream": "^2.0.2" + } + }, + "to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npm.taobao.org/to-regex-range/download/to-regex-range-2.1.1.tgz", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "dev": true, + "requires": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + } + } + } + }, + "wbuf": { + "version": "1.7.3", + "resolved": "https://registry.npm.taobao.org/wbuf/download/wbuf-1.7.3.tgz", + "integrity": "sha1-wdjRSTFtPqhShIiVy2oL/oh7h98=", + "dev": true, + "requires": { + "minimalistic-assert": "^1.0.0" + } + }, + "wcwidth": { + "version": "1.0.1", + "resolved": "https://registry.npm.taobao.org/wcwidth/download/wcwidth-1.0.1.tgz", + "integrity": "sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g=", + "dev": true, + "requires": { + "defaults": "^1.0.3" + } + }, + "webdriver-js-extender": { + "version": "2.1.0", + "resolved": "https://registry.npm.taobao.org/webdriver-js-extender/download/webdriver-js-extender-2.1.0.tgz", + "integrity": "sha1-V9epPADbTMjVVuTT20tdsKgMO7c=", + "dev": true, + "requires": { + "@types/selenium-webdriver": "^3.0.0", + "selenium-webdriver": "^3.0.1" + } + }, + "webpack": { + "version": "4.41.2", + "resolved": "https://registry.npm.taobao.org/webpack/download/webpack-4.41.2.tgz", + "integrity": "sha1-w07Hbao6hGjJthpQM22OMwPc504=", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.8.5", + "@webassemblyjs/helper-module-context": "1.8.5", + "@webassemblyjs/wasm-edit": "1.8.5", + "@webassemblyjs/wasm-parser": "1.8.5", + "acorn": "^6.2.1", + "ajv": "^6.10.2", + "ajv-keywords": "^3.4.1", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^4.1.0", + "eslint-scope": "^4.0.3", + "json-parse-better-errors": "^1.0.2", + "loader-runner": "^2.4.0", + "loader-utils": "^1.2.3", + "memory-fs": "^0.4.1", + "micromatch": "^3.1.10", + "mkdirp": "^0.5.1", + "neo-async": "^2.6.1", + "node-libs-browser": "^2.2.1", + "schema-utils": "^1.0.0", + "tapable": "^1.1.3", + "terser-webpack-plugin": "^1.4.1", + "watchpack": "^1.6.0", + "webpack-sources": "^1.4.1" + }, + "dependencies": { + "acorn": { + "version": "6.4.0", + "resolved": "https://registry.npm.taobao.org/acorn/download/acorn-6.4.0.tgz?cache=0&sync_timestamp=1574807785634&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Facorn%2Fdownload%2Facorn-6.4.0.tgz", + "integrity": "sha1-tlnS/7r6JLr12xzbsslKmD7NJ4Q=", + "dev": true + }, + "cacache": { + "version": "12.0.3", + "resolved": "https://registry.npm.taobao.org/cacache/download/cacache-12.0.3.tgz?cache=0&sync_timestamp=1580176348786&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcacache%2Fdownload%2Fcacache-12.0.3.tgz", + "integrity": "sha1-vpmruk4b9d9GHNWiwQcfxDJXM5A=", + "dev": true, + "requires": { + "bluebird": "^3.5.5", + "chownr": "^1.1.1", + "figgy-pudding": "^3.5.1", + "glob": "^7.1.4", + "graceful-fs": "^4.1.15", + "infer-owner": "^1.0.3", + "lru-cache": "^5.1.1", + "mississippi": "^3.0.0", + "mkdirp": "^0.5.1", + "move-concurrently": "^1.0.1", + "promise-inflight": "^1.0.1", + "rimraf": "^2.6.3", + "ssri": "^6.0.1", + "unique-filename": "^1.1.1", + "y18n": "^4.0.0" + } + }, + "find-cache-dir": { + "version": "2.1.0", + "resolved": "https://registry.npm.taobao.org/find-cache-dir/download/find-cache-dir-2.1.0.tgz", + "integrity": "sha1-jQ+UzRP+Q8bHwmGg2GEVypGMBfc=", + "dev": true, + "requires": { + "commondir": "^1.0.1", + "make-dir": "^2.0.0", + "pkg-dir": "^3.0.0" + } + }, + "is-wsl": { + "version": "1.1.0", + "resolved": "https://registry.npm.taobao.org/is-wsl/download/is-wsl-1.1.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-wsl%2Fdownload%2Fis-wsl-1.1.0.tgz", + "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=", + "dev": true + }, + "memory-fs": { + "version": "0.4.1", + "resolved": "https://registry.npm.taobao.org/memory-fs/download/memory-fs-0.4.1.tgz?cache=0&sync_timestamp=1570537491040&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmemory-fs%2Fdownload%2Fmemory-fs-0.4.1.tgz", + "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=", + "dev": true, + "requires": { + "errno": "^0.1.3", + "readable-stream": "^2.0.1" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.6.1.tgz", + "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=", + "dev": true + }, + "ssri": { + "version": "6.0.1", + "resolved": "https://registry.npm.taobao.org/ssri/download/ssri-6.0.1.tgz?cache=0&sync_timestamp=1571961490394&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fssri%2Fdownload%2Fssri-6.0.1.tgz", + "integrity": "sha1-KjxBso3UW2K2Nnbst0ABJlrp7dg=", + "dev": true, + "requires": { + "figgy-pudding": "^3.5.1" + } + }, + "terser-webpack-plugin": { + "version": "1.4.3", + "resolved": "https://registry.npm.taobao.org/terser-webpack-plugin/download/terser-webpack-plugin-1.4.3.tgz?cache=0&sync_timestamp=1580403891929&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fterser-webpack-plugin%2Fdownload%2Fterser-webpack-plugin-1.4.3.tgz", + "integrity": "sha1-Xsry29xfuZdF/QZ5H0b8ndscmnw=", + "dev": true, + "requires": { + "cacache": "^12.0.2", + "find-cache-dir": "^2.1.0", + "is-wsl": "^1.1.0", + "schema-utils": "^1.0.0", + "serialize-javascript": "^2.1.2", + "source-map": "^0.6.1", + "terser": "^4.1.2", + "webpack-sources": "^1.4.0", + "worker-farm": "^1.7.0" + } + } + } + }, + "webpack-dev-middleware": { + "version": "3.7.2", + "resolved": "https://registry.npm.taobao.org/webpack-dev-middleware/download/webpack-dev-middleware-3.7.2.tgz?cache=0&sync_timestamp=1569684802806&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fwebpack-dev-middleware%2Fdownload%2Fwebpack-dev-middleware-3.7.2.tgz", + "integrity": "sha1-ABnD23FuP6XOy/ZPKriKdLqzMfM=", + "dev": true, + "requires": { + "memory-fs": "^0.4.1", + "mime": "^2.4.4", + "mkdirp": "^0.5.1", + "range-parser": "^1.2.1", + "webpack-log": "^2.0.0" + }, + "dependencies": { + "memory-fs": { + "version": "0.4.1", + "resolved": "https://registry.npm.taobao.org/memory-fs/download/memory-fs-0.4.1.tgz?cache=0&sync_timestamp=1570537491040&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmemory-fs%2Fdownload%2Fmemory-fs-0.4.1.tgz", + "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=", + "dev": true, + "requires": { + "errno": "^0.1.3", + "readable-stream": "^2.0.1" + } + }, + "mime": { + "version": "2.4.4", + "resolved": "https://registry.npm.taobao.org/mime/download/mime-2.4.4.tgz", + "integrity": "sha1-vXuRE1/GsBzePpuuM9ZZtj2IV+U=", + "dev": true + } + } + }, + "webpack-dev-server": { + "version": "3.9.0", + "resolved": "https://registry.npm.taobao.org/webpack-dev-server/download/webpack-dev-server-3.9.0.tgz", + "integrity": "sha1-J8O10Pa2Z3xDBEZayBdiPIsnuJw=", + "dev": true, + "requires": { + "ansi-html": "0.0.7", + "bonjour": "^3.5.0", + "chokidar": "^2.1.8", + "compression": "^1.7.4", + "connect-history-api-fallback": "^1.6.0", + "debug": "^4.1.1", + "del": "^4.1.1", + "express": "^4.17.1", + "html-entities": "^1.2.1", + "http-proxy-middleware": "0.19.1", + "import-local": "^2.0.0", + "internal-ip": "^4.3.0", + "ip": "^1.1.5", + "is-absolute-url": "^3.0.3", + "killable": "^1.0.1", + "loglevel": "^1.6.4", + "opn": "^5.5.0", + "p-retry": "^3.0.1", + "portfinder": "^1.0.25", + "schema-utils": "^1.0.0", + "selfsigned": "^1.10.7", + "semver": "^6.3.0", + "serve-index": "^1.9.1", + "sockjs": "0.3.19", + "sockjs-client": "1.4.0", + "spdy": "^4.0.1", + "strip-ansi": "^3.0.1", + "supports-color": "^6.1.0", + "url": "^0.11.0", + "webpack-dev-middleware": "^3.7.2", + "webpack-log": "^2.0.0", + "ws": "^6.2.1", + "yargs": "12.0.5" + }, + "dependencies": { + "anymatch": { + "version": "2.0.0", + "resolved": "https://registry.npm.taobao.org/anymatch/download/anymatch-2.0.0.tgz", + "integrity": "sha1-vLJLTzeTTZqnrBe0ra+J58du8us=", + "dev": true, + "requires": { + "micromatch": "^3.1.4", + "normalize-path": "^2.1.1" + }, + "dependencies": { + "normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npm.taobao.org/normalize-path/download/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "dev": true, + "requires": { + "remove-trailing-separator": "^1.0.1" + } + } + } + }, + "binary-extensions": { + "version": "1.13.1", + "resolved": "https://registry.npm.taobao.org/binary-extensions/download/binary-extensions-1.13.1.tgz", + "integrity": "sha1-WYr+VHVbKGilMw0q/51Ou1Mgm2U=", + "dev": true + }, + "braces": { + "version": "2.3.2", + "resolved": "https://registry.npm.taobao.org/braces/download/braces-2.3.2.tgz", + "integrity": "sha1-WXn9PxTNUxVl5fot8av/8d+u5yk=", + "dev": true, + "requires": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + } + }, + "chokidar": { + "version": "2.1.8", + "resolved": "https://registry.npm.taobao.org/chokidar/download/chokidar-2.1.8.tgz", + "integrity": "sha1-gEs6e2qZNYw8XGHnHYco8EHP+Rc=", + "dev": true, + "requires": { + "anymatch": "^2.0.0", + "async-each": "^1.0.1", + "braces": "^2.3.2", + "fsevents": "^1.2.7", + "glob-parent": "^3.1.0", + "inherits": "^2.0.3", + "is-binary-path": "^1.0.0", + "is-glob": "^4.0.0", + "normalize-path": "^3.0.0", + "path-is-absolute": "^1.0.0", + "readdirp": "^2.2.1", + "upath": "^1.1.1" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npm.taobao.org/extend-shallow/download/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + }, + "fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npm.taobao.org/fill-range/download/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "dev": true, + "requires": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + } + }, + "fsevents": { + "version": "1.2.11", + "resolved": "https://registry.npm.taobao.org/fsevents/download/fsevents-1.2.11.tgz?cache=0&sync_timestamp=1576323112997&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffsevents%2Fdownload%2Ffsevents-1.2.11.tgz", + "integrity": "sha1-Z79X9HWPAu3oj7KhcS/vTRU1i+M=", + "dev": true, + "optional": true, + "requires": { + "bindings": "^1.5.0", + "nan": "^2.12.1", + "node-pre-gyp": "*" + }, + "dependencies": { + "abbrev": { + "version": "1.1.1", + "bundled": true, + "dev": true, + "optional": true + }, + "ansi-regex": { + "version": "2.1.1", + "bundled": true, + "dev": true, + "optional": true + }, + "aproba": { + "version": "1.2.0", + "bundled": true, + "dev": true, + "optional": true + }, + "are-we-there-yet": { + "version": "1.1.5", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "delegates": "^1.0.0", + "readable-stream": "^2.0.6" + } + }, + "balanced-match": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "brace-expansion": { + "version": "1.1.11", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "chownr": { + "version": "1.1.3", + "bundled": true, + "dev": true, + "optional": true + }, + "code-point-at": { + "version": "1.1.0", + "bundled": true, + "dev": true, + "optional": true + }, + "concat-map": { + "version": "0.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "console-control-strings": { + "version": "1.1.0", + "bundled": true, + "dev": true, + "optional": true + }, + "core-util-is": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "debug": { + "version": "3.2.6", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "ms": "^2.1.1" + } + }, + "deep-extend": { + "version": "0.6.0", + "bundled": true, + "dev": true, + "optional": true + }, + "delegates": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "detect-libc": { + "version": "1.0.3", + "bundled": true, + "dev": true, + "optional": true + }, + "fs-minipass": { + "version": "1.2.7", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "minipass": "^2.6.0" + } + }, + "fs.realpath": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "gauge": { + "version": "2.7.4", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "aproba": "^1.0.3", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.0", + "object-assign": "^4.1.0", + "signal-exit": "^3.0.0", + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wide-align": "^1.1.0" + } + }, + "glob": { + "version": "7.1.6", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "has-unicode": { + "version": "2.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "iconv-lite": { + "version": "0.4.24", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "ignore-walk": { + "version": "3.0.3", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "minimatch": "^3.0.4" + } + }, + "inflight": { + "version": "1.0.6", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4", + "bundled": true, + "dev": true, + "optional": true + }, + "ini": { + "version": "1.3.5", + "bundled": true, + "dev": true, + "optional": true + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "isarray": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "minimatch": { + "version": "3.0.4", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "0.0.8", + "bundled": true, + "dev": true, + "optional": true + }, + "minipass": { + "version": "2.9.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "safe-buffer": "^5.1.2", + "yallist": "^3.0.0" + } + }, + "minizlib": { + "version": "1.3.3", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "minipass": "^2.9.0" + } + }, + "mkdirp": { + "version": "0.5.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "minimist": "0.0.8" + } + }, + "ms": { + "version": "2.1.2", + "bundled": true, + "dev": true, + "optional": true + }, + "needle": { + "version": "2.4.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "debug": "^3.2.6", + "iconv-lite": "^0.4.4", + "sax": "^1.2.4" + } + }, + "node-pre-gyp": { + "version": "0.14.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "detect-libc": "^1.0.2", + "mkdirp": "^0.5.1", + "needle": "^2.2.1", + "nopt": "^4.0.1", + "npm-packlist": "^1.1.6", + "npmlog": "^4.0.2", + "rc": "^1.2.7", + "rimraf": "^2.6.1", + "semver": "^5.3.0", + "tar": "^4.4.2" + } + }, + "nopt": { + "version": "4.0.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "abbrev": "1", + "osenv": "^0.1.4" + } + }, + "npm-bundled": { + "version": "1.1.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "npm-normalize-package-bin": "^1.0.1" + } + }, + "npm-normalize-package-bin": { + "version": "1.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "npm-packlist": { + "version": "1.4.7", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "ignore-walk": "^3.0.1", + "npm-bundled": "^1.0.1" + } + }, + "npmlog": { + "version": "4.1.2", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "are-we-there-yet": "~1.1.2", + "console-control-strings": "~1.1.0", + "gauge": "~2.7.3", + "set-blocking": "~2.0.0" + } + }, + "number-is-nan": { + "version": "1.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "object-assign": { + "version": "4.1.1", + "bundled": true, + "dev": true, + "optional": true + }, + "once": { + "version": "1.4.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "wrappy": "1" + } + }, + "os-homedir": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "os-tmpdir": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "osenv": { + "version": "0.1.5", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.0" + } + }, + "path-is-absolute": { + "version": "1.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "process-nextick-args": { + "version": "2.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "rc": { + "version": "1.2.8", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + }, + "dependencies": { + "minimist": { + "version": "1.2.0", + "bundled": true, + "dev": true, + "optional": true + } + } + }, + "readable-stream": { + "version": "2.3.6", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "rimraf": { + "version": "2.7.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "glob": "^7.1.3" + } + }, + "safe-buffer": { + "version": "5.1.2", + "bundled": true, + "dev": true, + "optional": true + }, + "safer-buffer": { + "version": "2.1.2", + "bundled": true, + "dev": true, + "optional": true + }, + "sax": { + "version": "1.2.4", + "bundled": true, + "dev": true, + "optional": true + }, + "semver": { + "version": "5.7.1", + "bundled": true, + "dev": true, + "optional": true + }, + "set-blocking": { + "version": "2.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "signal-exit": { + "version": "3.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "string-width": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + }, + "string_decoder": { + "version": "1.1.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "safe-buffer": "~5.1.0" + } + }, + "strip-ansi": { + "version": "3.0.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "strip-json-comments": { + "version": "2.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "tar": { + "version": "4.4.13", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "chownr": "^1.1.1", + "fs-minipass": "^1.2.5", + "minipass": "^2.8.6", + "minizlib": "^1.2.1", + "mkdirp": "^0.5.0", + "safe-buffer": "^5.1.2", + "yallist": "^3.0.3" + } + }, + "util-deprecate": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "wide-align": { + "version": "1.1.3", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "string-width": "^1.0.2 || 2" + } + }, + "wrappy": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "yallist": { + "version": "3.1.1", + "bundled": true, + "dev": true, + "optional": true + } + } + }, + "is-absolute-url": { + "version": "3.0.3", + "resolved": "https://registry.npm.taobao.org/is-absolute-url/download/is-absolute-url-3.0.3.tgz?cache=0&sync_timestamp=1569735515256&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-absolute-url%2Fdownload%2Fis-absolute-url-3.0.3.tgz", + "integrity": "sha1-lsaiK2ojkpsR6gr7GDbDatSl1pg=", + "dev": true + }, + "is-binary-path": { + "version": "1.0.1", + "resolved": "https://registry.npm.taobao.org/is-binary-path/download/is-binary-path-1.0.1.tgz", + "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", + "dev": true, + "requires": { + "binary-extensions": "^1.0.0" + } + }, + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npm.taobao.org/is-number/download/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + } + }, + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npm.taobao.org/kind-of/download/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + }, + "readdirp": { + "version": "2.2.1", + "resolved": "https://registry.npm.taobao.org/readdirp/download/readdirp-2.2.1.tgz", + "integrity": "sha1-DodiKjMlqjPokihcr4tOhGUppSU=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.11", + "micromatch": "^3.1.10", + "readable-stream": "^2.0.2" + } + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-6.1.0.tgz?cache=0&sync_timestamp=1569557271992&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-6.1.0.tgz", + "integrity": "sha1-B2Srxpxj1ayELdSGfo0CXogN+PM=", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + }, + "to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npm.taobao.org/to-regex-range/download/to-regex-range-2.1.1.tgz", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "dev": true, + "requires": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + } + } + } + }, + "webpack-log": { + "version": "2.0.0", + "resolved": "https://registry.npm.taobao.org/webpack-log/download/webpack-log-2.0.0.tgz?cache=0&sync_timestamp=1564684394562&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fwebpack-log%2Fdownload%2Fwebpack-log-2.0.0.tgz", + "integrity": "sha1-W3ko4GN1k/EZ0y9iJ8HgrDHhtH8=", + "dev": true, + "requires": { + "ansi-colors": "^3.0.0", + "uuid": "^3.3.2" + } + }, + "webpack-merge": { + "version": "4.2.2", + "resolved": "https://registry.npm.taobao.org/webpack-merge/download/webpack-merge-4.2.2.tgz", + "integrity": "sha1-onxS6ng9E5iv0gh/VH17nS9DY00=", + "dev": true, + "requires": { + "lodash": "^4.17.15" + } + }, + "webpack-sources": { + "version": "1.4.3", + "resolved": "https://registry.npm.taobao.org/webpack-sources/download/webpack-sources-1.4.3.tgz?cache=0&sync_timestamp=1574264229907&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fwebpack-sources%2Fdownload%2Fwebpack-sources-1.4.3.tgz", + "integrity": "sha1-7t2OwLko+/HL/plOItLYkPMwqTM=", + "dev": true, + "requires": { + "source-list-map": "^2.0.0", + "source-map": "~0.6.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.6.1.tgz", + "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=", + "dev": true + } + } + }, + "webpack-subresource-integrity": { + "version": "1.3.4", + "resolved": "https://registry.npm.taobao.org/webpack-subresource-integrity/download/webpack-subresource-integrity-1.3.4.tgz", + "integrity": "sha1-RVTgxiLWeH+IDroAnNtzE5wQe60=", + "dev": true, + "requires": { + "webpack-sources": "^1.3.0" + } + }, + "websocket-driver": { + "version": "0.7.3", + "resolved": "https://registry.npm.taobao.org/websocket-driver/download/websocket-driver-0.7.3.tgz", + "integrity": "sha1-otTg1PTxFvHmKX66WLBdQwEA6fk=", + "requires": { + "http-parser-js": ">=0.4.0 <0.4.11", + "safe-buffer": ">=5.1.0", + "websocket-extensions": ">=0.1.1" + } + }, + "websocket-extensions": { + "version": "0.1.3", + "resolved": "https://registry.npm.taobao.org/websocket-extensions/download/websocket-extensions-0.1.3.tgz", + "integrity": "sha1-XS/yKXcAPsaHpLhwc9+7rBRszyk=" + }, + "whatwg-fetch": { + "version": "3.0.0", + "resolved": "https://registry.npm.taobao.org/whatwg-fetch/download/whatwg-fetch-3.0.0.tgz", + "integrity": "sha1-/IBORYzEYACbGiuWa8iBfSV4rvs=" + }, + "when": { + "version": "3.6.4", + "resolved": "https://registry.npm.taobao.org/when/download/when-3.6.4.tgz", + "integrity": "sha1-RztRfsFZ4rhQBUl6E5g/CVQS404=", + "dev": true + }, + "which": { + "version": "1.3.1", + "resolved": "https://registry.npm.taobao.org/which/download/which-1.3.1.tgz?cache=0&sync_timestamp=1574116898193&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fwhich%2Fdownload%2Fwhich-1.3.1.tgz", + "integrity": "sha1-pFBD1U9YBTFtqNYvn1CRjT2nCwo=", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + }, + "which-module": { + "version": "2.0.0", + "resolved": "https://registry.npm.taobao.org/which-module/download/which-module-2.0.0.tgz", + "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", + "dev": true + }, + "window-size": { + "version": "0.1.4", + "resolved": "https://registry.npm.taobao.org/window-size/download/window-size-0.1.4.tgz", + "integrity": "sha1-+OGqHuWlPsW/FR/6CXQqatdpeHY=" + }, + "wordwrap": { + "version": "0.0.3", + "resolved": "https://registry.npm.taobao.org/wordwrap/download/wordwrap-0.0.3.tgz", + "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=", + "dev": true + }, + "worker-farm": { + "version": "1.7.0", + "resolved": "https://registry.npm.taobao.org/worker-farm/download/worker-farm-1.7.0.tgz", + "integrity": "sha1-JqlMU5G7ypJhUgAvabhKS/dy5ag=", + "dev": true, + "requires": { + "errno": "~0.1.7" + } + }, + "worker-plugin": { + "version": "3.2.0", + "resolved": "https://registry.npm.taobao.org/worker-plugin/download/worker-plugin-3.2.0.tgz", + "integrity": "sha1-3a6fFht2/Lqs+PVOzQN4RFhOQ+c=", + "dev": true, + "requires": { + "loader-utils": "^1.1.0" + } + }, + "wrap-ansi": { + "version": "2.1.0", + "resolved": "https://registry.npm.taobao.org/wrap-ansi/download/wrap-ansi-2.1.0.tgz", + "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", + "requires": { + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1" + }, + "dependencies": { + "is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/is-fullwidth-code-point/download/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npm.taobao.org/string-width/download/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + } + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npm.taobao.org/wrappy/download/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true + }, + "ws": { + "version": "6.2.1", + "resolved": "https://registry.npm.taobao.org/ws/download/ws-6.2.1.tgz", + "integrity": "sha1-RC/fCkftZPWbal2P8TD0dI7VJPs=", + "dev": true, + "requires": { + "async-limiter": "~1.0.0" + } + }, + "xml2js": { + "version": "0.4.23", + "resolved": "https://registry.npm.taobao.org/xml2js/download/xml2js-0.4.23.tgz?cache=0&sync_timestamp=1576776092832&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fxml2js%2Fdownload%2Fxml2js-0.4.23.tgz", + "integrity": "sha1-oMaVFnUkIesqx1juTUzPWIQ+rGY=", + "dev": true, + "requires": { + "sax": ">=0.6.0", + "xmlbuilder": "~11.0.0" + }, + "dependencies": { + "sax": { + "version": "1.2.4", + "resolved": "https://registry.npm.taobao.org/sax/download/sax-1.2.4.tgz", + "integrity": "sha1-KBYjTiN4vdxOU1T6tcqold9xANk=", + "dev": true + } + } + }, + "xmlbuilder": { + "version": "11.0.1", + "resolved": "https://registry.npm.taobao.org/xmlbuilder/download/xmlbuilder-11.0.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fxmlbuilder%2Fdownload%2Fxmlbuilder-11.0.1.tgz", + "integrity": "sha1-vpuuHIoEbnazESdyY0fQrXACvrM=", + "dev": true + }, + "xmlhttprequest": { + "version": "1.8.0", + "resolved": "https://registry.npm.taobao.org/xmlhttprequest/download/xmlhttprequest-1.8.0.tgz", + "integrity": "sha1-Z/4HXFwk/vOfnWX197f+dRcZaPw=" + }, + "xmlhttprequest-ssl": { + "version": "1.5.5", + "resolved": "https://registry.npm.taobao.org/xmlhttprequest-ssl/download/xmlhttprequest-ssl-1.5.5.tgz", + "integrity": "sha1-wodrBhaKrcQOV9l+gRkayPQ5iz4=", + "dev": true + }, + "xtend": { + "version": "4.0.2", + "resolved": "https://registry.npm.taobao.org/xtend/download/xtend-4.0.2.tgz", + "integrity": "sha1-u3J3n1+kZRhrH0OPZ0+jR/2121Q=", + "dev": true + }, + "y18n": { + "version": "4.0.0", + "resolved": "https://registry.npm.taobao.org/y18n/download/y18n-4.0.0.tgz", + "integrity": "sha1-le+U+F7MgdAHwmThkKEg8KPIVms=", + "dev": true + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npm.taobao.org/yallist/download/yallist-4.0.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fyallist%2Fdownload%2Fyallist-4.0.0.tgz", + "integrity": "sha1-m7knkNnA7/7GO+c1GeEaNQGaOnI=", + "dev": true + }, + "yargs": { + "version": "12.0.5", + "resolved": "https://registry.npm.taobao.org/yargs/download/yargs-12.0.5.tgz?cache=0&sync_timestamp=1577940861093&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fyargs%2Fdownload%2Fyargs-12.0.5.tgz", + "integrity": "sha1-BfWZe2CWR7ZPZrgeO0sQo2jnrRM=", + "dev": true, + "requires": { + "cliui": "^4.0.0", + "decamelize": "^1.2.0", + "find-up": "^3.0.0", + "get-caller-file": "^1.0.1", + "os-locale": "^3.0.0", + "require-directory": "^2.1.1", + "require-main-filename": "^1.0.1", + "set-blocking": "^2.0.0", + "string-width": "^2.0.0", + "which-module": "^2.0.0", + "y18n": "^3.2.1 || ^4.0.0", + "yargs-parser": "^11.1.1" + } + }, + "yargs-parser": { + "version": "11.1.1", + "resolved": "https://registry.npm.taobao.org/yargs-parser/download/yargs-parser-11.1.1.tgz?cache=0&sync_timestamp=1572648717575&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fyargs-parser%2Fdownload%2Fyargs-parser-11.1.1.tgz", + "integrity": "sha1-h5oIZZc7yp9rq1y987HGfsfTvPQ=", + "dev": true, + "requires": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } + }, + "yeast": { + "version": "0.1.2", + "resolved": "https://registry.npm.taobao.org/yeast/download/yeast-0.1.2.tgz", + "integrity": "sha1-AI4G2AlDIMNy28L47XagymyKxBk=", + "dev": true + }, + "yn": { + "version": "2.0.0", + "resolved": "https://registry.npm.taobao.org/yn/download/yn-2.0.0.tgz", + "integrity": "sha1-5a2ryKz0CPY4X8dklWhMiOavaJo=", + "dev": true + }, + "zone.js": { + "version": "0.10.2", + "resolved": "https://registry.npm.taobao.org/zone.js/download/zone.js-0.10.2.tgz", + "integrity": "sha1-Z8oISzEW/DP8QENeDV6kCiB+OS4=" + }, + "zrender": { + "version": "4.2.0", + "resolved": "https://registry.npm.taobao.org/zrender/download/zrender-4.2.0.tgz?cache=0&sync_timestamp=1576159866096&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fzrender%2Fdownload%2Fzrender-4.2.0.tgz", + "integrity": "sha1-0AEwLhVfKN4fn8f81cJUutKEcc8=" + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..47c2cf4 --- /dev/null +++ b/package.json @@ -0,0 +1,63 @@ +{ + "name": "anxin119", + "version": "0.0.0", + "scripts": { + "ng": "ng", + "start": "ng serve --proxy-config proxy.config.json --open", + "build": "ng build", + "test": "ng test", + "lint": "ng lint", + "e2e": "ng e2e" + }, + "private": true, + "dependencies": { + "@angular/animations": "^9.0.0", + "@angular/cdk": "^9.0.0", + "@angular/common": "~9.0.0", + "@angular/compiler": "~9.0.0", + "@angular/core": "~9.0.0", + "@angular/fire": "^5.3.0", + "@angular/forms": "~9.0.0", + "@angular/material": "^9.0.0", + "@angular/platform-browser": "~9.0.0", + "@angular/platform-browser-dynamic": "~9.0.0", + "@angular/router": "~9.0.0", + "@types/cesium": "^1.59.5", + "@types/swiper": "^5.3.0", + "angular-calendar": "^0.28.2", + "cesium": "^1.64.0", + "date-fns": "^2.9.0", + "e-ngx-cesium": "^6.3.2", + "echarts": "^4.6.0", + "firebase": "^7.6.2", + "ng2-file-upload": "^1.4.0", + "ngx-countdown": "^9.0.1", + "ngx-echarts": "^4.2.2", + "ngx-perfect-scrollbar": "^8.0.0", + "rxjs": "~6.5.4", + "swiper": "^5.3.7", + "tslib": "^1.10.0", + "zone.js": "~0.10.2" + }, + "devDependencies": { + "@angular-devkit/build-angular": "~0.900.1", + "@angular/cli": "~9.0.1", + "@angular/compiler-cli": "~9.0.0", + "@angular/language-service": "~9.0.0", + "@types/jasmine": "~3.3.8", + "@types/jasminewd2": "~2.0.3", + "@types/node": "^12.11.1", + "codelyzer": "^5.1.2", + "jasmine-core": "~3.4.0", + "jasmine-spec-reporter": "~4.2.1", + "karma": "~4.1.0", + "karma-chrome-launcher": "~2.2.0", + "karma-coverage-istanbul-reporter": "~2.0.1", + "karma-jasmine": "~2.0.1", + "karma-jasmine-html-reporter": "^1.4.0", + "protractor": "~5.4.0", + "ts-node": "~7.0.0", + "tslint": "~5.15.0", + "typescript": "~3.7.5" + } +} diff --git a/proxy.config.json b/proxy.config.json new file mode 100644 index 0000000..1898eac --- /dev/null +++ b/proxy.config.json @@ -0,0 +1,7 @@ +{ + "/api": { + "target": "http://39.106.78.171:8000", + "secure": false, + "changeOrigin": true + } +} \ No newline at end of file diff --git a/reset.css b/reset.css new file mode 100644 index 0000000..c67618d --- /dev/null +++ b/reset.css @@ -0,0 +1,27 @@ +@charset "utf-8"; +html,body,ul,ol,dl,li,dt,dd,p,form,input,h1,h2,h3,h4,h5,h6,section,article,aside,header,footer,nav,figure,time,mark,main,canvas{ + margin:0; + padding:0; + font-size:16px; +} +b,strong,i,em,h1,h2,h3,h4,h5,h6{ + font-weight:500; + font-style:normal; +} +img{ + border:none; +} +a{ + text-decoration: none; + color:#000; +ul,ol,li{ + list-style:none; +} +.clearfn:after{ + content:""; + clear:both; + display: block; + overflow:hidden; + height:0; + visibility: hidden; +} \ No newline at end of file diff --git a/src/app/_theming.scss b/src/app/_theming.scss new file mode 100644 index 0000000..e30383b --- /dev/null +++ b/src/app/_theming.scss @@ -0,0 +1,5098 @@ +// Import all the theming functionality. +// We can use relative imports for imports from the cdk because we bundle everything +// up into a single flat scss file for material. +// We want overlays to always appear over user content, so set a baseline +// very high z-index for the overlay container, which is where we create the new +// stacking context for all overlays. +$cdk-z-index-overlay-container: 1000 !default; +$cdk-z-index-overlay: 1000 !default; +$cdk-z-index-overlay-backdrop: 1000 !default; + +// Background color for all of the backdrops +$cdk-overlay-dark-backdrop-background: rgba(0, 0, 0, 0.32) !default; + +// Default backdrop animation is based on the Material Design swift-ease-out. +$backdrop-animation-duration: 400ms !default; +$backdrop-animation-timing-function: cubic-bezier(0.25, 0.8, 0.25, 1) !default; + + +@mixin cdk-overlay() { + .cdk-overlay-container, .cdk-global-overlay-wrapper { + // Disable events from being captured on the overlay container. + pointer-events: none; + + // The container should be the size of the viewport. + top: 0; + left: 0; + height: 100%; + width: 100%; + } + + // The overlay-container is an invisible element which contains all individual overlays. + .cdk-overlay-container { + position: fixed; + z-index: $cdk-z-index-overlay-container; + + &:empty { + // Hide the element when it doesn't have any child nodes. This doesn't + // include overlays that have been detached, rather than disposed. + display: none; + } + } + + // We use an extra wrapper element in order to use make the overlay itself a flex item. + // This makes centering the overlay easy without running into the subpixel rendering + // problems tied to using `transform` and without interfering with the other position + // strategies. + .cdk-global-overlay-wrapper { + display: flex; + position: absolute; + z-index: $cdk-z-index-overlay; + } + + // A single overlay pane. + .cdk-overlay-pane { + // Note: it's important for this one to start off `absolute`, + // in order for us to be able to measure it correctly. + position: absolute; + pointer-events: auto; + box-sizing: border-box; + z-index: $cdk-z-index-overlay; + + // For connected-position overlays, we set `display: flex` in + // order to force `max-width` and `max-height` to take effect. + display: flex; + max-width: 100%; + max-height: 100%; + } + + .cdk-overlay-backdrop { + // TODO(jelbourn): reuse sidenav fullscreen mixin. + position: absolute; + top: 0; + bottom: 0; + left: 0; + right: 0; + + z-index: $cdk-z-index-overlay-backdrop; + pointer-events: auto; + -webkit-tap-highlight-color: transparent; + transition: opacity $backdrop-animation-duration $backdrop-animation-timing-function; + opacity: 0; + + &.cdk-overlay-backdrop-showing { + opacity: 1; + + // In high contrast mode the rgba background will become solid so we need to fall back + // to making it opaque using `opacity`. Note that we can't use the `cdk-high-contrast` + // mixin, because we can't normalize the import path to the _a11y.scss both for the + // source and when this file is distributed. See #10908. + @media screen and (-ms-high-contrast: active) { + opacity: 0.6; + } + } + } + + .cdk-overlay-dark-backdrop { + background: $cdk-overlay-dark-backdrop-background; + } + + .cdk-overlay-transparent-backdrop { + // Note: as of Firefox 57, having the backdrop be `background: none` will prevent it from + // capturing the user's mouse scroll events. Since we also can't use something like + // `rgba(0, 0, 0, 0)`, we work around the inconsistency by not setting the background at + // all and using `opacity` to make the element transparent. + &, &.cdk-overlay-backdrop-showing { + opacity: 0; + } + } + + // Overlay parent element used with the connected position strategy. Used to constrain the + // overlay element's size to fit within the viewport. + .cdk-overlay-connected-position-bounding-box { + position: absolute; + z-index: $cdk-z-index-overlay; + + // We use `display: flex` on this element exclusively for centering connected overlays. + // When *not* centering, a top/left/bottom/right will be set which overrides the normal + // flex layout. + display: flex; + + // We use the `column` direction here to avoid some flexbox issues in Edge + // when using the "grow after open" options. + flex-direction: column; + + // Add some dimensions so the element has an `innerText` which some people depend on in tests. + min-width: 1px; + min-height: 1px; + } + + // Used when disabling global scrolling. + .cdk-global-scrollblock { + position: fixed; + + // Necessary for the content not to lose its width. Note that we're using 100%, instead of + // 100vw, because 100vw includes the width plus the scrollbar, whereas 100% is the width + // that the element had before we made it `fixed`. + width: 100%; + + // Note: this will always add a scrollbar to whatever element it is on, which can + // potentially result in double scrollbars. It shouldn't be an issue, because we won't + // block scrolling on a page that doesn't have a scrollbar in the first place. + overflow-y: scroll; + } +} + +@mixin cdk-a11y { + .cdk-visually-hidden { + border: 0; + clip: rect(0 0 0 0); + height: 1px; + margin: -1px; + overflow: hidden; + padding: 0; + position: absolute; + width: 1px; + + // Avoid browsers rendering the focus ring in some cases. + outline: 0; + + // Avoid some cases where the browser will still render the native controls (see #9049). + -webkit-appearance: none; + -moz-appearance: none; + } +} + +// Applies styles for users in high contrast mode. Note that this only applies +// to Microsoft browsers. Chrome can be included by checking for the `html[hc]` +// attribute, however Chrome handles high contrast differently. +// +// @param target Which kind of high contrast setting to target. Defaults to `active`, can be +// `white-on-black` or `black-on-white`. +@mixin cdk-high-contrast($target: active) { + @media (-ms-high-contrast: $target) { + @content; + } +} + +// Core styles that enable monitoring autofill state of text fields. +@mixin cdk-text-field { + // Keyframes that apply no styles, but allow us to monitor when an text field becomes autofilled + // by watching for the animation events that are fired when they start. Note: the /*!*/ comment is + // needed to prevent LibSass from stripping the keyframes out. + // Based on: https://medium.com/@brunn/detecting-autofilled-fields-in-javascript-aed598d25da7 + @keyframes cdk-text-field-autofill-start {/*!*/} + @keyframes cdk-text-field-autofill-end {/*!*/} + + .cdk-text-field-autofill-monitored:-webkit-autofill { + animation-name: cdk-text-field-autofill-start; + } + + .cdk-text-field-autofill-monitored:not(:-webkit-autofill) { + animation-name: cdk-text-field-autofill-end; + } + + // Remove the resize handle on autosizing textareas, because whatever height + // the user resized to will be overwritten once they start typing again. + textarea.cdk-textarea-autosize { + resize: none; + } + + // This class is temporarily applied to the textarea when it is being measured. It is immediately + // removed when measuring is complete. We use `!important` rules here to make sure user-specified + // rules do not interfere with the measurement. + textarea.cdk-textarea-autosize-measuring { + height: auto !important; + overflow: hidden !important; + // Having 2px top and bottom padding seems to fix a bug where Chrome gets an incorrect + // measurement. We just have to account for it later and subtract it off the final result. + padding: 2px 0 !important; + box-sizing: content-box !important; + } +} + +// Used to generate UIDs for keyframes used to change the text field autofill styles. +$cdk-text-field-autofill-color-frame-count: 0; + +// Mixin used to apply custom background and foreground colors to an autofilled text field. +// Based on: https://stackoverflow.com/questions/2781549/ +// removing-input-background-colour-for-chrome-autocomplete#answer-37432260 +@mixin cdk-text-field-autofill-color($background, $foreground:'') { + @keyframes cdk-text-field-autofill-color-#{$cdk-text-field-autofill-color-frame-count} { + to { + background: $background; + @if $foreground != '' { color: $foreground; } + } + } + + &:-webkit-autofill { + animation-name: cdk-text-field-autofill-color-#{$cdk-text-field-autofill-color-frame-count}; + animation-fill-mode: both; + } + + &.cdk-text-field-autofill-monitored:-webkit-autofill { + animation-name: cdk-text-field-autofill-start, + cdk-text-field-autofill-color-#{$cdk-text-field-autofill-color-frame-count}; + } + + $cdk-text-field-autofill-color-frame-count: + $cdk-text-field-autofill-color-frame-count + 1 !global; +} + + +// Core styles that can be used to apply material design treatments to any element. +// Media queries +// TODO(josephperrott): Change $mat-xsmall and $mat-small usages to rely on BreakpointObserver, +$mat-xsmall: 'max-width: 599px'; +$mat-small: 'max-width: 959px'; + +// TODO: Revisit all z-indices before beta +// z-index master list + +$z-index-fab: 20 !default; +$z-index-drawer: 100 !default; + +// Global constants +$pi: 3.14159265; + +// Padding between input toggles and their labels +$mat-toggle-padding: 8px !default; +// Width and height of input toggles +$mat-toggle-size: 20px !default; + +// Easing Curves +// TODO(jelbourn): all of these need to be revisited + +// The default animation curves used by material design. +$mat-linear-out-slow-in-timing-function: cubic-bezier(0, 0, 0.2, 0.1) !default; +$mat-fast-out-slow-in-timing-function: cubic-bezier(0.4, 0, 0.2, 1) !default; +$mat-fast-out-linear-in-timing-function: cubic-bezier(0.4, 0, 1, 1) !default; + +$ease-in-out-curve-function: cubic-bezier(0.35, 0, 0.25, 1) !default; + +$swift-ease-out-duration: 400ms !default; +$swift-ease-out-timing-function: cubic-bezier(0.25, 0.8, 0.25, 1) !default; +$swift-ease-out: all $swift-ease-out-duration $swift-ease-out-timing-function !default; + +$swift-ease-in-duration: 300ms !default; +$swift-ease-in-timing-function: cubic-bezier(0.55, 0, 0.55, 0.2) !default; +$swift-ease-in: all $swift-ease-in-duration $swift-ease-in-timing-function !default; + +$swift-ease-in-out-duration: 500ms !default; +$swift-ease-in-out-timing-function: $ease-in-out-curve-function !default; +$swift-ease-in-out: all $swift-ease-in-out-duration $swift-ease-in-out-timing-function !default; + +$swift-linear-duration: 80ms !default; +$swift-linear-timing-function: linear !default; +$swift-linear: all $swift-linear-duration $swift-linear-timing-function !default; + + + +// A collection of mixins and CSS classes that can be used to apply elevation to a material +// element. +// See: https://material.io/design/environment/elevation.html +// Examples: +// +// +// .mat-foo { +// @include $mat-elevation(2); +// +// &:active { +// @include $mat-elevation(8); +// } +// } +// +//

Some content

+// +// For an explanation of the design behind how elevation is implemented, see the design doc at +// https://goo.gl/Kq0k9Z. + +// Colors for umbra, penumbra, and ambient shadows. As described in the design doc, each elevation +// level is created using a set of 3 shadow values, one for umbra (the shadow representing the +// space completely obscured by an object relative to its light source), one for penumbra (the +// space partially obscured by an object), and one for ambient (the space which contains the object +// itself). For a further explanation of these terms and their meanings, see +// https://en.wikipedia.org/wiki/Umbra,_penumbra_and_antumbra. + +// Maps for the different shadow sets and their values within each z-space. These values were +// created by taking a few reference shadow sets created by Google's Designers and interpolating +// all of the values between them. + +@function _get-umbra-map($color, $opacity) { + $shadow-color: if(type-of($color) == color, rgba($color, $opacity * 0.2), $color); + + @return ( + 0: '0px 0px 0px 0px #{$shadow-color}', + 1: '0px 2px 1px -1px #{$shadow-color}', + 2: '0px 3px 1px -2px #{$shadow-color}', + 3: '0px 3px 3px -2px #{$shadow-color}', + 4: '0px 2px 4px -1px #{$shadow-color}', + 5: '0px 3px 5px -1px #{$shadow-color}', + 6: '0px 3px 5px -1px #{$shadow-color}', + 7: '0px 4px 5px -2px #{$shadow-color}', + 8: '0px 5px 5px -3px #{$shadow-color}', + 9: '0px 5px 6px -3px #{$shadow-color}', + 10: '0px 6px 6px -3px #{$shadow-color}', + 11: '0px 6px 7px -4px #{$shadow-color}', + 12: '0px 7px 8px -4px #{$shadow-color}', + 13: '0px 7px 8px -4px #{$shadow-color}', + 14: '0px 7px 9px -4px #{$shadow-color}', + 15: '0px 8px 9px -5px #{$shadow-color}', + 16: '0px 8px 10px -5px #{$shadow-color}', + 17: '0px 8px 11px -5px #{$shadow-color}', + 18: '0px 9px 11px -5px #{$shadow-color}', + 19: '0px 9px 12px -6px #{$shadow-color}', + 20: '0px 10px 13px -6px #{$shadow-color}', + 21: '0px 10px 13px -6px #{$shadow-color}', + 22: '0px 10px 14px -6px #{$shadow-color}', + 23: '0px 11px 14px -7px #{$shadow-color}', + 24: '0px 11px 15px -7px #{$shadow-color}' + ); +} + +@function _get-penumbra-map($color, $opacity) { + $shadow-color: if(type-of($color) == color, rgba($color, $opacity * 0.14), $color); + + @return ( + 0: '0px 0px 0px 0px #{$shadow-color}', + 1: '0px 1px 1px 0px #{$shadow-color}', + 2: '0px 2px 2px 0px #{$shadow-color}', + 3: '0px 3px 4px 0px #{$shadow-color}', + 4: '0px 4px 5px 0px #{$shadow-color}', + 5: '0px 5px 8px 0px #{$shadow-color}', + 6: '0px 6px 10px 0px #{$shadow-color}', + 7: '0px 7px 10px 1px #{$shadow-color}', + 8: '0px 8px 10px 1px #{$shadow-color}', + 9: '0px 9px 12px 1px #{$shadow-color}', + 10: '0px 10px 14px 1px #{$shadow-color}', + 11: '0px 11px 15px 1px #{$shadow-color}', + 12: '0px 12px 17px 2px #{$shadow-color}', + 13: '0px 13px 19px 2px #{$shadow-color}', + 14: '0px 14px 21px 2px #{$shadow-color}', + 15: '0px 15px 22px 2px #{$shadow-color}', + 16: '0px 16px 24px 2px #{$shadow-color}', + 17: '0px 17px 26px 2px #{$shadow-color}', + 18: '0px 18px 28px 2px #{$shadow-color}', + 19: '0px 19px 29px 2px #{$shadow-color}', + 20: '0px 20px 31px 3px #{$shadow-color}', + 21: '0px 21px 33px 3px #{$shadow-color}', + 22: '0px 22px 35px 3px #{$shadow-color}', + 23: '0px 23px 36px 3px #{$shadow-color}', + 24: '0px 24px 38px 3px #{$shadow-color}' + ); +} + +@function _get-ambient-map($color, $opacity) { + $shadow-color: if(type-of($color) == color, rgba($color, $opacity * 0.12), $color); + + @return ( + 0: '0px 0px 0px 0px #{$shadow-color}', + 1: '0px 1px 3px 0px #{$shadow-color}', + 2: '0px 1px 5px 0px #{$shadow-color}', + 3: '0px 1px 8px 0px #{$shadow-color}', + 4: '0px 1px 10px 0px #{$shadow-color}', + 5: '0px 1px 14px 0px #{$shadow-color}', + 6: '0px 1px 18px 0px #{$shadow-color}', + 7: '0px 2px 16px 1px #{$shadow-color}', + 8: '0px 3px 14px 2px #{$shadow-color}', + 9: '0px 3px 16px 2px #{$shadow-color}', + 10: '0px 4px 18px 3px #{$shadow-color}', + 11: '0px 4px 20px 3px #{$shadow-color}', + 12: '0px 5px 22px 4px #{$shadow-color}', + 13: '0px 5px 24px 4px #{$shadow-color}', + 14: '0px 5px 26px 4px #{$shadow-color}', + 15: '0px 6px 28px 5px #{$shadow-color}', + 16: '0px 6px 30px 5px #{$shadow-color}', + 17: '0px 6px 32px 5px #{$shadow-color}', + 18: '0px 7px 34px 6px #{$shadow-color}', + 19: '0px 7px 36px 6px #{$shadow-color}', + 20: '0px 8px 38px 7px #{$shadow-color}', + 21: '0px 8px 40px 7px #{$shadow-color}', + 22: '0px 8px 42px 7px #{$shadow-color}', + 23: '0px 9px 44px 8px #{$shadow-color}', + 24: '0px 9px 46px 8px #{$shadow-color}' + ); +} + +// The default duration value for elevation transitions. +$mat-elevation-transition-duration: 280ms !default; + +// The default easing value for elevation transitions. +$mat-elevation-transition-timing-function: $mat-fast-out-slow-in-timing-function; + +// The default color for elevation shadows. +$mat-elevation-color: black !default; + +// The default opacity scaling value for elevation shadows. +$mat-elevation-opacity: 1 !default; + +// Prefix for elevation-related selectors. +$_mat-elevation-prefix: 'mat-elevation-z'; + +// Applies the correct css rules to an element to give it the elevation specified by $zValue. +// The $zValue must be between 0 and 24. +@mixin mat-elevation($zValue, $color: $mat-elevation-color, $opacity: $mat-elevation-opacity) { + @if type-of($zValue) != number or not unitless($zValue) { + @error '$zValue must be a unitless number'; + } + @if $zValue < 0 or $zValue > 24 { + @error '$zValue must be between 0 and 24'; + } + + box-shadow: #{map-get(_get-umbra-map($color, $opacity), $zValue)}, + #{map-get(_get-penumbra-map($color, $opacity), $zValue)}, + #{map-get(_get-ambient-map($color, $opacity), $zValue)}; +} + +@mixin _mat-theme-elevation($zValue, $theme, $opacity: $mat-elevation-opacity) { + $foreground: map-get($theme, foreground); + $elevation-color: map-get($foreground, elevation); + $elevation-color-or-default: if($elevation-color == null, $mat-elevation-color, $elevation-color); + + @include mat-elevation($zValue, $elevation-color-or-default, $opacity); +} + +// Applies the elevation to an element in a manner that allows +// consumers to override it via the Material elevation classes. +@mixin mat-overridable-elevation( + $zValue, + $color: $mat-elevation-color, + $opacity: $mat-elevation-opacity) { + &:not([class*='#{$_mat-elevation-prefix}']) { + @include mat-elevation($zValue, $color, $opacity); + } +} + +@mixin _mat-theme-overridable-elevation($zValue, $theme, $opacity: $mat-elevation-opacity) { + $foreground: map-get($theme, foreground); + $elevation-color: map-get($foreground, elevation); + $elevation-color-or-default: if($elevation-color == null, $mat-elevation-color, $elevation-color); + + @include mat-overridable-elevation($zValue, $elevation-color-or-default, $opacity); +} + +// Returns a string that can be used as the value for a transition property for elevation. +// Calling this function directly is useful in situations where a component needs to transition +// more than one property. +// +// .foo { +// transition: mat-elevation-transition-property-value(), opacity 100ms ease; +// } +@function mat-elevation-transition-property-value( + $duration: $mat-elevation-transition-duration, + $easing: $mat-elevation-transition-timing-function) { + @return box-shadow #{$duration} #{$easing}; +} + +// Applies the correct css rules needed to have an element transition between elevations. +// This mixin should be applied to elements whose elevation values will change depending on their +// context (e.g. when active or disabled). +// +// NOTE(traviskaufman): Both this mixin and the above function use default parameters so they can +// be used in the same way by clients. +@mixin mat-elevation-transition( + $duration: $mat-elevation-transition-duration, + $easing: $mat-elevation-transition-timing-function) { + transition: mat-elevation-transition-property-value($duration, $easing); +} + +// Color palettes from the Material Design spec. +// See https://material.io/design/color/ +// +// Contrast colors are hard-coded because it is too difficult (probably impossible) to +// calculate them. These contrast colors are pulled from the public Material Design spec swatches. +// While the contrast colors in the spec are not prescriptive, we use them for convenience. + + +// @deprecated renamed to $dark-primary-text. +// @breaking-change 8.0.0 +$black-87-opacity: rgba(black, 0.87); +// @deprecated renamed to $light-primary-text. +// @breaking-change 8.0.0 +$white-87-opacity: rgba(white, 0.87); +// @deprecated use $dark-[secondary-text,disabled-text,dividers,focused] instead. +// @breaking-change 8.0.0 +$black-12-opacity: rgba(black, 0.12); +// @deprecated use $light-[secondary-text,disabled-text,dividers,focused] instead. +// @breaking-change 8.0.0 +$white-12-opacity: rgba(white, 0.12); +// @deprecated use $dark-[secondary-text,disabled-text,dividers,focused] instead. +// @breaking-change 8.0.0 +$black-6-opacity: rgba(black, 0.06); +// @deprecated use $light-[secondary-text,disabled-text,dividers,focused] instead. +// @breaking-change 8.0.0 +$white-6-opacity: rgba(white, 0.06); + +$dark-primary-text: rgba(black, 0.87); +$dark-secondary-text: rgba(black, 0.54); +$dark-disabled-text: rgba(black, 0.38); +$dark-dividers: rgba(black, 0.12); +$dark-focused: rgba(black, 0.12); +$light-primary-text: white; +$light-secondary-text: rgba(white, 0.7); +$light-disabled-text: rgba(white, 0.5); +$light-dividers: rgba(white, 0.12); +$light-focused: rgba(white, 0.12); + +$mat-red: ( + 50: #ffebee, + 100: #ffcdd2, + 200: #ef9a9a, + 300: #e57373, + 400: #ef5350, + 500: #f44336, + 600: #e53935, + 700: #d32f2f, + 800: #c62828, + 900: #b71c1c, + A100: #ff8a80, + A200: #ff5252, + A400: #ff1744, + A700: #d50000, + contrast: ( + 50: $dark-primary-text, + 100: $dark-primary-text, + 200: $dark-primary-text, + 300: $dark-primary-text, + 400: $dark-primary-text, + 500: $light-primary-text, + 600: $light-primary-text, + 700: $light-primary-text, + 800: $light-primary-text, + 900: $light-primary-text, + A100: $dark-primary-text, + A200: $light-primary-text, + A400: $light-primary-text, + A700: $light-primary-text, + ) +); + +$mat-pink: ( + 50: #fce4ec, + 100: #f8bbd0, + 200: #f48fb1, + 300: #f06292, + 400: #ec407a, + 500: #e91e63, + 600: #d81b60, + 700: #c2185b, + 800: #ad1457, + 900: #880e4f, + A100: #ff80ab, + A200: #ff4081, + A400: #f50057, + A700: #c51162, + contrast: ( + 50: $dark-primary-text, + 100: $dark-primary-text, + 200: $dark-primary-text, + 300: $dark-primary-text, + 400: $dark-primary-text, + 500: $light-primary-text, + 600: $light-primary-text, + 700: $light-primary-text, + 800: $light-primary-text, + 900: $light-primary-text, + A100: $dark-primary-text, + A200: $light-primary-text, + A400: $light-primary-text, + A700: $light-primary-text, + ) +); + +$mat-purple: ( + 50: #f3e5f5, + 100: #e1bee7, + 200: #ce93d8, + 300: #ba68c8, + 400: #ab47bc, + 500: #9c27b0, + 600: #8e24aa, + 700: #7b1fa2, + 800: #6a1b9a, + 900: #4a148c, + A100: #ea80fc, + A200: #e040fb, + A400: #d500f9, + A700: #aa00ff, + contrast: ( + 50: $dark-primary-text, + 100: $dark-primary-text, + 200: $dark-primary-text, + 300: $light-primary-text, + 400: $light-primary-text, + 500: $light-primary-text, + 600: $light-primary-text, + 700: $light-primary-text, + 800: $light-primary-text, + 900: $light-primary-text, + A100: $dark-primary-text, + A200: $light-primary-text, + A400: $light-primary-text, + A700: $light-primary-text, + ) +); + +$mat-deep-purple: ( + 50: #ede7f6, + 100: #d1c4e9, + 200: #b39ddb, + 300: #9575cd, + 400: #7e57c2, + 500: #673ab7, + 600: #5e35b1, + 700: #512da8, + 800: #4527a0, + 900: #311b92, + A100: #b388ff, + A200: #7c4dff, + A400: #651fff, + A700: #6200ea, + contrast: ( + 50: $dark-primary-text, + 100: $dark-primary-text, + 200: $dark-primary-text, + 300: $light-primary-text, + 400: $light-primary-text, + 500: $light-primary-text, + 600: $light-primary-text, + 700: $light-primary-text, + 800: $light-primary-text, + 900: $light-primary-text, + A100: $dark-primary-text, + A200: $light-primary-text, + A400: $light-primary-text, + A700: $light-primary-text, + ) +); + +$mat-indigo: ( + 50: #e8eaf6, + 100: #c5cae9, + 200: #9fa8da, + 300: #7986cb, + 400: #5c6bc0, + 500: #3f51b5, + 600: #3949ab, + 700: #303f9f, + 800: #283593, + 900: #1a237e, + A100: #8c9eff, + A200: #536dfe, + A400: #3d5afe, + A700: #304ffe, + contrast: ( + 50: $dark-primary-text, + 100: $dark-primary-text, + 200: $dark-primary-text, + 300: $light-primary-text, + 400: $light-primary-text, + 500: $light-primary-text, + 600: $light-primary-text, + 700: $light-primary-text, + 800: $light-primary-text, + 900: $light-primary-text, + A100: $dark-primary-text, + A200: $light-primary-text, + A400: $light-primary-text, + A700: $light-primary-text, + ) +); + +$mat-blue: ( + 50: #e3f2fd, + 100: #bbdefb, + 200: #90caf9, + 300: #64b5f6, + 400: #42a5f5, + 500: #2196f3, + 600: #1e88e5, + 700: #1976d2, + 800: #1565c0, + 900: #0d47a1, + A100: #82b1ff, + A200: #448aff, + A400: #2979ff, + A700: #2962ff, + contrast: ( + 50: $dark-primary-text, + 100: $dark-primary-text, + 200: $dark-primary-text, + 300: $dark-primary-text, + 400: $dark-primary-text, + 500: $light-primary-text, + 600: $light-primary-text, + 700: $light-primary-text, + 800: $light-primary-text, + 900: $light-primary-text, + A100: $dark-primary-text, + A200: $light-primary-text, + A400: $light-primary-text, + A700: $light-primary-text, + ) +); + +$mat-light-blue: ( + 50: #e1f5fe, + 100: #b3e5fc, + 200: #81d4fa, + 300: #4fc3f7, + 400: #29b6f6, + 500: #03a9f4, + 600: #039be5, + 700: #0288d1, + 800: #0277bd, + 900: #01579b, + A100: #80d8ff, + A200: #40c4ff, + A400: #00b0ff, + A700: #0091ea, + contrast: ( + 50: $dark-primary-text, + 100: $dark-primary-text, + 200: $dark-primary-text, + 300: $dark-primary-text, + 400: $dark-primary-text, + 500: $light-primary-text, + 600: $light-primary-text, + 700: $light-primary-text, + 800: $light-primary-text, + 900: $light-primary-text, + A100: $dark-primary-text, + A200: $dark-primary-text, + A400: $dark-primary-text, + A700: $light-primary-text, + ) +); + +$mat-cyan: ( + 50: #e0f7fa, + 100: #b2ebf2, + 200: #80deea, + 300: #4dd0e1, + 400: #26c6da, + 500: #00bcd4, + 600: #00acc1, + 700: #0097a7, + 800: #00838f, + 900: #006064, + A100: #84ffff, + A200: #18ffff, + A400: #00e5ff, + A700: #00b8d4, + contrast: ( + 50: $dark-primary-text, + 100: $dark-primary-text, + 200: $dark-primary-text, + 300: $dark-primary-text, + 400: $dark-primary-text, + 500: $light-primary-text, + 600: $light-primary-text, + 700: $light-primary-text, + 800: $light-primary-text, + 900: $light-primary-text, + A100: $dark-primary-text, + A200: $dark-primary-text, + A400: $dark-primary-text, + A700: $dark-primary-text, + ) +); + +$mat-teal: ( + 50: #e0f2f1, + 100: #b2dfdb, + 200: #80cbc4, + 300: #4db6ac, + 400: #26a69a, + 500: #009688, + 600: #00897b, + 700: #00796b, + 800: #00695c, + 900: #004d40, + A100: #a7ffeb, + A200: #64ffda, + A400: #1de9b6, + A700: #00bfa5, + contrast: ( + 50: $dark-primary-text, + 100: $dark-primary-text, + 200: $dark-primary-text, + 300: $dark-primary-text, + 400: $dark-primary-text, + 500: $light-primary-text, + 600: $light-primary-text, + 700: $light-primary-text, + 800: $light-primary-text, + 900: $light-primary-text, + A100: $dark-primary-text, + A200: $dark-primary-text, + A400: $dark-primary-text, + A700: $dark-primary-text, + ) +); + +$mat-green: ( + 50: #e8f5e9, + 100: #c8e6c9, + 200: #a5d6a7, + 300: #81c784, + 400: #66bb6a, + 500: #4caf50, + 600: #43a047, + 700: #388e3c, + 800: #2e7d32, + 900: #1b5e20, + A100: #b9f6ca, + A200: #69f0ae, + A400: #00e676, + A700: #00c853, + contrast: ( + 50: $dark-primary-text, + 100: $dark-primary-text, + 200: $dark-primary-text, + 300: $dark-primary-text, + 400: $dark-primary-text, + 500: $dark-primary-text, + 600: $light-primary-text, + 700: $light-primary-text, + 800: $light-primary-text, + 900: $light-primary-text, + A100: $dark-primary-text, + A200: $dark-primary-text, + A400: $dark-primary-text, + A700: $dark-primary-text, + ) +); + +$mat-light-green: ( + 50: #f1f8e9, + 100: #dcedc8, + 200: #c5e1a5, + 300: #aed581, + 400: #9ccc65, + 500: #8bc34a, + 600: #7cb342, + 700: #689f38, + 800: #558b2f, + 900: #33691e, + A100: #ccff90, + A200: #b2ff59, + A400: #76ff03, + A700: #64dd17, + contrast: ( + 50: $dark-primary-text, + 100: $dark-primary-text, + 200: $dark-primary-text, + 300: $dark-primary-text, + 400: $dark-primary-text, + 500: $dark-primary-text, + 600: $dark-primary-text, + 700: $light-primary-text, + 800: $light-primary-text, + 900: $light-primary-text, + A100: $dark-primary-text, + A200: $dark-primary-text, + A400: $dark-primary-text, + A700: $dark-primary-text, + ) +); + +$mat-lime: ( + 50: #f9fbe7, + 100: #f0f4c3, + 200: #e6ee9c, + 300: #dce775, + 400: #d4e157, + 500: #cddc39, + 600: #c0ca33, + 700: #afb42b, + 800: #9e9d24, + 900: #827717, + A100: #f4ff81, + A200: #eeff41, + A400: #c6ff00, + A700: #aeea00, + contrast: ( + 50: $dark-primary-text, + 100: $dark-primary-text, + 200: $dark-primary-text, + 300: $dark-primary-text, + 400: $dark-primary-text, + 500: $dark-primary-text, + 600: $dark-primary-text, + 700: $dark-primary-text, + 800: $dark-primary-text, + 900: $light-primary-text, + A100: $dark-primary-text, + A200: $dark-primary-text, + A400: $dark-primary-text, + A700: $dark-primary-text, + ) +); + +$mat-yellow: ( + 50: #fffde7, + 100: #fff9c4, + 200: #fff59d, + 300: #fff176, + 400: #ffee58, + 500: #ffeb3b, + 600: #fdd835, + 700: #fbc02d, + 800: #f9a825, + 900: #f57f17, + A100: #ffff8d, + A200: #ffff00, + A400: #ffea00, + A700: #ffd600, + contrast: ( + 50: $dark-primary-text, + 100: $dark-primary-text, + 200: $dark-primary-text, + 300: $dark-primary-text, + 400: $dark-primary-text, + 500: $dark-primary-text, + 600: $dark-primary-text, + 700: $dark-primary-text, + 800: $dark-primary-text, + 900: $dark-primary-text, + A100: $dark-primary-text, + A200: $dark-primary-text, + A400: $dark-primary-text, + A700: $dark-primary-text, + ) +); + +$mat-amber: ( + 50: #fff8e1, + 100: #ffecb3, + 200: #ffe082, + 300: #ffd54f, + 400: #ffca28, + 500: #ffc107, + 600: #ffb300, + 700: #ffa000, + 800: #ff8f00, + 900: #ff6f00, + A100: #ffe57f, + A200: #ffd740, + A400: #ffc400, + A700: #ffab00, + contrast: ( + 50: $dark-primary-text, + 100: $dark-primary-text, + 200: $dark-primary-text, + 300: $dark-primary-text, + 400: $dark-primary-text, + 500: $dark-primary-text, + 600: $dark-primary-text, + 700: $dark-primary-text, + 800: $dark-primary-text, + 900: $dark-primary-text, + A100: $dark-primary-text, + A200: $dark-primary-text, + A400: $dark-primary-text, + A700: $dark-primary-text, + ) +); + +$mat-orange: ( + 50: #fff3e0, + 100: #ffe0b2, + 200: #ffcc80, + 300: #ffb74d, + 400: #ffa726, + 500: #ff9800, + 600: #fb8c00, + 700: #f57c00, + 800: #ef6c00, + 900: #e65100, + A100: #ffd180, + A200: #ffab40, + A400: #ff9100, + A700: #ff6d00, + contrast: ( + 50: $dark-primary-text, + 100: $dark-primary-text, + 200: $dark-primary-text, + 300: $dark-primary-text, + 400: $dark-primary-text, + 500: $dark-primary-text, + 600: $dark-primary-text, + 700: $dark-primary-text, + 800: $light-primary-text, + 900: $light-primary-text, + A100: $dark-primary-text, + A200: $dark-primary-text, + A400: $dark-primary-text, + A700: black, + ) +); + +$mat-deep-orange: ( + 50: #fbe9e7, + 100: #ffccbc, + 200: #ffab91, + 300: #ff8a65, + 400: #ff7043, + 500: #ff5722, + 600: #f4511e, + 700: #e64a19, + 800: #d84315, + 900: #bf360c, + A100: #ff9e80, + A200: #ff6e40, + A400: #ff3d00, + A700: #dd2c00, + contrast: ( + 50: $dark-primary-text, + 100: $dark-primary-text, + 200: $dark-primary-text, + 300: $dark-primary-text, + 400: $dark-primary-text, + 500: $light-primary-text, + 600: $light-primary-text, + 700: $light-primary-text, + 800: $light-primary-text, + 900: $light-primary-text, + A100: $dark-primary-text, + A200: $dark-primary-text, + A400: $light-primary-text, + A700: $light-primary-text, + ) +); + +$mat-brown: ( + 50: #efebe9, + 100: #d7ccc8, + 200: #bcaaa4, + 300: #a1887f, + 400: #8d6e63, + 500: #795548, + 600: #6d4c41, + 700: #5d4037, + 800: #4e342e, + 900: #3e2723, + A100: #d7ccc8, + A200: #bcaaa4, + A400: #8d6e63, + A700: #5d4037, + contrast: ( + 50: $dark-primary-text, + 100: $dark-primary-text, + 200: $dark-primary-text, + 300: $light-primary-text, + 400: $light-primary-text, + 500: $light-primary-text, + 600: $light-primary-text, + 700: $light-primary-text, + 800: $light-primary-text, + 900: $light-primary-text, + A100: $dark-primary-text, + A200: $dark-primary-text, + A400: $light-primary-text, + A700: $light-primary-text, + ) +); + +$mat-grey: ( + 50: #fafafa, + 100: #f5f5f5, + 200: #eeeeee, + 300: #e0e0e0, + 400: #bdbdbd, + 500: #9e9e9e, + 600: #757575, + 700: #616161, + 800: #424242, + 900: #212121, + A100: #ffffff, + A200: #eeeeee, + A400: #bdbdbd, + A700: #616161, + contrast: ( + 50: $dark-primary-text, + 100: $dark-primary-text, + 200: $dark-primary-text, + 300: $dark-primary-text, + 400: $dark-primary-text, + 500: $dark-primary-text, + 600: $light-primary-text, + 700: $light-primary-text, + 800: $light-primary-text, + 900: $light-primary-text, + A100: $dark-primary-text, + A200: $dark-primary-text, + A400: $dark-primary-text, + A700: $light-primary-text, + ) +); + +// Alias for alternate spelling. +$mat-gray: $mat-grey; + +$mat-blue-grey: ( + 50: #eceff1, + 100: #cfd8dc, + 200: #b0bec5, + 300: #90a4ae, + 400: #78909c, + 500: #607d8b, + 600: #546e7a, + 700: #455a64, + 800: #37474f, + 900: #263238, + A100: #cfd8dc, + A200: #b0bec5, + A400: #78909c, + A700: #455a64, + contrast: ( + 50: $dark-primary-text, + 100: $dark-primary-text, + 200: $dark-primary-text, + 300: $dark-primary-text, + 400: $light-primary-text, + 500: $light-primary-text, + 600: $light-primary-text, + 700: $light-primary-text, + 800: $light-primary-text, + 900: $light-primary-text, + A100: $dark-primary-text, + A200: $dark-primary-text, + A400: $light-primary-text, + A700: $light-primary-text, + ) +); + +// Alias for alternate spelling. +$mat-blue-gray: $mat-blue-grey; + + +// Background palette for light themes. +$mat-light-theme-background: ( + status-bar: map_get($mat-grey, 300), + app-bar: map_get($mat-grey, 100), + background: map_get($mat-grey, 50), + hover: rgba(black, 0.04), // TODO(kara): check style with Material Design UX + card: white, + dialog: white, + disabled-button: rgba(black, 0.12), + raised-button: white, + focused-button: $dark-focused, + selected-button: map_get($mat-grey, 300), + selected-disabled-button: map_get($mat-grey, 400), + disabled-button-toggle: map_get($mat-grey, 200), + unselected-chip: map_get($mat-grey, 300), + disabled-list-option: map_get($mat-grey, 200), +); + +// Background palette for dark themes. +$mat-dark-theme-background: ( + // status-bar: black, + // app-bar: map_get($mat-grey, 900), + // background: #303030, + // hover: rgba(white, 0.04), // TODO(kara): check style with Material Design UX + // card: map_get($mat-grey, 800), + // dialog: map_get($mat-grey, 800), + // disabled-button: rgba(white, 0.12), + // raised-button: map-get($mat-grey, 800), + // focused-button: $light-focused, + // selected-button: map_get($mat-grey, 900), + // selected-disabled-button: map_get($mat-grey, 800), + // disabled-button-toggle: black, + // unselected-chip: map_get($mat-grey, 700), + // disabled-list-option: black, + status-bar: map_get($mat-grey, 300), + app-bar: map_get($mat-grey, 100), + background: map_get($mat-grey, 50), + hover: rgba(black, 0.04), // TODO(kara): check style with Material Design UX + card: white, + dialog: white, + disabled-button: rgba(black, 0.12), + raised-button: white, + focused-button: $dark-focused, + selected-button: map_get($mat-grey, 300), + selected-disabled-button: map_get($mat-grey, 400), + disabled-button-toggle: map_get($mat-grey, 200), + unselected-chip: map_get($mat-grey, 300), + disabled-list-option: map_get($mat-grey, 200), +); + +// Foreground palette for light themes. +$mat-light-theme-foreground: ( + base: black, + divider: $dark-dividers, + dividers: $dark-dividers, + disabled: $dark-disabled-text, + disabled-button: rgba(black, 0.26), + disabled-text: $dark-disabled-text, + elevation: black, + hint-text: $dark-disabled-text, + secondary-text: $dark-secondary-text, + icon: rgba(black, 0.54), + icons: rgba(black, 0.54), + text: rgba(black, 0.87), + slider-min: rgba(black, 0.87), + slider-off: rgba(black, 0.26), + slider-off-active: rgba(black, 0.38), +); + +// Foreground palette for dark themes. +$mat-dark-theme-foreground: ( + // base: white, + // divider: $light-dividers, + // dividers: $light-dividers, + // disabled: $light-disabled-text, + // disabled-button: rgba(white, 0.3), + // disabled-text: $light-disabled-text, + // elevation: black, + // hint-text: $light-disabled-text, + // secondary-text: $light-secondary-text, + // icon: white, + // icons: white, + // text: black, + // slider-min: white, + // slider-off: rgba(white, 0.3), + // slider-off-active: rgba(white, 0.3), + base: black, + divider: $dark-dividers, + dividers: $dark-dividers, + disabled: $dark-disabled-text, + disabled-button: rgba(black, 0.26), + disabled-text: $dark-disabled-text, + elevation: black, + hint-text: $dark-disabled-text, + secondary-text: $dark-secondary-text, + icon: rgba(black, 0.54), + icons: rgba(black, 0.54), + text: rgba(black, 0.87), + slider-min: rgba(black, 0.87), + slider-off: rgba(black, 0.26), + slider-off-active: rgba(black, 0.38), +); + + + +// For a given hue in a palette, return the contrast color from the map of contrast palettes. +// @param $color-map +// @param $hue +@function mat-contrast($palette, $hue) { + @return map-get(map-get($palette, contrast), $hue); +} + + +// Creates a map of hues to colors for a theme. This is used to define a theme palette in terms +// of the Material Design hues. +// @param $color-map +// @param $primary +// @param $lighter +@function mat-palette($base-palette, $default: 500, $lighter: 100, $darker: 700, $text: $default) { + $result: map_merge($base-palette, ( + default: map-get($base-palette, $default), + lighter: map-get($base-palette, $lighter), + darker: map-get($base-palette, $darker), + text: map-get($base-palette, $text), + + default-contrast: mat-contrast($base-palette, $default), + lighter-contrast: mat-contrast($base-palette, $lighter), + darker-contrast: mat-contrast($base-palette, $darker) + )); + + // For each hue in the palette, add a "-contrast" color to the map. + @each $hue, $color in $base-palette { + $result: map_merge($result, ( + '#{$hue}-contrast': mat-contrast($base-palette, $hue) + )); + } + + @return $result; +} + + +// Gets a color from a theme palette (the output of mat-palette). +// The hue can be one of the standard values (500, A400, etc.), one of the three preconfigured +// hues (default, lighter, darker), or any of the aforementioned prefixed with "-contrast". +// +// @param $color-map The theme palette (output of mat-palette). +// @param $hue The hue from the palette to use. If this is a value between 0 and 1, it will +// be treated as opacity. +// @param $opacity The alpha channel value for the color. +@function mat-color($palette, $hue: default, $opacity: null) { + // If hueKey is a number between zero and one, then it actually contains an + // opacity value, so recall this function with the default hue and that given opacity. + @if type-of($hue) == number and $hue >= 0 and $hue <= 1 { + @return mat-color($palette, default, $hue); + } + + $color: map-get($palette, $hue); + + @if (type-of($color) != color) { + // If the $color resolved to something different from a color (e.g. a CSS variable), + // we can't apply the opacity anyway so we return the value as is, otherwise Sass can + // throw an error or output something invalid. + @return $color; + } + + @return rgba($color, if($opacity == null, opacity($color), $opacity)); +} + + +// Creates a container object for a light theme to be given to individual component theme mixins. +@function mat-light-theme($primary, $accent, $warn: mat-palette($mat-red)) { + @return ( + primary: $primary, + accent: $accent, + warn: $warn, + is-dark: false, + foreground: $mat-light-theme-foreground, + background: $mat-light-theme-background, + ); +} + + +// Creates a container object for a dark theme to be given to individual component theme mixins. +@function mat-dark-theme($primary, $accent, $warn: mat-palette($mat-red)) { + @return ( + primary: $primary, + accent: $accent, + warn: $warn, + is-dark: true, + foreground: $mat-dark-theme-foreground, + background: $mat-dark-theme-background, + ); +} + + + +$mat-ripple-color-opacity: 0.1; + +@mixin mat-ripple() { + + // The host element of an mat-ripple directive should always have a position of "absolute" or + // "relative" so that the ripples inside are correctly positioned relatively to the container. + .mat-ripple { + overflow: hidden; + + // By default, every ripple container should have position: relative in favor of creating an + // easy API for developers using the MatRipple directive. + position: relative; + } + + .mat-ripple.mat-ripple-unbounded { + overflow: visible; + } + + .mat-ripple-element { + position: absolute; + border-radius: 50%; + pointer-events: none; + + transition: opacity, transform 0ms cubic-bezier(0, 0, 0.2, 1); + transform: scale(0); + + // In high contrast mode the ripple is opaque, causing it to obstruct the content. + @include cdk-high-contrast { + display: none; + } + } +} + +/* Theme for the ripple elements.*/ +@mixin mat-ripple-theme($theme) { + $foreground: map_get($theme, foreground); + $foreground-base: map_get($foreground, base); + + .mat-ripple-element { + // If the ripple color is resolves to a color *type*, we can use it directly, otherwise + // (e.g. it resolves to a CSS variable) we fall back to using the color and setting an opacity. + @if (type-of($foreground-base) == color) { + background-color: rgba($foreground-base, $mat-ripple-color-opacity); + } + @else { + background-color: $foreground-base; + opacity: $mat-ripple-color-opacity; + } + } +} + + + +// Utility for fetching a nested value from a typography config. +@function _mat-get-type-value($config, $level, $name) { + @return map-get(map-get($config, $level), $name); +} + +// Gets the font size for a level inside a typography config. +@function mat-font-size($config, $level) { + @return _mat-get-type-value($config, $level, font-size); +} + +// Gets the line height for a level inside a typography config. +@function mat-line-height($config, $level) { + @return _mat-get-type-value($config, $level, line-height); +} + +// Gets the font weight for a level inside a typography config. +@function mat-font-weight($config, $level) { + @return _mat-get-type-value($config, $level, font-weight); +} + +// Gets the letter spacing for a level inside a typography config. +@function mat-letter-spacing($config, $level) { + @return _mat-get-type-value($config, $level, letter-spacing); +} + +// Gets the font-family from a typography config and removes the quotes around it. +@function mat-font-family($config, $level: null) { + $font-family: map-get($config, font-family); + + @if $level != null { + $font-family: _mat-get-type-value($config, $level, font-family); + } + + // Guard against unquoting non-string values, because it's deprecated. + @return if(type-of($font-family) == string, unquote($font-family), $font-family); +} + +// Outputs the shorthand `font` CSS property, based on a set of typography values. Falls back to +// the individual properties if a value that isn't allowed in the shorthand is passed in. +@mixin mat-typography-font-shorthand($font-size, $font-weight, $line-height, $font-family) { + // If any of the values are set to `inherit`, we can't use the shorthand + // so we fall back to passing in the individual properties. + @if ($font-size == inherit or + $font-weight == inherit or + $line-height == inherit or + $font-family == inherit or + $font-size == null or + $font-weight == null or + $line-height == null or + $font-family == null) { + + font-size: $font-size; + font-weight: $font-weight; + line-height: $line-height; + font-family: $font-family; + } + @else { + // Otherwise use the shorthand `font`, because it's the least amount of bytes. Note + // that we need to use interpolation for `font-size/line-height` in order to prevent + // Sass from dividing the two values. + font: $font-weight #{$font-size}/#{$line-height} $font-family; + } +} + +// Converts a typography level into CSS styles. +@mixin mat-typography-level-to-styles($config, $level) { + $font-size: mat-font-size($config, $level); + $font-weight: mat-font-weight($config, $level); + $line-height: mat-line-height($config, $level); + $font-family: mat-font-family($config, $level); + + @include mat-typography-font-shorthand($font-size, $font-weight, $line-height, $font-family); + letter-spacing: mat-letter-spacing($config, $level); +} + + +@mixin mat-option-theme($theme) { + $foreground: map-get($theme, foreground); + $background: map-get($theme, background); + $primary: map-get($theme, primary); + $accent: map-get($theme, accent); + $warn: map-get($theme, warn); + + .mat-option { + color: mat-color($foreground, text); + + &:hover:not(.mat-option-disabled), + &:focus:not(.mat-option-disabled) { + background: mat-color($background, hover); + } + + // In multiple mode there is a checkbox to show that the option is selected. + &.mat-selected:not(.mat-option-multiple):not(.mat-option-disabled) { + background: mat-color($background, hover); + } + + &.mat-active { + background: mat-color($background, hover); + color: mat-color($foreground, text); + } + + &.mat-option-disabled { + color: mat-color($foreground, hint-text); + } + } + + .mat-primary .mat-option.mat-selected:not(.mat-option-disabled) { + color: mat-color($primary, text); + } + + .mat-accent .mat-option.mat-selected:not(.mat-option-disabled) { + color: mat-color($accent, text); + } + + .mat-warn .mat-option.mat-selected:not(.mat-option-disabled) { + color: mat-color($warn, text); + } +} + +@mixin mat-option-typography($config) { + .mat-option { + font: { + family: mat-font-family($config); + size: mat-font-size($config, subheading-2); + } + } +} + + + + + +@mixin mat-optgroup-theme($theme) { + $foreground: map-get($theme, foreground); + + .mat-optgroup-label { + color: mat-color($foreground, secondary-text); + } + + .mat-optgroup-disabled .mat-optgroup-label { + color: mat-color($foreground, hint-text); + } +} + +@mixin mat-optgroup-typography($config) { + .mat-optgroup-label { + @include mat-typography-level-to-styles($config, body-2); + } +} + + + +@mixin mat-pseudo-checkbox-theme($theme) { + $is-dark-theme: map-get($theme, is-dark); + $primary: map-get($theme, primary); + $accent: map-get($theme, accent); + $warn: map-get($theme, warn); + $background: map-get($theme, background); + + // NOTE(traviskaufman): While the spec calls for translucent blacks/whites for disabled colors, + // this does not work well with elements layered on top of one another. To get around this we + // blend the colors together based on the base color and the theme background. + $white-30pct-opacity-on-dark: #686868; + $black-26pct-opacity-on-light: #b0b0b0; + $disabled-color: if($is-dark-theme, $white-30pct-opacity-on-dark, $black-26pct-opacity-on-light); + $colored-box-selector: '.mat-pseudo-checkbox-checked, .mat-pseudo-checkbox-indeterminate'; + + .mat-pseudo-checkbox { + color: mat-color(map-get($theme, foreground), secondary-text); + + &::after { + color: mat-color($background, background); + } + } + + .mat-pseudo-checkbox-disabled { + color: $disabled-color; + } + + .mat-primary .mat-pseudo-checkbox-checked, + .mat-primary .mat-pseudo-checkbox-indeterminate { + background: mat-color(map-get($theme, primary)); + } + + // Default to the accent color. Note that the pseudo checkboxes are meant to inherit the + // theme from their parent, rather than implementing their own theming, which is why we + // don't attach to the `mat-*` classes. Also note that this needs to be below `.mat-primary` + // in order to allow for the color to be overwritten if the checkbox is inside a parent that + // has `mat-accent` and is placed inside another parent that has `mat-primary`. + .mat-pseudo-checkbox-checked, + .mat-pseudo-checkbox-indeterminate, + .mat-accent .mat-pseudo-checkbox-checked, + .mat-accent .mat-pseudo-checkbox-indeterminate { + background: mat-color(map-get($theme, accent)); + } + + .mat-warn .mat-pseudo-checkbox-checked, + .mat-warn .mat-pseudo-checkbox-indeterminate { + background: mat-color(map-get($theme, warn)); + } + + .mat-pseudo-checkbox-checked, + .mat-pseudo-checkbox-indeterminate { + &.mat-pseudo-checkbox-disabled { + background: $disabled-color; + } + } +} + + + +// Represents a typography level from the Material design spec. +@function mat-typography-level( + $font-size, + $line-height: $font-size, + $font-weight: 400, + $font-family: null, + $letter-spacing: null) { + + @return ( + font-size: $font-size, + line-height: $line-height, + font-weight: $font-weight, + font-family: $font-family, + letter-spacing: $letter-spacing + ); +} + +// Represents a collection of typography levels. +// Defaults come from https://material.io/guidelines/style/typography.html +// Note: The spec doesn't mention letter spacing. The values here come from +// eyeballing it until it looked exactly like the spec examples. +@function mat-typography-config( + $font-family: 'Roboto, "Helvetica Neue", sans-serif', + $display-4: mat-typography-level(112px, 112px, 300, $letter-spacing: -0.05em), + $display-3: mat-typography-level(56px, 56px, 400, $letter-spacing: -0.02em), + $display-2: mat-typography-level(45px, 48px, 400, $letter-spacing: -0.005em), + $display-1: mat-typography-level(34px, 40px, 400), + $headline: mat-typography-level(24px, 32px, 400), + $title: mat-typography-level(20px, 32px, 500), + $subheading-2: mat-typography-level(16px, 28px, 400), + $subheading-1: mat-typography-level(15px, 24px, 400), + $body-2: mat-typography-level(14px, 24px, 500), + $body-1: mat-typography-level(14px, 20px, 400), + $caption: mat-typography-level(12px, 20px, 400), + $button: mat-typography-level(14px, 14px, 500), + // Line-height must be unit-less fraction of the font-size. + $input: mat-typography-level(inherit, 1.125, 400) +) { + + // Declare an initial map with all of the levels. + $config: ( + display-4: $display-4, + display-3: $display-3, + display-2: $display-2, + display-1: $display-1, + headline: $headline, + title: $title, + subheading-2: $subheading-2, + subheading-1: $subheading-1, + body-2: $body-2, + body-1: $body-1, + caption: $caption, + button: $button, + input: $input, + ); + + // Loop through the levels and set the `font-family` of the ones that don't have one to the base. + // Note that Sass can't modify maps in place, which means that we need to merge and re-assign. + @each $key, $level in $config { + @if map-get($level, font-family) == null { + $new-level: map-merge($level, (font-family: $font-family)); + $config: map-merge($config, ($key: $new-level)); + } + } + + // Add the base font family to the config. + @return map-merge($config, (font-family: $font-family)); +} + +// Adds the base typography styles, based on a config. +@mixin mat-base-typography($config, $selector: '.mat-typography') { + .mat-h1, .mat-headline, #{$selector} h1 { + @include mat-typography-level-to-styles($config, headline); + margin: 0 0 16px; + } + + .mat-h2, .mat-title, #{$selector} h2 { + @include mat-typography-level-to-styles($config, title); + margin: 0 0 16px; + } + + .mat-h3, .mat-subheading-2, #{$selector} h3 { + @include mat-typography-level-to-styles($config, subheading-2); + margin: 0 0 16px; + } + + .mat-h4, .mat-subheading-1, #{$selector} h4 { + @include mat-typography-level-to-styles($config, subheading-1); + margin: 0 0 16px; + } + + // Note: the spec doesn't have anything that would correspond to h5 and h6, but we add these for + // consistency. The font sizes come from the Chrome user agent styles which have h5 at 0.83em + // and h6 at 0.67em. + .mat-h5, #{$selector} h5 { + @include mat-typography-font-shorthand( + // calc is used here to support css variables + calc(#{mat-font-size($config, body-1)} * 0.83), + mat-font-weight($config, body-1), + mat-line-height($config, body-1), + mat-font-family($config, body-1) + ); + + margin: 0 0 12px; + } + + .mat-h6, #{$selector} h6 { + @include mat-typography-font-shorthand( + // calc is used here to support css variables + calc(#{mat-font-size($config, body-1)} * 0.67), + mat-font-weight($config, body-1), + mat-line-height($config, body-1), + mat-font-family($config, body-1) + ); + + margin: 0 0 12px; + } + + .mat-body-strong, .mat-body-2 { + @include mat-typography-level-to-styles($config, body-2); + } + + .mat-body, .mat-body-1, #{$selector} { + @include mat-typography-level-to-styles($config, body-1); + + p { + margin: 0 0 12px; + } + } + + .mat-small, .mat-caption { + @include mat-typography-level-to-styles($config, caption); + } + + .mat-display-4, #{$selector} .mat-display-4 { + @include mat-typography-level-to-styles($config, display-4); + margin: 0 0 56px; + } + + .mat-display-3, #{$selector} .mat-display-3 { + @include mat-typography-level-to-styles($config, display-3); + margin: 0 0 64px; + } + + .mat-display-2, #{$selector} .mat-display-2 { + @include mat-typography-level-to-styles($config, display-2); + margin: 0 0 64px; + } + + .mat-display-1, #{$selector} .mat-display-1 { + @include mat-typography-level-to-styles($config, display-1); + margin: 0 0 64px; + } +} + + + + +@mixin mat-autocomplete-theme($theme) { + $foreground: map-get($theme, foreground); + $background: map-get($theme, background); + + .mat-autocomplete-panel { + @include _mat-theme-overridable-elevation(4, $theme); + background: mat-color($background, card); + color: mat-color($foreground, text); + + // Selected options in autocompletes should not be gray, but we + // only want to override the background for selected options if + // they are *not* in hover or focus state. This change has to be + // made here because base option styles are shared between the + // autocomplete and the select. + .mat-option.mat-selected:not(.mat-active):not(:hover) { + background: mat-color($background, card); + + &:not(.mat-option-disabled) { + color: mat-color($foreground, text); + } + } + } + +} + +@mixin mat-autocomplete-typography($config) { } + +// This contains all of the styles for the badge +// rather than just the color/theme because of +// no style sheet support for directives. + + + + + +$mat-badge-font-size: 12px; +$mat-badge-font-weight: 600; +$mat-badge-default-size: 22px !default; +$mat-badge-small-size: $mat-badge-default-size - 6; +$mat-badge-large-size: $mat-badge-default-size + 6; + +// Mixin for building offset given different sizes +@mixin _mat-badge-size($size) { + .mat-badge-content { + width: $size; + height: $size; + line-height: $size; + } + + &.mat-badge-above { + .mat-badge-content { + top: -$size / 2; + } + } + + &.mat-badge-below { + .mat-badge-content { + bottom: -$size / 2; + } + } + + &.mat-badge-before { + .mat-badge-content { + left: -$size; + } + } + + [dir='rtl'] &.mat-badge-before { + .mat-badge-content { + left: auto; + right: -$size; + } + } + + &.mat-badge-after { + .mat-badge-content { + right: -$size; + } + } + + [dir='rtl'] &.mat-badge-after { + .mat-badge-content { + right: auto; + left: -$size; + } + } + + &.mat-badge-overlap { + &.mat-badge-before { + .mat-badge-content { + left: -$size / 2; + } + } + + [dir='rtl'] &.mat-badge-before { + .mat-badge-content { + left: auto; + right: -$size / 2; + } + } + + &.mat-badge-after { + .mat-badge-content { + right: -$size / 2; + } + } + + [dir='rtl'] &.mat-badge-after { + .mat-badge-content { + right: auto; + left: -$size / 2; + } + } + } +} + +@mixin mat-badge-theme($theme) { + $accent: map-get($theme, accent); + $warn: map-get($theme, warn); + $primary: map-get($theme, primary); + $background: map-get($theme, background); + $foreground: map-get($theme, foreground); + + .mat-badge-content { + color: mat-color($primary, default-contrast); + background: mat-color($primary); + + @include cdk-high-contrast { + outline: solid 1px; + border-radius: 0; + } + } + + .mat-badge-accent { + .mat-badge-content { + background: mat-color($accent); + color: mat-color($accent, default-contrast); + } + } + + .mat-badge-warn { + .mat-badge-content { + color: mat-color($warn, default-contrast); + background: mat-color($warn); + } + } + + .mat-badge { + position: relative; + } + + .mat-badge-hidden { + .mat-badge-content { + display: none; + } + } + + .mat-badge-disabled { + .mat-badge-content { + $app-background: mat-color($background, 'background'); + $badge-color: mat-color($foreground, disabled-button); + + // The disabled color usually has some kind of opacity, but because the badge is overlayed + // on top of something else, it won't look good if it's opaque. If it is a color *type*, + // we convert it into a solid color by taking the opacity from the rgba value and using + // the value to determine the percentage of the background to put into foreground when + // mixing the colors together. + @if (type-of($badge-color) == color and type-of($app-background) == color) { + $badge-opacity: opacity($badge-color); + background: mix($app-background, rgba($badge-color, 1), (1 - $badge-opacity) * 100%); + } + @else { + background: $badge-color; + } + + color: mat-color($foreground, disabled-text); + } + } + + .mat-badge-content { + position: absolute; + text-align: center; + display: inline-block; + border-radius: 50%; + transition: transform 200ms ease-in-out; + transform: scale(0.6); + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; + pointer-events: none; + } + + .ng-animate-disabled .mat-badge-content, + .mat-badge-content._mat-animation-noopable { + transition: none; + } + + // The active class is added after the element is added + // so it can animate scale to default + .mat-badge-content.mat-badge-active { + // Scale to `none` instead of `1` to avoid blurry text in some browsers. + transform: none; + } + + .mat-badge-small { + @include _mat-badge-size($mat-badge-small-size); + } + .mat-badge-medium { + @include _mat-badge-size($mat-badge-default-size); + } + .mat-badge-large { + @include _mat-badge-size($mat-badge-large-size); + } +} + +@mixin mat-badge-typography($config) { + .mat-badge-content { + font-weight: $mat-badge-font-weight; + font-size: $mat-badge-font-size; + font-family: mat-font-family($config); + } + + .mat-badge-small .mat-badge-content { + // Set the font size to 75% of the original. + font-size: $mat-badge-font-size * 0.75; + } + + .mat-badge-large .mat-badge-content { + font-size: $mat-badge-font-size * 2; + } +} + + + + + +@mixin mat-bottom-sheet-theme($theme) { + $background: map-get($theme, background); + $foreground: map-get($theme, foreground); + + .mat-bottom-sheet-container { + @include _mat-theme-elevation(16, $theme); + background: mat-color($background, dialog); + color: mat-color($foreground, text); + } +} + +@mixin mat-bottom-sheet-typography($config) { + .mat-bottom-sheet-container { + @include mat-typography-level-to-styles($config, body-1); + } +} + + + + + +$_mat-button-ripple-opacity: 0.1; + +// Applies a focus style to an mat-button element for each of the supported palettes. +@mixin _mat-button-focus-overlay-color($theme) { + $primary: map-get($theme, primary); + $accent: map-get($theme, accent); + $warn: map-get($theme, warn); + + &.mat-primary .mat-button-focus-overlay { + background-color: mat-color($primary); + } + + &.mat-accent .mat-button-focus-overlay { + background-color: mat-color($accent); + } + + &.mat-warn .mat-button-focus-overlay { + background-color: mat-color($warn); + } + + &[disabled] .mat-button-focus-overlay { + background-color: transparent; + } +} + +// Applies the background color for a ripple. If the value provided is not a Sass color, +// we assume that we've been given a CSS variable. Since we can't perform alpha-blending +// on a CSS variable, we instead add the opacity directly to the ripple element. +@mixin _mat-button-ripple-background($palette, $hue, $opacity) { + $background-color: mat-color($palette, $hue, $opacity); + background-color: $background-color; + @if (type-of($background-color) != color) { + opacity: $opacity; + } +} + +@mixin _mat-button-ripple-color($theme, $hue, $opacity: $_mat-button-ripple-opacity) { + $primary: map-get($theme, primary); + $accent: map-get($theme, accent); + $warn: map-get($theme, warn); + + &.mat-primary .mat-ripple-element { + @include _mat-button-ripple-background($primary, $hue, $opacity); + } + + &.mat-accent .mat-ripple-element { + @include _mat-button-ripple-background($accent, $hue, $opacity); + } + + &.mat-warn .mat-ripple-element { + @include _mat-button-ripple-background($warn, $hue, $opacity); + } +} + +// Applies a property to an mat-button element for each of the supported palettes. +@mixin _mat-button-theme-property($theme, $property, $hue) { + $primary: map-get($theme, primary); + $accent: map-get($theme, accent); + $warn: map-get($theme, warn); + $background: map-get($theme, background); + $foreground: map-get($theme, foreground); + + &.mat-primary { + #{$property}: mat-color($primary, $hue); + } + &.mat-accent { + #{$property}: mat-color($accent, $hue); + } + &.mat-warn { + #{$property}: mat-color($warn, $hue); + } + + &.mat-primary, &.mat-accent, &.mat-warn, &[disabled] { + &[disabled] { + $palette: if($property == 'color', $foreground, $background); + #{$property}: mat-color($palette, disabled-button); + } + } +} + +@mixin mat-button-theme($theme) { + $primary: map-get($theme, primary); + $accent: map-get($theme, accent); + $warn: map-get($theme, warn); + $background: map-get($theme, background); + $foreground: map-get($theme, foreground); + + .mat-button, .mat-icon-button, .mat-stroked-button { + // Buttons without a background color should inherit the font color. This is necessary to + // ensure that the button is readable on custom background colors. It's wrong to always assume + // that those buttons are always placed inside of containers with the default background + // color of the theme (e.g. themed toolbars). + color: inherit; + background: transparent; + + @include _mat-button-theme-property($theme, 'color', text); + @include _mat-button-focus-overlay-color($theme); + + // Setup the ripple color to be based on the text color. This ensures that the ripples + // are matching with the current theme palette and are in contrast to the background color + // (e.g in themed toolbars). + .mat-ripple-element { + opacity: $_mat-button-ripple-opacity; + background-color: currentColor; + } + } + + .mat-button-focus-overlay { + background: map_get($foreground, base); + } + + // Note: this needs a bit extra specificity, because we're not guaranteed the inclusion + // order of the theme styles and the button reset may end up resetting this as well. + .mat-stroked-button:not([disabled]) { + border-color: mat-color($foreground, divider); + } + + .mat-flat-button, .mat-raised-button, .mat-fab, .mat-mini-fab { + // Default font and background color when not using any color palette. + color: mat-color($foreground, text); + background-color: mat-color($background, raised-button); + + @include _mat-button-theme-property($theme, 'color', default-contrast); + @include _mat-button-theme-property($theme, 'background-color', default); + @include _mat-button-ripple-color($theme, default-contrast); + } + + .mat-stroked-button, .mat-flat-button { + @include _mat-theme-overridable-elevation(0, $theme); + } + + .mat-raised-button { + @include _mat-theme-overridable-elevation(2, $theme); + + &:not([disabled]):active { + @include _mat-theme-overridable-elevation(8, $theme); + } + + &[disabled] { + @include _mat-theme-overridable-elevation(0, $theme); + } + } + + .mat-fab, .mat-mini-fab { + @include _mat-theme-overridable-elevation(6, $theme); + + &:not([disabled]):active { + @include _mat-theme-overridable-elevation(12, $theme); + } + + &[disabled] { + @include _mat-theme-overridable-elevation(0, $theme); + } + } +} + +@mixin mat-button-typography($config) { + .mat-button, .mat-raised-button, .mat-icon-button, .mat-stroked-button, + .mat-flat-button, .mat-fab, .mat-mini-fab { + font: { + family: mat-font-family($config, button); + size: mat-font-size($config, button); + weight: mat-font-weight($config, button); + } + } +} + + + + + + +@mixin mat-button-toggle-theme($theme) { + $foreground: map-get($theme, foreground); + $background: map-get($theme, background); + $divider-color: mat-color($foreground, divider); + + .mat-button-toggle-standalone, + .mat-button-toggle-group { + @include _mat-theme-elevation(2, $theme); + } + + .mat-button-toggle-standalone.mat-button-toggle-appearance-standard, + .mat-button-toggle-group-appearance-standard { + box-shadow: none; + } + + .mat-button-toggle { + color: mat-color($foreground, hint-text); + + .mat-button-toggle-focus-overlay { + background-color: mat-color($background, focused-button); + } + } + + .mat-button-toggle-appearance-standard { + color: mat-color($foreground, text); + background: mat-color($background, card); + + .mat-button-toggle-focus-overlay { + background-color: mat-color($background, focused-button, 1); + } + } + + .mat-button-toggle-group-appearance-standard .mat-button-toggle + .mat-button-toggle { + border-left: solid 1px $divider-color; + } + + [dir='rtl'] .mat-button-toggle-group-appearance-standard .mat-button-toggle + .mat-button-toggle { + border-left: none; + border-right: solid 1px $divider-color; + } + + .mat-button-toggle-group-appearance-standard.mat-button-toggle-vertical { + .mat-button-toggle + .mat-button-toggle { + border-left: none; + border-right: none; + border-top: solid 1px $divider-color; + } + } + + .mat-button-toggle-checked { + background-color: mat-color($background, selected-button); + color: mat-color($foreground, secondary-text); + + &.mat-button-toggle-appearance-standard { + color: mat-color($foreground, text); + } + } + + .mat-button-toggle-disabled { + color: mat-color($foreground, disabled-button); + background-color: mat-color($background, disabled-button-toggle); + + &.mat-button-toggle-appearance-standard { + background: mat-color($background, card); + } + + &.mat-button-toggle-checked { + background-color: mat-color($background, selected-disabled-button); + } + } + + .mat-button-toggle-standalone.mat-button-toggle-appearance-standard, + .mat-button-toggle-group-appearance-standard { + border: solid 1px $divider-color; + } +} + +@mixin mat-button-toggle-typography($config) { + .mat-button-toggle { + font-family: mat-font-family($config); + } +} + + + + + + + +@mixin mat-card-theme($theme) { + $background: map-get($theme, background); + $foreground: map-get($theme, foreground); + + .mat-card { + @include _mat-theme-overridable-elevation(1, $theme); + background: mat-color($background, card); + color: mat-color($foreground, text); + + // Needs extra specificity to be able to override the elevation selectors. + &.mat-card-flat { + @include _mat-theme-overridable-elevation(0, $theme); + } + } + + .mat-card-subtitle { + color: mat-color($foreground, secondary-text); + } +} + +@mixin mat-card-typography($config) { + .mat-card { + font-family: mat-font-family($config); + } + + .mat-card-title { + font: { + size: mat-font-size($config, headline); + weight: mat-font-weight($config, title); + } + } + + .mat-card-header .mat-card-title { + font-size: mat-font-size($config, title); + } + + .mat-card-subtitle, + .mat-card-content { + font-size: mat-font-size($config, body-1); + } +} + + + + + + +@mixin mat-checkbox-theme($theme) { + $is-dark-theme: map-get($theme, is-dark); + $primary: map-get($theme, primary); + $accent: map-get($theme, accent); + $warn: map-get($theme, warn); + $background: map-get($theme, background); + $foreground: map-get($theme, foreground); + + + // The color of the checkbox's checkmark / mixedmark. + $checkbox-mark-color: mat-color($background, background); + + // NOTE(traviskaufman): While the spec calls for translucent blacks/whites for disabled colors, + // this does not work well with elements layered on top of one another. To get around this we + // blend the colors together based on the base color and the theme background. + $white-30pct-opacity-on-dark: #686868; + $black-26pct-opacity-on-light: #b0b0b0; + $disabled-color: if($is-dark-theme, $white-30pct-opacity-on-dark, $black-26pct-opacity-on-light); + + .mat-checkbox-frame { + border-color: mat-color($foreground, secondary-text); + } + + .mat-checkbox-checkmark { + fill: $checkbox-mark-color; + } + + .mat-checkbox-checkmark-path { + // !important is needed here because a stroke must be set as an + // attribute on the SVG in order for line animation to work properly. + stroke: $checkbox-mark-color !important; + + @include cdk-high-contrast(black-on-white) { + // Having the one above be !important ends up overriding the browser's automatic + // color inversion so we need to re-invert it ourselves for black-on-white. + stroke: #000 !important; + } + } + + .mat-checkbox-mixedmark { + background-color: $checkbox-mark-color; + } + + .mat-checkbox-indeterminate, .mat-checkbox-checked { + &.mat-primary .mat-checkbox-background { + background-color: mat-color($primary); + } + + &.mat-accent .mat-checkbox-background { + background-color: mat-color($accent); + } + + &.mat-warn .mat-checkbox-background { + background-color: mat-color($warn); + } + } + + .mat-checkbox-disabled { + &.mat-checkbox-checked, + &.mat-checkbox-indeterminate { + .mat-checkbox-background { + background-color: $disabled-color; + } + } + + &:not(.mat-checkbox-checked) { + .mat-checkbox-frame { + border-color: $disabled-color; + } + } + + .mat-checkbox-label { + color: mat-color($foreground, secondary-text); + } + + @include cdk-high-contrast { + opacity: 0.5; + } + } + + // This one is moved down here so it can target both + // the theme colors and the disabled state. + @include cdk-high-contrast { + .mat-checkbox-background { + // Needs to be removed because it hides the checkbox outline. + background: none; + } + } + + // Switch this to a solid color since we're using `opacity` + // to control how opaque the ripple should be. + .mat-checkbox .mat-ripple-element { + background-color: map_get(map-get($theme, foreground), base); + } + + .mat-checkbox-checked:not(.mat-checkbox-disabled), + .mat-checkbox:active:not(.mat-checkbox-disabled) { + &.mat-primary .mat-ripple-element { + background: mat-color($primary); + } + + &.mat-accent .mat-ripple-element { + background: mat-color($accent); + } + + &.mat-warn .mat-ripple-element { + background: mat-color($warn); + } + } +} + +@mixin mat-checkbox-typography($config) { + .mat-checkbox { + font-family: mat-font-family($config); + } + + // TODO(kara): Remove this style when fixing vertical baseline + .mat-checkbox-layout .mat-checkbox-label { + line-height: mat-line-height($config, body-2); + } +} + + + + + + +$mat-chip-remove-font-size: 18px; + +@mixin mat-chips-color($foreground, $background) { + background-color: $background; + color: $foreground; + + .mat-chip-remove { + color: $foreground; + opacity: 0.4; + } +} + +@mixin mat-chips-theme-color($palette) { + @include mat-chips-color(mat-color($palette, default-contrast), mat-color($palette)); + + .mat-ripple-element { + background: mat-color($palette, default-contrast, 0.1); + } +} + +@mixin mat-chips-theme($theme) { + $is-dark-theme: map-get($theme, is-dark); + $primary: map-get($theme, primary); + $accent: map-get($theme, accent); + $warn: map-get($theme, warn); + $background: map-get($theme, background); + $foreground: map-get($theme, foreground); + + $unselected-background: mat-color($background, unselected-chip); + $unselected-foreground: mat-color($foreground, text); + + .mat-chip.mat-standard-chip { + @include mat-chips-color($unselected-foreground, $unselected-background); + + &:not(.mat-chip-disabled) { + &:active { + @include _mat-theme-elevation(3, $theme); + } + + .mat-chip-remove:hover { + opacity: 0.54; + } + } + + &.mat-chip-disabled { + opacity: 0.4; + } + + &::after { + background: map_get($foreground, base); + } + } + + .mat-chip.mat-standard-chip.mat-chip-selected { + &.mat-primary { + @include mat-chips-theme-color($primary); + } + + &.mat-warn { + @include mat-chips-theme-color($warn); + } + + &.mat-accent { + @include mat-chips-theme-color($accent); + } + } +} + +@mixin mat-chips-typography($config) { + .mat-chip { + font-size: mat-font-size($config, body-2); + font-weight: mat-font-weight($config, body-2); + + .mat-chip-trailing-icon.mat-icon, + .mat-chip-remove.mat-icon { + font-size: $mat-chip-remove-font-size; + } + } +} + + + + + +@mixin mat-table-theme($theme) { + $background: map-get($theme, background); + $foreground: map-get($theme, foreground); + + .mat-table { + background: mat-color($background, 'card'); + } + + .mat-table thead, .mat-table tbody, .mat-table tfoot, + mat-header-row, mat-row, mat-footer-row, + [mat-header-row], [mat-row], [mat-footer-row], + .mat-table-sticky { + background: inherit; + } + + mat-row, mat-header-row, mat-footer-row, + th.mat-header-cell, td.mat-cell, td.mat-footer-cell { + border-bottom-color: mat-color($foreground, divider); + } + + .mat-header-cell { + color: mat-color($foreground, secondary-text); + } + + .mat-cell, .mat-footer-cell { + color: mat-color($foreground, text); + } +} + +@mixin mat-table-typography($config) { + .mat-table { + font-family: mat-font-family($config); + } + + .mat-header-cell { + font-size: mat-font-size($config, caption); + font-weight: mat-font-weight($config, body-2); + } + + .mat-cell, .mat-footer-cell { + font-size: mat-font-size($config, body-1); + } +} + + + + + + + +$mat-datepicker-selected-today-box-shadow-width: 1px; +$mat-datepicker-selected-fade-amount: 0.6; +$mat-datepicker-today-fade-amount: 0.2; +$mat-calendar-body-font-size: 13px !default; +$mat-calendar-weekday-table-font-size: 11px !default; + +@mixin _mat-datepicker-color($palette) { + .mat-calendar-body-selected { + background-color: mat-color($palette); + color: mat-color($palette, default-contrast); + } + + .mat-calendar-body-disabled > .mat-calendar-body-selected { + $background: mat-color($palette); + + @if (type-of($background) == color) { + background-color: fade-out($background, $mat-datepicker-selected-fade-amount); + } + @else { + // If we couldn't resolve to background to a color (e.g. it's a CSS variable), + // fall back to fading the content out via `opacity`. + opacity: $mat-datepicker-today-fade-amount; + } + } + + .mat-calendar-body-today.mat-calendar-body-selected { + box-shadow: inset 0 0 0 $mat-datepicker-selected-today-box-shadow-width + mat-color($palette, default-contrast); + } +} + +@mixin mat-datepicker-theme($theme) { + $foreground: map-get($theme, foreground); + $background: map-get($theme, background); + + .mat-calendar-arrow { + border-top-color: mat-color($foreground, icon); + } + + // The prev/next buttons need a bit more specificity to + // avoid being overwritten by the .mat-icon-button. + .mat-datepicker-toggle, + .mat-datepicker-content .mat-calendar-next-button, + .mat-datepicker-content .mat-calendar-previous-button { + color: mat-color($foreground, icon); + } + + .mat-calendar-table-header { + color: mat-color($foreground, hint-text); + } + + .mat-calendar-table-header-divider::after { + background: mat-color($foreground, divider); + } + + .mat-calendar-body-label { + color: mat-color($foreground, secondary-text); + } + + .mat-calendar-body-cell-content { + color: mat-color($foreground, text); + border-color: transparent; + } + + .mat-calendar-body-disabled > .mat-calendar-body-cell-content:not(.mat-calendar-body-selected) { + color: mat-color($foreground, disabled-text); + } + + .mat-calendar-body-cell:not(.mat-calendar-body-disabled):hover, + .cdk-keyboard-focused .mat-calendar-body-active, + .cdk-program-focused .mat-calendar-body-active { + & > .mat-calendar-body-cell-content:not(.mat-calendar-body-selected) { + background-color: mat-color($background, hover); + } + } + + .mat-calendar-body-today:not(.mat-calendar-body-selected) { + // Note: though it's not text, the border is a hint about the fact that this is today's date, + // so we use the hint color. + border-color: mat-color($foreground, hint-text); + } + + .mat-calendar-body-disabled > .mat-calendar-body-today:not(.mat-calendar-body-selected) { + $color: mat-color($foreground, hint-text); + + @if (type-of($color) == color) { + border-color: fade-out($color, $mat-datepicker-today-fade-amount); + } + @else { + // If the color didn't resolve to a color value, but something like a CSS variable, we can't + // fade it out so we fall back to reducing the element opacity. Note that we don't use the + // $mat-datepicker-today-fade-amount, because hint text usually has some opacity applied + // to it already and we don't want them to stack on top of each other. + opacity: 0.5; + } + } + + @include _mat-datepicker-color(map-get($theme, primary)); + + .mat-datepicker-content { + @include _mat-theme-elevation(4, $theme); + background-color: mat-color($background, card); + color: mat-color($foreground, text); + + &.mat-accent { + @include _mat-datepicker-color(map-get($theme, accent)); + } + + &.mat-warn { + @include _mat-datepicker-color(map-get($theme, warn)); + } + } + + .mat-datepicker-content-touch { + @include _mat-theme-elevation(0, $theme); + } + + .mat-datepicker-toggle-active { + color: mat-color(map-get($theme, primary), text); + + &.mat-accent { + color: mat-color(map-get($theme, accent), text); + } + + &.mat-warn { + color: mat-color(map-get($theme, warn), text); + } + } +} + +@mixin mat-datepicker-typography($config) { + .mat-calendar { + font-family: mat-font-family($config); + } + + .mat-calendar-body { + font-size: $mat-calendar-body-font-size; + } + + .mat-calendar-body-label, + .mat-calendar-period-button { + font: { + size: mat-font-size($config, button); + weight: mat-font-weight($config, button); + } + } + + .mat-calendar-table-header th { + font: { + size: $mat-calendar-weekday-table-font-size; + weight: mat-font-weight($config, body-1); + } + } +} + + + + + + + +@mixin mat-dialog-theme($theme) { + $background: map-get($theme, background); + $foreground: map-get($theme, foreground); + + .mat-dialog-container { + @include _mat-theme-elevation(24, $theme); + background: mat-color($background, dialog); + color: mat-color($foreground, text); + } +} + +@mixin mat-dialog-typography($config) { + .mat-dialog-title { + @include mat-typography-level-to-styles($config, title); + } +} + + + + + + +@mixin mat-expansion-panel-theme($theme) { + $background: map-get($theme, background); + $foreground: map-get($theme, foreground); + + .mat-expansion-panel { + @include _mat-theme-overridable-elevation(2, $theme); + background: mat-color($background, card); + color: mat-color($foreground, text); + } + + .mat-action-row { + border-top-color: mat-color($foreground, divider); + } + + .mat-expansion-panel { + & .mat-expansion-panel-header.cdk-keyboard-focused, + & .mat-expansion-panel-header.cdk-program-focused, + &:not(.mat-expanded) .mat-expansion-panel-header:hover { + &:not([aria-disabled='true']) { + background: mat-color($background, hover); + } + } + } + + // Disable the hover on touch devices since it can appear like it is stuck. We can't use + // `@media (hover)` above, because the desktop support browser support isn't great. + @media (hover: none) { + .mat-expansion-panel:not(.mat-expanded):not([aria-disabled='true']) + .mat-expansion-panel-header:hover { + background: mat-color($background, card); + } + } + + .mat-expansion-panel-header-title { + color: mat-color($foreground, text); + } + + .mat-expansion-panel-header-description, + .mat-expansion-indicator::after { + color: mat-color($foreground, secondary-text); + } + + .mat-expansion-panel-header[aria-disabled='true'] { + color: mat-color($foreground, disabled-button); + + .mat-expansion-panel-header-title, + .mat-expansion-panel-header-description { + color: inherit; + } + } +} + +@mixin mat-expansion-panel-typography($config) { + .mat-expansion-panel-header { + font: { + family: mat-font-family($config, subheading-1); + size: mat-font-size($config, subheading-1); + weight: mat-font-weight($config, subheading-1); + } + } + + .mat-expansion-panel-content { + @include mat-typography-level-to-styles($config, body-1); + } +} + + + + +// This mixin will ensure that lines that overflow the container will hide the overflow and +// truncate neatly with an ellipsis. +@mixin mat-truncate-line() { + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; +} + +// Mixin to provide all mat-line styles, changing secondary font size based on whether the list +// is in dense mode. +@mixin mat-line-base($secondary-font-size) { + .mat-line { + @include mat-truncate-line(); + display: block; + box-sizing: border-box; + + // all lines but the top line should have smaller text + &:nth-child(n+2) { + font-size: $secondary-font-size; + } + } +} + +// This mixin normalizes default element styles, e.g. font weight for heading text. +@mixin mat-normalize-text() { + & > * { + margin: 0; + padding: 0; + font-weight: normal; + font-size: inherit; + } +} + +// This mixin provides base styles for the wrapper around mat-line elements in a list. +@mixin mat-line-wrapper-base() { + @include mat-normalize-text(); + + display: flex; + flex-direction: column; + width: 100%; + box-sizing: border-box; + overflow: hidden; + + // Must remove wrapper when lines are empty or it takes up horizontal + // space and pushes other elements to the right. + &:empty { + display: none; + } +} + + + +// Include this empty mixin for consistency with the other components. +@mixin mat-grid-list-theme($theme) { } + +@mixin mat-grid-list-typography($config) { + .mat-grid-tile-header, + .mat-grid-tile-footer { + @include mat-line-base(mat-font-size($config, caption)); + font-size: mat-font-size($config, body-1); + } +} + + + + +// Include this empty mixin for consistency with the other components. +@mixin mat-icon-theme($theme) { + $primary: map-get($theme, primary); + $accent: map-get($theme, accent); + $warn: map-get($theme, warn); + $background: map-get($theme, background); + $foreground: map-get($theme, foreground); + + .mat-icon { + &.mat-primary { + color: mat-color($primary, text); + } + + &.mat-accent { + color: mat-color($accent, text); + } + + &.mat-warn { + color: mat-color($warn, text); + } + } +} + +@mixin mat-icon-typography($config) { } + + + + + +// Renders a gradient for showing the dashed line when the input is disabled. +// Unlike using a border, a gradient allows us to adjust the spacing of the dotted line +// to match the Material Design spec. +@mixin mat-control-disabled-underline($color) { + background-image: linear-gradient(to right, $color 0%, $color 33%, transparent 0%); + background-size: 4px 100%; + background-repeat: repeat-x; +} + +// Figures out the color of the placeholder for a form control. +// Used primarily to prevent the various form controls from +// becoming out of sync since these colors aren't in a palette. +@function _mat-control-placeholder-color($theme) { + $foreground: map-get($theme, foreground); + $is-dark-theme: map-get($theme, is-dark); + @return mat-color($foreground, secondary-text, if($is-dark-theme, 0.5, 0.42)); +} + + +/* stylelint-disable material/no-prefixes */ +@mixin user-select($value) { + -webkit-user-select: $value; + -moz-user-select: $value; + -ms-user-select: $value; + user-select: $value; +} + +@mixin input-placeholder { + &::placeholder { + @content; + } + + &::-moz-placeholder { + @content; + } + + &::-webkit-input-placeholder { + @content; + } + + &:-ms-input-placeholder { + @content; + } +} + +@mixin cursor-grab { + cursor: -webkit-grab; + cursor: grab; +} + +@mixin cursor-grabbing { + cursor: -webkit-grabbing; + cursor: grabbing; +} + +@mixin backface-visibility($value) { + -webkit-backface-visibility: $value; + backface-visibility: $value; +} +/* stylelint-enable */ + + + +@mixin mat-input-theme($theme) { + $primary: map-get($theme, primary); + $accent: map-get($theme, accent); + $warn: map-get($theme, warn); + $foreground: map-get($theme, foreground); + + .mat-form-field-type-mat-native-select .mat-form-field-infix::after { + color: mat-color($foreground, secondary-text); + } + + .mat-input-element:disabled, + .mat-form-field-type-mat-native-select.mat-form-field-disabled .mat-form-field-infix::after { + color: mat-color($foreground, disabled-text); + } + + .mat-input-element { + caret-color: mat-color($primary, text); + + @include input-placeholder { + color: _mat-control-placeholder-color($theme); + } + + // On dark themes we set the native `select` color to some shade of white, + // however the color propagates to all of the `option` elements, which are + // always on a white background inside the dropdown, causing them to blend in. + // Since we can't change background of the dropdown, we need to explicitly + // reset the color of the options to something dark. + @if (map-get($theme, is-dark)) { + option { + color: $dark-primary-text; + } + + option:disabled { + color: $dark-disabled-text; + } + } + } + + .mat-accent .mat-input-element { + caret-color: mat-color($accent, text); + } + + .mat-warn .mat-input-element, + .mat-form-field-invalid .mat-input-element { + caret-color: mat-color($warn, text); + } + + .mat-form-field-type-mat-native-select.mat-form-field-invalid .mat-form-field-infix::after { + color: mat-color($warn, text); + } +} + +@mixin mat-input-typography($config) { + // The unit-less line-height from the font config. + $line-height: mat-line-height($config, input); + + // The amount of space between the top of the line and the top of the actual text + // (as a fraction of the font-size). + $line-spacing: ($line-height - 1) / 2; + + // elements seem to have their height set slightly too large on Safari causing the text to + // be misaligned w.r.t. the placeholder. Adding this margin corrects it. + input.mat-input-element { + margin-top: -$line-spacing * 1em; + } +} + + + + + + + +@mixin mat-list-theme($theme) { + $background: map-get($theme, background); + $foreground: map-get($theme, foreground); + + .mat-list-base { + .mat-list-item { + color: mat-color($foreground, text); + } + + .mat-list-option { + color: mat-color($foreground, text); + } + + .mat-subheader { + color: mat-color($foreground, secondary-text); + } + } + + .mat-list-item-disabled { + background-color: mat-color($background, disabled-list-option); + } + + .mat-list-option, + .mat-nav-list .mat-list-item, + .mat-action-list .mat-list-item { + &:hover, &:focus { + background: mat-color($background, 'hover'); + } + } +} + +@mixin mat-list-typography($config) { + $font-family: mat-font-family($config); + + .mat-list-item { + font-family: $font-family; + } + + .mat-list-option { + font-family: $font-family; + } + + // Default list + .mat-list-base { + .mat-list-item { + font-size: mat-font-size($config, subheading-2); + @include mat-line-base(mat-font-size($config, body-1)); + } + + .mat-list-option { + font-size: mat-font-size($config, subheading-2); + @include mat-line-base(mat-font-size($config, body-1)); + } + + .mat-subheader { + font-family: mat-font-family($config, body-2); + font-size: mat-font-size($config, body-2); + font-weight: mat-font-weight($config, body-2); + } + } + + // Dense list + .mat-list-base[dense] { + .mat-list-item { + font-size: mat-font-size($config, caption); + @include mat-line-base(mat-font-size($config, caption)); + } + + .mat-list-option { + font-size: mat-font-size($config, caption); + @include mat-line-base(mat-font-size($config, caption)); + } + + .mat-subheader { + font-family: $font-family; + font-size: mat-font-size($config, caption); + font-weight: mat-font-weight($config, body-2); + } + } +} + + + + + + + +@mixin mat-menu-theme($theme) { + $background: map-get($theme, background); + $foreground: map-get($theme, foreground); + + .mat-menu-panel { + @include _mat-theme-overridable-elevation(4, $theme); + background: mat-color($background, 'card'); + } + + .mat-menu-item { + background: transparent; + color: mat-color($foreground, 'text'); + + &[disabled] { + &, &::after { + color: mat-color($foreground, 'disabled'); + } + } + } + + .mat-menu-item .mat-icon-no-color, + .mat-menu-item-submenu-trigger::after { + color: mat-color($foreground, 'icon'); + } + + .mat-menu-item:hover, + .mat-menu-item.cdk-program-focused, + .mat-menu-item.cdk-keyboard-focused, + .mat-menu-item-highlighted { + &:not([disabled]) { + background: mat-color($background, 'hover'); + } + } +} + +@mixin mat-menu-typography($config) { + .mat-menu-item { + font: { + family: mat-font-family($config, body-1); + size: mat-font-size($config, body-1); + weight: mat-font-weight($config, body-1); + } + } +} + + + + + + +@mixin mat-paginator-theme($theme) { + $foreground: map-get($theme, foreground); + $background: map-get($theme, background); + + .mat-paginator { + background: mat-color($background, 'card'); + } + + .mat-paginator, + .mat-paginator-page-size .mat-select-trigger { + color: mat-color($foreground, secondary-text); + } + + .mat-paginator-decrement, + .mat-paginator-increment { + border-top: 2px solid mat-color($foreground, 'icon'); + border-right: 2px solid mat-color($foreground, 'icon'); + } + + .mat-paginator-first, + .mat-paginator-last { + border-top: 2px solid mat-color($foreground, 'icon'); + } + + .mat-icon-button[disabled] { + .mat-paginator-decrement, + .mat-paginator-increment, + .mat-paginator-first, + .mat-paginator-last { + border-color: mat-color($foreground, 'disabled'); + } + } +} + +@mixin mat-paginator-typography($config) { + .mat-paginator, + .mat-paginator-page-size .mat-select-trigger { + font: { + family: mat-font-family($config, caption); + size: mat-font-size($config, caption); + } + } +} + + + + + +@mixin mat-progress-bar-theme($theme) { + $primary: map-get($theme, primary); + $accent: map-get($theme, accent); + $warn: map-get($theme, warn); + + .mat-progress-bar-background { + fill: mat-color($primary, lighter); + } + + .mat-progress-bar-buffer { + background-color: mat-color($primary, lighter); + } + + .mat-progress-bar-fill::after { + background-color: mat-color($primary); + } + + .mat-progress-bar.mat-accent { + .mat-progress-bar-background { + fill: mat-color($accent, lighter); + } + + .mat-progress-bar-buffer { + background-color: mat-color($accent, lighter); + } + + .mat-progress-bar-fill::after { + background-color: mat-color($accent); + } + } + + .mat-progress-bar.mat-warn { + .mat-progress-bar-background { + fill: mat-color($warn, lighter); + } + + .mat-progress-bar-buffer { + background-color: mat-color($warn, lighter); + } + + .mat-progress-bar-fill::after { + background-color: mat-color($warn); + } + } +} + +@mixin mat-progress-bar-typography($config) { } + + + + + + +@mixin mat-progress-spinner-theme($theme) { + $primary: map-get($theme, primary); + $accent: map-get($theme, accent); + $warn: map-get($theme, warn); + + .mat-progress-spinner, .mat-spinner { + circle { + stroke: mat-color($primary); + } + + &.mat-accent circle { + stroke: mat-color($accent); + } + + &.mat-warn circle { + stroke: mat-color($warn); + } + } +} + +@mixin mat-progress-spinner-typography($config) { } + + + + + +@mixin _mat-radio-color($palette) { + &.mat-radio-checked .mat-radio-outer-circle { + border-color: mat-color($palette); + } + + .mat-radio-inner-circle, + .mat-radio-ripple .mat-ripple-element:not(.mat-radio-persistent-ripple), + &.mat-radio-checked .mat-radio-persistent-ripple, + &:active .mat-radio-persistent-ripple { + background-color: mat-color($palette); + } +} + +@mixin mat-radio-theme($theme) { + $primary: map-get($theme, primary); + $accent: map-get($theme, accent); + $warn: map-get($theme, warn); + $background: map-get($theme, background); + $foreground: map-get($theme, foreground); + + .mat-radio-outer-circle { + border-color: mat-color($foreground, secondary-text); + } + + .mat-radio-button { + &.mat-primary { + @include _mat-radio-color($primary); + } + + &.mat-accent { + @include _mat-radio-color($accent); + } + + &.mat-warn { + @include _mat-radio-color($warn); + } + + // This needs extra specificity, because the classes above are combined + // (e.g. `.mat-radio-button.mat-accent`) which increases their specificity a lot. + // TODO: consider making the selectors into descendants (`.mat-primary .mat-radio-button`). + &.mat-radio-disabled { + &.mat-radio-checked .mat-radio-outer-circle, + .mat-radio-outer-circle { + border-color: mat-color($foreground, disabled); + } + + .mat-radio-ripple .mat-ripple-element, + .mat-radio-inner-circle { + background-color: mat-color($foreground, disabled); + } + + .mat-radio-label-content { + color: mat-color($foreground, disabled); + } + } + + // Switch this to a solid color since we're using `opacity` + // to control how opaque the ripple should be. + .mat-ripple-element { + background-color: map_get($foreground, base); + } + } +} + +@mixin mat-radio-typography($config) { + .mat-radio-button { + font-family: mat-font-family($config); + } +} + + + + + + + + +@mixin mat-select-theme($theme) { + $foreground: map-get($theme, foreground); + $background: map-get($theme, background); + $primary: map-get($theme, primary); + $accent: map-get($theme, accent); + $warn: map-get($theme, warn); + + .mat-select-value { + color: mat-color($foreground, text); + } + + .mat-select-placeholder { + color: _mat-control-placeholder-color($theme); + } + + .mat-select-disabled .mat-select-value { + color: mat-color($foreground, disabled-text); + } + + .mat-select-arrow { + color: mat-color($foreground, secondary-text); + } + + .mat-select-panel { + background: mat-color($background, card); + @include _mat-theme-overridable-elevation(4, $theme); + + .mat-option.mat-selected:not(.mat-option-multiple) { + background: mat-color($background, hover, 0.12); + } + } + + .mat-form-field { + &.mat-focused { + &.mat-primary .mat-select-arrow { + color: mat-color($primary, text); + } + + &.mat-accent .mat-select-arrow { + color: mat-color($accent, text); + } + + &.mat-warn .mat-select-arrow { + color: mat-color($warn, text); + } + } + + .mat-select.mat-select-invalid .mat-select-arrow { + color: mat-color($warn, text); + } + + .mat-select.mat-select-disabled .mat-select-arrow { + color: mat-color($foreground, disabled-text); + } + } +} + +@mixin mat-select-typography($config) { + // The unit-less line-height from the font config. + $line-height: mat-line-height($config, input); + + .mat-select { + font-family: mat-font-family($config); + } + + .mat-select-trigger { + height: $line-height * 1em; + } +} + + + + + + +@mixin mat-sidenav-theme($theme) { + $primary: map-get($theme, primary); + $accent: map-get($theme, accent); + $warn: map-get($theme, warn); + $background: map-get($theme, background); + $foreground: map-get($theme, foreground); + + $drawer-background-color: mat-color($background, dialog); + $drawer-container-background-color: mat-color($background, background); + $drawer-push-background-color: mat-color($background, dialog); + $drawer-side-border: solid 1px mat-color($foreground, divider); + + .mat-drawer-container { + background-color: $drawer-container-background-color; + color: mat-color($foreground, text); + } + + .mat-drawer { + background-color: $drawer-background-color; + color: mat-color($foreground, text); + + &.mat-drawer-push { + background-color: $drawer-push-background-color; + } + + &:not(.mat-drawer-side) { + // The elevation of z-16 is noted in the design specifications. + // See https://material.io/design/components/navigation-drawer.html + @include _mat-theme-elevation(16, $theme); + } + } + + .mat-drawer-side { + border-right: $drawer-side-border; + + &.mat-drawer-end { + border-left: $drawer-side-border; + border-right: none; + } + } + + [dir='rtl'] .mat-drawer-side { + border-left: $drawer-side-border; + border-right: none; + + &.mat-drawer-end { + border-left: none; + border-right: $drawer-side-border; + } + } + + .mat-drawer-backdrop.mat-drawer-shown { + $opacity: 0.6; + $backdrop-color: mat-color($background, card, $opacity); + + @if (type-of($backdrop-color) == color) { + // We use invert() here to have the darken the background color expected to be used. If the + // background is light, we use a dark backdrop. If the background is dark, + // we use a light backdrop. + background-color: invert($backdrop-color); + } + @else { + // If we couldn't resolve the backdrop color to a color value, fall back to using + // `opacity` to make it opaque since its end value could be a solid color. + background-color: $backdrop-color; + opacity: $opacity; + } + } +} + +@mixin mat-sidenav-typography($config) { } + + + + + + +@mixin _mat-slide-toggle-checked($palette, $thumb-checked-hue) { + &.mat-checked { + .mat-slide-toggle-thumb { + background-color: mat-color($palette, $thumb-checked-hue); + } + + .mat-slide-toggle-bar { + // Opacity is determined from the specs for the selection controls. + // See: https://material.io/design/components/selection-controls.html#specs + background-color: mat-color($palette, $thumb-checked-hue, 0.54); + } + + .mat-ripple-element { + // Set no opacity for the ripples because the ripple opacity will be adjusted dynamically + // based on the type of interaction with the slide-toggle (e.g. for hover, focus) + background-color: mat-color($palette, $thumb-checked-hue); + } + } +} + +@mixin mat-slide-toggle-theme($theme) { + $is-dark: map_get($theme, is-dark); + $primary: map-get($theme, primary); + $accent: map-get($theme, accent); + $warn: map-get($theme, warn); + $background: map-get($theme, background); + $foreground: map-get($theme, foreground); + + // Color hues are based on the specs which briefly show the hues that are applied to a switch. + // The 2018 specs no longer describe how dark switches should look like. Due to the lack of + // information for dark themed switches, we partially keep the old behavior that is based on + // the previous specifications. For the checked color we always use the `default` hue because + // that follows MDC and also makes it easier for people to create a custom theme without needing + // to specify each hue individually. + $thumb-unchecked-hue: if($is-dark, 400, 50); + $thumb-checked-hue: default; + + $bar-unchecked-color: mat-color($foreground, disabled); + $ripple-unchecked-color: mat-color($foreground, base); + + .mat-slide-toggle { + @include _mat-slide-toggle-checked($accent, $thumb-checked-hue); + + &.mat-primary { + @include _mat-slide-toggle-checked($primary, $thumb-checked-hue); + } + + &.mat-warn { + @include _mat-slide-toggle-checked($warn, $thumb-checked-hue); + } + + &:not(.mat-checked) .mat-ripple-element { + // Set no opacity for the ripples because the ripple opacity will be adjusted dynamically + // based on the type of interaction with the slide-toggle (e.g. for hover, focus) + background-color: $ripple-unchecked-color; + } + } + + .mat-slide-toggle-thumb { + @include _mat-theme-elevation(1, $theme); + background-color: mat-color($mat-grey, $thumb-unchecked-hue); + } + + .mat-slide-toggle-bar { + background-color: $bar-unchecked-color; + } +} + +@mixin mat-slide-toggle-typography($config) { + .mat-slide-toggle-content { + font-family: mat-font-family($config); + } +} + + + + + +@mixin _mat-slider-inner-content-theme($palette) { + .mat-slider-track-fill, + .mat-slider-thumb, + .mat-slider-thumb-label { + background-color: mat-color($palette); + } + + .mat-slider-thumb-label-text { + color: mat-color($palette, default-contrast); + } +} + +@mixin mat-slider-theme($theme) { + $primary: map-get($theme, primary); + $accent: map-get($theme, accent); + $warn: map-get($theme, warn); + $background: map-get($theme, background); + $foreground: map-get($theme, foreground); + + $mat-slider-off-color: mat-color($foreground, slider-off); + $mat-slider-off-focused-color: mat-color($foreground, slider-off-active); + $mat-slider-disabled-color: mat-color($foreground, slider-off); + $mat-slider-labeled-min-value-thumb-color: mat-color($foreground, slider-min); + $mat-slider-labeled-min-value-thumb-label-color: mat-color($foreground, slider-off); + $mat-slider-focus-ring-color: mat-color($accent, default, 0.2); + $mat-slider-focus-ring-min-value-color: mat-color($foreground, base, 0.12); + $mat-slider-tick-color: mat-color($foreground, base, 0.7); + $mat-slider-tick-size: 2px; + + .mat-slider-track-background { + background-color: $mat-slider-off-color; + } + + .mat-primary { + @include _mat-slider-inner-content-theme($primary); + } + + .mat-accent { + @include _mat-slider-inner-content-theme($accent); + } + + .mat-warn { + @include _mat-slider-inner-content-theme($warn); + } + + .mat-slider-focus-ring { + background-color: $mat-slider-focus-ring-color; + } + + .mat-slider:hover, + .cdk-focused { + .mat-slider-track-background { + background-color: $mat-slider-off-focused-color; + } + } + + .mat-slider-disabled { + .mat-slider-track-background, + .mat-slider-track-fill, + .mat-slider-thumb { + background-color: $mat-slider-disabled-color; + } + + &:hover { + .mat-slider-track-background { + background-color: $mat-slider-disabled-color; + } + } + } + + .mat-slider-min-value { + .mat-slider-focus-ring { + background-color: $mat-slider-focus-ring-min-value-color; + } + + &.mat-slider-thumb-label-showing { + .mat-slider-thumb, + .mat-slider-thumb-label { + background-color: $mat-slider-labeled-min-value-thumb-color; + } + + &.cdk-focused { + .mat-slider-thumb, + .mat-slider-thumb-label { + background-color: $mat-slider-labeled-min-value-thumb-label-color; + } + } + } + + &:not(.mat-slider-thumb-label-showing) { + .mat-slider-thumb { + border-color: $mat-slider-off-color; + background-color: transparent; + } + + &:hover, + &.cdk-focused { + .mat-slider-thumb { + border-color: $mat-slider-off-focused-color; + } + + &.mat-slider-disabled .mat-slider-thumb { + border-color: $mat-slider-disabled-color; + } + } + } + } + + .mat-slider-has-ticks .mat-slider-wrapper::after { + border-color: $mat-slider-tick-color; + } + + .mat-slider-horizontal .mat-slider-ticks { + background-image: repeating-linear-gradient(to right, $mat-slider-tick-color, + $mat-slider-tick-color $mat-slider-tick-size, transparent 0, transparent); + // Firefox doesn't draw the gradient correctly with 'to right' + // (see https://bugzilla.mozilla.org/show_bug.cgi?id=1314319). + background-image: -moz-repeating-linear-gradient(0.0001deg, $mat-slider-tick-color, + $mat-slider-tick-color $mat-slider-tick-size, transparent 0, transparent); + } + + .mat-slider-vertical .mat-slider-ticks { + background-image: repeating-linear-gradient(to bottom, $mat-slider-tick-color, + $mat-slider-tick-color $mat-slider-tick-size, transparent 0, transparent); + } +} + +@mixin mat-slider-typography($config) { + .mat-slider-thumb-label-text { + font: { + family: mat-font-family($config); + size: mat-font-size($config, caption); + weight: mat-font-weight($config, body-2); + } + } +} + + + + + +@mixin mat-stepper-theme($theme) { + $foreground: map-get($theme, foreground); + $background: map-get($theme, background); + $primary: map-get($theme, primary); + $warn: map-get($theme, warn); + + .mat-step-header { + &.cdk-keyboard-focused, + &.cdk-program-focused, + &:hover { + background-color: mat-color($background, hover); + } + + // On touch devices the :hover state will linger on the element after a tap. + // Reset it via `@media` after the declaration, because the media query isn't + // supported by all browsers yet. + @media (hover: none) { + &:hover { + background: none; + } + } + + .mat-step-label, + .mat-step-optional { + // TODO(josephperrott): Update to using a corrected disabled-text contrast + // instead of secondary-text. + color: mat-color($foreground, secondary-text); + } + + .mat-step-icon { + // TODO(josephperrott): Update to using a corrected disabled-text contrast + // instead of secondary-text. + background-color: mat-color($foreground, secondary-text); + color: mat-color($primary, default-contrast); + } + + .mat-step-icon-selected, + .mat-step-icon-state-done, + .mat-step-icon-state-edit { + background-color: mat-color($primary); + color: mat-color($primary, default-contrast); + } + + .mat-step-icon-state-error { + background-color: transparent; + color: mat-color($warn, text); + } + + .mat-step-label.mat-step-label-active { + color: mat-color($foreground, text); + } + + .mat-step-label.mat-step-label-error { + color: mat-color($warn, text); + } + } + + .mat-stepper-horizontal, .mat-stepper-vertical { + background-color: mat-color($background, card); + } + + .mat-stepper-vertical-line::before { + border-left-color: mat-color($foreground, divider); + } + + .mat-horizontal-stepper-header::before, + .mat-horizontal-stepper-header::after, + .mat-stepper-horizontal-line { + border-top-color: mat-color($foreground, divider); + } +} + +@mixin mat-stepper-typography($config) { + .mat-stepper-vertical, .mat-stepper-horizontal { + font-family: mat-font-family($config); + } + + .mat-step-label { + font: { + size: mat-font-size($config, body-1); + weight: mat-font-weight($config, body-1); + }; + } + + .mat-step-sub-label-error { + font-weight: normal; + } + + .mat-step-label-error { + font-size: mat-font-size($config, body-2); + } + + .mat-step-label-selected { + font: { + size: mat-font-size($config, body-2); + weight: mat-font-weight($config, body-2); + }; + } +} + +@mixin mat-sort-theme($theme) { + $background: map-get($theme, background); + $foreground: map-get($theme, foreground); + + .mat-sort-header-arrow { + $table-background: mat-color($background, 'card'); + $text-color: mat-color($foreground, secondary-text); + + // Because the arrow is made up of multiple elements that are stacked on top of each other, + // we can't use the semi-trasparent color from the theme directly. If the value is a color + // *type*, we convert it into a solid color by taking the opacity from the rgba value and + // using the value to determine the percentage of the background to put into foreground + // when mixing the colors together. Otherwise, if it resolves to something different + // (e.g. it resolves to a CSS variable), we use the color directly. + @if (type-of($table-background) == color and type-of($text-color) == color) { + $text-opacity: opacity($text-color); + color: mix($table-background, rgba($text-color, 1), (1 - $text-opacity) * 100%); + } + @else { + color: $text-color; + } + } +} + +@mixin mat-sort-typography($config) { } + + + + + +@mixin mat-tabs-theme($theme) { + $primary: map-get($theme, primary); + $accent: map-get($theme, accent); + $warn: map-get($theme, warn); + $background: map-get($theme, background); + $foreground: map-get($theme, foreground); + $header-border: 1px solid mat-color($foreground, divider); + + .mat-tab-nav-bar, + .mat-tab-header { + border-bottom: $header-border; + } + + .mat-tab-group-inverted-header { + .mat-tab-nav-bar, + .mat-tab-header { + border-top: $header-border; + border-bottom: none; + } + } + + .mat-tab-label, .mat-tab-link { + color: mat-color($foreground, text); + + &.mat-tab-disabled { + color: mat-color($foreground, disabled-text); + } + } + + .mat-tab-header-pagination-chevron { + border-color: mat-color($foreground, text); + } + + .mat-tab-header-pagination-disabled .mat-tab-header-pagination-chevron { + border-color: mat-color($foreground, disabled-text); + } + + // Remove header border when there is a background color + .mat-tab-group[class*='mat-background-'] .mat-tab-header, + .mat-tab-nav-bar[class*='mat-background-'] { + border-bottom: none; + border-top: none; + } + + .mat-tab-group, .mat-tab-nav-bar { + $theme-colors: ( + primary: $primary, + accent: $accent, + warn: $warn + ); + + @each $name, $color in $theme-colors { + // Set the foreground color of the tabs + &.mat-#{$name} { + @include _mat-tab-label-focus($color); + @include _mat-ink-bar($color); + + // Override ink bar when background color is the same + &.mat-background-#{$name} { + @include _mat-ink-bar($color, default-contrast); + } + } + } + + @each $name, $color in $theme-colors { + // Set background color of the tabs and override focus color + &.mat-background-#{$name} { + @include _mat-tab-label-focus($color); + @include _mat-tabs-background($color); + } + } + } +} + +@mixin _mat-ink-bar($color, $hue: default) { + .mat-ink-bar { + background-color: mat-color($color, $hue); + } +} + +@mixin _mat-tab-label-focus($tab-focus-color) { + .mat-tab-label, + .mat-tab-link { + &.cdk-keyboard-focused, + &.cdk-program-focused { + &:not(.mat-tab-disabled) { + background-color: mat-color($tab-focus-color, lighter, 0.3); + } + } + } +} + +@mixin _mat-tabs-background($background-color) { + // Set background color for the tab group + .mat-tab-header, .mat-tab-links, .mat-tab-header-pagination { + background-color: mat-color($background-color); + } + + // Set labels to contrast against background + .mat-tab-label, .mat-tab-link { + color: mat-color($background-color, default-contrast); + + &.mat-tab-disabled { + color: mat-color($background-color, default-contrast, 0.4); + } + } + + // Set pagination chevrons to contrast background + .mat-tab-header-pagination-chevron { + border-color: mat-color($background-color, default-contrast); + } + + .mat-tab-header-pagination-disabled .mat-tab-header-pagination-chevron { + border-color: mat-color($background-color, default-contrast, 0.4); + } + + // Set ripples color to be the contrast color of the new background. Otherwise the ripple + // color will be based on the app background color. + .mat-ripple-element { + background-color: mat-color($background-color, default-contrast, 0.12); + } +} + +@mixin mat-tabs-typography($config) { + .mat-tab-group { + font-family: mat-font-family($config); + } + + .mat-tab-label, .mat-tab-link { + font: { + family: mat-font-family($config, button); + size: mat-font-size($config, button); + weight: mat-font-weight($config, button); + } + } +} + + + + + + +@mixin _mat-toolbar-color($palette) { + background: mat-color($palette); + color: mat-color($palette, default-contrast); +} + +@mixin _mat-toolbar-form-field-overrides { + .mat-form-field-underline, + .mat-form-field-ripple, + .mat-focused .mat-form-field-ripple { + background-color: currentColor; + } + + .mat-form-field-label, + .mat-focused .mat-form-field-label, + .mat-select-value, + .mat-select-arrow, + .mat-form-field.mat-focused .mat-select-arrow { + color: inherit; + } + + .mat-input-element { + caret-color: currentColor; + } +} + +@mixin mat-toolbar-theme($theme) { + $primary: map-get($theme, primary); + $accent: map-get($theme, accent); + $warn: map-get($theme, warn); + $background: map-get($theme, background); + $foreground: map-get($theme, foreground); + + .mat-toolbar { + background: mat-color($background, app-bar); + color: mat-color($foreground, text); + + &.mat-primary { + @include _mat-toolbar-color($primary); + } + + &.mat-accent { + @include _mat-toolbar-color($accent); + } + + &.mat-warn { + @include _mat-toolbar-color($warn); + } + + @include _mat-toolbar-form-field-overrides; + } +} + +@mixin mat-toolbar-typography($config) { + .mat-toolbar, + .mat-toolbar h1, + .mat-toolbar h2, + .mat-toolbar h3, + .mat-toolbar h4, + .mat-toolbar h5, + .mat-toolbar h6 { + @include mat-typography-level-to-styles($config, title); + margin: 0; + } +} + + + + + +$mat-tooltip-target-height: 22px; +$mat-tooltip-font-size: 10px; +$mat-tooltip-vertical-padding: ($mat-tooltip-target-height - $mat-tooltip-font-size) / 2; + +$mat-tooltip-handset-target-height: 30px; +$mat-tooltip-handset-font-size: 14px; +$mat-tooltip-handset-vertical-padding: + ($mat-tooltip-handset-target-height - $mat-tooltip-handset-font-size) / 2; + +@mixin mat-tooltip-theme($theme) { + .mat-tooltip { + background: mat-color($mat-grey, 700, 0.9); + } +} + +@mixin mat-tooltip-typography($config) { + .mat-tooltip { + font-family: mat-font-family($config); + font-size: $mat-tooltip-font-size; + padding-top: $mat-tooltip-vertical-padding; + padding-bottom: $mat-tooltip-vertical-padding; + } + + .mat-tooltip-handset { + font-size: $mat-tooltip-handset-font-size; + padding-top: $mat-tooltip-handset-vertical-padding; + padding-bottom: $mat-tooltip-handset-vertical-padding; + } +} + + + + + +@mixin mat-snack-bar-theme($theme) { + $is-dark-theme: map-get($theme, is-dark); + $accent: map-get($theme, accent); + + .mat-snack-bar-container { + // Use the primary text on the dark theme, even though the lighter one uses + // a secondary, because the contrast on the light primary text is poor. + color: if($is-dark-theme, $dark-primary-text, $light-secondary-text); + background: if($is-dark-theme, map-get($mat-grey, 50), #323232); + + @include _mat-theme-elevation(6, $theme); + } + + .mat-simple-snackbar-action { + color: if($is-dark-theme, inherit, mat-color($accent, text)); + } +} + +@mixin mat-snack-bar-typography($config) { + .mat-simple-snackbar { + font: { + family: mat-font-family($config, body-1); + size: mat-font-size($config, body-1); + } + } + + .mat-simple-snackbar-action { + line-height: 1; + font: { + family: inherit; + size: inherit; + weight: mat-font-weight($config, button); + } + } +} + + + + + + + + + + + + + + +// Theme styles that only apply to the fill appearance of the form-field. + +@mixin mat-form-field-fill-theme($theme) { + $foreground: map-get($theme, foreground); + $is-dark-theme: map-get($theme, is-dark); + + $fill-background: mat-color($foreground, base, if($is-dark-theme, 0.1, 0.04)); + $fill-disabled-background: mat-color($foreground, base, if($is-dark-theme, 0.05, 0.02)); + $underline-color: mat-color($foreground, divider, if($is-dark-theme, 0.5, 0.42)); + $label-disabled-color: mat-color($foreground, disabled-text); + + .mat-form-field-appearance-fill { + .mat-form-field-flex { + background-color: $fill-background; + } + + &.mat-form-field-disabled .mat-form-field-flex { + background-color: $fill-disabled-background; + } + + .mat-form-field-underline::before { + background-color: $underline-color; + } + + &.mat-form-field-disabled { + .mat-form-field-label { + color: $label-disabled-color; + } + + .mat-form-field-underline::before { + background-color: transparent; + } + } + } +} + +// Used to make instances of the _mat-form-field-label-floating mixin negligibly different, +// and prevent Google's CSS Optimizer from collapsing the declarations. This is needed because some +// of the selectors contain pseudo-classes not recognized in all browsers. If a browser encounters +// an unknown pseudo-class it will discard the entire rule set. +$mat-form-field-fill-dedupe: 0; + +// Applies a floating label above the form field control itself. +@mixin _mat-form-field-fill-label-floating($font-scale, $infix-padding, $infix-margin-top) { + transform: translateY(-$infix-margin-top - $infix-padding + $mat-form-field-fill-dedupe) + scale($font-scale); + width: 100% / $font-scale + $mat-form-field-fill-dedupe; + + $mat-form-field-fill-dedupe: $mat-form-field-fill-dedupe + 0.00001 !global; +} + +@mixin mat-form-field-fill-typography($config) { + // The unit-less line-height from the font config. + $line-height: mat-line-height($config, input); + // The amount to scale the font for the floating label and subscript. + $subscript-font-scale: 0.75; + // The padding on top of the infix. + $infix-padding-top: 0.25em; + // The padding below the infix. + $infix-padding-bottom: 0.75em; + // The margin applied to the form-field-infix to reserve space for the floating label. + $infix-margin-top: 1em * $line-height * $subscript-font-scale; + // The amount we offset the label from the input text in the fill appearance. + $fill-appearance-label-offset: -0.5em; + + .mat-form-field-appearance-fill { + .mat-form-field-infix { + padding: $infix-padding-top 0 $infix-padding-bottom 0; + } + + .mat-form-field-label { + top: $infix-margin-top + $infix-padding-top; + margin-top: $fill-appearance-label-offset; + } + + &.mat-form-field-can-float { + &.mat-form-field-should-float .mat-form-field-label, + .mat-input-server:focus + .mat-form-field-label-wrapper .mat-form-field-label { + @include _mat-form-field-fill-label-floating( + $subscript-font-scale, $infix-padding-top + $fill-appearance-label-offset, + $infix-margin-top); + } + + // Server-side rendered matInput with a label attribute but label not shown + // (used as a pure CSS stand-in for mat-form-field-should-float). + .mat-input-server[label]:not(:label-shown) + .mat-form-field-label-wrapper + .mat-form-field-label { + @include _mat-form-field-fill-label-floating( + $subscript-font-scale, $infix-padding-top + $fill-appearance-label-offset, + $infix-margin-top); + } + } + } +} + + + + + + + +// Theme styles that only apply to the legacy appearance of the form-field. + +@mixin mat-form-field-legacy-theme($theme) { + $foreground: map-get($theme, foreground); + $is-dark-theme: map-get($theme, is-dark); + + $label-color: mat-color($foreground, secondary-text); + $underline-color: mat-color($foreground, divider, if($is-dark-theme, 0.7, 0.42)); + + .mat-form-field-appearance-legacy { + .mat-form-field-label { + color: $label-color; + } + + .mat-hint { + color: $label-color; + } + + .mat-form-field-underline { + background-color: $underline-color; + } + + &.mat-form-field-disabled .mat-form-field-underline { + @include mat-control-disabled-underline($underline-color); + } + } +} + +// Used to make instances of the _mat-form-field-label-floating mixin negligibly different, +// and prevent Google's CSS Optimizer from collapsing the declarations. This is needed because some +// of the selectors contain pseudo-classes not recognized in all browsers. If a browser encounters +// an unknown pseudo-class it will discard the entire rule set. +$mat-form-field-legacy-dedupe: 0; + +// Applies a floating label above the form field control itself. +@mixin _mat-form-field-legacy-label-floating($font-scale, $infix-padding, $infix-margin-top) { + // We use perspective to fix the text blurriness as described here: + // http://www.useragentman.com/blog/2014/05/04/fixing-typography-inside-of-2-d-css-transforms/ + // This results in a small jitter after the label floats on Firefox, which the + // translateZ fixes. + transform: translateY(-$infix-margin-top - $infix-padding) scale($font-scale) perspective(100px) + translateZ(0.001px + $mat-form-field-legacy-dedupe); + // The tricks above used to smooth out the animation on chrome and firefox actually make things + // worse on IE, so we don't include them in the IE version. + -ms-transform: translateY(-$infix-margin-top - $infix-padding + $mat-form-field-legacy-dedupe) + scale($font-scale); + + width: 100% / $font-scale + $mat-form-field-legacy-dedupe; + + $mat-form-field-legacy-dedupe: $mat-form-field-legacy-dedupe + 0.00001 !global; +} + +// Same as mixin above, but omits the translateZ for printing purposes. +@mixin _mat-form-field-legacy-label-floating-print($font-scale, $infix-padding, $infix-margin-top) { + // This results in a small jitter after the label floats on Firefox, which the + // translateZ fixes. + transform: translateY(-$infix-margin-top - $infix-padding + $mat-form-field-legacy-dedupe) + scale($font-scale); + // The tricks above used to smooth out the animation on chrome and firefox actually make things + // worse on IE, so we don't include them in the IE version. + $mat-form-field-legacy-dedupe: $mat-form-field-legacy-dedupe + 0.00001 !global; +} + +@mixin mat-form-field-legacy-typography($config) { + // The unit-less line-height from the font config. + $line-height: mat-line-height($config, input); + // The amount to scale the font for the floating label and subscript. + $subscript-font-scale: 0.75; + // The amount of space between the top of the line and the top of the actual text + // (as a fraction of the font-size). + $line-spacing: ($line-height - 1) / 2; + // The padding on the infix. Mocks show half of the text size, but seem to measure from the edge + // of the text itself, not the edge of the line; therefore we subtract off the line spacing. + $infix-padding: 0.5em - $line-spacing; + // The margin applied to the form-field-infix to reserve space for the floating label. + $infix-margin-top: 1em * $line-height * $subscript-font-scale; + // The space between the bottom of the .mat-form-field-flex area and the subscript wrapper. + // Mocks show half of the text size, but this margin is applied to an element with the subscript + // text font size, so we need to divide by the scale factor to make it half of the original text + // size. We again need to subtract off the line spacing since the mocks measure to the edge of the + // text, not the edge of the line. + $subscript-margin-top: 0.5em / $subscript-font-scale - ($line-spacing * 2); + // The padding applied to the form-field-wrapper to reserve space for the subscript, since it's + // absolutely positioned. This is a combination of the subscript's margin and line-height, but we + // need to multiply by the subscript font scale factor since the wrapper has a larger font size. + $wrapper-padding-bottom: ($subscript-margin-top + $line-height) * $subscript-font-scale; + + .mat-form-field-appearance-legacy { + .mat-form-field-wrapper { + padding-bottom: $wrapper-padding-bottom; + } + + .mat-form-field-infix { + padding: $infix-padding 0; + } + + &.mat-form-field-can-float { + &.mat-form-field-should-float .mat-form-field-label, + .mat-input-server:focus + .mat-form-field-label-wrapper .mat-form-field-label { + @include _mat-form-field-legacy-label-floating( + $subscript-font-scale, $infix-padding, $infix-margin-top); + } + + // @breaking-change 8.0.0 will rely on AutofillMonitor instead. + .mat-form-field-autofill-control:-webkit-autofill + .mat-form-field-label-wrapper + .mat-form-field-label { + @include _mat-form-field-legacy-label-floating( + $subscript-font-scale, $infix-padding, $infix-margin-top); + } + + // Server-side rendered matInput with a label attribute but label not shown + // (used as a pure CSS stand-in for mat-form-field-should-float). + .mat-input-server[label]:not(:label-shown) + .mat-form-field-label-wrapper + .mat-form-field-label { + @include _mat-form-field-legacy-label-floating( + $subscript-font-scale, $infix-padding, $infix-margin-top); + } + } + + .mat-form-field-label { + top: $infix-margin-top + $infix-padding; + } + + .mat-form-field-underline { + // We want the underline to start at the end of the content box, not the padding box, + // so we move it up by the padding amount. + bottom: $wrapper-padding-bottom; + } + + .mat-form-field-subscript-wrapper { + margin-top: $subscript-margin-top; + + // We want the subscript to start at the end of the content box, not the padding box, + // so we move it up by the padding amount (adjusted for the smaller font size); + top: calc(100% - #{$wrapper-padding-bottom / $subscript-font-scale}); + } + } + + // translateZ causes the label to not appear while printing, so we override it to not + // apply translateZ while printing + @media print { + .mat-form-field-appearance-legacy { + &.mat-form-field-can-float { + &.mat-form-field-should-float .mat-form-field-label, + .mat-input-server:focus + .mat-form-field-label-wrapper .mat-form-field-label { + @include _mat-form-field-legacy-label-floating-print( + $subscript-font-scale, $infix-padding, $infix-margin-top); + } + + // @breaking-change 8.0.0 will rely on AutofillMonitor instead. + .mat-form-field-autofill-control:-webkit-autofill + .mat-form-field-label-wrapper + .mat-form-field-label { + @include _mat-form-field-legacy-label-floating-print( + $subscript-font-scale, $infix-padding, $infix-margin-top); + } + + // Server-side rendered matInput with a label attribute but label not shown + // (used as a pure CSS stand-in for mat-form-field-should-float). + .mat-input-server[label]:not(:label-shown) + .mat-form-field-label-wrapper + .mat-form-field-label { + @include _mat-form-field-legacy-label-floating-print( + $subscript-font-scale, $infix-padding, $infix-margin-top); + } + } + } + } +} + + + + + + + +// Theme styles that only apply to the outline appearance of the form-field. + +@mixin mat-form-field-outline-theme($theme) { + $primary: map-get($theme, primary); + $accent: map-get($theme, accent); + $warn: map-get($theme, warn); + $foreground: map-get($theme, foreground); + $is-dark-theme: map-get($theme, is-dark); + + $label-disabled-color: mat-color($foreground, disabled-text); + $outline-color: mat-color($foreground, divider, if($is-dark-theme, 0.3, 0.12)); + $outline-color-hover: mat-color($foreground, divider, if($is-dark-theme, 1, 0.87)); + $outline-color-primary: mat-color($primary); + $outline-color-accent: mat-color($accent); + $outline-color-warn: mat-color($warn); + $outline-color-disabled: mat-color($foreground, divider, if($is-dark-theme, 0.15, 0.06)); + + .mat-form-field-appearance-outline { + .mat-form-field-outline { + color: $outline-color; + } + + .mat-form-field-outline-thick { + color: $outline-color-hover; + } + + &.mat-focused { + .mat-form-field-outline-thick { + color: $outline-color-primary; + } + + &.mat-accent .mat-form-field-outline-thick { + color: $outline-color-accent; + } + + &.mat-warn .mat-form-field-outline-thick { + color: $outline-color-warn; + } + } + + // Class repeated so that rule is specific enough to override focused accent color case. + &.mat-form-field-invalid.mat-form-field-invalid { + .mat-form-field-outline-thick { + color: $outline-color-warn; + } + } + + &.mat-form-field-disabled { + .mat-form-field-label { + color: $label-disabled-color; + } + + .mat-form-field-outline { + color: $outline-color-disabled; + } + } + } +} + +// Used to make instances of the _mat-form-field-label-floating mixin negligibly different, +// and prevent Google's CSS Optimizer from collapsing the declarations. This is needed because some +// of the selectors contain pseudo-classes not recognized in all browsers. If a browser encounters +// an unknown pseudo-class it will discard the entire rule set. +$mat-form-field-outline-dedupe: 0; + +// Applies a floating label above the form field control itself. +@mixin _mat-form-field-outline-label-floating($font-scale, $infix-padding, $infix-margin-top) { + transform: translateY(-$infix-margin-top - $infix-padding + $mat-form-field-outline-dedupe) + scale($font-scale); + width: 100% / $font-scale + $mat-form-field-outline-dedupe; + + $mat-form-field-outline-dedupe: $mat-form-field-outline-dedupe + 0.00001 !global; +} + +@mixin mat-form-field-outline-typography($config) { + // The unit-less line-height from the font config. + $line-height: mat-line-height($config, input); + // The amount to scale the font for the floating label and subscript. + $subscript-font-scale: 0.75; + // The padding above and below the infix. + $infix-padding: 1em; + // The margin applied to the form-field-infix to reserve space for the floating label. + $infix-margin-top: 1em * $line-height * $subscript-font-scale; + // The space between the bottom of the .mat-form-field-flex area and the subscript wrapper. + // Mocks show half of the text size, but this margin is applied to an element with the subscript + // text font size, so we need to divide by the scale factor to make it half of the original text + // size. + $subscript-margin-top: 0.5em / $subscript-font-scale; + // The padding applied to the form-field-wrapper to reserve space for the subscript, since it's + // absolutely positioned. This is a combination of the subscript's margin and line-height, but we + // need to multiply by the subscript font scale factor since the wrapper has a larger font size. + $wrapper-padding-bottom: ($subscript-margin-top + $line-height) * $subscript-font-scale; + // The amount we offset the label from the input text in the outline appearance. + $outline-appearance-label-offset: -0.25em; + + .mat-form-field-appearance-outline { + .mat-form-field-infix { + padding: $infix-padding 0 $infix-padding 0; + } + + .mat-form-field-label { + top: $infix-margin-top + $infix-padding; + margin-top: $outline-appearance-label-offset; + } + + &.mat-form-field-can-float { + &.mat-form-field-should-float .mat-form-field-label, + .mat-input-server:focus + .mat-form-field-label-wrapper .mat-form-field-label { + @include _mat-form-field-outline-label-floating( + $subscript-font-scale, $infix-padding + $outline-appearance-label-offset, + $infix-margin-top); + } + + // Server-side rendered matInput with a label attribute but label not shown + // (used as a pure CSS stand-in for mat-form-field-should-float). + .mat-input-server[label]:not(:label-shown) + .mat-form-field-label-wrapper + .mat-form-field-label { + @include _mat-form-field-outline-label-floating( + $subscript-font-scale, $infix-padding + $outline-appearance-label-offset, + $infix-margin-top); + } + } + } +} + + + + + + + +// Theme styles that only apply to the standard appearance of the form-field. + +@mixin mat-form-field-standard-theme($theme) { + $foreground: map-get($theme, foreground); + $is-dark-theme: map-get($theme, is-dark); + + $underline-color: mat-color($foreground, divider, if($is-dark-theme, 0.7, 0.42)); + + .mat-form-field-appearance-standard { + .mat-form-field-underline { + background-color: $underline-color; + } + + &.mat-form-field-disabled .mat-form-field-underline { + @include mat-control-disabled-underline($underline-color); + } + } +} + +@mixin mat-form-field-standard-typography($config) {} + + +// Theme styles that apply to all appearances of the form-field. +@mixin mat-form-field-theme($theme) { + $primary: map-get($theme, primary); + $accent: map-get($theme, accent); + $warn: map-get($theme, warn); + $background: map-get($theme, background); + $foreground: map-get($theme, foreground); + $is-dark-theme: map-get($theme, is-dark); + + // Label colors. Required is used for the `*` star shown in the label. + $label-color: mat-color($foreground, secondary-text, if($is-dark-theme, 0.7, 0.6)); + $focused-label-color: mat-color($primary, text); + $required-label-color: mat-color($accent, text); + + // Underline colors. + $underline-color-base: mat-color($foreground, divider, if($is-dark-theme, 1, 0.87)); + $underline-color-accent: mat-color($accent, text); + $underline-color-warn: mat-color($warn, text); + $underline-focused-color: mat-color($primary, text); + + .mat-form-field-label { + color: $label-color; + } + + .mat-hint { + color: $label-color; + } + + .mat-form-field.mat-focused .mat-form-field-label { + color: $focused-label-color; + + &.mat-accent { + color: $underline-color-accent; + } + + &.mat-warn { + color: $underline-color-warn; + } + } + + .mat-focused .mat-form-field-required-marker { + color: $required-label-color; + } + + .mat-form-field-ripple { + background-color: $underline-color-base; + } + + .mat-form-field.mat-focused { + .mat-form-field-ripple { + background-color: $underline-focused-color; + + &.mat-accent { + background-color: $underline-color-accent; + } + + &.mat-warn { + background-color: $underline-color-warn; + } + } + } + + .mat-form-field-type-mat-native-select.mat-focused:not(.mat-form-field-invalid) { + .mat-form-field-infix::after { + color: $underline-focused-color; + } + + &.mat-accent .mat-form-field-infix::after { + color: $underline-color-accent; + } + + &.mat-warn .mat-form-field-infix::after { + color: $underline-color-warn; + } + } + + // Styling for the error state of the form field. Note that while the same can be + // achieved with the ng-* classes, we use this approach in order to ensure that the same + // logic is used to style the error state and to show the error messages. + .mat-form-field.mat-form-field-invalid { + .mat-form-field-label { + color: $underline-color-warn; + + &.mat-accent, + .mat-form-field-required-marker { + color: $underline-color-warn; + } + } + + .mat-form-field-ripple, + .mat-form-field-ripple.mat-accent { + background-color: $underline-color-warn; + } + } + + .mat-error { + color: $underline-color-warn; + } + + @include mat-form-field-legacy-theme($theme); + @include mat-form-field-standard-theme($theme); + @include mat-form-field-fill-theme($theme); + @include mat-form-field-outline-theme($theme); +} + +// Used to make instances of the _mat-form-field-label-floating mixin negligibly different, +// and prevent Google's CSS Optimizer from collapsing the declarations. This is needed because some +// of the selectors contain pseudo-classes not recognized in all browsers. If a browser encounters +// an unknown pseudo-class it will discard the entire rule set. +$mat-form-field-dedupe: 0; + +// Applies a floating label above the form field control itself. +@mixin _mat-form-field-label-floating($font-scale, $infix-padding, $infix-margin-top) { + transform: translateY(-$infix-margin-top - $infix-padding + $mat-form-field-dedupe) + scale($font-scale); + width: 100% / $font-scale + $mat-form-field-dedupe; + + $mat-form-field-dedupe: $mat-form-field-dedupe + 0.00001 !global; +} + +@mixin mat-form-field-typography($config) { + // The unit-less line-height from the font config. + $line-height: mat-line-height($config, input); + + // The amount to scale the font for the floating label and subscript. + $subscript-font-scale: 0.75; + // The amount to scale the font for the prefix and suffix icons. + $prefix-suffix-icon-font-scale: 1.5; + + // The padding on the infix. Mocks show half of the text size. + $infix-padding: 0.5em; + // The margin applied to the form-field-infix to reserve space for the floating label. + $infix-margin-top: 1em * $line-height * $subscript-font-scale; + // Font size to use for the label and subscript text. + $subscript-font-size: $subscript-font-scale * 100%; + // Font size to use for the for the prefix and suffix icons. + $prefix-suffix-icon-font-size: $prefix-suffix-icon-font-scale * 100%; + // The space between the bottom of the .mat-form-field-flex area and the subscript wrapper. + // Mocks show half of the text size, but this margin is applied to an element with the subscript + // text font size, so we need to divide by the scale factor to make it half of the original text + // size. + $subscript-margin-top: 0.5em / $subscript-font-scale; + // The padding applied to the form-field-wrapper to reserve space for the subscript, since it's + // absolutely positioned. This is a combination of the subscript's margin and line-height, but we + // need to multiply by the subscript font scale factor since the wrapper has a larger font size. + $wrapper-padding-bottom: ($subscript-margin-top + $line-height) * $subscript-font-scale; + + .mat-form-field { + @include mat-typography-level-to-styles($config, input); + } + + .mat-form-field-wrapper { + padding-bottom: $wrapper-padding-bottom; + } + + .mat-form-field-prefix, + .mat-form-field-suffix { + // Allow icons in a prefix or suffix to adapt to the correct size. + .mat-icon { + font-size: $prefix-suffix-icon-font-size; + line-height: $line-height; + } + + // Allow icon buttons in a prefix or suffix to adapt to the correct size. + .mat-icon-button { + height: $prefix-suffix-icon-font-scale * 1em; + width: $prefix-suffix-icon-font-scale * 1em; + + .mat-icon { + height: $line-height * 1em; + line-height: $line-height; + } + } + } + + .mat-form-field-infix { + padding: $infix-padding 0; + // Throws off the baseline if we do it as a real margin, so we do it as a border instead. + border-top: $infix-margin-top solid transparent; + } + + .mat-form-field-can-float { + &.mat-form-field-should-float .mat-form-field-label, + .mat-input-server:focus + .mat-form-field-label-wrapper .mat-form-field-label { + @include _mat-form-field-label-floating( + $subscript-font-scale, $infix-padding, $infix-margin-top); + } + + // Server-side rendered matInput with a label attribute but label not shown + // (used as a pure CSS stand-in for mat-form-field-should-float). + .mat-input-server[label]:not(:label-shown) + .mat-form-field-label-wrapper + .mat-form-field-label { + @include _mat-form-field-label-floating( + $subscript-font-scale, $infix-padding, $infix-margin-top); + } + } + + .mat-form-field-label-wrapper { + top: -$infix-margin-top; + padding-top: $infix-margin-top; + } + + .mat-form-field-label { + top: $infix-margin-top + $infix-padding; + } + + .mat-form-field-underline { + // We want the underline to start at the end of the content box, not the padding box, + // so we move it up by the padding amount. + bottom: $wrapper-padding-bottom; + } + + .mat-form-field-subscript-wrapper { + font-size: $subscript-font-size; + margin-top: $subscript-margin-top; + + // We want the subscript to start at the end of the content box, not the padding box, + // so we move it up by the padding amount (adjusted for the smaller font size); + top: calc(100% - #{$wrapper-padding-bottom / $subscript-font-scale}); + } + + @include mat-form-field-legacy-typography($config); + @include mat-form-field-standard-typography($config); + @include mat-form-field-fill-typography($config); + @include mat-form-field-outline-typography($config); +} + + + + + +@mixin mat-tree-theme($theme) { + $background: map-get($theme, background); + $foreground: map-get($theme, foreground); + + .mat-tree { + background: mat-color($background, 'card'); + } + + .mat-tree-node, + .mat-nested-tree-node { + color: mat-color($foreground, text); + } +} + +@mixin mat-tree-typography($config) { + .mat-tree { + font-family: mat-font-family($config); + } + + .mat-tree-node, + .mat-nested-tree-node { + font-weight: mat-font-weight($config, body-1); + font-size: mat-font-size($config, body-1); + } +} + + + +// Includes all of the typographic styles. +@mixin angular-material-typography($config: null) { + @if $config == null { + $config: mat-typography-config(); + } + + @include mat-badge-typography($config); + @include mat-base-typography($config); + @include mat-autocomplete-typography($config); + @include mat-bottom-sheet-typography($config); + @include mat-button-typography($config); + @include mat-button-toggle-typography($config); + @include mat-card-typography($config); + @include mat-checkbox-typography($config); + @include mat-chips-typography($config); + @include mat-table-typography($config); + @include mat-datepicker-typography($config); + @include mat-dialog-typography($config); + @include mat-expansion-panel-typography($config); + @include mat-form-field-typography($config); + @include mat-grid-list-typography($config); + @include mat-icon-typography($config); + @include mat-input-typography($config); + @include mat-menu-typography($config); + @include mat-paginator-typography($config); + @include mat-progress-bar-typography($config); + @include mat-progress-spinner-typography($config); + @include mat-radio-typography($config); + @include mat-select-typography($config); + @include mat-sidenav-typography($config); + @include mat-slide-toggle-typography($config); + @include mat-slider-typography($config); + @include mat-stepper-typography($config); + @include mat-sort-typography($config); + @include mat-tabs-typography($config); + @include mat-toolbar-typography($config); + @include mat-tooltip-typography($config); + @include mat-list-typography($config); + @include mat-option-typography($config); + @include mat-optgroup-typography($config); + @include mat-snack-bar-typography($config); + @include mat-tree-typography($config); +} + + +// Mixin that renders all of the core styles that are not theme-dependent. +@mixin mat-core($typography-config: null) { + @include angular-material-typography($typography-config); + @include mat-ripple(); + @include cdk-a11y(); + @include cdk-overlay(); + @include cdk-text-field(); +} + +// Mixin that renders all of the core styles that depend on the theme. +@mixin mat-core-theme($theme) { + @include mat-ripple-theme($theme); + @include mat-option-theme($theme); + @include mat-optgroup-theme($theme); + @include mat-pseudo-checkbox-theme($theme); + + // Provides external CSS classes for each elevation value. Each CSS class is formatted as + // `mat-elevation-z$zValue` where `$zValue` corresponds to the z-space to which the element is + // elevated. + @for $zValue from 0 through 24 { + .#{$_mat-elevation-prefix}#{$zValue} { + @include _mat-theme-elevation($zValue, $theme); + } + } + + // Wrapper element that provides the theme background when the user's content isn't + // inside of a `mat-sidenav-container`. Note that we need to exclude the ampersand + // selector in case the mixin is included at the top level. + .mat-app-background#{if(&, ', &.mat-app-background', '')} { + $background: map-get($theme, background); + $foreground: map-get($theme, foreground); + + background-color: mat-color($background, background); + color: mat-color($foreground, text); + } + + // Marker that is used to determine whether the user has added a theme to their page. + @at-root { + .mat-theme-loaded-marker { + display: none; + } + } +} + + + + + + + + + + + + + + + + +@mixin mat-divider-theme($theme) { + $foreground: map-get($theme, foreground); + + .mat-divider { + border-top-color: mat-color($foreground, divider); + } + + .mat-divider-vertical { + border-right-color: mat-color($foreground, divider); + } +} + + + + + + + + + + + + + + + + + + + + + + + + + +// Create a theme. +@mixin angular-material-theme($theme) { + @include mat-core-theme($theme); + @include mat-autocomplete-theme($theme); + @include mat-badge-theme($theme); + @include mat-bottom-sheet-theme($theme); + @include mat-button-theme($theme); + @include mat-button-toggle-theme($theme); + @include mat-card-theme($theme); + @include mat-checkbox-theme($theme); + @include mat-chips-theme($theme); + @include mat-table-theme($theme); + @include mat-datepicker-theme($theme); + @include mat-dialog-theme($theme); + @include mat-divider-theme($theme); + @include mat-expansion-panel-theme($theme); + @include mat-form-field-theme($theme); + @include mat-grid-list-theme($theme); + @include mat-icon-theme($theme); + @include mat-input-theme($theme); + @include mat-list-theme($theme); + @include mat-menu-theme($theme); + @include mat-paginator-theme($theme); + @include mat-progress-bar-theme($theme); + @include mat-progress-spinner-theme($theme); + @include mat-radio-theme($theme); + @include mat-select-theme($theme); + @include mat-sidenav-theme($theme); + @include mat-slide-toggle-theme($theme); + @include mat-slider-theme($theme); + @include mat-stepper-theme($theme); + @include mat-sort-theme($theme); + @include mat-tabs-theme($theme); + @include mat-toolbar-theme($theme); + @include mat-tooltip-theme($theme); + @include mat-tree-theme($theme); + @include mat-snack-bar-theme($theme); +} diff --git a/src/app/app-routing.module.ts b/src/app/app-routing.module.ts new file mode 100644 index 0000000..839ffa5 --- /dev/null +++ b/src/app/app-routing.module.ts @@ -0,0 +1,45 @@ +import { NgModule } from '@angular/core'; +import { Routes, RouterModule } from '@angular/router'; +import { LoginComponent } from './pages/login/login.component'; +import { NavigationComponent } from './navigation/navigation.component'; +import { LockscreenComponent } from './pages/lockscreen/lockscreen.component'; +import {HomeComponent} from './home/home.component' + +//路由守卫 +import {AuthGuard} from './auth.guard' +import {MTokenK1Component} from './m-token-k1/m-token-k1.component' //K1秘钥 + + + +const routes: Routes = [ + {path:'',redirectTo:'login',pathMatch:'full'}, + { + path:'', + component:NavigationComponent, + canActivate: [AuthGuard],//守卫验证 + children:[ + {path:'ui',loadChildren:() => import('./ui/ui.module').then(m => m.UiModule)}, + {path:'keyUnit',loadChildren:() => import('./key-unit/key-unit.module').then(m => m.KeyUnitModule)}, + {path:'planManagement',loadChildren:() => import('./plan-management/plan-management.module').then(m => m.PlanManagementModule)}, + {path:'planAudit',loadChildren:() => import('./plan-audit/plan-audit.module').then(m => m.PlanAuditModule)}, + {path:'home',loadChildren:() => import('./pages/pages.module').then(m => m.PagesModule)}, + {path:'visualization',component: HomeComponent}, + {path:'gis',loadChildren:() => import('./gis-management/gis-management.module').then(m => m.GISManagementModule)}, + ]}, + + {path:'login', + component:LoginComponent}, + + {path:'getNoMToken', + component:MTokenK1Component, canActivate: [AuthGuard],}, //K1秘钥验证失败是跳转页面 + + {path:'lockscreen', + component:LockscreenComponent, + canActivate: [AuthGuard],}//守卫验证 +]; + +@NgModule({ + imports: [RouterModule.forRoot(routes)], + exports: [RouterModule] +}) +export class AppRoutingModule { } diff --git a/src/app/app.component.html b/src/app/app.component.html new file mode 100644 index 0000000..90c6b64 --- /dev/null +++ b/src/app/app.component.html @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/app/app.component.scss b/src/app/app.component.scss new file mode 100644 index 0000000..e69de29 diff --git a/src/app/app.component.spec.ts b/src/app/app.component.spec.ts new file mode 100644 index 0000000..6ee0c27 --- /dev/null +++ b/src/app/app.component.spec.ts @@ -0,0 +1,35 @@ +import { TestBed, async } from '@angular/core/testing'; +import { RouterTestingModule } from '@angular/router/testing'; +import { AppComponent } from './app.component'; + +describe('AppComponent', () => { + beforeEach(async(() => { + TestBed.configureTestingModule({ + imports: [ + RouterTestingModule + ], + declarations: [ + AppComponent + ], + }).compileComponents(); + })); + + it('should create the app', () => { + const fixture = TestBed.createComponent(AppComponent); + const app = fixture.debugElement.componentInstance; + expect(app).toBeTruthy(); + }); + + it(`should have as title 'anxin119'`, () => { + const fixture = TestBed.createComponent(AppComponent); + const app = fixture.debugElement.componentInstance; + expect(app.title).toEqual('anxin119'); + }); + + it('should render title', () => { + const fixture = TestBed.createComponent(AppComponent); + fixture.detectChanges(); + const compiled = fixture.debugElement.nativeElement; + expect(compiled.querySelector('.content span').textContent).toContain('anxin119 app is running!'); + }); +}); diff --git a/src/app/app.component.ts b/src/app/app.component.ts new file mode 100644 index 0000000..13a5c02 --- /dev/null +++ b/src/app/app.component.ts @@ -0,0 +1,37 @@ +import { Component } from '@angular/core'; +import { HttpClient } from '@angular/common/http' +import { Data } from './interface' +import { Router,ActivatedRoute } from '@angular/router' +import {CacheTokenService} from './http-interceptors/cache-token.service'//引入服务 + + + +@Component({ + selector: 'app-root', + templateUrl: './app.component.html', + styleUrls: ['./app.component.scss'] +}) +export class AppComponent { + + constructor(private http:HttpClient,private router:Router,public token:CacheTokenService) { } + + ngOnInit(): void { + var token = sessionStorage.getItem("token"); + var refreshToken = sessionStorage.getItem("refreshToken"); + if(token && refreshToken) { + this.http.post('/api/Account/RefreshToken', { + token: token, + refreshToken: refreshToken + }).subscribe((data: Data) => { + sessionStorage.setItem("level",data.level); + sessionStorage.setItem("token",data.token); + sessionStorage.setItem("refreshToken",data.refreshToken); + this.token.startUp() + }) + } + + } + + + +} diff --git a/src/app/app.module.ts b/src/app/app.module.ts new file mode 100644 index 0000000..3b99be1 --- /dev/null +++ b/src/app/app.module.ts @@ -0,0 +1,48 @@ +import { BrowserModule } from '@angular/platform-browser'; +import { NgModule } from '@angular/core'; +import { AppRoutingModule } from './app-routing.module'; +import { AppComponent } from './app.component'; +import {BrowserAnimationsModule} from '@angular/platform-browser/animations'; +import { MatButtonModule } from '@angular/material/button'; +import { MatCheckboxModule } from '@angular/material/checkbox'; +import { MatIconModule } from '@angular/material/icon'; +import { MatSidenavModule } from '@angular/material/sidenav'; +import { NavigationModule } from './navigation/navigation.module'; +import { HomeComponent } from './home/home.component'; +import { TabbarComponent } from './tabbar/tabbar.component'; +import { PagesModule } from './pages/pages.module'; +import { FormsModule } from '@angular/forms'; +import { UiModule } from './ui/ui.module'; +import { HttpClientModule } from '@angular/common/http'; +import { httpInterceptorProviders } from './http-interceptors/index' +import {CacheTokenService} from './http-interceptors/cache-token.service' +import { TreeService } from'./http-interceptors/tree.service'; +import { MTokenK1Component } from './m-token-k1/m-token-k1.component' //K1秘钥 +import { CountdownModule } from 'ngx-countdown'; //倒计时插件 +import { GISManagementModule } from './gis-management/gis-management.module'; + +@NgModule({ + declarations: [ + AppComponent, + HomeComponent, + MTokenK1Component + ], + imports: [ + BrowserModule, + AppRoutingModule, + BrowserAnimationsModule, + MatButtonModule, + MatCheckboxModule, + MatSidenavModule, + NavigationModule, + MatIconModule, + PagesModule, + FormsModule, + HttpClientModule, + CountdownModule, + GISManagementModule + ], + providers: [httpInterceptorProviders, CacheTokenService,TreeService], + bootstrap: [AppComponent] +}) +export class AppModule { } diff --git a/src/app/auth.guard.ts b/src/app/auth.guard.ts new file mode 100644 index 0000000..b01fc58 --- /dev/null +++ b/src/app/auth.guard.ts @@ -0,0 +1,31 @@ +import { Injectable } from '@angular/core'; +import { CanActivate, ActivatedRouteSnapshot, RouterStateSnapshot, Router } from '@angular/router'; + +@Injectable({ + providedIn: 'root' +}) +export class AuthGuard implements CanActivate { + + constructor(private router: Router) { + + } + + // 路由守卫 + canActivate(next: ActivatedRouteSnapshot, state: RouterStateSnapshot): boolean { + + return this.checkLogin(); + } + + checkLogin(): boolean { + + // 判断本地有没有token + const token = sessionStorage.getItem('token'); + + // 如果有token,允许访问 + if (token) { return true; } + + //如果没有token,跳转登录页 + this.router.navigate(['/login']); + return false; + } +} diff --git a/src/app/gis-management/gis-labeling/gis-labeling.component.html b/src/app/gis-management/gis-labeling/gis-labeling.component.html new file mode 100644 index 0000000..14ea061 --- /dev/null +++ b/src/app/gis-management/gis-labeling/gis-labeling.component.html @@ -0,0 +1,3 @@ +
+ +
diff --git a/src/app/gis-management/gis-labeling/gis-labeling.component.scss b/src/app/gis-management/gis-labeling/gis-labeling.component.scss new file mode 100644 index 0000000..feb03fd --- /dev/null +++ b/src/app/gis-management/gis-labeling/gis-labeling.component.scss @@ -0,0 +1,84 @@ +.mapbox{ + width: 100%; + height: 100%; +} + + + + + + + + + + +// .content-window-card { +// position: relative; +// box-shadow: none; +// bottom: 0; +// left: 0; +// width: auto; +// padding: 0; +// } + +// .content-window-card p { +// height: 20px; +// } + +// .custom-info { +// border: solid 1px silver; +// } +// div.info-top { +// position: relative; +// background: none repeat scroll 0 0 #F9F9F9; +// border-bottom: 1px solid #CCC; +// border-radius: 5px 5px 0 0; +// } + +// div.info-top div { +// display: inline-block; +// color: #333333; +// font-size: 14px; +// font-weight: bold; +// line-height: 31px; +// padding: 0 10px; +// } + +// div.info-top img { +// position: absolute; +// top: 10px; +// right: 10px; +// transition-duration: 0.25s; +// } + +// div.info-top img:hover { +// box-shadow: 0px 0px 5px #000; +// } + +// div.info-middle { +// font-size: 12px; +// padding: 10px 6px; +// line-height: 20px; +// } + +// div.info-bottom { +// height: 0px; +// width: 100%; +// clear: both; +// text-align: center; +// } + +// div.info-bottom img { +// position: relative; +// z-index: 104; +// } + +// span { +// margin-left: 5px; +// font-size: 11px; +// } + +// .info-middle img { +// float: left; +// margin-right: 6px; +// } diff --git a/src/app/gis-management/gis-labeling/gis-labeling.component.spec.ts b/src/app/gis-management/gis-labeling/gis-labeling.component.spec.ts new file mode 100644 index 0000000..666c51f --- /dev/null +++ b/src/app/gis-management/gis-labeling/gis-labeling.component.spec.ts @@ -0,0 +1,25 @@ +import { async, ComponentFixture, TestBed } from '@angular/core/testing'; + +import { GisLabelingComponent } from './gis-labeling.component'; + +describe('GisLabelingComponent', () => { + let component: GisLabelingComponent; + let fixture: ComponentFixture; + + beforeEach(async(() => { + TestBed.configureTestingModule({ + declarations: [ GisLabelingComponent ] + }) + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(GisLabelingComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/gis-management/gis-labeling/gis-labeling.component.ts b/src/app/gis-management/gis-labeling/gis-labeling.component.ts new file mode 100644 index 0000000..e6420cc --- /dev/null +++ b/src/app/gis-management/gis-labeling/gis-labeling.component.ts @@ -0,0 +1,74 @@ +import { Component, OnInit ,Renderer2,ElementRef } from '@angular/core'; +declare var AMap: any; +@Component({ + selector: 'app-gis-labeling', + templateUrl: './gis-labeling.component.html', + styleUrls: ['./gis-labeling.component.scss'] +}) +export class GisLabelingComponent implements OnInit { + + constructor(private elementRef: ElementRef,public renderer2: Renderer2) { } + map:any //地图 + ngOnInit(): void { + + setTimeout(() => { + this.map = new AMap.Map('map'); + //给地图增加点击事件 + this.map.on('click', (ev)=>{ + // 触发事件的对象 + var target = ev.target; + + // 触发事件的地理坐标,AMap.LngLat 类型 + var lnglat = ev.lnglat; + + // 触发事件的像素坐标,AMap.Pixel 类型 + var pixel = ev.pixel; + + // 触发事件类型 + var type = ev.type; + + let marker = new AMap.Marker({ + position:[lnglat.lng, lnglat.lat]//位置 + }) + // marker.content = '我是第' + (i + 1) + '个Marker'; + marker.setMap(this.map) + + AMap.event.addListener(marker, 'click', () => { + infoWindow.open(this.map, marker.getPosition()); + console.log(222,marker) + setTimeout(() => { + this.renderer2.listen(this.elementRef.nativeElement.querySelector('#lnglat2container'),'click',(event)=>{ + console.log(111) + }) + }, 0); + + }); + + }); + + var infoWindowContent = + '
' + + '' + + '
' + + '
' + + '经纬度' + + '
' + + '' + + '
' + + '' + + '
'; + var infoWindow = new AMap.InfoWindow({ + content: infoWindowContent, + offset: new AMap.Pixel(0, -45) + }); + + // var xxx  =  this.el.nativeElement.querySelector('#lnglat2container') + let yyy = document.getElementById('lnglat2container'); + + }, 0); + } + + getLngLat(){ + console.log(123) + } +} diff --git a/src/app/gis-management/gis-management-routing.module.ts b/src/app/gis-management/gis-management-routing.module.ts new file mode 100644 index 0000000..599381e --- /dev/null +++ b/src/app/gis-management/gis-management-routing.module.ts @@ -0,0 +1,14 @@ +import { NgModule } from '@angular/core'; +import { Routes, RouterModule } from '@angular/router'; +import { GisLabelingComponent } from './gis-labeling/gis-labeling.component'; + + +const routes: Routes = [ + { path: '', component: GisLabelingComponent }, +]; + +@NgModule({ + imports: [RouterModule.forChild(routes)], + exports: [RouterModule] +}) +export class GisRoutingModule { } diff --git a/src/app/gis-management/gis-management.module.ts b/src/app/gis-management/gis-management.module.ts new file mode 100644 index 0000000..11bbefe --- /dev/null +++ b/src/app/gis-management/gis-management.module.ts @@ -0,0 +1,100 @@ +import { NgModule } from '@angular/core'; +import { CommonModule } from '@angular/common'; +import { GisLabelingComponent } from './gis-labeling/gis-labeling.component'; + +import {A11yModule} from '@angular/cdk/a11y'; +import {DragDropModule} from '@angular/cdk/drag-drop'; +import {PortalModule} from '@angular/cdk/portal'; +import {ScrollingModule} from '@angular/cdk/scrolling'; +import {CdkStepperModule} from '@angular/cdk/stepper'; +import {CdkTableModule} from '@angular/cdk/table'; +import {CdkTreeModule} from '@angular/cdk/tree'; +import {MatAutocompleteModule} from '@angular/material/autocomplete'; +import {MatBadgeModule} from '@angular/material/badge'; +import {MatBottomSheetModule} from '@angular/material/bottom-sheet'; +import {MatButtonModule} from '@angular/material/button'; +import {MatButtonToggleModule} from '@angular/material/button-toggle'; +import {MatCardModule} from '@angular/material/card'; +import {MatCheckboxModule} from '@angular/material/checkbox'; +import {MatChipsModule} from '@angular/material/chips'; +import {MatStepperModule} from '@angular/material/stepper'; +import {MatDatepickerModule} from '@angular/material/datepicker'; +import {MatDialogModule} from '@angular/material/dialog'; +import {MatDividerModule} from '@angular/material/divider'; +import {MatExpansionModule} from '@angular/material/expansion'; +import {MatGridListModule} from '@angular/material/grid-list'; +import {MatIconModule} from '@angular/material/icon'; +import {MatInputModule} from '@angular/material/input'; +import {MatListModule} from '@angular/material/list'; +import {MatMenuModule} from '@angular/material/menu'; +import {MatNativeDateModule, MatRippleModule, MatOption} from '@angular/material/core'; +import {MatPaginatorModule} from '@angular/material/paginator'; +import {MatProgressBarModule} from '@angular/material/progress-bar'; +import {MatProgressSpinnerModule} from '@angular/material/progress-spinner'; +import {MatRadioModule} from '@angular/material/radio'; +import {MatSelectModule} from '@angular/material/select'; +import {MatSidenavModule} from '@angular/material/sidenav'; +import {MatSliderModule} from '@angular/material/slider'; +import {MatSlideToggleModule} from '@angular/material/slide-toggle'; +import {MatSnackBarModule} from '@angular/material/snack-bar'; +import {MatSortModule} from '@angular/material/sort'; +import {MatTableModule} from '@angular/material/table'; +import {MatTabsModule} from '@angular/material/tabs'; +import {MatToolbarModule} from '@angular/material/toolbar'; +import {MatTooltipModule} from '@angular/material/tooltip'; +import {MatTreeModule} from '@angular/material/tree'; +import { FormsModule } from '@angular/forms'; +import { GisRoutingModule } from './gis-management-routing.module'; + +@NgModule({ + declarations: [GisLabelingComponent], + imports: [ + CommonModule, + CommonModule, + GisRoutingModule, + A11yModule, + CdkStepperModule, + CdkTableModule, + CdkTreeModule, + DragDropModule, + MatAutocompleteModule, + MatBadgeModule, + MatBottomSheetModule, + MatButtonModule, + MatButtonToggleModule, + MatCardModule, + MatCheckboxModule, + MatChipsModule, + MatStepperModule, + MatDatepickerModule, + MatDialogModule, + MatDividerModule, + MatExpansionModule, + MatGridListModule, + MatIconModule, + MatInputModule, + MatListModule, + MatMenuModule, + MatNativeDateModule, + MatPaginatorModule, + MatProgressBarModule, + MatProgressSpinnerModule, + MatRadioModule, + MatRippleModule, + MatSelectModule, + MatSidenavModule, + MatSliderModule, + MatSlideToggleModule, + MatSnackBarModule, + MatSortModule, + MatTableModule, + MatTabsModule, + MatToolbarModule, + MatTooltipModule, + MatTreeModule, + PortalModule, + ScrollingModule, + FormsModule + ] +}) +export class GISManagementModule { } diff --git a/src/app/home/home.component.html b/src/app/home/home.component.html new file mode 100644 index 0000000..8cec25e --- /dev/null +++ b/src/app/home/home.component.html @@ -0,0 +1,119 @@ +
+
+ +
+
+
+ +
+
+
+
+
+
+
+
计划完成情况
+
+
+
+
+
本年时间进度
+
+
90%
+
+
+
+
+
+
+
年计划完成率
+
+
88%
+
+
+
+
+
+
+
日历进度差
+
+
82%
+
+
+
+
+
+
+
+
+
+ +
+ +
+
+
预案编制总量
+
    +
  • 0
  • +
  • 2
  • +
  • 2
  • +
  • 6
  • +
  • 7
  • +
  • 8
  • +
+
+
+
重点单位总量
+
8036
+
+
+
数据采集总量
+
6578
+
+
+ +
+
+
+
+
+
+ +
+
+
+
+
+
三维预案总数
+
4374
+
+
+
二维预案总数
+
9693
+
+
+
卡片预案总数
+
6403
+
+
+
其他预案总数
+
2208
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file diff --git a/src/app/home/home.component.scss b/src/app/home/home.component.scss new file mode 100644 index 0000000..3149b4e --- /dev/null +++ b/src/app/home/home.component.scss @@ -0,0 +1 @@ +@import "../../assets/css/newStyle.css"; \ No newline at end of file diff --git a/src/app/home/home.component.spec.ts b/src/app/home/home.component.spec.ts new file mode 100644 index 0000000..490e81b --- /dev/null +++ b/src/app/home/home.component.spec.ts @@ -0,0 +1,25 @@ +import { async, ComponentFixture, TestBed } from '@angular/core/testing'; + +import { HomeComponent } from './home.component'; + +describe('HomeComponent', () => { + let component: HomeComponent; + let fixture: ComponentFixture; + + beforeEach(async(() => { + TestBed.configureTestingModule({ + declarations: [ HomeComponent ] + }) + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(HomeComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/home/home.component.ts b/src/app/home/home.component.ts new file mode 100644 index 0000000..524958b --- /dev/null +++ b/src/app/home/home.component.ts @@ -0,0 +1,432 @@ +import { Component, OnInit, Renderer2, ElementRef } from '@angular/core'; +import { HttpClient } from '@angular/common/http' +declare var echarts: any; +declare var AMap: any; +declare var AMapUI: any; + + + +@Component({ + selector: 'app-home', + templateUrl: './home.component.html', + styleUrls: ['./home.component.scss'] +}) +export class HomeComponent implements OnInit { + + constructor(private http:HttpClient, private render2: Renderer2,public element: ElementRef) { } + + + + ngOnInit() { + + window.setTimeout(()=>{ + this.unitType() + this.unitData() + this.teamData() + this.keyUnit() + + let that = this + window.addEventListener('resize',function () { + + }) + },0) + + } + + ngAfterViewInit(): void { + + } + + //单位类型统计 + unitType () { + var chartHynyxf = echarts.init(document.getElementById('chartHynyxf'), 'skinUpp'); + var color = ['#BE1B94', '#E29217', '#2AFF71', '#BE1B4D', '#D1E217', '#65F5F3']; + var data = [{ + name: "其他", + value: 38 + }, { + name: "隧道", + value: 47, + itemStyle: { + color: color[0], + } + }, { + name: "地铁类", + value: 114, + itemStyle: { + color: color[1], + } + }, { + name: "石油化工", + value: 33, + itemStyle: { + color: color[2], + } + }, { + name: "地下建筑", + value: 192, + itemStyle: { + color: color[3], + } + }, { + name: "高层建筑", + value: 135, + itemStyle: { + color: color[4], + } + }]; + + // 按数值大小排序的话可以用 + // data.sort(function (a, b) { + // return b.value - a.value; + // }) + + var categoryData = []; + for (var i = 0; i < data.length; i++) { + categoryData.push(data[i].name); + } + var option = { + // 标题 + title: { + text: '单位类型统计', + }, + //图例 + legend: { + data: ['单位类型统计'], + show: false + }, + //提示框 + tooltip: { + trigger: 'item', + }, + // x轴 + xAxis: { + type: 'value' + }, + // y轴 + yAxis: { + type: 'category', + data: categoryData, + }, + // 数据 + series: [ + { + name: '单位类型统计', + type: 'bar', + data: data, + }, + ], + }; + chartHynyxf.setOption(option); + } + + //单位数据统计 + unitData () { + var chartDwsjcj = echarts.init(document.getElementById('chartDwsjcj'), 'skinUpp'); + var option = { + color: ['#FB33C2', '#00CFF0', '#2C3DE0'], + // 标题 + title: { + text: '单位数据采集数量与单位预案数量统计', + left: 0, + top: 0, + }, + grid: { + left: 30, + right: 0, + }, + //图例 + legend: { + top: 0, + data: ['单位数据采集数量', '单位预案编制数量', ], + icon: 'circle', + itemGap: 20, + }, + //提示框 + tooltip: { + trigger: 'axis', + }, + // x轴 + xAxis: { + type: 'category', + data: [], + axisLabel: { + interval: 0, + + formatter:function(value){ + var ret = "";//拼接加\n返回的类目项 + var maxLength = 5;//每项显示文字个数 + var valLength = value.length;//X轴类目项的文字个数 + var rowN = Math.ceil(valLength / maxLength); //类目项需要换行的行数 + if (rowN > 1) { //如果类目项的文字大于3, + for (var i = 0; i < rowN; i++) { + var temp = "";//每次截取的字符串 + var start = i * maxLength;//开始截取的位置 + var end = start + maxLength;//结束截取的位置 + //这里也可以加一个是否是最后一行的判断,但是不加也没有影响,那就不加吧 + temp = value.substring(start, end) + "\n"; + ret += temp; + } //凭借最终的字符串 + return ret; + }else { + return value; + } + } //function + + } + }, + // y轴 + yAxis: { + type: 'value', + splitLine: { + show: true, + lineStyle: { + color: 'rgba(255,255,255,.4)' + } + }, + }, + // 数据 + series: [ + { + name: '单位数据采集数量', + type: 'bar', + data: [320, 302, 301, 234, 390, 330, 320, 390, 330, 320, 390, 301, 234, 390, 330, 320, 390, ], + label: { + show: false, + position: "top", + formatter: '{c}', + color: "#fff", + }, + itemStyle: { + color: { + type: 'linear', + x: 0, + y: 0, + x2: 0, + y2: 1, + colorStops: [{ + offset: 0, + color: 'rgba(254,51,194,1)' // 0% 处的颜色 + }, { + offset: 1, + color: 'rgba(254,51,194,.5)' // 100% 处的颜色 + }], + global: false // 缺省为 false + } + } + }, { + name: '单位预案编制数量', + type: 'bar', + data: [300, 202, 101, 134, 290, 430, 220, 490, 430, 490, 430, 202, 101, 134, 290, 430, 220, ], + label: { + show: false, + position: "top", + formatter: '{c}', + color: "#fff", + }, + itemStyle: { + color: { + type: 'linear', + x: 0, + y: 0, + x2: 0, + y2: 1, + colorStops: [{ + offset: 0, + color: 'rgba(0,220,254,1)' // 0% 处的颜色 + }, { + offset: 1, + color: 'rgba(1,104,191,1)' // 100% 处的颜色 + }], + globalCoord: false // 缺省为 false + }, + } + } + ], + }; + if(sessionStorage.getItem("realName") == "上海总队"){ + option.xAxis.data = ['上海总队','浦东支队','黄浦支队','徐汇支队','长宁支队','静安支队','普陀支队','虹口支队','杨浦支队','闵行支队','宝山支队','青浦支队','松江支队','金山支队','崇明支队','滨海支队'] + }else{ + option.xAxis.data = ['渝北区消防救援支队', '黔江区消防救援支队', '大渡口区消防救援支队', '南岸区消防救援支队', '北培区消防救援支队', '渝中区消防救援支队', '万州区消防救援支队', '涪陵区消防救援支队', '江北区消防救援支队', '九龙仓区消防救援支队', '沙坪坝区消防救援支队', '九龙坡区消防救援支队', '长寿区消防救援支队', '巴南区消防救援支队', '江津区消防救援支队', '合川区消防救援支队', '南川区消防救援支队'] + } + chartDwsjcj.setOption(option); + } + + //全队数据采集和预案编制数量统计 + teamData () { + var chartQusj = echarts.init(document.getElementById('chartQusj'), 'skinUpp'); + var option = { + grid: { + top: 50, + left:40, + right: 20, + bottom: 20, + }, + // 标题 + title: { + text: '全队数据采集和预案编制数量统计', + top: -4, + left: 0 + }, + //图例 + legend: { + top: 0, + data: ['单位预案编制数量', '单位数据采集数量'], + }, + //提示框 + tooltip: { + trigger: 'axis', + }, + // x轴 + xAxis: { + type: 'category', + data: ['1月', '2月', '3月', '4月', '5月', '6月', '7月', '8月', '9月', '10月', '11月', '12月'], + boundaryGap: false, + }, + // y轴 + yAxis: { + type: 'value', + name: '个' + }, + // 数据 + series: [{ + name: '单位预案编制数量', + type: 'line', + data: [1189, 1324, 1002, 1100, 1432, 888, 1300, 1000, 910, 1320, 1200, 1088], + // showSymbol: true, + // symbolSize:6, + // smooth: false, + // label: { + // show: true, + // }, + areaStyle: { + color: { + type: 'linear', + x: 0, + y: 0, + x2: 0, + y2: 1, + colorStops: [{ + offset: 0, + color: 'rgba(60,103,195,1)' // 0% 处的颜色 + }, { + offset: 1, + color: 'rgba(0,194,255,.2)' // 100% 处的颜色 + }], + global: false // 缺省为 false + } + } + }, + { + name: '单位数据采集数量', + type: 'line', + data: [288, 425, 342, 299, 255, 408, 488, 312, 486, 550, 425, 340 ], + }, + ], + }; + chartQusj.setOption(option); + } + + //重点关注企业预案完成情况 + keyUnit () { + var chartZdgzqy = echarts.init(document.getElementById('chartZdgzqy'), 'skinUpp'); + var data = [420, 502, 644, 514, 790, 630, 520]; + var data01 = [120, 302, 301, 334, 390, 330, 320]; + + var option = { + color: ['#FB33C2', '#00CFF0', '#2C3DE0'], + // 标题 + title: { + text: '重点关注企业预案完成情况', + left: 0, + top: 0, + }, + grid: { + left: 30, + bottom: 45 + }, + //图例 + legend: { + top: 0, + data: ['单位类型统计'], + icon: 'circle', + itemGap: 20, + show: false + }, + //提示框 + tooltip: { + trigger: 'axis', + }, + // x轴 + xAxis: { + type: 'category', + axisLine: false, + data: ['高层建筑', '地下建筑', '石油化工', '地铁类', '隧道', '其他',], + axisLabel: { + interval: 0, + rotate: 45 + } + }, + // y轴 + yAxis: [ + { + type: 'value', + axisLine: false, + }, { + type: 'value', + axisLine: false, + } + ], + // 数据 + series: [ + // { + // name: '单位类型统计', + // type: 'line', + // data: data, + // itemStyle: { + // color: '#fff' + // }, + // label: { + // show: false, + // position: "top", + // formatter: '{c}', + // color: "#fff", + // }, + // }, + { + name: '全部', + type: 'bar', + barWidth: '16px', + barGap: '-100%', + itemStyle: { + color: '#025D7C' + }, + label: { + show: false, + }, + data: data, + }, + { + name: '预案企业数', + type: 'bar', + barWidth: '16px', + yAxisIndex: 1, + itemStyle: { + color: '#79CBE8' + }, + label: { + show: false, + position: "insideTop", + formatter: '{c}', + color: "#fff", + }, + data: data01, + } + ], + }; + chartZdgzqy.setOption(option); + } + + + +} diff --git a/src/app/http-interceptors/base-interceptor.ts b/src/app/http-interceptors/base-interceptor.ts new file mode 100644 index 0000000..4b14ae9 --- /dev/null +++ b/src/app/http-interceptors/base-interceptor.ts @@ -0,0 +1,83 @@ +import { Injectable } from '@angular/core'; +import { + HttpClient, HttpEvent, HttpInterceptor, HttpHandler, HttpRequest, + HttpErrorResponse +} from '@angular/common/http'; +import { throwError } from 'rxjs' +import { catchError, retry } from 'rxjs/operators'; +import { Router,ActivatedRoute } from '@angular/router' +import {CacheTokenService} from './cache-token.service' +import { MatSnackBar, MatSnackBarConfig } from '@angular/material/snack-bar'; + +//baseurl +// const baseurl = 'http://39.106.78.171:8008'; + +@Injectable() +export class BaseInterceptor implements HttpInterceptor { + + constructor(private http:HttpClient,private router:Router,private route:ActivatedRoute,public token:CacheTokenService,public snackBar: MatSnackBar) {} + + intercept(req, next: HttpHandler) { + + let newReq = req.clone({ + url: req.hadBaseurl ? `${req.url}` : `${req.url}`, + }); + if(!req.cancelToken) { + /*获取token*/ + let token = sessionStorage.getItem("token") + /*此处设置额外请求头,token令牌*/ + newReq.headers = + newReq.headers.set('Authorization', `Bearer ${token}`) + } + + // 携带请求头发送下一次请求 + return next.handle(newReq) + .pipe( + //箭头函数,注意this指向 + catchError((err) => this.handleError(err)) + ) + } + + // 捕获错误 + //401 token过期 403没权限!!! 400参数错误 404未找到 614刷新令牌过期!!! + + private handleError(error: HttpErrorResponse) { + // 用户认证失败返回登录页 + if (error.status === 401||error.status === 614) { + this.token.delete() + sessionStorage.clear() + window.localStorage.clear() + this.router.navigate(['/login']) + const config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.snackBar.open('用户认证信息过期,请重新登录','确定',config); + } + if (error.status === 403) { + const config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.snackBar.open('对不起,您无此权限','确定',config); + } + if (error.status === 400) { + const config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.snackBar.open('请核对您的输入格式是否正确','确定',config); + } + + if (error.error instanceof ErrorEvent) { + // 发生客户端或网络错误。相应处理。 + console.error('An error occurred:', error.error.message); + } else { + // 服务端返回http状态码 + // 服务端返回错误信息 + console.error( + `Backend returned code ${error.status}, ` + + `body was: ${error.error}`); + } + // 返回带有面向用户的错误信息 + return throwError( + error.error); + }; +} diff --git a/src/app/http-interceptors/cache-token.service.ts b/src/app/http-interceptors/cache-token.service.ts new file mode 100644 index 0000000..54f9a35 --- /dev/null +++ b/src/app/http-interceptors/cache-token.service.ts @@ -0,0 +1,40 @@ +import { Injectable } from '@angular/core'; +import { HttpClient } from '@angular/common/http' + +@Injectable({ + providedIn: 'root' +}) + +export class CacheTokenService { + + constructor(private http:HttpClient) { } + public timer; + + //刷新token令牌定时器 + startUp = ():void=>{ + window.clearInterval(this.timer) //清一遍定时器 + this.timer = window.setInterval(()=>{ + var token = sessionStorage.getItem("token"); + var refreshToken = sessionStorage.getItem("refreshToken"); + this.http.post('/api/Account/RefreshToken', { + token: token, + refreshToken: refreshToken + }).subscribe((data:any) => { + sessionStorage.setItem("level",data.level); + sessionStorage.setItem("token",data.token); + sessionStorage.setItem("refreshToken",data.refreshToken); + }) + },18*60*1000) + + } + + + + //删除定时器 + delete = ():void=> { + window.clearInterval(this.timer) + } + + + +} diff --git a/src/app/http-interceptors/index.ts b/src/app/http-interceptors/index.ts new file mode 100644 index 0000000..3e35136 --- /dev/null +++ b/src/app/http-interceptors/index.ts @@ -0,0 +1,9 @@ +import { HTTP_INTERCEPTORS } from '@angular/common/http'; + +import { BaseInterceptor } from './base-interceptor'; + +/** Http interceptor providers in outside-in order */ +export const httpInterceptorProviders = [ + { provide: HTTP_INTERCEPTORS, useClass: BaseInterceptor, multi: true }, + +]; \ No newline at end of file diff --git a/src/app/http-interceptors/tree.service.ts b/src/app/http-interceptors/tree.service.ts new file mode 100644 index 0000000..f6c9713 --- /dev/null +++ b/src/app/http-interceptors/tree.service.ts @@ -0,0 +1,38 @@ +import { Injectable } from '@angular/core'; + +@Injectable() +export class TreeService { + + + toTree(olddata){ + let newdata = [] + function getparentNode(parentId){ + return olddata.find((item)=>{ + return item.id == parentId + }) + } + olddata.forEach(item => { + var parentNode = getparentNode(item.parentId); + if(parentNode){ + if(!parentNode.children){ + parentNode.children = [] + } + + if (parentNode.children.length == 0) { + item.isTop = true; + } else { + item.isTop = false; + parentNode.children[parentNode.children.length -1].isBottom = false; + } + item.isBottom = true; + + parentNode.children.push(item) + }else{ + if(!item.parentId){//如果parentId为null + newdata.push(item) + } + } + }); + return newdata; + } +} \ No newline at end of file diff --git a/src/app/interface.ts b/src/app/interface.ts new file mode 100644 index 0000000..df5d7b2 --- /dev/null +++ b/src/app/interface.ts @@ -0,0 +1,51 @@ +export interface Data { + token:string, + refreshToken:string, + expires: number, + realName:string, + level:any +} + +export interface windows { + token:string +} +export enum isno { + "是", + "否" +} + +export enum PlanTypeEnum { + "zero", + "二维预案", + "三维预案", + "three", + "其他预案", + "five", + "six", + "seven", + "卡片预案" +} + +export enum AuditStatusEnum { + "zero", + "审核中", + "审核通过", + "", + "审核退回", + "five", + "six", + "seven", + "未提交审核" +} + +export enum PlanLevelEnum { + "编制级别0", + "总队", + "支队", + "编制级别3", + "大队", + "编制级别5", + "编制级别6", + "编制级别7", + "中队" +} \ No newline at end of file diff --git a/src/app/key-unit/allaround/allaround.component.html b/src/app/key-unit/allaround/allaround.component.html new file mode 100644 index 0000000..9d94ca3 --- /dev/null +++ b/src/app/key-unit/allaround/allaround.component.html @@ -0,0 +1,78 @@ +
+ + +
+ +
+
+ +
+
+ +
+
+ + +
+
+ + +
+
+ + + +
+
+ +

暂无数据,请前往平面图进行相关数据录入

+
+
+ + +
+ +
+
+ +
+
+
+ + +
+
+ + +
+
+ + + +
+
+ +

暂无数据,请前往平面图进行相关数据录入

+
+
+ +
+
\ No newline at end of file diff --git a/src/app/key-unit/allaround/allaround.component.scss b/src/app/key-unit/allaround/allaround.component.scss new file mode 100644 index 0000000..3f723b9 --- /dev/null +++ b/src/app/key-unit/allaround/allaround.component.scss @@ -0,0 +1,54 @@ +.content { + width: 100%; + height: 90%; + padding: 10px; + overflow-y: auto; +} + +//图片外部div +.allImgs { + display: flex; + overflow-y: auto; + flex-direction: row; + flex-wrap: wrap; + .imgBox{ + width: 300px; + height: 250px; + margin: 25px 35px 35px 35px; + display: inline-block; + position: relative; + .fixedImg { + width: 100%; + height: 170px; + text-align: center; + margin-bottom: 3px; + img { + width: auto; + height: auto; + max-width: 100%; + height: 100%; + cursor:pointer;} + } + } +} + +//预览图片 +.previewImgBox { + width: 1500px; + height: 700px; + text-align: center; + img{ + width: auto; + height: auto; + max-width: 100%; + height: 100%;} +} +.previewImgBottom { + text-align: center; + height: 30px; + margin: 20px auto; +} +//预览图片旋转角度 +.rotateA {transform: rotate(90deg) scale(0.75);} +.rotateB {transform: rotate(180deg)} +.rotateC {transform: rotate(270deg) scale(0.75);} \ No newline at end of file diff --git a/src/app/key-unit/allaround/allaround.component.spec.ts b/src/app/key-unit/allaround/allaround.component.spec.ts new file mode 100644 index 0000000..7849804 --- /dev/null +++ b/src/app/key-unit/allaround/allaround.component.spec.ts @@ -0,0 +1,25 @@ +import { async, ComponentFixture, TestBed } from '@angular/core/testing'; + +import { AllaroundComponent } from './allaround.component'; + +describe('AllaroundComponent', () => { + let component: AllaroundComponent; + let fixture: ComponentFixture; + + beforeEach(async(() => { + TestBed.configureTestingModule({ + declarations: [ AllaroundComponent ] + }) + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(AllaroundComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/key-unit/allaround/allaround.component.ts b/src/app/key-unit/allaround/allaround.component.ts new file mode 100644 index 0000000..4702938 --- /dev/null +++ b/src/app/key-unit/allaround/allaround.component.ts @@ -0,0 +1,78 @@ +import { Component, OnInit, Inject } from '@angular/core'; +import { HttpClient } from '@angular/common/http'; +import {MatDialog, MatDialogRef, MAT_DIALOG_DATA} from '@angular/material/dialog'; +import { ImgDetails } from './imgdetails.component' +import { MatSnackBar, MatSnackBarConfig } from '@angular/material/snack-bar'; +import { Router, ActivatedRoute } from '@angular/router'; + + + +@Component({ + selector: 'app-allaround', + templateUrl: './allaround.component.html', + styleUrls: ['./allaround.component.scss'] +}) +export class AllaroundComponent implements OnInit { + + constructor(private http: HttpClient,public dialog: MatDialog,public snackBar: MatSnackBar,private route:ActivatedRoute,) { } + + ngOnInit(): void { + this.getAllCompany() + this.getAllBuilding() + } + + AllAdjoining:any = []; //所有单位毗邻 + AllBuilding:any = []; //所有建筑 + 建筑毗邻图片 + + //获取所有单位毗邻图片 + getAllCompany () { + let id = {companyId:this.route.snapshot.queryParams.id} + this.http.get('/api/CompanyAdjoins',{params:id}).subscribe(data=>{ + this.AllAdjoining = data + this.AllAdjoining.forEach(element => {element.imgURL = element.imageUrls[0] +'?x-oss-process=image/resize,m_fill,h_170,w_299'}) + }) + } + + //获取所有建筑 + getAllBuilding () { + let id = {companyId:this.route.snapshot.queryParams.id} + this.http.get('/api/Buildings',{params:id}).subscribe((data:any)=>{ + if (data.length) { + this.AllBuilding = data + this.AllBuilding.forEach(element => { + element.allImgs = [] + }); + this.getAllArchitecture()} + }) + } + + //获取所有建筑毗邻图片 + getAllArchitecture () { + this.AllBuilding.forEach(element => { + let id = {buildingId:element.id} + this.http.get('/api/BuildingAdjoins',{params:id}).subscribe(data=>{ + element.allImgs = data + element.allImgs.forEach(element => {element.imgURL = element.imageUrls[0] +'?x-oss-process=image/resize,m_fill,h_170,w_299'}); + }) + }); + } + + //预览图片 + imgdetails(e){ + if (e.length && e!=null) { + let data = e + const dialogRef = this.dialog.open(ImgDetails, {//调用open方法打开对话框并且携带参数过去 + width: '1600px', + height:'900px',data}); + dialogRef.afterClosed().subscribe(); + } else{ + const config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.snackBar.open('暂无图片数据','确定',config); + } + } + + + +} diff --git a/src/app/key-unit/allaround/imgdetails.component.html b/src/app/key-unit/allaround/imgdetails.component.html new file mode 100644 index 0000000..b341979 --- /dev/null +++ b/src/app/key-unit/allaround/imgdetails.component.html @@ -0,0 +1,18 @@ +
图片详情
+
+
+
+ +
+
+
+ + +
+
+
+ +
+ +
\ No newline at end of file diff --git a/src/app/key-unit/allaround/imgdetails.component.ts b/src/app/key-unit/allaround/imgdetails.component.ts new file mode 100644 index 0000000..0bc8d65 --- /dev/null +++ b/src/app/key-unit/allaround/imgdetails.component.ts @@ -0,0 +1,54 @@ +import { Component, OnInit, Inject, ɵConsole } from '@angular/core'; +import { HttpClient } from '@angular/common/http'; +import {MatDialog, MatDialogRef, MAT_DIALOG_DATA} from '@angular/material/dialog'; +import { MatSnackBar } from '@angular/material/snack-bar'; +import Swiper from 'swiper'; + + + +@Component({ + selector: 'imgdetails', + templateUrl: './imgdetails.component.html', + styleUrls: ['./allaround.component.scss'] + }) + export class ImgDetails { + + constructor(private http:HttpClient,public dialog: MatDialog,public dialogRef: MatDialogRef, + @Inject(MAT_DIALOG_DATA) public data) { } + testSwiper: Swiper; + + ngOnInit(): void { + this.allImages = [] + this.data.forEach(element => { + element = `${element}?x-oss-process=image/auto-orient,1` + this.allImages.push(element) + }); + } + + ngAfterViewInit() { + this.testSwiper = new Swiper('.swiper-container', { + lazy: true, + direction: 'horizontal', + loop: false, + + // 如果需要前进后退按钮 + navigation: { + nextEl: '.swiper-button-next', + prevEl: '.swiper-button-prev', + } + }); + } + + allImages:any; //展示所有的图片 + rotationAngle:number=0; //旋转角度 + + //旋转图片 + rotate () { + this.rotationAngle = this.rotationAngle+90 + if (this.rotationAngle === 360) {this.rotationAngle = 0} + } + + + +} + \ No newline at end of file diff --git a/src/app/key-unit/basicinfo-look/basicinfo.component.html b/src/app/key-unit/basicinfo-look/basicinfo.component.html new file mode 100644 index 0000000..a3cea67 --- /dev/null +++ b/src/app/key-unit/basicinfo-look/basicinfo.component.html @@ -0,0 +1,511 @@ +
+ + + + + + 单位信息 + keyboard_arrow_down + + +
+
+
+
+
+ * + 统一社会信用代码: + + + +
+
+ 统一社会信用代码格式不正确 +
+
+
+
+ * + 单位类型: + + + {{item.name}} + + +
+
+ * + 联系人: + + + +
+
+ * + 联系电话: + + + +
+
+ 电话号码格式不正确 +
+
+
+
+ * + 辖区中队: + + + +
+ +
+ * + 单位地址: + + + +
+
+ 单位照片: +
+ +
+ +
+ + +
+ + + +
+
+
+
+
+ + + +
+
+ + + +
+ + +
+
+ 建筑名称: + + + + * +
+
+ 建筑类型: + + + {{n.name}} + + + * +
+ +
+

{{item.name}}

+
+ {{i.propertyName}}({{i.physicalUnit}}) + + + + + + + + + + + + + + + + * +
+ {{i.rulevalue}} +
+
+
+ +
+ +

自定义信息

+
+
+ +
+ + + + : + + + + * +
+
+
+ + +
+ +
+
+ 建筑名称: + + + + * +
+
+ 建筑类型: + + + {{n.name}} + + + * +
+

{{item.buildingBasicGroups[0].name}}

+
+ {{i.propertyName}} ({{i.physicalUnit}}) + + + + + + + + + + + + + + + + * +
+ {{i.rulevalue}} +
+
+
+ + +
+
+ +

{{item.buildingBasicGroups[1].name}}

+
+ + + + + + + + + + + + + + + + + + + + +
+ + + 装置区名称* + + 工艺流程* + + 火灾危险性* + + 灭火注意事项 + +
+
+ +
+ +

储罐信息

+
+ + + + +
+
+

{{x[0].name}}

+
+
+ {{i.propertyName}} {{i.physicalUnit}}: + + + + + * +
+ +
+

{{x[1].name}}

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + 罐区 + + 罐区编号* + + 储存介质* + + 储罐类型* + + 容量(m³)* + + 直径(m)* + + 高度(m)* + + 顶盖形式 + + 浮盘材质 + + 浮盘类型 + + 泡沫产生器型号 + + 泡沫产生器形式 + + 是否设置氮封惰化保护装置 + + 防护堤高度(m)* + + 半固定泡沫灭火接口数量 + + 其它设施 + +
+
+
+
+ + +
+ +

自定义信息

+
+
+ + +
+ + + + : + + + + * +
+
+ +
+ + + + +
+
+ +
+ +
+ +
+ +
+ + + + + + + + + diff --git a/src/app/key-unit/basicinfo-look/basicinfo.component.scss b/src/app/key-unit/basicinfo-look/basicinfo.component.scss new file mode 100644 index 0000000..d3562f7 --- /dev/null +++ b/src/app/key-unit/basicinfo-look/basicinfo.component.scss @@ -0,0 +1,264 @@ +.topbox{ + height: 485px; + width: 100%; + // border-bottom: 1px solid black; + .mainbox{ + height: 100%; + position: relative; + .mainleft{ + width:800px; + height: 100%; + // background-color: yellow; + float: left; + .inputbox{ + width: 343px; + height: 58px; + margin:2px 6px; + float: left; + text-align: end; + } + .organizationbox{ + width:538px; + height: 200px; + background: white; + position: absolute; + top: 164px; + left:166px; + z-index: 100; + border: 1px solid grey; + overflow: auto; + li{ + list-style: none; + + } + mat-tree-node{ + cursor: pointer; + } + mat-tree-node:hover{ + background: rgba(225, 225, 225, 0.8); + } + } + .addbtn{ + width: 695px; + position: absolute; + bottom: -495px; + text-align: center; + margin-bottom:20px; + button{ + margin: 0 4px; + } + } + .uploadimg{ + width: 400px; + height: 200px; + float: left; + margin-top:12px; + position: relative; + margin-left: 80px; + cursor: pointer; + span{ + float: left; + } + // img{ + // float: left; + // } + .uploadingimg{ + width: 299px; + height: 170px; + // background: url('../../../assets/images/upload2.png') no-repeat center center; + + position: absolute; + top: 0px; + left: 79px; + border: 1px dashed gray; + border-radius:3px; + } + + } + .image{ + // position: absolute; + // top: 199px; + // left: 160px; + // width: 299px; + // height: 170px; + input{ + // width: 299px; + // height: 170px; + width: 190px; + margin-top: 160px; + cursor: pointer; + } + // opacity:0; + + } + } + .mainright{ + float: left; + width: 600px; + height: 400px; + // position: absolute; + // right: 170px; + + } + } +} +.bottombox{ + // height:400px; + width: 100%; + // background-color: skyblue; + + .bottomtitle{ + height: 60px; + // background-color: orange; + line-height: 60px; + border-top: 1px solid black; + border-bottom: 1px solid black; + } + .houseinfobox{ + // height:340px; + overflow: auto; + .addhouseinfo{ + float: left; + } + .infobtnbox{ + margin-left: 800px; + position: absolute; + top: 30px; + right: 75px; + button{ + width: 80px; + height: 40px; + margin: 0 12px; + margin-top: 15px; + } + } + .infotitle{ + font-size: 28px; + font-weight: 900; + margin-left: 180px; + } + .houseinfoinput{ + width: 393px; + text-align: end; + margin-left:240px; + } + } +} + +.btn{ + width: 100%; + text-align: center; + button{ + margin: 0 8px; + } +} +.mat-spinner{ + margin-top: 58px; + margin-left: 203px; +} +.mat-table{ + width: 100%; +} + +table{ + width: 1000px; + thead{ + tr{ + th{ + width: 60px; + display: block; + float: left; + + } + } + } + tbody{ + tr{ + + td{ + width: 60px; + display: block; + float: left; + text-align: center; + } + } + } +} + +.deviceinfo{ + // border-bottom: 1px solid black;; + padding-bottom: 60px; +} +.tankdetailinfo{ + // border-bottom: 1px solid black;; + padding-bottom: 35px; + table{ + th{ + text-align: center; + } + } +} +.tankinfo{ + display: block; + width: 100%; + // height: 45px; + text-align: center; +} +// .adddeviceinfo{ +// // position: absolute; +// // left: 0px; +// } +.submit1{ + margin-left: -66px !important; +} +textarea { + vertical-align: middle; + border-radius: 5px; + padding: 5px; + width: 600px; + height: 110px; + resize: none; + } + //预览图片旋转角度 + .img1{ + transform:rotate(90deg) scale(0.55); + height: 100%; +} +.img2{ + transform:rotate(180deg); + // height: 100%; +} +.img3{ + transform:rotate(270deg) scale(0.55); + // height: 100%; +} +.img4{ + transform:rotate(90deg) scale(1.3); + // height: 100%; +} +.img5{ + transform:rotate(180deg); + // height: 100%; +} +.img6{ + transform:rotate(270deg) scale(1.3); + // height: 100%; +} +.imgbox{ + text-align: center; + height: 750px; + img{ + max-width: 1500px; + max-height: 740px; + } +} +.previewImgBottom{ + text-align: center; +} +.alert-danger { + margin-top: -16px; + text-align: left; + padding-left: 77px; + font-size: 12px; + color: red; + } \ No newline at end of file diff --git a/src/app/key-unit/basicinfo-look/basicinfo.component.ts b/src/app/key-unit/basicinfo-look/basicinfo.component.ts new file mode 100644 index 0000000..6357f13 --- /dev/null +++ b/src/app/key-unit/basicinfo-look/basicinfo.component.ts @@ -0,0 +1,1974 @@ +import { Component, OnInit, Inject ,ViewChild} from '@angular/core'; +import { MatTreeFlatDataSource, MatTreeFlattener } from '@angular/material/tree'; +import { FlatTreeControl } from '@angular/cdk/tree'; +import { HttpClient,HttpHeaders, HttpEventType } from '@angular/common/http'; +import { MatDialog, MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog'; +import { FormControl } from '@angular/forms'; +import { MatSnackBar ,MatSnackBarConfig} from '@angular/material/snack-bar'; +import format from 'date-fns/format'; +import { TreeService } from '../../http-interceptors/tree.service' +import { FileUploader, FileItem } from 'ng2-file-upload' +// import { House } from '../../interface' +import { DomSanitizer } from '@angular/platform-browser' +import { Injectable } from "@angular/core" +import { filter } from 'rxjs/operators'; +import { async } from '@angular/core/testing'; +import { MatTableDataSource } from '@angular/material/table'; +import { isNgTemplate } from '@angular/compiler'; +import * as _ from 'lodash'; +// import Swiper from 'swiper'; +import { LookMaster2 } from './lookmaster.component' +import { Router,ActivatedRoute } from '@angular/router' + +@Component({ + selector: 'app-basicinfo-look', + templateUrl: './basicinfo.component.html', + styleUrls: ['./basicinfo.component.scss'] +}) +export class BasicinfoLookComponent implements OnInit { + unitinfo:any={ + id: '', + name: '', //单位信息名字 + usci: '', //单位信用代码 + contacts: '', //联系人 + phone: '', //联系电话 + address: '', //单位地址 + imageUrl: '', //图片地址 + location: '', //单位地理位置 + modifiedTime: '', //信息修改时间 + organizationId: '', //所属组织机构 + organizationName: '', //组织机构名称 + buildingTypes: [ + { + id:'', + name:'' + } + ] + } + + uploader:FileUploader = new FileUploader({ //初始化上传事件 ng2-upload + url: `/api/Objects/PlanPlatform/${sessionStorage.getItem('companyId')}`, + method: "POST", + itemAlias: "uploadedfile", + autoUpload: false, + removeAfterUpload:true //上传之后是否在队列中移除,如果不移除就会出现无法上传第二次的情况 + }); + + + + + private _transformer = (node, level: number) => { //初始化tree + return { + expandable: !!node.children && node.children.length > 0, + name: node.name, + level: level, + id: node.id, + parentId: node.parentId, + children: node.children + }; + } + treeControl = new FlatTreeControl(node => node.level, node => node.expandable); + treeFlattener = new MatTreeFlattener(this._transformer, node => node.level, node => node.expandable, node => node.children); + dataSource = new MatTreeFlatDataSource(this.treeControl, this.treeFlattener); + + myControl = new FormControl(); + + isorganizationbox = false//控制辖区中队框的显示隐藏 + selectedorganization: any//所选的辖区中队 + selectedorganizationid:any //所选的辖区中队的id + highhouse = false//控制高层表单的显示 + houses: any = [] //存储当前单位的建筑信息 + defaultbuildingTypes :any //存储当前建筑的默认类型的id + buildingTypesname:any//存储当前建筑的默认类型name + buildingCustomData:any //存储当前建筑的自定义信息 + allunittype: any //所有单位类型 + allorganizing:any = [] //所有组织机构 + constructor(private router:Router,private route:ActivatedRoute,private http: HttpClient, private tree: TreeService, private sanitizer: DomSanitizer, public dialog: MatDialog,public snackBar: MatSnackBar) { } + + + unitId : any //当前单位id + ngOnInit(): void { + this.getallunittype() + this.getorganization() + // this.getunitinfo() + this.getunitallbuilding() + this.unitId = this.route.snapshot.queryParams.id + } + //获得所有单位类型 + getallunittype() { + this.http.get("/api/BuildingTypes/Simple").subscribe(data => { + this.allunittype = data + }) + } + //获得所有组织机构 + getorganization() { + this.http.get('/api/Organizations').subscribe( + (data: any) => { + this.allorganizing = data; + this.dataSource.data = this.tree.toTree(data); + this.getunitinfo(); + } + ) + } + //获得当前单位的基本信息 + getunitinfo(){ + + this.http.get(`/api/Companies/${this.unitId}`).subscribe((data:any)=>{ + // console.log(111,data) + if(data.buildingTypes.length){ + sessionStorage.setItem('buildingTypeId',data.buildingTypes[0].id) + }else{ + sessionStorage.setItem('buildingTypeId',"") + } + let node + this.allorganizing.forEach(item => { + if(item.id == data.organizationId){ + node = item + } + }); + if(node){ + if(!node.parentId){ + this.selectedorganization = node.name + }else{ + let namearr = [node.name] + let targetId = node.parentId; // 临时变量 + for(let i = 0; i < node.level ; i++){ + this.allorganizing.forEach(item => { + if(item.id == targetId ){ + namearr.push(item.name) + targetId = item.parentId; // 临时变量更新没有副作用 + } + }); + } + namearr.reverse() + let str = '' + namearr.forEach(item=>{ + str += '/' + item + }) + this.selectedorganization = str.substr(1) + } + } + + this.unitinfo = data + this.selectedorganizationid = data.organizationId + if(data.imageUrl){ + this.imgsrc = data.imageUrl + } + if(data.buildingTypes[0]){ + this.defaultbuildingTypes = data.buildingTypes[0].id + this.buildingTypesname = data.buildingTypes[0].name + } + }) + } + unitallbuilding:any = []//用于存储当前单位所有的建筑 + buildinginfoId:any = []//用于存储当前单位所有具体建筑的id + presentbuildinfoId:any // 用于存储当前单位第一个建筑的id + bigfor:any//循环(储罐信息+罐区信息)大组 + npdata:any = [] + newnpdata:any //用于存储石油化工 储罐信息/罐区情况的 datasource + + basicCategoryId:any //当前单位所有建筑中位于第一个的建筑id + deviceinfodata:any=[];//用于存储石油化工装置信息的数组 + zhuangzhiinfodatasource:any = [] //用于存储石油化工装置信息表格的数据来源 + newzhuangzhiinfodatasource:any= []//存储石油化工装置信息表格的 datasource形式 + devicedataSourcebox:any = [] //存储多个石油化工建筑的不同装置信息表格datasource + + + //数据格式化函数 将原始数据映射转化为表格需要的datasource + formatHandle(list) { + const result = [{}]; // tag 是从1开始,因此预置索引为0的项 + list.forEach((item) => { + const { tag, propertyName, propertyValue } = item; + if (result[tag] === undefined) { // 初始化对象 + result[tag] = {}; + } + const fieldMap = { // 字段映射,实现自动映射 + '罐区': 'tank', + '储罐编号': 'tankid', + '储存介质': 'tankmedium', + '储罐类型': 'tanktype', + '容量': 'tankcapacity', + '直径': 'tankdiameter', + '高度': 'tankheight', + '顶盖形式': 'tanktectum', + '浮盘材质': 'tanktexture', + '浮盘类型': 'platetype', + '泡沫产生器型号': 'foamgeneratorid', + '泡沫产生器形式': 'foamgeneratortype', + '是否设置氮封惰化保护装置': 'isprotect', + '防护堤高度': 'fendinggroyneheight', + '半固定泡沫灭火接口数量': 'portnum', + '其它设施': 'else' + }; + result[tag][fieldMap[propertyName]] = propertyValue; + }); + result.shift(); // 移除预置的 索引为0 的值 + return result; + } + + //将模板信息加工成附带自定义属性的信息 + getunithouse(data,n,x){ //data是原始模板在此基础上加工 n是当前建筑名称和建筑id、 x是当前循环的item信息 + data[0].buildingtypeId = n.id + data[0].name = x.name + data[0].username =x.name + data[0].buildtype = n.name + data[0].tongyong = true + data[0].index = x.index + if(data[0].buildtype == "石油化工类"){ + data[0].tongyong = false + data[0].isshiyou = true + this.deviceinfodata = data[0].buildingBasicGroups[1].propertyInfos //存储装置信息的初始数据,需要转换成datasource形式 + var map = [] + this.deviceinfodata.forEach((item,index) => { + if(item.tag == ""){ + item.tag = "1" + } + if(!(item.tag in map)){ + map[item.tag] = [] + } + map[item.tag].push(item) + }); + let zhuangzhiinfodatasource = [] + map.forEach((item,index)=>{ + zhuangzhiinfodatasource[index] = {} + item.forEach(i => { + if (i.propertyName == "装置区名称") { + zhuangzhiinfodatasource[index].name = i.propertyValue + } + if (i.propertyName == "工艺流程") { + zhuangzhiinfodatasource[index].flow = i.propertyValue + } + if (i.propertyName == "火灾危险性") { + zhuangzhiinfodatasource[index].danger = i.propertyValue + } + if (i.propertyName == "灭火注意事项") { + zhuangzhiinfodatasource[index].payattentionto = i.propertyValue + } + }); + }) + this.newzhuangzhiinfodatasource =[] //数据去空 + zhuangzhiinfodatasource.forEach(item=>{ + if(item !== "" && item != undefined){ + this.newzhuangzhiinfodatasource.push(item) + } + }) + this.devicedataSourcebox[data[0].buildingId] = new MatTableDataSource(this.newzhuangzhiinfodatasource) + data[0].newzhuangzhiinfodatasource = this.newzhuangzhiinfodatasource + + + //把bigfor分组取出来 先大循环 (储罐信息---储罐信息/罐区情况)为一组 + let noemptybigfordata = data[0].buildingBasicGroups + // if(noemptybigfordata.length > 4){ + // noemptybigfordata.forEach((item,index) => { + // if(!item.submitted && item.name !="装置信息"){ + // noemptybigfordata.splice(index, 1) + // } + // }) + // } + let bigtankgroups = noemptybigfordata.slice(2) + // console.log("bigtankgroups",bigtankgroups) + let proportion = 2; //按照比例切割 + let num = 0; + let bigfor =[]; + for(let i=0;i{ + item[1].propertyInfos.forEach(item => { + if(item.tag == ""){ + item.tag = 1 + } + }); + item[1].propertyInfos = this.formatHandle(item[1].propertyInfos) + + }) + data[0].bigfor = bigfor + } + // if(data[0].buildtype == "地铁类"){ + // data[0].tongyong = true + // // data[0].ditie = true + // } + return data[0] + } + + //点击建筑自定义信息的checkbox + isCustomData = false + checkCustomData(e){ + this.isCustomData = e.checked + } + //增加自定义信息行数 + addCustomData(item){ + item.buildingCustomData.customProperties.push({ + name: "", + value: "" + }) + } + //删除自定义信息行数 + deleteCustomData(item){ + item.buildingCustomData.customProperties.pop() + } + //得到建筑信息数据并进行处理 + allBuildings:any + getunitallbuilding(){ + this.houses = [] + this.unitId = this.route.snapshot.queryParams.id + this.http.get("/api/Buildings",{ + params:{ + companyId:this.unitId + } + }).subscribe(async (data:any)=>{ // 获得当前单位所有的建筑 + this.allBuildings = data + // console.log(data) + if(data.length != 0){ + this.basicCategoryId = data[0].buildingTypes[0].id + this.presentbuildinfoId = data[0].id // 用于存储当前单位第一个建筑的id + for (let i = 0, length = data.length; i < length; i++) {//循环所有建筑 + const n = data[i]; + const index = i; + this.buildinginfoId.push(n.id) + const result = await new Promise((resolve) => { + this.http.get("/api/BuildingBasicInfos",{ // 循环请求当前单位建筑每一个建筑的信息保存到数组中 + params:{ + companyId :this.unitId, + buildingId:n.id, + buildingType:n.buildingTypes[0].id + } + }).subscribe((data)=>{ + //获得当前建筑自定义信息并且添加到item自定义属性上 + let _data = data + this.http.get("/api/BuildingCustomData",{params:{ + buildingId:n.id + }}).subscribe((data:any)=>{ + _data[0].buildingCustomData = data + if(data && data.customProperties.length != 0){ + _data[0].isCustomData = true + }else{ + _data[0].isCustomData = false + _data[0].buildingCustomData ={ + id: "", + customProperties: [ + { + name: "", + value: "" + } + ], + buildingId: _data[0].buildingId + } + } + }) + //为每个建筑添加自定义属性 + data[0].buildingtypeId = n.buildingTypes[0].id + data[0].name = n.name + data[0].username = n.name + data[0].buildtype = n.buildingTypes[0].name + data[0].tongyong = true + data[0].index = index + + if(data[0].buildtype == "石油化工类"){ + data[0].tongyong = false + data[0].isshiyou = true + let noemptydeviceArr = data[0].buildingBasicGroups[1].propertyInfos + noemptydeviceArr.forEach((item,index) => { + if(item.tag == ""){ + noemptydeviceArr.splice(index,1) + } + }); + this.deviceinfodata = noemptydeviceArr //存储装置信息的初始数据,需要转换成datasource形式 + var map = [] + this.deviceinfodata.forEach((item,index) => { + if(!data[0].buildingBasicGroups[1].submitted){ + if(item.tag == ""){ + item.tag = "1" + } + } + + if(!(item.tag in map)){ + map[item.tag] = [] + } + map[item.tag].push(item) + }); + let zhuangzhiinfodatasource = [] + map.forEach((item,index)=>{ + zhuangzhiinfodatasource[index] = {} + item.forEach(i => { + if (i.propertyName == "装置区名称") { + zhuangzhiinfodatasource[index].name = i.propertyValue + } + if (i.propertyName == "工艺流程") { + zhuangzhiinfodatasource[index].flow = i.propertyValue + } + if (i.propertyName == "火灾危险性") { + zhuangzhiinfodatasource[index].danger = i.propertyValue + } + if (i.propertyName == "灭火注意事项") { + zhuangzhiinfodatasource[index].payattentionto = i.propertyValue + } + }); + }) + this.newzhuangzhiinfodatasource =[] //数据去空 + zhuangzhiinfodatasource.forEach(item=>{ + if(item !== "" && item != undefined){ + this.newzhuangzhiinfodatasource.push(item) + } + }) + this.devicedataSourcebox[data[0].buildingId] = new MatTableDataSource(this.newzhuangzhiinfodatasource) + data[0].newzhuangzhiinfodatasource = this.newzhuangzhiinfodatasource + + //把bigfor分组取出来 先大循环 (储罐信息---储罐信息/罐区情况)为一组 + let noemptybigfordata = data[0].buildingBasicGroups + + let bigtankgroups = noemptybigfordata.slice(2) + let proportion = 2; //按照比例切割 + let num = 0; + let bigfor =[]; + for(let i=0;i{ + + item[1].propertyInfos = this.formatHandle(item[1].propertyInfos) + + }) + data[0].bigfor = bigfor + } + resolve(data[0]) //把数据传递出去 + }) + }) + this.houses.push(result) // 并且把他添加到 tab 总体数组中 + } + } + // console.log(666,this.houses) + }) + + } + + unitinfotemplate:any //存储选择不同单位类型时的模板信息 + displayedColumns: string[]=['name', 'flow','danger','payattentionto']; + displayedColumns2: string[]=['tank','tankid', 'tankmedium','tanktype','tankcapacity','tankdiameter', 'tankheight','tanktectum','tanktexture','platetype', 'foamgeneratorid','foamgeneratortype','isprotect','fendinggroyneheight', 'portnum','else']; + devicedataSource:any; //存储石油化工模板中的装置信息表格 + tankinfodatabox:any = [ + [] + ] + // dataSourceArr = [] + tankinfodata:any=[];//用于存储石油化工储罐信息的数组 + adddeviceinfo2(e,item){//点击加一行 视图上多一行 + item.bigfor[e][1].propertyInfos.push({ + tank:"", + tankid:"", + tankmedium:"", + tanktype:"", + tankcapacity:"", + tankdiameter:"", + tankheight:"", + tanktectum:"", + tanktexture:"", + platetype:"", + foamgeneratorid:"", + foamgeneratortype:"", + isprotect:"", + fendinggroyneheight:"", + portnum:"", + else:"" + }) + item.bigfor[e][1].propertyInfos = [...item.bigfor[e][1].propertyInfos] + } + removedeviceinfo3(e,item){//点击减一行 + var isdeleted = confirm("确定要删除末行吗?") + if(isdeleted){ + if(item.bigfor[e][1].propertyInfos.length > 1){ + item.bigfor[e][1].propertyInfos.pop() + }else{ + const config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.snackBar.open('只剩一行,无法删除','确定',config); + } + item.bigfor[e][1].propertyInfos = [...item.bigfor[e][1].propertyInfos] + } + + } + + + //增加储罐大分组 + //在石油化工模板种点击增加储罐信息 + //获得模板信息 + templateinfo:any + gettemplateinfo(typeid){ + + } + + addtankbox(item,bigkey){ + this.http.get("/api/CompanyAccount/BasicInfos",{ + params:{ + companyId : this.unitId, + buildingType:item.buildingtypeId + } + }).subscribe((data:any)=>{ + // console.log(1314,data) + // console.log(777,data[0]) + item.bigfor.push([ + { + id: "", + name: "罐区"+ (item.bigfor.length+ 1), + type: 0, + addMode: 2, + basicGroupId:'', + basicCategoryId: item.basicCategoryId, + buildingBasicId: null, + buildingId: item.buildingId, + companyId: this.unitinfo.id, + enabled: true, + order: item.bigfor.length+2, + propertyInfos:data[0].buildingBasicGroups[2].propertyInfos + }, + { + addMode: 2, + basicCategoryId:item.basicCategoryId, + buildingBasicId:null, + buildingId: item.buildingId, + companyId: this.unitinfo.id, + enabled: true, + basicGroupId:'', + id: "", + name: "罐区" + (item.bigfor.length+ 1) +"/储罐信息", + order: item.bigfor.length+3, + propertyInfos: [ + { + else: "", + fendinggroyneheight: "", + foamgeneratorid: "", + foamgeneratortype: "", + isprotect: "", + platetype: "", + portnum: "", + tank: "", + tankcapacity: "", + tankdiameter: "", + tankheight: "", + tankid: "", + tankmedium: "", + tanktectum: "", + tanktexture: "", + tanktype: "" + } + ], + type: 1 + } + + ]) + }) + + } + //移除储罐大分组 + removetankbox(item,bigkey){ + if(item.bigfor.length > 1){ + var isdeleted = confirm("确定要删除末尾储罐分组吗?") + if(isdeleted){ + item.bigfor.pop() + } + }else{ + const config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.snackBar.open('只剩唯一储罐,无法删除','确定',config); + } + } + + //新建建筑时把原始建筑数据放进来进行加工处理成可用数据 + async changebuildingdata(data){ + let n = data + let yyy + let result = await new Promise(resolve=>{ + this.http.get("/api/BuildingBasicInfos",{ // 需要请求建筑信息的模板 + params:{ + companyId : this.unitId, + buildingId:data.id, + buildingType:data.buildingTypes[0].id + } + }).subscribe((data)=>{//此时的data才是模板详细信息 + let _data = data + this.http.get("/api/BuildingCustomData",{params:{ //-----处理建筑自定义属性部分 + buildingId:n.id + }}).subscribe(data=>{ + if(data){ + _data[0].isCustomData = true //如果data存在则把自定义属性isCustomData设为true + _data[0].buildingCustomData = data //把建筑自定义信息赋给buildingCustomData自定义属性 + }else{ + _data[0].isCustomData = false + _data[0].buildingCustomData ={ //否则设为false,并且把自定义信息属性赋值为空 + id: "", + customProperties: [ + { + name: "", + value: "" + } + ], + buildingId: _data[0].buildingId + } + } + }) + data[0].buildingtypeId = n.buildingTypes[0].id + data[0].buildtype = n.buildingTypes[0].name + data[0].name = n.name + data[0].username = n.name + data[0].tongyong = true + data[0].index = this.houses.length ////////////////// + if(data[0].buildtype == "石油化工类"){ + data[0].tongyong = false + data[0].isshiyou = true //如果是石油化工则启用石油化工的模板 + this.deviceinfodata = data[0].buildingBasicGroups[1].propertyInfos //存储装置信息表格的初始数据,需要转换成datasource形式 + var map = [] + this.deviceinfodata.forEach((item,index) => { + if(item.tag == ""){ + item.tag = "1" + } + if(!(item.tag in map)){ + map[item.tag] = [] + } + map[item.tag].push(item) + }); + let zhuangzhiinfodatasource = [] + map.forEach((item,index)=>{ + zhuangzhiinfodatasource[index] = {} + item.forEach(i => { + if (i.propertyName == "装置区名称") { + zhuangzhiinfodatasource[index].name = i.propertyValue + } + if (i.propertyName == "工艺流程") { + zhuangzhiinfodatasource[index].flow = i.propertyValue + } + if (i.propertyName == "火灾危险性") { + zhuangzhiinfodatasource[index].danger = i.propertyValue + } + if (i.propertyName == "灭火注意事项") { + zhuangzhiinfodatasource[index].payattentionto = i.propertyValue + } + }); + }) + this.newzhuangzhiinfodatasource =[] //数据去空 + zhuangzhiinfodatasource.forEach(item=>{ + if(item !== "" && item != undefined){ + this.newzhuangzhiinfodatasource.push(item) + } + }) + this.devicedataSourcebox[data[0].buildingId] = new MatTableDataSource(this.newzhuangzhiinfodatasource) //强制渲染表格 + data[0].newzhuangzhiinfodatasource = this.newzhuangzhiinfodatasource + + + //把bigfor分组取出来 先大循环 (储罐信息---储罐信息/罐区情况)为一组 + let bigtankgroups = data[0].buildingBasicGroups.slice(2) + let proportion = 2; //按照比例切割 + let num = 0; + let bigfor =[]; + for(let i=0;i{ + item[1].propertyInfos.forEach(item => { + if(item.tag == ""){ + item.tag = 1 + } + }); + item[1].propertyInfos = this.formatHandle(item[1].propertyInfos) + }) + data[0].bigfor = bigfor + } + if(data[0].buildtype == "地铁类"){ + data[0].tongyong = true + // data[0].ditie = true + } + yyy = data[0] + resolve(yyy) + }) + }) + return result + } + + + + //点击不同的tab选项 + selecttab(e) { + } + + FunData(e){//切割数组 + let proportion = 2; //按照比例切割 + let num = 0; + let _data =[]; + for(let i=0;i { + if(item.id == targetId ){ + namearr.push(item.name) + targetId = item.parentId; // 临时变量更新没有副作用 + } + }); + } + namearr.reverse() + let str = '' + namearr.forEach(item=>{ + str += '/' + item + }) + + this.selectedorganization = str.substr(1) + } +} + + //关闭辖区中队隐藏框 + closeorganizationbox() { + this.isorganizationbox = false + } + + //打开辖区中队隐藏框 + openorganizationbox() { + this.isorganizationbox = true + } + + hasChild = (_: number, node: any) => node.expandable; + + // imgsrc = "../../../assets/upload.jpg" //没有上传图片时显示的图片,当上传后就会被替换,即保存时需要传的图片地址参数 + imgsrc = "" + imgUrl = ""//返回来的图片地址后缀 + file: any; //上传的文件 + objectName: any; //上传对象名 + uploadId: any; //上传分块上传事件编号 + isspinner:boolean=false //控制进度圈的显示隐藏 + PartNumberETag: any = []; //分块上传每次返回需要保存的信息 + //change选择文件 + filechange(e) { + this.file = e.target.files[0] || null //上传的文件 + var reader = new FileReader(); + reader.readAsDataURL(this.file); + var image:any = new Image(); + reader.onload = function(){ + image.src = reader.result + } + setTimeout(() => { + if(image.width>=4096 || image.height>=5000 ){ + const config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.snackBar.open('请选择分辨率小于4096*5000的图片','确定',config); + }else{ + if(this.file){ + this.startUploading() + } + } + + }, 500); + } + //查看单位大图 + lookmaster(){ + const dialogRef = this.dialog.open(LookMaster2, {//调用open方法打开对话框并且携带参数过去 + width: '1600px', + height:'900px', + data: {img:this.imgsrc} + }); + dialogRef.afterClosed().subscribe( + + ); + } + //上传文件 + startUploading() { + this.isspinner = true + let file = this.file || null //获取上传的文件 + let fileSize = file.size || null //上传文件的总大小 + let shardSize = 5 * 1024 * 1024 //5MB一个分片 + + if (file && fileSize <= shardSize) { //上传文件<=5MB时 + // this.upload() + let formData = new FormData() + formData.append("file",file) + this.http.post(`/api/Objects/PlanPlatform/${sessionStorage.getItem('companyId')}`,formData).subscribe((data:any)=>{ + this.isspinner = false + this.imgUrl = data.objectName + this.imgsrc = `/api/Objects/PlanPlatform/${this.imgUrl}?x-oss-process=image/resize,m_fill,h_170,w_299` + const config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.snackBar.open('上传成功','确定',config); + }) + } else if (file && fileSize >= shardSize) { //上传文件>5MB时,分块上传 + + let data = { filename: file.name } + this.http.post(`/api/NewMultipartUpload/PlanPlatform/${this.unitinfo.id}`, {}, { params: data }).subscribe((data: any) => { //初始化分段上传 + this.objectName = data.objectName + this.uploadId = data.uploadId + this.subsectionUploading() + }) + } + } + + + + + //小于5MB不需要分块上传 + upload(){ + this.uploader.queue[0].upload();//开始上传 + this.uploader.queue[0].onSuccess = (response, status, headers) => { + // 上传文件成功 + if (status == 201) { + // 上传文件后获取服务器返回的数据 + const config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.snackBar.open('上传成功','确定',config); + this.isspinner = false + let tempRes = JSON.parse(response); + this.imgUrl = tempRes.objectName + this.imgsrc = `/api/Objects/PlanPlatform/${this.imgUrl}?x-oss-process=image/resize,m_fill,h_170,w_299` + }else { + // 上传文件后获取服务器返回的数据错误 + } + }; + this.uploader.queue[0].onError = (response, status, headers) => { + if (status == 401) { + const config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.snackBar.open('上传失败','确定',config); + } + }; + } + + //开始分块上传 + async subsectionUploading () { + let file = this.file || null //获取上传的文件 + let fileSize = file.size || null //上传文件的总大小 + let shardSize = 5 * 1024 * 1024 //5MB一个分片 + let allSlice = Math.ceil(fileSize / shardSize) //总文件/5MB===共分多少段 + + for (let i = 0;i < allSlice;i++) { //循环分段上传 + let start = i * shardSize //切割文件开始位置 + let end = Math.min(fileSize, start + shardSize); //切割文件结束位置 + let formData = new FormData() + formData.append("file",file.slice(start, end)) + + // 同步写法实现异步调用 + let result = await new Promise((resolve, reject) => { + // await 需要后面返回一个 promise 对象 + this.http.post(`/api/MultipartUpload/PlanPlatform/${this.objectName}?uploadId=${this.uploadId}&partNumber=${i+1}`,formData).subscribe((data:any)=>{ + let msg = { + "partNumber":data.partNumber || null, + "eTag": data.eTag || null + } + resolve(msg) // 调用 promise 内置方法处理成功 + }) + }); + this.PartNumberETag.push(result) + if (this.PartNumberETag.length === allSlice) { + this.endUploading() + } + } + } + //完成分块上传 + endUploading() { + let data = this.PartNumberETag + let paramsData = { uploadId: this.uploadId } + this.http.post(`/api/CompleteMultipartUpload/PlanPlatform/${this.objectName}`, data, { params: paramsData }).subscribe(data => { + this.imgsrc = `/api/Objects/PlanPlatform/${this.objectName}?x-oss-process=image/resize,m_fill,h_170,w_299` + this.isspinner = false + this.PartNumberETag = [] + this.uploader.clearQueue(); //清空input控件文件 + }) + } + //删除具体建筑 + deletedbuilding(item){ + var isdeleted = confirm("确定要删除此建筑吗?") + if(isdeleted){ + //请求删除接口 + this.http.delete(`/api/Buildings/${item.buildingId}`).subscribe(data=>{ + + const config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.snackBar.open('删除成功','确定',config); + this.houses.splice(this.houses.findIndex(items=>items==item),1) + }) + } + } + + //提交单位基本信息 + onSubmit(value,invalid,form) { + if(invalid){ + const config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.snackBar.open('请填写必填项','确定',config); + }else{ + sessionStorage.setItem('buildingTypeId',value.unittype) + let time =new Date() + let body = { + id: this.unitinfo.id, + name: this.unitinfo.name, + usci: value.creditcode, + contacts: value.linkman, + phone: value.linkphone, + address: value.unitaddress, + imageUrl: this.imgsrc, + location: { + x: 0, + y: 0 + }, + modifiedTime: time, + organizationId: this.selectedorganizationid, + organizationName: null, + buildingTypes: [ + { + id: value.unittype, + name: this.buildingTypesname + } + ] + } + this.http.put(`/api/Companies/${this.unitId}`,body).subscribe((data:any)=>{ //修改单位基本信息 + this.getunitinfo() + if(!this.houses.length){ + const config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.snackBar.open('单位基本信息保存成功,请填写单位建筑模板信息','确定',config); + // alert("单位基本信息保存成功,请填写单位建筑模板信息") + let order = 0 + let addbody = { //请求创建单位基本信息成功后 直接创建出一个主体建筑模板 + id: "",//即将要生成具体建筑的id + name: "主体建筑", + order: order, + enabled: true, + companyId: this.unitinfo.id, + buildingTypes: [ + { + id: value.unittype, + name: "" + } + ] + } + this.http.post("/api/Buildings",addbody).subscribe(data=>{//首先创建建筑成功了,需要刷出当前建筑类型的模板 + this.getunitallbuilding() + }) + }else{ + const config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.snackBar.open('保存成功','确定',config); + } + }), + err=>{ + const config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.snackBar.open('请填写正确信息','确定',config); + } + } + + + } + selected:any + + isshowrule:boolean = false + rulevalue:any + inputchange(e,name,value,item){ + // console.log(e.target.value,name,value,item) + // console.log(item) + if(name == "≥"){ + if(Number(e.target.value)< Number(value)){ + item.isshowrule = true + item.rulevalue = `请输入≥${value}的值` + }else{ + item.isshowrule = false + } + } + if(name == "≤"){ + if(Number(e.target.value) > Number(value)){ + item.isshowrule = true + item.rulevalue = `请输入≤${value}的值` + }else{ + item.isshowrule = false + } + } + if(name == "Range"){ + let rangenum = value.split(",") + // console.log(rangenum) + if(Number(e.target.value) < Number(rangenum[0]) || Number(e.target.value) >= Number(rangenum[1])){ + item.isshowrule = true + item.rulevalue = `请输入位于${Number(rangenum[0])}和${Number(rangenum[1])-1}之间的值` + }else{ + item.isshowrule = false + } + } + } + + //切换建筑类型 + templatebuildtype(n ,item,key){ + this.http.get("/api/Buildings",{ + params:{ + companyId:this.unitId + } + }).subscribe((data:any)=>{ + this.allBuildings = data + this.http.put(`/api/Buildings/${item.buildingId}`,{ //修改当前建筑类型 + id: item.buildingId, + name: item.housename, + order: this.allBuildings[key].order, + enabled: true, + companyId: this.unitinfo.id, + buildingTypes: [ + { + id: n.id, + name: n.name + } + ] + }).subscribe(data=>{ + this.http.get("/api/BuildingBasicInfos",{//请求当前建筑类型的模板信息保存到数组中 + params:{ + companyId :this.unitId, + buildingId:item.buildingId, + buildingType:n.id + } + }).subscribe(data=>{ + this.getunithouse(data,n,item) + this.houses[item.index] = data[0] + + let _data = data + this.http.get("/api/BuildingCustomData",{params:{ + buildingId:item.buildingId + }}).subscribe((data:any)=>{ + _data[0].buildingCustomData = data + if(data && data.customProperties.length != 0){ + _data[0].isCustomData = true + }else{ + _data[0].isCustomData = false + _data[0].buildingCustomData ={ + id: "", + customProperties: [ + { + name: "", + value: "" + } + ], + buildingId: _data[0].buildingId + } + } + }) + }) + }) + }) + + + } + + deviceinfo=[] //用于存储石头化工的第一个表格 + //提交单位模板信息 + onSubmit2(value,item,key,invalid){ + this.http.get("/api/Buildings",{ + params:{ + companyId:this.unitId + } + }).subscribe((data:any)=>{ + this.allBuildings = data + if(invalid){ + const config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.snackBar.open('请填写必填项','确定',config); + }else{ + this.http.put(`/api/Buildings/${item.buildingId}`,{ //(通用)只修改建筑名称和建筑类型 + id: item.buildingId, + name: value.housename, + order: this.allBuildings[key].order, + enabled: true, + companyId: this.unitinfo.id, + buildingTypes: [ + { + id: item.buildingtypeId, + name: item.buildtype + } + ] + }).subscribe((data:any)=>{ + this.houses[item.index].username = item.name + }, + err=>{ + alert("名称和类型保存失败") + }) + + if(value.checkbuilding){//如果勾选了自定义信息的checkbox + var CustomDataval = [] + for (const key in value) { + if (key.indexOf("CustomData") != -1) { + CustomDataval.push(value[key]) + } + } + let newCustomData = this.FunData(CustomDataval) + let newCustomDataval = [] + newCustomData.forEach(n=>{ + newCustomDataval.push({ + name:n[0], + value:n[1] + }) + }) + let CustomDatabody = { + id: "", + customProperties: newCustomDataval, + buildingId: item.buildingId + } + this.http.post("/api/BuildingCustomData",CustomDatabody,{params:{ + buildingId:item.buildingId + }}).subscribe(data=>{ + + }, + err=>{ + alert("自定义信息保存失败") + }) + }else{ + let CustomDatabody = { + id: "", + customProperties: [], + buildingId: item.buildingId + } + this.http.post("/api/BuildingCustomData",CustomDatabody,{params:{ + buildingId:item.buildingId + }}).subscribe(data=>{ + + }, + err=>{ + alert("自定义信息保存失败") + }) + } + + + if(item.buildtype != "石油化工类" && item.buildtype != "地铁类"){ + // console.log(this.houses[key]) + // console.log(value) + this.houses[key].buildingBasicGroups[0].propertyInfos.forEach(item => { + + if(item.propertyValue || item.propertyValue == 0){ + // item.propertyValue = "" + value[key] + item.propertyValue = String(item.propertyValue) + } + + }); + let newObj = _.cloneDeep(this.houses[key]) //把数据深拷贝取出来进行操作 + newObj.buildingBasicGroups[0].buildingId = item.buildingId + newObj.buildingBasicGroups[0].companyId = this.unitinfo.id + newObj.buildingBasicGroups[0].submitted = true //把是否提交过变为true + delete newObj.name + delete newObj.username + delete newObj.buildtype + delete newObj.tongyong + delete newObj.index + delete newObj.isCustomData + delete newObj.buildingCustomData + newObj.buildingBasicGroups[0].propertyInfos.forEach(item => { + delete item.isshowrule + delete item.rulevalue + }); + + let body = newObj + let newbody = [] + newbody.push(body) + if(newbody[0].buildingBasicGroups.length){ + this.http.post("/api/BuildingBasicInfos",newbody,{ + params:{ + companyId : this.unitId, + buildingId :newbody[0].buildingId + } + }).subscribe((data:any)=>{ + this.houses[key].id = data[0].id + const config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.snackBar.open('建筑信息保存成功','确定',config); + }, + err=>{ + const config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.snackBar.open('请检查输入数据是否有误','确定',config); + }) + } + } + if(item.buildtype == "石油化工类"){ + // console.log(888,item) + let bodyObj = _.cloneDeep(item) + delete bodyObj.name + delete bodyObj.username + delete bodyObj.isshiyou + delete bodyObj.newzhuangzhiinfodatasource + delete bodyObj.tongyong + delete bodyObj.buildtype + delete bodyObj.buildingtypeId + delete bodyObj.bigfor + delete bodyObj.index + delete bodyObj.isCustomData + delete bodyObj.buildingCustomData + // console.log(456,bodyObj) + bodyObj.buildingBasicGroups[0].propertyInfos.forEach(item => { + delete item.isshowrule + delete item.rulevalue + }); + //修改基本信息 + bodyObj.buildingBasicGroups[0].propertyInfos.forEach(item => { + for (const key in value) { + if (item.propertyName == key) { + if(item.propertyValue || item.propertyValue == 0){ + // item.propertyValue = "" + value[key] + item.propertyValue = String(value[key]) + } + + } + } + }); + bodyObj.buildingBasicGroups[0].submitted = true + bodyObj.buildingBasicGroups[0].buildingId = item.buildingId + bodyObj.buildingBasicGroups[0].companyId = this.unitinfo.id + //石油化工类的 装置信息 就提交这个表单——————————————————————————————this.deviceinfo 记得清空 + // console.log(this.deviceinfodata) + if(bodyObj.buildingBasicGroups[1].submitted){ //如果用户点击了并填写了装置信息就提交这个表格数据 + this.deviceinfo = [] + item.newzhuangzhiinfodatasource.forEach((element,index) => { + this.deviceinfo.push({ + propertyName: "装置区名称", + propertyValue: element.name, + propertyType: 0, + required: true, + ruleName: "", + ruleValue: "", + physicalUnit: "", + order:0, + enabled: true, + visible: true, + tag: String(index + 1) + }, + { + propertyName: "工艺流程", + propertyValue: element.flow, + propertyType: 0, + required: true, + ruleName: "", + ruleValue: "", + physicalUnit: "", + order:1, + enabled: true, + visible: true, + tag: String(index + 1) + }, + { + propertyName: "火灾危险性", + propertyValue: element.danger, + propertyType: 0, + required: true, + ruleName: "", + ruleValue: "", + physicalUnit: "", + order:2, + enabled: true, + visible: true, + tag: String(index + 1) + }, + { + propertyName: "灭火注意事项", + propertyValue: element.payattentionto, + propertyType: 1, + required: false, + ruleName: "", + ruleValue: "", + physicalUnit: "", + order:3, + enabled: true, + visible: true, + tag: String(index + 1) + }) + }); + }else{//否则就传一个空的 + this.deviceinfo = [ + { + propertyName: "装置区名称", + propertyValue: "", + propertyType: 0, + required: true, + ruleName: "", + ruleValue: "", + physicalUnit: "", + order: 0, + enabled: true, + visible: true, + tag: "1" + }, + { + propertyName: "工艺流程", + propertyValue: "", + propertyType: 0, + required: true, + ruleName: "", + ruleValue: "", + physicalUnit: "", + order: 0, + enabled: true, + visible: true, + tag: "1" + }, + { + propertyName: "火灾危险性", + propertyValue: "", + propertyType: 0, + required: true, + ruleName: "", + ruleValue: "", + physicalUnit: "", + order: 0, + enabled: true, + visible: true, + tag: "1" + }, + { + propertyName: "灭火注意事项", + propertyValue: "", + propertyType: 1, + required: false, + ruleName: "", + ruleValue: "", + physicalUnit: "", + order: 0, + enabled: true, + visible: true, + tag: "1" + } + ] + } + bodyObj.buildingBasicGroups[1].propertyInfos = this.deviceinfo + bodyObj.buildingBasicGroups[1].buildingId = item.buildingId + bodyObj.buildingBasicGroups[1].companyId = this.unitinfo.id + + + if(bodyObj.buildingBasicGroups[2].submitted){ //如果勾选了储罐信息 则直接提交当前bodyObj + var map = {}; //用于存储石油化工要提交的储罐信息表单 + for (let key in value) { + if (key.indexOf('tanker') != -1) { + const list = key.split('-'); // 2,tanker,1 + const orderKey = list[0]; // 2 or 3 + if (!(orderKey in map)) { + map[orderKey] = []; // map[2] or map[3] = []; + } + map[orderKey][list[2]] = value[key]; // map[2][1] = xxxxx + } + } + + bodyObj.buildingBasicGroups.splice( 2 , bodyObj.buildingBasicGroups.length) + + // console.log(123, item) + + let basictankinfobody:any = {} + + for(let key in map){//------------------------------------------------------------石油化工 储罐信息 + + + basictankinfobody = { + id: null, + name: "罐区" + (Number(key)-1), + type: 0, + addMode: 2, + basicGroupId:'', + submitted:true, + isOptional:true, + order: Number(key), + enabled: true, + propertyInfos: item.bigfor[Number(key)-2][0].propertyInfos, + basicCategoryId: item.basicCategoryId, + buildingBasicId: null, + buildingId: item.buildingId,//当前建筑id + companyId: this.unitinfo.id//当前企业id + } + + bodyObj.buildingBasicGroups.push(basictankinfobody) + } + + + let basictankchildinfobody:any = []//-------------后续储罐信息以及储罐信息/罐区情况都push到这个数组中 + item.bigfor.forEach(item => { + basictankchildinfobody.push(item[1].propertyInfos) + }); + var _item = item + basictankchildinfobody.forEach((item,index) => { + let tankfieldArr = [] + item.forEach((element,key) => { + tankfieldArr.push( + { + propertyName: "罐区", + propertyValue: element.tank, + propertyType: 0, + required: false, + ruleName: "", + ruleValue: "", + physicalUnit: "", + order: 0, + enabled: true, + visible: true, + tag:String(key + 1) + }, + { + propertyName: "储罐编号", + propertyValue: element.tankid, + propertyType: 0, + required: true, + ruleName: "", + ruleValue: "", + physicalUnit: "", + order: 0, + enabled: true, + visible: true, + tag:String(key + 1) + }, + { + propertyName: "储存介质", + propertyValue: element.tankmedium, + propertyType: 0, + required: true, + ruleName: "", + ruleValue: "", + physicalUnit: "", + order: 0, + enabled: true, + visible: true, + tag:String(key + 1) + }, + { + propertyName: "储罐类型", + propertyValue: element.tanktype, + propertyType: 0, + required: true, + ruleName: "", + ruleValue: "", + physicalUnit: "", + order: 0, + enabled: true, + visible: true, + tag:String(key + 1) + }, + { + propertyName: "容量", + propertyValue: element.tankcapacity, + propertyType: 2, + required: true, + ruleName: "", + ruleValue: "", + physicalUnit: "㎡", + order: 0, + enabled: true, + visible: true, + tag:String(key + 1) + }, + { + propertyName: "直径", + propertyValue:element.tankdiameter, + propertyType: 2, + required: true, + ruleName: "", + ruleValue: "", + physicalUnit: "m", + order: 0, + enabled: true, + visible: true, + tag:String(key + 1) + }, + { + propertyName: "高度", + propertyValue: element.tankheight, + propertyType: 2, + required: true, + ruleName: "", + ruleValue: "", + physicalUnit: "m", + order: 0, + enabled: true, + visible: true, + tag:String(key + 1) + }, + { + propertyName: "顶盖形式", + propertyValue: element.tanktectum, + propertyType: 0, + required: false, + ruleName: "", + ruleValue: "", + physicalUnit: "", + order: 0, + enabled: true, + visible: true, + tag:String(key + 1) + }, + { + propertyName: "浮盘材质", + propertyValue: element.tanktexture, + propertyType: 0, + required: false, + ruleName: "", + ruleValue: "", + physicalUnit: "", + order: 0, + enabled: true, + visible: true, + tag:String(key + 1) + }, + { + propertyName: "浮盘类型", + propertyValue: element.platetype, + propertyType: 0, + required: false, + ruleName: "", + ruleValue: "", + physicalUnit: "", + order: 0, + enabled: true, + visible: true, + tag:String(key + 1) + }, + { + propertyName: "泡沫产生器型号", + propertyValue: element.foamgeneratorid, + propertyType: 0, + required: false, + ruleName: "", + ruleValue: "", + physicalUnit: "", + order: 0, + enabled: true, + visible: true, + tag:String(key + 1) + }, + { + propertyName: "泡沫产生器形式", + propertyValue: element.foamgeneratortype, + propertyType: 0, + required: false, + ruleName: "", + ruleValue: "", + physicalUnit: "", + order: 0, + enabled: true, + visible: true, + tag:String(key + 1) + }, + { + propertyName: "是否设置氮封惰化保护装置", + propertyValue: element.isprotect, + propertyType: 0, + required: false, + ruleName: "", + ruleValue: "", + physicalUnit: "", + order: 0, + enabled: true, + visible: true, + tag:String(key + 1) + }, + { + propertyName: "防护堤高度", + propertyValue: element.fendinggroyneheight, + propertyType: 2, + required: true, + ruleName: "", + ruleValue: "", + physicalUnit: "m", + order: 0, + enabled: true, + visible: true, + tag:String(key + 1) + }, + { + propertyName: "半固定泡沫灭火接口数量", + propertyValue: element.portnum, + propertyType: 2, + required: false, + ruleName: "", + ruleValue: "", + physicalUnit: "个", + order: 0, + enabled: true, + visible: true, + tag:String(key + 1) + }, + { + propertyName: "其它设施", + propertyValue: element.else, + propertyType: 0, + required: false, + ruleName: "", + ruleValue: "", + physicalUnit: "", + order: 0, + enabled: true, + visible: true, + tag:String(key + 1) + } + ) + }); + basictankchildinfobody={// + id: null, + name: "罐区" + Number(index+1) + "/储罐信息", + type: 1, + addMode: 2, + basicGroupId:'', + order: Number(index + 2), + enabled: true, + submitted:true, + isOptional:true, + propertyInfos: tankfieldArr, + basicCategoryId: _item.basicCategoryId, + buildingBasicId: null, + buildingId: _item.buildingId, + companyId: this.unitinfo.id + } + bodyObj.buildingBasicGroups.push(basictankchildinfobody) + }); + }else{ + + + bodyObj.buildingBasicGroups[2].buildingId = item.buildingId + bodyObj.buildingBasicGroups[2].companyId = this.unitinfo.id + bodyObj.buildingBasicGroups[2].propertyInfos.forEach(item=>{ + item.propertyValue = "" + }) + bodyObj.buildingBasicGroups[3].buildingId = item.buildingId + bodyObj.buildingBasicGroups[3].companyId = this.unitinfo.id + bodyObj.buildingBasicGroups[3].propertyInfos = [ + { + propertyName: "罐区", + propertyValue: "", + propertyType: 0, + required: false, + ruleName: "", + ruleValue: "", + physicalUnit: "", + order: 0, + enabled: true, + visible: true, + tag:"1" + }, + { + propertyName: "储罐编号", + propertyValue: "", + propertyType: 0, + required: true, + ruleName: "", + ruleValue: "", + physicalUnit: "", + order: 0, + enabled: true, + visible: true, + tag:"1" + }, + { + propertyName: "储存介质", + propertyValue: "", + propertyType: 0, + required: true, + ruleName: "", + ruleValue: "", + physicalUnit: "", + order: 0, + enabled: true, + visible: true, + tag:"1" + }, + { + propertyName: "储罐类型", + propertyValue:"", + propertyType: 0, + required: true, + ruleName: "", + ruleValue: "", + physicalUnit: "", + order: 0, + enabled: true, + visible: true, + tag:"1" + }, + { + propertyName: "容量", + propertyValue: "", + propertyType: 2, + required: true, + ruleName: "", + ruleValue: "", + physicalUnit: "㎡", + order: 0, + enabled: true, + visible: true, + tag:"1" + }, + { + propertyName: "直径", + propertyValue:"", + propertyType: 2, + required: true, + ruleName: "", + ruleValue: "", + physicalUnit: "m", + order: 0, + enabled: true, + visible: true, + tag:"1" + }, + { + propertyName: "高度", + propertyValue: "", + propertyType: 2, + required: true, + ruleName: "", + ruleValue: "", + physicalUnit: "m", + order: 0, + enabled: true, + visible: true, + tag:"1" + }, + { + propertyName: "顶盖形式", + propertyValue: "", + propertyType: 0, + required: false, + ruleName: "", + ruleValue: "", + physicalUnit: "", + order: 0, + enabled: true, + visible: true, + tag:"1" + }, + { + propertyName: "浮盘材质", + propertyValue:"", + propertyType: 0, + required: false, + ruleName: "", + ruleValue: "", + physicalUnit: "", + order: 0, + enabled: true, + visible: true, + tag:"1" + }, + { + propertyName: "浮盘类型", + propertyValue: "", + propertyType: 0, + required: false, + ruleName: "", + ruleValue: "", + physicalUnit: "", + order: 0, + enabled: true, + visible: true, + tag:"1" + }, + { + propertyName: "泡沫产生器型号", + propertyValue:"", + propertyType: 0, + required: false, + ruleName: "", + ruleValue: "", + physicalUnit: "", + order: 0, + enabled: true, + visible: true, + tag:"1" + }, + { + propertyName: "泡沫产生器形式", + propertyValue: "", + propertyType: 0, + required: false, + ruleName: "", + ruleValue: "", + physicalUnit: "", + order: 0, + enabled: true, + visible: true, + tag:"1" + }, + { + propertyName: "是否设置氮封惰化保护装置", + propertyValue:"", + propertyType: 0, + required: false, + ruleName: "", + ruleValue: "", + physicalUnit: "", + order: 0, + enabled: true, + visible: true, + tag:"1" + }, + { + propertyName: "防护堤高度", + propertyValue:"", + propertyType: 2, + required: true, + ruleName: "", + ruleValue: "", + physicalUnit: "m", + order: 0, + enabled: true, + visible: true, + tag:"1" + }, + { + propertyName: "半固定泡沫灭火接口数量", + propertyValue: "", + propertyType: 2, + required: false, + ruleName: "", + ruleValue: "", + physicalUnit: "个", + order: 0, + enabled: true, + visible: true, + tag:"1" + }, + { + propertyName: "其它设施", + propertyValue: "", + propertyType: 0, + required: false, + ruleName: "", + ruleValue: "", + physicalUnit: "", + order: 0, + enabled: true, + visible: true, + tag:"1" + } + ] + // console.log(888,bodyObj) + bodyObj.buildingBasicGroups.splice(4,bodyObj.buildingBasicGroups.length) + } + + + + let newbodyObj = [] + newbodyObj.push(bodyObj) + // console.log(1111,newbodyObj) + this.http.post("/api/BuildingBasicInfos",newbodyObj,{ + params:{ + companyId : this.unitId, + buildingId :item.buildingId + } + }).subscribe((data:any)=>{ + this.houses[key].id = data[0].id + const config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.snackBar.open('建筑信息保存成功','确定',config); + // alert("建筑信息保存成功") + }, + err=>{ + const config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.snackBar.open('请检查输入数据是否有误','确定',config); + }) + } + if(item.buildtype == "地铁类"){ + let newObj = _.cloneDeep(item) + delete newObj.username + delete newObj.name + delete newObj.tongyong + delete newObj.ditie + delete newObj.buildtype + delete newObj.isCustomData + delete newObj.buildingCustomData + newObj.buildingBasicGroups.forEach(item => { + item.propertyInfos.forEach(element => { + delete element.isshowrule + delete element.rulevalue + if( element.propertyValue || element.propertyValue == 0){ + element.propertyValue = String(element.propertyValue) + } + }); + item.buildingId = newObj.buildingId + item.companyId = this.unitinfo.id + item.submitted = true + }); + let newbodyObj2 = [] + newbodyObj2.push(newObj) + this.http.post("/api/BuildingBasicInfos",newbodyObj2,{ + params:{ + companyId : this.unitId, + buildingId :newObj.buildingId + } + }).subscribe((data:any)=>{ + this.houses[key].id = data[0].id + const config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.snackBar.open('建筑信息保存成功','确定',config); + }, + err=>{ + const config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.snackBar.open('请检查输入数据是否有误','确定',config); + }) + + } + } + }) + + + }} \ No newline at end of file diff --git a/src/app/key-unit/basicinfo-look/lookmaster.component.html b/src/app/key-unit/basicinfo-look/lookmaster.component.html new file mode 100644 index 0000000..9cf352f --- /dev/null +++ b/src/app/key-unit/basicinfo-look/lookmaster.component.html @@ -0,0 +1,17 @@ +
单位照片
+
+
+ +
+ + +
+
+ +

暂无单位图片,请先上传

+
+
+ + +
+ diff --git a/src/app/key-unit/basicinfo-look/lookmaster.component.ts b/src/app/key-unit/basicinfo-look/lookmaster.component.ts new file mode 100644 index 0000000..7cd8875 --- /dev/null +++ b/src/app/key-unit/basicinfo-look/lookmaster.component.ts @@ -0,0 +1,66 @@ +import { Component, OnInit, Inject } from '@angular/core'; +import {MatTreeFlatDataSource, MatTreeFlattener} from '@angular/material/tree'; +import {FlatTreeControl} from '@angular/cdk/tree'; +import { HttpClient } from '@angular/common/http'; +import {MatDialog, MatDialogRef, MAT_DIALOG_DATA} from '@angular/material/dialog'; +import {FormControl} from '@angular/forms'; +import { MatSnackBar } from '@angular/material/snack-bar'; + +@Component({ + selector: 'lookmaster', + templateUrl: './lookmaster.component.html', + styleUrls: ['./basicinfo.component.scss'] + }) + export class LookMaster2 { + // myControl = new FormControl(); + //注入MatDialogRef,可以用来关闭对话框 + //要访问对话框组件中的数据,必须使用MAT_DIALOG_DATA注入令牌 + constructor(private http: HttpClient,public dialogRef: MatDialogRef,@Inject(MAT_DIALOG_DATA) public data) {} + allunittype:any + ImgUrl:string + rotationAngle=0 + isheng:any + isshowimg:boolean + onNoClick(): void { + this.dialogRef.close(); + } + ngOnInit(): void { + if(this.data.img.indexOf('?') == -1){ + this.isshowimg = false + }else{ + this.isshowimg = true + var imgurl = this.data.img.split("?") + this.ImgUrl = imgurl[0] + } + + } + //点击旋转按钮时 + rotateA = 0 + rotateB = 0 + rotate(){ + var w= document.getElementsByClassName("imgitemdefault")[0]['naturalWidth']; + var h = document.getElementsByClassName("imgitemdefault")[0]['naturalHeight']; + + if(w > h){ + this.isheng = true + }else{ + this.isheng = false + } + if(this.isheng){ + this.rotateA += 90 + if(this.rotateA == 360){ + this.rotateA = 0 + } + }else{ + this.rotateB += 10 + if(this.rotateB == 40){ + this.rotateB = 0 + } + } + } + + + + + } + \ No newline at end of file diff --git a/src/app/key-unit/basicinfo/addhouseinfo.component.html b/src/app/key-unit/basicinfo/addhouseinfo.component.html new file mode 100644 index 0000000..3ce162d --- /dev/null +++ b/src/app/key-unit/basicinfo/addhouseinfo.component.html @@ -0,0 +1,25 @@ +
新增建筑
+
+ + + + {{input.value?.length || 0}}/20 + + + + + {{item.name}} + + + +
+ + +
+ +
\ No newline at end of file diff --git a/src/app/key-unit/basicinfo/addhouseinfo.component.ts b/src/app/key-unit/basicinfo/addhouseinfo.component.ts new file mode 100644 index 0000000..e888232 --- /dev/null +++ b/src/app/key-unit/basicinfo/addhouseinfo.component.ts @@ -0,0 +1,77 @@ +import { Component, OnInit, Inject } from '@angular/core'; +import {MatTreeFlatDataSource, MatTreeFlattener} from '@angular/material/tree'; +import {FlatTreeControl} from '@angular/cdk/tree'; +import { HttpClient } from '@angular/common/http'; +import {MatDialog, MatDialogRef, MAT_DIALOG_DATA} from '@angular/material/dialog'; +import {FormControl} from '@angular/forms'; +import { MatSnackBar } from '@angular/material/snack-bar'; + +@Component({ + selector: 'addhouseinfo', + templateUrl: './addhouseinfo.component.html', + styleUrls: ['./basicinfo.component.scss'] + }) + export class AddHouseInfo { + myControl = new FormControl(); + //注入MatDialogRef,可以用来关闭对话框 + //要访问对话框组件中的数据,必须使用MAT_DIALOG_DATA注入令牌 + constructor(private http: HttpClient,public dialogRef: MatDialogRef,@Inject(MAT_DIALOG_DATA) public data) {} + allunittype:any + onNoClick(): void { + this.dialogRef.close(); + } + ngOnInit(): void { + // console.log(this.data) + this.getallunittype() + } + getallunittype(){ + this.http.get("/api/BuildingTypes/Simple").subscribe(data=>{ + this.allunittype = data + }) + } + onSubmit(value){ + + this.http.get("/api/Buildings",{ + params:{ + companyId:this.data.unitId + } + }).subscribe((data:any)=>{ + this.data.allBuildings = data + let order + if(data.length == 0){ + order = 0 + }else{ + order = data[data.length - 1].order + 1 + } + + let buildingTypename = "" + this.allunittype.forEach(item => { + if(item.id == value.unittype){ + buildingTypename = item.name + } + }); + + this.http.post("/api/Buildings",{ + id: "", + name: value.name, + order: order, + enabled: true, + companyId: this.data.unitinfo.id, + buildingTypes: [ + { + id: value.unittype, + name: buildingTypename + } + ] + },{params:{ + companyId : this.data.unitId + }}).subscribe(data=>{ + this.dialogRef.close(data); + }) + }) + + + + } + } + \ No newline at end of file diff --git a/src/app/key-unit/basicinfo/basicinfo.component.html b/src/app/key-unit/basicinfo/basicinfo.component.html new file mode 100644 index 0000000..43f73ea --- /dev/null +++ b/src/app/key-unit/basicinfo/basicinfo.component.html @@ -0,0 +1,531 @@ +
+ + + + + + 单位信息 + keyboard_arrow_down + + +
+
+
+
+
+ * + 统一社会信用代码: + + + +
+
+ 统一社会信用代码格式不正确 +
+
+
+
+ * + 单位类型: + + + {{item.name}} + + +
+
+ * + 联系人: + + + +
+
+ * + 联系电话: + + + +
+
+ 电话号码格式不正确 +
+
+
+
+ * + 辖区中队: + + + +
+
+ + + +
  • {{node.name}}
  • +
    + + +
  • {{node.name}}
  • +
    +
    +
    +
    + * + 单位地址: + + + +
    +
    + 单位照片: +
    + +
    + +
    +
    + +
    +
    + +
    +
    + + + +
    +
    +
    +
    +
    + + + +
    +
    + + + +
    + + +
    +
    + 建筑名称: + + + + * +
    +
    + 建筑类型: + + + {{n.name}} + + + * +
    + +
    +

    {{item.name}}

    +
    + {{i.propertyName}}({{i.physicalUnit}}) + + + + + + + + + + + + + + + + * +
    + {{i.rulevalue}} +
    +
    +
    + +
    + +

    自定义信息

    +
    +
    + + +
    + + + + : + + + + * +
    +
    +
    + + +
    + +
    +
    + 建筑名称: + + + + * +
    +
    + 建筑类型: + + + {{n.name}} + + + * +
    +

    {{item.buildingBasicGroups[0].name}}

    +
    + {{i.propertyName}} ({{i.physicalUnit}}) + + + + + + + + + + + + + + + + * +
    + {{i.rulevalue}} +
    +
    +
    + + +
    +
    + +

    {{item.buildingBasicGroups[1].name}}

    +
    + + + + + + + + + + + + + + + + + + + + +
    + + + 装置区名称* + + 工艺流程* + + 火灾危险性* + + 灭火注意事项 + +
    +
    + +
    + +

    储罐信息

    +
    + + + + + +
    +
    +

    {{x[0].name}}

    +
    +
    + {{i.propertyName}} {{i.physicalUnit}}: + + + + + * +
    + +
    +

    {{x[1].name}}

    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + 罐区 + + 罐区编号* + + 储存介质* + + 储罐类型* + + 容量(m³)* + + 直径(m)* + + 高度(m)* + + 顶盖形式 + + 浮盘材质 + + 浮盘类型 + + 泡沫产生器型号 + + 泡沫产生器形式 + + 是否设置氮封惰化保护装置 + + 防护堤高度(m)* + + 半固定泡沫灭火接口数量 + + 其它设施 + +
    +
    +
    +
    + + +
    + +

    自定义信息

    +
    +
    + + +
    + + + + : + + + + * +
    +
    + +
    + + +
    + + +
    + +
    +
    + +
    + +
    + +
    + +
    + + + + + + + + + diff --git a/src/app/key-unit/basicinfo/basicinfo.component.scss b/src/app/key-unit/basicinfo/basicinfo.component.scss new file mode 100644 index 0000000..c80c8c3 --- /dev/null +++ b/src/app/key-unit/basicinfo/basicinfo.component.scss @@ -0,0 +1,269 @@ +.topbox{ + height: 485px; + width: 100%; + // border-bottom: 1px solid black; + .mainbox{ + height: 100%; + position: relative; + .mainleft{ + width:800px; + height: 100%; + // background-color: yellow; + float: left; + .inputbox{ + width: 343px; + height: 58px; + margin:2px 6px; + float: left; + text-align: end; + } + .organizationbox{ + width:538px; + height: 200px; + background: white; + position: absolute; + top: 164px; + left:166px; + z-index: 100; + border: 1px solid grey; + overflow: auto; + li{ + list-style: none; + + } + mat-tree-node{ + cursor: pointer; + } + mat-tree-node:hover{ + background: rgba(225, 225, 225, 0.8); + } + } + .addbtn{ + width: 695px; + position: absolute; + bottom: -495px; + text-align: center; + margin-bottom:20px; + button{ + margin: 0 4px; + } + } + .uploadimg{ + width: 400px; + height: 200px; + float: left; + margin-top:12px; + position: relative; + margin-left: 80px; + cursor: pointer; + span{ + float: left; + } + // img{ + // float: left; + // } + .uploadingimg{ + width: 299px; + height: 170px; + // background: url('../../../assets/images/upload2.png') no-repeat center center; + + position: absolute; + top: 0px; + left: 79px; + border: 1px dashed gray; + border-radius:3px; + } + + } + .image{ + // position: absolute; + // top: 199px; + // left: 160px; + // width: 299px; + // height: 170px; + input{ + // width: 299px; + // height: 170px; + width: 190px; + margin-top: 160px; + cursor: pointer; + } + // opacity:0; + + } + } + .mainright{ + float: left; + width: 600px; + height: 400px; + // position: absolute; + // right: 170px; + + } + } +} +.bottombox{ + // height:400px; + width: 100%; + // background-color: skyblue; + + .bottomtitle{ + height: 60px; + // background-color: orange; + line-height: 60px; + border-top: 1px solid black; + border-bottom: 1px solid black; + } + .houseinfobox{ + // height:340px; + overflow: auto; + .addhouseinfo{ + float: left; + } + .infobtnbox{ + margin-left: 800px; + position: absolute; + top: 30px; + right: 75px; + button{ + width: 80px; + height: 40px; + margin: 0 12px; + margin-top: 15px; + } + } + .infotitle{ + font-size: 28px; + font-weight: 900; + margin-left: 180px; + } + .houseinfoinput{ + width: 393px; + text-align: end; + margin-left:240px; + } + } +} + +.btn{ + width: 100%; + text-align: center; + button{ + margin: 0 8px; + } +} +.mat-spinner{ + margin-top: 58px; + margin-left: 203px; +} +.mat-table{ + width: 100%; +} + +table{ + width: 1000px; + thead{ + tr{ + th{ + width: 60px; + display: block; + float: left; + + } + } + } + tbody{ + tr{ + + td{ + width: 60px; + display: block; + float: left; + text-align: center; + } + } + } +} + +.deviceinfo{ + // border-bottom: 1px solid black;; + padding-bottom: 60px; +} +.tankdetailinfo{ + // border-bottom: 1px solid black;; + padding-bottom: 35px; + table{ + th{ + text-align: center; + } + } +} +.tankinfo{ + display: block; + width: 100%; + // height: 45px; + text-align: center; +} +// .adddeviceinfo{ +// // position: absolute; +// // left: 0px; +// } +.submit1{ + margin-left: -66px !important; +} +textarea { + vertical-align: middle; + border-radius: 5px; + padding: 5px; + width: 600px; + height: 110px; + resize: none; + } + //预览图片旋转角度 + .img1{ + transform:rotate(90deg) scale(0.55); + height: 100%; +} +.img2{ + transform:rotate(180deg); + // height: 100%; +} +.img3{ + transform:rotate(270deg) scale(0.55); + // height: 100%; +} +.img4{ + transform:rotate(90deg) scale(1.3); + // height: 100%; +} +.img5{ + transform:rotate(180deg); + // height: 100%; +} +.img6{ + transform:rotate(270deg) scale(1.3); + // height: 100%; +} +.imgbox{ + text-align: center; + height: 750px; + img{ + max-width: 1500px; + max-height: 740px; + } +} +.previewImgBottom{ + text-align: center; +} +.alert-danger { + margin-top: -16px; + text-align: left; + padding-left: 77px; + font-size: 12px; + color: red; + } +.mat-expansion-panel{ + span{ + color: black; + } +} \ No newline at end of file diff --git a/src/app/key-unit/basicinfo/basicinfo.component.spec.ts b/src/app/key-unit/basicinfo/basicinfo.component.spec.ts new file mode 100644 index 0000000..81d25e7 --- /dev/null +++ b/src/app/key-unit/basicinfo/basicinfo.component.spec.ts @@ -0,0 +1,25 @@ +import { async, ComponentFixture, TestBed } from '@angular/core/testing'; + +import { BasicinfoComponent } from './basicinfo.component'; + +describe('BasicinfoComponent', () => { + let component: BasicinfoComponent; + let fixture: ComponentFixture; + + beforeEach(async(() => { + TestBed.configureTestingModule({ + declarations: [ BasicinfoComponent ] + }) + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(BasicinfoComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/key-unit/basicinfo/basicinfo.component.ts b/src/app/key-unit/basicinfo/basicinfo.component.ts new file mode 100644 index 0000000..5d31edb --- /dev/null +++ b/src/app/key-unit/basicinfo/basicinfo.component.ts @@ -0,0 +1,2032 @@ +import { Component, OnInit, Inject ,ViewChild} from '@angular/core'; +import { MatTreeFlatDataSource, MatTreeFlattener } from '@angular/material/tree'; +import { FlatTreeControl } from '@angular/cdk/tree'; +import { HttpClient,HttpHeaders, HttpEventType } from '@angular/common/http'; +import { MatDialog, MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog'; +import { FormControl } from '@angular/forms'; +import { MatSnackBar ,MatSnackBarConfig} from '@angular/material/snack-bar'; +import format from 'date-fns/format'; +import { TreeService } from '../../http-interceptors/tree.service' +import { FileUploader, FileItem } from 'ng2-file-upload' +// import { House } from '../../interface' +import { AddHouseInfo } from './addhouseinfo.component' +import { DomSanitizer } from '@angular/platform-browser' +import { Injectable } from "@angular/core" +import { filter } from 'rxjs/operators'; +import { async } from '@angular/core/testing'; +import { MatTableDataSource } from '@angular/material/table'; +import { isNgTemplate } from '@angular/compiler'; +import * as _ from 'lodash'; +// import Swiper from 'swiper'; +import { LookMaster } from './lookmaster.component' +import { Router,ActivatedRoute } from '@angular/router' + +@Component({ + selector: 'app-basicinfo', + templateUrl: './basicinfo.component.html', + styleUrls: ['./basicinfo.component.scss'] +}) +export class BasicinfoComponent implements OnInit { + unitinfo:any={ + id: '', + name: '', //单位信息名字 + usci: '', //单位信用代码 + contacts: '', //联系人 + phone: '', //联系电话 + address: '', //单位地址 + imageUrl: '', //图片地址 + location: '', //单位地理位置 + modifiedTime: '', //信息修改时间 + organizationId: '', //所属组织机构 + organizationName: '', //组织机构名称 + buildingTypes: [ + { + id:'', + name:'' + } + ] + } + + uploader:FileUploader = new FileUploader({ //初始化上传事件 ng2-upload + url: `/api/Objects/PlanPlatform/${sessionStorage.getItem('companyId')}`, + method: "POST", + itemAlias: "uploadedfile", + autoUpload: false, + removeAfterUpload:true //上传之后是否在队列中移除,如果不移除就会出现无法上传第二次的情况 + }); + + + + + private _transformer = (node, level: number) => { //初始化tree + return { + expandable: !!node.children && node.children.length > 0, + name: node.name, + level: level, + id: node.id, + parentId: node.parentId, + children: node.children + }; + } + treeControl = new FlatTreeControl(node => node.level, node => node.expandable); + treeFlattener = new MatTreeFlattener(this._transformer, node => node.level, node => node.expandable, node => node.children); + dataSource = new MatTreeFlatDataSource(this.treeControl, this.treeFlattener); + + myControl = new FormControl(); + + isorganizationbox = false//控制辖区中队框的显示隐藏 + selectedorganization: any//所选的辖区中队 + selectedorganizationid:any //所选的辖区中队的id + highhouse = false//控制高层表单的显示 + houses: any = [] //存储当前单位的建筑信息 + defaultbuildingTypes :any //存储当前建筑的默认类型的id + buildingTypesname:any//存储当前建筑的默认类型name + buildingCustomData:any //存储当前建筑的自定义信息 + allunittype: any //所有单位类型 + allorganizing:any = [] //所有组织机构 + constructor(private router:Router,private route:ActivatedRoute,private http: HttpClient, private tree: TreeService, private sanitizer: DomSanitizer, public dialog: MatDialog,public snackBar: MatSnackBar) { } + + + unitId : any //当前单位id + ngOnInit(): void { + this.getallunittype() + this.getorganization() + // this.getunitinfo() + this.getunitallbuilding() + this.unitId = this.route.snapshot.queryParams.id + sessionStorage.setItem("companyId",this.route.snapshot.queryParams.id); + } + //获得所有单位类型 + getallunittype() { + this.http.get("/api/BuildingTypes/Simple").subscribe(data => { + this.allunittype = data + }) + } + //获得所有组织机构 + getorganization() { + this.http.get('/api/Organizations').subscribe( + (data: any) => { + this.allorganizing = data; + this.dataSource.data = this.tree.toTree(data); + this.getunitinfo(); + } + ) + } + //获得当前单位的基本信息 + CompanyId + getunitinfo(){ + + this.http.get(`/api/Companies/${this.unitId}`).subscribe((data:any)=>{ + if(data.buildingTypes.length){ + sessionStorage.setItem('buildingTypeId',data.buildingTypes[0].id) + }else{ + sessionStorage.setItem('buildingTypeId',"") + } + let node + this.allorganizing.forEach(item => { + if(item.id == data.organizationId){ + node = item + } + }); + if(node){ + if(!node.parentId){ + this.selectedorganization = node.name + }else{ + let namearr = [node.name] + let targetId = node.parentId; // 临时变量 + for(let i = 0; i < node.level ; i++){ + this.allorganizing.forEach(item => { + if(item.id == targetId ){ + namearr.push(item.name) + targetId = item.parentId; // 临时变量更新没有副作用 + } + }); + } + namearr.reverse() + let str = '' + namearr.forEach(item=>{ + str += '/' + item + }) + this.selectedorganization = str.substr(1) + } + } + + this.unitinfo = data + this.selectedorganizationid = data.organizationId + if(data.imageUrl){ + this.imgsrc = data.imageUrl + } + if(data.buildingTypes[0]){ + this.defaultbuildingTypes = data.buildingTypes[0].id + this.buildingTypesname = data.buildingTypes[0].name + } + }) + } + //石油化工 装置信息 勾选框 + checkboxchange(item,e){ + if(item.buildingBasicGroups){ + item.buildingBasicGroups.forEach(item=>{ + if(item.name != "基本信息" && item.name != "装置信息"){ + item.submitted = e.checked + } + }) + } + } + + unitallbuilding:any = []//用于存储当前单位所有的建筑 + buildinginfoId:any = []//用于存储当前单位所有具体建筑的id + presentbuildinfoId:any // 用于存储当前单位第一个建筑的id + bigfor:any//循环(储罐信息+罐区信息)大组 + npdata:any = [] + newnpdata:any //用于存储石油化工 储罐信息/罐区情况的 datasource + + basicCategoryId:any //当前单位所有建筑中位于第一个的建筑id + deviceinfodata:any=[];//用于存储石油化工装置信息的数组 + zhuangzhiinfodatasource:any = [] //用于存储石油化工装置信息表格的数据来源 + newzhuangzhiinfodatasource:any= []//存储石油化工装置信息表格的 datasource形式 + devicedataSourcebox:any = [] //存储多个石油化工建筑的不同装置信息表格datasource + //在石油化工模板种点击增加装置信息 + adddeviceinfo(item){ + item.newzhuangzhiinfodatasource.push({ + name:"", + flow:"", + danger:"", + payattentionto:"" + }) + this.devicedataSourcebox[item.buildingId] = new MatTableDataSource(item.newzhuangzhiinfodatasource) + } + //在石油化工模板种点击减少装置信息 + removedeviceinfo(item){ + if(item.newzhuangzhiinfodatasource.length>1){ + item.newzhuangzhiinfodatasource.pop() + }else{ + const config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.snackBar.open('只剩一行,无法删除','确定',config); + } + this.devicedataSourcebox[item.buildingId] = new MatTableDataSource(item.newzhuangzhiinfodatasource) + } + + //数据格式化函数 将原始数据映射转化为表格需要的datasource + formatHandle(list) { + const result = [{}]; // tag 是从1开始,因此预置索引为0的项 + list.forEach((item) => { + const { tag, propertyName, propertyValue } = item; + if (result[tag] === undefined) { // 初始化对象 + result[tag] = {}; + } + const fieldMap = { // 字段映射,实现自动映射 + '罐区': 'tank', + '储罐编号': 'tankid', + '储存介质': 'tankmedium', + '储罐类型': 'tanktype', + '容量': 'tankcapacity', + '直径': 'tankdiameter', + '高度': 'tankheight', + '顶盖形式': 'tanktectum', + '浮盘材质': 'tanktexture', + '浮盘类型': 'platetype', + '泡沫产生器型号': 'foamgeneratorid', + '泡沫产生器形式': 'foamgeneratortype', + '是否设置氮封惰化保护装置': 'isprotect', + '防护堤高度': 'fendinggroyneheight', + '半固定泡沫灭火接口数量': 'portnum', + '其它设施': 'else' + }; + result[tag][fieldMap[propertyName]] = propertyValue; + }); + result.shift(); // 移除预置的 索引为0 的值 + return result; + } + + //将模板信息加工成附带自定义属性的信息 + getunithouse(data,n,x){ //data是原始模板在此基础上加工 n是当前建筑名称和建筑id、 x是当前循环的item信息 + data[0].buildingtypeId = n.id + data[0].name = x.name + data[0].username =x.name + data[0].buildtype = n.name + data[0].tongyong = true + data[0].index = x.index + if(data[0].buildtype == "石油化工类"){ + data[0].tongyong = false + data[0].isshiyou = true + this.deviceinfodata = data[0].buildingBasicGroups[1].propertyInfos //存储装置信息的初始数据,需要转换成datasource形式 + var map = [] + this.deviceinfodata.forEach((item,index) => { + if(item.tag == ""){ + item.tag = "1" + } + if(!(item.tag in map)){ + map[item.tag] = [] + } + map[item.tag].push(item) + }); + let zhuangzhiinfodatasource = [] + map.forEach((item,index)=>{ + zhuangzhiinfodatasource[index] = {} + item.forEach(i => { + if (i.propertyName == "装置区名称") { + zhuangzhiinfodatasource[index].name = i.propertyValue + } + if (i.propertyName == "工艺流程") { + zhuangzhiinfodatasource[index].flow = i.propertyValue + } + if (i.propertyName == "火灾危险性") { + zhuangzhiinfodatasource[index].danger = i.propertyValue + } + if (i.propertyName == "灭火注意事项") { + zhuangzhiinfodatasource[index].payattentionto = i.propertyValue + } + }); + }) + this.newzhuangzhiinfodatasource =[] //数据去空 + zhuangzhiinfodatasource.forEach(item=>{ + if(item !== "" && item != undefined){ + this.newzhuangzhiinfodatasource.push(item) + } + }) + this.devicedataSourcebox[data[0].buildingId] = new MatTableDataSource(this.newzhuangzhiinfodatasource) + data[0].newzhuangzhiinfodatasource = this.newzhuangzhiinfodatasource + + + //把bigfor分组取出来 先大循环 (储罐信息---储罐信息/罐区情况)为一组 + let noemptybigfordata = data[0].buildingBasicGroups + // if(noemptybigfordata.length > 4){ + // noemptybigfordata.forEach((item,index) => { + // if(!item.submitted && item.name !="装置信息"){ + // noemptybigfordata.splice(index, 1) + // } + // }) + // } + let bigtankgroups = noemptybigfordata.slice(2) + // console.log("bigtankgroups",bigtankgroups) + let proportion = 2; //按照比例切割 + let num = 0; + let bigfor =[]; + for(let i=0;i{ + item[1].propertyInfos.forEach(item => { + if(item.tag == ""){ + item.tag = 1 + } + }); + item[1].propertyInfos = this.formatHandle(item[1].propertyInfos) + + }) + data[0].bigfor = bigfor + } + // if(data[0].buildtype == "地铁类"){ + // data[0].tongyong = true + // // data[0].ditie = true + // } + return data[0] + } + + //点击建筑自定义信息的checkbox + isCustomData = false + checkCustomData(e){ + this.isCustomData = e.checked + } + //增加自定义信息行数 + addCustomData(item){ + item.buildingCustomData.customProperties.push({ + name: "", + value: "" + }) + } + //删除自定义信息行数 + deleteCustomData(item){ + item.buildingCustomData.customProperties.pop() + } + //得到建筑信息数据并进行处理 + allBuildings:any + getunitallbuilding(){ + this.houses = [] + this.unitId = this.route.snapshot.queryParams.id + this.http.get("/api/Buildings",{ + params:{ + companyId:this.unitId + } + }).subscribe(async (data:any)=>{ // 获得当前单位所有的建筑 + this.allBuildings = data + // console.log(data) + if(data.length != 0){ + this.basicCategoryId = data[0].buildingTypes[0].id + this.presentbuildinfoId = data[0].id // 用于存储当前单位第一个建筑的id + for (let i = 0, length = data.length; i < length; i++) {//循环所有建筑 + const n = data[i]; + const index = i; + this.buildinginfoId.push(n.id) + const result = await new Promise((resolve) => { + this.http.get("/api/BuildingBasicInfos",{ // 循环请求当前单位建筑每一个建筑的信息保存到数组中 + params:{ + companyId :this.unitId, + buildingId:n.id, + buildingType:n.buildingTypes[0].id + } + }).subscribe((data)=>{ + //获得当前建筑自定义信息并且添加到item自定义属性上 + let _data = data + this.http.get("/api/BuildingCustomData",{params:{ + buildingId:n.id + }}).subscribe((data:any)=>{ + _data[0].buildingCustomData = data + if(data && data.customProperties.length != 0){ + _data[0].isCustomData = true + }else{ + _data[0].isCustomData = false + _data[0].buildingCustomData ={ + id: "", + customProperties: [ + { + name: "", + value: "" + } + ], + buildingId: _data[0].buildingId + } + } + }) + //为每个建筑添加自定义属性 + data[0].buildingtypeId = n.buildingTypes[0].id + data[0].name = n.name + data[0].username = n.name + data[0].buildtype = n.buildingTypes[0].name + data[0].tongyong = true + data[0].index = index + + if(data[0].buildtype == "石油化工类"){ + data[0].tongyong = false + data[0].isshiyou = true + let noemptydeviceArr = data[0].buildingBasicGroups[1].propertyInfos + noemptydeviceArr.forEach((item,index) => { + if(item.tag == ""){ + noemptydeviceArr.splice(index,1) + } + }); + this.deviceinfodata = noemptydeviceArr //存储装置信息的初始数据,需要转换成datasource形式 + var map = [] + this.deviceinfodata.forEach((item,index) => { + if(!data[0].buildingBasicGroups[1].submitted){ + if(item.tag == ""){ + item.tag = "1" + } + } + + if(!(item.tag in map)){ + map[item.tag] = [] + } + map[item.tag].push(item) + }); + let zhuangzhiinfodatasource = [] + map.forEach((item,index)=>{ + zhuangzhiinfodatasource[index] = {} + item.forEach(i => { + if (i.propertyName == "装置区名称") { + zhuangzhiinfodatasource[index].name = i.propertyValue + } + if (i.propertyName == "工艺流程") { + zhuangzhiinfodatasource[index].flow = i.propertyValue + } + if (i.propertyName == "火灾危险性") { + zhuangzhiinfodatasource[index].danger = i.propertyValue + } + if (i.propertyName == "灭火注意事项") { + zhuangzhiinfodatasource[index].payattentionto = i.propertyValue + } + }); + }) + this.newzhuangzhiinfodatasource =[] //数据去空 + zhuangzhiinfodatasource.forEach(item=>{ + if(item !== "" && item != undefined){ + this.newzhuangzhiinfodatasource.push(item) + } + }) + this.devicedataSourcebox[data[0].buildingId] = new MatTableDataSource(this.newzhuangzhiinfodatasource) + data[0].newzhuangzhiinfodatasource = this.newzhuangzhiinfodatasource + + //把bigfor分组取出来 先大循环 (储罐信息---储罐信息/罐区情况)为一组 + let noemptybigfordata = data[0].buildingBasicGroups + + let bigtankgroups = noemptybigfordata.slice(2) + let proportion = 2; //按照比例切割 + let num = 0; + let bigfor =[]; + for(let i=0;i{ + + item[1].propertyInfos = this.formatHandle(item[1].propertyInfos) + + }) + data[0].bigfor = bigfor + } + resolve(data[0]) //把数据传递出去 + }) + }) + this.houses.push(result) // 并且把他添加到 tab 总体数组中 + } + } + // console.log(666,this.houses) + }) + + } + + unitinfotemplate:any //存储选择不同单位类型时的模板信息 + displayedColumns: string[]=['name', 'flow','danger','payattentionto']; + displayedColumns2: string[]=['tank','tankid', 'tankmedium','tanktype','tankcapacity','tankdiameter', 'tankheight','tanktectum','tanktexture','platetype', 'foamgeneratorid','foamgeneratortype','isprotect','fendinggroyneheight', 'portnum','else']; + devicedataSource:any; //存储石油化工模板中的装置信息表格 + tankinfodatabox:any = [ + [] + ] + // dataSourceArr = [] + tankinfodata:any=[];//用于存储石油化工储罐信息的数组 + adddeviceinfo2(e,item){//点击加一行 视图上多一行 + item.bigfor[e][1].propertyInfos.push({ + tank:"", + tankid:"", + tankmedium:"", + tanktype:"", + tankcapacity:"", + tankdiameter:"", + tankheight:"", + tanktectum:"", + tanktexture:"", + platetype:"", + foamgeneratorid:"", + foamgeneratortype:"", + isprotect:"", + fendinggroyneheight:"", + portnum:"", + else:"" + }) + item.bigfor[e][1].propertyInfos = [...item.bigfor[e][1].propertyInfos] + } + removedeviceinfo3(e,item){//点击减一行 + var isdeleted = confirm("确定要删除末行吗?") + if(isdeleted){ + if(item.bigfor[e][1].propertyInfos.length > 1){ + item.bigfor[e][1].propertyInfos.pop() + }else{ + const config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.snackBar.open('只剩一行,无法删除','确定',config); + } + item.bigfor[e][1].propertyInfos = [...item.bigfor[e][1].propertyInfos] + } + + } + + + //增加储罐大分组 + //在石油化工模板种点击增加储罐信息 + //获得模板信息 + templateinfo:any + gettemplateinfo(typeid){ + + } + + addtankbox(item,bigkey){ + this.http.get("/api/BuildingBasicInfos",{ + params:{ + companyId : this.unitId, + buildingType:item.buildingtypeId + } + }).subscribe((data:any)=>{ + // console.log(1314,data) + // console.log(777,data[0]) + item.bigfor.push([ + { + id: "", + name: "罐区"+ (item.bigfor.length+ 1), + type: 0, + addMode: 2, + basicGroupId:'', + basicCategoryId: item.basicCategoryId, + buildingBasicId: null, + buildingId: item.buildingId, + companyId: this.unitinfo.id, + enabled: true, + order: item.bigfor.length+2, + propertyInfos:data[0].buildingBasicGroups[2].propertyInfos + }, + { + addMode: 2, + basicCategoryId:item.basicCategoryId, + buildingBasicId:null, + buildingId: item.buildingId, + companyId: this.unitinfo.id, + enabled: true, + basicGroupId:'', + id: "", + name: "罐区" + (item.bigfor.length+ 1) +"/储罐信息", + order: item.bigfor.length+3, + propertyInfos: [ + { + else: "", + fendinggroyneheight: "", + foamgeneratorid: "", + foamgeneratortype: "", + isprotect: "", + platetype: "", + portnum: "", + tank: "", + tankcapacity: "", + tankdiameter: "", + tankheight: "", + tankid: "", + tankmedium: "", + tanktectum: "", + tanktexture: "", + tanktype: "" + } + ], + type: 1 + } + + ]) + }) + + } + //移除储罐大分组 + removetankbox(item,bigkey){ + if(item.bigfor.length > 1){ + var isdeleted = confirm("确定要删除末尾储罐分组吗?") + if(isdeleted){ + item.bigfor.pop() + } + }else{ + const config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.snackBar.open('只剩唯一储罐,无法删除','确定',config); + } + } + + //新建建筑时把原始建筑数据放进来进行加工处理成可用数据 + async changebuildingdata(data){ + let n = data + let yyy + let result = await new Promise(resolve=>{ + this.http.get("/api/BuildingBasicInfos",{ // 需要请求建筑信息的模板 + params:{ + companyId : this.unitId, + buildingId:data.id, + buildingType:data.buildingTypes[0].id + } + }).subscribe((data)=>{//此时的data才是模板详细信息 + let _data = data + this.http.get("/api/BuildingCustomData",{params:{ //-----处理建筑自定义属性部分 + buildingId:n.id + }}).subscribe(data=>{ + if(data){ + _data[0].isCustomData = true //如果data存在则把自定义属性isCustomData设为true + _data[0].buildingCustomData = data //把建筑自定义信息赋给buildingCustomData自定义属性 + }else{ + _data[0].isCustomData = false + _data[0].buildingCustomData ={ //否则设为false,并且把自定义信息属性赋值为空 + id: "", + customProperties: [ + { + name: "", + value: "" + } + ], + buildingId: _data[0].buildingId + } + } + }) + data[0].buildingtypeId = n.buildingTypes[0].id + data[0].buildtype = n.buildingTypes[0].name + data[0].name = n.name + data[0].username = n.name + data[0].tongyong = true + data[0].index = this.houses.length ////////////////// + if(data[0].buildtype == "石油化工类"){ + data[0].tongyong = false + data[0].isshiyou = true //如果是石油化工则启用石油化工的模板 + this.deviceinfodata = data[0].buildingBasicGroups[1].propertyInfos //存储装置信息表格的初始数据,需要转换成datasource形式 + var map = [] + this.deviceinfodata.forEach((item,index) => { + if(item.tag == ""){ + item.tag = "1" + } + if(!(item.tag in map)){ + map[item.tag] = [] + } + map[item.tag].push(item) + }); + let zhuangzhiinfodatasource = [] + map.forEach((item,index)=>{ + zhuangzhiinfodatasource[index] = {} + item.forEach(i => { + if (i.propertyName == "装置区名称") { + zhuangzhiinfodatasource[index].name = i.propertyValue + } + if (i.propertyName == "工艺流程") { + zhuangzhiinfodatasource[index].flow = i.propertyValue + } + if (i.propertyName == "火灾危险性") { + zhuangzhiinfodatasource[index].danger = i.propertyValue + } + if (i.propertyName == "灭火注意事项") { + zhuangzhiinfodatasource[index].payattentionto = i.propertyValue + } + }); + }) + this.newzhuangzhiinfodatasource =[] //数据去空 + zhuangzhiinfodatasource.forEach(item=>{ + if(item !== "" && item != undefined){ + this.newzhuangzhiinfodatasource.push(item) + } + }) + this.devicedataSourcebox[data[0].buildingId] = new MatTableDataSource(this.newzhuangzhiinfodatasource) //强制渲染表格 + data[0].newzhuangzhiinfodatasource = this.newzhuangzhiinfodatasource + + + //把bigfor分组取出来 先大循环 (储罐信息---储罐信息/罐区情况)为一组 + let bigtankgroups = data[0].buildingBasicGroups.slice(2) + let proportion = 2; //按照比例切割 + let num = 0; + let bigfor =[]; + for(let i=0;i{ + item[1].propertyInfos.forEach(item => { + if(item.tag == ""){ + item.tag = 1 + } + }); + item[1].propertyInfos = this.formatHandle(item[1].propertyInfos) + }) + data[0].bigfor = bigfor + } + if(data[0].buildtype == "地铁类"){ + data[0].tongyong = true + // data[0].ditie = true + } + yyy = data[0] + resolve(yyy) + }) + }) + return result + } + + //点击+号 增加建筑 + addhouseinfo() { + const dialogRef = this.dialog.open(AddHouseInfo, {//调用open方法打开对话框并且携带参数过去 + width: '260px', + data: {unitinfo:this.unitinfo,allBuildings:this.allBuildings,unitId:this.unitId} + }); + dialogRef.afterClosed().subscribe( + async data => { + if(data){ + let newbuilding = await this.changebuildingdata(data) + this.houses.push(newbuilding) + } + } + ); + } + + //点击不同的tab选项 + selecttab(e) { + } + + FunData(e){//切割数组 + let proportion = 2; //按照比例切割 + let num = 0; + let _data =[]; + for(let i=0;i { + if(item.id == targetId ){ + namearr.push(item.name) + targetId = item.parentId; // 临时变量更新没有副作用 + } + }); + } + namearr.reverse() + let str = '' + namearr.forEach(item=>{ + str += '/' + item + }) + + this.selectedorganization = str.substr(1) + } +} + + //关闭辖区中队隐藏框 + closeorganizationbox() { + this.isorganizationbox = false + } + + //打开辖区中队隐藏框 + openorganizationbox() { + this.isorganizationbox = true + } + + hasChild = (_: number, node: any) => node.expandable; + + imgsrc = "../../../assets/images/upload.jpg" //没有上传图片时显示的图片,当上传后就会被替换,即保存时需要传的图片地址参数 + // imgsrc = "" + imgUrl = ""//返回来的图片地址后缀 + file: any; //上传的文件 + objectName: any; //上传对象名 + uploadId: any; //上传分块上传事件编号 + isspinner:boolean=false //控制进度圈的显示隐藏 + PartNumberETag: any = []; //分块上传每次返回需要保存的信息 + //change选择文件 + filechange(e) { + this.file = e.target.files[0] || null //上传的文件 + var reader = new FileReader(); + reader.readAsDataURL(this.file); + var image:any = new Image(); + reader.onload = function(){ + image.src = reader.result + } + setTimeout(() => { + if(image.width>=4096 || image.height>=5000 ){ + const config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.snackBar.open('请选择分辨率小于4096*5000的图片','确定',config); + }else{ + if(this.file){ + this.startUploading() + } + } + + }, 500); + } + //查看单位大图 + lookmaster(){ + const dialogRef = this.dialog.open(LookMaster, {//调用open方法打开对话框并且携带参数过去 + width: '1600px', + height:'900px', + data: {img:this.imgsrc} + }); + dialogRef.afterClosed().subscribe( + + ); + } + //上传文件 + startUploading() { + this.isspinner = true + let file = this.file || null //获取上传的文件 + let fileSize = file.size || null //上传文件的总大小 + let shardSize = 5 * 1024 * 1024 //5MB一个分片 + + if (file && fileSize <= shardSize) { //上传文件<=5MB时 + // this.upload() + let formData = new FormData() + formData.append("file",file) + this.http.post(`/api/Objects/PlanPlatform/${sessionStorage.getItem('companyId')}`,formData).subscribe((data:any)=>{ + this.isspinner = false + this.imgUrl = data.objectName + this.imgsrc = `/api/Objects/PlanPlatform/${this.imgUrl}?x-oss-process=image/resize,m_fill,h_170,w_299` + const config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.snackBar.open('上传成功','确定',config); + }) + } else if (file && fileSize >= shardSize) { //上传文件>5MB时,分块上传 + + let data = { filename: file.name } + this.http.post(`/api/NewMultipartUpload/PlanPlatform/${this.unitinfo.id}`, {}, { params: data }).subscribe((data: any) => { //初始化分段上传 + this.objectName = data.objectName + this.uploadId = data.uploadId + this.subsectionUploading() + }) + } + } + + + + + //小于5MB不需要分块上传 + upload(){ + this.uploader.queue[0].upload();//开始上传 + this.uploader.queue[0].onSuccess = (response, status, headers) => { + // 上传文件成功 + if (status == 201) { + // 上传文件后获取服务器返回的数据 + const config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.snackBar.open('上传成功','确定',config); + this.isspinner = false + let tempRes = JSON.parse(response); + this.imgUrl = tempRes.objectName + this.imgsrc = `/api/Objects/PlanPlatform/${this.imgUrl}?x-oss-process=image/resize,m_fill,h_170,w_299` + }else { + // 上传文件后获取服务器返回的数据错误 + } + }; + this.uploader.queue[0].onError = (response, status, headers) => { + if (status == 401) { + const config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.snackBar.open('上传失败','确定',config); + } + }; + } + + //开始分块上传 + async subsectionUploading () { + let file = this.file || null //获取上传的文件 + let fileSize = file.size || null //上传文件的总大小 + let shardSize = 5 * 1024 * 1024 //5MB一个分片 + let allSlice = Math.ceil(fileSize / shardSize) //总文件/5MB===共分多少段 + + for (let i = 0;i < allSlice;i++) { //循环分段上传 + let start = i * shardSize //切割文件开始位置 + let end = Math.min(fileSize, start + shardSize); //切割文件结束位置 + let formData = new FormData() + formData.append("file",file.slice(start, end)) + + // 同步写法实现异步调用 + let result = await new Promise((resolve, reject) => { + // await 需要后面返回一个 promise 对象 + this.http.post(`/api/MultipartUpload/PlanPlatform/${this.objectName}?uploadId=${this.uploadId}&partNumber=${i+1}`,formData).subscribe((data:any)=>{ + let msg = { + "partNumber":data.partNumber || null, + "eTag": data.eTag || null + } + resolve(msg) // 调用 promise 内置方法处理成功 + }) + }); + this.PartNumberETag.push(result) + if (this.PartNumberETag.length === allSlice) { + this.endUploading() + } + } + } + //完成分块上传 + endUploading() { + let data = this.PartNumberETag + let paramsData = { uploadId: this.uploadId } + this.http.post(`/api/CompleteMultipartUpload/PlanPlatform/${this.objectName}`, data, { params: paramsData }).subscribe(data => { + this.imgsrc = `/api/Objects/PlanPlatform/${this.objectName}?x-oss-process=image/resize,m_fill,h_170,w_299` + this.isspinner = false + this.PartNumberETag = [] + this.uploader.clearQueue(); //清空input控件文件 + }) + } + //删除具体建筑 + deletedbuilding(item){ + var isdeleted = confirm("确定要删除此建筑吗?") + if(isdeleted){ + //请求删除接口 + this.http.delete(`/api/Buildings/${item.buildingId}`).subscribe(data=>{ + + const config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.snackBar.open('删除成功','确定',config); + this.houses.splice(this.houses.findIndex(items=>items==item),1) + }) + } + } + + //提交单位基本信息 + onSubmit(value,invalid,form) { + if(invalid){ + const config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.snackBar.open('请填写必填项','确定',config); + }else{ + sessionStorage.setItem('buildingTypeId',value.unittype) + let time =new Date() + let body = { + id: this.unitinfo.id, + name: this.unitinfo.name, + usci: value.creditcode, + contacts: value.linkman, + phone: value.linkphone, + address: value.unitaddress, + imageUrl: this.imgsrc, + location: { + x: 0, + y: 0 + }, + modifiedTime: time, + organizationId: this.selectedorganizationid, + organizationName: null, + buildingTypes: [ + { + id: value.unittype, + name: this.buildingTypesname + } + ] + } + this.http.put(`/api/Companies/${this.unitId}`,body).subscribe((data:any)=>{ //修改单位基本信息 + this.getunitinfo() + if(!this.houses.length){ + const config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.snackBar.open('单位基本信息保存成功,请填写单位建筑模板信息','确定',config); + // alert("单位基本信息保存成功,请填写单位建筑模板信息") + let order = 0 + let addbody = { //请求创建单位基本信息成功后 直接创建出一个主体建筑模板 + id: "",//即将要生成具体建筑的id + name: "主体建筑", + order: order, + enabled: true, + companyId: this.unitinfo.id, + buildingTypes: [ + { + id: value.unittype, + name: "" + } + ] + } + this.http.post("/api/Buildings",addbody,{params:{ + companyId : this.unitId + }}).subscribe(data=>{//首先创建建筑成功了,需要刷出当前建筑类型的模板 + this.getunitallbuilding() + }) + }else{ + const config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.snackBar.open('保存成功','确定',config); + } + }), + err=>{ + const config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.snackBar.open('请填写正确信息','确定',config); + } + } + + + } + selected:any + + isshowrule:boolean = false + rulevalue:any + inputchange(e,name,value,item){ + // console.log(e.target.value,name,value,item) + // console.log(item) + if(name == "≥"){ + if(Number(e.target.value)< Number(value)){ + item.isshowrule = true + item.rulevalue = `请输入≥${value}的值` + }else{ + item.isshowrule = false + } + } + if(name == "≤"){ + if(Number(e.target.value) > Number(value)){ + item.isshowrule = true + item.rulevalue = `请输入≤${value}的值` + }else{ + item.isshowrule = false + } + } + if(name == "Range"){ + let rangenum = value.split(",") + // console.log(rangenum) + if(Number(e.target.value) < Number(rangenum[0]) || Number(e.target.value) >= Number(rangenum[1])){ + item.isshowrule = true + item.rulevalue = `请输入位于${Number(rangenum[0])}和${Number(rangenum[1])-1}之间的值` + }else{ + item.isshowrule = false + } + } + } + + //切换建筑类型 + templatebuildtype(n ,item,key){ + this.http.get("/api/Buildings",{ + params:{ + companyId:this.unitId + } + }).subscribe((data:any)=>{ + this.allBuildings = data + this.http.put(`/api/Buildings/${item.buildingId}`,{ //修改当前建筑类型 + id: item.buildingId, + name: item.housename, + order: this.allBuildings[key].order, + enabled: true, + companyId: this.unitinfo.id, + buildingTypes: [ + { + id: n.id, + name: n.name + } + ] + },{ + params:{ + companyId : this.unitId + } + }).subscribe(data=>{ + this.http.get("/api/BuildingBasicInfos",{//请求当前建筑类型的模板信息保存到数组中 + params:{ + companyId :this.unitId, + buildingId:item.buildingId, + buildingType:n.id + } + }).subscribe(data=>{ + this.getunithouse(data,n,item) + this.houses[item.index] = data[0] + + let _data = data + this.http.get("/api/BuildingCustomData",{params:{ + buildingId:item.buildingId + }}).subscribe((data:any)=>{ + _data[0].buildingCustomData = data + if(data && data.customProperties.length != 0){ + _data[0].isCustomData = true + }else{ + _data[0].isCustomData = false + _data[0].buildingCustomData ={ + id: "", + customProperties: [ + { + name: "", + value: "" + } + ], + buildingId: _data[0].buildingId + } + } + }) + }) + }) + }) + + + } + + deviceinfo=[] //用于存储石头化工的第一个表格 + //提交单位模板信息 + onSubmit2(value,item,key,invalid){ + this.http.get("/api/Buildings",{ + params:{ + companyId:this.unitId + } + }).subscribe((data:any)=>{ + this.allBuildings = data + if(invalid){ + const config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.snackBar.open('请填写必填项','确定',config); + }else{ + this.http.put(`/api/Buildings/${item.buildingId}`,{ //(通用)只修改建筑名称和建筑类型 + id: item.buildingId, + name: value.housename, + order: this.allBuildings[key].order, + enabled: true, + companyId: this.unitinfo.id, + buildingTypes: [ + { + id: item.buildingtypeId, + name: item.buildtype + } + ] + },{params:{ + companyId : this.unitId + }}).subscribe((data:any)=>{ + this.houses[item.index].username = item.name + }, + err=>{ + alert("名称和类型保存失败") + }) + + if(value.checkbuilding){//如果勾选了自定义信息的checkbox + var CustomDataval = [] + for (const key in value) { + if (key.indexOf("CustomData") != -1) { + CustomDataval.push(value[key]) + } + } + let newCustomData = this.FunData(CustomDataval) + let newCustomDataval = [] + newCustomData.forEach(n=>{ + newCustomDataval.push({ + name:n[0], + value:n[1] + }) + }) + let CustomDatabody = { + id: "", + customProperties: newCustomDataval, + buildingId: item.buildingId + } + this.http.post("/api/BuildingCustomData",CustomDatabody,{params:{ + companyId :this.unitId, + buildingId:item.buildingId + }}).subscribe(data=>{ + + }, + err=>{ + alert("自定义信息保存失败") + }) + }else{ + let CustomDatabody = { + id: "", + customProperties: [], + buildingId: item.buildingId + } + this.http.post("/api/BuildingCustomData",CustomDatabody,{params:{ + companyId :this.unitId, + buildingId:item.buildingId + }}).subscribe(data=>{ + + }, + err=>{ + alert("自定义信息保存失败") + }) + } + + + if(item.buildtype != "石油化工类" && item.buildtype != "地铁类"){ + // console.log(this.houses[key]) + // console.log(value) + this.houses[key].buildingBasicGroups[0].propertyInfos.forEach(item => { + + if(item.propertyValue || item.propertyValue == 0){ + // item.propertyValue = "" + value[key] + item.propertyValue = String(item.propertyValue) + } + + }); + let newObj = _.cloneDeep(this.houses[key]) //把数据深拷贝取出来进行操作 + newObj.buildingBasicGroups[0].buildingId = item.buildingId + newObj.buildingBasicGroups[0].companyId = this.unitinfo.id + newObj.buildingBasicGroups[0].submitted = true //把是否提交过变为true + delete newObj.name + delete newObj.username + delete newObj.buildtype + delete newObj.tongyong + delete newObj.index + delete newObj.isCustomData + delete newObj.buildingCustomData + newObj.buildingBasicGroups[0].propertyInfos.forEach(item => { + delete item.isshowrule + delete item.rulevalue + }); + + let body = newObj + let newbody = [] + newbody.push(body) + if(newbody[0].buildingBasicGroups.length){ + this.http.post("/api/BuildingBasicInfos",newbody,{ + params:{ + companyId : this.unitId, + buildingId :newbody[0].buildingId + } + }).subscribe((data:any)=>{ + this.houses[key].id = data[0].id + const config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.snackBar.open('建筑信息保存成功','确定',config); + }, + err=>{ + const config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.snackBar.open('请检查输入数据是否有误','确定',config); + }) + } + } + if(item.buildtype == "石油化工类"){ + // console.log(888,item) + let bodyObj = _.cloneDeep(item) + delete bodyObj.name + delete bodyObj.username + delete bodyObj.isshiyou + delete bodyObj.newzhuangzhiinfodatasource + delete bodyObj.tongyong + delete bodyObj.buildtype + delete bodyObj.buildingtypeId + delete bodyObj.bigfor + delete bodyObj.index + delete bodyObj.isCustomData + delete bodyObj.buildingCustomData + // console.log(456,bodyObj) + bodyObj.buildingBasicGroups[0].propertyInfos.forEach(item => { + delete item.isshowrule + delete item.rulevalue + }); + //修改基本信息 + bodyObj.buildingBasicGroups[0].propertyInfos.forEach(item => { + for (const key in value) { + if (item.propertyName == key) { + if(item.propertyValue || item.propertyValue == 0){ + // item.propertyValue = "" + value[key] + item.propertyValue = String(value[key]) + } + + } + } + }); + bodyObj.buildingBasicGroups[0].submitted = true + bodyObj.buildingBasicGroups[0].buildingId = item.buildingId + bodyObj.buildingBasicGroups[0].companyId = this.unitinfo.id + //石油化工类的 装置信息 就提交这个表单——————————————————————————————this.deviceinfo 记得清空 + // console.log(this.deviceinfodata) + if(bodyObj.buildingBasicGroups[1].submitted){ //如果用户点击了并填写了装置信息就提交这个表格数据 + this.deviceinfo = [] + item.newzhuangzhiinfodatasource.forEach((element,index) => { + this.deviceinfo.push({ + propertyName: "装置区名称", + propertyValue: element.name, + propertyType: 0, + required: true, + ruleName: "", + ruleValue: "", + physicalUnit: "", + order:0, + enabled: true, + visible: true, + tag: String(index + 1) + }, + { + propertyName: "工艺流程", + propertyValue: element.flow, + propertyType: 0, + required: true, + ruleName: "", + ruleValue: "", + physicalUnit: "", + order:1, + enabled: true, + visible: true, + tag: String(index + 1) + }, + { + propertyName: "火灾危险性", + propertyValue: element.danger, + propertyType: 0, + required: true, + ruleName: "", + ruleValue: "", + physicalUnit: "", + order:2, + enabled: true, + visible: true, + tag: String(index + 1) + }, + { + propertyName: "灭火注意事项", + propertyValue: element.payattentionto, + propertyType: 1, + required: false, + ruleName: "", + ruleValue: "", + physicalUnit: "", + order:3, + enabled: true, + visible: true, + tag: String(index + 1) + }) + }); + }else{//否则就传一个空的 + this.deviceinfo = [ + { + propertyName: "装置区名称", + propertyValue: "", + propertyType: 0, + required: true, + ruleName: "", + ruleValue: "", + physicalUnit: "", + order: 0, + enabled: true, + visible: true, + tag: "1" + }, + { + propertyName: "工艺流程", + propertyValue: "", + propertyType: 0, + required: true, + ruleName: "", + ruleValue: "", + physicalUnit: "", + order: 0, + enabled: true, + visible: true, + tag: "1" + }, + { + propertyName: "火灾危险性", + propertyValue: "", + propertyType: 0, + required: true, + ruleName: "", + ruleValue: "", + physicalUnit: "", + order: 0, + enabled: true, + visible: true, + tag: "1" + }, + { + propertyName: "灭火注意事项", + propertyValue: "", + propertyType: 1, + required: false, + ruleName: "", + ruleValue: "", + physicalUnit: "", + order: 0, + enabled: true, + visible: true, + tag: "1" + } + ] + } + bodyObj.buildingBasicGroups[1].propertyInfos = this.deviceinfo + bodyObj.buildingBasicGroups[1].buildingId = item.buildingId + bodyObj.buildingBasicGroups[1].companyId = this.unitinfo.id + + + if(bodyObj.buildingBasicGroups[2].submitted){ //如果勾选了储罐信息 则直接提交当前bodyObj + var map = {}; //用于存储石油化工要提交的储罐信息表单 + for (let key in value) { + if (key.indexOf('tanker') != -1) { + const list = key.split('-'); // 2,tanker,1 + const orderKey = list[0]; // 2 or 3 + if (!(orderKey in map)) { + map[orderKey] = []; // map[2] or map[3] = []; + } + map[orderKey][list[2]] = value[key]; // map[2][1] = xxxxx + } + } + + bodyObj.buildingBasicGroups.splice( 2 , bodyObj.buildingBasicGroups.length) + + // console.log(123, item) + + let basictankinfobody:any = {} + + for(let key in map){//------------------------------------------------------------石油化工 储罐信息 + + + basictankinfobody = { + id: null, + name: "罐区" + (Number(key)-1), + type: 0, + addMode: 2, + basicGroupId:'', + submitted:true, + isOptional:true, + order: Number(key), + enabled: true, + propertyInfos: item.bigfor[Number(key)-2][0].propertyInfos, + basicCategoryId: item.basicCategoryId, + buildingBasicId: null, + buildingId: item.buildingId,//当前建筑id + companyId: this.unitinfo.id//当前企业id + } + + bodyObj.buildingBasicGroups.push(basictankinfobody) + } + + + let basictankchildinfobody:any = []//-------------后续储罐信息以及储罐信息/罐区情况都push到这个数组中 + item.bigfor.forEach(item => { + basictankchildinfobody.push(item[1].propertyInfos) + }); + var _item = item + basictankchildinfobody.forEach((item,index) => { + let tankfieldArr = [] + item.forEach((element,key) => { + tankfieldArr.push( + { + propertyName: "罐区", + propertyValue: element.tank, + propertyType: 0, + required: false, + ruleName: "", + ruleValue: "", + physicalUnit: "", + order: 0, + enabled: true, + visible: true, + tag:String(key + 1) + }, + { + propertyName: "储罐编号", + propertyValue: element.tankid, + propertyType: 0, + required: true, + ruleName: "", + ruleValue: "", + physicalUnit: "", + order: 0, + enabled: true, + visible: true, + tag:String(key + 1) + }, + { + propertyName: "储存介质", + propertyValue: element.tankmedium, + propertyType: 0, + required: true, + ruleName: "", + ruleValue: "", + physicalUnit: "", + order: 0, + enabled: true, + visible: true, + tag:String(key + 1) + }, + { + propertyName: "储罐类型", + propertyValue: element.tanktype, + propertyType: 0, + required: true, + ruleName: "", + ruleValue: "", + physicalUnit: "", + order: 0, + enabled: true, + visible: true, + tag:String(key + 1) + }, + { + propertyName: "容量", + propertyValue: element.tankcapacity, + propertyType: 2, + required: true, + ruleName: "", + ruleValue: "", + physicalUnit: "㎡", + order: 0, + enabled: true, + visible: true, + tag:String(key + 1) + }, + { + propertyName: "直径", + propertyValue:element.tankdiameter, + propertyType: 2, + required: true, + ruleName: "", + ruleValue: "", + physicalUnit: "m", + order: 0, + enabled: true, + visible: true, + tag:String(key + 1) + }, + { + propertyName: "高度", + propertyValue: element.tankheight, + propertyType: 2, + required: true, + ruleName: "", + ruleValue: "", + physicalUnit: "m", + order: 0, + enabled: true, + visible: true, + tag:String(key + 1) + }, + { + propertyName: "顶盖形式", + propertyValue: element.tanktectum, + propertyType: 0, + required: false, + ruleName: "", + ruleValue: "", + physicalUnit: "", + order: 0, + enabled: true, + visible: true, + tag:String(key + 1) + }, + { + propertyName: "浮盘材质", + propertyValue: element.tanktexture, + propertyType: 0, + required: false, + ruleName: "", + ruleValue: "", + physicalUnit: "", + order: 0, + enabled: true, + visible: true, + tag:String(key + 1) + }, + { + propertyName: "浮盘类型", + propertyValue: element.platetype, + propertyType: 0, + required: false, + ruleName: "", + ruleValue: "", + physicalUnit: "", + order: 0, + enabled: true, + visible: true, + tag:String(key + 1) + }, + { + propertyName: "泡沫产生器型号", + propertyValue: element.foamgeneratorid, + propertyType: 0, + required: false, + ruleName: "", + ruleValue: "", + physicalUnit: "", + order: 0, + enabled: true, + visible: true, + tag:String(key + 1) + }, + { + propertyName: "泡沫产生器形式", + propertyValue: element.foamgeneratortype, + propertyType: 0, + required: false, + ruleName: "", + ruleValue: "", + physicalUnit: "", + order: 0, + enabled: true, + visible: true, + tag:String(key + 1) + }, + { + propertyName: "是否设置氮封惰化保护装置", + propertyValue: element.isprotect, + propertyType: 0, + required: false, + ruleName: "", + ruleValue: "", + physicalUnit: "", + order: 0, + enabled: true, + visible: true, + tag:String(key + 1) + }, + { + propertyName: "防护堤高度", + propertyValue: element.fendinggroyneheight, + propertyType: 2, + required: true, + ruleName: "", + ruleValue: "", + physicalUnit: "m", + order: 0, + enabled: true, + visible: true, + tag:String(key + 1) + }, + { + propertyName: "半固定泡沫灭火接口数量", + propertyValue: element.portnum, + propertyType: 2, + required: false, + ruleName: "", + ruleValue: "", + physicalUnit: "个", + order: 0, + enabled: true, + visible: true, + tag:String(key + 1) + }, + { + propertyName: "其它设施", + propertyValue: element.else, + propertyType: 0, + required: false, + ruleName: "", + ruleValue: "", + physicalUnit: "", + order: 0, + enabled: true, + visible: true, + tag:String(key + 1) + } + ) + }); + basictankchildinfobody={// + id: null, + name: "罐区" + Number(index+1) + "/储罐信息", + type: 1, + addMode: 2, + basicGroupId:'', + order: Number(index + 2), + enabled: true, + submitted:true, + isOptional:true, + propertyInfos: tankfieldArr, + basicCategoryId: _item.basicCategoryId, + buildingBasicId: null, + buildingId: _item.buildingId, + companyId: this.unitinfo.id + } + bodyObj.buildingBasicGroups.push(basictankchildinfobody) + }); + }else{ + + + bodyObj.buildingBasicGroups[2].buildingId = item.buildingId + bodyObj.buildingBasicGroups[2].companyId = this.unitinfo.id + bodyObj.buildingBasicGroups[2].propertyInfos.forEach(item=>{ + item.propertyValue = "" + }) + bodyObj.buildingBasicGroups[3].buildingId = item.buildingId + bodyObj.buildingBasicGroups[3].companyId = this.unitinfo.id + bodyObj.buildingBasicGroups[3].propertyInfos = [ + { + propertyName: "罐区", + propertyValue: "", + propertyType: 0, + required: false, + ruleName: "", + ruleValue: "", + physicalUnit: "", + order: 0, + enabled: true, + visible: true, + tag:"1" + }, + { + propertyName: "储罐编号", + propertyValue: "", + propertyType: 0, + required: true, + ruleName: "", + ruleValue: "", + physicalUnit: "", + order: 0, + enabled: true, + visible: true, + tag:"1" + }, + { + propertyName: "储存介质", + propertyValue: "", + propertyType: 0, + required: true, + ruleName: "", + ruleValue: "", + physicalUnit: "", + order: 0, + enabled: true, + visible: true, + tag:"1" + }, + { + propertyName: "储罐类型", + propertyValue:"", + propertyType: 0, + required: true, + ruleName: "", + ruleValue: "", + physicalUnit: "", + order: 0, + enabled: true, + visible: true, + tag:"1" + }, + { + propertyName: "容量", + propertyValue: "", + propertyType: 2, + required: true, + ruleName: "", + ruleValue: "", + physicalUnit: "㎡", + order: 0, + enabled: true, + visible: true, + tag:"1" + }, + { + propertyName: "直径", + propertyValue:"", + propertyType: 2, + required: true, + ruleName: "", + ruleValue: "", + physicalUnit: "m", + order: 0, + enabled: true, + visible: true, + tag:"1" + }, + { + propertyName: "高度", + propertyValue: "", + propertyType: 2, + required: true, + ruleName: "", + ruleValue: "", + physicalUnit: "m", + order: 0, + enabled: true, + visible: true, + tag:"1" + }, + { + propertyName: "顶盖形式", + propertyValue: "", + propertyType: 0, + required: false, + ruleName: "", + ruleValue: "", + physicalUnit: "", + order: 0, + enabled: true, + visible: true, + tag:"1" + }, + { + propertyName: "浮盘材质", + propertyValue:"", + propertyType: 0, + required: false, + ruleName: "", + ruleValue: "", + physicalUnit: "", + order: 0, + enabled: true, + visible: true, + tag:"1" + }, + { + propertyName: "浮盘类型", + propertyValue: "", + propertyType: 0, + required: false, + ruleName: "", + ruleValue: "", + physicalUnit: "", + order: 0, + enabled: true, + visible: true, + tag:"1" + }, + { + propertyName: "泡沫产生器型号", + propertyValue:"", + propertyType: 0, + required: false, + ruleName: "", + ruleValue: "", + physicalUnit: "", + order: 0, + enabled: true, + visible: true, + tag:"1" + }, + { + propertyName: "泡沫产生器形式", + propertyValue: "", + propertyType: 0, + required: false, + ruleName: "", + ruleValue: "", + physicalUnit: "", + order: 0, + enabled: true, + visible: true, + tag:"1" + }, + { + propertyName: "是否设置氮封惰化保护装置", + propertyValue:"", + propertyType: 0, + required: false, + ruleName: "", + ruleValue: "", + physicalUnit: "", + order: 0, + enabled: true, + visible: true, + tag:"1" + }, + { + propertyName: "防护堤高度", + propertyValue:"", + propertyType: 2, + required: true, + ruleName: "", + ruleValue: "", + physicalUnit: "m", + order: 0, + enabled: true, + visible: true, + tag:"1" + }, + { + propertyName: "半固定泡沫灭火接口数量", + propertyValue: "", + propertyType: 2, + required: false, + ruleName: "", + ruleValue: "", + physicalUnit: "个", + order: 0, + enabled: true, + visible: true, + tag:"1" + }, + { + propertyName: "其它设施", + propertyValue: "", + propertyType: 0, + required: false, + ruleName: "", + ruleValue: "", + physicalUnit: "", + order: 0, + enabled: true, + visible: true, + tag:"1" + } + ] + // console.log(888,bodyObj) + bodyObj.buildingBasicGroups.splice(4,bodyObj.buildingBasicGroups.length) + } + + + + let newbodyObj = [] + newbodyObj.push(bodyObj) + // console.log(1111,newbodyObj) + this.http.post("/api/BuildingBasicInfos",newbodyObj,{ + params:{ + companyId : this.unitId, + buildingId :item.buildingId + } + }).subscribe((data:any)=>{ + this.houses[key].id = data[0].id + const config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.snackBar.open('建筑信息保存成功','确定',config); + // alert("建筑信息保存成功") + }, + err=>{ + const config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.snackBar.open('请检查输入数据是否有误','确定',config); + }) + } + if(item.buildtype == "地铁类"){ + let newObj = _.cloneDeep(item) + delete newObj.username + delete newObj.name + delete newObj.tongyong + delete newObj.ditie + delete newObj.buildtype + delete newObj.isCustomData + delete newObj.buildingCustomData + newObj.buildingBasicGroups.forEach(item => { + item.propertyInfos.forEach(element => { + delete element.isshowrule + delete element.rulevalue + if( element.propertyValue || element.propertyValue == 0){ + element.propertyValue = String(element.propertyValue) + } + }); + item.buildingId = newObj.buildingId + item.companyId = this.unitinfo.id + item.submitted = true + }); + let newbodyObj2 = [] + newbodyObj2.push(newObj) + this.http.post("/api/BuildingBasicInfos",newbodyObj2,{ + params:{ + companyId : this.unitId, + buildingId :newObj.buildingId + } + }).subscribe((data:any)=>{ + this.houses[key].id = data[0].id + const config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.snackBar.open('建筑信息保存成功','确定',config); + }, + err=>{ + const config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.snackBar.open('请检查输入数据是否有误','确定',config); + }) + + } + } + }) + + + }} \ No newline at end of file diff --git a/src/app/key-unit/basicinfo/lookmaster.component.html b/src/app/key-unit/basicinfo/lookmaster.component.html new file mode 100644 index 0000000..674e8f4 --- /dev/null +++ b/src/app/key-unit/basicinfo/lookmaster.component.html @@ -0,0 +1,26 @@ +
    单位照片
    +
    +
    + +
    + + +
    +
    + +

    暂无单位图片,请先上传

    +
    +
    + + +
    + + + + + + diff --git a/src/app/key-unit/basicinfo/lookmaster.component.ts b/src/app/key-unit/basicinfo/lookmaster.component.ts new file mode 100644 index 0000000..79f3883 --- /dev/null +++ b/src/app/key-unit/basicinfo/lookmaster.component.ts @@ -0,0 +1,66 @@ +import { Component, OnInit, Inject } from '@angular/core'; +import {MatTreeFlatDataSource, MatTreeFlattener} from '@angular/material/tree'; +import {FlatTreeControl} from '@angular/cdk/tree'; +import { HttpClient } from '@angular/common/http'; +import {MatDialog, MatDialogRef, MAT_DIALOG_DATA} from '@angular/material/dialog'; +import {FormControl} from '@angular/forms'; +import { MatSnackBar } from '@angular/material/snack-bar'; + +@Component({ + selector: 'lookmaster', + templateUrl: './lookmaster.component.html', + styleUrls: ['./basicinfo.component.scss'] + }) + export class LookMaster { + // myControl = new FormControl(); + //注入MatDialogRef,可以用来关闭对话框 + //要访问对话框组件中的数据,必须使用MAT_DIALOG_DATA注入令牌 + constructor(private http: HttpClient,public dialogRef: MatDialogRef,@Inject(MAT_DIALOG_DATA) public data) {} + allunittype:any + ImgUrl:string + rotationAngle=0 + isheng:any + isshowimg:boolean + onNoClick(): void { + this.dialogRef.close(); + } + ngOnInit(): void { + if(this.data.img.indexOf('?') == -1){ + this.isshowimg = false + }else{ + this.isshowimg = true + var imgurl = this.data.img.split("?") + this.ImgUrl = imgurl[0] + } + + } + //点击旋转按钮时 + rotateA = 0 + rotateB = 0 + rotate(){ + var w= document.getElementsByClassName("imgitemdefault")[0]['naturalWidth']; + var h = document.getElementsByClassName("imgitemdefault")[0]['naturalHeight']; + + if(w > h){ + this.isheng = true + }else{ + this.isheng = false + } + if(this.isheng){ + this.rotateA += 90 + if(this.rotateA == 360){ + this.rotateA = 0 + } + }else{ + this.rotateB += 10 + if(this.rotateB == 40){ + this.rotateB = 0 + } + } + } + + + + + } + \ No newline at end of file diff --git a/src/app/key-unit/edit-plan-info/edit-plan-info.component.html b/src/app/key-unit/edit-plan-info/edit-plan-info.component.html new file mode 100644 index 0000000..2150dc9 --- /dev/null +++ b/src/app/key-unit/edit-plan-info/edit-plan-info.component.html @@ -0,0 +1,56 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 功能开发中~~ + + + + + 功能开发中~~ + + + + diff --git a/src/app/key-unit/edit-plan-info/edit-plan-info.component.scss b/src/app/key-unit/edit-plan-info/edit-plan-info.component.scss new file mode 100644 index 0000000..740a835 --- /dev/null +++ b/src/app/key-unit/edit-plan-info/edit-plan-info.component.scss @@ -0,0 +1,3 @@ +.mat-tab-body-wrapper{ + height: 100%!important; +} \ No newline at end of file diff --git a/src/app/key-unit/edit-plan-info/edit-plan-info.component.spec.ts b/src/app/key-unit/edit-plan-info/edit-plan-info.component.spec.ts new file mode 100644 index 0000000..c00abbf --- /dev/null +++ b/src/app/key-unit/edit-plan-info/edit-plan-info.component.spec.ts @@ -0,0 +1,25 @@ +import { async, ComponentFixture, TestBed } from '@angular/core/testing'; + +import { EditPlanInfoComponent } from './edit-plan-info.component'; + +describe('EditPlanInfoComponent', () => { + let component: EditPlanInfoComponent; + let fixture: ComponentFixture; + + beforeEach(async(() => { + TestBed.configureTestingModule({ + declarations: [ EditPlanInfoComponent ] + }) + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(EditPlanInfoComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/key-unit/edit-plan-info/edit-plan-info.component.ts b/src/app/key-unit/edit-plan-info/edit-plan-info.component.ts new file mode 100644 index 0000000..63466e0 --- /dev/null +++ b/src/app/key-unit/edit-plan-info/edit-plan-info.component.ts @@ -0,0 +1,15 @@ +import { Component, OnInit } from '@angular/core'; + +@Component({ + selector: 'app-edit-plan-info', + templateUrl: './edit-plan-info.component.html', + styleUrls: ['./edit-plan-info.component.scss'] +}) +export class EditPlanInfoComponent implements OnInit { + + constructor() { } + + ngOnInit(): void { + } + +} diff --git a/src/app/key-unit/edit-unit-info/edit-unit-info.component.html b/src/app/key-unit/edit-unit-info/edit-unit-info.component.html new file mode 100644 index 0000000..a940ac0 --- /dev/null +++ b/src/app/key-unit/edit-unit-info/edit-unit-info.component.html @@ -0,0 +1,59 @@ + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 功能开发中~~ + + + + + 功能开发中~~ + + + + + + + + diff --git a/src/app/key-unit/edit-unit-info/edit-unit-info.component.scss b/src/app/key-unit/edit-unit-info/edit-unit-info.component.scss new file mode 100644 index 0000000..740a835 --- /dev/null +++ b/src/app/key-unit/edit-unit-info/edit-unit-info.component.scss @@ -0,0 +1,3 @@ +.mat-tab-body-wrapper{ + height: 100%!important; +} \ No newline at end of file diff --git a/src/app/key-unit/edit-unit-info/edit-unit-info.component.spec.ts b/src/app/key-unit/edit-unit-info/edit-unit-info.component.spec.ts new file mode 100644 index 0000000..2519094 --- /dev/null +++ b/src/app/key-unit/edit-unit-info/edit-unit-info.component.spec.ts @@ -0,0 +1,25 @@ +import { async, ComponentFixture, TestBed } from '@angular/core/testing'; + +import { EditUnitInfoComponent } from './edit-unit-info.component'; + +describe('EditUnitInfoComponent', () => { + let component: EditUnitInfoComponent; + let fixture: ComponentFixture; + + beforeEach(async(() => { + TestBed.configureTestingModule({ + declarations: [ EditUnitInfoComponent ] + }) + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(EditUnitInfoComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/key-unit/edit-unit-info/edit-unit-info.component.ts b/src/app/key-unit/edit-unit-info/edit-unit-info.component.ts new file mode 100644 index 0000000..d15c32a --- /dev/null +++ b/src/app/key-unit/edit-unit-info/edit-unit-info.component.ts @@ -0,0 +1,23 @@ +import { Component, OnInit } from '@angular/core'; +// import { BasicinfoComponent } from '../basicinfo/basicinfo.component' +import { Router,ActivatedRoute } from '@angular/router' +import {MTokenK1Service} from '../../m-token-k1/m-token-k1.service' //引入服务 + + + +@Component({ + selector: 'app-edit-unit-info', + templateUrl: './edit-unit-info.component.html', + styleUrls: ['./edit-unit-info.component.scss'] +}) +export class EditUnitInfoComponent implements OnInit { + + constructor(private router:Router,private route:ActivatedRoute,public mToken: MTokenK1Service) { } + + + ngOnInit(): void { + } + + + +} diff --git a/src/app/key-unit/fire-fighting-device-look/addGrouping.component.ts b/src/app/key-unit/fire-fighting-device-look/addGrouping.component.ts new file mode 100644 index 0000000..ef3ae9d --- /dev/null +++ b/src/app/key-unit/fire-fighting-device-look/addGrouping.component.ts @@ -0,0 +1,69 @@ +import { Component, OnInit, Inject } from '@angular/core'; +import { HttpClient } from '@angular/common/http'; +import {MatDialog, MatDialogRef, MAT_DIALOG_DATA} from '@angular/material/dialog'; +import { MatSnackBar, MatSnackBarConfig } from '@angular/material/snack-bar'; + + + +@Component({ + selector: 'imgsdatadetail', + templateUrl: './addGrouping.html', + styleUrls: ['./fire-fighting-device.component.scss'] + }) +export class ImgsDataDetail2 { + + constructor(private http: HttpClient,public dialogRef: MatDialogRef,@Inject(MAT_DIALOG_DATA) public data,public snackBar: MatSnackBar) {} + + ngOnInit(): void { + + } + + ngAfterViewInit(): void{ + + } + + //提交表单 + onSubmit (e) { + if (this.data.buildingId) { //建筑新建内置项 + let repeat = this.data.item.facilityItems.find(items=>items.name==e.name) + if (repeat==undefined) { + let header = {buildingId:this.data.buildingId, groupId:this.data.item.id} + let msg = { + isBuiltin: false, + details: '', + name: e.name, + isEachFloor: false, + order: this.data.item.facilityItems.length? this.data.item.facilityItems[this.data.item.facilityItems.length-1].order+1 : 0} + this.http.post('/api/CompanyAccount/BuildingFacilityItems',msg,{params:header}).subscribe(data=>{ + this.dialogRef.close(data); }) + } else { + const config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.snackBar.open('当前分组下禁止创建名称相同内置项','确定',config); + } + } else { //单位新建内置项 + let repeat = this.data.facilityItems.find(item=>item.name==e.name) + if (repeat==undefined) { + let header = {groupId:this.data.id} + let msg = { + isBuiltin: false, + details: '', + name: e.name, + isEachFloor: false, + order: this.data.facilityItems.length? this.data.facilityItems[this.data.facilityItems.length-1].order+1 : 0} + this.http.post('/api/CompanyAccount/CompanyFacilityItems',msg,{params:header}).subscribe(data=>{ + this.dialogRef.close(data); }) + } else { + const config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.snackBar.open('当前分组下禁止创建名称相同内置项','确定',config); + } + } //else + } + + + +} + \ No newline at end of file diff --git a/src/app/key-unit/fire-fighting-device-look/addGrouping.html b/src/app/key-unit/fire-fighting-device-look/addGrouping.html new file mode 100644 index 0000000..916fc28 --- /dev/null +++ b/src/app/key-unit/fire-fighting-device-look/addGrouping.html @@ -0,0 +1,18 @@ +
    创建消防设施内置项
    +
    +
    + + + + +

    *注: 该名称不允许与当前分组内置项重名

    + +
    + + +
    +
    +
    \ No newline at end of file diff --git a/src/app/key-unit/fire-fighting-device-look/fire-fighting-device.component.html b/src/app/key-unit/fire-fighting-device-look/fire-fighting-device.component.html new file mode 100644 index 0000000..44661db --- /dev/null +++ b/src/app/key-unit/fire-fighting-device-look/fire-fighting-device.component.html @@ -0,0 +1,193 @@ +
    + + +
    + +

    暂无数据,请完善单位基本信息

    +
    +

    {{item.name}}

    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + + +
    {{header}}
    {{body[header]? body[header] : '暂无数据'}}
    +
    +
    +

    楼层/区域名称: {{tableMsg.name? tableMsg.name: '暂无名称'}}

    + + + + + + + +
    {{header}}
    {{body[header]? body[header] : '暂无数据'}}
    +
    +
    +
    + +
    +
    +
    + +
    + + + + +

    {{item.name}}

    + +
    +
    + + + + + + + {{radio.name}} + +
    +
    + +
    +
    + +
    +
    + + +
    + +
    +

    {{item.name}}

    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + + +
    {{header}}
    {{body[header]? body[header] : '暂无数据'}}
    +
    +
    +

    楼层/区域名称: {{tableMsg.name? tableMsg.name : '暂无名称'}}

    + + + + + + + +
    {{header}}
    {{body[header]? body[header] : '暂无数据'}}
    +
    +
    +
    + +
    +
    +
    + +
    + + + + +

    {{item.name}}

    + +
    +
    + + + + + + + {{radio.name}} + +
    +
    + +
    +
    + +
    +
    + +
    +
    \ No newline at end of file diff --git a/src/app/key-unit/fire-fighting-device-look/fire-fighting-device.component.scss b/src/app/key-unit/fire-fighting-device-look/fire-fighting-device.component.scss new file mode 100644 index 0000000..3ea1f32 --- /dev/null +++ b/src/app/key-unit/fire-fighting-device-look/fire-fighting-device.component.scss @@ -0,0 +1,145 @@ +.content { + width: 100%; + height: 90%; + padding: 10px; + overflow-y: auto; + .contentBox { + width: 90%; + height: 100%; + margin: 0 auto; + overflow-y: auto; + } +} +.mat-icon { + color: black; + cursor:pointer; +} + + + +//可展开面板每一行css +.mat-expansion-panel-header { + padding: 3px 24px; +} + +.firstContent { + width: 3%; +} +.textContent { + width: 12%; + color: black; + text-align: center; + overflow: hidden; + text-overflow:ellipsis; + white-space: nowrap; +} +.totalContent { + width: 25%; + color: black; + text-align: center; + white-space: pre-line; + max-height: 48px; + overflow-y: auto; +} +.lastTextContent { //textarea多行文本 + width: 45%; + color: black; + text-align: center; +} +input { + height: 22px; + line-height: 22px; + padding-left: 5px; + border-radius: 3px; +} +a { + color: #0000ff; +} + + + +//bottom用户输入框 +.InputField { + display: inline-block; + width: 40%; + text-align: right; + margin: 10px 25px; + input {width: 60%;} + label {margin-right: 10px;} +} +textarea { + vertical-align: middle; + border-radius: 5px; + padding: 5px; + width: 60%; + height: 36px; + resize: none; +} + + + +//表格样式 +.overflowTable { + width: 95%; + margin: 0 auto; + max-height: 300px; + overflow-y: auto; +} +.detailsTable { + margin: 10px 0; + table { + width: 100%; + text-align: center; + border-collapse:collapse; + word-break:break-all; + word-wrap:break-all; + table-layout:fixed; + th { + height: 35px; + border: 1px solid #999;} + td { + height: 35px; + border: 1px solid #999;} + } +} + + + +//滚动条样式 +::-webkit-scrollbar{ + width: 5px; + background-color: white; +} +::-webkit-scrollbar-thumb{ + background-color: #999; +} + + + +//img图片列表页面 +.imageList { + width: 100%; + height: 100%; + overflow-y: auto; + .imageListBox { + width: 100%; + height: 90%; + display: flex; + flex-direction: row; + flex-wrap: wrap; + .imagesBox { + width: 300px; + height: 200px; + margin: 0 11px 0 11px; + display: inline-block; + img { + border: 1px solid #999; + width: auto; + height: auto; + max-width: 100%; + height: 170px; + cursor:pointer; + } + } + } +} diff --git a/src/app/key-unit/fire-fighting-device-look/fire-fighting-device.component.ts b/src/app/key-unit/fire-fighting-device-look/fire-fighting-device.component.ts new file mode 100644 index 0000000..cf62564 --- /dev/null +++ b/src/app/key-unit/fire-fighting-device-look/fire-fighting-device.component.ts @@ -0,0 +1,538 @@ +import { Component, OnInit, ViewChild, Inject } from '@angular/core'; +import {HttpClient, HttpHeaders} from '@angular/common/http' +import { MatDialogRef, MatDialog, MAT_DIALOG_DATA } from '@angular/material/dialog'; +import { ImgsDataDetail2 } from './addGrouping.component' +import { MatSnackBarConfig, MatSnackBar } from '@angular/material/snack-bar'; +import { ImagesData2 } from './imagesdata.component' +import { Router,ActivatedRoute } from '@angular/router' + + +export interface Food { + value: string; + name: string; +} +@Component({ + selector: 'app-fire-fighting-device-look', + templateUrl: './fire-fighting-device.component.html', + styleUrls: ['./fire-fighting-device.component.scss'] +}) +export class FireFightingDeviceLookComponent implements OnInit { + + constructor(private router:Router,private route:ActivatedRoute,public http: HttpClient,public dialog: MatDialog,public snackBar: MatSnackBar) { } + + ngOnInit(): void { + this.getCompanyInformation() + this.getAllBuilding() + } + + //定义属性数据 + singleElection:Food[]=[ + {value:'true', name: '有'}, + {value:'false', name: '无'}] + + companyBuiltInGrouping:any = []; //单位消防设施内置分组 + companyDetails:any = []; //单位详情 + companyEachDetails:any = [] //单位每层详情 + companyOptionalGrouping:any = []; //单位消防设施可选分组 + + //获得单位基本信息 + getCompanyInformation () { + let companyId = this.route.snapshot.queryParams.id + this.http.get(`/api/Companies/${companyId}`).subscribe((data:any)=>{ + if (data.buildingTypes.length) { + let newData = {buildingType: data.buildingTypes[0].id,companyId : companyId} + this.http.get('/api/CompanyFacilities',{params:newData}).subscribe((data:any)=>{ //获得单位的消防设施 + this.companyBuiltInGrouping = data[0].summary.companyFacilityGroups + this.companyOptionalGrouping = data[0].summary.companyOptionalGroups + this.companyDetails = data[0].details + this.companyEachDetails = data[0].eachDetails + this.companyBuiltInGrouping.forEach(element => { //循环单位内置分组项 + element.selectBuiltInGrouping = [] + element.facilityItems.forEach((elements,index) => { + elements.total = element.facilityCount[index] + elements.expanded = false}); + }); + }) //http + } //if + + }) + } + + //创建单位消防设施内置分组项 + addCompanyGrouping (e) { + let data = e + let dialogRef = this.dialog.open(ImagesData2,{data}); + dialogRef.afterClosed().subscribe(data=>{ + if (data) { e.facilityItems.push(data) } }); + } + + //保存单位消防设施内置分组项 + editCompanyGrouping(e) { + let header = {groupId:e.id} + let data = [] + e.facilityItems.forEach((element,index) => { + let msg = { + isBuiltin: element.isBuiltin, + details: element.details, + name: element.name, + isEachFloor: element.isEachFloor, + order: element.order} + data.push(msg) + if (index==e.facilityItems.length-1) { + this.http.post('/api/CompanyFacilityItems/Batch',data,{params:header}).subscribe(data=>{ + const config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.snackBar.open('数据更新成功','确定',config); + }) } + }); //forEach + + } + + //checked单位消防设施内置分组项时 + checkedCompany (e,item,items) { + if (e.checked) { + item.selectBuiltInGrouping.push(items) + } else { + item.selectBuiltInGrouping.splice(item.selectBuiltInGrouping.findIndex(oldItem => oldItem == items), 1) + } + } + + //删除消防设施内置分组项 + deleteCompanyGrouping (e) { + if (e.selectBuiltInGrouping.length) { + let isDelete = confirm('您确定要删除吗') + if (isDelete) { + let msg:any = `?groupId=${e.id}` + e.selectBuiltInGrouping.forEach((element,index) => { + let data = `&name=${element.name}` + msg = msg + data + if (index === e.selectBuiltInGrouping.length-1) { + this.http.delete('/api/CompanyFacilityItems/Batch' + msg).subscribe(data=>{ + let deleteMsg = e.selectBuiltInGrouping + deleteMsg.forEach(deleteElement => { + e.facilityItems.splice(e.facilityItems.findIndex(item=>item.name==deleteElement.name),1) + }); + e.selectBuiltInGrouping = [] + + }) //http + } //if + }); //forEach + } + } else { + const config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.snackBar.open('请选择内置分组项','确定',config); + } + } + + //保存单位消防设施可选分组 + editCompanyOptional (e,item) { + e.stopPropagation() //阻止冒泡 + item.propertyInfos.forEach((element,index) => { + element.propertyValue = String(element.propertyValue) + if (index == item.propertyInfos.length-1 ) { + this.http.post('/api/CompanyOptionalGroups',item).subscribe(data=>{ + const config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.snackBar.open('数据更新成功','确定',config); + }) + } //if + }); + } + + //单位消防设施切换展开面板 + SwitchBoard (e) { + e.expanded = !e.expanded + if (e.expanded) { //展开面板展开时 + if (e.isEachFloor) { //逐层统计时 + let data = this.companyEachDetails[e.name] + if (data) { + e.loopTable = [] + data.forEach(item => { + let tableMsg = {name:item.name, header:[], body:[]} + item.assets[0].propertyInfos.forEach(element => { //表头 + if (element.propertyType!=3) { + let unit = element.physicalUnit? '('+ element.physicalUnit +')' : '' //单位 + tableMsg.header.push(element.propertyName+unit)} + }); + item.assets.forEach(element => { //表格内容 + let everyBody = {} + element.propertyInfos.forEach((elements,index) => { + if (elements.propertyType!=3 && elements.propertyName!='图片' && elements.propertyType!=6) { + let unit = elements.physicalUnit? '('+ elements.physicalUnit +')' : '' //单位 + everyBody[elements.propertyName+unit] = elements.propertyValue } + if (elements.propertyType==6) { + let unit = elements.physicalUnit? '('+ elements.physicalUnit +')' : '' //单位 + everyBody[elements.propertyName+unit] = elements.propertyValue=='1'?'是':'否' } + if (elements.propertyType!=3 && elements.propertyName=='图片') { + let imgLength = [] + element.propertyInfos.find(item=>{ if(item.propertyType==3){imgLength.push(item)} }) + let unit = elements.physicalUnit? '('+ elements.physicalUnit +')' : '' //单位 + everyBody[elements.propertyName+unit] = String(imgLength.length) } + + }); //propertyInfos + tableMsg.body.push(everyBody) + }); //assets + e.loopTable.push(tableMsg) + }); + + } //data有数据时 + } else { //非逐层统计时 + let data = this.companyDetails[e.name] + if (data) { + e.header = [] + e.body = [] + data[0].propertyInfos.forEach(element => { //表头 + if (element.propertyType!=3) { + let unit = element.physicalUnit? '('+ element.physicalUnit +')' : '' //单位 + e.header.push(element.propertyName+unit)} + }); + data.forEach(element => { //表格内容 + let everyBody = {} + element.propertyInfos.forEach((elements,index) => { + if (elements.propertyType!=3 && elements.propertyName!='图片' && elements.propertyType!=6) { + let unit = elements.physicalUnit? '('+ elements.physicalUnit +')' : '' //单位 + everyBody[elements.propertyName+unit] = elements.propertyValue } + if (elements.propertyType==6) { + let unit = elements.physicalUnit? '('+ elements.physicalUnit +')' : '' //单位 + everyBody[elements.propertyName+unit] = elements.propertyValue=='1'?'是':'否' } + if (elements.propertyType!=3 && elements.propertyName=='图片') { + let imgLength = [] + element.propertyInfos.find(item=>{ if(item.propertyType==3){imgLength.push(item)} }) + let unit = elements.physicalUnit? '('+ elements.physicalUnit +')' : '' //单位 + everyBody[elements.propertyName+unit] = String(imgLength.length) } + + }); + e.body.push(everyBody) + }); + + } + } //非逐层统计时 + + + + } + } + + + + allBuildingGrouping:any; //所有建筑的消防设施 内置分组+可选分组 + //获取所有建筑 + getAllBuilding () { + let companyId = this.route.snapshot.queryParams.id + this.http.get('/api/Buildings',{params:{ + companyId:companyId + }}).subscribe((data:any)=>{ + this.allBuildingGrouping = data + if (this.allBuildingGrouping.length) { this.getAllBuildingFacilities() } + }) + } + + //获取所有建筑的消防设施 + getAllBuildingFacilities () { + let companyId = this.route.snapshot.queryParams.id + this.allBuildingGrouping.forEach(element => { + let header = {buildingId: element.id, buildingType: element.buildingTypes[0].id,companyId:companyId} + this.http.get('/api/BuildingFacilities',{params:header}).subscribe(data=>{ + element.buildingFacilityGroups = data[0].summary.buildingFacilityGroups + element.buildingOptionalGroups = data[0].summary.buildingOptionalGroups + element.buildingDetails = data[0].details + element.buildingEachDetails = data[0].eachDetails + element.buildingFacilityGroups.forEach((elements) => { //循环每个建筑内置分组项 + elements.selectBuiltInGrouping = [] + elements.facilityItems.forEach((newElement,index) => { + newElement.total = elements.facilityCount[index] + newElement.expanded = false }); + }); + }) + + }); + + } + + //创建建筑消防设施内置分组项 + addBuildingGrouping (e,item) { + let data = {buildingId: e.id, item} + let dialogRef = this.dialog.open(ImgsDataDetail2,{data}); + dialogRef.afterClosed().subscribe(data=>{ + if (data) { item.facilityItems.push(data) } + }); + } + + //保存建筑消防设施内置分组项 + editBuildingGrouping (e,item) { + let companyId = this.route.snapshot.queryParams.id + let header = {companyId:companyId,buildingId:e.id, groupId:item.id} + let data = [] + item.facilityItems.forEach((element,index) => { + let msg = { + isBuiltin: element.isBuiltin, + details: element.details, + name: element.name, + isEachFloor: element.isEachFloor, + order: element.order} + data.push(msg) + if (index==item.facilityItems.length-1) { + this.http.post('/api/BuildingFacilityItems/Batch',data,{params:header}).subscribe(data=>{ + const config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.snackBar.open('数据更新成功','确定',config); + }) } + }); //forEach + + } + + //删除建筑消防设施内置分组项 + deleteBuildingGrouping (e,item) { + if (item.selectBuiltInGrouping.length) { + let isDelete = confirm('您确定要删除吗') + if (isDelete) { + let msg:any = `?buildingId=${e.id}&groupId=${item.id}` + item.selectBuiltInGrouping.forEach((element,index) => { + let data = `&name=${element.name}` + msg = msg + data + if (index === item.selectBuiltInGrouping.length-1) { + this.http.delete('/api/BuildingFacilityItems/Batch'+msg).subscribe(data=>{ + let deleteMsg = item.selectBuiltInGrouping + deleteMsg.forEach(deleteElement => { + item.facilityItems.splice(item.facilityItems.findIndex(items=>items.name==deleteElement.name),1) + }); + item.selectBuiltInGrouping = [] + + }) //http + } //if + }) //forEach + } + } else { + const config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.snackBar.open('请选择内置分组项','确定',config); + } + } + + //保存建筑消防设施可选分组 + editBuildingOptional (e,item) { + let companyId = this.route.snapshot.queryParams.id + e.stopPropagation() //阻止冒泡 + item.propertyInfos.forEach((element,index) => { + element.propertyValue = String(element.propertyValue) + if (index == item.propertyInfos.length-1 ) { + this.http.post('/api/BuildingOptionalGroups',item,{params:{ + companyId :companyId + }}).subscribe(data=>{ + const config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.snackBar.open('数据更新成功','确定',config); + }) + } //if + }); + } + + //建筑消防设施切换展开面板 + SwitchBuildingBoard (item,e) { + e.expanded = !e.expanded + if (e.expanded) { //展开面板展开时 + if (e.isEachFloor) { //逐层统计时 + let data = item.buildingEachDetails[e.name] + if (data) { + e.loopTable = [] + data.forEach(item => { + let tableMsg = {name:item.name, header:[], body:[]} + item.assets[0].propertyInfos.forEach(element => { //表头 + if (element.propertyType!=3) { + let unit = element.physicalUnit? '('+ element.physicalUnit +')' : '' //单位 + tableMsg.header.push(element.propertyName+unit)} + }); + item.assets.forEach(element => { //表格内容 + let everyBody = {} + element.propertyInfos.forEach((elements,index) => { + if (elements.propertyType!=3 && elements.propertyName!='图片' && elements.propertyType!=6) { + let unit = elements.physicalUnit? '('+ elements.physicalUnit +')' : '' //单位 + everyBody[elements.propertyName+unit] = elements.propertyValue } + if (elements.propertyType==6) { + let unit = elements.physicalUnit? '('+ elements.physicalUnit +')' : '' //单位 + everyBody[elements.propertyName+unit] = elements.propertyValue=='1'?'是':'否' } + if (elements.propertyType!=3 && elements.propertyName=='图片') { + let imgLength = [] + element.propertyInfos.find(item=>{ if(item.propertyType==3){imgLength.push(item)} }) + let unit = elements.physicalUnit? '('+ elements.physicalUnit +')' : '' //单位 + everyBody[elements.propertyName+unit] = String(imgLength.length) } + + }); //propertyInfos + tableMsg.body.push(everyBody) + }); //assets + e.loopTable.push(tableMsg) + }); + + } //data有数据时 + } else { //非逐层统计时 + let data = item.buildingDetails[e.name] + if (data) { + e.header = [] + e.body = [] + data[0].propertyInfos.forEach(element => { //表头 + if (element.propertyType!=3) { + let unit = element.physicalUnit? '('+ element.physicalUnit +')' : '' //单位 + e.header.push(element.propertyName+unit)} + }); + data.forEach(element => { //表格内容 + let everyBody = {} + element.propertyInfos.forEach((elements,index) => { + if (elements.propertyType!=3 && elements.propertyName!='图片' && elements.propertyType!=6) { + let unit = elements.physicalUnit? '('+ elements.physicalUnit +')' : '' //单位 + everyBody[elements.propertyName+unit] = elements.propertyValue } + if (elements.propertyType==6) { + let unit = elements.physicalUnit? '('+ elements.physicalUnit +')' : '' //单位 + everyBody[elements.propertyName+unit] = elements.propertyValue=='1'?'是':'否' } + if (elements.propertyType!=3 && elements.propertyName=='图片') { + let imgLength = [] + element.propertyInfos.find(item=>{ if(item.propertyType==3){imgLength.push(item)} }) + let unit = elements.physicalUnit? '('+ elements.physicalUnit +')' : '' //单位 + everyBody[elements.propertyName+unit] = String(imgLength.length) } + + }); + e.body.push(everyBody) + }); + + } + } //非逐层统计时 + + + + } + } + + //单位消防设施预览图片 + previewImg (e) { + if (e.isEachFloor) { //逐层统计时 + let newData = this.companyEachDetails[e.name] + if (newData) { + let data = {name:e.name, images:[]} + let imgName + newData.forEach(item => { + item.assets.forEach(element => { + element.propertyInfos.forEach( elements => { + if (elements.propertyName.includes('名称')) {imgName = elements.propertyValue} + if (elements.propertyType===3) { + elements.propertyName = imgName + data.images.push(elements)} }); + }); + }); //newDate + + if (data.images.length) { + let dialogRef = this.dialog.open(ImagesData2,{width:'1350px',height:'700px',data}); //打开图片弹窗 + } else { + const config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.snackBar.open('暂无图片数据','确定',config); + } + + } else{ + const config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.snackBar.open('暂无图片数据','确定',config); } + } else { //非逐层统计时 + let newData = this.companyDetails[e.name] + let imgName + if (newData) { + let data = {name:e.name, images:[]} + newData.forEach(element => { + element.propertyInfos.forEach(elements => { + if (elements.propertyName.includes('名称')) {imgName = elements.propertyValue} + if (elements.propertyType===3) { + elements.propertyName = imgName + data.images.push(elements)} }); + }); + if (data.images.length) { + let dialogRef = this.dialog.open(ImagesData2,{width:'1350px',height:'700px',data}); //打开图片弹窗 + } else { + const config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.snackBar.open('暂无图片数据','确定',config); + } + + } else { + const config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.snackBar.open('暂无图片数据','确定',config); } + } + + } + + //建筑消防设施预览图片 + previewBuildingImg (item,e) { + if (e.isEachFloor) { //逐层统计时 + let newData = item.buildingEachDetails[e.name] + if (newData) { + let data = {name:e.name, images:[]} + let imgName + newData.forEach(item => { + item.assets.forEach(element => { + element.propertyInfos.forEach( elements => { + if (elements.propertyName.includes('名称')) {imgName = elements.propertyValue} + if (elements.propertyType===3) { + elements.propertyName = imgName + data.images.push(elements)} }); + }); + }); //newDate + + if (data.images.length) { + let dialogRef = this.dialog.open(ImagesData2,{width:'1350px',height:'700px',data}); //打开图片弹窗 + } else { + const config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.snackBar.open('暂无图片数据','确定',config); + } + + } else{ + const config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.snackBar.open('暂无图片数据','确定',config); } + } else { //非逐层统计时 + let newData = item.buildingDetails[e.name] + let imgName + if (newData) { + let data = {name:e.name, images:[]} + newData.forEach(element => { + element.propertyInfos.forEach(elements => { + if (elements.propertyName.includes('名称')) {imgName = elements.propertyValue} + if (elements.propertyType===3) { + elements.propertyName = imgName + data.images.push(elements)} + }); + }); + if (data.images.length) { + let dialogRef = this.dialog.open(ImagesData2,{width:'1350px',height:'700px',data}); //打开图片弹窗 + } else { + const config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.snackBar.open('暂无图片数据','确定',config); + } + + } else { + const config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.snackBar.open('暂无图片数据','确定',config); } + } + + } + + + + +} + diff --git a/src/app/key-unit/fire-fighting-device-look/imagesdata.component.html b/src/app/key-unit/fire-fighting-device-look/imagesdata.component.html new file mode 100644 index 0000000..534df3e --- /dev/null +++ b/src/app/key-unit/fire-fighting-device-look/imagesdata.component.html @@ -0,0 +1,9 @@ +
    +
    {{data.name}}
    +
    +
    + + +
    +
    +
    \ No newline at end of file diff --git a/src/app/key-unit/fire-fighting-device-look/imagesdata.component.ts b/src/app/key-unit/fire-fighting-device-look/imagesdata.component.ts new file mode 100644 index 0000000..a28433e --- /dev/null +++ b/src/app/key-unit/fire-fighting-device-look/imagesdata.component.ts @@ -0,0 +1,82 @@ +import { Component, OnInit, Inject } from '@angular/core'; +import { HttpClient } from '@angular/common/http'; +import {MatDialog, MatDialogRef, MAT_DIALOG_DATA} from '@angular/material/dialog'; +import Swiper from 'swiper'; + + + +@Component({ + selector: 'imagesdata', + templateUrl: './imagesdata.component.html', + styleUrls: ['./fire-fighting-device.component.scss'] + }) +export class ImagesData2 { + + constructor(private http: HttpClient,public dialogRef: MatDialogRef,@Inject(MAT_DIALOG_DATA) public data,public dialog: MatDialog) {} + + ngOnInit(): void { + this.data.images.forEach(element => { + element.newImageUrl = `${element.propertyValue}?x-oss-process=image/resize,m_fill,h_170,w_299` + }); + } + + //查看大图 + seeImage (index) { + let data = { + allImages:this.data.images, + imgIndex: index} + let dialogRef = this.dialog.open(previewBigImg2, + {width: '1600px', + height:'900px',data}); + } + +} + + + +@Component({ + selector: 'previewBigImg', + templateUrl: './previewImg.html', + styleUrls: ['../realistic-picture/realistic-picture.component.scss'] +}) +export class previewBigImg2 { + + constructor(private http:HttpClient,public dialog: MatDialog,public dialogRef: MatDialogRef, + @Inject(MAT_DIALOG_DATA) public data) { } + testSwiper: Swiper; + + ngOnInit(): void { + this.allImages = this.data.allImages + this.allImages.forEach(element => { + element.previewImageUrl = `${element.propertyValue}?x-oss-process=image/auto-orient,1` //处理图片URL地址 + }); + } + + ngAfterViewInit() { + this.testSwiper = new Swiper('.swiper-container', { + lazy: true, + initialSlide: this.data.imgIndex, + direction: 'horizontal', + loop: false, + + + + // 如果需要前进后退按钮 + navigation: { + nextEl: '.swiper-button-next', + prevEl: '.swiper-button-prev', + } + }); + } + + allImages:any; //展示所有的图片 + rotationAngle:number=0; //旋转角度 + + //旋转图片 + rotate () { + this.rotationAngle = this.rotationAngle+90 + if (this.rotationAngle === 360) {this.rotationAngle = 0} + } + +} + \ No newline at end of file diff --git a/src/app/key-unit/fire-fighting-device-look/previewImg.html b/src/app/key-unit/fire-fighting-device-look/previewImg.html new file mode 100644 index 0000000..1cde6b9 --- /dev/null +++ b/src/app/key-unit/fire-fighting-device-look/previewImg.html @@ -0,0 +1,17 @@ +
    图片详情
    +
    +
    +
    + +
    +
    +
    + + +
    +
    +
    + +
    + +
    \ No newline at end of file diff --git a/src/app/key-unit/fire-fighting-device/addGrouping.component.ts b/src/app/key-unit/fire-fighting-device/addGrouping.component.ts new file mode 100644 index 0000000..9ce2c55 --- /dev/null +++ b/src/app/key-unit/fire-fighting-device/addGrouping.component.ts @@ -0,0 +1,69 @@ +import { Component, OnInit, Inject } from '@angular/core'; +import { HttpClient } from '@angular/common/http'; +import {MatDialog, MatDialogRef, MAT_DIALOG_DATA} from '@angular/material/dialog'; +import { MatSnackBar, MatSnackBarConfig } from '@angular/material/snack-bar'; + + + +@Component({ + selector: 'imgsdatadetail', + templateUrl: './addGrouping.html', + styleUrls: ['./fire-fighting-device.component.scss'] + }) +export class ImgsDataDetail { + + constructor(private http: HttpClient,public dialogRef: MatDialogRef,@Inject(MAT_DIALOG_DATA) public data,public snackBar: MatSnackBar) {} + + ngOnInit(): void { + + } + + ngAfterViewInit(): void{ + + } + + //提交表单 + onSubmit (e) { + if (this.data.buildingId) { //建筑新建内置项 + let repeat = this.data.item.facilityItems.find(items=>items.name==e.name) + if (repeat==undefined) { + let header = {buildingId:this.data.buildingId, groupId:this.data.item.id} + let msg = { + isBuiltin: false, + details: '', + name: e.name, + isEachFloor: false, + order: this.data.item.facilityItems.length? this.data.item.facilityItems[this.data.item.facilityItems.length-1].order+1 : 0} + this.http.post('/api/CompanyAccount/BuildingFacilityItems',msg,{params:header}).subscribe(data=>{ + this.dialogRef.close(data); }) + } else { + const config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.snackBar.open('当前分组下禁止创建名称相同内置项','确定',config); + } + } else { //单位新建内置项 + let repeat = this.data.facilityItems.find(item=>item.name==e.name) + if (repeat==undefined) { + let header = {groupId:this.data.id} + let msg = { + isBuiltin: false, + details: '', + name: e.name, + isEachFloor: false, + order: this.data.facilityItems.length? this.data.facilityItems[this.data.facilityItems.length-1].order+1 : 0} + this.http.post('/api/CompanyAccount/CompanyFacilityItems',msg,{params:header}).subscribe(data=>{ + this.dialogRef.close(data); }) + } else { + const config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.snackBar.open('当前分组下禁止创建名称相同内置项','确定',config); + } + } //else + } + + + +} + \ No newline at end of file diff --git a/src/app/key-unit/fire-fighting-device/addGrouping.html b/src/app/key-unit/fire-fighting-device/addGrouping.html new file mode 100644 index 0000000..916fc28 --- /dev/null +++ b/src/app/key-unit/fire-fighting-device/addGrouping.html @@ -0,0 +1,18 @@ +
    创建消防设施内置项
    +
    +
    + + + + +

    *注: 该名称不允许与当前分组内置项重名

    + +
    + + +
    +
    +
    \ No newline at end of file diff --git a/src/app/key-unit/fire-fighting-device/fire-fighting-device.component.html b/src/app/key-unit/fire-fighting-device/fire-fighting-device.component.html new file mode 100644 index 0000000..1bf4c41 --- /dev/null +++ b/src/app/key-unit/fire-fighting-device/fire-fighting-device.component.html @@ -0,0 +1,193 @@ +
    + + +
    + +

    暂无数据,请完善单位基本信息

    +
    +

    {{item.name}}

    +
    + add_circle_outline + description + delete +
    +
    + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + + +
    {{header}}
    {{body[header]? body[header] : '暂无数据'}}
    +
    +
    +

    楼层/区域名称: {{tableMsg.name? tableMsg.name: '暂无名称'}}

    + + + + + + + +
    {{header}}
    {{body[header]? body[header] : '暂无数据'}}
    +
    +
    +
    + +
    +
    +
    + +
    + + + + +

    {{item.name}}

    + description +
    +
    + + + + + + + {{radio.name}} + +
    +
    + +
    +
    + +
    +
    + + +
    + +
    +

    {{item.name}}

    +
    + add_circle_outline + description + delete +
    +
    + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + + +
    {{header}}
    {{body[header]? body[header] : '暂无数据'}}
    +
    +
    +

    楼层/区域名称: {{tableMsg.name? tableMsg.name : '暂无名称'}}

    + + + + + + + +
    {{header}}
    {{body[header]? body[header] : '暂无数据'}}
    +
    +
    +
    + +
    +
    +
    + +
    + + + + +

    {{item.name}}

    + description +
    +
    + + + + + + + {{radio.name}} + +
    +
    + +
    +
    + +
    +
    + +
    +
    \ No newline at end of file diff --git a/src/app/key-unit/fire-fighting-device/fire-fighting-device.component.scss b/src/app/key-unit/fire-fighting-device/fire-fighting-device.component.scss new file mode 100644 index 0000000..3ea1f32 --- /dev/null +++ b/src/app/key-unit/fire-fighting-device/fire-fighting-device.component.scss @@ -0,0 +1,145 @@ +.content { + width: 100%; + height: 90%; + padding: 10px; + overflow-y: auto; + .contentBox { + width: 90%; + height: 100%; + margin: 0 auto; + overflow-y: auto; + } +} +.mat-icon { + color: black; + cursor:pointer; +} + + + +//可展开面板每一行css +.mat-expansion-panel-header { + padding: 3px 24px; +} + +.firstContent { + width: 3%; +} +.textContent { + width: 12%; + color: black; + text-align: center; + overflow: hidden; + text-overflow:ellipsis; + white-space: nowrap; +} +.totalContent { + width: 25%; + color: black; + text-align: center; + white-space: pre-line; + max-height: 48px; + overflow-y: auto; +} +.lastTextContent { //textarea多行文本 + width: 45%; + color: black; + text-align: center; +} +input { + height: 22px; + line-height: 22px; + padding-left: 5px; + border-radius: 3px; +} +a { + color: #0000ff; +} + + + +//bottom用户输入框 +.InputField { + display: inline-block; + width: 40%; + text-align: right; + margin: 10px 25px; + input {width: 60%;} + label {margin-right: 10px;} +} +textarea { + vertical-align: middle; + border-radius: 5px; + padding: 5px; + width: 60%; + height: 36px; + resize: none; +} + + + +//表格样式 +.overflowTable { + width: 95%; + margin: 0 auto; + max-height: 300px; + overflow-y: auto; +} +.detailsTable { + margin: 10px 0; + table { + width: 100%; + text-align: center; + border-collapse:collapse; + word-break:break-all; + word-wrap:break-all; + table-layout:fixed; + th { + height: 35px; + border: 1px solid #999;} + td { + height: 35px; + border: 1px solid #999;} + } +} + + + +//滚动条样式 +::-webkit-scrollbar{ + width: 5px; + background-color: white; +} +::-webkit-scrollbar-thumb{ + background-color: #999; +} + + + +//img图片列表页面 +.imageList { + width: 100%; + height: 100%; + overflow-y: auto; + .imageListBox { + width: 100%; + height: 90%; + display: flex; + flex-direction: row; + flex-wrap: wrap; + .imagesBox { + width: 300px; + height: 200px; + margin: 0 11px 0 11px; + display: inline-block; + img { + border: 1px solid #999; + width: auto; + height: auto; + max-width: 100%; + height: 170px; + cursor:pointer; + } + } + } +} diff --git a/src/app/key-unit/fire-fighting-device/fire-fighting-device.component.ts b/src/app/key-unit/fire-fighting-device/fire-fighting-device.component.ts new file mode 100644 index 0000000..8338a2a --- /dev/null +++ b/src/app/key-unit/fire-fighting-device/fire-fighting-device.component.ts @@ -0,0 +1,538 @@ +import { Component, OnInit, ViewChild, Inject } from '@angular/core'; +import {HttpClient, HttpHeaders} from '@angular/common/http' +import { MatDialogRef, MatDialog, MAT_DIALOG_DATA } from '@angular/material/dialog'; +import { ImgsDataDetail } from './addGrouping.component' +import { MatSnackBarConfig, MatSnackBar } from '@angular/material/snack-bar'; +import { ImagesData } from './imagesdata.component' +import { Router,ActivatedRoute } from '@angular/router' + + +export interface Food { + value: string; + name: string; +} +@Component({ + selector: 'app-fire-fighting-device', + templateUrl: './fire-fighting-device.component.html', + styleUrls: ['./fire-fighting-device.component.scss'] +}) +export class FireFightingDeviceComponent implements OnInit { + + constructor(private router:Router,private route:ActivatedRoute,public http: HttpClient,public dialog: MatDialog,public snackBar: MatSnackBar) { } + + ngOnInit(): void { + this.getCompanyInformation() + this.getAllBuilding() + } + + //定义属性数据 + singleElection:Food[]=[ + {value:'true', name: '有'}, + {value:'false', name: '无'}] + + companyBuiltInGrouping:any = []; //单位消防设施内置分组 + companyDetails:any = []; //单位详情 + companyEachDetails:any = [] //单位每层详情 + companyOptionalGrouping:any = []; //单位消防设施可选分组 + + //获得单位基本信息 + getCompanyInformation () { + let companyId = this.route.snapshot.queryParams.id + this.http.get(`/api/Companies/${companyId}`).subscribe((data:any)=>{ + if (data.buildingTypes.length) { + let newData = {buildingType: data.buildingTypes[0].id,companyId : companyId} + this.http.get('/api/CompanyFacilities',{params:newData}).subscribe((data:any)=>{ //获得单位的消防设施 + this.companyBuiltInGrouping = data[0].summary.companyFacilityGroups + this.companyOptionalGrouping = data[0].summary.companyOptionalGroups + this.companyDetails = data[0].details + this.companyEachDetails = data[0].eachDetails + this.companyBuiltInGrouping.forEach(element => { //循环单位内置分组项 + element.selectBuiltInGrouping = [] + element.facilityItems.forEach((elements,index) => { + elements.total = element.facilityCount[index] + elements.expanded = false}); + }); + }) //http + } //if + + }) + } + + //创建单位消防设施内置分组项 + addCompanyGrouping (e) { + let data = e + let dialogRef = this.dialog.open(ImgsDataDetail,{data}); + dialogRef.afterClosed().subscribe(data=>{ + if (data) { e.facilityItems.push(data) } }); + } + + //保存单位消防设施内置分组项 + editCompanyGrouping(e) { + let header = {groupId:e.id} + let data = [] + e.facilityItems.forEach((element,index) => { + let msg = { + isBuiltin: element.isBuiltin, + details: element.details, + name: element.name, + isEachFloor: element.isEachFloor, + order: element.order} + data.push(msg) + if (index==e.facilityItems.length-1) { + this.http.post('/api/CompanyFacilityItems/Batch',data,{params:header}).subscribe(data=>{ + const config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.snackBar.open('数据更新成功','确定',config); + }) } + }); //forEach + + } + + //checked单位消防设施内置分组项时 + checkedCompany (e,item,items) { + if (e.checked) { + item.selectBuiltInGrouping.push(items) + } else { + item.selectBuiltInGrouping.splice(item.selectBuiltInGrouping.findIndex(oldItem => oldItem == items), 1) + } + } + + //删除消防设施内置分组项 + deleteCompanyGrouping (e) { + if (e.selectBuiltInGrouping.length) { + let isDelete = confirm('您确定要删除吗') + if (isDelete) { + let msg:any = `?groupId=${e.id}` + e.selectBuiltInGrouping.forEach((element,index) => { + let data = `&name=${element.name}` + msg = msg + data + if (index === e.selectBuiltInGrouping.length-1) { + this.http.delete('/api/CompanyFacilityItems/Batch' + msg).subscribe(data=>{ + let deleteMsg = e.selectBuiltInGrouping + deleteMsg.forEach(deleteElement => { + e.facilityItems.splice(e.facilityItems.findIndex(item=>item.name==deleteElement.name),1) + }); + e.selectBuiltInGrouping = [] + + }) //http + } //if + }); //forEach + } + } else { + const config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.snackBar.open('请选择内置分组项','确定',config); + } + } + + //保存单位消防设施可选分组 + editCompanyOptional (e,item) { + e.stopPropagation() //阻止冒泡 + item.propertyInfos.forEach((element,index) => { + element.propertyValue = String(element.propertyValue) + if (index == item.propertyInfos.length-1 ) { + this.http.post('/api/CompanyOptionalGroups',item).subscribe(data=>{ + const config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.snackBar.open('数据更新成功','确定',config); + }) + } //if + }); + } + + //单位消防设施切换展开面板 + SwitchBoard (e) { + e.expanded = !e.expanded + if (e.expanded) { //展开面板展开时 + if (e.isEachFloor) { //逐层统计时 + let data = this.companyEachDetails[e.name] + if (data) { + e.loopTable = [] + data.forEach(item => { + let tableMsg = {name:item.name, header:[], body:[]} + item.assets[0].propertyInfos.forEach(element => { //表头 + if (element.propertyType!=3) { + let unit = element.physicalUnit? '('+ element.physicalUnit +')' : '' //单位 + tableMsg.header.push(element.propertyName+unit)} + }); + item.assets.forEach(element => { //表格内容 + let everyBody = {} + element.propertyInfos.forEach((elements,index) => { + if (elements.propertyType!=3 && elements.propertyName!='图片' && elements.propertyType!=6) { + let unit = elements.physicalUnit? '('+ elements.physicalUnit +')' : '' //单位 + everyBody[elements.propertyName+unit] = elements.propertyValue } + if (elements.propertyType==6) { + let unit = elements.physicalUnit? '('+ elements.physicalUnit +')' : '' //单位 + everyBody[elements.propertyName+unit] = elements.propertyValue=='1'?'是':'否' } + if (elements.propertyType!=3 && elements.propertyName=='图片') { + let imgLength = [] + element.propertyInfos.find(item=>{ if(item.propertyType==3){imgLength.push(item)} }) + let unit = elements.physicalUnit? '('+ elements.physicalUnit +')' : '' //单位 + everyBody[elements.propertyName+unit] = String(imgLength.length) } + + }); //propertyInfos + tableMsg.body.push(everyBody) + }); //assets + e.loopTable.push(tableMsg) + }); + + } //data有数据时 + } else { //非逐层统计时 + let data = this.companyDetails[e.name] + if (data) { + e.header = [] + e.body = [] + data[0].propertyInfos.forEach(element => { //表头 + if (element.propertyType!=3) { + let unit = element.physicalUnit? '('+ element.physicalUnit +')' : '' //单位 + e.header.push(element.propertyName+unit)} + }); + data.forEach(element => { //表格内容 + let everyBody = {} + element.propertyInfos.forEach((elements,index) => { + if (elements.propertyType!=3 && elements.propertyName!='图片' && elements.propertyType!=6) { + let unit = elements.physicalUnit? '('+ elements.physicalUnit +')' : '' //单位 + everyBody[elements.propertyName+unit] = elements.propertyValue } + if (elements.propertyType==6) { + let unit = elements.physicalUnit? '('+ elements.physicalUnit +')' : '' //单位 + everyBody[elements.propertyName+unit] = elements.propertyValue=='1'?'是':'否' } + if (elements.propertyType!=3 && elements.propertyName=='图片') { + let imgLength = [] + element.propertyInfos.find(item=>{ if(item.propertyType==3){imgLength.push(item)} }) + let unit = elements.physicalUnit? '('+ elements.physicalUnit +')' : '' //单位 + everyBody[elements.propertyName+unit] = String(imgLength.length) } + + }); + e.body.push(everyBody) + }); + + } + } //非逐层统计时 + + + + } + } + + + + allBuildingGrouping:any; //所有建筑的消防设施 内置分组+可选分组 + //获取所有建筑 + getAllBuilding () { + let companyId = this.route.snapshot.queryParams.id + this.http.get('/api/Buildings',{params:{ + companyId:companyId + }}).subscribe((data:any)=>{ + this.allBuildingGrouping = data + if (this.allBuildingGrouping.length) { this.getAllBuildingFacilities() } + }) + } + + //获取所有建筑的消防设施 + getAllBuildingFacilities () { + let companyId = this.route.snapshot.queryParams.id + this.allBuildingGrouping.forEach(element => { + let header = {buildingId: element.id, buildingType: element.buildingTypes[0].id,companyId:companyId} + this.http.get('/api/BuildingFacilities',{params:header}).subscribe(data=>{ + element.buildingFacilityGroups = data[0].summary.buildingFacilityGroups + element.buildingOptionalGroups = data[0].summary.buildingOptionalGroups + element.buildingDetails = data[0].details + element.buildingEachDetails = data[0].eachDetails + element.buildingFacilityGroups.forEach((elements) => { //循环每个建筑内置分组项 + elements.selectBuiltInGrouping = [] + elements.facilityItems.forEach((newElement,index) => { + newElement.total = elements.facilityCount[index] + newElement.expanded = false }); + }); + }) + + }); + + } + + //创建建筑消防设施内置分组项 + addBuildingGrouping (e,item) { + let data = {buildingId: e.id, item} + let dialogRef = this.dialog.open(ImgsDataDetail,{data}); + dialogRef.afterClosed().subscribe(data=>{ + if (data) { item.facilityItems.push(data) } + }); + } + + //保存建筑消防设施内置分组项 + editBuildingGrouping (e,item) { + let companyId = this.route.snapshot.queryParams.id + let header = {companyId:companyId,buildingId:e.id, groupId:item.id} + let data = [] + item.facilityItems.forEach((element,index) => { + let msg = { + isBuiltin: element.isBuiltin, + details: element.details, + name: element.name, + isEachFloor: element.isEachFloor, + order: element.order} + data.push(msg) + if (index==item.facilityItems.length-1) { + this.http.post('/api/BuildingFacilityItems/Batch',data,{params:header}).subscribe(data=>{ + const config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.snackBar.open('数据更新成功','确定',config); + }) } + }); //forEach + + } + + //删除建筑消防设施内置分组项 + deleteBuildingGrouping (e,item) { + if (item.selectBuiltInGrouping.length) { + let isDelete = confirm('您确定要删除吗') + if (isDelete) { + let msg:any = `?buildingId=${e.id}&groupId=${item.id}` + item.selectBuiltInGrouping.forEach((element,index) => { + let data = `&name=${element.name}` + msg = msg + data + if (index === item.selectBuiltInGrouping.length-1) { + this.http.delete('/api/BuildingFacilityItems/Batch'+msg).subscribe(data=>{ + let deleteMsg = item.selectBuiltInGrouping + deleteMsg.forEach(deleteElement => { + item.facilityItems.splice(item.facilityItems.findIndex(items=>items.name==deleteElement.name),1) + }); + item.selectBuiltInGrouping = [] + + }) //http + } //if + }) //forEach + } + } else { + const config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.snackBar.open('请选择内置分组项','确定',config); + } + } + + //保存建筑消防设施可选分组 + editBuildingOptional (e,item) { + let companyId = this.route.snapshot.queryParams.id + e.stopPropagation() //阻止冒泡 + item.propertyInfos.forEach((element,index) => { + element.propertyValue = String(element.propertyValue) + if (index == item.propertyInfos.length-1 ) { + this.http.post('/api/BuildingOptionalGroups',item,{params:{ + companyId :companyId + }}).subscribe(data=>{ + const config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.snackBar.open('数据更新成功','确定',config); + }) + } //if + }); + } + + //建筑消防设施切换展开面板 + SwitchBuildingBoard (item,e) { + e.expanded = !e.expanded + if (e.expanded) { //展开面板展开时 + if (e.isEachFloor) { //逐层统计时 + let data = item.buildingEachDetails[e.name] + if (data) { + e.loopTable = [] + data.forEach(item => { + let tableMsg = {name:item.name, header:[], body:[]} + item.assets[0].propertyInfos.forEach(element => { //表头 + if (element.propertyType!=3) { + let unit = element.physicalUnit? '('+ element.physicalUnit +')' : '' //单位 + tableMsg.header.push(element.propertyName+unit)} + }); + item.assets.forEach(element => { //表格内容 + let everyBody = {} + element.propertyInfos.forEach((elements,index) => { + if (elements.propertyType!=3 && elements.propertyName!='图片' && elements.propertyType!=6) { + let unit = elements.physicalUnit? '('+ elements.physicalUnit +')' : '' //单位 + everyBody[elements.propertyName+unit] = elements.propertyValue } + if (elements.propertyType==6) { + let unit = elements.physicalUnit? '('+ elements.physicalUnit +')' : '' //单位 + everyBody[elements.propertyName+unit] = elements.propertyValue=='1'?'是':'否' } + if (elements.propertyType!=3 && elements.propertyName=='图片') { + let imgLength = [] + element.propertyInfos.find(item=>{ if(item.propertyType==3){imgLength.push(item)} }) + let unit = elements.physicalUnit? '('+ elements.physicalUnit +')' : '' //单位 + everyBody[elements.propertyName+unit] = String(imgLength.length) } + + }); //propertyInfos + tableMsg.body.push(everyBody) + }); //assets + e.loopTable.push(tableMsg) + }); + + } //data有数据时 + } else { //非逐层统计时 + let data = item.buildingDetails[e.name] + if (data) { + e.header = [] + e.body = [] + data[0].propertyInfos.forEach(element => { //表头 + if (element.propertyType!=3) { + let unit = element.physicalUnit? '('+ element.physicalUnit +')' : '' //单位 + e.header.push(element.propertyName+unit)} + }); + data.forEach(element => { //表格内容 + let everyBody = {} + element.propertyInfos.forEach((elements,index) => { + if (elements.propertyType!=3 && elements.propertyName!='图片' && elements.propertyType!=6) { + let unit = elements.physicalUnit? '('+ elements.physicalUnit +')' : '' //单位 + everyBody[elements.propertyName+unit] = elements.propertyValue } + if (elements.propertyType==6) { + let unit = elements.physicalUnit? '('+ elements.physicalUnit +')' : '' //单位 + everyBody[elements.propertyName+unit] = elements.propertyValue=='1'?'是':'否' } + if (elements.propertyType!=3 && elements.propertyName=='图片') { + let imgLength = [] + element.propertyInfos.find(item=>{ if(item.propertyType==3){imgLength.push(item)} }) + let unit = elements.physicalUnit? '('+ elements.physicalUnit +')' : '' //单位 + everyBody[elements.propertyName+unit] = String(imgLength.length) } + + }); + e.body.push(everyBody) + }); + + } + } //非逐层统计时 + + + + } + } + + //单位消防设施预览图片 + previewImg (e) { + if (e.isEachFloor) { //逐层统计时 + let newData = this.companyEachDetails[e.name] + if (newData) { + let data = {name:e.name, images:[]} + let imgName + newData.forEach(item => { + item.assets.forEach(element => { + element.propertyInfos.forEach( elements => { + if (elements.propertyName.includes('名称')) {imgName = elements.propertyValue} + if (elements.propertyType===3) { + elements.propertyName = imgName + data.images.push(elements)} }); + }); + }); //newDate + + if (data.images.length) { + let dialogRef = this.dialog.open(ImagesData,{width:'1350px',height:'700px',data}); //打开图片弹窗 + } else { + const config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.snackBar.open('暂无图片数据','确定',config); + } + + } else{ + const config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.snackBar.open('暂无图片数据','确定',config); } + } else { //非逐层统计时 + let newData = this.companyDetails[e.name] + let imgName + if (newData) { + let data = {name:e.name, images:[]} + newData.forEach(element => { + element.propertyInfos.forEach(elements => { + if (elements.propertyName.includes('名称')) {imgName = elements.propertyValue} + if (elements.propertyType===3) { + elements.propertyName = imgName + data.images.push(elements)} }); + }); + if (data.images.length) { + let dialogRef = this.dialog.open(ImagesData,{width:'1350px',height:'700px',data}); //打开图片弹窗 + } else { + const config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.snackBar.open('暂无图片数据','确定',config); + } + + } else { + const config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.snackBar.open('暂无图片数据','确定',config); } + } + + } + + //建筑消防设施预览图片 + previewBuildingImg (item,e) { + if (e.isEachFloor) { //逐层统计时 + let newData = item.buildingEachDetails[e.name] + if (newData) { + let data = {name:e.name, images:[]} + let imgName + newData.forEach(item => { + item.assets.forEach(element => { + element.propertyInfos.forEach( elements => { + if (elements.propertyName.includes('名称')) {imgName = elements.propertyValue} + if (elements.propertyType===3) { + elements.propertyName = imgName + data.images.push(elements)} }); + }); + }); //newDate + + if (data.images.length) { + let dialogRef = this.dialog.open(ImagesData,{width:'1350px',height:'700px',data}); //打开图片弹窗 + } else { + const config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.snackBar.open('暂无图片数据','确定',config); + } + + } else{ + const config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.snackBar.open('暂无图片数据','确定',config); } + } else { //非逐层统计时 + let newData = item.buildingDetails[e.name] + let imgName + if (newData) { + let data = {name:e.name, images:[]} + newData.forEach(element => { + element.propertyInfos.forEach(elements => { + if (elements.propertyName.includes('名称')) {imgName = elements.propertyValue} + if (elements.propertyType===3) { + elements.propertyName = imgName + data.images.push(elements)} + }); + }); + if (data.images.length) { + let dialogRef = this.dialog.open(ImagesData,{width:'1350px',height:'700px',data}); //打开图片弹窗 + } else { + const config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.snackBar.open('暂无图片数据','确定',config); + } + + } else { + const config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.snackBar.open('暂无图片数据','确定',config); } + } + + } + + + + +} + diff --git a/src/app/key-unit/fire-fighting-device/imagesdata.component.html b/src/app/key-unit/fire-fighting-device/imagesdata.component.html new file mode 100644 index 0000000..534df3e --- /dev/null +++ b/src/app/key-unit/fire-fighting-device/imagesdata.component.html @@ -0,0 +1,9 @@ +
    +
    {{data.name}}
    +
    +
    + + +
    +
    +
    \ No newline at end of file diff --git a/src/app/key-unit/fire-fighting-device/imagesdata.component.ts b/src/app/key-unit/fire-fighting-device/imagesdata.component.ts new file mode 100644 index 0000000..05c43e1 --- /dev/null +++ b/src/app/key-unit/fire-fighting-device/imagesdata.component.ts @@ -0,0 +1,82 @@ +import { Component, OnInit, Inject } from '@angular/core'; +import { HttpClient } from '@angular/common/http'; +import {MatDialog, MatDialogRef, MAT_DIALOG_DATA} from '@angular/material/dialog'; +import Swiper from 'swiper'; + + + +@Component({ + selector: 'imagesdata', + templateUrl: './imagesdata.component.html', + styleUrls: ['./fire-fighting-device.component.scss'] + }) +export class ImagesData { + + constructor(private http: HttpClient,public dialogRef: MatDialogRef,@Inject(MAT_DIALOG_DATA) public data,public dialog: MatDialog) {} + + ngOnInit(): void { + this.data.images.forEach(element => { + element.newImageUrl = `${element.propertyValue}?x-oss-process=image/resize,m_fill,h_170,w_299` + }); + } + + //查看大图 + seeImage (index) { + let data = { + allImages:this.data.images, + imgIndex: index} + let dialogRef = this.dialog.open(previewBigImg, + {width: '1600px', + height:'900px',data}); + } + +} + + + +@Component({ + selector: 'previewBigImg', + templateUrl: './previewImg.html', + styleUrls: ['../realistic-picture/realistic-picture.component.scss'] +}) +export class previewBigImg { + + constructor(private http:HttpClient,public dialog: MatDialog,public dialogRef: MatDialogRef, + @Inject(MAT_DIALOG_DATA) public data) { } + testSwiper: Swiper; + + ngOnInit(): void { + this.allImages = this.data.allImages + this.allImages.forEach(element => { + element.previewImageUrl = `${element.propertyValue}?x-oss-process=image/auto-orient,1` //处理图片URL地址 + }); + } + + ngAfterViewInit() { + this.testSwiper = new Swiper('.swiper-container', { + lazy: true, + initialSlide: this.data.imgIndex, + direction: 'horizontal', + loop: false, + + + + // 如果需要前进后退按钮 + navigation: { + nextEl: '.swiper-button-next', + prevEl: '.swiper-button-prev', + } + }); + } + + allImages:any; //展示所有的图片 + rotationAngle:number=0; //旋转角度 + + //旋转图片 + rotate () { + this.rotationAngle = this.rotationAngle+90 + if (this.rotationAngle === 360) {this.rotationAngle = 0} + } + +} + \ No newline at end of file diff --git a/src/app/key-unit/fire-fighting-device/previewImg.html b/src/app/key-unit/fire-fighting-device/previewImg.html new file mode 100644 index 0000000..1cde6b9 --- /dev/null +++ b/src/app/key-unit/fire-fighting-device/previewImg.html @@ -0,0 +1,17 @@ +
    图片详情
    +
    +
    +
    + +
    +
    +
    + + +
    +
    +
    + +
    + +
    \ No newline at end of file diff --git a/src/app/key-unit/function-division-look/addPartition.html b/src/app/key-unit/function-division-look/addPartition.html new file mode 100644 index 0000000..80b063c --- /dev/null +++ b/src/app/key-unit/function-division-look/addPartition.html @@ -0,0 +1,23 @@ +
    创建建筑功能分区
    +
    +
    + + + + + {{item.name}} + + + +

    暂无数据,请您创建基本信息建筑模块

    + +
    + + +
    + +
    +
    \ No newline at end of file diff --git a/src/app/key-unit/function-division-look/addPartitionAttribute.html b/src/app/key-unit/function-division-look/addPartitionAttribute.html new file mode 100644 index 0000000..e69de29 diff --git a/src/app/key-unit/function-division-look/function-division.component.html b/src/app/key-unit/function-division-look/function-division.component.html new file mode 100644 index 0000000..21de153 --- /dev/null +++ b/src/app/key-unit/function-division-look/function-division.component.html @@ -0,0 +1,106 @@ +
    +
    + +
    + + + + +
    +
    + +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    + + 区域 + + + + 面积 + + + + + 基本情况 + +
    +

    暂无数据

    +
    +
    + + +
    +
    + +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    + + 区域 + + + + 面积 + + + + + 基本情况 + +
    +
    +
    + +
    +
    \ No newline at end of file diff --git a/src/app/key-unit/function-division-look/function-division.component.scss b/src/app/key-unit/function-division-look/function-division.component.scss new file mode 100644 index 0000000..e74bcf1 --- /dev/null +++ b/src/app/key-unit/function-division-look/function-division.component.scss @@ -0,0 +1,32 @@ +.content { + width: 100%; + height: 90%; + overflow-y: auto; + padding: 10px 0 0 10px; + display: flex; +} +.tableContent { + margin-left: 10px; + width: 100%; + height: 100%; + table { + width: 90%; + text-align: center; + margin: 0 auto; + .cdk-header-cell { + text-align: center; + } + textarea { + border-radius: 5px; + padding: 5px; + width: 80%; + height: 36px; + resize: none; + } + } +} + +//icon统一样式 +.mat-icon { + cursor:pointer; +} \ No newline at end of file diff --git a/src/app/key-unit/function-division-look/function-division.component.ts b/src/app/key-unit/function-division-look/function-division.component.ts new file mode 100644 index 0000000..372b02b --- /dev/null +++ b/src/app/key-unit/function-division-look/function-division.component.ts @@ -0,0 +1,247 @@ +import { Component, OnInit, Inject } from '@angular/core'; +import { HttpClient, HttpHeaders } from '@angular/common/http'; +import { MatDialog, MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog'; +import { MatSnackBar, MatSnackBarConfig } from '@angular/material/snack-bar'; +import { Router,ActivatedRoute } from '@angular/router' + + +@Component({ + selector: 'app-function-division-look', + templateUrl: './function-division.component.html', + styleUrls: ['./function-division.component.scss'] +}) +export class FunctionDivisionLookComponent implements OnInit { + + constructor(private router:Router,private route:ActivatedRoute,private http:HttpClient,public dialog: MatDialog,public snackBar: MatSnackBar) { } + + ngOnInit(): void { + this.companyId = this.route.snapshot.queryParams.id + this.getAllCompany() + this.getAllBuilding() + } + + displayedColumns: string[] = ['checked', 'region', 'measure', 'situation']; + + companyId:any; //单位编号 + companyFunctionalZoning:any=[]; //所有单位功能分区属性 + selectFunctionalZoning:any=[]; //选中的单位功能分区属性 + + //获得所有单位功能分区属性 + getAllCompany () { + let companyId = this.route.snapshot.queryParams.id + this.http.get('/api/CompanyFunctionalDivisions',{params:{ + companyId:companyId + }}).subscribe((data:any)=>{ + this.companyFunctionalZoning = data + this.selectFunctionalZoning = [] + }) + } + + //新建单位功能分区属性 + addCompany () { + let companyId = this.route.snapshot.queryParams.id + let data = {companyId:companyId, region:'', area:0, details:''} + this.companyFunctionalZoning.push(data) + this.preservation() + } + + //保存单位功能分区属性 + preservation () { + let companyId = this.route.snapshot.queryParams.id + // console.log(123,companyId) + if (this.companyFunctionalZoning.length) { + this.http.post('/api/CompanyFunctionalDivisions/Batch',this.companyFunctionalZoning,{params:{ + companyId:companyId + }}).subscribe(data=>{ + this.getAllCompany() + const config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.snackBar.open('数据更新成功','确定',config); + }) + } + } + + //单位功能分区checked选择 + changeCompany (ele,e) { + if (e.checked) { + this.selectFunctionalZoning.push(ele.id) + } else { + this.selectFunctionalZoning.splice(this.selectFunctionalZoning.findIndex(item => item === ele.id), 1) + } + } + + //删除单位功能分区属性 + delete () { + let companyId = this.route.snapshot.queryParams.id + if (this.selectFunctionalZoning.length) { + let isDelete = confirm('您确定要删除吗') + if (isDelete) { + this.http.post('/api/CompanyFunctionalDivisions/Batch',this.companyFunctionalZoning,{params:{ + companyId:companyId + }}).subscribe(data=>{ + const options = { + headers: new HttpHeaders({'Content-Type': 'application/json',}), + body:this.selectFunctionalZoning} + this.http.delete(`/api/CompanyFunctionalDivisions/Batch`,options).subscribe(data=>{ + this.getAllCompany() + const config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.snackBar.open('数据更新成功','确定',config); + }) + }) + } + } else if (!this.selectFunctionalZoning.length) { + const config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.snackBar.open('请选择单位功能分区','确定',config); + } + } + + + + + + //建筑功能分区↓ + allBuilding:any = []; //所有建筑 + allBuildingFunctionalZoning:any = []; //所有建筑的功能分区 + selectBuildingFunctionalZoning:any = []; //选中的建筑的功能分区 + + //获得所有建筑 + getAllBuilding () { + let companyId = this.route.snapshot.queryParams.id + this.http.get(`/api/Buildings`,{params:{ + companyId:companyId + }}).subscribe((data:any)=>{ + if (data.length) { + this.allBuilding = data + this.allBuilding.forEach(element => { //为每个建筑添加一个 功能分区对象 + element.functionalZoning = null + }); + this.getAllBuildingFunctionalZoning() + } + }) + } + + //获得所有建筑的功能分区 + getAllBuildingFunctionalZoning () { + this.selectBuildingFunctionalZoning = [] + this.allBuildingFunctionalZoning = [] + this.allBuilding.forEach(element => { + let data={buildingId: element.id} + this.http.get(`/api/BuildingFunctionalDivisions`,{params:data}).subscribe((data:any)=>{ + if (data.length) { + element.functionalZoning = data + this.selectBuildingFunctionalZoning.push([]) //拥有建筑功能分区的提前push空数组 + this.allBuildingFunctionalZoning.push(element) } + }) + }); + } + + //封装函数刷新当前建筑功能分区 + updateCurrent (e,index) { + let data= {buildingId: e.id} + this.http.get(`/api/BuildingFunctionalDivisions`,{params:data}).subscribe((data:any)=>{ + this.selectBuildingFunctionalZoning[index] = [] + this.allBuildingFunctionalZoning[index].functionalZoning = data + const config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.snackBar.open('数据更新成功','确定',config); + }) + } + + //创建建筑功能分区 + addPartition () { + } + + //创建建筑功能分区属性 + addBuilding (e,index) { + let data = {buildingId:e.id, region:'', area:0, details:''} + this.http.post('/api/BuildingFunctionalDivisions',data).subscribe(data=>{ + this.preservationBuilding(e,index) + }) + } + + //保存建筑功能分区属性 + preservationBuilding (e,index) { + let data ={buildingId:e.id} + this.http.post(`/api/BuildingFunctionalDivisions/Batch`,this.allBuildingFunctionalZoning[index].functionalZoning,{params:data}).subscribe(data=>{ + this.updateCurrent(e,index) + }) + } + + //建筑功能分区checked选择 + changeBuilding (ele,e,index) { + if (e.checked) { + this.selectBuildingFunctionalZoning[index].push(ele.id) + } else { + this.selectBuildingFunctionalZoning[index].splice(this.selectBuildingFunctionalZoning[index].findIndex(item => item === ele.id), 1) + } + } + + //删除建筑功能分区 + deleteBuilding (e,index) { + if (this.selectBuildingFunctionalZoning[index].length) { + let isDelete = confirm('您确定要删除吗') + if (isDelete) { + let data ={buildingId:e.id} + this.http.post(`/api/BuildingFunctionalDivisions/Batch`,this.allBuildingFunctionalZoning[index].functionalZoning,{params:data}).subscribe(data=>{ + const options = { + headers: new HttpHeaders({'Content-Type': 'application/json',}), + body:this.selectBuildingFunctionalZoning[index], + params:{buildingId:e.id}} + this.http.delete(`/api/BuildingFunctionalDivisions/Batch`,options).subscribe(data=>{ + this.selectBuildingFunctionalZoning[index].forEach((element,newIndex) => { + this.allBuildingFunctionalZoning[index].functionalZoning.splice(this.allBuildingFunctionalZoning[index].functionalZoning.findIndex(item=>item.id==element),1) + if (newIndex==this.selectBuildingFunctionalZoning[index].length-1) { + if (this.allBuildingFunctionalZoning[index].functionalZoning.length) { + this.updateCurrent(e,index) + } else { + this.selectBuildingFunctionalZoning.splice(index,1) + this.allBuildingFunctionalZoning.splice(index,1)} + } + }); + + + }) + }) + } + } else if (!this.selectBuildingFunctionalZoning[index].length) { + const config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.snackBar.open('请选择建筑功能分区','确定',config); + } + } + + + + + +} + + + + + +//暂时无用 +@Component({ + selector: 'app-addPartitionAttribute', + templateUrl: './addPartitionAttribute.html', + styleUrls: ['./function-division.component.scss'] +}) +export class addPartitionAttribute2 { + + constructor(private http:HttpClient,public dialog: MatDialog,public dialogRef: MatDialogRef, + @Inject(MAT_DIALOG_DATA) public data) { } + + ngOnInit(): void { + + } + + + +} diff --git a/src/app/key-unit/function-division/addPartition.html b/src/app/key-unit/function-division/addPartition.html new file mode 100644 index 0000000..5865988 --- /dev/null +++ b/src/app/key-unit/function-division/addPartition.html @@ -0,0 +1,23 @@ +
    创建建筑功能分区
    +
    +
    + + + + + {{item.name}} + + + +

    暂无数据,请您创建基本信息建筑模块

    + +
    + + +
    + +
    +
    \ No newline at end of file diff --git a/src/app/key-unit/function-division/addPartitionAttribute.html b/src/app/key-unit/function-division/addPartitionAttribute.html new file mode 100644 index 0000000..e69de29 diff --git a/src/app/key-unit/function-division/function-division.component.html b/src/app/key-unit/function-division/function-division.component.html new file mode 100644 index 0000000..ce618bf --- /dev/null +++ b/src/app/key-unit/function-division/function-division.component.html @@ -0,0 +1,106 @@ +
    +
    + add_circle_outline +
    + + + + +
    +
    + add_circle_outline + description + delete +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    + + 区域 + + + + 面积 + + + + + 基本情况 + +
    +

    暂无数据

    +
    +
    + + +
    +
    + add_circle_outline + description + delete +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    + + 区域 + + + + 面积 + + + + + 基本情况 + +
    +
    +
    + +
    +
    \ No newline at end of file diff --git a/src/app/key-unit/function-division/function-division.component.scss b/src/app/key-unit/function-division/function-division.component.scss new file mode 100644 index 0000000..e74bcf1 --- /dev/null +++ b/src/app/key-unit/function-division/function-division.component.scss @@ -0,0 +1,32 @@ +.content { + width: 100%; + height: 90%; + overflow-y: auto; + padding: 10px 0 0 10px; + display: flex; +} +.tableContent { + margin-left: 10px; + width: 100%; + height: 100%; + table { + width: 90%; + text-align: center; + margin: 0 auto; + .cdk-header-cell { + text-align: center; + } + textarea { + border-radius: 5px; + padding: 5px; + width: 80%; + height: 36px; + resize: none; + } + } +} + +//icon统一样式 +.mat-icon { + cursor:pointer; +} \ No newline at end of file diff --git a/src/app/key-unit/function-division/function-division.component.spec.ts b/src/app/key-unit/function-division/function-division.component.spec.ts new file mode 100644 index 0000000..bb39b49 --- /dev/null +++ b/src/app/key-unit/function-division/function-division.component.spec.ts @@ -0,0 +1,25 @@ +import { async, ComponentFixture, TestBed } from '@angular/core/testing'; + +import { FunctionDivisionComponent } from './function-division.component'; + +describe('FunctionDivisionComponent', () => { + let component: FunctionDivisionComponent; + let fixture: ComponentFixture; + + beforeEach(async(() => { + TestBed.configureTestingModule({ + declarations: [ FunctionDivisionComponent ] + }) + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(FunctionDivisionComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/key-unit/function-division/function-division.component.ts b/src/app/key-unit/function-division/function-division.component.ts new file mode 100644 index 0000000..ecb1a48 --- /dev/null +++ b/src/app/key-unit/function-division/function-division.component.ts @@ -0,0 +1,293 @@ +import { Component, OnInit, Inject } from '@angular/core'; +import { HttpClient, HttpHeaders } from '@angular/common/http'; +import { MatDialog, MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog'; +import { MatSnackBar, MatSnackBarConfig } from '@angular/material/snack-bar'; +import { Router,ActivatedRoute } from '@angular/router' + + +@Component({ + selector: 'app-function-division', + templateUrl: './function-division.component.html', + styleUrls: ['./function-division.component.scss'] +}) +export class FunctionDivisionComponent implements OnInit { + + constructor(private router:Router,private route:ActivatedRoute,private http:HttpClient,public dialog: MatDialog,public snackBar: MatSnackBar) { } + + ngOnInit(): void { + this.companyId = this.route.snapshot.queryParams.id + this.getAllCompany() + this.getAllBuilding() + } + + displayedColumns: string[] = ['checked', 'region', 'measure', 'situation']; + + companyId:any; //单位编号 + companyFunctionalZoning:any=[]; //所有单位功能分区属性 + selectFunctionalZoning:any=[]; //选中的单位功能分区属性 + + //获得所有单位功能分区属性 + getAllCompany () { + let companyId = this.route.snapshot.queryParams.id + this.http.get('/api/CompanyFunctionalDivisions',{params:{ + companyId:companyId + }}).subscribe((data:any)=>{ + this.companyFunctionalZoning = data + this.selectFunctionalZoning = [] + }) + } + + //新建单位功能分区属性 + addCompany () { + let companyId = this.route.snapshot.queryParams.id + let data = {companyId:companyId, region:'', area:0, details:''} + this.companyFunctionalZoning.push(data) + this.preservation() + } + + //保存单位功能分区属性 + preservation () { + let companyId = this.route.snapshot.queryParams.id + // console.log(123,companyId) + if (this.companyFunctionalZoning.length) { + this.http.post('/api/CompanyFunctionalDivisions/Batch',this.companyFunctionalZoning,{params:{ + companyId:companyId + }}).subscribe(data=>{ + this.getAllCompany() + const config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.snackBar.open('数据更新成功','确定',config); + }) + } + } + + //单位功能分区checked选择 + changeCompany (ele,e) { + if (e.checked) { + this.selectFunctionalZoning.push(ele.id) + } else { + this.selectFunctionalZoning.splice(this.selectFunctionalZoning.findIndex(item => item === ele.id), 1) + } + } + + //删除单位功能分区属性 + delete () { + let companyId = this.route.snapshot.queryParams.id + if (this.selectFunctionalZoning.length) { + let isDelete = confirm('您确定要删除吗') + if (isDelete) { + this.http.post('/api/CompanyFunctionalDivisions/Batch',this.companyFunctionalZoning,{params:{ + companyId:companyId + }}).subscribe(data=>{ + const options = { + headers: new HttpHeaders({'Content-Type': 'application/json',}), + body:this.selectFunctionalZoning} + this.http.delete(`/api/CompanyFunctionalDivisions/Batch`,options).subscribe(data=>{ + this.getAllCompany() + const config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.snackBar.open('数据更新成功','确定',config); + }) + }) + } + } else if (!this.selectFunctionalZoning.length) { + const config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.snackBar.open('请选择单位功能分区','确定',config); + } + } + + + + + + //建筑功能分区↓ + allBuilding:any = []; //所有建筑 + allBuildingFunctionalZoning:any = []; //所有建筑的功能分区 + selectBuildingFunctionalZoning:any = []; //选中的建筑的功能分区 + + //获得所有建筑 + getAllBuilding () { + let companyId = this.route.snapshot.queryParams.id + this.http.get(`/api/Buildings`,{params:{ + companyId:companyId + }}).subscribe((data:any)=>{ + if (data.length) { + this.allBuilding = data + this.allBuilding.forEach(element => { //为每个建筑添加一个 功能分区对象 + element.functionalZoning = null + }); + this.getAllBuildingFunctionalZoning() + } + }) + } + + //获得所有建筑的功能分区 + getAllBuildingFunctionalZoning () { + this.selectBuildingFunctionalZoning = [] + this.allBuildingFunctionalZoning = [] + this.allBuilding.forEach(element => { + let data={buildingId: element.id} + this.http.get(`/api/BuildingFunctionalDivisions`,{params:data}).subscribe((data:any)=>{ + if (data.length) { + element.functionalZoning = data + this.selectBuildingFunctionalZoning.push([]) //拥有建筑功能分区的提前push空数组 + this.allBuildingFunctionalZoning.push(element) } + }) + }); + } + + //封装函数刷新当前建筑功能分区 + updateCurrent (e,index) { + let data= {buildingId: e.id} + this.http.get(`/api/BuildingFunctionalDivisions`,{params:data}).subscribe((data:any)=>{ + this.selectBuildingFunctionalZoning[index] = [] + this.allBuildingFunctionalZoning[index].functionalZoning = data + const config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.snackBar.open('数据更新成功','确定',config); + }) + } + + //创建建筑功能分区 + addPartition () { + let data = this.allBuilding + let dialogRef = this.dialog.open(addPartition,{data:{ + allBuilding:this.allBuilding, + companyId:this.companyId + }}); + dialogRef.afterClosed().subscribe(data=>{ + if (data) {this.getAllBuilding()} + }); + } + + //创建建筑功能分区属性 + addBuilding (e,index) { + let data = {buildingId:e.id, region:'', area:0, details:''} + this.http.post('/api/BuildingFunctionalDivisions',data,{params:{ + companyId : this.companyId + }}).subscribe(data=>{ + this.preservationBuilding(e,index) + }) + } + + //保存建筑功能分区属性 + preservationBuilding (e,index) { + let data ={buildingId:e.id,companyId : this.companyId} + this.http.post(`/api/BuildingFunctionalDivisions/Batch`,this.allBuildingFunctionalZoning[index].functionalZoning,{params:data}).subscribe(data=>{ + this.updateCurrent(e,index) + }) + } + + //建筑功能分区checked选择 + changeBuilding (ele,e,index) { + if (e.checked) { + this.selectBuildingFunctionalZoning[index].push(ele.id) + } else { + this.selectBuildingFunctionalZoning[index].splice(this.selectBuildingFunctionalZoning[index].findIndex(item => item === ele.id), 1) + } + } + + //删除建筑功能分区 + deleteBuilding (e,index) { + if (this.selectBuildingFunctionalZoning[index].length) { + let isDelete = confirm('您确定要删除吗') + if (isDelete) { + let data ={buildingId:e.id,companyId : this.companyId} + this.http.post(`/api/BuildingFunctionalDivisions/Batch`,this.allBuildingFunctionalZoning[index].functionalZoning,{params:data}).subscribe(data=>{ + const options = { + headers: new HttpHeaders({'Content-Type': 'application/json',}), + body:this.selectBuildingFunctionalZoning[index], + params:{buildingId:e.id}} + this.http.delete(`/api/BuildingFunctionalDivisions/Batch`,options).subscribe(data=>{ + this.selectBuildingFunctionalZoning[index].forEach((element,newIndex) => { + this.allBuildingFunctionalZoning[index].functionalZoning.splice(this.allBuildingFunctionalZoning[index].functionalZoning.findIndex(item=>item.id==element),1) + if (newIndex==this.selectBuildingFunctionalZoning[index].length-1) { + if (this.allBuildingFunctionalZoning[index].functionalZoning.length) { + this.updateCurrent(e,index) + } else { + this.selectBuildingFunctionalZoning.splice(index,1) + this.allBuildingFunctionalZoning.splice(index,1)} + } + }); + + + }) + }) + } + } else if (!this.selectBuildingFunctionalZoning[index].length) { + const config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.snackBar.open('请选择建筑功能分区','确定',config); + } + } + + + + + +} + + + +//创建建筑功能分区组件 +@Component({ + selector: 'app-addPartition', + templateUrl: './addPartition.html', + styleUrls: ['./function-division.component.scss'] +}) +export class addPartition { + + constructor(private http:HttpClient,public dialog: MatDialog,public dialogRef: MatDialogRef, + @Inject(MAT_DIALOG_DATA) public data) { } + buildings:any + ngOnInit(): void { + this.buildings = this.data.allBuilding + } + + selected:any; //选中的建筑 + + //创建建筑功能分区 + onSubmit (e) { + let data = { + buildingId:e.buildingId, + region: "", + area: 0, + details: "" + } + this.http.post('/api/BuildingFunctionalDivisions',data,{params:{ + companyId : this.data.companyId + }}).subscribe(data=>{ + this.dialogRef.close(data); + }) + } + + + +} + + + +//暂时无用 +@Component({ + selector: 'app-addPartitionAttribute', + templateUrl: './addPartitionAttribute.html', + styleUrls: ['./function-division.component.scss'] +}) +export class addPartitionAttribute { + + constructor(private http:HttpClient,public dialog: MatDialog,public dialogRef: MatDialogRef, + @Inject(MAT_DIALOG_DATA) public data) { } + + ngOnInit(): void { + + } + + + +} diff --git a/src/app/key-unit/key-site-look/key-site.component.html b/src/app/key-unit/key-site-look/key-site.component.html new file mode 100644 index 0000000..8af5827 --- /dev/null +++ b/src/app/key-unit/key-site-look/key-site.component.html @@ -0,0 +1,120 @@ +
    + + +
    + +
    +

    重点部位情况

    + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    重点部位名称 + {{element.name}} + 重点部位所在位置 + {{element.position}} + 建筑结构 + {{element.structure}} + 使用性质 + {{element.nature}} + 主要危险性 + {{element.hazards}} + 图片 + 查看图片 +
    +

    暂无数据,请前往平面图进行相关数据录入

    +
    +
    +

    重点提示

    + +

    + +

    +
    + +
    +
    + + +
    + +
    +

    重点部位情况

    + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    重点部位名称 + {{element.name}} + 重点部位所在位置 + {{element.position}} + 建筑结构 + {{element.structure}} + 使用性质 + {{element.nature}} + 主要危险性 + {{element.hazards}} + 图片 + 查看图片 +
    +

    暂无数据,请前往平面图进行相关数据录入

    +
    +
    +

    重点提示

    + +

    + +

    +
    + +
    +
    + +
    +
    \ No newline at end of file diff --git a/src/app/key-unit/key-site-look/key-site.component.scss b/src/app/key-unit/key-site-look/key-site.component.scss new file mode 100644 index 0000000..3fbf2eb --- /dev/null +++ b/src/app/key-unit/key-site-look/key-site.component.scss @@ -0,0 +1,58 @@ +.content { + width: 100%; + height: 90%; + padding: 10px; + overflow-y: auto; + .contentBox{ + width: 100%; + height: 100%; + overflow-y: auto; + text-align: center; + margin: 0 auto; + } +} +table { + width: 90%; + margin: 15px auto; + text-align: center; + .cdk-header-cell { + text-align: center; + } +} + +//重点提示 +.tips{ + width: 75%; + height: 150px; + border: 1px solid black; + border-radius: 5px; + margin: 15px auto; + text-align: center; + padding: 25px; + textarea { + resize: none; + width: 100%; + height: 100%; + } +} + +//预览图片旋转角度 +.rotateA {transform: rotate(90deg) scale(0.75);} +.rotateB {transform: rotate(180deg)} +.rotateC {transform: rotate(270deg) scale(0.75);} +//预览图片 +.previewImgBox { + width: 1500px; + height: 700px; + text-align: center; + img{ + width: auto; + height: auto; + max-width: 100%; + height: 100%;} +} +.previewImgBottom { + text-align: center; + height: 30px; + margin: 20px auto; +} diff --git a/src/app/key-unit/key-site-look/key-site.component.ts b/src/app/key-unit/key-site-look/key-site.component.ts new file mode 100644 index 0000000..ba659df --- /dev/null +++ b/src/app/key-unit/key-site-look/key-site.component.ts @@ -0,0 +1,173 @@ +import { Component, OnInit, ViewChild, Inject } from '@angular/core'; +import {HttpClient} from '@angular/common/http' +import { MatDialogRef, MatDialog, MAT_DIALOG_DATA } from '@angular/material/dialog'; +import { MatSnackBar, MatSnackBarConfig } from '@angular/material/snack-bar'; +import { KeySiteImgs2 } from './keysiteimgs.component' +import { ActivatedRoute } from '@angular/router'; + + + +@Component({ + selector: 'app-key-site-look', + templateUrl: './key-site.component.html', + styleUrls: ['./key-site.component.scss'] +}) +export class KeySiteLookComponent implements OnInit { + + constructor(public http: HttpClient,public dialog: MatDialog,public snackBar: MatSnackBar,private route:ActivatedRoute,) { } + + displayedColumns: string[] = ['mainname', 'position', 'construction', 'nature', 'danger', 'img']; + + ngOnInit(): void { + this.getCompanyPostion() + this.getCompanyTips() + this.getAllBuilding() + } + + allCompanyPosition:any = []; //所有单位重点部位 + companyTips:any; //所有单位重点提示 + companyInput:any; //单位重点提示数据 + allBuilding:any = []; //所有建筑 + 建筑重点部位 + 建筑重点提示 + + //获取单位重点部位 + getCompanyPostion () { + let id = {companyId:this.route.snapshot.queryParams.id} + this.http.get('/api/CompanyImportantLocations',{params:id}).subscribe(data=>{ + this.allCompanyPosition = data + }) + } + + //获取单位重点提示 + getCompanyTips () { + let id = {companyId:this.route.snapshot.queryParams.id} + this.http.get('/api/CompanyImportantTips',{params:id}).subscribe((data:any)=>{ + if (data) { + this.companyTips = data + this.companyInput = data.details} + }) + } + + //获取所有建筑 + getAllBuilding () { + let id = {companyId:this.route.snapshot.queryParams.id} + this.http.get('/api/Buildings',{params:id}).subscribe((data:any)=>{ + if (data.length) { + this.allBuilding = data + this.allBuilding.forEach(element => { + element.position = [] //建筑重点部位 + element.tips = null //建筑重点提示 + element.companyInput = null }) //建筑重点提示数据 + this.getAllBuildingPositon() + this.getAllBuildingTips() + } + }) + } + + //获取所有建筑重点部位 + getAllBuildingPositon () { + this.allBuilding.forEach(element => { + let id = {buildingId:element.id} + this.http.get('/api/BuildingImportantLocations',{params:id}).subscribe(data=>{ + element.position = data + }) + }); + } + + //获取所有建筑重点提示 + getAllBuildingTips () { + this.allBuilding.forEach(element => { + let id = {buildingId:element.id} + this.http.get('/api/BuildingImportantTips',{params:id}).subscribe((data:any)=>{ + if (data) { + element.tips = data + element.companyInput = data.details} + }) + }); + } + + //保存单位重点提示 + Preservation () { + if (this.companyTips) { //编辑单位重点提示 + let data = { + companyId: this.companyTips.companyId, + id: this.companyTips.id, + details: this.companyInput} + this.http.put(`/api/CompanyImportantTips/${this.companyTips.id}`,data).subscribe(data=>{ + this.getCompanyTips() + const config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.snackBar.open('数据修改成功','确定',config); + }) + } else { //新增单位重点提示 + let data = { + companyId: this.route.snapshot.queryParams.id, + id : "", + details: this.companyInput || ""} + this.http.post('/api/CompanyImportantTips',data).subscribe(data=>{ + this.getCompanyTips() + const config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.snackBar.open('数据修改成功','确定',config); + }) + } + } + + //保存建筑重点提示 + PreservationBuilding (e) { + if (e.tips) { //编辑建筑重点提示 + let data = { + buildingId: e.id, + id: e.tips.id, + details: e.companyInput} + this.http.put(`/api/BuildingImportantTips/${e.tips.id}`,data).subscribe(data=>{ + this.toUpdate(e) + }) + } else { //新增重点单位提示 + let data = { + buildingId: e.id, + details: e.companyInput || ""} + this.http.post('/api/BuildingImportantTips',data).subscribe(data=>{ + this.toUpdate(e) + }) + } + } + + //查看图片 + seeImg (e) { + if (e.length) { + let data = e + const dialogRef = this.dialog.open(KeySiteImgs2, {//调用open方法打开对话框并且携带参数过去 + width: '1600px', + height:'900px',data}); + dialogRef.afterClosed().subscribe(); + } else { + const config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.snackBar.open('暂无图片数据','确定',config); + } + } + + //封装方法获取更新当前tab页重点提示 + toUpdate (e) { + let id = {buildingId:e.id} + this.http.get('/api/BuildingImportantTips',{params:id}).subscribe((data:any)=>{ + if (data) { + this.allBuilding.forEach(element => { + if (element.id === e.id) { + element.tips = data + element.companyInput = data.details} + }); + } // if + const config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.snackBar.open('数据修改成功','确定',config); + }) + } + + + +} diff --git a/src/app/key-unit/key-site-look/keyimgdetail.component.html b/src/app/key-unit/key-site-look/keyimgdetail.component.html new file mode 100644 index 0000000..e69de29 diff --git a/src/app/key-unit/key-site-look/keyimgdetail.component.ts b/src/app/key-unit/key-site-look/keyimgdetail.component.ts new file mode 100644 index 0000000..655cf04 --- /dev/null +++ b/src/app/key-unit/key-site-look/keyimgdetail.component.ts @@ -0,0 +1,17 @@ +import { Component, OnInit, Inject } from '@angular/core'; +import { HttpClient } from '@angular/common/http'; +import {MatDialog, MatDialogRef, MAT_DIALOG_DATA} from '@angular/material/dialog'; +import { MatSnackBar } from '@angular/material/snack-bar'; +import Swiper from 'swiper'; + + + +@Component({ + selector: 'keyimgdetail', + templateUrl: './keyimgdetail.component.html', + styleUrls: ['./key-site.component.scss'] + }) +export class KeyImgDetail { + +} + \ No newline at end of file diff --git a/src/app/key-unit/key-site-look/keysiteimgs.component.html b/src/app/key-unit/key-site-look/keysiteimgs.component.html new file mode 100644 index 0000000..992faec --- /dev/null +++ b/src/app/key-unit/key-site-look/keysiteimgs.component.html @@ -0,0 +1,18 @@ +
    图片详情
    +
    +
    +
    + +
    +
    +
    + + +
    +
    +
    + +
    + +
    \ No newline at end of file diff --git a/src/app/key-unit/key-site-look/keysiteimgs.component.ts b/src/app/key-unit/key-site-look/keysiteimgs.component.ts new file mode 100644 index 0000000..fb90d71 --- /dev/null +++ b/src/app/key-unit/key-site-look/keysiteimgs.component.ts @@ -0,0 +1,55 @@ +import { Component, OnInit, Inject ,ViewChild} from '@angular/core'; +import { HttpClient } from '@angular/common/http'; +import { MatDialog, MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog'; +import Swiper from 'swiper'; + + + +@Component({ + selector: 'keysiteimgs', + templateUrl: './keysiteimgs.component.html', + styleUrls: ['./key-site.component.scss'] + }) + +export class KeySiteImgs2 { + + constructor(private http:HttpClient,public dialog: MatDialog,public dialogRef: MatDialogRef, + @Inject(MAT_DIALOG_DATA) public data) { } + testSwiper: Swiper; + + ngOnInit(): void { + this.allImages = [] + this.data.forEach(element => { + element = `${element}?x-oss-process=image/auto-orient,1` + this.allImages.push(element) + }); + } + + ngAfterViewInit() { + + this.testSwiper = new Swiper('.swiper-container', { + direction: 'horizontal', + loop: false, + lazy: true, + // 如果需要前进后退按钮 + navigation: { + nextEl: '.swiper-button-next', + prevEl: '.swiper-button-prev', + } + }); + + } + + allImages:any; //展示所有的图片 + rotationAngle:number=0; //旋转角度 + + //旋转图片 + rotate () { + this.rotationAngle = this.rotationAngle+90 + if (this.rotationAngle === 360) {this.rotationAngle = 0} + } + + + +} + \ No newline at end of file diff --git a/src/app/key-unit/key-site/key-site.component.html b/src/app/key-unit/key-site/key-site.component.html new file mode 100644 index 0000000..4adf51d --- /dev/null +++ b/src/app/key-unit/key-site/key-site.component.html @@ -0,0 +1,120 @@ +
    + + +
    + +
    +

    重点部位情况

    + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    重点部位名称 + {{element.name}} + 重点部位所在位置 + {{element.position}} + 建筑结构 + {{element.structure}} + 使用性质 + {{element.nature}} + 主要危险性 + {{element.hazards}} + 图片 + 查看图片 +
    +

    暂无数据,请前往平面图进行相关数据录入

    +
    +
    +

    重点提示

    + description +

    + +

    +
    + +
    +
    + + +
    + +
    +

    重点部位情况

    + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    重点部位名称 + {{element.name}} + 重点部位所在位置 + {{element.position}} + 建筑结构 + {{element.structure}} + 使用性质 + {{element.nature}} + 主要危险性 + {{element.hazards}} + 图片 + 查看图片 +
    +

    暂无数据,请前往平面图进行相关数据录入

    +
    +
    +

    重点提示

    + description +

    + +

    +
    + +
    +
    + +
    +
    \ No newline at end of file diff --git a/src/app/key-unit/key-site/key-site.component.scss b/src/app/key-unit/key-site/key-site.component.scss new file mode 100644 index 0000000..3fbf2eb --- /dev/null +++ b/src/app/key-unit/key-site/key-site.component.scss @@ -0,0 +1,58 @@ +.content { + width: 100%; + height: 90%; + padding: 10px; + overflow-y: auto; + .contentBox{ + width: 100%; + height: 100%; + overflow-y: auto; + text-align: center; + margin: 0 auto; + } +} +table { + width: 90%; + margin: 15px auto; + text-align: center; + .cdk-header-cell { + text-align: center; + } +} + +//重点提示 +.tips{ + width: 75%; + height: 150px; + border: 1px solid black; + border-radius: 5px; + margin: 15px auto; + text-align: center; + padding: 25px; + textarea { + resize: none; + width: 100%; + height: 100%; + } +} + +//预览图片旋转角度 +.rotateA {transform: rotate(90deg) scale(0.75);} +.rotateB {transform: rotate(180deg)} +.rotateC {transform: rotate(270deg) scale(0.75);} +//预览图片 +.previewImgBox { + width: 1500px; + height: 700px; + text-align: center; + img{ + width: auto; + height: auto; + max-width: 100%; + height: 100%;} +} +.previewImgBottom { + text-align: center; + height: 30px; + margin: 20px auto; +} diff --git a/src/app/key-unit/key-site/key-site.component.spec.ts b/src/app/key-unit/key-site/key-site.component.spec.ts new file mode 100644 index 0000000..cb02f51 --- /dev/null +++ b/src/app/key-unit/key-site/key-site.component.spec.ts @@ -0,0 +1,25 @@ +import { async, ComponentFixture, TestBed } from '@angular/core/testing'; + +import { KeySiteComponent } from './key-site.component'; + +describe('KeySiteComponent', () => { + let component: KeySiteComponent; + let fixture: ComponentFixture; + + beforeEach(async(() => { + TestBed.configureTestingModule({ + declarations: [ KeySiteComponent ] + }) + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(KeySiteComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/key-unit/key-site/key-site.component.ts b/src/app/key-unit/key-site/key-site.component.ts new file mode 100644 index 0000000..4b9b254 --- /dev/null +++ b/src/app/key-unit/key-site/key-site.component.ts @@ -0,0 +1,178 @@ +import { Component, OnInit, ViewChild, Inject } from '@angular/core'; +import {HttpClient} from '@angular/common/http' +import { MatDialogRef, MatDialog, MAT_DIALOG_DATA } from '@angular/material/dialog'; +import { MatSnackBar, MatSnackBarConfig } from '@angular/material/snack-bar'; +import { KeySiteImgs } from './keysiteimgs.component' +import { ActivatedRoute } from '@angular/router'; + + + +@Component({ + selector: 'app-key-site', + templateUrl: './key-site.component.html', + styleUrls: ['./key-site.component.scss'] +}) +export class KeySiteComponent implements OnInit { + + constructor(public http: HttpClient,public dialog: MatDialog,public snackBar: MatSnackBar,private route:ActivatedRoute,) { } + + displayedColumns: string[] = ['mainname', 'position', 'construction', 'nature', 'danger', 'img']; + + ngOnInit(): void { + this.getCompanyPostion() + this.getCompanyTips() + this.getAllBuilding() + } + + allCompanyPosition:any = []; //所有单位重点部位 + companyTips:any; //所有单位重点提示 + companyInput:any; //单位重点提示数据 + allBuilding:any = []; //所有建筑 + 建筑重点部位 + 建筑重点提示 + + //获取单位重点部位 + getCompanyPostion () { + let id = {companyId:this.route.snapshot.queryParams.id} + this.http.get('/api/CompanyImportantLocations',{params:id}).subscribe(data=>{ + this.allCompanyPosition = data + }) + } + + //获取单位重点提示 + getCompanyTips () { + let id = {companyId:this.route.snapshot.queryParams.id} + this.http.get('/api/CompanyImportantTips',{params:id}).subscribe((data:any)=>{ + if (data) { + this.companyTips = data + this.companyInput = data.details} + }) + } + + //获取所有建筑 + getAllBuilding () { + let id = {companyId:this.route.snapshot.queryParams.id} + this.http.get('/api/Buildings',{params:id}).subscribe((data:any)=>{ + if (data.length) { + this.allBuilding = data + this.allBuilding.forEach(element => { + element.position = [] //建筑重点部位 + element.tips = null //建筑重点提示 + element.companyInput = null }) //建筑重点提示数据 + this.getAllBuildingPositon() + this.getAllBuildingTips() + } + }) + } + + //获取所有建筑重点部位 + getAllBuildingPositon () { + this.allBuilding.forEach(element => { + let id = {buildingId:element.id} + this.http.get('/api/BuildingImportantLocations',{params:id}).subscribe(data=>{ + element.position = data + }) + }); + } + + //获取所有建筑重点提示 + getAllBuildingTips () { + this.allBuilding.forEach(element => { + let id = {buildingId:element.id} + this.http.get('/api/BuildingImportantTips',{params:id}).subscribe((data:any)=>{ + if (data) { + element.tips = data + element.companyInput = data.details} + }) + }); + } + + //保存单位重点提示 + Preservation () { + if (this.companyTips) { //编辑单位重点提示 + let data = { + companyId: this.companyTips.companyId, + id: this.companyTips.id, + details: this.companyInput} + this.http.put(`/api/CompanyImportantTips/${this.companyTips.id}`,data).subscribe(data=>{ + this.getCompanyTips() + const config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.snackBar.open('数据修改成功','确定',config); + }) + } else { //新增单位重点提示 + let data = { + companyId: this.route.snapshot.queryParams.id, + id : "", + details: this.companyInput || ""} + this.http.post('/api/CompanyImportantTips',data).subscribe(data=>{ + this.getCompanyTips() + const config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.snackBar.open('数据修改成功','确定',config); + }) + } + } + + //保存建筑重点提示 + PreservationBuilding (e) { + let companyId = this.route.snapshot.queryParams.id + if (e.tips) { //编辑建筑重点提示 + let data = { + buildingId: e.id, + id: e.tips.id, + details: e.companyInput} + this.http.put(`/api/BuildingImportantTips/${e.tips.id}`,data,{params:{ + companyId : companyId + }}).subscribe(data=>{ + this.toUpdate(e) + }) + } else { //新增重点单位提示 + let data = { + buildingId: e.id, + details: e.companyInput || ""} + this.http.post('/api/BuildingImportantTips',data,{params:{ + companyId : companyId + }}).subscribe(data=>{ + this.toUpdate(e) + }) + } + } + + //查看图片 + seeImg (e) { + if (e.length) { + let data = e + const dialogRef = this.dialog.open(KeySiteImgs, {//调用open方法打开对话框并且携带参数过去 + width: '1600px', + height:'900px',data}); + dialogRef.afterClosed().subscribe(); + } else { + const config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.snackBar.open('暂无图片数据','确定',config); + } + } + + //封装方法获取更新当前tab页重点提示 + toUpdate (e) { + let id = {buildingId:e.id} + this.http.get('/api/BuildingImportantTips',{params:id}).subscribe((data:any)=>{ + if (data) { + this.allBuilding.forEach(element => { + if (element.id === e.id) { + element.tips = data + element.companyInput = data.details} + }); + } // if + const config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.snackBar.open('数据修改成功','确定',config); + }) + } + + + +} diff --git a/src/app/key-unit/key-site/keyimgdetail.component.html b/src/app/key-unit/key-site/keyimgdetail.component.html new file mode 100644 index 0000000..e69de29 diff --git a/src/app/key-unit/key-site/keyimgdetail.component.ts b/src/app/key-unit/key-site/keyimgdetail.component.ts new file mode 100644 index 0000000..655cf04 --- /dev/null +++ b/src/app/key-unit/key-site/keyimgdetail.component.ts @@ -0,0 +1,17 @@ +import { Component, OnInit, Inject } from '@angular/core'; +import { HttpClient } from '@angular/common/http'; +import {MatDialog, MatDialogRef, MAT_DIALOG_DATA} from '@angular/material/dialog'; +import { MatSnackBar } from '@angular/material/snack-bar'; +import Swiper from 'swiper'; + + + +@Component({ + selector: 'keyimgdetail', + templateUrl: './keyimgdetail.component.html', + styleUrls: ['./key-site.component.scss'] + }) +export class KeyImgDetail { + +} + \ No newline at end of file diff --git a/src/app/key-unit/key-site/keysiteimgs.component.html b/src/app/key-unit/key-site/keysiteimgs.component.html new file mode 100644 index 0000000..992faec --- /dev/null +++ b/src/app/key-unit/key-site/keysiteimgs.component.html @@ -0,0 +1,18 @@ +
    图片详情
    +
    +
    +
    + +
    +
    +
    + + +
    +
    +
    + +
    + +
    \ No newline at end of file diff --git a/src/app/key-unit/key-site/keysiteimgs.component.ts b/src/app/key-unit/key-site/keysiteimgs.component.ts new file mode 100644 index 0000000..2bd98ac --- /dev/null +++ b/src/app/key-unit/key-site/keysiteimgs.component.ts @@ -0,0 +1,55 @@ +import { Component, OnInit, Inject ,ViewChild} from '@angular/core'; +import { HttpClient } from '@angular/common/http'; +import { MatDialog, MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog'; +import Swiper from 'swiper'; + + + +@Component({ + selector: 'keysiteimgs', + templateUrl: './keysiteimgs.component.html', + styleUrls: ['./key-site.component.scss'] + }) + +export class KeySiteImgs { + + constructor(private http:HttpClient,public dialog: MatDialog,public dialogRef: MatDialogRef, + @Inject(MAT_DIALOG_DATA) public data) { } + testSwiper: Swiper; + + ngOnInit(): void { + this.allImages = [] + this.data.forEach(element => { + element = `${element}?x-oss-process=image/auto-orient,1` + this.allImages.push(element) + }); + } + + ngAfterViewInit() { + + this.testSwiper = new Swiper('.swiper-container', { + direction: 'horizontal', + loop: false, + lazy: true, + // 如果需要前进后退按钮 + navigation: { + nextEl: '.swiper-button-next', + prevEl: '.swiper-button-prev', + } + }); + + } + + allImages:any; //展示所有的图片 + rotationAngle:number=0; //旋转角度 + + //旋转图片 + rotate () { + this.rotationAngle = this.rotationAngle+90 + if (this.rotationAngle === 360) {this.rotationAngle = 0} + } + + + +} + \ No newline at end of file diff --git a/src/app/key-unit/key-unit-management/createunit.component.html b/src/app/key-unit/key-unit-management/createunit.component.html new file mode 100644 index 0000000..966bf88 --- /dev/null +++ b/src/app/key-unit/key-unit-management/createunit.component.html @@ -0,0 +1,61 @@ +
    + 新增单位信息 +
    + + + + + + + + + + + + + + {{unit.name}} + + + + + + + + + + +
    + + +
    + +
    +
    + +
    + 请选择所属辖区中队 + + + +
  • {{node.name}}
  • +
    + + + + +
  • {{node.name}}
  • +
    + +
    +
    diff --git a/src/app/key-unit/key-unit-management/key-unit-management.component.html b/src/app/key-unit/key-unit-management/key-unit-management.component.html new file mode 100644 index 0000000..227c6b1 --- /dev/null +++ b/src/app/key-unit/key-unit-management/key-unit-management.component.html @@ -0,0 +1,143 @@ + +
    + + +
    +
    + + + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + star + + 单位名称{{element.name}}辖区中队{{element.organizationName}}单位类型{{element.buildingTypes.length != 0 ? element.buildingTypes[0].name : ''}}统一社会信用代码{{element.usci}}修改时间 + {{element.modifiedTime|date:'yyyy-MM-dd'}} + 操作 + 查看详情 + 关注单位 + 取消关注 +
    + + + +
    +
    +
    \ No newline at end of file diff --git a/src/app/key-unit/key-unit-management/key-unit-management.component.scss b/src/app/key-unit/key-unit-management/key-unit-management.component.scss new file mode 100644 index 0000000..a00c3e8 --- /dev/null +++ b/src/app/key-unit/key-unit-management/key-unit-management.component.scss @@ -0,0 +1,127 @@ + + + +.header { + width: 100%; + padding: 12px 10px; + // margin-bottom: 10px; + box-sizing: border-box; + // border-bottom: 1px solid black; + .queryBox { + box-sizing: border-box; + padding: 5px 25px; + display: flex; + flex-direction: row; + flex-wrap: wrap; + align-items:center; + // justify-content:center; + .queryField { + margin: 3px 40px; + input { + width: 180px; + height: 22px; + line-height: 22px; + border-radius: 3px;} + } + + } //queryBox + .ordiv{ + position: relative; + + .organizationbox{ + width:450px; + height: 200px; + background: white; + position: absolute; + top: 48px; + left: 77px; + z-index: 999; + border: 1px solid grey; + overflow-y: auto; + li{ + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + } + mat-tree-node{ + cursor: pointer; + white-space:pre; + } + mat-tree-node:hover{ + background: rgba(225, 225, 225, 0.8); + } + .closediv{ + z-index: 100; + position: absolute; + right: 0; + top: 0; + width: 30px; + height: 30px; + cursor: pointer; + line-height: 30px; + text-align: center; + } + .closediv:hover{ + background:rgba(225, 225, 225, 0.8); + } + } + + } +} + +.body{ + .buttonbox{ + margin-top: 15px; + padding-left: 15px; + button{ + margin:0 10px + } + } + .tablebox{ + table{ + width: 100%; + margin-top: 15px; + } + mat-paginator{ + width: 100%; + // margin-top: 30px; + } + } +} + + +.leftbox{ + width: 250px; + float: left; + .btn{ + button{ + margin: 0 6px; + } + } +} +.treebox{ + float: left; + width: 325px; + height: 350px; + overflow: auto; + .organizationlist{ + list-style: none + } + .organizationlist:hover{ + background: rgba(225, 225, 225, 0.8); + cursor: pointer; + } +} +.mat-header-cell{ + text-align: center; +} +.mat-cell{ + text-align: center; +} +.operation{ + span{ + color: blue; + cursor: pointer; + margin: 0 3px; + } +} \ No newline at end of file diff --git a/src/app/key-unit/key-unit-management/key-unit-management.component.spec.ts b/src/app/key-unit/key-unit-management/key-unit-management.component.spec.ts new file mode 100644 index 0000000..e81e54b --- /dev/null +++ b/src/app/key-unit/key-unit-management/key-unit-management.component.spec.ts @@ -0,0 +1,25 @@ +import { async, ComponentFixture, TestBed } from '@angular/core/testing'; + +import { KeyUnitManagementComponent } from './key-unit-management.component'; + +describe('KeyUnitManagementComponent', () => { + let component: KeyUnitManagementComponent; + let fixture: ComponentFixture; + + beforeEach(async(() => { + TestBed.configureTestingModule({ + declarations: [ KeyUnitManagementComponent ] + }) + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(KeyUnitManagementComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/key-unit/key-unit-management/key-unit-management.component.ts b/src/app/key-unit/key-unit-management/key-unit-management.component.ts new file mode 100644 index 0000000..b0f8bf3 --- /dev/null +++ b/src/app/key-unit/key-unit-management/key-unit-management.component.ts @@ -0,0 +1,425 @@ +import { Component, OnInit, ViewChild, Inject } from '@angular/core'; +import { HttpClient } from '@angular/common/http' +import { MatTreeFlatDataSource, MatTreeFlattener } from '@angular/material/tree'; +import { MatPaginator } from '@angular/material/paginator'; +import { FlatTreeControl } from '@angular/cdk/tree'; +import { FormControl } from '@angular/forms'; +import { Router,ActivatedRoute } from '@angular/router' +import { PageEvent } from '@angular/material/paginator'; +import { MatDialogRef, MatDialog, MAT_DIALOG_DATA } from '@angular/material/dialog'; +import { MatSnackBar, MatSnackBarConfig } from '@angular/material/snack-bar'; +import { TreeService } from '../../http-interceptors/tree.service' +@Component({ + selector: 'app-key-unit-management', + templateUrl: './key-unit-management.component.html', + styleUrls: ['./key-unit-management.component.scss'] +}) +export class KeyUnitManagementComponent implements OnInit { + + constructor(private http:HttpClient,private router:Router,private route:ActivatedRoute,private tree: TreeService,public dialog: MatDialog,public snackBar: MatSnackBar) { } + + private _transformer = (node, level: number) => { //初始化tree + return { + expandable: !!node.children && node.children.length > 0, + name: node.name, + level: level, + id: node.id, + parentId: node.parentId, + children: node.children + }; + } + treeControl = new FlatTreeControl(node => node.level, node => node.expandable); + treeFlattener = new MatTreeFlattener(this._transformer, node => node.level, node => node.expandable, node => node.children); + dataSource = new MatTreeFlatDataSource(this.treeControl, this.treeFlattener); + myControl = new FormControl(); + hasChild = (_: number, node: any) => node.expandable; + + + allunittype:any //获取所有的单位类型 + + //分页 + @ViewChild(MatPaginator, {static: true}) + pageEvent: PageEvent; + paginator: MatPaginator; + length:any; //共多少条数据 + pageSize:any; //每页条数 + pageSizeOptions: number[] = [10] //设置每页条数 + PageNumber:any //第几页 + + displayedColumns: string[] = ['checked','Follow','unitname', 'jurisdictionsquadron', 'unittype','scc', 'time','operation']; + tabledataSource:any + allorganizations:any + + + + //分页事件 + chagePage(e){ + this.PageNumber = e.pageIndex+1 + this.getAllKeyUnit(); + } + ngOnInit(): void { + this.getunitdata(); + this.getOrganizations(); + this.getUnittype(); + this.getAllKeyUnit(); + } + //获得所有重点单位 + allKeyUnitInfo:any //所有的重点单位 + getAllKeyUnit(){ + // console.log(Boolean(Number(this.follow))) + let follow + if(this.follow == ''){ + follow = '' + } + if(this.follow == '0'){ + follow = false + } + if(this.follow == '1'){ + follow = true + } + // console.log(222,follow) + let paramsdata:any = { + Name: this.companyName || '', + OrganizationId: this.jsId || '', + HasChildren:this.jscheck || '', + USCI:this.shehui || '', + IsFollowed: follow, + BuildingTypeId: this.unittype || '', + PageNumber: this.PageNumber || '1', + PageSize: this.pageSizeOptions[0], + Sort: '' + } + this.http.get("/api/Companies",{params:paramsdata}).subscribe((data:any)=>{ + + this.length = data.totalCount + this.allKeyUnitInfo = data + // console.log(data) + this.tabledataSource = data.items + }) + } + //得到当前单位信息 + getunitdata(){ + this.http.get("/api/Account/Profiles").subscribe( + (data:any)=>{ + this.organizationName = data.organizationName + } + ) + } + organizationName:any //当前单位组织机构名称 + treedata:any //组织机构树型数据 + newArr:any = [] + newallorganizations:any //用于存储在原始数据基础上的每个机构增加children字段 + newallorganizations2:any + //得到当前单位所在组织机构的tree型数据 + getpresentOrganization(){ + this.newallorganizations = this.allorganizations + this.newallorganizations.forEach(item => { + item.children = [] + this.newallorganizations.forEach(element => { + if(element.parentId == item.id){ + item.children.push(element) + } + }); + }); + this.http.get("/api/Account/Profiles").subscribe( + (data:any)=>{ + this.organizationName = data.organizationName + if(this.organizationName){ + this.newallorganizations.forEach(item => { + if(item.name == this.organizationName){ + this.dataSource.data = [item] + this.newallorganizations2 = [item] + } + }); + }else{ + this.newallorganizations2 = this.treedata + this.dataSource.data = this.treedata + } + } + ) + + } + //获得所有组织机构 + getOrganizations(){ + this.http.get('/api/Organizations').subscribe( + (data:any)=>{ + this.allorganizations = data + this.treedata = this.tree.toTree(data); + this.getpresentOrganization(); + } + ) + } + + //获得所有单位类型 + getUnittype(){ + this.http.get('/api/BuildingTypes/Simple').subscribe( + data=>{ + this.allunittype = data + } + ) + } + selectedunitArr:any =[] //选中单位的数组 + //勾选框事件 + checkChange(e,element){ + element.checked = e.checked + } + //编辑单位信息 + editunit(){ + let selectedunitArr = [] + this.allKeyUnitInfo.items.forEach(item => { + if(item.checked){ + selectedunitArr.push(item.id) + } + }); + + if(selectedunitArr.length == 0){ + const config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.snackBar.open('请先选择要修改的单位','确定',config); + } + if(selectedunitArr.length != 1 && selectedunitArr.length != 0){ + const config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.snackBar.open('只能选择一个单位修改','确定',config); + } + if(selectedunitArr.length == 1){ //带着id跳到修改页面 + this.allKeyUnitInfo.items.forEach(item => { + if(item.id == selectedunitArr[0]){ + let companyName = item.name + sessionStorage.setItem("companyName",companyName) + } + }); + sessionStorage.setItem("editable","1") + window.open(`/keyUnit/editplaninfo?id=${selectedunitArr[0]}`); + } + } + //关注重点单位 + Follow(element){ + // console.log(element) + this.http.put(`/api/Companies/${element.id}/Follow`,'').subscribe(data=>{ + const config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.snackBar.open('关注成功','确定',config); + this.getAllKeyUnit(); + + }) + } + //取消关注 + unFollow(element){ + // console.log(element) + this.http.put(`/api/Companies/${element.id}/Unfollow`,'').subscribe(data=>{ + const config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.snackBar.open('取消成功','确定',config); + this.getAllKeyUnit(); + }) + } + //删除单位信息 + deleteunit(){ + let selectedunitArr = [] + this.allKeyUnitInfo.items.forEach(item => { + if(item.checked){ + selectedunitArr.push(item.id) + } + }); + + if(selectedunitArr.length == 0){ + const config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.snackBar.open('请先选择要删除的单位','确定',config); + } + if(selectedunitArr.length != 1 && selectedunitArr.length != 0){ + const config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.snackBar.open('只能选择一个单位删除','确定',config); + } + if(selectedunitArr.length == 1){ //带着id跳到删除页面 + let isTrue = confirm('您确定要删除吗') + if(isTrue){ + this.http.delete(`/api/Companies/${selectedunitArr[0]}`).subscribe(data=>{ + const config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.snackBar.open('删除成功','确定',config); + this.getAllKeyUnit(); + }) + } + + } + } + + + //重置 + js:any //辖区中队输入框 + jsId:any //辖区中队选择的id + companyName:any //单位名称 + shehui:any //统一社会信用代码 + unittype:any //单位类型 + jscheck:any //辖区中队包含下级 + OrganizationId // + follow:any = '' //是否为关注单位 + reset(){ + this.js='' //辖区中队输入框 + this.jscheck='' //辖区中队包含下级 + this.companyName='' //单位名称 + this.shehui='' //统一社会信用代码 + this.unittype='' //单位类型 + this.jsId = '' + this.follow = '' + this.PageNumber = 1 + this.pageEvent.pageIndex = 0 + this.getAllKeyUnit(); + } + + //跳转查看基本信息页面 + unitdetails(element){ + // console.log(element) + // this.router.navigate(['/keyUnit/viewunitinfo']) + sessionStorage.setItem("editable","0") + sessionStorage.setItem("companyName",element.name) + sessionStorage.setItem("companyId",element.id) + window.open(`/keyUnit/viewunitinfo?id=${element.id}`,'_blank'); + // console.log(element) + } + //提交查询表单 + onSubmit(value){ + this.PageNumber = 1 + this.pageEvent.pageIndex = 0 + this.getAllKeyUnit(); + } + bigclosediv(e){ + this.isorganizationbox = false + } + stopclose(e){ + e.stopPropagation(); + } + //辖区中队div是否显示 + isorganizationbox:boolean = false + //点击辖区中队树,将选择的辖区中队添加到变量 + add(node) { + this.isorganizationbox = false + this.js = node.name + this.jsId = node.id + } + //关闭辖区中队隐藏框 + closeorganizationbox() { + this.isorganizationbox = false + } + //打开辖区中队隐藏框 + openorganizationbox() { + this.isorganizationbox = true + + } + + //关闭出现的组织机构div + closediv(){ + this.isorganizationbox = false + } + + //新增重点单位 + createunit(){ + // console.log(this.newallorganizations2) + const dialogRef = this.dialog.open(CreateUnit, {//调用open方法打开对话框并且携带参数过去 + width: '625px', + data: {allunittype:this.allunittype,allorganizations:this.newallorganizations2} + }); + dialogRef.afterClosed().subscribe( + data=>{ + if(data){ + const config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.snackBar.open('创建成功','确定',config); + this.getAllKeyUnit(); + sessionStorage.setItem("companyName",data.name) + sessionStorage.setItem("editable","1") + sessionStorage.setItem("companyId",data.id) + window.open(`/keyUnit/editplaninfo?id=${data.id}`); + } + } + ); + } +} + + + +//创建重点单位 +@Component({ + selector: 'createunit', + templateUrl: './createunit.component.html', + styleUrls: ['./key-unit-management.component.scss'] +}) +export class CreateUnit { + myControl = new FormControl(); + private _transformer = (node, level: number) => { + return { + expandable: !!node.children && node.children.length > 0, + name: node.name, + level: level, + id: node.id, + parentId: node.parentId, + enabled:node.enabled, + order:node.order, + }; + } + treeControl = new FlatTreeControl(node => node.level, node => node.expandable); + treeFlattener = new MatTreeFlattener(this._transformer, node => node.level, node => node.expandable, node => node.children); + dataSource = new MatTreeFlatDataSource(this.treeControl, this.treeFlattener); + constructor(private http: HttpClient,public dialogRef: MatDialogRef,@Inject(MAT_DIALOG_DATA) public data,public snackBar: MatSnackBar,private tree: TreeService) {} + hasChild = (_: number, node: any) => node.expandable; + allunittype = this.data.allunittype + js:any //所属辖区中队 + jsId:any //所属辖区中队的id + ngOnInit(): void { + this.dataSource.data = this.data.allorganizations + } + onNoClick(): void { + this.dialogRef.close(); + } + add(node){ + this.js = node.name + this.jsId = node.id + } + onSubmit(value){ + // console.log(value) + let myDate = new Date(); + let body = { + id: "", + name: value.name, + usci: value.usci, + contacts: "", + phone: "", + address: "", + imageUrl: "", + location: { + x: 0, + y: 0 + }, + modifiedTime: myDate, + organizationId: this.jsId, + organizationName: this.js, + buildingTypes: [ + { + id: value.unittype, + name: "" + } + ] + } + this.http.post("/api/Companies",body).subscribe( + data=>{ + this.dialogRef.close(data); + }, + err=>{ + const config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.snackBar.open(err,'确定',config); + }) + } +} \ No newline at end of file diff --git a/src/app/key-unit/key-unit-routing.module.ts b/src/app/key-unit/key-unit-routing.module.ts new file mode 100644 index 0000000..31cef4b --- /dev/null +++ b/src/app/key-unit/key-unit-routing.module.ts @@ -0,0 +1,24 @@ +import { NgModule } from '@angular/core'; +import { Routes, RouterModule } from '@angular/router'; +import {KeyUnitManagementComponent} from './key-unit-management/key-unit-management.component' +import { EditUnitInfoComponent } from './edit-unit-info/edit-unit-info.component'; +import { ViewUnitDetailsComponent } from './view-unit-details/view-unit-details.component'; +import {MTokenK1Component} from '../m-token-k1/m-token-k1.component' //K1秘钥 +import { EditPlanInfoComponent } from './edit-plan-info/edit-plan-info.component'; +import { ViewUnitDetailsPlanComponent } from './view-unit-details-plan/view-unit-details-plan.component'; + + + +const routes: Routes = [ + { path: '', component: KeyUnitManagementComponent}, + { path: 'editunitinfo', component: EditUnitInfoComponent,canActivate: [MTokenK1Component]},//守卫验证, + { path: 'viewunitinfo', component: ViewUnitDetailsComponent}, + { path: 'editplaninfo', component: EditPlanInfoComponent}, + { path: 'viewunitinfoplan', component: ViewUnitDetailsPlanComponent} +]; + +@NgModule({ + imports: [RouterModule.forChild(routes)], + exports: [RouterModule] +}) +export class KeyUnitRoutingModule { } diff --git a/src/app/key-unit/key-unit.module.ts b/src/app/key-unit/key-unit.module.ts new file mode 100644 index 0000000..bff1935 --- /dev/null +++ b/src/app/key-unit/key-unit.module.ts @@ -0,0 +1,133 @@ +import { NgModule } from '@angular/core'; +import { CommonModule } from '@angular/common'; +import { KeyUnitRoutingModule } from './key-unit-routing.module'; +import { KeyUnitManagementComponent, CreateUnit } from './key-unit-management/key-unit-management.component'; +import {A11yModule} from '@angular/cdk/a11y'; +import {DragDropModule} from '@angular/cdk/drag-drop'; +import {PortalModule} from '@angular/cdk/portal'; +import {ScrollingModule} from '@angular/cdk/scrolling'; +import {CdkStepperModule} from '@angular/cdk/stepper'; +import {CdkTableModule} from '@angular/cdk/table'; +import {CdkTreeModule} from '@angular/cdk/tree'; +import {MatAutocompleteModule} from '@angular/material/autocomplete'; +import {MatBadgeModule} from '@angular/material/badge'; +import {MatBottomSheetModule} from '@angular/material/bottom-sheet'; +import {MatButtonModule} from '@angular/material/button'; +import {MatButtonToggleModule} from '@angular/material/button-toggle'; +import {MatCardModule} from '@angular/material/card'; +import {MatCheckboxModule} from '@angular/material/checkbox'; +import {MatChipsModule} from '@angular/material/chips'; +import {MatStepperModule} from '@angular/material/stepper'; +import {MatDatepickerModule} from '@angular/material/datepicker'; +import {MatDialogModule} from '@angular/material/dialog'; +import {MatDividerModule} from '@angular/material/divider'; +import {MatExpansionModule} from '@angular/material/expansion'; +import {MatGridListModule} from '@angular/material/grid-list'; +import {MatIconModule} from '@angular/material/icon'; +import {MatInputModule} from '@angular/material/input'; +import {MatListModule} from '@angular/material/list'; +import {MatMenuModule} from '@angular/material/menu'; +import {MatNativeDateModule, MatRippleModule, MatOption} from '@angular/material/core'; +import {MatPaginatorModule} from '@angular/material/paginator'; +import {MatProgressBarModule} from '@angular/material/progress-bar'; +import {MatProgressSpinnerModule} from '@angular/material/progress-spinner'; +import {MatRadioModule} from '@angular/material/radio'; +import {MatSelectModule} from '@angular/material/select'; +import {MatSidenavModule} from '@angular/material/sidenav'; +import {MatSliderModule} from '@angular/material/slider'; +import {MatSlideToggleModule} from '@angular/material/slide-toggle'; +import {MatSnackBarModule} from '@angular/material/snack-bar'; +import {MatSortModule} from '@angular/material/sort'; +import {MatTableModule} from '@angular/material/table'; +import {MatTabsModule} from '@angular/material/tabs'; +import {MatToolbarModule} from '@angular/material/toolbar'; +import {MatTooltipModule} from '@angular/material/tooltip'; +import {MatTreeModule} from '@angular/material/tree'; +import { EditUnitInfoComponent } from './edit-unit-info/edit-unit-info.component'; +import { ViewUnitDetailsComponent } from './view-unit-details/view-unit-details.component'; +import { ReactiveFormsModule, FormsModule } from '@angular/forms'; +import { AddHouseInfo } from './basicinfo/addhouseinfo.component'; +import { LookMaster } from './basicinfo/lookmaster.component'; +import { BasicinfoComponent } from './basicinfo/basicinfo.component'; +import { EditPlanInfoComponent } from './edit-plan-info/edit-plan-info.component'; +import { CountdownModule } from 'ngx-countdown'; +import { BasicinfoLookComponent } from './basicinfo-look/basicinfo.component'; +import { ViewUnitDetailsPlanComponent } from './view-unit-details-plan/view-unit-details-plan.component'; +import { FunctionDivisionComponent, addPartition, addPartitionAttribute } from './function-division/function-division.component'; +import {AllaroundComponent} from './allaround/allaround.component' +import {ImgDetails} from './allaround/imgdetails.component' +import { RealisticPictureComponent, previewImg, addRealPicture, editRealPicture } from './realistic-picture/realistic-picture.component'; +import { FileUploadModule } from 'ng2-file-upload'; +import {KeySiteComponent} from './key-site/key-site.component' +import {KeyImgDetail} from './key-site/keyimgdetail.component' +import {KeySiteImgs} from './key-site/keysiteimgs.component' +import {UploadingCADComponent,readFile,editFile} from './uploading-cad/uploading-cad.component' +import { KeySiteLookComponent } from './key-site-look/key-site.component'; +import { KeySiteImgs2 } from './key-site-look/keysiteimgs.component'; +import { FunctionDivisionLookComponent, addPartitionAttribute2 } from './function-division-look/function-division.component'; +import { RealisticPictureLookComponent, previewImg3 } from './realistic-picture-look/realistic-picture.component'; +import { UploadingCADLookComponent } from './uploading-cad-look/uploading-cad.component'; +import { FireFightingDeviceComponent } from './fire-fighting-device/fire-fighting-device.component'; +import { ImagesData, previewBigImg } from './fire-fighting-device/imagesdata.component'; +import { ImgsDataDetail } from './fire-fighting-device/addGrouping.component'; +import { FireFightingDeviceLookComponent } from './fire-fighting-device-look/fire-fighting-device.component'; +import { ImagesData2, previewBigImg2 } from './fire-fighting-device-look/imagesdata.component'; +import { ImgsDataDetail2 } from './fire-fighting-device-look/addGrouping.component'; +import { LookMaster2 } from './basicinfo-look/lookmaster.component'; +// import { LookMaster2 } from './basicinfo-look/lookmaster.component'; + + +@NgModule({ + declarations: [KeyUnitManagementComponent, EditUnitInfoComponent, ViewUnitDetailsComponent,CreateUnit,BasicinfoComponent,LookMaster,AddHouseInfo, EditPlanInfoComponent,BasicinfoLookComponent, ViewUnitDetailsPlanComponent,FunctionDivisionComponent,addPartition,addPartitionAttribute,AllaroundComponent,ImgDetails,RealisticPictureComponent,previewImg,addRealPicture,editRealPicture,KeySiteComponent,KeyImgDetail,KeySiteImgs,UploadingCADComponent,readFile,editFile,KeySiteLookComponent,KeySiteImgs2,FunctionDivisionLookComponent,RealisticPictureLookComponent,previewImg3,UploadingCADLookComponent,FireFightingDeviceComponent,ImagesData,previewBigImg,ImgsDataDetail,FireFightingDeviceLookComponent,ImagesData2,ImgsDataDetail2,previewBigImg2,LookMaster2,addPartitionAttribute2], + exports:[ViewUnitDetailsPlanComponent], + imports: [ + CommonModule, + KeyUnitRoutingModule, + A11yModule, + CdkStepperModule, + CdkTableModule, + CdkTreeModule, + DragDropModule, + MatAutocompleteModule, + MatBadgeModule, + MatBottomSheetModule, + MatButtonModule, + MatButtonToggleModule, + MatCardModule, + MatCheckboxModule, + MatChipsModule, + MatStepperModule, + MatDatepickerModule, + MatDialogModule, + MatDividerModule, + MatExpansionModule, + MatGridListModule, + MatIconModule, + MatInputModule, + MatListModule, + MatMenuModule, + MatNativeDateModule, + MatPaginatorModule, + MatProgressBarModule, + MatProgressSpinnerModule, + MatRadioModule, + MatRippleModule, + MatSelectModule, + MatSidenavModule, + MatSliderModule, + MatSlideToggleModule, + MatSnackBarModule, + MatSortModule, + MatTableModule, + MatTabsModule, + MatToolbarModule, + MatTooltipModule, + MatTreeModule, + PortalModule, + ScrollingModule, + FormsModule, + CountdownModule, + FileUploadModule + ] +}) +export class KeyUnitModule { } diff --git a/src/app/key-unit/realistic-picture-look/addRealPicture.html b/src/app/key-unit/realistic-picture-look/addRealPicture.html new file mode 100644 index 0000000..542256f --- /dev/null +++ b/src/app/key-unit/realistic-picture-look/addRealPicture.html @@ -0,0 +1,18 @@ +
    创建实景图分组
    +
    +
    + + + + + +
    + + +
    + +
    +
    \ No newline at end of file diff --git a/src/app/key-unit/realistic-picture-look/editRealPicture.html b/src/app/key-unit/realistic-picture-look/editRealPicture.html new file mode 100644 index 0000000..820857d --- /dev/null +++ b/src/app/key-unit/realistic-picture-look/editRealPicture.html @@ -0,0 +1,18 @@ +
    编辑实景图分组
    +
    +
    + + + + + +
    + + +
    + +
    +
    \ No newline at end of file diff --git a/src/app/key-unit/realistic-picture-look/previewImg.html b/src/app/key-unit/realistic-picture-look/previewImg.html new file mode 100644 index 0000000..1cde6b9 --- /dev/null +++ b/src/app/key-unit/realistic-picture-look/previewImg.html @@ -0,0 +1,17 @@ +
    图片详情
    +
    +
    +
    + +
    +
    +
    + + +
    +
    +
    + +
    + +
    \ No newline at end of file diff --git a/src/app/key-unit/realistic-picture-look/realistic-picture.component.html b/src/app/key-unit/realistic-picture-look/realistic-picture.component.html new file mode 100644 index 0000000..0f42fc6 --- /dev/null +++ b/src/app/key-unit/realistic-picture-look/realistic-picture.component.html @@ -0,0 +1,59 @@ +
    +
    +
    +
    + 实景图 + +
    +
    +
    +
    + folder{{item.name}} +
    +
    + 暂无数据 +
    +
    +
    + +
    +
    +
    + +
    +
    + +
    +
    + +
    + check_circle +
    + + + 保存 + 删除 +
    + +

    暂无数据

    +
    + + +
    + +
    +
    diff --git a/src/app/key-unit/realistic-picture-look/realistic-picture.component.scss b/src/app/key-unit/realistic-picture-look/realistic-picture.component.scss new file mode 100644 index 0000000..cfbc003 --- /dev/null +++ b/src/app/key-unit/realistic-picture-look/realistic-picture.component.scss @@ -0,0 +1,174 @@ +.content { + margin: 0 0 0 10px; + width: 100%; + height: 90%; + overflow-y: auto; + display: flex; + .leftBox { + flex: 15%; + padding-top: 10px; + .bank { + display: flex; + padding-left: 10px; + .mat-icon {margin-right: 15px;} + } + } + .rightBox { + border-left: 1px solid #999; + flex: 85%; + display: flex; + flex-direction: column; + .topBox { + flex: 5%; padding: 10px; + display: flex; + :first-child {flex: 85%;}; + :last-child {flex: 15%;} + } + .bottomBox { + flex: 95%; + padding: 5px 0 0 25px; + overflow: auto; + .imgsBoxflex { + display: flex; + flex-direction: row; + flex-wrap: wrap; + } + } + } +} + +//icon统一样式 +.mat-icon { + cursor:pointer; + width: 18px; + height: 18px; + vertical-align:top; + margin-right: 10px; +} +.title {margin-right: 30px;font-weight: 500; font-size: 18px;} + +.material { + cursor:pointer; + height: 30px; + font-size: 16px; + margin-top: 10px; + padding-left: 15px; + span { + max-width: 200px; + display: inline-block; + overflow: hidden; + text-overflow:ellipsis; + white-space: nowrap; + } + .btn { + color: #FFC122; + } +} +.imgBox{ + width: 300px; + height: 200px; + margin: 0 35px 35px 0; + display: inline-block; + position: relative; + .fixedImg { + width: 100%; + height: 170px; + text-align: center; + margin-bottom: 3px; + img { + width: auto; + height: auto; + max-width: 100%; + height: 100%; + cursor:pointer; + } + } + input{ + font-size:12px; + width: 100px; + height:18px; + border-radius:3px; + border:1px solid #c8cccf; + outline:0; + text-align:left; + padding-left: 5px; + display:inline-block; + cursor: pointer;} + input::-webkit-input-placeholder{ + color: #986655; + font-size: 12px; + } + a {display: inline-block; + width: 45px; + height: 24px; + line-height: 24px; + text-align: center; + border-radius: 3px; + background-color: #2196F3; + font-size: 14px; + color: #fff;} +} +.uploadFileFixed { + position: relative; + .uploadFile { + opacity:0; + display: inline-block; + width: 88px; + height: 36px; + position: absolute; + top: 0px; + left: 0px; + } +} +//分页 +.mat-paginator { + background-color: rgba(255,255,255,0); + padding-right: 10%; +} +.isLoading{ + display: inline-block; + margin-left: 15px; + top: 8px; +} + +//左侧实景图文件样式 +.leftFile { + background-color: rgba(225,225,225,0.8); +} +//选中图片样式 +.selectImg { + -webkit-filter: drop-shadow(0px 0px 5px #000); + filter: drop-shadow(0px 0px 5px #000); + border: 1px solid red; +} +.checkedImg { + position: absolute; + top: 1px; + right: 1px; + color:#00FF00; + font-size: 30px; + z-index: 999; +} +//预览图片旋转角度 +.rotateA {transform: rotate(90deg) scale(0.75);} +.rotateB {transform: rotate(180deg)} +.rotateC {transform: rotate(270deg) scale(0.75);} + + + +//预览图片 +.previewImgBox { + width: 1500px; + height: 700px; + text-align: center; + img{ + width: auto; + height: auto; + max-width: 100%; + height: 100%;} +} +.previewImgBottom { + text-align: center; + height: 30px; + margin: 20px auto; +} diff --git a/src/app/key-unit/realistic-picture-look/realistic-picture.component.ts b/src/app/key-unit/realistic-picture-look/realistic-picture.component.ts new file mode 100644 index 0000000..cf1dc66 --- /dev/null +++ b/src/app/key-unit/realistic-picture-look/realistic-picture.component.ts @@ -0,0 +1,410 @@ +import { Component, OnInit, Inject, ViewChild } from '@angular/core'; +import { HttpClient } from '@angular/common/http'; +import { MatDialog, MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog'; +import { FileUploader } from 'ng2-file-upload'; +import { MatPaginator } from '@angular/material/paginator'; +import { MatSnackBar, MatSnackBarConfig } from '@angular/material/snack-bar'; +import Swiper from 'swiper'; +import { Router,ActivatedRoute } from '@angular/router' + +@Component({ + selector: 'app-realistic-picture-look', + templateUrl: './realistic-picture.component.html', + styleUrls: ['./realistic-picture.component.scss'] +}) +export class RealisticPictureLookComponent implements OnInit { + uploader:FileUploader = new FileUploader({ //初始化上传文件 + url: `/api/Objects/PlanPlatform/${this.route.snapshot.queryParams.id}/RealImgs`, + method: "POST", + itemAlias: "uploadedfile", + autoUpload: false, + removeAfterUpload:true, + }); + + constructor(private router:Router,private route:ActivatedRoute,private http:HttpClient,public dialog: MatDialog,public snackBar: MatSnackBar) { } + + ngOnInit(): void { + let companyId = this.route.snapshot.queryParams.id + this.http.get('/api/RealityImageGroups',{params:{ + companyId : companyId + }}).subscribe((data:any)=>{ + this.allRealPicture = data + this.selectReal = data[0] + this.getAllRealPicture() + }) + } + + companyId:any; //单位编号 + allRealPicture:any=[]; //所有实景图文件 + selectReal:any; //选中的实景图文件 + selectRealIndex:number=0; //选中的实景图文件下标 + allImages:any=[]; //实景图文件对应所有的实景图 + isDownload:boolean = false; //是否批量下载 + downloadList:any = []; //选中需要下载的图片 + + //分页 + @ViewChild(MatPaginator, {static: true}) + paginator: MatPaginator; + length:any; //共多少条数据 + pageSize:any = '12'; //每页条数 + pageSizeOptions: number[] = [12] //设置每页条数 + PageNumber:any; //第几页 + + //分页切换 + chagePage (e) { + this.PageNumber = e.pageIndex+1 + this.getAllRealPicture() + } + + //获取所有实景图分组 + getAllGrouping () { + let companyId = this.route.snapshot.queryParams.id + this.http.get('/api/RealityImageGroups',{params:{ + companyId : companyId + }}).subscribe((data:any)=>{ + this.allRealPicture = data + this.selectReal = data[this.selectRealIndex] + }) + } + + //获取实景图分组对应实景图 + getAllRealPicture () { + if (this.selectReal) { + let data ={ + groupId: this.selectReal.id, + PageNumber: this.PageNumber || 1, + pageSize: this.pageSize, + } + this.http.get('/api/RealityImages',{params:data}).subscribe((data:any)=>{ + this.allImages = data.items + this.length = data.totalCount + this.pageSize = data.pageSize + this.downloadList = [] + this.allImages.forEach(element => { //每张图片设置选中状态为false + element.newImageUrl = `/api/Objects/PlanPlatform/${element.imageUrl}?x-oss-process=image/resize,m_fill,h_170,w_299` //处理图片URL地址 + element.checked = false //图片是否选中布尔值 + element.nameStart = element.name.substring(0,element.name.lastIndexOf(".")); //图片名称前缀 + element.nameEnd = element.name.substring(element.name.lastIndexOf("."),element.name.length); //图片名称后缀 + }); + + }) + } + } + + //切换左侧实景图文件 + changeReal (e,index) { + if (this.selectRealIndex != index) { + this.selectReal = e + this.selectRealIndex = index + this.isDownload = false + this.downloadList = [] + this.getAllRealPicture() + } + } + + //选择批量下载 + download () { + this.isDownload = !this.isDownload + if (!this.isDownload) { //取消批量下载时数组清空 + this.allImages.forEach(element => {element.checked = false}); + this.downloadList = [] + } + } + + // 预览图片---批量选择图片 + operation (e,index) { + if (this.isDownload) { //批量选择图片 + e.checked = !e.checked + if (e.checked==true) {this.downloadList.push(e)} + else {this.downloadList.splice(this.downloadList.findIndex(item => item.id === e.id), 1)} + } else { //预览图片 + let data = { + allImages:this.allImages, + imgIndex: index} + let dialogRef = this.dialog.open(previewImg3, + {width: '1600px', + height:'900px',data}); + dialogRef.afterClosed().subscribe(); + } + + } + + //新建实景图文件 + addReal () { + + } + + //编辑实景图文件 + editReal () { + + } + + //删除实景图文件 + delete () { + let companyId = this.route.snapshot.queryParams.id + if (this.selectReal) { + let isDelete = confirm('您确定要删除吗') + if (isDelete) { + this.http.delete(`/api/RealityImageGroups/${this.selectReal.id}`).subscribe(data=>{ + this.http.get('/api/RealityImageGroups',{params:{ + companyId : companyId + }}).subscribe((data:any)=>{ + this.allRealPicture = data + this.selectReal = data[this.selectRealIndex] + this.allImages = [] + this.getAllRealPicture() + }) + }) + } + } + } + + + + //实景图修改 + preservationImg (e) { + let data = { + id:e.id, + name:e.nameStart+e.nameEnd, + imageUrl:e.imageUrl, + realityImageGroupId:e.realityImageGroupId + } + this.http.put(`/api/RealityImages/${e.id}`,data).subscribe(data=>{ + this.getAllRealPicture() + const config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.snackBar.open('图片修改成功','确定',config); + }) + } + + //实景图删除 + deleteImg (e) { + let isDelete = confirm('您确定要删除吗') + if (isDelete) { + this.http.delete(`/api/RealityImages/${e.id}`).subscribe(data=>{ + this.getAllRealPicture() + const config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.snackBar.open('图片删除成功','确定',config); + }) + this.http.delete(`/api/Objects/PlanPlatform/${e.imageUrl}`).subscribe(data=>{}) + } + } + + + + + + isLoading:boolean = false; //loading加载 + //上传文件↓ + file:any; //上传的文件 + objectName:any; //上传对象名 + uploadId:any; //上传分块上传事件编号 + + //change选择文件 + uploadFile (e) { + if (this.selectReal) { + this.file = e.target.files[0] || null //上传的文件 + let URL = window.URL.createObjectURL(this.file) + var img = new Image() + img.src = URL + let that = this + img.onload = function () { + if(img.width>=4096 || img.height>=5000 ){ + const config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + that.snackBar.open('请选择分辨率小于4096*5000的图片','确定',config); + that.uploader.clearQueue(); //清空input控件文件 + (document.getElementById('uploadFile')).value = null //清空input框缓存 + }else{ that.startUploading() } + } //onload + } else { + const config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.snackBar.open('请选择或创建实景图文件夹','确定',config); + this.uploader.clearQueue(); //清空input控件文件 + (document.getElementById('uploadFile')).value = null //清空input框缓存 + } + } + + //上传文件 + startUploading () { + let file = this.file || null //获取上传的文件 + let fileSize = file.size || null //上传文件的总大小 + let shardSize = 5 * 1024 * 1024 //5MB一个分片 + let maxdSize = 20 * 1024 * 1024 //限制20MB + + if (file && fileSize<=shardSize) { //上传文件<=5MB时 + this.uploader.queue[0].upload();//开始上传 + this.uploader.queue[0].onSuccess = (response, status, headers) => { + if (status == 201) { // 上传文件成功,上传文件后获取服务器返回的数据 + let tempRes = JSON.parse(response); + this.objectName = tempRes.objectName + this.addRealImg() + }else { // 上传文件后获取服务器返回的数据错误 + let tempRes = JSON.parse(response); + }}; + } else if (file && fileSize>shardSize && fileSize5MB时,分块上传 + let data = {filename: file.name} + this.isLoading = true + this.http.post(`/api/NewMultipartUpload/PlanPlatform/${this.companyId}/RealImgs`,{},{params:data}).subscribe((data:any)=>{ //初始化分段上传 + this.objectName = data.objectName + this.uploadId = data.uploadId + this.subsectionUploading() + }) + } + + } + + PartNumberETag:any=[]; //每次返回需要保存的信息 + //开始分段上传 + async subsectionUploading () { + let file = this.file || null //获取上传的文件 + let fileSize = file.size || null //上传文件的总大小 + let shardSize = 5 * 1024 * 1024 //5MB一个分片 + let allSlice = Math.ceil(fileSize / shardSize) //总文件/5MB===共分多少段 + + for (let i = 0;i < allSlice;i++) { //循环分段上传 + let start = i * shardSize //切割文件开始位置 + let end = Math.min(fileSize, start + shardSize); //切割文件结束位置 + let formData = new FormData() + formData.append("file",file.slice(start, end)) + + //同步写法实现异步调用 + let result = await new Promise((resolve, reject) => { + // await 需要后面返回一个 promise 对象 + this.http.post(`/api/MultipartUpload/PlanPlatform/${this.objectName}?uploadId=${this.uploadId}&partNumber=${i+1}`,formData).subscribe((data:any)=>{ + let msg = { + "partNumber":data.partNumber || null, + "eTag": data.eTag || null} + resolve(msg) // 调用 promise 内置方法处理成功 + }) + }); + this.PartNumberETag.push(result) + if (this.PartNumberETag.length === allSlice) {this.endUploading()} + }//for循环 + + } + + //完成分块上传 + endUploading () { + let data = this.PartNumberETag + let paramsData = {uploadId:this.uploadId} + this.http.post(`/api/CompleteMultipartUpload/PlanPlatform/${this.objectName}`,data,{params:paramsData}).subscribe(data=>{ + this.addRealImg() //上传完成后,发送请求创建实景图 + this.isLoading = false + this.uploader.clearQueue(); //清空input控件文件 + this.PartNumberETag =[] //清空保存返回的信息 + }) + } + + //上传图片成功后获取url地址发送请求创建实景图 + addRealImg () { + let data = { + name: this.file.name, + imageUrl:this.objectName, + realityImageGroupId: this.selectReal.id, + } + this.http.post('/api/RealityImages',data).subscribe(data=>{ + (document.getElementById('uploadFile')).value = null //清空input框缓存 + this.getAllRealPicture() + const config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.snackBar.open('图片上传成功','确定',config); + }) + } + + + + //批量下载↓ + //开始下载 + async batchDownload () { + if (this.downloadList.length) { //开始批量循环下载 + this.isLoading = true + for (let i=0;i{ + this.http.get(`/api/Objects/PlanPlatform/${this.downloadList[i].imageUrl}`,{responseType: 'blob'},).subscribe(data=>{ + let url = window.URL.createObjectURL(new Blob([data])); //createObjectURL创建一个下载Blob的url地址 + let link = document.createElement("a"); + link.style.display = "none"; + link.href = url; + link.setAttribute("download", this.downloadList[i].name); + document.body.appendChild(link); + link.click(); + result('success')}) + }) + if(i == this.downloadList.length-1) { //判断是否下载完毕 + this.isLoading = false + this.isDownload = false + this.allImages.forEach(element => {element.checked = false}); + this.downloadList = []} + + } //for循环 + } else { + const config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.snackBar.open('请选择图片','确定',config);} + } + + + + + +} + + + +//预览图片组件 +@Component({ + selector: 'app-previewImg', + templateUrl: './previewImg.html', + styleUrls: ['./realistic-picture.component.scss'] +}) +export class previewImg3 { + + constructor(private http:HttpClient,public dialog: MatDialog,public dialogRef: MatDialogRef, + @Inject(MAT_DIALOG_DATA) public data) { } + testSwiper: Swiper; + + ngOnInit(): void { + this.allImages = this.data.allImages + this.allImages.forEach(element => { + element.previewImageUrl = `/api/Objects/PlanPlatform/${element.imageUrl}?x-oss-process=image/auto-orient,1` //处理图片URL地址 + }); + } + + ngAfterViewInit() { + this.testSwiper = new Swiper('.swiper-container', { + lazy: true, + initialSlide: this.data.imgIndex, + direction: 'horizontal', + loop: false, + + + + // 如果需要前进后退按钮 + navigation: { + nextEl: '.swiper-button-next', + prevEl: '.swiper-button-prev', + } + }); + } + + allImages:any; //展示所有的图片 + rotationAngle:number=0; //旋转角度 + + //旋转图片 + rotate () { + this.rotationAngle = this.rotationAngle+90 + if (this.rotationAngle === 360) {this.rotationAngle = 0} + } + +} + + diff --git a/src/app/key-unit/realistic-picture/addRealPicture.html b/src/app/key-unit/realistic-picture/addRealPicture.html new file mode 100644 index 0000000..542256f --- /dev/null +++ b/src/app/key-unit/realistic-picture/addRealPicture.html @@ -0,0 +1,18 @@ +
    创建实景图分组
    +
    +
    + + + + + +
    + + +
    + +
    +
    \ No newline at end of file diff --git a/src/app/key-unit/realistic-picture/editRealPicture.html b/src/app/key-unit/realistic-picture/editRealPicture.html new file mode 100644 index 0000000..820857d --- /dev/null +++ b/src/app/key-unit/realistic-picture/editRealPicture.html @@ -0,0 +1,18 @@ +
    编辑实景图分组
    +
    +
    + + + + + +
    + + +
    + +
    +
    \ No newline at end of file diff --git a/src/app/key-unit/realistic-picture/previewImg.html b/src/app/key-unit/realistic-picture/previewImg.html new file mode 100644 index 0000000..1cde6b9 --- /dev/null +++ b/src/app/key-unit/realistic-picture/previewImg.html @@ -0,0 +1,17 @@ +
    图片详情
    +
    +
    +
    + +
    +
    +
    + + +
    +
    +
    + +
    + +
    \ No newline at end of file diff --git a/src/app/key-unit/realistic-picture/realistic-picture.component.html b/src/app/key-unit/realistic-picture/realistic-picture.component.html new file mode 100644 index 0000000..1f9fd76 --- /dev/null +++ b/src/app/key-unit/realistic-picture/realistic-picture.component.html @@ -0,0 +1,59 @@ +
    +
    +
    +
    + 实景图 + add_circle_outline + create + delete +
    +
    +
    +
    + folder{{item.name}} +
    +
    + 暂无数据 +
    +
    +
    + +
    +
    +
    + {{selectReal.name}} + + + + + *现为批量下载状态,如需预览图片,请关闭批量下载 +
    +
    + +
    +
    + +
    + check_circle +
    + + + 保存 + 删除 +
    + +

    暂无数据

    +
    + + +
    + +
    +
    diff --git a/src/app/key-unit/realistic-picture/realistic-picture.component.scss b/src/app/key-unit/realistic-picture/realistic-picture.component.scss new file mode 100644 index 0000000..cfbc003 --- /dev/null +++ b/src/app/key-unit/realistic-picture/realistic-picture.component.scss @@ -0,0 +1,174 @@ +.content { + margin: 0 0 0 10px; + width: 100%; + height: 90%; + overflow-y: auto; + display: flex; + .leftBox { + flex: 15%; + padding-top: 10px; + .bank { + display: flex; + padding-left: 10px; + .mat-icon {margin-right: 15px;} + } + } + .rightBox { + border-left: 1px solid #999; + flex: 85%; + display: flex; + flex-direction: column; + .topBox { + flex: 5%; padding: 10px; + display: flex; + :first-child {flex: 85%;}; + :last-child {flex: 15%;} + } + .bottomBox { + flex: 95%; + padding: 5px 0 0 25px; + overflow: auto; + .imgsBoxflex { + display: flex; + flex-direction: row; + flex-wrap: wrap; + } + } + } +} + +//icon统一样式 +.mat-icon { + cursor:pointer; + width: 18px; + height: 18px; + vertical-align:top; + margin-right: 10px; +} +.title {margin-right: 30px;font-weight: 500; font-size: 18px;} + +.material { + cursor:pointer; + height: 30px; + font-size: 16px; + margin-top: 10px; + padding-left: 15px; + span { + max-width: 200px; + display: inline-block; + overflow: hidden; + text-overflow:ellipsis; + white-space: nowrap; + } + .btn { + color: #FFC122; + } +} +.imgBox{ + width: 300px; + height: 200px; + margin: 0 35px 35px 0; + display: inline-block; + position: relative; + .fixedImg { + width: 100%; + height: 170px; + text-align: center; + margin-bottom: 3px; + img { + width: auto; + height: auto; + max-width: 100%; + height: 100%; + cursor:pointer; + } + } + input{ + font-size:12px; + width: 100px; + height:18px; + border-radius:3px; + border:1px solid #c8cccf; + outline:0; + text-align:left; + padding-left: 5px; + display:inline-block; + cursor: pointer;} + input::-webkit-input-placeholder{ + color: #986655; + font-size: 12px; + } + a {display: inline-block; + width: 45px; + height: 24px; + line-height: 24px; + text-align: center; + border-radius: 3px; + background-color: #2196F3; + font-size: 14px; + color: #fff;} +} +.uploadFileFixed { + position: relative; + .uploadFile { + opacity:0; + display: inline-block; + width: 88px; + height: 36px; + position: absolute; + top: 0px; + left: 0px; + } +} +//分页 +.mat-paginator { + background-color: rgba(255,255,255,0); + padding-right: 10%; +} +.isLoading{ + display: inline-block; + margin-left: 15px; + top: 8px; +} + +//左侧实景图文件样式 +.leftFile { + background-color: rgba(225,225,225,0.8); +} +//选中图片样式 +.selectImg { + -webkit-filter: drop-shadow(0px 0px 5px #000); + filter: drop-shadow(0px 0px 5px #000); + border: 1px solid red; +} +.checkedImg { + position: absolute; + top: 1px; + right: 1px; + color:#00FF00; + font-size: 30px; + z-index: 999; +} +//预览图片旋转角度 +.rotateA {transform: rotate(90deg) scale(0.75);} +.rotateB {transform: rotate(180deg)} +.rotateC {transform: rotate(270deg) scale(0.75);} + + + +//预览图片 +.previewImgBox { + width: 1500px; + height: 700px; + text-align: center; + img{ + width: auto; + height: auto; + max-width: 100%; + height: 100%;} +} +.previewImgBottom { + text-align: center; + height: 30px; + margin: 20px auto; +} diff --git a/src/app/key-unit/realistic-picture/realistic-picture.component.spec.ts b/src/app/key-unit/realistic-picture/realistic-picture.component.spec.ts new file mode 100644 index 0000000..05a064b --- /dev/null +++ b/src/app/key-unit/realistic-picture/realistic-picture.component.spec.ts @@ -0,0 +1,25 @@ +import { async, ComponentFixture, TestBed } from '@angular/core/testing'; + +import { RealisticPictureComponent } from './realistic-picture.component'; + +describe('RealisticPictureComponent', () => { + let component: RealisticPictureComponent; + let fixture: ComponentFixture; + + beforeEach(async(() => { + TestBed.configureTestingModule({ + declarations: [ RealisticPictureComponent ] + }) + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(RealisticPictureComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/key-unit/realistic-picture/realistic-picture.component.ts b/src/app/key-unit/realistic-picture/realistic-picture.component.ts new file mode 100644 index 0000000..ceb8c38 --- /dev/null +++ b/src/app/key-unit/realistic-picture/realistic-picture.component.ts @@ -0,0 +1,489 @@ +import { Component, OnInit, Inject, ViewChild } from '@angular/core'; +import { HttpClient } from '@angular/common/http'; +import { MatDialog, MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog'; +import { FileUploader } from 'ng2-file-upload'; +import { MatPaginator } from '@angular/material/paginator'; +import { MatSnackBar, MatSnackBarConfig } from '@angular/material/snack-bar'; +import Swiper from 'swiper'; +import { Router,ActivatedRoute } from '@angular/router' + +@Component({ + selector: 'app-realistic-picture', + templateUrl: './realistic-picture.component.html', + styleUrls: ['./realistic-picture.component.scss'] +}) +export class RealisticPictureComponent implements OnInit { + uploader:FileUploader = new FileUploader({ //初始化上传文件 + url: `/api/Objects/PlanPlatform/${this.route.snapshot.queryParams.id}/RealImgs`, + method: "POST", + itemAlias: "uploadedfile", + autoUpload: false, + removeAfterUpload:true, + }); + + constructor(private router:Router,private route:ActivatedRoute,private http:HttpClient,public dialog: MatDialog,public snackBar: MatSnackBar) { } + + ngOnInit(): void { + let companyId = this.route.snapshot.queryParams.id + this.http.get('/api/RealityImageGroups',{params:{ + companyId : companyId + }}).subscribe((data:any)=>{ + this.allRealPicture = data + this.selectReal = data[0] + this.getAllRealPicture() + }) + } + + companyId:any; //单位编号 + allRealPicture:any=[]; //所有实景图文件 + selectReal:any; //选中的实景图文件 + selectRealIndex:number=0; //选中的实景图文件下标 + allImages:any=[]; //实景图文件对应所有的实景图 + isDownload:boolean = false; //是否批量下载 + downloadList:any = []; //选中需要下载的图片 + + //分页 + @ViewChild(MatPaginator, {static: true}) + paginator: MatPaginator; + length:any; //共多少条数据 + pageSize:any = '12'; //每页条数 + pageSizeOptions: number[] = [12] //设置每页条数 + PageNumber:any; //第几页 + + //分页切换 + chagePage (e) { + this.PageNumber = e.pageIndex+1 + this.getAllRealPicture() + } + + //获取所有实景图分组 + getAllGrouping () { + let companyId = this.route.snapshot.queryParams.id + this.http.get('/api/RealityImageGroups',{params:{ + companyId : companyId + }}).subscribe((data:any)=>{ + this.allRealPicture = data + this.selectReal = data[this.selectRealIndex] + }) + } + + //获取实景图分组对应实景图 + getAllRealPicture () { + if (this.selectReal) { + let data ={ + groupId: this.selectReal.id, + PageNumber: this.PageNumber || 1, + pageSize: this.pageSize, + } + this.http.get('/api/RealityImages',{params:data}).subscribe((data:any)=>{ + this.allImages = data.items + this.length = data.totalCount + this.pageSize = data.pageSize + this.downloadList = [] + this.allImages.forEach(element => { //每张图片设置选中状态为false + element.newImageUrl = `/api/Objects/PlanPlatform/${element.imageUrl}?x-oss-process=image/resize,m_fill,h_170,w_299` //处理图片URL地址 + element.checked = false //图片是否选中布尔值 + element.nameStart = element.name.substring(0,element.name.lastIndexOf(".")); //图片名称前缀 + element.nameEnd = element.name.substring(element.name.lastIndexOf("."),element.name.length); //图片名称后缀 + }); + + }) + } + } + + //切换左侧实景图文件 + changeReal (e,index) { + if (this.selectRealIndex != index) { + this.selectReal = e + this.selectRealIndex = index + this.isDownload = false + this.downloadList = [] + this.getAllRealPicture() + } + } + + //选择批量下载 + download () { + this.isDownload = !this.isDownload + if (!this.isDownload) { //取消批量下载时数组清空 + this.allImages.forEach(element => {element.checked = false}); + this.downloadList = [] + } + } + + // 预览图片---批量选择图片 + operation (e,index) { + if (this.isDownload) { //批量选择图片 + e.checked = !e.checked + if (e.checked==true) {this.downloadList.push(e)} + else {this.downloadList.splice(this.downloadList.findIndex(item => item.id === e.id), 1)} + } else { //预览图片 + let data = { + allImages:this.allImages, + imgIndex: index} + let dialogRef = this.dialog.open(previewImg, + {width: '1600px', + height:'900px',data}); + dialogRef.afterClosed().subscribe(); + } + + } + + //新建实景图文件 + addReal () { + let dialogRef = this.dialog.open(addRealPicture); + dialogRef.afterClosed().subscribe(data=>{ + if (data) {this.getAllGrouping()} + }); + } + + //编辑实景图文件 + editReal () { + let data = this.selectReal + if (this.selectReal) { + let dialogRef = this.dialog.open(editRealPicture, {data}); + dialogRef.afterClosed().subscribe(data=>{ + if (data) {this.getAllGrouping()} + }); + } + } + + //删除实景图文件 + delete () { + let companyId = this.route.snapshot.queryParams.id + if (this.selectReal) { + let isDelete = confirm('您确定要删除吗') + if (isDelete) { + this.http.delete(`/api/RealityImageGroups/${this.selectReal.id}`).subscribe(data=>{ + this.http.get('/api/RealityImageGroups',{params:{ + companyId : companyId + }}).subscribe((data:any)=>{ + this.allRealPicture = data + this.selectReal = data[this.selectRealIndex] + this.allImages = [] + this.getAllRealPicture() + }) + }) + } + } + } + + + + //实景图修改 + preservationImg (e) { + let companyId = this.route.snapshot.queryParams.id + let data = { + id:e.id, + name:e.nameStart+e.nameEnd, + imageUrl:e.imageUrl, + realityImageGroupId:e.realityImageGroupId + } + this.http.put(`/api/RealityImages/${e.id}`,data,{params:{ + companyId : companyId + }}).subscribe(data=>{ + this.getAllRealPicture() + const config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.snackBar.open('图片修改成功','确定',config); + }) + } + + //实景图删除 + deleteImg (e) { + let isDelete = confirm('您确定要删除吗') + if (isDelete) { + this.http.delete(`/api/RealityImages/${e.id}`).subscribe(data=>{ + this.getAllRealPicture() + const config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.snackBar.open('图片删除成功','确定',config); + }) + this.http.delete(`/api/Objects/PlanPlatform/${e.imageUrl}`).subscribe(data=>{}) + } + } + + + + + + isLoading:boolean = false; //loading加载 + //上传文件↓ + file:any; //上传的文件 + objectName:any; //上传对象名 + uploadId:any; //上传分块上传事件编号 + + //change选择文件 + uploadFile (e) { + if (this.selectReal) { + this.file = e.target.files[0] || null //上传的文件 + let URL = window.URL.createObjectURL(this.file) + var img = new Image() + img.src = URL + let that = this + img.onload = function () { + if(img.width>=4096 || img.height>=5000 ){ + const config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + that.snackBar.open('请选择分辨率小于4096*5000的图片','确定',config); + that.uploader.clearQueue(); //清空input控件文件 + (document.getElementById('uploadFile')).value = null //清空input框缓存 + }else{ that.startUploading() } + } //onload + } else { + const config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.snackBar.open('请选择或创建实景图文件夹','确定',config); + this.uploader.clearQueue(); //清空input控件文件 + (document.getElementById('uploadFile')).value = null //清空input框缓存 + } + } + + //上传文件 + startUploading () { + let file = this.file || null //获取上传的文件 + let fileSize = file.size || null //上传文件的总大小 + let shardSize = 5 * 1024 * 1024 //5MB一个分片 + let maxdSize = 20 * 1024 * 1024 //限制20MB + + if (file && fileSize<=shardSize) { //上传文件<=5MB时 + this.uploader.queue[0].upload();//开始上传 + this.uploader.queue[0].onSuccess = (response, status, headers) => { + if (status == 201) { // 上传文件成功,上传文件后获取服务器返回的数据 + let tempRes = JSON.parse(response); + this.objectName = tempRes.objectName + this.addRealImg() + }else { // 上传文件后获取服务器返回的数据错误 + let tempRes = JSON.parse(response); + }}; + } else if (file && fileSize>shardSize && fileSize5MB时,分块上传 + let data = {filename: file.name} + this.isLoading = true + this.http.post(`/api/NewMultipartUpload/PlanPlatform/${this.companyId}/RealImgs`,{},{params:data}).subscribe((data:any)=>{ //初始化分段上传 + this.objectName = data.objectName + this.uploadId = data.uploadId + this.subsectionUploading() + }) + } + + } + + PartNumberETag:any=[]; //每次返回需要保存的信息 + //开始分段上传 + async subsectionUploading () { + let file = this.file || null //获取上传的文件 + let fileSize = file.size || null //上传文件的总大小 + let shardSize = 5 * 1024 * 1024 //5MB一个分片 + let allSlice = Math.ceil(fileSize / shardSize) //总文件/5MB===共分多少段 + + for (let i = 0;i < allSlice;i++) { //循环分段上传 + let start = i * shardSize //切割文件开始位置 + let end = Math.min(fileSize, start + shardSize); //切割文件结束位置 + let formData = new FormData() + formData.append("file",file.slice(start, end)) + + //同步写法实现异步调用 + let result = await new Promise((resolve, reject) => { + // await 需要后面返回一个 promise 对象 + this.http.post(`/api/MultipartUpload/PlanPlatform/${this.objectName}?uploadId=${this.uploadId}&partNumber=${i+1}`,formData).subscribe((data:any)=>{ + let msg = { + "partNumber":data.partNumber || null, + "eTag": data.eTag || null} + resolve(msg) // 调用 promise 内置方法处理成功 + }) + }); + this.PartNumberETag.push(result) + if (this.PartNumberETag.length === allSlice) {this.endUploading()} + }//for循环 + + } + + //完成分块上传 + endUploading () { + let data = this.PartNumberETag + let paramsData = {uploadId:this.uploadId} + this.http.post(`/api/CompleteMultipartUpload/PlanPlatform/${this.objectName}`,data,{params:paramsData}).subscribe(data=>{ + this.addRealImg() //上传完成后,发送请求创建实景图 + this.isLoading = false + this.uploader.clearQueue(); //清空input控件文件 + this.PartNumberETag =[] //清空保存返回的信息 + }) + } + + //上传图片成功后获取url地址发送请求创建实景图 + addRealImg () { + let companyId = this.route.snapshot.queryParams.id + let data = { + name: this.file.name, + imageUrl:this.objectName, + realityImageGroupId: this.selectReal.id, + } + this.http.post('/api/RealityImages',data,{params:{ + companyId : companyId + }}).subscribe(data=>{ + (document.getElementById('uploadFile')).value = null //清空input框缓存 + this.getAllRealPicture() + const config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.snackBar.open('图片上传成功','确定',config); + }) + } + + + + //批量下载↓ + //开始下载 + async batchDownload () { + if (this.downloadList.length) { //开始批量循环下载 + this.isLoading = true + for (let i=0;i{ + this.http.get(`/api/Objects/PlanPlatform/${this.downloadList[i].imageUrl}`,{responseType: 'blob'},).subscribe(data=>{ + let url = window.URL.createObjectURL(new Blob([data])); //createObjectURL创建一个下载Blob的url地址 + let link = document.createElement("a"); + link.style.display = "none"; + link.href = url; + link.setAttribute("download", this.downloadList[i].name); + document.body.appendChild(link); + link.click(); + result('success')}) + }) + if(i == this.downloadList.length-1) { //判断是否下载完毕 + this.isLoading = false + this.isDownload = false + this.allImages.forEach(element => {element.checked = false}); + this.downloadList = []} + + } //for循环 + } else { + const config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.snackBar.open('请选择图片','确定',config);} + } + + + + + +} + + + +//预览图片组件 +@Component({ + selector: 'app-previewImg', + templateUrl: './previewImg.html', + styleUrls: ['./realistic-picture.component.scss'] +}) +export class previewImg { + + constructor(private http:HttpClient,public dialog: MatDialog,public dialogRef: MatDialogRef, + @Inject(MAT_DIALOG_DATA) public data) { } + testSwiper: Swiper; + + ngOnInit(): void { + this.allImages = this.data.allImages + this.allImages.forEach(element => { + element.previewImageUrl = `/api/Objects/PlanPlatform/${element.imageUrl}?x-oss-process=image/auto-orient,1` //处理图片URL地址 + }); + } + + ngAfterViewInit() { + this.testSwiper = new Swiper('.swiper-container', { + lazy: true, + initialSlide: this.data.imgIndex, + direction: 'horizontal', + loop: false, + + + + // 如果需要前进后退按钮 + navigation: { + nextEl: '.swiper-button-next', + prevEl: '.swiper-button-prev', + } + }); + } + + allImages:any; //展示所有的图片 + rotationAngle:number=0; //旋转角度 + + //旋转图片 + rotate () { + this.rotationAngle = this.rotationAngle+90 + if (this.rotationAngle === 360) {this.rotationAngle = 0} + } + +} + + + +//新建实景图文件组件 +@Component({ + selector: 'app-addRealPicture', + templateUrl: './addRealPicture.html', + styleUrls: ['./realistic-picture.component.scss'] +}) +export class addRealPicture { + + constructor(private router:Router,private route:ActivatedRoute,private http:HttpClient,public dialog: MatDialog,public dialogRef: MatDialogRef) { } + + ngOnInit(): void { + this.companyId = sessionStorage.getItem('companyId') + } + + companyId:any; //单位编号 + + //提交表单 + onSubmit (e) { + let companyId = this.route.snapshot.queryParams.id + let data={ + name:e.name, + companyId:companyId + } + this.http.post('/api/RealityImageGroups',data).subscribe(data=>{ + this.dialogRef.close(data); + }) + } + +} + + + +//编辑实景图文件组件 +@Component({ + selector: 'app-editRealPicture', + templateUrl: './editRealPicture.html', + styleUrls: ['./realistic-picture.component.scss'] +}) +export class editRealPicture { + + constructor(private router:Router,private route:ActivatedRoute,private http:HttpClient,public dialog: MatDialog,public dialogRef: MatDialogRef, + @Inject(MAT_DIALOG_DATA) public data) { } + + ngOnInit(): void { + this.name = this.data.name + } + + name:any //实景图分组名称 + + //提交表单 + onSubmit (e) { + let companyId = this.route.snapshot.queryParams.id + let data = { + id:this.data.id, + name:e.name, + companyId:companyId + } + this.http.put(`/api/RealityImageGroups/${this.data.id}`,data).subscribe(data=>{ + this.dialogRef.close('success'); + }) + } + +} \ No newline at end of file diff --git a/src/app/key-unit/uploading-cad-look/editFile.html b/src/app/key-unit/uploading-cad-look/editFile.html new file mode 100644 index 0000000..952e763 --- /dev/null +++ b/src/app/key-unit/uploading-cad-look/editFile.html @@ -0,0 +1,17 @@ +
    编辑CAD图纸
    +
    +
    + + + +

    *注: XX建筑-XX系统-XX某层

    + +
    + + +
    +
    +
    \ No newline at end of file diff --git a/src/app/key-unit/uploading-cad-look/readFile.html b/src/app/key-unit/uploading-cad-look/readFile.html new file mode 100644 index 0000000..2a00f95 --- /dev/null +++ b/src/app/key-unit/uploading-cad-look/readFile.html @@ -0,0 +1,23 @@ +
    上传CAD图纸
    +
    +
    + + + +

    *注: XX建筑-XX系统-XX某层

    + +

    {{file.name}}

    + +
    + + +
    +
    +
    \ No newline at end of file diff --git a/src/app/key-unit/uploading-cad-look/uploading-cad.component.html b/src/app/key-unit/uploading-cad-look/uploading-cad.component.html new file mode 100644 index 0000000..166f0de --- /dev/null +++ b/src/app/key-unit/uploading-cad-look/uploading-cad.component.html @@ -0,0 +1,64 @@ +
    + + +
    + + 上传中... + +
    + +
    + + 下载中... + +
    + +
    + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + 名称 + insert_drive_file{{element.name}} + 时间 + {{element.creationTime|date:'yyyy-MM-dd'}} + 状态 + + + 大小 + {{element.fileLength}}MB +
    +

    暂无数据

    +
    diff --git a/src/app/key-unit/uploading-cad-look/uploading-cad.component.scss b/src/app/key-unit/uploading-cad-look/uploading-cad.component.scss new file mode 100644 index 0000000..d891399 --- /dev/null +++ b/src/app/key-unit/uploading-cad-look/uploading-cad.component.scss @@ -0,0 +1,60 @@ +.header { + margin: 10px; + .mat-raised-button { + margin-left: 15px; + } +} + +//icon统一样式 +.mat-icon { + cursor:pointer; + width: 24px; + height: 24px; + vertical-align:inherit; + margin-right: 5px; +} +//进度条 +.progressBox{ + position: relative; + display: inline-block; + width: 550px; +} +.progress{ + position: absolute; + width: 350px; + top: 18px; + left: 160px; +} + +table { + margin: 10px; + width: 100%; + text-align: center; + .cdk-header-cell { + text-align: center; + } +} + +//上传CAD弹窗 inputfile +.a-upload { + padding: 4px 10px; + height: 20px; + line-height: 20px; + position: relative; + cursor: pointer; + color: #888; + background: #fafafa; + border: 1px solid #ddd; + border-radius: 4px; + overflow: hidden; + display: inline-block; +} + +.a-upload input { + position: absolute; + width: 100%; + right: 0; + top: 0; + opacity: 0; + cursor: pointer +} \ No newline at end of file diff --git a/src/app/key-unit/uploading-cad-look/uploading-cad.component.ts b/src/app/key-unit/uploading-cad-look/uploading-cad.component.ts new file mode 100644 index 0000000..b39f5fc --- /dev/null +++ b/src/app/key-unit/uploading-cad-look/uploading-cad.component.ts @@ -0,0 +1,315 @@ +import { Component, OnInit, Inject } from '@angular/core'; +import { HttpClient, HttpHeaders } from '@angular/common/http'; +import { MatDialog, MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog'; +import { MatSnackBar, MatSnackBarConfig } from '@angular/material/snack-bar'; +import { ActivatedRoute } from '@angular/router'; + + + +@Component({ + selector: 'app-uploading-cad-look', + templateUrl: './uploading-cad.component.html', + styleUrls: ['./uploading-cad.component.scss'] +}) +export class UploadingCADLookComponent implements OnInit { + + constructor(private http:HttpClient,public dialog: MatDialog,public snackBar: MatSnackBar,private route:ActivatedRoute,) { } + + ngOnInit(): void { + this.companyId = this.route.snapshot.queryParams.id + this.getAllCAD() + } + + displayedColumns: string[] = ['checked', 'name', 'time', 'state','size']; + + companyId:any; //单位编号 + CADList:any=[]; //所有CAD图 + selectCAD:any = []; //选中的CAD图 + + //获取所有CAD图 + getAllCAD () { + let id = {companyId:this.route.snapshot.queryParams.id} + this.http.get('/api/CadData',{params:id}).subscribe(data=>{ + this.CADList = data + this.selectCAD = [] + this.CADList.forEach(element => { + element.loading = false + element.suffix = element.cadUrl.substring(element.cadUrl.lastIndexOf("."),element.cadUrl.length); //图名后缀 + element.fileLength = (element.fileLength/1024/1024).toFixed(2)}); + }) + } + + //change CAD图checked + checkedCAD (e,element) { + if (e.checked) { + this.selectCAD.push(element) + } else { + this.selectCAD.splice(this.selectCAD.findIndex(item => item.id === element.id), 1)} + } + + //打开上传文件窗口 + openReadFile() { + + } + + //打开编辑文件窗口 + editFile () { + + } + + //删除CAD图 + deleteCAD () { + if (this.selectCAD.length) { + let isDelete = confirm('您确定要删除吗') + let arr = [] + if (isDelete) { + this.selectCAD.forEach( async (element,index) => { + let result = await new Promise((result,reject)=>{ + this.http.delete(`/api/CadData/${element.id}`).subscribe(data=>{result(index)}) + this.http.delete(`/api/Objects/PlanPlatform/${element.cadUrl}`).subscribe(data=>{}) + }) + arr.push(result) + if (arr.length == this.selectCAD.length) { + this.getAllCAD() + const config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.snackBar.open('删除CAD图纸成功','确定',config);} + }); + } + } else { + const config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.snackBar.open('请选择CAD图纸','确定',config); + } + } + + + + + + //上传文件↓ + file:any; //上传的文件 + fileName:any; //上传文件name + uploadisLoading:boolean = false; //进度条loading加载 + uploadProgress:number=0; //进度条进度 + objectName:any; //上传对象名 + uploadId:any; //上传分块上传事件编号 + + //上传文件 + startUploading () { + let file = this.file || null //获取上传的文件 + let fileSize = file.size || null //上传文件的总大小 + let shardSize = 5 * 1024 * 1024 //5MB一个分片 + + if (file && fileSize<=shardSize) { //上传文件<=5MB时 + let formData = new FormData() + formData.append("file",file) + this.http.post(`/api/Objects/PlanPlatform/${this.companyId}/CAD`,formData).subscribe((data:any)=>{ + this.objectName = data.objectName + this.addCADData() + }) + } else if (file && fileSize>shardSize) { //上传文件>5MB时,分块上传 + let data = {filename: file.name} + this.uploadisLoading = true + this.http.post(`/api/NewMultipartUpload/PlanPlatform/${this.companyId}/CAD`,{},{params:data}).subscribe((data:any)=>{ //初始化分段上传 + this.objectName = data.objectName + this.uploadId = data.uploadId + this.subsectionUploading() + }) + } + + } + + PartNumberETag:any=[]; //每次返回需要保存的信息 + //开始分段上传 + async subsectionUploading () { + let file = this.file || null //获取上传的文件 + let fileSize = file.size || null //上传文件的总大小 + let shardSize = 5 * 1024 * 1024 //5MB一个分片 + let allSlice = Math.ceil(fileSize / shardSize) //总文件/5MB===共分多少段 + + for (let i = 0;i < allSlice;i++) { //循环分段上传 + let start = i * shardSize //切割文件开始位置 + let end = Math.min(fileSize, start + shardSize); //切割文件结束位置 + let formData = new FormData() + formData.append("file",file.slice(start, end)) + + //同步写法实现异步调用 + let result = await new Promise((resolve, reject) => { + // await 需要后面返回一个 promise 对象 + this.http.post(`/api/MultipartUpload/PlanPlatform/${this.objectName}?uploadId=${this.uploadId}&partNumber=${i+1}`,formData).subscribe((data:any)=>{ + let msg = { + "partNumber":data.partNumber || null, + "eTag": data.eTag || null} + resolve(msg) // 调用 promise 内置方法处理成功 + }) + }); + this.PartNumberETag.push(result) + this.uploadProgress = Number((i/allSlice).toFixed(2))*100 + + if (this.PartNumberETag.length === allSlice) { + this.uploadProgress = 100 + this.endUploading()} + }//for循环 + + } + + //完成分块上传 + endUploading () { + let data = this.PartNumberETag + let paramsData = {uploadId:this.uploadId} + this.http.post(`/api/CompleteMultipartUpload/PlanPlatform/${this.objectName}`,data,{params:paramsData}).subscribe(data=>{ + this.addCADData() + this.uploadProgress = 0; + this.uploadisLoading = false + this.PartNumberETag =[] //清空保存返回的信息 + }) + } + + //取消分块上传 + cancel () { + this.http.delete(`/api/MultipartUpload/PlanPlatform/${this.objectName}?uploadId=${this.uploadId}`).subscribe(data=>{ + this.uploadProgress = 0; + this.uploadisLoading= false + this.PartNumberETag =[] //清空保存返回的信息 + const config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.snackBar.open('取消上传成功!','确定',config); + }) + } + + //上传成功创建CAD + addCADData () { + let data = { + name: this.fileName, + cadUrl: this.objectName, + fileLength: this.file.size, + creationTime: new Date(), + companyId: this.companyId + } + this.http.post('/api/CadData',data).subscribe(data=>{ + this.getAllCAD() + }) + } + + + + + + //下载↓ + selectDownloadFile:any; //选择下载的文件 + download:any; //下载文件元数据 + downloadisLoading:boolean = false; //进度条loading加载 + downloadProgress:number=0; //进度条进度 + + //读取下载文件信息 + readFile () { + if (this.selectCAD.length===1) { + this.selectDownloadFile = this.selectCAD[0] + this.http.get('/api/ObjectMetadata/PlanPlatform/'+this.selectDownloadFile.cadUrl).subscribe(data=>{ + this.download = data + this.downloadFile() + }) + } else if (this.selectCAD.length>1) { + const config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.snackBar.open('暂时不支持批量下载','确定',config) + } else if (!this.selectCAD.length) { + const config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.snackBar.open('请选择CAD图纸','确定',config); + } + } + + //初始化下载 + downloadFile () { + let file = this.download + let fileSize = file.fileLength//下载文件的总大小 + let shardSize = 10 * 1024 * 1024 //文件大小是否大于10MB + + if (file && fileSize<=shardSize) { //<=10MB时直接下载 + this.downloadisLoading = true + this.setFileLoading() + this.http.get(`/api/Objects/PlanPlatform/${file.objectName}`,{responseType: 'blob'},).subscribe(data=>{ + + let url = window.URL.createObjectURL(new Blob([data])); //createObjectURL创建一个下载Blob的url地址 + let link = document.createElement("a"); + link.style.display = "none"; + link.href = url; + link.setAttribute("download", this.selectDownloadFile.name+this.selectDownloadFile.suffix); + document.body.appendChild(link); + link.click(); + this.downloadisLoading = false + this.setFileLoading() + }) + } else if (file && fileSize>shardSize) { //>10MB时分块下载 + this.blockingDownload() //分段下载 + this.downloadisLoading = true + this.setFileLoading() + } + + } + + //分段下载并合并 + async blockingDownload () { + let file = this.download + let fileSize = file.fileLength //下载文件的总大小 + let shardSize = 3 * 1024 * 1024 //3MB一个分片 + let allSlice = Math.ceil(fileSize / shardSize) //总文件/3MB===共分多少段 + let allFile:any = [] //所有的file分段 + + for (let i=0;i{ + this.http.get(`/api/Objects/PlanPlatform/${file.objectName}`,{headers:{'range':`bytes= ${start}-${end}`},responseType:'blob'}).subscribe(data=>{ + result(data) }) + }) + allFile.push(result) + this.downloadProgress = Number((i/allSlice).toFixed(2))*100 + + if (allFile.length === allSlice) { //合并文件输出给浏览器 + let url = window.URL.createObjectURL(new Blob(allFile)); //createObjectURL创建一个下载Blob的url地址 + let link = document.createElement("a"); + link.style.display = "none"; + link.href = url; + link.setAttribute("download", this.selectDownloadFile.name+this.selectDownloadFile.suffix); + document.body.appendChild(link); + link.click(); + this.downloadProgress = 0 + this.downloadisLoading = false + this.setFileLoading() + } + + } //for循环 + + } + + //取消分块下载 + cancelDowload () { + + } + + //封装函数设置当前文件loading状态 + setFileLoading () { + let id = this.selectDownloadFile.id + this.CADList.forEach(element => { + if (element.id === id) { element.loading = !element.loading } + }); + } + + + + + +} + + + + diff --git a/src/app/key-unit/uploading-cad/editFile.html b/src/app/key-unit/uploading-cad/editFile.html new file mode 100644 index 0000000..952e763 --- /dev/null +++ b/src/app/key-unit/uploading-cad/editFile.html @@ -0,0 +1,17 @@ +
    编辑CAD图纸
    +
    +
    + + + +

    *注: XX建筑-XX系统-XX某层

    + +
    + + +
    +
    +
    \ No newline at end of file diff --git a/src/app/key-unit/uploading-cad/readFile.html b/src/app/key-unit/uploading-cad/readFile.html new file mode 100644 index 0000000..2a00f95 --- /dev/null +++ b/src/app/key-unit/uploading-cad/readFile.html @@ -0,0 +1,23 @@ +
    上传CAD图纸
    +
    +
    + + + +

    *注: XX建筑-XX系统-XX某层

    + +

    {{file.name}}

    + +
    + + +
    +
    +
    \ No newline at end of file diff --git a/src/app/key-unit/uploading-cad/uploading-cad.component.html b/src/app/key-unit/uploading-cad/uploading-cad.component.html new file mode 100644 index 0000000..6909127 --- /dev/null +++ b/src/app/key-unit/uploading-cad/uploading-cad.component.html @@ -0,0 +1,64 @@ +
    + + + + + +
    + + 上传中... + +
    + +
    + + 下载中... + +
    + +
    + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + 名称 + insert_drive_file{{element.name}} + 时间 + {{element.creationTime|date:'yyyy-MM-dd'}} + 状态 + + + 大小 + {{element.fileLength}}MB +
    +

    暂无数据

    +
    diff --git a/src/app/key-unit/uploading-cad/uploading-cad.component.scss b/src/app/key-unit/uploading-cad/uploading-cad.component.scss new file mode 100644 index 0000000..d891399 --- /dev/null +++ b/src/app/key-unit/uploading-cad/uploading-cad.component.scss @@ -0,0 +1,60 @@ +.header { + margin: 10px; + .mat-raised-button { + margin-left: 15px; + } +} + +//icon统一样式 +.mat-icon { + cursor:pointer; + width: 24px; + height: 24px; + vertical-align:inherit; + margin-right: 5px; +} +//进度条 +.progressBox{ + position: relative; + display: inline-block; + width: 550px; +} +.progress{ + position: absolute; + width: 350px; + top: 18px; + left: 160px; +} + +table { + margin: 10px; + width: 100%; + text-align: center; + .cdk-header-cell { + text-align: center; + } +} + +//上传CAD弹窗 inputfile +.a-upload { + padding: 4px 10px; + height: 20px; + line-height: 20px; + position: relative; + cursor: pointer; + color: #888; + background: #fafafa; + border: 1px solid #ddd; + border-radius: 4px; + overflow: hidden; + display: inline-block; +} + +.a-upload input { + position: absolute; + width: 100%; + right: 0; + top: 0; + opacity: 0; + cursor: pointer +} \ No newline at end of file diff --git a/src/app/key-unit/uploading-cad/uploading-cad.component.spec.ts b/src/app/key-unit/uploading-cad/uploading-cad.component.spec.ts new file mode 100644 index 0000000..9673750 --- /dev/null +++ b/src/app/key-unit/uploading-cad/uploading-cad.component.spec.ts @@ -0,0 +1,25 @@ +import { async, ComponentFixture, TestBed } from '@angular/core/testing'; + +import { UploadingCADComponent } from './uploading-cad.component'; + +describe('UploadingCADComponent', () => { + let component: UploadingCADComponent; + let fixture: ComponentFixture; + + beforeEach(async(() => { + TestBed.configureTestingModule({ + declarations: [ UploadingCADComponent ] + }) + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(UploadingCADComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/key-unit/uploading-cad/uploading-cad.component.ts b/src/app/key-unit/uploading-cad/uploading-cad.component.ts new file mode 100644 index 0000000..472c962 --- /dev/null +++ b/src/app/key-unit/uploading-cad/uploading-cad.component.ts @@ -0,0 +1,409 @@ +import { Component, OnInit, Inject } from '@angular/core'; +import { HttpClient, HttpHeaders } from '@angular/common/http'; +import { MatDialog, MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog'; +import { MatSnackBar, MatSnackBarConfig } from '@angular/material/snack-bar'; +import { ActivatedRoute } from '@angular/router'; + + + +@Component({ + selector: 'app-uploading-cad', + templateUrl: './uploading-cad.component.html', + styleUrls: ['./uploading-cad.component.scss'] +}) +export class UploadingCADComponent implements OnInit { + + constructor(private http:HttpClient,public dialog: MatDialog,public snackBar: MatSnackBar,private route:ActivatedRoute,) { } + + ngOnInit(): void { + this.companyId = this.route.snapshot.queryParams.id + this.getAllCAD() + } + + displayedColumns: string[] = ['checked', 'name', 'time', 'state','size']; + + companyId:any; //单位编号 + CADList:any=[]; //所有CAD图 + selectCAD:any = []; //选中的CAD图 + + //获取所有CAD图 + getAllCAD () { + let id = {companyId:this.route.snapshot.queryParams.id} + this.http.get('/api/CadData',{params:id}).subscribe(data=>{ + this.CADList = data + this.selectCAD = [] + this.CADList.forEach(element => { + element.loading = false + element.suffix = element.cadUrl.substring(element.cadUrl.lastIndexOf("."),element.cadUrl.length); //图名后缀 + element.fileLength = (element.fileLength/1024/1024).toFixed(2)}); + }) + } + + //change CAD图checked + checkedCAD (e,element) { + if (e.checked) { + this.selectCAD.push(element) + } else { + this.selectCAD.splice(this.selectCAD.findIndex(item => item.id === element.id), 1)} + } + + //打开上传文件窗口 + openReadFile() { + let dialogRef = this.dialog.open(readFile); + dialogRef.afterClosed().subscribe(data=>{ + if (data) { + this.file = data.file + this.fileName = data.name + this.startUploading()} //开始上传 + }); + } + + //打开编辑文件窗口 + editFile () { + if (this.selectCAD.length===1) { + let data = this.selectCAD[0] + let dialogRef = this.dialog.open(editFile,{data}); + dialogRef.afterClosed().subscribe(data=>{ + if (data) {this.getAllCAD()} + }); + } else if (this.selectCAD.length>1) { + const config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.snackBar.open('不支持批量编辑','确定',config); + }else if (!this.selectCAD.length) { + const config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.snackBar.open('请选择CAD图纸','确定',config); + } + } + + //删除CAD图 + deleteCAD () { + if (this.selectCAD.length) { + let isDelete = confirm('您确定要删除吗') + let arr = [] + if (isDelete) { + this.selectCAD.forEach( async (element,index) => { + let result = await new Promise((result,reject)=>{ + this.http.delete(`/api/CadData/${element.id}`).subscribe(data=>{result(index)}) + this.http.delete(`/api/Objects/PlanPlatform/${element.cadUrl}`).subscribe(data=>{}) + }) + arr.push(result) + if (arr.length == this.selectCAD.length) { + this.getAllCAD() + const config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.snackBar.open('删除CAD图纸成功','确定',config);} + }); + } + } else { + const config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.snackBar.open('请选择CAD图纸','确定',config); + } + } + + + + + + //上传文件↓ + file:any; //上传的文件 + fileName:any; //上传文件name + uploadisLoading:boolean = false; //进度条loading加载 + uploadProgress:number=0; //进度条进度 + objectName:any; //上传对象名 + uploadId:any; //上传分块上传事件编号 + + //上传文件 + startUploading () { + let file = this.file || null //获取上传的文件 + let fileSize = file.size || null //上传文件的总大小 + let shardSize = 5 * 1024 * 1024 //5MB一个分片 + + if (file && fileSize<=shardSize) { //上传文件<=5MB时 + let formData = new FormData() + formData.append("file",file) + this.http.post(`/api/Objects/PlanPlatform/${this.companyId}/CAD`,formData).subscribe((data:any)=>{ + this.objectName = data.objectName + this.addCADData() + }) + } else if (file && fileSize>shardSize) { //上传文件>5MB时,分块上传 + let data = {filename: file.name} + this.uploadisLoading = true + this.http.post(`/api/NewMultipartUpload/PlanPlatform/${this.companyId}/CAD`,{},{params:data}).subscribe((data:any)=>{ //初始化分段上传 + this.objectName = data.objectName + this.uploadId = data.uploadId + this.subsectionUploading() + }) + } + + } + + PartNumberETag:any=[]; //每次返回需要保存的信息 + //开始分段上传 + async subsectionUploading () { + let file = this.file || null //获取上传的文件 + let fileSize = file.size || null //上传文件的总大小 + let shardSize = 5 * 1024 * 1024 //5MB一个分片 + let allSlice = Math.ceil(fileSize / shardSize) //总文件/5MB===共分多少段 + + for (let i = 0;i < allSlice;i++) { //循环分段上传 + let start = i * shardSize //切割文件开始位置 + let end = Math.min(fileSize, start + shardSize); //切割文件结束位置 + let formData = new FormData() + formData.append("file",file.slice(start, end)) + + //同步写法实现异步调用 + let result = await new Promise((resolve, reject) => { + // await 需要后面返回一个 promise 对象 + this.http.post(`/api/MultipartUpload/PlanPlatform/${this.objectName}?uploadId=${this.uploadId}&partNumber=${i+1}`,formData).subscribe((data:any)=>{ + let msg = { + "partNumber":data.partNumber || null, + "eTag": data.eTag || null} + resolve(msg) // 调用 promise 内置方法处理成功 + }) + }); + this.PartNumberETag.push(result) + this.uploadProgress = Number((i/allSlice).toFixed(2))*100 + + if (this.PartNumberETag.length === allSlice) { + this.uploadProgress = 100 + this.endUploading()} + }//for循环 + + } + + //完成分块上传 + endUploading () { + let data = this.PartNumberETag + let paramsData = {uploadId:this.uploadId} + this.http.post(`/api/CompleteMultipartUpload/PlanPlatform/${this.objectName}`,data,{params:paramsData}).subscribe(data=>{ + this.addCADData() + this.uploadProgress = 0; + this.uploadisLoading = false + this.PartNumberETag =[] //清空保存返回的信息 + }) + } + + //取消分块上传 + cancel () { + this.http.delete(`/api/MultipartUpload/PlanPlatform/${this.objectName}?uploadId=${this.uploadId}`).subscribe(data=>{ + this.uploadProgress = 0; + this.uploadisLoading= false + this.PartNumberETag =[] //清空保存返回的信息 + const config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.snackBar.open('取消上传成功!','确定',config); + }) + } + + //上传成功创建CAD + addCADData () { + let data = { + name: this.fileName, + cadUrl: this.objectName, + fileLength: this.file.size, + creationTime: new Date(), + companyId: this.companyId + } + this.http.post('/api/CadData',data).subscribe(data=>{ + this.getAllCAD() + }) + } + + + + + + //下载↓ + selectDownloadFile:any; //选择下载的文件 + download:any; //下载文件元数据 + downloadisLoading:boolean = false; //进度条loading加载 + downloadProgress:number=0; //进度条进度 + + //读取下载文件信息 + readFile () { + if (this.selectCAD.length===1) { + this.selectDownloadFile = this.selectCAD[0] + this.http.get('/api/ObjectMetadata/PlanPlatform/'+this.selectDownloadFile.cadUrl).subscribe(data=>{ + this.download = data + this.downloadFile() + }) + } else if (this.selectCAD.length>1) { + const config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.snackBar.open('暂时不支持批量下载','确定',config) + } else if (!this.selectCAD.length) { + const config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.snackBar.open('请选择CAD图纸','确定',config); + } + } + + //初始化下载 + downloadFile () { + let file = this.download + let fileSize = file.fileLength//下载文件的总大小 + let shardSize = 10 * 1024 * 1024 //文件大小是否大于10MB + + if (file && fileSize<=shardSize) { //<=10MB时直接下载 + this.downloadisLoading = true + this.setFileLoading() + this.http.get(`/api/Objects/PlanPlatform/${file.objectName}`,{responseType: 'blob'},).subscribe(data=>{ + + let url = window.URL.createObjectURL(new Blob([data])); //createObjectURL创建一个下载Blob的url地址 + let link = document.createElement("a"); + link.style.display = "none"; + link.href = url; + link.setAttribute("download", this.selectDownloadFile.name+this.selectDownloadFile.suffix); + document.body.appendChild(link); + link.click(); + this.downloadisLoading = false + this.setFileLoading() + }) + } else if (file && fileSize>shardSize) { //>10MB时分块下载 + this.blockingDownload() //分段下载 + this.downloadisLoading = true + this.setFileLoading() + } + + } + + //分段下载并合并 + async blockingDownload () { + let file = this.download + let fileSize = file.fileLength //下载文件的总大小 + let shardSize = 3 * 1024 * 1024 //3MB一个分片 + let allSlice = Math.ceil(fileSize / shardSize) //总文件/3MB===共分多少段 + let allFile:any = [] //所有的file分段 + + for (let i=0;i{ + this.http.get(`/api/Objects/PlanPlatform/${file.objectName}`,{headers:{'range':`bytes= ${start}-${end}`},responseType:'blob'}).subscribe(data=>{ + result(data) }) + }) + allFile.push(result) + this.downloadProgress = Number((i/allSlice).toFixed(2))*100 + + if (allFile.length === allSlice) { //合并文件输出给浏览器 + let url = window.URL.createObjectURL(new Blob(allFile)); //createObjectURL创建一个下载Blob的url地址 + let link = document.createElement("a"); + link.style.display = "none"; + link.href = url; + link.setAttribute("download", this.selectDownloadFile.name+this.selectDownloadFile.suffix); + document.body.appendChild(link); + link.click(); + this.downloadProgress = 0 + this.downloadisLoading = false + this.setFileLoading() + } + + } //for循环 + + } + + //取消分块下载 + cancelDowload () { + + } + + //封装函数设置当前文件loading状态 + setFileLoading () { + let id = this.selectDownloadFile.id + this.CADList.forEach(element => { + if (element.id === id) { element.loading = !element.loading } + }); + } + + + + + +} + + + +//创建文件弹窗组件 +@Component({ + selector: 'app-readFile', + templateUrl: './readFile.html', + styleUrls: ['./uploading-cad.component.scss'] +}) +export class readFile { + + constructor(private http:HttpClient,public dialog: MatDialog,public dialogRef: MatDialogRef, + @Inject(MAT_DIALOG_DATA) public data,public snackBar: MatSnackBar) { } + + ngOnInit(): void { + + } + + file:any; //上传的文件 + + //input file 选择文件 + selectFile (e) { + this.file = e.target.files[0] || null //上传的文件 + } + + //提交表单上传 + onSubmit (e) { + if (this.file) { + let data = { + name:e.name, + file: this.file} + this.dialogRef.close(data); + } else { + const config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.snackBar.open('请选择CAD图纸','确定',config); + } + } + + + +} + + + +//编辑文件弹窗组件 +@Component({ + selector: 'app-editFile', + templateUrl: './editFile.html', + styleUrls: ['./uploading-cad.component.scss'] +}) +export class editFile { + + constructor(private http:HttpClient,public dialog: MatDialog,public dialogRef: MatDialogRef, + @Inject(MAT_DIALOG_DATA) public data) { } + + ngOnInit(): void { + this.CADname = this.data.name + } + + CADname:any; //name + + //提交表单保存 + onSubmit (e) { + let headers = new HttpHeaders({'Content-Type': 'text/json'}); + let options = {headers}; + this.http.put(`/api/CadData/${this.data.id}`,JSON.stringify(e.name),options).subscribe(data=>{ + this.dialogRef.close('success'); + }) + } + + + +} + diff --git a/src/app/key-unit/view-unit-details-plan/view-unit-details-plan.component.html b/src/app/key-unit/view-unit-details-plan/view-unit-details-plan.component.html new file mode 100644 index 0000000..da9df8b --- /dev/null +++ b/src/app/key-unit/view-unit-details-plan/view-unit-details-plan.component.html @@ -0,0 +1,53 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 功能开发中~~ + + + + + 功能开发中~~ + + + + + + + + + diff --git a/src/app/key-unit/view-unit-details-plan/view-unit-details-plan.component.scss b/src/app/key-unit/view-unit-details-plan/view-unit-details-plan.component.scss new file mode 100644 index 0000000..740a835 --- /dev/null +++ b/src/app/key-unit/view-unit-details-plan/view-unit-details-plan.component.scss @@ -0,0 +1,3 @@ +.mat-tab-body-wrapper{ + height: 100%!important; +} \ No newline at end of file diff --git a/src/app/key-unit/view-unit-details-plan/view-unit-details-plan.component.spec.ts b/src/app/key-unit/view-unit-details-plan/view-unit-details-plan.component.spec.ts new file mode 100644 index 0000000..760288a --- /dev/null +++ b/src/app/key-unit/view-unit-details-plan/view-unit-details-plan.component.spec.ts @@ -0,0 +1,25 @@ +import { async, ComponentFixture, TestBed } from '@angular/core/testing'; + +import { ViewUnitDetailsPlanComponent } from './view-unit-details-plan.component'; + +describe('ViewUnitDetailsPlanComponent', () => { + let component: ViewUnitDetailsPlanComponent; + let fixture: ComponentFixture; + + beforeEach(async(() => { + TestBed.configureTestingModule({ + declarations: [ ViewUnitDetailsPlanComponent ] + }) + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(ViewUnitDetailsPlanComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/key-unit/view-unit-details-plan/view-unit-details-plan.component.ts b/src/app/key-unit/view-unit-details-plan/view-unit-details-plan.component.ts new file mode 100644 index 0000000..50148f9 --- /dev/null +++ b/src/app/key-unit/view-unit-details-plan/view-unit-details-plan.component.ts @@ -0,0 +1,15 @@ +import { Component, OnInit } from '@angular/core'; + +@Component({ + selector: 'app-view-unit-details-plan', + templateUrl: './view-unit-details-plan.component.html', + styleUrls: ['./view-unit-details-plan.component.scss'] +}) +export class ViewUnitDetailsPlanComponent implements OnInit { + + constructor() { } + + ngOnInit(): void { + } + +} diff --git a/src/app/key-unit/view-unit-details/view-unit-details.component.html b/src/app/key-unit/view-unit-details/view-unit-details.component.html new file mode 100644 index 0000000..8be167f --- /dev/null +++ b/src/app/key-unit/view-unit-details/view-unit-details.component.html @@ -0,0 +1,53 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 功能开发中~~ + + + + + 功能开发中~~ + + + + diff --git a/src/app/key-unit/view-unit-details/view-unit-details.component.scss b/src/app/key-unit/view-unit-details/view-unit-details.component.scss new file mode 100644 index 0000000..740a835 --- /dev/null +++ b/src/app/key-unit/view-unit-details/view-unit-details.component.scss @@ -0,0 +1,3 @@ +.mat-tab-body-wrapper{ + height: 100%!important; +} \ No newline at end of file diff --git a/src/app/key-unit/view-unit-details/view-unit-details.component.spec.ts b/src/app/key-unit/view-unit-details/view-unit-details.component.spec.ts new file mode 100644 index 0000000..0d4ac7c --- /dev/null +++ b/src/app/key-unit/view-unit-details/view-unit-details.component.spec.ts @@ -0,0 +1,25 @@ +import { async, ComponentFixture, TestBed } from '@angular/core/testing'; + +import { ViewUnitDetailsComponent } from './view-unit-details.component'; + +describe('ViewUnitDetailsComponent', () => { + let component: ViewUnitDetailsComponent; + let fixture: ComponentFixture; + + beforeEach(async(() => { + TestBed.configureTestingModule({ + declarations: [ ViewUnitDetailsComponent ] + }) + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(ViewUnitDetailsComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/key-unit/view-unit-details/view-unit-details.component.ts b/src/app/key-unit/view-unit-details/view-unit-details.component.ts new file mode 100644 index 0000000..f222e56 --- /dev/null +++ b/src/app/key-unit/view-unit-details/view-unit-details.component.ts @@ -0,0 +1,15 @@ +import { Component, OnInit } from '@angular/core'; + +@Component({ + selector: 'app-view-unit-details', + templateUrl: './view-unit-details.component.html', + styleUrls: ['./view-unit-details.component.scss'] +}) +export class ViewUnitDetailsComponent implements OnInit { + + constructor() { } + + ngOnInit(): void { + } + +} diff --git a/src/app/m-token-k1/m-token-k1.component.html b/src/app/m-token-k1/m-token-k1.component.html new file mode 100644 index 0000000..bcc50be --- /dev/null +++ b/src/app/m-token-k1/m-token-k1.component.html @@ -0,0 +1,6 @@ + + + +
    + +
    \ No newline at end of file diff --git a/src/app/m-token-k1/m-token-k1.component.scss b/src/app/m-token-k1/m-token-k1.component.scss new file mode 100644 index 0000000..e98ef28 --- /dev/null +++ b/src/app/m-token-k1/m-token-k1.component.scss @@ -0,0 +1,3 @@ +.count-down { + font-size: 50px; +} \ No newline at end of file diff --git a/src/app/m-token-k1/m-token-k1.component.spec.ts b/src/app/m-token-k1/m-token-k1.component.spec.ts new file mode 100644 index 0000000..5731f4e --- /dev/null +++ b/src/app/m-token-k1/m-token-k1.component.spec.ts @@ -0,0 +1,25 @@ +import { async, ComponentFixture, TestBed } from '@angular/core/testing'; + +import { MTokenK1Component } from './m-token-k1.component'; + +describe('MTokenK1Component', () => { + let component: MTokenK1Component; + let fixture: ComponentFixture; + + beforeEach(async(() => { + TestBed.configureTestingModule({ + declarations: [ MTokenK1Component ] + }) + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(MTokenK1Component); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/m-token-k1/m-token-k1.component.ts b/src/app/m-token-k1/m-token-k1.component.ts new file mode 100644 index 0000000..592ed9b --- /dev/null +++ b/src/app/m-token-k1/m-token-k1.component.ts @@ -0,0 +1,100 @@ +import { Component, OnInit, Injectable } from '@angular/core'; +import { CanActivate, ActivatedRouteSnapshot, RouterStateSnapshot, Router } from '@angular/router'; +import { MatSnackBar, MatSnackBarConfig } from '@angular/material/snack-bar'; +import {MTokenK1Service} from './m-token-k1.service' //引入服务 +declare var mToken : any; + + + +@Injectable({ + providedIn: 'root' +}) +@Component({ + selector: 'app-m-token-k1', + templateUrl: './m-token-k1.component.html', + styleUrls: ['./m-token-k1.component.scss'] +}) +export class MTokenK1Component implements OnInit { + + constructor(private router: Router,public snackBar: MatSnackBar,public mTokenK1: MTokenK1Service) { } + + ngOnInit(): void { + + } + + // 路由守卫 + canActivate(next: ActivatedRouteSnapshot, state: RouterStateSnapshot): boolean { + return this.checkKey(); + } + + K1mToken = new mToken("mTokenPlugin") + keyBase64 = '5YyX5Lqs5a6J5L+h4oCU5LqM57u06aKE5qGI57yW5Yi25bel5YW3d2Vi'; //秘钥验证base64字符 + password='12345678'; //秘钥验证用户密码 + + + + checkKey(): boolean { + this.K1mToken.LoadLibrary() + + try { //try 捕获错误 + let keyIndex = this.K1mToken.K1_mTokenFindDevice() //查找秘钥是否插入 + + if (keyIndex > 0) { //秘钥已插入 + let keyUID = this.K1mToken.K1_mTokenGetUID(keyIndex) //读取秘钥UID + let isLogin = this.K1mToken.K1_mTokenOpen(keyUID,this.password) + + if (isLogin == 0 ) { //密码验证成功 + let keyMSG = window.atob( this.K1mToken.K1_mTokenReadUserStorage(keyUID,0,56) ) + + if (keyMSG==this.keyBase64) { //base64转码 验证 + const config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.snackBar.open('密钥验证成功','确定',config); + this.mTokenK1.startUp() //开始定时验证秘钥是否拔出 + return true + } else { //base64验证失败 + const config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 5000 + this.snackBar.open('密钥错误,不为本公司发放密钥','确定',config); + this.router.navigate(['/getNoMToken']) + return false + } + } else { //密码验证失败 + const config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 5000 + this.snackBar.open('密钥密码错误,请使用初始密码','确定',config); + this.router.navigate(['/getNoMToken']) + return false + } + + } else { //秘钥未插入 + const config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 5000 + this.snackBar.open('密钥未插入','确定',config); + this.router.navigate(['/getNoMToken']) + return false + } + + } catch (error) { + const config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 5000 + this.snackBar.open('请检查您密钥是否插入或者驱动是否已启动','确定',config); + this.router.navigate(['/getNoMToken']) + return false + } + + } //路由守卫 + + //倒计时插件关闭页面 + handleEvent (e) { + if (e.left===0) {window.close()} + } + + + +} diff --git a/src/app/m-token-k1/m-token-k1.service.spec.ts b/src/app/m-token-k1/m-token-k1.service.spec.ts new file mode 100644 index 0000000..e57ee06 --- /dev/null +++ b/src/app/m-token-k1/m-token-k1.service.spec.ts @@ -0,0 +1,16 @@ +import { TestBed } from '@angular/core/testing'; + +import { MTokenK1Service } from './m-token-k1.service'; + +describe('MTokenK1Service', () => { + let service: MTokenK1Service; + + beforeEach(() => { + TestBed.configureTestingModule({}); + service = TestBed.inject(MTokenK1Service); + }); + + it('should be created', () => { + expect(service).toBeTruthy(); + }); +}); diff --git a/src/app/m-token-k1/m-token-k1.service.ts b/src/app/m-token-k1/m-token-k1.service.ts new file mode 100644 index 0000000..6106ae9 --- /dev/null +++ b/src/app/m-token-k1/m-token-k1.service.ts @@ -0,0 +1,67 @@ +import { Injectable } from '@angular/core'; +import { CanActivate, ActivatedRouteSnapshot, RouterStateSnapshot, Router } from '@angular/router'; +import { MatSnackBar, MatSnackBarConfig } from '@angular/material/snack-bar'; +declare var mToken : any; + + + +@Injectable({ + providedIn: 'root' +}) +export class MTokenK1Service { + + constructor(private router: Router,public snackBar: MatSnackBar,) { } + + public mTokenK1Timer; //定时器查询 + public verificationURL = '/keyUnit/editunitinfo' //验证url地址是否为验证页面 + K1mToken = new mToken("mTokenPlugin") + keyBase64 = '5YyX5Lqs5a6J5L+h4oCU5LqM57u06aKE5qGI57yW5Yi25bel5YW3d2Vi'; //秘钥验证base64字符 + password='12345678'; //秘钥验证用户密码 + + + + //验证秘钥定时器 + startUp = ():void=>{ + window.clearInterval(this.mTokenK1Timer) + this.mTokenK1Timer = window.setInterval( ()=>{ + let url = this.router.url + if ( url.includes(this.verificationURL) ) { //当前url地址为 秘钥验证页面时 + this.K1mToken.LoadLibrary() + let keyIndex = this.K1mToken.K1_mTokenFindDevice() //查找秘钥是否插入 + + if (keyIndex < 1) { //秘钥被拔出 + this.goToEdit() + } else if (keyIndex > 0) { //秘钥存在 + let keyUID = this.K1mToken.K1_mTokenGetUID(keyIndex) //读取秘钥UID + let isLogin = this.K1mToken.K1_mTokenOpen(keyUID,this.password) + if (isLogin==0) { //密码验证成功 + let keyMSG = window.atob( this.K1mToken.K1_mTokenReadUserStorage(keyUID,0,56) ) + if (keyMSG!=this.keyBase64) { //base64转码 验证失败 + this.goToEdit() } + } else { //密码验证失败 + this.goToEdit() } + } + + } else { //不为当前页面时 + window.clearInterval(this.mTokenK1Timer) + } + + },10000) + } + + isShow:boolean = false; //是否显示倒计时插件 + //秘钥拔出,删除验证定时器,跳转页面 + goToEdit () { + this.isShow = true + window.clearInterval(this.mTokenK1Timer) //删除定时器 + window.setTimeout(()=>{ + this.isShow = false + let url = this.router.url + if ( url.includes(this.verificationURL) ) { //页面还为验证页面时跳转 + window.close(); } + },10000) + } + + + +} diff --git a/src/app/navigation/navigation.component.html b/src/app/navigation/navigation.component.html new file mode 100644 index 0000000..61e4648 --- /dev/null +++ b/src/app/navigation/navigation.component.html @@ -0,0 +1,65 @@ + + + +
    + +
    + +
    + + + +
    + + +
    + +
    + diff --git a/src/app/navigation/navigation.component.scss b/src/app/navigation/navigation.component.scss new file mode 100644 index 0000000..eccfaa5 --- /dev/null +++ b/src/app/navigation/navigation.component.scss @@ -0,0 +1,131 @@ + +.example-container { + width: 100%; + height:100%; + border: 1px solid rgba(0, 0, 0, 0.5); + } +mat-accordion{ + height: 100%; +} +mat-sidenav{ + box-shadow: 2px 0px 5px #888888; + color: white; + background-color: #3c4252; + width: 240px; + overflow-x: hidden; + + ul{ + width: 100%; + + li{ + line-height: 48px; + cursor: pointer; + background-color: #3c4252; + color: white; + font-size: 15px; + .commondiv{ + padding-left: 52px; + } + } + + } + +} + + .shownav{ + position: absolute; + top: 13px; + z-index: 200; + + } + .mat-accordion .mat-expansion-panel:first-of-type { + border-top-right-radius:0px; + border-top-left-radius:0px; + } + .mat-accordion .mat-expansion-panel:last-of-type { + border-bottom-right-radius: 0px; + border-bottom-left-radius: 0px; + } + .mat-expansion-panel{ + border-radius: 0px; + } + .mat-expansion-panel-spacing { + margin: 0px; + } + + .navbox{ + position: absolute; + left: 0px; + top: 153px; + right: -18px; + bottom: 0px; + overflow-y: scroll; + } + mat-sidenav-container.myapp-dark-theme{ + background-color: #fafafa; + color: black; + cursor: pointer; + mat-panel-title{ + color: black!important; + line-height: 24px; + } + + ul li{ + background-color: white; + color: black; + } + .biglogobox{ + background-color: #d50000; + } + color: black; + } + + .biglogobox{ + width: 250px; + background-color: #42a5f5; + padding-top: 15px; + display: block; + text-align: center; + line-height:40px; + position: relative; + color: #FFF; + font-size: 2em; + margin: 0 auto; + margin-bottom: 100px; + img{ + margin-right: 11px; + } + } + mat-panel-title mat-icon{ + color: #afb2bb; + font-size: 24px; + line-height: 24px; + margin-right: 5px; + } + mat-expansion-panel{ + background-color: #3c4252; + mat-panel-title{ + color: white; + cursor: pointer; + line-height: 24px; + } + } + + .mat-expansion-indicator::after { + color: white; + } + +.example-container .navbox .router-link-active { + background-color: rgba(225,225,225,.5); + border:0 +} +.example-sidenav-content{ + height: 100%; + overflow: hidden; +} +.disabledclass{ + mat-panel-title{ + color: white; + } + +} diff --git a/src/app/navigation/navigation.component.spec.ts b/src/app/navigation/navigation.component.spec.ts new file mode 100644 index 0000000..3857718 --- /dev/null +++ b/src/app/navigation/navigation.component.spec.ts @@ -0,0 +1,25 @@ +import { async, ComponentFixture, TestBed } from '@angular/core/testing'; + +import { NavigationComponent } from './navigation.component'; + +describe('NavigationComponent', () => { + let component: NavigationComponent; + let fixture: ComponentFixture; + + beforeEach(async(() => { + TestBed.configureTestingModule({ + declarations: [ NavigationComponent ] + }) + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(NavigationComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/navigation/navigation.component.ts b/src/app/navigation/navigation.component.ts new file mode 100644 index 0000000..3f3ffca --- /dev/null +++ b/src/app/navigation/navigation.component.ts @@ -0,0 +1,60 @@ +import { Component, OnInit,Inject } from '@angular/core'; +import {MatTreeFlatDataSource, MatTreeFlattener} from '@angular/material/tree'; +import {FlatTreeControl} from '@angular/cdk/tree'; +import {MatDialog, MatDialogRef, MAT_DIALOG_DATA} from '@angular/material/dialog'; +import {FormControl} from '@angular/forms'; +import { HttpClient } from '@angular/common/http'; +import { TreeService } from '../http-interceptors/tree.service' +import { MatSnackBar, MatSnackBarConfig } from '@angular/material/snack-bar'; +import {CacheTokenService} from '../http-interceptors/cache-token.service'//引入服务 +import { Router,ActivatedRoute } from '@angular/router' + + + +@Component({ + selector: 'app-navigation', + templateUrl: './navigation.component.html', + styleUrls: ['./navigation.component.scss'] +}) +export class NavigationComponent implements OnInit { + + constructor(public navmenus:CacheTokenService,private http: HttpClient,public dialog: MatDialog,private tree:TreeService,public snackBar: MatSnackBar, + private router:Router,private route:ActivatedRoute) { } + + treedata:any + isgrey:boolean + olddata:any + oldtreedata:any + + ngOnInit () { + this.http.get('/api/Account/NavMenus').subscribe((data:any)=>{ + this.olddata = data + this.oldtreedata = data + let _data = this.tree.toTree(this.oldtreedata) + this.treedata = _data + }) + } + + ngOnDestroy () { + + } + + darktheme = false; + switchTheme(dark) { + this.darktheme = dark; + } + + defaulttheme(){ + this.darktheme = false + } + + redtheme(){ + this.darktheme = true + } + toGis(){ + // console.log(123) + window.open(`http://39.106.78.171:8000`); + } + + +} diff --git a/src/app/navigation/navigation.module.ts b/src/app/navigation/navigation.module.ts new file mode 100644 index 0000000..5574afd --- /dev/null +++ b/src/app/navigation/navigation.module.ts @@ -0,0 +1,114 @@ +import { NgModule } from '@angular/core'; +import { CommonModule } from '@angular/common'; +import { NavigationComponent } from './navigation.component'; +import { MatIconModule } from '@angular/material/icon'; +import { MatSidenavModule } from '@angular/material/sidenav'; +import { RouterModule } from '@angular/router'; +import { FormsModule } from '@angular/forms'; +import { TabbarComponent } from '../tabbar/tabbar.component'; +import { UiModule } from '../ui/ui.module'; + +import {A11yModule} from '@angular/cdk/a11y'; +import {DragDropModule} from '@angular/cdk/drag-drop'; +import {PortalModule} from '@angular/cdk/portal'; +import {ScrollingModule} from '@angular/cdk/scrolling'; +import {CdkStepperModule} from '@angular/cdk/stepper'; +import {CdkTableModule} from '@angular/cdk/table'; +import {CdkTreeModule} from '@angular/cdk/tree'; +import {MatAutocompleteModule} from '@angular/material/autocomplete'; +import {MatBadgeModule} from '@angular/material/badge'; +import {MatBottomSheetModule} from '@angular/material/bottom-sheet'; +import {MatButtonModule} from '@angular/material/button'; +import {MatButtonToggleModule} from '@angular/material/button-toggle'; +import {MatCardModule} from '@angular/material/card'; +import {MatCheckboxModule} from '@angular/material/checkbox'; +import {MatChipsModule} from '@angular/material/chips'; +import {MatStepperModule} from '@angular/material/stepper'; +import {MatDatepickerModule} from '@angular/material/datepicker'; +import {MatDialogModule} from '@angular/material/dialog'; +import {MatDividerModule} from '@angular/material/divider'; +import {MatExpansionModule} from '@angular/material/expansion'; +import {MatGridListModule} from '@angular/material/grid-list'; + +import {MatInputModule} from '@angular/material/input'; +import {MatListModule} from '@angular/material/list'; +import {MatMenuModule} from '@angular/material/menu'; +import {MatNativeDateModule, MatRippleModule} from '@angular/material/core'; +import {MatPaginatorModule} from '@angular/material/paginator'; +import {MatProgressBarModule} from '@angular/material/progress-bar'; +import {MatProgressSpinnerModule} from '@angular/material/progress-spinner'; +import {MatRadioModule} from '@angular/material/radio'; +import {MatSelectModule} from '@angular/material/select'; + +import {MatSliderModule} from '@angular/material/slider'; +import {MatSlideToggleModule} from '@angular/material/slide-toggle'; +import {MatSnackBarModule} from '@angular/material/snack-bar'; +import {MatSortModule} from '@angular/material/sort'; +import {MatTableModule} from '@angular/material/table'; +import {MatTabsModule} from '@angular/material/tabs'; +import {MatToolbarModule} from '@angular/material/toolbar'; +import {MatTooltipModule} from '@angular/material/tooltip'; +import {MatTreeModule} from '@angular/material/tree'; + + +@NgModule({ + declarations: [ + NavigationComponent, + TabbarComponent + ], + imports: [ + CommonModule, + MatSidenavModule, + RouterModule, + MatIconModule, + FormsModule, + UiModule, + + A11yModule, + CdkStepperModule, + CdkTableModule, + CdkTreeModule, + DragDropModule, + MatAutocompleteModule, + MatBadgeModule, + MatBottomSheetModule, + MatButtonModule, + MatButtonToggleModule, + MatCardModule, + MatCheckboxModule, + MatChipsModule, + MatStepperModule, + MatDatepickerModule, + MatDialogModule, + MatDividerModule, + MatExpansionModule, + MatGridListModule, + MatIconModule, + MatInputModule, + MatListModule, + MatMenuModule, + MatNativeDateModule, + MatPaginatorModule, + MatProgressBarModule, + MatProgressSpinnerModule, + MatRadioModule, + MatRippleModule, + MatSelectModule, + MatSidenavModule, + MatSliderModule, + MatSlideToggleModule, + MatSnackBarModule, + MatSortModule, + MatTableModule, + MatTabsModule, + MatToolbarModule, + MatTooltipModule, + MatTreeModule, + PortalModule, + ScrollingModule, + ], + exports: [ + NavigationComponent + ] +}) +export class NavigationModule { } diff --git a/src/app/pages/home/home.component.html b/src/app/pages/home/home.component.html new file mode 100644 index 0000000..e49873a --- /dev/null +++ b/src/app/pages/home/home.component.html @@ -0,0 +1,50 @@ +
    + + + +
    +
    +
    重点单位总量
    +
    {{keyUnitNum}}
    +
    +
    +
    数据采集总量
    +
    {{dataNum}}
    +
    +
    +
    预案编制总量
    +
    {{planNum}}
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    +
    + +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    \ No newline at end of file diff --git a/src/app/pages/home/home.component.scss b/src/app/pages/home/home.component.scss new file mode 100644 index 0000000..38a9837 --- /dev/null +++ b/src/app/pages/home/home.component.scss @@ -0,0 +1,5 @@ +@import "../../../assets/css/style.css"; +#chartMap{ + border-radius: 10px; + // opacity: .6; +} \ No newline at end of file diff --git a/src/app/pages/home/home.component.spec.ts b/src/app/pages/home/home.component.spec.ts new file mode 100644 index 0000000..490e81b --- /dev/null +++ b/src/app/pages/home/home.component.spec.ts @@ -0,0 +1,25 @@ +import { async, ComponentFixture, TestBed } from '@angular/core/testing'; + +import { HomeComponent } from './home.component'; + +describe('HomeComponent', () => { + let component: HomeComponent; + let fixture: ComponentFixture; + + beforeEach(async(() => { + TestBed.configureTestingModule({ + declarations: [ HomeComponent ] + }) + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(HomeComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/pages/home/home.component.ts b/src/app/pages/home/home.component.ts new file mode 100644 index 0000000..de4bf9a --- /dev/null +++ b/src/app/pages/home/home.component.ts @@ -0,0 +1,1304 @@ +import { Component, OnInit ,ViewChild, AfterViewInit,ElementRef,Renderer2 } from '@angular/core'; +import { HttpClient } from '@angular/common/http' +import { Router,ActivatedRoute } from '@angular/router' +declare var echarts: any; +declare var AMap: any; + +declare var AMapUI: any; + +@Component({ + selector: 'app-home', + templateUrl: './home.component.html', + styleUrls: ['./home.component.scss'] +}) +export class HomeComponent implements OnInit { + + constructor(private http:HttpClient, private render2: Renderer2,public element: ElementRef,private router:Router,private route:ActivatedRoute) { } + keyUnitNum:any = '8,036' + dataNum:any = '6,578' + planNum:any = '22,678' + + //全队数据采集和预案编制数量统计 + chartQusj:any + chartQusjOption:any = { + + grid: { + top: 50, + left: 40, + right: 20, + bottom: 20, + }, + // 标题 + title: { + text: '全队数据采集和预案编制数量统计', + top: -4, + left:-2 + }, + //图例 + legend: { + top: 0, + right:-2, + // left:3, + data: ['单位预案编制数量', '单位数据采集数量'], + }, + //提示框 + tooltip: { + trigger: 'axis', + }, + // x轴 + xAxis: { + type: 'category', + data: ['1月', '2月', '3月', '4月', '5月', '6月', '7月', '8月', '9月', '10月', '11月', '12月'], + boundaryGap: false, + }, + // y轴 + yAxis: { + type: 'value', + name:'个' + }, + // 数据 + series: [ + { + name: '单位预案编制数量', + type: 'line', + data: [1189, 1324, 1002, 1100, 1432, 888, 1300, 1000, 910, 1320, 1200, 1088], + // showSymbol: true, + // symbolSize:6, + // smooth: false, + // label: { + // show: true, + // }, + areaStyle: { + color: { + type: 'linear', + x: 0, + y: 0, + x2: 0, + y2: 1, + colorStops: [{ + offset: 0, + color: 'rgba(60,103,195,1)' // 0% 处的颜色 + }, { + offset: 1, + color: 'rgba(0,194,255,.2)' // 100% 处的颜色 + }], + global: false // 缺省为 false + } + } + }, + { + name: '单位数据采集数量', + type: 'line', + data: [288, 425, 342, 299, 255, 408, 488, 312, 486, 550, 425, 340 ], + }, + ], + }; + chartQusjOption2 = { + grid: { + top: 50, + left: 30, + right: 20, + bottom: 20, + }, + // 标题 + title: { + text: '全队数据采集和预案编制数量统计', + top: -4, + left:-2 + }, + //图例 + legend: { + top: 0, + right:-2, + // left:3, + data: ['单位预案编制数量', '单位数据采集数量'], + }, + //提示框 + tooltip: { + trigger: 'axis', + }, + // x轴 + xAxis: { + type: 'category', + data: ['1月', '2月', '3月', '4月', '5月', '6月', '7月', '8月', '9月', '10月', '11月', '12月'], + boundaryGap: false, + }, + // y轴 + yAxis: { + type: 'value', + name:'个' + }, + // 数据 + series: [ + { + name: '单位预案编制数量', + type: 'line', + data: [66, 44, 55, 56, 78, 38, 66, 69, 44, 78, 50, 66], + // showSymbol: true, + // symbolSize:6, + // smooth: false, + // label: { + // show: true, + // }, + areaStyle: { + color: { + type: 'linear', + x: 0, + y: 0, + x2: 0, + y2: 1, + colorStops: [{ + offset: 0, + color: 'rgba(60,103,195,1)' // 0% 处的颜色 + }, { + offset: 1, + color: 'rgba(0,194,255,.2)' // 100% 处的颜色 + }], + global: false // 缺省为 false + } + } + }, + { + name: '单位数据采集数量', + type: 'line', + data: [36, 28, 45, 36, 50, 30, 24, 47, 22, 25, 24, 33 ], + }, + ], + }; + //预案单位类型统计 + chartYadwlx:any + data02:any = [ + { + value: 335, + name: '高层建筑' + }, + { + value: 110, + name: '地下建筑' + }, + { + value: 274, + name: '大型城市综合体' + }, + { + value: 235, + name: '人员密集场所' + }, + { + value: 400, + name: '石油化工类' + }, + { + value: 400, + name: '地铁类' + }, + { + value: 400, + name: '仓库、堆垛、厂房' + }, + { + value: 400, + name: '隧道' + }, + { + value: 400, + name: '其他' + } + ]; + chartYadwlxOption:any = { + // 标题 + title: { + text: '预案单位类型统计', + left: '10%', + top:0 + }, + //图例 + legend: { + orient: 'vertical', + top: 'center', + right: '0%', + show: false, + formatter: function (name) { + var target; + for (var i = 0, l = this.data02.length; i < l; i++) { + if (this.data02[i].name == name) { + target = this.data02[i].value; + } + } + return name + ' ' + target; + } + }, + //提示框 + tooltip: { + trigger: 'item', + formatter: '{b}:{c}份
    占比:{d}%' + }, + // 数据 + series: [{ + type: 'pie', + center: ['55%', '55%'], + radius: ['25%', '60%'], + roseType:true, + // labelLine: { + // show: true, + // length: 20, + // length2: 0, + // lineStyle: { + // color: '#999', + // width: 1 + // } + // }, + labelLine:{ + lineStyle:{ + color: '#93FCFF' + } + }, + label: { + //formatter: '{hr|}\n{a|{b}}\n{b|{c}}万吨\n{c|{d}%}', + // formatter: '{a|{b}}\n{b|{c}}{c|份}\n{d|{d}%}', + formatter: '{a|{b}}{b|{c}}{c|份}', + rich: { + hr: { + borderColor: '#999', + width: '100%', + borderWidth: 1, + marginLeft: '-15px', + marginRight: '-15px', + height:0 + }, + a: { + color: '#1F6F9B', + fontSize: 12, + height: 18, + borderColor: '#999', + //marginTop: '65px', + }, + b: { + color: '#fff', + fontSize: 12, + height: 36, + }, + c: { + color: '#fff', + fontSize: 12, + }, + d: { + color: '#fff', + fontSize: 12, + height: 16, + marginLeft: '5px', + }, + }, + }, + data: [{ + value: 4128, + name: '高层建筑' + }, + { + value: 1566, + name: '地下建筑' + }, + + { + value:1895, + name: '地铁类' + }, + + { + value:2112, + name: '人员密集场所' + }, + { + value: 3008, + name: '石油化工类' + }, + + { + value: 2456, + name: '大型城市综合体' + }, + { + value: 3522, + name: '仓库、堆垛、厂房' + }, + { + value: 1421, + name: '隧道' + }, + { + value: 2622, + name: '其他' + } + ], + }], + }; + data03:any = [ + { + value: 390, + name: '高层建筑' + }, + { + value: 202, + name: '地下建筑' + }, + { + value: 154, + name: '大型城市综合体' + }, + { + value: 216, + name: '人员密集场所' + }, + { + value: 273, + name: '石油化工类' + }, + { + value: 160, + name: '地铁类' + }, + { + value: 320, + name: '仓库、堆垛、厂房' + }, + { + value:345, + name: '隧道' + }, + { + value:290, + name: '其他' + } + ]; + chartYadwlxOption2:any = { + // 标题 + title: { + text: '预案单位类型统计', + left: '10%', + top:0 + }, + //图表位置 + grid: { + left: 100, + right: 10, + }, + //图例 + legend: { + orient: 'vertical', + top: 'center', + right: '0%', + show: false, + formatter: function (name) { + var target; + for (var i = 0, l = this.data03.length; i < l; i++) { + if (this.data03[i].name == name) { + target = this.data03[i].value; + } + } + return name + ' ' + target; + } + }, + //提示框 + tooltip: { + trigger: 'item', + }, + // 数据 + series: [ + { + type: 'pie', + center: ['55%', '55%'], + radius: ['25%', '60%'], + roseType:true, + // labelLine: { + // show: true, + // length: 20, + // length2: 0, + // lineStyle: { + // color: '#999', + // width: 1 + // } + // }, + labelLine:{ + lineStyle:{ + color: '#93FCFF' + } + }, + label: { + //formatter: '{hr|}\n{a|{b}}\n{b|{c}}万吨\n{c|{d}%}', + // formatter: '{a|{b}}\n{b|{c}}{c|份}\n{d|{d}%}', + formatter: '{a|{b}} {b|{c}}{c|份}', + rich: { + // hr: { + // borderColor: '#999', + // width: '100%', + // borderWidth: 1, + // marginLeft: '-15px', + // marginRight: '-15px', + // height:0 + // }, + a: { + color: '#1F6F9B', + fontSize: 12, + height: 18, + borderColor: '#999', + //marginTop: '65px', + }, + b: { + color: '#fff', + fontSize: 12, + height: 36, + }, + c: { + color: '#fff', + fontSize: 12, + }, + d: { + color: '#fff', + fontSize: 12, + height: 16, + marginLeft: '5px', + }, + }, + }, + data: [{ + value: 390, + name: '高层建筑' + }, + { + value: 202, + name: '地下建筑' + }, + { + value:345, + name: '隧道' + }, + { + value: 216, + name: '人员密集场所' + }, + { + value: 273, + name: '石油化工类' + }, + { + value: 160, + name: '地铁类' + }, + { + value: 320, + name: '仓库、堆垛、厂房' + }, + + { + value: 154, + name: '大型城市综合体' + }, + { + value:290, + name: '其他' + } + ], + }], + }; + + + // 预案评优排行 + chartYapyph:any + chartYapyphOption:any = { + // 标题 + title: { + text: '预案评优排行', + left:0 + }, + grid: { + left: 130, + right: 10, + }, + //提示框 + tooltip: { + trigger: 'axis', + }, + // y轴 + yAxis: { + type: 'category', + data: ['渝北区消防救援支队', '渝北区消防救援支队', '大渡口区消防救援支队', '南岸区消防救援支队', '北培区消防救援支队', '渝中区消防救援支队'] + }, + // x轴 + xAxis: { + type: 'value', + splitLine: { + show: true, + lineStyle: { + color: '#fff' + } + }, + }, + // 数据 + series: [{ + name: '预案评优', + type: 'bar', + data: [20, 26, 30, 32, 34, 38], + label: { + show: false, + position: "top", + formatter: '{c}', + color: "#fff", + }, + itemStyle: { + color: { + type: 'linear', + x: 0, + y: 0, + x2: 0, + y2: 1, + colorStops: [{ + offset: 0, + color: 'rgba(0,220,254,1)' // 0% 处的颜色 + }, { + offset: 1, + color: 'rgba(1,104,191,1)' // 100% 处的颜色 + }], + globalCoord: false // 缺省为 false + }, + } + } + ], + }; + chartYapyphOption2:any = { + // 标题 + title: { + text: '预案评优排行', + left:0 + }, + grid: { + left: 130, + right: 10, + }, + //提示框 + tooltip: { + trigger: 'axis', + }, + // y轴 + yAxis: { + type: 'category', + data: ['城口县消防救援大队', '丰都县消防救援大队', '垫江县消防救援大队', '忠县消防救援大队', '云阳县消防救援大队', '石柱县消防救援大队'] + }, + // x轴 + xAxis: { + type: 'value', + splitLine: { + show: true, + lineStyle: { + color: '#fff' + } + }, + }, + // 数据 + series: [{ + name: '预案评优', + type: 'bar', + data: [14, 16, 19, 22, 26, 30], + label: { + show: false, + position: "top", + formatter: '{c}', + color: "#fff", + }, + itemStyle: { + color: { + type: 'linear', + x: 0, + y: 0, + x2: 0, + y2: 1, + colorStops: [{ + offset: 0, + color: 'rgba(0,220,254,1)' // 0% 处的颜色 + }, { + offset: 1, + color: 'rgba(1,104,191,1)' // 100% 处的颜色 + }], + globalCoord: false // 缺省为 false + }, + } + } + ], + }; + //上海假数据 + chartYapyphOption3:any = { + // 标题 + title: { + text: '预案评优排行', + left:0 + }, + grid: { + left:70, + right: 10, + }, + //提示框 + tooltip: { + trigger: 'axis', + }, + // y轴 + yAxis: { + type: 'category', + data: ['虹口支队', '浦东支队', '黄浦支队', '徐汇支队', '普陀支队', '静安支队'] + }, + // x轴 + xAxis: { + type: 'value', + splitLine: { + show: true, + lineStyle: { + color: '#fff' + } + }, + }, + // 数据 + series: [{ + name: '预案评优', + type: 'bar', + data: [20, 26, 30, 32, 34, 38], + label: { + show: false, + position: "top", + formatter: '{c}', + color: "#fff", + }, + itemStyle: { + color: { + type: 'linear', + x: 0, + y: 0, + x2: 0, + y2: 1, + colorStops: [{ + offset: 0, + color: 'rgba(0,220,254,1)' // 0% 处的颜色 + }, { + offset: 1, + color: 'rgba(1,104,191,1)' // 100% 处的颜色 + }], + globalCoord: false // 缺省为 false + }, + } + } + ], + }; + chartYapyphOption4:any = { + // 标题 + title: { + text: '预案评优排行', + left:0 + }, + grid: { + left: 70, + right: 10, + }, + //提示框 + tooltip: { + trigger: 'axis', + }, + // y轴 + yAxis: { + type: 'category', + data: ['陆家嘴大队', '周浦中队', '外滩中队', '铜山中队', '高桥中队', '永泰中队'] + }, + // x轴 + xAxis: { + type: 'value', + splitLine: { + show: true, + lineStyle: { + color: '#fff' + } + }, + }, + // 数据 + series: [{ + name: '预案评优', + type: 'bar', + data: [14, 16, 19, 22, 26, 30], + label: { + show: false, + position: "top", + formatter: '{c}', + color: "#fff", + }, + itemStyle: { + color: { + type: 'linear', + x: 0, + y: 0, + x2: 0, + y2: 1, + colorStops: [{ + offset: 0, + color: 'rgba(0,220,254,1)' // 0% 处的颜色 + }, { + offset: 1, + color: 'rgba(1,104,191,1)' // 100% 处的颜色 + }], + globalCoord: false // 缺省为 false + }, + } + } + ], + }; + //预案类型统计 + chartYalxtj:any + chartYalxtjOption:any = { + color: ['#FB33C2', '#00CFF0', '#2C3DE0','#b9302d'], + grid: { + top: 50, + left: 30, + right: 20, + bottom: 20, + }, + // 标题 + title: { + text: '预案类型统计', + top: -4, + left: 0 + }, + //图例 + legend: { + top: 0, + data: ['二维预案', '三维预案', '卡片预案', '其他预案'], + icon:'circle', + itemGap: 20, + }, + //提示框 + tooltip: { + trigger: 'axis', + }, + // x轴 + xAxis: { + type: 'category', + data: ['1月', '2月', '3月', '4月', '5月', '6月', '7月', '8月', '9月', '10月', '11月', '12月'], + boundaryGap: false, + }, + // y轴 + yAxis: { + type: 'value', + }, + // 数据 + series: [ + { + name: '二维预案', + type: 'line', + symbolSize: 0, + smooth:true, + lineStyle:{ + width: 4, + color: { + type: 'linear', + x: 0, + y: 0, + x2: 1, + y2: 0, + colorStops: [{ + offset: 0, + color: 'rgba(254,51,194,0)' // 0% 处的颜色 + }, { + offset: 0.5, + color: 'rgba(254,51,194,1)' // 100% 处的颜色 + }, { + offset: 1, + color: 'rgba(254,51,194,0)' // 100% 处的颜色 + }], + global: false // 缺省为 false + } + }, + data: [238, 242, 146, 240, 135, 130, 138, 142, 246, 140, 235, 130 ], + }, + { + name: '三维预案', + type: 'line', + symbolSize: 0, + smooth:true, + lineStyle:{ + width: 4, + color: { + type: 'linear', + x: 0, + y: 0, + x2: 1, + y2: 0, + colorStops: [{ + offset: 0, + color: 'rgba(14,222,252,0)' // 0% 处的颜色 + }, { + offset: 0.5, + color: 'rgba(0,221,255,1)' // 100% 处的颜色 + }, { + offset: 1, + color: 'rgba(1,255,253,0)' // 100% 处的颜色 + }], + global: false // 缺省为 false + }, + }, + data: [282, 122, 126, 220, 125, 120, 228, 216, 230, 255, 250, 138 ], + }, + { + name: '卡片预案', + type: 'line', + symbolSize: 0, + smooth:true, + lineStyle:{ + width: 4, + color: { + type: 'linear', + x: 0, + y: 0, + x2: 1, + y2: 0, + colorStops: [{ + offset: 0, + color: 'rgba(48,63,240,0)' // 0% 处的颜色 + }, { + offset: 0.5, + color: 'rgba(48,63,240,1)' // 100% 处的颜色 + }, { + offset: 1, + color: 'rgba(48,63,240,0)' // 100% 处的颜色 + }], + global: false // 缺省为 false + }, + }, + data: [228, 212, 166, 150, 125, 240, 148, 128, 212, 166, 150, 225 ], + }, + { + name: '其他预案', + type: 'line', + symbolSize: 0, + smooth:true, + lineStyle:{ + width: 4, + color: { + type: 'linear', + x: 0, + y: 0, + x2: 1, + y2: 0, + colorStops: [{ + offset: 0, + color: 'rgba(185,48,45,0)' // 0% 处的颜色 + }, { + offset: 0.5, + color: 'rgba(185,48,45,1)' // 100% 处的颜色 + }, { + offset: 1, + color: 'rgba(185,48,45,0)' // 100% 处的颜色 + }], + global: false // 缺省为 false + }, + }, + data: [145, 252, 130, 266, 299, 289, 156, 123, 212, 252, 188, 198 ], + }, + ], + }; + chartYalxtjOption2:any = { + color: ['#FB33C2', '#00CFF0', '#2C3DE0','#b9302d'], + grid: { + top: 50, + left: 30, + right: 20, + bottom: 20, + }, + // 标题 + title: { + text: '预案类型统计', + top: -4, + left: 0 + }, + //图例 + legend: { + top: 0, + data: ['二维预案', '三维预案', '卡片预案', '其他预案'], + icon:'circle', + itemGap: 20, + }, + //提示框 + tooltip: { + trigger: 'axis', + }, + // x轴 + xAxis: { + type: 'category', + data: ['1月', '2月', '3月', '4月', '5月', '6月', '7月', '8月', '9月', '10月', '11月', '12月'], + boundaryGap: false, + }, + // y轴 + yAxis: { + type: 'value', + }, + // 数据 + series: [ + { + name: '二维预案', + type: 'line', + symbolSize: 0, + smooth:true, + lineStyle:{ + width: 4, + color: { + type: 'linear', + x: 0, + y: 0, + x2: 1, + y2: 0, + colorStops: [{ + offset: 0, + color: 'rgba(254,51,194,0)' // 0% 处的颜色 + }, { + offset: 0.5, + color: 'rgba(254,51,194,1)' // 100% 处的颜色 + }, { + offset: 1, + color: 'rgba(254,51,194,0)' // 100% 处的颜色 + }], + global: false // 缺省为 false + } + }, + data: [66, 25, 85, 41, 68, 78, 65, 35, 25, 56, 68, 99 ], + }, + { + name: '三维预案', + type: 'line', + symbolSize: 0, + smooth:true, + lineStyle:{ + width: 4, + color: { + type: 'linear', + x: 0, + y: 0, + x2: 1, + y2: 0, + colorStops: [{ + offset: 0, + color: 'rgba(14,222,252,0)' // 0% 处的颜色 + }, { + offset: 0.5, + color: 'rgba(0,221,255,1)' // 100% 处的颜色 + }, { + offset: 1, + color: 'rgba(1,255,253,0)' // 100% 处的颜色 + }], + global: false // 缺省为 false + }, + }, + data: [45, 52, 130, 66, 99, 89, 56, 123, 112, 152, 88, 98 ], + }, + { + name: '卡片预案', + type: 'line', + symbolSize: 0, + smooth:true, + lineStyle:{ + width: 4, + color: { + type: 'linear', + x: 0, + y: 0, + x2: 1, + y2: 0, + colorStops: [{ + offset: 0, + color: 'rgba(48,63,240,0)' // 0% 处的颜色 + }, { + offset: 0.5, + color: 'rgba(48,63,240,1)' // 100% 处的颜色 + }, { + offset: 1, + color: 'rgba(48,63,240,0)' // 100% 处的颜色 + }], + global: false // 缺省为 false + }, + }, + data: [26, 72, 66, 50, 25, 40, 48, 66, 50, 25, 40, 48 ], + }, + { + name: '其他预案', + type: 'line', + symbolSize: 0, + smooth:true, + lineStyle:{ + width: 4, + color: { + type: 'linear', + x: 0, + y: 0, + x2: 1, + y2: 0, + colorStops: [{ + offset: 0, + color: 'rgba(185,48,45,0)' // 0% 处的颜色 + }, { + offset: 0.5, + color: 'rgba(185,48,45,1)' // 100% 处的颜色 + }, { + offset: 1, + color: 'rgba(185,48,45,0)' // 100% 处的颜色 + }], + global: false // 缺省为 false + }, + }, + data: [56, 52, 55, 66, 99, 89, 102, 36, 56, 102, 66, 68 ], + }, + ], + }; + + map:any; //地图 + ngOnInit(): void { + setTimeout(() => { + this.getEcharts() + this.mapInit() //初始化地图 + }, 0); + } + + getEcharts(){ + this.chartQusj = echarts.init(this.element.nativeElement.querySelector('#chartQusj'),'skinUpp'); + this.chartQusj.setOption(this.chartQusjOption); + this.chartYadwlx = echarts.init(this.element.nativeElement.querySelector('#chartYadwlx'),'skinUpp'); + this.chartYadwlx.setOption(this.chartYadwlxOption); + this.chartYapyph = echarts.init(this.element.nativeElement.querySelector('#chartYapyph'),'skinUpp'); + + + if(sessionStorage.getItem("realName") == "上海总队"){ + this.chartYapyph.setOption(this.chartYapyphOption3); + }else{ + this.chartYapyph.setOption(this.chartYapyphOption); + } + this.chartYalxtj = echarts.init(this.element.nativeElement.querySelector('#chartYalxtj'),'skinUpp'); + this.chartYalxtj.setOption(this.chartYalxtjOption); + } + + + + //初始化地图 + adcode:any //行政编码 + mapInit () { + //创建地图 + this.map = new AMap.Map('chartMap', { + cursor: 'default', + zooms:[7,18], + mapStyle:"amap://styles/grey", + // bubble: true + }); + + let colors = [ + "#3366cc", "#dc3912", "#ff9900", "#109618", "#990099", "#0099c6", "#dd4477", "#66aa00", + "#b82e2e", "#316395", "#994499", "#22aa99", "#aaaa11", "#6633cc", "#e67300", "#8b0707", + "#651067", "#329262", "#5574a6", "#3b3eac" + ]; + + AMapUI.loadUI(['geo/DistrictExplorer'], (DistrictExplorer)=> { + + //创建一个实例 + let districtExplorer = new DistrictExplorer({ + map: this.map, + eventSupport: true, //打开事件支持 + }); + + // let adcode = this.adcode; //行政编码 + let adcode + if(sessionStorage.getItem("realName") == "上海总队"){ + adcode = 310000 + }else{ + adcode = 500000 + } + + districtExplorer.loadAreaNode(adcode, (error, areaNode)=> { + + //更新地图视野 + this.map.setBounds(areaNode.getBounds(), null, null, true); + + //设置定位节点,支持鼠标位置识别 + //注意节点的顺序,前面的高优先级 + districtExplorer.setAreaNodesForLocating(areaNode); + + //清除已有的绘制内容 + districtExplorer.clearFeaturePolygons(); + + //绘制子区域 + districtExplorer.renderSubFeatures(areaNode, (feature, i) =>{ + // console.log(123,feature,i) + + let fillColor = colors[i % colors.length]; + let strokeColor = colors[colors.length - 1 - i % colors.length]; + + return { + cursor: 'default', + bubble: true, + strokeColor: strokeColor, //线颜色 + strokeOpacity: 1, //线透明度 + strokeWeight: 1, //线宽 + fillColor: fillColor, //填充色 + fillOpacity: 0.5, //填充透明度 + }; + }); + + //绘制父区域 + districtExplorer.renderParentFeature(areaNode, { + cursor: 'default', + bubble: true, + strokeColor: 'black', //线颜色 + strokeOpacity: 1, //线透明度 + strokeWeight: 1, //线宽 + fillColor: null, //填充色 + fillOpacity: 0.5, //填充透明度 + }); + + // 更新地图视野以适合区划面 + this.map.setFitView(districtExplorer.getAllFeaturePolygons()); + }); + + districtExplorer.on('featureClick', (e, feature) =>{ + + let props = feature.properties; + adcode = props.adcode + // console.log(props) + let fillColor2 + if(props.level == 'city'){ + fillColor2 = null + }else{ + fillColor2 = '#d0daee' + } + districtExplorer.loadAreaNode(adcode, (error, areaNode)=> { + //更新地图视野 + // this.map.setBounds(areaNode.getBounds(), null, null, true); + + //设置定位节点,支持鼠标位置识别 + //注意节点的顺序,前面的高优先级 + districtExplorer.setAreaNodesForLocating(areaNode); + + //清除已有的绘制内容 + districtExplorer.clearFeaturePolygons(); + + //绘制子区域 + districtExplorer.renderSubFeatures(areaNode, (feature, i) =>{ + let fillColor = colors[i % colors.length]; + // console.log(111,fillColor) + let strokeColor = colors[colors.length - 1 - i % colors.length]; + + return { + cursor: 'default', + bubble: true, + strokeColor: strokeColor, //线颜色 + strokeOpacity: 1, //线透明度 + strokeWeight: 1, //线宽 + fillColor: fillColor, //填充色 + fillOpacity: 0.5, //填充透明度 + }; + }); + + //绘制父区域 + districtExplorer.renderParentFeature(areaNode, { + cursor: 'default', + bubble: true, + strokeColor: 'black', //线颜色 + strokeOpacity: 1, //线透明度 + strokeWeight: 1, //线宽 + fillColor: fillColor2, //填充色 + fillOpacity: 0.5, //填充透明度 + }); + + // 更新地图视野以适合区划面 + this.map.setFitView(districtExplorer.getAllFeaturePolygons()); + }); + + this.chartQusj.setOption(this.chartQusjOption2); + this.chartYadwlx.setOption(this.chartYadwlxOption2); + if(sessionStorage.getItem("realName") == "上海总队"){ + this.chartYapyph.setOption(this.chartYapyphOption4); + }else{ + this.chartYapyph.setOption(this.chartYapyphOption2); + } + // this.chartYapyph.setOption(this.chartYapyphOption2); + this.chartYalxtj.setOption(this.chartYalxtjOption2); + // console.log(props) + //同时设置地图中心点和缩放级别 + // this.map.setZoomAndCenter(9.4, props.center); + + // this.map.setBounds(areaNode.getBounds(), null, null, true); + // this.router.navigate([`/home/detail`],{queryParams:{'code':props.adcode,'level':props.level}}) + // this.mapInit () + + this.keyUnitNum = '666' + this.dataNum = '456' + this.planNum = '2,678' + }); + + districtExplorer.on('outsideClick', (e) => { + // console.log('区域外点击'); + let adcode + if(sessionStorage.getItem("realName") == "上海总队"){ + adcode = 310000 + }else{ + adcode = 500000 + } + districtExplorer.loadAreaNode(adcode, (error, areaNode)=> { + //更新地图视野 + // this.map.setBounds(areaNode.getBounds(), null, null, true); + + //设置定位节点,支持鼠标位置识别 + //注意节点的顺序,前面的高优先级 + districtExplorer.setAreaNodesForLocating(areaNode); + + //清除已有的绘制内容 + districtExplorer.clearFeaturePolygons(); + + //绘制子区域 + districtExplorer.renderSubFeatures(areaNode, (feature, i) =>{ + let fillColor = colors[i % colors.length]; + // console.log(111,fillColor) + let strokeColor = colors[colors.length - 1 - i % colors.length]; + + return { + cursor: 'default', + bubble: true, + strokeColor: strokeColor, //线颜色 + strokeOpacity: 1, //线透明度 + strokeWeight: 1, //线宽 + fillColor: fillColor, //填充色 + fillOpacity: 0.5, //填充透明度 + }; + }); + + //绘制父区域 + districtExplorer.renderParentFeature(areaNode, { + cursor: 'default', + bubble: true, + strokeColor: 'black', //线颜色 + strokeOpacity: 1, //线透明度 + strokeWeight: 1, //线宽 + fillColor: null, //填充色 + fillOpacity: 0.5, //填充透明度 + }); + + // 更新地图视野以适合区划面 + this.map.setFitView(districtExplorer.getAllFeaturePolygons()); + }); + this.chartQusj.setOption(this.chartQusjOption); + this.chartYadwlx.setOption(this.chartYadwlxOption); + if(sessionStorage.getItem("realName") == "上海总队"){ + this.chartYapyph.setOption(this.chartYapyphOption3); + }else{ + this.chartYapyph.setOption(this.chartYapyphOption); + } + // this.chartYapyph.setOption(this.chartYapyphOption); + + this.chartYalxtj.setOption(this.chartYalxtjOption); + this.keyUnitNum = '8,036' + this.dataNum = '6,578' + this.planNum = '22,678' + }) + + }); + + + } + +} diff --git a/src/app/pages/home2/home2.component.html b/src/app/pages/home2/home2.component.html new file mode 100644 index 0000000..16e1bb4 --- /dev/null +++ b/src/app/pages/home2/home2.component.html @@ -0,0 +1,63 @@ +
    +
    +

    数字化预案编制和管理平台

    +
    {{time}}
    +
    +
    +
    +
    +

    单位类型

    +
    + +
    +
    +

    预案状态

    +
    + +
    +
    +

    预案类型

    +
    + +
    +
    +
    +
    +
    +
      +
    • 123
    • +
    • 456
    • +
    +
    +
    +
      +
    • 预案数量
    • +
    • 单位数量
    • +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +

    趋势图

    +
    + +
    +
    +

    玫瑰图

    +
    + +
    +
    +

    柱状图

    +
    + +
    +
    +
    +
    diff --git a/src/app/pages/home2/home2.component.scss b/src/app/pages/home2/home2.component.scss new file mode 100644 index 0000000..8bae936 --- /dev/null +++ b/src/app/pages/home2/home2.component.scss @@ -0,0 +1,247 @@ +@font-face { + font-family: electronicFont; + src: url(../../../assets/font/DS-DIGIT.TTF); +} +.contentBox{ + width: 100%; + height: 100%; + background: url(../../../assets/images/bg.jpg) no-repeat top center; + line-height: 1.15; + header{ + position: relative; + height:8%; + min-height: 64px; + background: url(../../../assets/images/head_bg.png) no-repeat; + background-size: 100% 100%; + h1{ + font-size: 28px; + color: #fff; + text-align: center; + line-height: 64px; + + } + .showTime{ + position: absolute; + right: 20px; + line-height: 60px; + color: rgba(255,255,255, $alpha: 0.7); + font-size: 16px; + top: 0; + } + } + .mainbox{ + width: 100%; + height: 92%; + // background-color: pink; + padding: 2px 0 2px 0; + display: flex; + .column{ + flex: 3; + } + .column:nth-child(2){ + flex: 6; + margin: 0 8px 8px 8px; + } + .panel{ + height: 29.8%; + position: relative; + // background-color: red; + border: 1px solid rgba(25,186,139,0.17); + background: url(../../../assets/images/line.png) rgba(255,255,255, $alpha: 0.03); + margin-bottom: 8px; + &::before{ + position: absolute; + top: 0; + left: 0; + content: ""; + width:14px; + height:14px; + border-left: 2px solid #02a6b5; + border-top: 2px solid #02a6b5; + } + &::after{ + position: absolute; + top: 0; + right: 0; + content: ""; + width:14px; + height:14px; + border-right: 2px solid #02a6b5; + border-top: 2px solid #02a6b5; + } + .panel-footer{ + position: absolute; + bottom: 0; + left: 0; + width: 100%; + height: 14px; + &::before{ + position: absolute; + top: 0; + left: 0; + content: ""; + width:14px; + height:14px; + border-left: 2px solid #02a6b5; + border-bottom: 2px solid #02a6b5; + } + &::after{ + position: absolute; + top: 0; + right: 0; + content: ""; + width:14px; + height:14px; + border-right: 2px solid #02a6b5; + border-bottom: 2px solid #02a6b5; + } + } + h2{ + height: 18px; + color: #fff; + line-height: 18px; + text-align: center; + font-size: 14px; + font-weight: 400; + } + .chart{ + height: 91%; + // background-color: pink; + } + } + .no{ + background: rgba(101,132,226,0.1); + padding: 4px 16px; + height: 10%; + min-height: 100px; + .no-hd{ + position: relative; + border: 1px solid rgba(25,186,139,0.17); + &::before{ + position: absolute; + top: 0; + left: 0; + content: ""; + width:30px; + height:14px; + border-left: 2px solid #02a6b5; + border-top: 2px solid #02a6b5; + } + &::after{ + position: absolute; + bottom: 0; + right: 0; + content: ""; + width:30px; + height:14px; + border-right: 2px solid #02a6b5; + border-bottom: 2px solid #02a6b5; + } + ul{ + display: flex; + li{ + + flex: 1; + line-height: 55px; + font-size: 48px; + color: #ffeb7b; + text-align: center; + font-family: 'electronicFont'; + } + li:nth-child(1){ + position: relative; + &::after{ + position: absolute; + top: 25%; + height: 50%; + right: 0; + content: ""; + width:1px; + background: rgba(255,255,255, $alpha: 0.2); + } + } + } + + } + .no-bd{ + ul{ + display: flex; + padding: 4px 0; + li{ + flex: 1; + text-align: center; + color: rgba(255,255,255, $alpha: 0.7); + font-size: 14px; + line-height: 30px; + } + } + } + } + .map { + position: relative; + margin-top: 12px; + height: 78%; + .map1 { + width: 480px; + height: 480px; + position: absolute; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); + background: url(../../../assets/images/map.png); + background-size: 100% 100%; + opacity: 0.3; + } + .map2 { + position: absolute; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); + width: 600px; + height: 600px; + background: url(../../../assets/images/lbx.png); + + animation: rotate1 15s linear infinite; + opacity: 0.6; + background-size: 100% 100%; + } + + .map3 { + position: absolute; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); + // width: 7.075rem; + // height: 7.075rem; + // background: url(../images/jt.png); + // animation: rotate2 10s linear infinite; + // opacity: 0.6; + background-size: 100% 100%; + } + // .chart { + // position: absolute; + // top: 0; + // left: 0; + // // background-color: pink; + // width: 100%; + // height: 10.125rem; + // } + @keyframes rotate1 { + 0% { + transform: translate(-50%, -50%) rotate(0deg); + }; + 100% { + transform: translate(-50%, -50%) rotate(360deg); + } + } + // @keyframes rotate2 { + // form { + // transform: translate(-50%, -50%) rotate(0deg); + // } + // to { + // transform: translate(-50%, -50%) rotate(-360deg); + // } + // } + } + } +} diff --git a/src/app/pages/home2/home2.component.spec.ts b/src/app/pages/home2/home2.component.spec.ts new file mode 100644 index 0000000..b7d612f --- /dev/null +++ b/src/app/pages/home2/home2.component.spec.ts @@ -0,0 +1,25 @@ +import { async, ComponentFixture, TestBed } from '@angular/core/testing'; + +import { Home2Component } from './home2.component'; + +describe('Home2Component', () => { + let component: Home2Component; + let fixture: ComponentFixture; + + beforeEach(async(() => { + TestBed.configureTestingModule({ + declarations: [ Home2Component ] + }) + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(Home2Component); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/pages/home2/home2.component.ts b/src/app/pages/home2/home2.component.ts new file mode 100644 index 0000000..a7e4b6d --- /dev/null +++ b/src/app/pages/home2/home2.component.ts @@ -0,0 +1,348 @@ +import { Component, OnInit ,ElementRef} from '@angular/core'; +import { HttpClient } from '@angular/common/http' +import { HighlightSpanKind } from 'typescript'; + +declare var echarts: any; +declare var westeros: any; +declare var AMap: any; +declare var Loca: any; +@Component({ + selector: 'app-home2', + templateUrl: './home2.component.html', + styleUrls: ['./home2.component.scss'] +}) +export class Home2Component implements OnInit { + + constructor(private http:HttpClient,public element: ElementRef) { } + + unitTypeStatistics:any //单位类型统计 + myUnitTypeChart:any //单位类型统计图表 + unitTypeOption:any = { + title: { + // text: '单位类型统计', + // left: 'center' + }, + tooltip: { + trigger: 'item', + formatter: '占比:
    {b} : {c} ({d}%)' + }, + legend: { + // orient: 'vertical', + // top: 'middle', + bottom: 0, + left: 'center', + data: [] + }, + series: [ + { + type: 'pie', + radius: '65%', + center: ['50%', '50%'], + selectedMode: 'single', + data: [ + ], + emphasis: { + itemStyle: { + shadowBlur: 10, + shadowOffsetX: 0, + shadowColor: 'rgba(0, 0, 0, 0.5)' + } + } + } + ] + }; //单位类型数据 + + planStateStatistics //预案状态统计 + myPlanStateChart:any //预案状态统计图表 + planStateOption:any = { + title: { + // text: '预案编制情况统计', + // left: 'center' + }, + tooltip: { + trigger: 'item', + formatter: '占比:
    {b} : {c} ({d}%)' + }, + legend: { + // orient: 'vertical', + // top: 'middle', + bottom: 0, + left: 'center', + data: ['审核通过','已提交','已公开'] + }, + series: [ + { + type: 'pie',//类型为饼图 + radius: '65%', + center: ['50%', '50%'], + selectedMode: 'single', + data: [ + ], + emphasis: { + itemStyle: { + shadowBlur: 10, + shadowOffsetX: 0, + shadowColor: 'rgba(0, 0, 0, 0.5)' + } + } + } + ] + }; //预案状态数据 + + planTypeStatistics //各类型预案统计 + myPlanTypeChart:any //各类型预案图表 + planTypeOption:any = { + title: { + // text: '各类型预案情况统计', + // left: 'center' + }, + tooltip: { + trigger: 'item', + formatter: '占比:
    {b} : {c} ({d}%)' + }, + legend: { + // orient: 'vertical', + // top: 'middle', + bottom: 0, + left: 'center', + data: ['卡片预案','二维预案','三维预案','其他预案'] + }, + series: [ + { + type: 'pie', + radius: '65%', + center: ['50%', '50%'], + selectedMode: 'single', + data: [ + ], + emphasis: { + itemStyle: { + shadowBlur: 10, + shadowOffsetX: 0, + shadowColor: 'rgba(0, 0, 0, 0.5)' + } + } + } + ] + }; //预案状态数据 + + trendStatistics //趋势统计 + trendChart:any //趋势图表 + trendOption:any = { + title: { + // text: '预案趋势统计' + }, + tooltip: { + trigger: 'axis' + }, + legend: { + data: ['新增预案', '修改预案'] + }, + grid: { + left: '3%', + right: '4%', + bottom: '3%', + containLabel: true + }, + toolbox: { + feature: { + saveAsImage: {} + } + }, + xAxis: { + type: 'category', + boundaryGap: false, + data: ['一月', '二月', '三月', '四月', '五月', '六月', '七月', '八月', '九月', '十月', '十一月','十二月'] + }, + yAxis: { + type: 'value' + }, + series: [ + { + name: '新增预案', + type: 'line', + stack: '总量', + data: [] + }, + { + name: '修改预案', + type: 'line', + stack: '总量', + data: [] + } + ] + }; //预案状态数据 + + xxxChart:any + xxxOption:any = { + title: { + // text: '南丁格尔玫瑰图', + // subtext: '纯属虚构', + // left: 'center' + }, + tooltip: { + trigger: 'item', + formatter: '{a}
    {b} : {c} ({d}%)' + }, + legend: { + left: 'center', + top: 'bottom', + data: ['1', '2', '3', '4'] + }, + toolbox: { + show: true, + feature: { + mark: {show: true}, + dataView: {show: true, readOnly: false}, + magicType: { + show: true, + type: ['pie', 'funnel'] + }, + restore: {show: true}, + saveAsImage: {show: true} + } + }, + series: [ + { + name: '面积模式', + type: 'pie', + radius: [30, 110], + // center: ['75%', '50%'], + roseType: 'area', + data: [ + {value: 10, name: '1'}, + {value: 5, name: '2'}, + {value: 15, name: '3'}, + {value: 25, name: '4'} + ] + } + ] + } + + yyyChart:any + yyyOption:any = { + color: ['#3398DB'], + tooltip: { + trigger: 'axis', + axisPointer: { // 坐标轴指示器,坐标轴触发有效 + type: 'shadow' // 默认为直线,可选为:'line' | 'shadow' + } + }, + grid: { + left: '3%', + right: '4%', + bottom: '3%', + containLabel: true + }, + xAxis: [ + { + type: 'category', + data: ['周一', '周二', '周三', '周四', '周五', '周六', '周日'], + axisTick: { + alignWithLabel: true + } + } + ], + yAxis: [ + { + type: 'value' + } + ], + series: [ + { + name: '直接访问', + type: 'bar', + barWidth: '60%', + data: [10, 52, 200, 334, 390, 330, 220] + } + ] + }; + + t:any + time:any + theme:any //主题风格 + ngOnInit(): void { + // const map = new AMap.Map(this.element.nativeElement.querySelector('#map'), { + // mapStyle: 'amap://styles/1de318cbb8d12c02303a22c550b9ccc9', + // // pitch: 0, + // features: ['bg', 'road'],//地图显示要素 + // zoom: 6, + // center: [116.408075, 39.950187], + // // viewMode: '3D' + // }); + // const layer = new Loca.DistrictLayer({ + // map: map + // }); + // layer.setMap(map); + + + + this.getTime() + setTimeout(() => { + + this.myUnitTypeChart = echarts.init(this.element.nativeElement.querySelector('#unitType'),'westeros'); + this.myPlanStateChart = echarts.init(this.element.nativeElement.querySelector('#planStates') ,'westeros'); + this.myPlanTypeChart = echarts.init(this.element.nativeElement.querySelector('#planType'),'westeros'); + this.trendChart = echarts.init(this.element.nativeElement.querySelector('#trend'),'westeros'); + this.xxxChart = echarts.init(this.element.nativeElement.querySelector('#xxx'),'westeros'); + this.xxxChart.setOption(this.xxxOption); + this.yyyChart = echarts.init(this.element.nativeElement.querySelector('#yyy'),'westeros'); + this.yyyChart.setOption(this.yyyOption); + }, 0); + + + this.chartsSetOption(); + } + getTime():any{ + this.t = setInterval(()=>{ + var dt = new Date(); + var y = dt.getFullYear(); + var mt = dt.getMonth() + 1; + var day = dt.getDate(); + var h = dt.getHours(); //获取时 + var m = dt.getMinutes(); //获取分 + var s = dt.getSeconds(); //获取秒 + this.time = "当前时间:" + y + "年" + mt + "月" + day + "-" + h + "时" + m + "分" + s + "秒"; + }, 1000); //開始运行 + } + chartsSetOption(){ + this.http.get("/api/StatisticsAnalysis").subscribe((data:any)=>{ + //单位类型统计 + this.unitTypeStatistics = data.companyStatistics.buildingTypeStatistics.buildingTypes + this.unitTypeStatistics.forEach(item => { + item.name = item.buildingTypeName + item.value = item.count + // this.unitTypeOption.legend.data.push(item.buildingTypeName) + }); + this.unitTypeOption.series[0].data = this.unitTypeStatistics + this.myUnitTypeChart.setOption(this.unitTypeOption,true); + //预案状态统计 + this.planStateStatistics = data.planStatistics.planningStatistics + this.planStateOption.series[0].data.push({name:'审核通过',value:data.planStatistics.planningStatistics.approvedCount}) + this.planStateOption.series[0].data.push({name:'已提交',value:data.planStatistics.planningStatistics.committedCount}) + this.planStateOption.series[0].data.push({name:'已公开',value:data.planStatistics.planningStatistics.publicCount}) + this.myPlanStateChart.setOption(this.planStateOption,true); + //各类型预案统计 + this.planTypeStatistics = data.planStatistics.planTypeStatistics + this.planTypeOption.series[0].data.push({name:'卡片预案',value:data.planStatistics.planTypeStatistics.planCardCount}) + this.planTypeOption.series[0].data.push({name:'二维预案',value:data.planStatistics.planTypeStatistics.plan2DCount}) + this.planTypeOption.series[0].data.push({name:'三维预案',value:data.planStatistics.planTypeStatistics.plan3DCount}) + this.planTypeOption.series[0].data.push({name:'其他预案',value:data.planStatistics.planTypeStatistics.planOtherCount}) + this.myPlanTypeChart.setOption(this.planTypeOption,true); + //预案趋势图统计 + this.trendStatistics = data.planStatistics.trendStatistics + // this.trendOption.series = [] + this.trendStatistics.added.forEach(item=>{ + this.trendOption.series[0].data.push(item.count) + }) + this.trendStatistics.modified.forEach(item=>{ + this.trendOption.series[1].data.push(item.count) + }) + this.trendChart.setOption(this.trendOption,true); + + }) + } + ngOnDestroy(){ + window.clearInterval(this.t) //清一遍定时器 + } +} diff --git a/src/app/pages/homedetail/homedetail.component.html b/src/app/pages/homedetail/homedetail.component.html new file mode 100644 index 0000000..e379f6d --- /dev/null +++ b/src/app/pages/homedetail/homedetail.component.html @@ -0,0 +1,70 @@ +
    + + + +
    +
    +
    +
    重点单位总量
    +
    8,666
    +
    +
    +
    数据采集总量
    +
    999,999
    +
    +
    +
    预案编制总量
    +
    345,678
    +
    +
    +
    + + + +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    +
    +
    \ No newline at end of file diff --git a/src/app/pages/homedetail/homedetail.component.scss b/src/app/pages/homedetail/homedetail.component.scss new file mode 100644 index 0000000..a5c924a --- /dev/null +++ b/src/app/pages/homedetail/homedetail.component.scss @@ -0,0 +1 @@ +@import "../../../assets/css/style.css"; \ No newline at end of file diff --git a/src/app/pages/homedetail/homedetail.component.spec.ts b/src/app/pages/homedetail/homedetail.component.spec.ts new file mode 100644 index 0000000..4639de2 --- /dev/null +++ b/src/app/pages/homedetail/homedetail.component.spec.ts @@ -0,0 +1,25 @@ +import { async, ComponentFixture, TestBed } from '@angular/core/testing'; + +import { HomedetailComponent } from './homedetail.component'; + +describe('HomedetailComponent', () => { + let component: HomedetailComponent; + let fixture: ComponentFixture; + + beforeEach(async(() => { + TestBed.configureTestingModule({ + declarations: [ HomedetailComponent ] + }) + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(HomedetailComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/pages/homedetail/homedetail.component.ts b/src/app/pages/homedetail/homedetail.component.ts new file mode 100644 index 0000000..c46e4a3 --- /dev/null +++ b/src/app/pages/homedetail/homedetail.component.ts @@ -0,0 +1,563 @@ +import { Component, OnInit ,ViewChild, AfterViewInit,ElementRef,Renderer2 } from '@angular/core'; +import { HttpClient } from '@angular/common/http' +import { Router,ActivatedRoute } from '@angular/router' +declare var echarts: any; +declare var AMap: any; + +declare var AMapUI: any; + + +@Component({ + selector: 'app-homedetail', + templateUrl: './homedetail.component.html', + styleUrls: ['./homedetail.component.scss'] +}) +export class HomedetailComponent implements OnInit { + + constructor(private http:HttpClient, private render2: Renderer2,public element: ElementRef,private router:Router,private route:ActivatedRoute) { } + + //全队数据采集和预案编制数量统计 + chartQusj:any + chartQusjOption:any = { + + grid: { + top: 50, + left: 30, + right: 20, + bottom: 20, + }, + // 标题 + title: { + text: '全队数据采集和预案编制数量统计', + top: -4, + left:-2 + }, + //图例 + legend: { + top: 0, + right:-2, + // left:3, + data: ['单位预案编制数量', '单位数据采集数量'], + }, + //提示框 + tooltip: { + trigger: 'axis', + }, + // x轴 + xAxis: { + type: 'category', + data: ['1月', '2月', '3月', '4月', '5月', '6月', '7月', '8月', '9月', '10月', '11月', '12月'], + boundaryGap: false, + }, + // y轴 + yAxis: { + type: 'value', + name:'个' + }, + // 数据 + series: [ + { + name: '单位预案编制数量', + type: 'line', + data: [38, 42, 46, 40, 35, 30, 38, 38, 42, 46, 40, 35], + // showSymbol: true, + // symbolSize:6, + // smooth: false, + // label: { + // show: true, + // }, + areaStyle: { + color: { + type: 'linear', + x: 0, + y: 0, + x2: 0, + y2: 1, + colorStops: [{ + offset: 0, + color: 'rgba(60,103,195,1)' // 0% 处的颜色 + }, { + offset: 1, + color: 'rgba(0,194,255,.2)' // 100% 处的颜色 + }], + global: false // 缺省为 false + } + } + }, + { + name: '单位数据采集数量', + type: 'line', + data: [28, 12, 66, 50, 25, 40, 48, 12, 66, 50, 25, 40 ], + }, + ], + }; + //预案单位类型统计 + chartYadwlx:any + data02:any = [{ + value: 335, + name: '类型名称1' + }, + { + value: 110, + name: '类型名称2' + }, + { + value: 274, + name: '类型名称3' + }, + { + value: 235, + name: '视频广告' + }, + { + value: 400, + name: '类型名称4' + } + ]; + chartYadwlxOption:any = { + // 标题 + title: { + text: '预案单位类型统计', + left: '15%', + top:0 + }, + //图例 + legend: { + orient: 'vertical', + top: 'center', + right: '0%', + show: false, + formatter: function (name) { + var target; + for (var i = 0, l = this.data02.length; i < l; i++) { + if (this.data02[i].name == name) { + target = this.data02[i].value; + } + } + return name + ' ' + target; + } + }, + //提示框 + tooltip: { + trigger: 'item', + }, + // 数据 + series: [{ + type: 'pie', + center: ['55%', '55%'], + radius: ['25%', '60%'], + roseType:true, + // labelLine: { + // show: true, + // length: 20, + // length2: 0, + // lineStyle: { + // color: '#999', + // width: 1 + // } + // }, + labelLine:{ + lineStyle:{ + color: '#93FCFF' + } + }, + label: { + //formatter: '{hr|}\n{a|{b}}\n{b|{c}}万吨\n{c|{d}%}', + formatter: '{a|{b}}\n{b|{c}}{c|万吨}\n{d|{d}%}', + rich: { + // hr: { + // borderColor: '#999', + // width: '100%', + // borderWidth: 1, + // marginLeft: '-15px', + // marginRight: '-15px', + // height:0 + // }, + a: { + color: '#1F6F9B', + fontSize: 12, + height: 18, + borderColor: '#999', + //marginTop: '65px', + }, + b: { + color: '#fff', + fontSize: 24, + height: 36, + }, + c: { + color: '#fff', + fontSize: 12, + }, + d: { + color: '#fff', + fontSize: 12, + height: 16, + marginLeft: '5px', + }, + }, + }, + data: [{ + value: 335, + name: '类型名称1' + }, + { + value: 110, + name: '类型名称2' + }, + { + value: 274, + name: '类型名称3' + }, + { + value: 235, + name: '类型名称4' + } + ], + }], + }; + // 预案评优排行 + chartYapyph:any + chartYapyphOption:any = { + // 标题 + title: { + text: '预案评优排行', + left:0 + }, + grid: { + left: 30, + right: 0, + }, + //提示框 + tooltip: { + trigger: 'axis', + }, + // x轴 + xAxis: { + type: 'category', + data: ['机构1', '机构2', '机构3', '机构4', '机构5', '机构6', '机构7'] + }, + // y轴 + yAxis: { + type: 'value', + splitLine: { + show: true, + lineStyle: { + color: '#fff' + } + }, + }, + // 数据 + series: [{ + name: '预案评优', + type: 'bar', + data: [320, 302, 301, 234, 390, 330, 320], + label: { + show: false, + position: "top", + formatter: '{c}', + color: "#fff", + }, + itemStyle: { + color: { + type: 'linear', + x: 0, + y: 0, + x2: 0, + y2: 1, + colorStops: [{ + offset: 0, + color: 'rgba(0,220,254,1)' // 0% 处的颜色 + }, { + offset: 1, + color: 'rgba(1,104,191,1)' // 100% 处的颜色 + }], + globalCoord: false // 缺省为 false + }, + } + } + ], + }; + //预案类型统计 + chartYalxtj:any + chartYalxtjOption:any = { + color: ['#FB33C2', '#00CFF0', '#2C3DE0'], + grid: { + top: 50, + left: 30, + right: 20, + bottom: 20, + }, + // 标题 + title: { + text: '预案类型统计', + top: -4, + left: 0 + }, + //图例 + legend: { + top: 0, + data: ['二维预案', '三维预案', '卡片预案'], + icon:'circle', + itemGap: 20, + }, + //提示框 + tooltip: { + trigger: 'axis', + }, + // x轴 + xAxis: { + type: 'category', + data: ['1月', '2月', '3月', '4月', '5月', '6月', '7月', '8月', '9月', '10月', '11月', '12月'], + boundaryGap: false, + }, + // y轴 + yAxis: { + type: 'value', + }, + // 数据 + series: [{ + name: '二维预案', + type: 'line', + symbolSize: 0, + smooth:true, + lineStyle:{ + width: 4, + color: { + type: 'linear', + x: 0, + y: 0, + x2: 1, + y2: 0, + colorStops: [{ + offset: 0, + color: 'rgba(254,51,194,0)' // 0% 处的颜色 + }, { + offset: 0.5, + color: 'rgba(254,51,194,1)' // 100% 处的颜色 + }, { + offset: 1, + color: 'rgba(254,51,194,0)' // 100% 处的颜色 + }], + global: false // 缺省为 false + } + }, + data: [38, 42, 46, 40, 35, 30, 38, 42, 46, 40, 35, 30 ], + }, + { + name: '三维预案', + type: 'line', + symbolSize: 0, + smooth:true, + lineStyle:{ + width: 4, + color: { + type: 'linear', + x: 0, + y: 0, + x2: 1, + y2: 0, + colorStops: [{ + offset: 0, + color: 'rgba(14,222,252,0)' // 0% 处的颜色 + }, { + offset: 0.5, + color: 'rgba(0,221,255,1)' // 100% 处的颜色 + }, { + offset: 1, + color: 'rgba(1,255,253,0)' // 100% 处的颜色 + }], + global: false // 缺省为 false + }, + }, + data: [28, 72, 66, 50, 25, 40, 48, 66, 50, 25, 40, 48 ], + }, + { + name: '卡片预案', + type: 'line', + symbolSize: 0, + smooth:true, + lineStyle:{ + width: 4, + color: { + type: 'linear', + x: 0, + y: 0, + x2: 1, + y2: 0, + colorStops: [{ + offset: 0, + color: 'rgba(48,63,240,0)' // 0% 处的颜色 + }, { + offset: 0.5, + color: 'rgba(48,63,240,1)' // 100% 处的颜色 + }, { + offset: 1, + color: 'rgba(48,63,240,0)' // 100% 处的颜色 + }], + global: false // 缺省为 false + }, + }, + data: [28, 112, 166, 150, 125, 140, 48, 28, 112, 166, 150, 125 ], + }, + ], + }; + //地图 + + chartMap:any + chartMapOption:any = { + tooltip: { + show: true, + formatter: function (params) { + return params.name + ':' + params.data['value']; + }, + }, + geo: [{ + show: true, + map: 'chongqing', + zoom: 1, + itemStyle: { + areaColor: '#090C15', + borderColor: '#0584DD', + borderWidth: 2, + shadowColor: 'rgba(5, 132, 221, 1)', + shadowBlur: 1, + shadowOffsetX: 2, + shadowOffsetY: 10, + }, + emphasis: { + label: { + color: '#fff', + }, + itemStyle: { + areaColor: '#0584DD', + } + } + }, + { + show: true, + map: 'chongqing', + label: { + show: true, + color: '#fff', + fontSize: 12, + }, + zoom: 1, + itemStyle: { + areaColor: '#090C15', + borderColor: '#0584DD', + }, + emphasis: { + label: { + color: '#fff', + }, + itemStyle: { + areaColor: '#0584DD', + } + } + } + ] + } + + ngOnInit(): void { + setTimeout(() => { + this.chartQusj = echarts.init(this.element.nativeElement.querySelector('#chartQusj'),'skinUpp'); + this.chartQusj.setOption(this.chartQusjOption); + this.chartYadwlx = echarts.init(this.element.nativeElement.querySelector('#chartYadwlx'),'skinUpp'); + this.chartYadwlx.setOption(this.chartYadwlxOption); + this.chartYapyph = echarts.init(this.element.nativeElement.querySelector('#chartYapyph'),'skinUpp'); + this.chartYapyph.setOption(this.chartYapyphOption); + this.chartYalxtj = echarts.init(this.element.nativeElement.querySelector('#chartYalxtj'),'skinUpp'); + this.chartYalxtj.setOption(this.chartYalxtjOption); + this.chartMap = echarts.init(this.element.nativeElement.querySelector('#chartMap')); + console.log(this.chartMapOption) + this.chartMap.setOption(this.chartMapOption); + this.mapInit() //初始化地图 + }, 0); + console.log(echarts) + } + mapInit () { + + //创建地图 + var map = new AMap.Map('chartMap', { + cursor: 'default', + zooms:[7,10], + mapStyle:"amap://styles/grey", + + }); + + var colors = [ + "#3366cc", "#dc3912", "#ff9900", "#109618", "#990099", "#0099c6", "#dd4477", "#66aa00", + "#b82e2e", "#316395", "#994499", "#22aa99", "#aaaa11", "#6633cc", "#e67300", "#8b0707", + "#651067", "#329262", "#5574a6", "#3b3eac" + ]; + + AMapUI.loadUI(['geo/DistrictExplorer'], (DistrictExplorer)=> { + + //创建一个实例 + var districtExplorer = new DistrictExplorer({ + map: map, + eventSupport: true, //打开事件支持 + }); + + var adcode = this.route.snapshot.queryParams.code; + + districtExplorer.loadAreaNode(adcode, (error, areaNode)=>{ + + //更新地图视野 + map.setBounds(areaNode.getBounds(), null, null, true); + + //清除已有的绘制内容 + districtExplorer.clearFeaturePolygons(); + + //绘制子区域 + districtExplorer.renderSubFeatures(areaNode, (feature, i) => { + // console.log(123,feature,i) + var fillColor = colors[i % colors.length]; + var strokeColor = colors[colors.length - 1 - i % colors.length]; + + return { + cursor: 'default', + bubble: true, + strokeColor: strokeColor, //线颜色 + strokeOpacity: 1, //线透明度 + strokeWeight: 1, //线宽 + fillColor: fillColor, //填充色 + fillOpacity: 0.5, //填充透明度 + }; + }); + + let fillColor2 + if(this.route.snapshot.queryParams.level == 'city'){ + fillColor2 = null + }else{ + fillColor2 = '#329262' + } + // console.log(789,fillColor2) + //绘制父区域 + districtExplorer.renderParentFeature(areaNode, { + cursor: 'default', + bubble: true, + strokeColor: 'black', //线颜色 + strokeOpacity: 1, //线透明度 + strokeWeight: 1, //线宽 + fillColor: fillColor2, //填充色 + fillOpacity: 0.5, //填充透明度 + }); + + }); + districtExplorer.on('featureClick', function(e, feature) { + var props = feature.properties; + // //如果存在子节点 + // // if (props.childrenNum > 0) { + // //切换聚焦区域 + // switch2AreaNode(props.adcode); + // // } + console.log(props) + }); + + + }); + + } +} diff --git a/src/app/pages/lockscreen/lockscreen.component.html b/src/app/pages/lockscreen/lockscreen.component.html new file mode 100644 index 0000000..77892b0 --- /dev/null +++ b/src/app/pages/lockscreen/lockscreen.component.html @@ -0,0 +1,22 @@ +
    +
    +
    +

    锁屏

    +
    + + 输入密码 + + lock + +
    +

    + 输入密码以进入 +

    + + +
    +
    +
    diff --git a/src/app/pages/lockscreen/lockscreen.component.scss b/src/app/pages/lockscreen/lockscreen.component.scss new file mode 100644 index 0000000..041d3ab --- /dev/null +++ b/src/app/pages/lockscreen/lockscreen.component.scss @@ -0,0 +1,111 @@ +.pages-lockscreen { + .page-content { + display: inline-block; + width: 400px; + max-width: 100%; + padding: 30px; + } + .avatar { + width: 50px; + height: 50px; + margin: 0 auto; + + img { + border-radius: 50%; + } + + } +} +.layout-full { + position: absolute; + z-index: 0; + width: 100%; + height: 100%; + color: #fff; + font-family: Roboto, sans-serif; + background: url('../../../assets/images/background.jpg'); + &::before { + position: fixed; + top: 0; + left: 0; + z-index: -1; + width: 100%; + height: 100%; + content: ""; + background-position: center top; + background-size: cover; + } + + &::after { + position: fixed; + top: 0; + left: 0; + z-index: -1; + width: 100%; + height: 100%; + content: ""; + background-color: rgba(33, 33, 33, .6); + } + + .page { + position: relative; + height: 100%; + padding: 0; + margin: 0; + background: transparent; + } + +} + + +.auth-box { + + .copyright { + margin-top: 60px; + font-size: 12px; + font-weight: 500; + letter-spacing: 1px; + + p { + margin: 0 0 14px; + } + } + + .social { + mat-icon { + color: #fff; + } + } +} + +.vertical-align { + &::before { + display: inline-block; + height: 100%; + vertical-align: middle; + content: ""; + } + + .vertical-align-middle { + display: inline-block; + vertical-align: middle; + } + +} + +.pages-login { + .page-content { + display: inline-block; + width: 400px; + max-width: 100%; + padding: 30px; + } + +} +.page-content{ + position: absolute; + top: 50%; + left: 50%; + transform: translate(-50%,-50%); + text-align: center; +} \ No newline at end of file diff --git a/src/app/pages/lockscreen/lockscreen.component.spec.ts b/src/app/pages/lockscreen/lockscreen.component.spec.ts new file mode 100644 index 0000000..7f11516 --- /dev/null +++ b/src/app/pages/lockscreen/lockscreen.component.spec.ts @@ -0,0 +1,25 @@ +import { async, ComponentFixture, TestBed } from '@angular/core/testing'; + +import { LockscreenComponent } from './lockscreen.component'; + +describe('LockscreenComponent', () => { + let component: LockscreenComponent; + let fixture: ComponentFixture; + + beforeEach(async(() => { + TestBed.configureTestingModule({ + declarations: [ LockscreenComponent ] + }) + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(LockscreenComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/pages/lockscreen/lockscreen.component.ts b/src/app/pages/lockscreen/lockscreen.component.ts new file mode 100644 index 0000000..fe3258d --- /dev/null +++ b/src/app/pages/lockscreen/lockscreen.component.ts @@ -0,0 +1,24 @@ +import { Component, OnInit } from '@angular/core'; +import { Router,ActivatedRoute } from '@angular/router' +import {CacheTokenService} from '../../http-interceptors/cache-token.service'//引入服务 +@Component({ + selector: 'app-lockscreen', + templateUrl: './lockscreen.component.html', + styleUrls: ['./lockscreen.component.scss'] +}) +export class LockscreenComponent implements OnInit { + + constructor(private router:Router,private route:ActivatedRoute,private getMenus:CacheTokenService) { } + password = '' + ngOnInit() { + } + + open(){ + if(this.password == "12345678"){ + this.router.navigate(['/ui/enterpriseuser']) + } + } + + + +} diff --git a/src/app/pages/login/login.component.html b/src/app/pages/login/login.component.html new file mode 100644 index 0000000..0ed8f33 --- /dev/null +++ b/src/app/pages/login/login.component.html @@ -0,0 +1,54 @@ + \ No newline at end of file diff --git a/src/app/pages/login/login.component.scss b/src/app/pages/login/login.component.scss new file mode 100644 index 0000000..5e378b0 --- /dev/null +++ b/src/app/pages/login/login.component.scss @@ -0,0 +1,87 @@ + +.login { + width: 100%; + height: 100%; + display: flex; + .intro { + flex: 85%; + height: 100%; + background: url('../../../assets/images/background.jpg'); + background-repeat:no-repeat; + background-size:100% 100%; + -moz-background-size:100% 100%; + .text { + padding-top: 3%; + margin-left: 8%; + width: 53%; + } + } + .card{ + flex: 15%; + height: 100%; + background-color: #fff; + } +} + +.example-container { + display: flex; + flex-direction: column; + width: 100%; +} +.loginbtn { + margin-top: 25px; + height: 35px; + background-color:#039be5; + border-radius: 15px; + color: #fff;; +} +.website { + font-size: 14px; + text-align: center; + margin-top: 60px; +} +.alert-danger { + font-size: 14px; + color: red; +} +.cardheader{ + font-size: 26px; + font-weight: 500; + margin-top: 20px; +} +.mat-card { + box-shadow: 0px 0px 0px; + margin-top: 10px; + padding-left: 20px; +} +.mat-form-field { + padding-left: 20px;; +} +.loginImg { + margin-top: 90px; + text-align: center; +} +.mat-input-element { + position: relative; +} +.mat-card .example-container .icon { + width: 24px; + color: #666; + font-size: 24px; + position: absolute; + top:36px; + left: 15px; +} +.mat-card .example-container .icon2 { + width: 24px; + color: #666; + font-size: 24px; + position: absolute; + top:100px; + left: 15px; +} +a { + font-size: 14px; + color: #0066FF; + margin-left: 250px; +} \ No newline at end of file diff --git a/src/app/pages/login/login.component.spec.ts b/src/app/pages/login/login.component.spec.ts new file mode 100644 index 0000000..d6d85a8 --- /dev/null +++ b/src/app/pages/login/login.component.spec.ts @@ -0,0 +1,25 @@ +import { async, ComponentFixture, TestBed } from '@angular/core/testing'; + +import { LoginComponent } from './login.component'; + +describe('LoginComponent', () => { + let component: LoginComponent; + let fixture: ComponentFixture; + + beforeEach(async(() => { + TestBed.configureTestingModule({ + declarations: [ LoginComponent ] + }) + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(LoginComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/pages/login/login.component.ts b/src/app/pages/login/login.component.ts new file mode 100644 index 0000000..6effcb0 --- /dev/null +++ b/src/app/pages/login/login.component.ts @@ -0,0 +1,91 @@ +import { Component, OnInit } from '@angular/core'; +import { HttpClient } from '@angular/common/http' +import { Data } from '../../interface' +import { Router,ActivatedRoute } from '@angular/router' +import {CacheTokenService} from '../../http-interceptors/cache-token.service'//引入服务 +import { MatSnackBar } from '@angular/material/snack-bar'; +import { ConstantPositionProperty } from 'cesium'; + + + +@Component({ + selector: 'app-login', + templateUrl: './login.component.html', + styleUrls: ['./login.component.scss'], +}) +export class LoginComponent implements OnInit { + + constructor(private http:HttpClient,private router:Router,private route:ActivatedRoute,public token:CacheTokenService,public snackBar: MatSnackBar) { } + + ngOnInit() { + this.automaticLogin() + } + + errmsg :string = '' + + onSubmit(e){ + this.http.post('/api/Account/SignIn',{ + name: e.name, + password: e.password}).subscribe( (data: Data) => { + sessionStorage.setItem("level",data.level); + sessionStorage.setItem("token",data.token); + sessionStorage.setItem("refreshToken",data.refreshToken); + sessionStorage.setItem("realName",data.realName); + // this.router.navigate([`/home`]) + this.http.get('/api/Account/NavMenus').subscribe((data:any)=>{ + + let isHave = data.find(item=>{ return item.url == "/home"}) + + if (isHave) { + this.router.navigate([`/home`]) + } else { + data.forEach(item => { + if(item.url){ + this.router.navigate([`/keyUnit`]) + return + } + }); + } + + }) + if(e.notlogin){ //7天免登录时 + localStorage.setItem("isnologin","true") + localStorage.setItem("token",data.token) + localStorage.setItem("refreshToken",data.refreshToken) } + //调用服务中的function刷新token + this.token.startUp() + }, + (err) => {this.errmsg = err} + ) + } + + //7天免登录自动登录 + automaticLogin () { + let isNoLogin = localStorage.getItem("isnologin") + if (isNoLogin) { //7天免登录时 + let token = localStorage.getItem("token"); + let refreshToken = localStorage.getItem("refreshToken"); + this.http.post('/api/Account/RefreshToken', { + token: token, + refreshToken: refreshToken}).subscribe((data:any)=>{ + sessionStorage.setItem("level",data.level); + sessionStorage.setItem("token",data.token); + sessionStorage.setItem("refreshToken",data.refreshToken); + this.token.startUp() + this.router.navigate(['/ui/userdata']) + this.snackBar.open('已自动登录', '确定', {duration: 3000}); + }) + } //if + + } + + //打开弹窗 + open () { + this.snackBar.open('请联系管理员', '确定', { + duration: 3000 + }); + } + + + +} diff --git a/src/app/pages/pages-routing.module.ts b/src/app/pages/pages-routing.module.ts new file mode 100644 index 0000000..1024d73 --- /dev/null +++ b/src/app/pages/pages-routing.module.ts @@ -0,0 +1,21 @@ +import { Routes, RouterModule } from '@angular/router'; +import { NgModule } from '@angular/core'; +import { PagesComponent } from './pages.component'; +import { PersonaldataComponent } from './personaldata/personaldata.component'; +import { HomeComponent } from './home/home.component'; +import { Home2Component } from './home2/home2.component'; +import { HomedetailComponent } from './homedetail/homedetail.component'; + + +const routes: Routes = [ + { path: '', component: HomeComponent}, + { path: '2', component: Home2Component}, + { path: 'detail', component: HomedetailComponent}, + +]; + +@NgModule({ + imports: [RouterModule.forChild(routes)], + exports: [RouterModule] +}) +export class PagesRoutingModule {} diff --git a/src/app/pages/pages.component.html b/src/app/pages/pages.component.html new file mode 100644 index 0000000..c56369e --- /dev/null +++ b/src/app/pages/pages.component.html @@ -0,0 +1 @@ +

    pages works!

    diff --git a/src/app/pages/pages.component.scss b/src/app/pages/pages.component.scss new file mode 100644 index 0000000..e69de29 diff --git a/src/app/pages/pages.component.spec.ts b/src/app/pages/pages.component.spec.ts new file mode 100644 index 0000000..7a864ac --- /dev/null +++ b/src/app/pages/pages.component.spec.ts @@ -0,0 +1,25 @@ +import { async, ComponentFixture, TestBed } from '@angular/core/testing'; + +import { PagesComponent } from './pages.component'; + +describe('PagesComponent', () => { + let component: PagesComponent; + let fixture: ComponentFixture; + + beforeEach(async(() => { + TestBed.configureTestingModule({ + declarations: [ PagesComponent ] + }) + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(PagesComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/pages/pages.component.ts b/src/app/pages/pages.component.ts new file mode 100644 index 0000000..d8ad6cb --- /dev/null +++ b/src/app/pages/pages.component.ts @@ -0,0 +1,15 @@ +import { Component, OnInit } from '@angular/core'; + +@Component({ + selector: 'app-pages', + templateUrl: './pages.component.html', + styleUrls: ['./pages.component.scss'] +}) +export class PagesComponent implements OnInit { + + constructor() { } + + ngOnInit() { + } + +} diff --git a/src/app/pages/pages.module.ts b/src/app/pages/pages.module.ts new file mode 100644 index 0000000..abf0f80 --- /dev/null +++ b/src/app/pages/pages.module.ts @@ -0,0 +1,117 @@ +import { NgModule } from '@angular/core'; +import { CommonModule } from '@angular/common'; +import { PagesComponent } from './pages.component'; +import { LoginComponent } from './login/login.component'; +import { RegisterComponent } from './register/register.component'; +import { PagesRoutingModule } from './pages-routing.module' + + +import {A11yModule} from '@angular/cdk/a11y'; +import {DragDropModule} from '@angular/cdk/drag-drop'; +import {PortalModule} from '@angular/cdk/portal'; +import {ScrollingModule} from '@angular/cdk/scrolling'; +import {CdkStepperModule} from '@angular/cdk/stepper'; +import {CdkTableModule} from '@angular/cdk/table'; +import {CdkTreeModule} from '@angular/cdk/tree'; +import {MatAutocompleteModule} from '@angular/material/autocomplete'; +import {MatBadgeModule} from '@angular/material/badge'; +import {MatBottomSheetModule} from '@angular/material/bottom-sheet'; +import {MatButtonModule} from '@angular/material/button'; +import {MatButtonToggleModule} from '@angular/material/button-toggle'; +import {MatCardModule, MatCardTitle} from '@angular/material/card'; +import {MatCheckboxModule} from '@angular/material/checkbox'; +import {MatChipsModule} from '@angular/material/chips'; +import {MatStepperModule} from '@angular/material/stepper'; +import {MatDatepickerModule} from '@angular/material/datepicker'; +import {MatDialogModule} from '@angular/material/dialog'; +import {MatDividerModule} from '@angular/material/divider'; +import {MatExpansionModule} from '@angular/material/expansion'; +import {MatGridListModule} from '@angular/material/grid-list'; +import {MatIconModule} from '@angular/material/icon'; +import {MatInputModule} from '@angular/material/input'; +import {MatListModule} from '@angular/material/list'; +import {MatMenuModule} from '@angular/material/menu'; +import {MatNativeDateModule, MatRippleModule} from '@angular/material/core'; +import {MatPaginatorModule} from '@angular/material/paginator'; +import {MatProgressBarModule} from '@angular/material/progress-bar'; +import {MatProgressSpinnerModule} from '@angular/material/progress-spinner'; +import {MatRadioModule} from '@angular/material/radio'; +import {MatSelectModule} from '@angular/material/select'; +import {MatSidenavModule} from '@angular/material/sidenav'; +import {MatSliderModule} from '@angular/material/slider'; +import {MatSlideToggleModule} from '@angular/material/slide-toggle'; +import {MatSnackBarModule} from '@angular/material/snack-bar'; +import {MatSortModule} from '@angular/material/sort'; +import {MatTableModule} from '@angular/material/table'; +import {MatTabsModule} from '@angular/material/tabs'; +import {MatToolbarModule} from '@angular/material/toolbar'; +import {MatTooltipModule} from '@angular/material/tooltip'; +import {MatTreeModule} from '@angular/material/tree'; +import { FormGroup, FormsModule, ReactiveFormsModule } from '@angular/forms'; +import { PersonaldataComponent } from './personaldata/personaldata.component'; +import { RouterModule } from '@angular/router'; +import { LockscreenComponent } from './lockscreen/lockscreen.component'; +import { HomeComponent } from './home/home.component'; +import { Home2Component } from './home2/home2.component'; +import { HomedetailComponent } from './homedetail/homedetail.component'; +// import { PagesRoutingModule } from './pages-routing.module'; + + +@NgModule({ + declarations: [PagesComponent, LoginComponent, RegisterComponent, LockscreenComponent, HomeComponent, Home2Component, HomedetailComponent], + imports: [ + + PagesRoutingModule, + CommonModule, + + A11yModule, + CdkStepperModule, + CdkTableModule, + CdkTreeModule, + DragDropModule, + MatAutocompleteModule, + MatBadgeModule, + MatBottomSheetModule, + MatButtonModule, + MatButtonToggleModule, + MatCardModule, + + MatCheckboxModule, + MatChipsModule, + MatStepperModule, + MatDatepickerModule, + MatDialogModule, + MatDividerModule, + MatExpansionModule, + MatGridListModule, + MatIconModule, + MatInputModule, + MatListModule, + MatMenuModule, + MatNativeDateModule, + MatPaginatorModule, + MatProgressBarModule, + MatProgressSpinnerModule, + MatRadioModule, + MatRippleModule, + MatSelectModule, + MatSidenavModule, + MatSliderModule, + MatSlideToggleModule, + MatSnackBarModule, + MatSortModule, + MatTableModule, + MatTabsModule, + MatToolbarModule, + MatTooltipModule, + MatTreeModule, + PortalModule, + ScrollingModule, + + FormsModule, + ReactiveFormsModule, + RouterModule + // PagesRoutingModule, + ] +}) +export class PagesModule { } diff --git a/src/app/pages/personaldata/personaldata.component.html b/src/app/pages/personaldata/personaldata.component.html new file mode 100644 index 0000000..4e0fb3e --- /dev/null +++ b/src/app/pages/personaldata/personaldata.component.html @@ -0,0 +1,280 @@ +
    +
    + + + + 安信科创 + 嘻嘻嘻嘻 +

    + 不要做程序员,要做问题解决者 +

    +
    + + + + +
    + +
    + +
    + 260 + 粉丝 +
    +
    + 180 + 关注 +
    +
    + 2000 + 博客 +
    +
    +
    + + + + + + +
    + +
    +
    我是假数据 + 我是假数据 +
    + 我是假数据 +
    +
    +
    + 我是假数据 +
    +
    + +
    + +
    +
    我是假数据 + 我是假数据 +
    + 我是假数据 +
    +
    +
    + + + + +
    +
    + +
    + +
    +
    我是假数据 + 我是假数据 +
    + 我是假数据 +
    +
    +
    + + 我是假数据 +
    +
    + +
    + +
    +
    我是假数据 + 我是假数据 +
    + 我是假数据 +
    +
    +
    + 我是假数据 +
    +
    + +
    + +
    +
    我是假数据 + 我是假数据 +
    + 我是假数据 +
    +
    +
    + 我是假数据 +
    +
    +
    +
    + +
    +
    + + + +
    + +
    +
    我是假数据 + 我是假数据 +
    + 我是假数据 +
    +
    +
    + + 我是假数据 +
    +
    + +
    + +
    +
    我是假数据 + 我是假数据 +
    + 我是假数据 +
    +
    +
    + 我是假数据 +
    +
    + + + +
    + +
    +
    我是假数据 + 我是假数据 +
    + 我是假数据 +
    +
    +
    + 我是假数据 +
    +
    + +
    + +
    +
    我是假数据 + 我是假数据 +
    + 我是假数据 +
    +
    +
    + 我是假数据 +
    +
    + +
    + +
    +
    我是假数据 + 我是假数据 +
    + 我是假数据 +
    +
    +
    + + + + +
    +
    +
    +
    + + + +
    + +
    +
    我是假数据 + 我是假数据 +
    + 我是假数据 +
    +
    +
    + 我是假数据 +
    +
    + +
    + +
    +
    我是假数据 + 我是假数据 +
    + 我是假数据 +
    +
    +
    + + 我是假数据 +
    +
    + +
    + +
    +
    我是假数据 + 我是假数据 +
    + 我是假数据 +
    +
    +
    + + + + +
    +
    + +
    + +
    +
    我是假数据 + 我是假数据 +
    + 我是假数据 +
    +
    +
    + 我是假数据 +
    +
    + +
    + +
    +
    我是假数据 + 我是假数据 +
    + 我是假数据 +
    +
    +
    + 我是假数据 +
    +
    +
    +
    +
    +
    +
    +
    diff --git a/src/app/pages/personaldata/personaldata.component.scss b/src/app/pages/personaldata/personaldata.component.scss new file mode 100644 index 0000000..674904d --- /dev/null +++ b/src/app/pages/personaldata/personaldata.component.scss @@ -0,0 +1,110 @@ + +#xxx{ + display: flex; + justify-content: space-around; +} +.pages-profile { + padding: 30px; + + .profile-card { + padding: 9px; + text-align: center; + font-family: Roboto, sans-serif; + width: 500px; + height: 600px; + mat-card-content { + padding: 40px 15px; + margin: 0; + } + + .mat-card-avatar { + width: 130px; + height: 130px; + margin-bottom: 10px; + } + + .profile-user { + margin: 10px 0; + font-weight: normal; + } + + .profile-job { + margin-bottom: 20px; + color: #9e9e9e; + font-weight: 500; + } + + .profile-introduction { + margin: 0 0 1rem; + color: #757575; + } + + .profile-social { + margin: 25px 0; + + mat-icon { + margin: 0 10px; + color: rgba(66, 66, 66, .4); + } + } + + mat-card-actions { + padding: 10px; + background: #f6f9fd; + } + + .profile-card-footer { + display: flex; + justify-content: space-around; + .profile-stat-count { + display: block; + margin-bottom: 3px; + font-size: 20px; + font-weight: bold; + color: #616161; + + +span { + color: #9e9e9e; + } + } + } + + } + + .profile-board { + padding: 30px; + width: 500px; + mat-list { + padding-bottom: 20px; + } + + mat-list-item { + height: auto; + padding: 25px 0; + margin-left: -16px; + border-bottom: 1px solid #dfe0df; + + .profile-item-content { + padding: 20px 0 0 56px; + line-height: 1.571429; + color: #757575; + white-space: normal; + display: flex; + flex-wrap: wrap; + + img { + width: 100%; + max-width: 220px; + max-height: 150px; + padding: 0 20px 20px 0; + } + } + } + } + + .show-more-btn { + width: 100%; + background-color: #eee; + color: #3949ab; + } +} \ No newline at end of file diff --git a/src/app/pages/personaldata/personaldata.component.spec.ts b/src/app/pages/personaldata/personaldata.component.spec.ts new file mode 100644 index 0000000..cf44bea --- /dev/null +++ b/src/app/pages/personaldata/personaldata.component.spec.ts @@ -0,0 +1,25 @@ +import { async, ComponentFixture, TestBed } from '@angular/core/testing'; + +import { PersonaldataComponent } from './personaldata.component'; + +describe('PersonaldataComponent', () => { + let component: PersonaldataComponent; + let fixture: ComponentFixture; + + beforeEach(async(() => { + TestBed.configureTestingModule({ + declarations: [ PersonaldataComponent ] + }) + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(PersonaldataComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/pages/personaldata/personaldata.component.ts b/src/app/pages/personaldata/personaldata.component.ts new file mode 100644 index 0000000..28d9b93 --- /dev/null +++ b/src/app/pages/personaldata/personaldata.component.ts @@ -0,0 +1,15 @@ +import { Component, OnInit } from '@angular/core'; + +@Component({ + selector: 'app-personaldata', + templateUrl: './personaldata.component.html', + styleUrls: ['./personaldata.component.scss'] +}) +export class PersonaldataComponent implements OnInit { + + constructor() { } + + ngOnInit() { + } + +} diff --git a/src/app/pages/register/register.component.html b/src/app/pages/register/register.component.html new file mode 100644 index 0000000..4439983 --- /dev/null +++ b/src/app/pages/register/register.component.html @@ -0,0 +1,81 @@ + \ No newline at end of file diff --git a/src/app/pages/register/register.component.scss b/src/app/pages/register/register.component.scss new file mode 100644 index 0000000..aed8113 --- /dev/null +++ b/src/app/pages/register/register.component.scss @@ -0,0 +1,88 @@ +.login { + width: 100%; + height: 100%; + background: url('../../../assets/images/background.jpg'); + + .loginbox { + width: 100%; + height: 100%; + background-color: #000; + background: rgba(0,0,0,0.5);/*盒子背景透明*/ + // opacity: 0.5; + position: relative; + } + + .intro { + width: 650px; + // height: 350px; + position: fixed; + top:35%; + left: 15%; + p { + font-size: 36px; + color:white; + margin-bottom: 35px; + } + span { + font-size: 16px; + color:white; + opacity: 0.5; + } + } + + .card{ + width: 460px; + height: 100%; + padding-left: 20px; + background-color: #fff; + position: absolute; + right: 0; + p { + width: 100%; + margin: 18px 0; + } + .cardheader{ + font-size: 26px; + font-weight: 500; + } + + } + +} + +.example-container { + display: flex; + flex-direction: column; +} + +.example-container > * { + width: 100%; +} +.loginbtn { + margin-top: 18px; + height: 35px; + background-color:#039be5; + border-radius: 15px; + color: #fff;; +} +.mat-card { + box-shadow: 0 0 0; + margin-top: 70px; +} + +.applyfor { + font-size: 16px; + a { + color: #039be5; + } +} + +.website { + font-size: 14px; + text-align: center; + margin-top: 50px; +} +.alert-danger { + font-size: 14px; + color: red; +} \ No newline at end of file diff --git a/src/app/pages/register/register.component.spec.ts b/src/app/pages/register/register.component.spec.ts new file mode 100644 index 0000000..6c19551 --- /dev/null +++ b/src/app/pages/register/register.component.spec.ts @@ -0,0 +1,25 @@ +import { async, ComponentFixture, TestBed } from '@angular/core/testing'; + +import { RegisterComponent } from './register.component'; + +describe('RegisterComponent', () => { + let component: RegisterComponent; + let fixture: ComponentFixture; + + beforeEach(async(() => { + TestBed.configureTestingModule({ + declarations: [ RegisterComponent ] + }) + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(RegisterComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/pages/register/register.component.ts b/src/app/pages/register/register.component.ts new file mode 100644 index 0000000..6f9552f --- /dev/null +++ b/src/app/pages/register/register.component.ts @@ -0,0 +1,19 @@ +import { Component, OnInit } from '@angular/core'; + +@Component({ + selector: 'app-register', + templateUrl: './register.component.html', + styleUrls: ['./register.component.scss'] +}) +export class RegisterComponent implements OnInit { + + constructor() { } + + ngOnInit() { + } + + onSubmit(e){ + // console.log(e) + } + +} diff --git a/src/app/pipes/boolean.pipe.ts b/src/app/pipes/boolean.pipe.ts new file mode 100644 index 0000000..56b7930 --- /dev/null +++ b/src/app/pipes/boolean.pipe.ts @@ -0,0 +1,32 @@ +import { Pipe, PipeTransform } from '@angular/core'; +import { isno , PlanTypeEnum , AuditStatusEnum , PlanLevelEnum} from '../interface' +@Pipe({name: 'isno'}) +export class IsnoPipe implements PipeTransform { + transform(value: boolean): string { + if(value){ + var x = 0 + }else{ + x=1 + } + return isno[x] + } +} +@Pipe({name: 'plantype'}) +export class PlanType implements PipeTransform { + transform(value: number): string { + return PlanTypeEnum[value] + } +} + +@Pipe({name: 'auditsatus'}) +export class AuditSatus implements PipeTransform { + transform(value: number): string { + return AuditStatusEnum[value] + } +} +@Pipe({name: 'planlevel'}) +export class PlanLevel implements PipeTransform { + transform(value: number): string { + return PlanLevelEnum[value] + } +} \ No newline at end of file diff --git a/src/app/pipes/time.pipe.ts b/src/app/pipes/time.pipe.ts new file mode 100644 index 0000000..23882b6 --- /dev/null +++ b/src/app/pipes/time.pipe.ts @@ -0,0 +1,9 @@ +import { Pipe, PipeTransform } from '@angular/core'; + +@Pipe({name: 'time'}) +export class TimePipe implements PipeTransform { + transform(value: string): string { + var newtime = value.substr(0,4) + '-' + value.substr(5,2) + '-' + value.substr(8,2) + return newtime + } +} \ No newline at end of file diff --git a/src/app/plan-audit/detachment-level/detachment-level.component.html b/src/app/plan-audit/detachment-level/detachment-level.component.html new file mode 100644 index 0000000..20ff8cc --- /dev/null +++ b/src/app/plan-audit/detachment-level/detachment-level.component.html @@ -0,0 +1,161 @@ +
    +
    +
    +
    + + + + +
    + +
    + + + + + 包含下级 + +
    +
    clear
    + + + +
  • {{node.name}}
  • +
    + + +
  • {{node.name}}
  • +
    +
    +
    + +
    + +
    + + + + + {{unit.name}} + + + +
    + +
    + + + + + {{plan.name}} + + + +
    + +
    + + + + + {{state.name}} + + + +
    + +
    + +
    + + +
    +
    +
    + + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    单位名称{{element.companyName}}预案名称{{element.name}}添加人{{element.creatorName}}添加时间 + {{element.creationTime|date:'yyyy-MM-dd'}} + 预案类型 + + + + + 审核状态 + + + + + 是否公开{{element.openRange}}编制级别 + + + + + 操作 + + + + +
    + + +
    +
    \ No newline at end of file diff --git a/src/app/plan-audit/detachment-level/detachment-level.component.scss b/src/app/plan-audit/detachment-level/detachment-level.component.scss new file mode 100644 index 0000000..e69de29 diff --git a/src/app/plan-audit/detachment-level/detachment-level.component.spec.ts b/src/app/plan-audit/detachment-level/detachment-level.component.spec.ts new file mode 100644 index 0000000..568d65b --- /dev/null +++ b/src/app/plan-audit/detachment-level/detachment-level.component.spec.ts @@ -0,0 +1,25 @@ +import { async, ComponentFixture, TestBed } from '@angular/core/testing'; + +import { DetachmentLevelComponent } from './detachment-level.component'; + +describe('DetachmentLevelComponent', () => { + let component: DetachmentLevelComponent; + let fixture: ComponentFixture; + + beforeEach(async(() => { + TestBed.configureTestingModule({ + declarations: [ DetachmentLevelComponent ] + }) + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(DetachmentLevelComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/plan-audit/detachment-level/detachment-level.component.ts b/src/app/plan-audit/detachment-level/detachment-level.component.ts new file mode 100644 index 0000000..6973614 --- /dev/null +++ b/src/app/plan-audit/detachment-level/detachment-level.component.ts @@ -0,0 +1,248 @@ +import { Component, OnInit, ViewChild, Inject } from '@angular/core'; +import { HttpClient } from '@angular/common/http' +import { MatTreeFlatDataSource, MatTreeFlattener } from '@angular/material/tree'; +import { MatPaginator } from '@angular/material/paginator'; +import { FlatTreeControl } from '@angular/cdk/tree'; +import { FormControl } from '@angular/forms'; +import { Router,ActivatedRoute } from '@angular/router' +import { PageEvent } from '@angular/material/paginator'; +import { MatDialogRef, MatDialog, MAT_DIALOG_DATA } from '@angular/material/dialog'; +import { MatSnackBar, MatSnackBarConfig } from '@angular/material/snack-bar'; +import { TreeService } from '../../http-interceptors/tree.service' + + +export interface Food { + name:string; + value: string; +} +@Component({ + selector: 'app-detachment-level', + templateUrl: './detachment-level.component.html', + styleUrls: ['../plan-audit/plan-audit.component.scss'] +}) +export class DetachmentLevelComponent implements OnInit { + + constructor(private http:HttpClient,private router:Router,private route:ActivatedRoute,private tree: TreeService,public dialog: MatDialog,public snackBar: MatSnackBar) { } + + private _transformer = (node, level: number) => { //初始化tree + return { + expandable: !!node.children && node.children.length > 0, + name: node.name, + level: level, + id: node.id, + parentId: node.parentId, + children: node.children + }; + } + treeControl = new FlatTreeControl(node => node.level, node => node.expandable); + treeFlattener = new MatTreeFlattener(this._transformer, node => node.level, node => node.expandable, node => node.children); + dataSource = new MatTreeFlatDataSource(this.treeControl, this.treeFlattener); + myControl = new FormControl(); + hasChild = (_: number, node: any) => node.expandable; + + organizationName:any //当前单位所属辖区中队名称 + allunittype:any //所有单位类型 + planpatterns:Food[] = [ //预案类型 + {name:"卡片预案",value:"8"}, + {name:"二维预案",value:"1" }, + {name:"三维预案",value:"2" }, + {name:"其他预案",value:"4" },] + passstates:Food[]=[ //审核状态 + {name:"审核中",value:"1"}, + {name:"审核通过",value:"2"}, + {name:"审核退回",value:"4"},] + + displayedColumns: string[] = ['unitname','planname', 'addpeople', 'addtime','plantype','auditstate', 'isopen','preparethelevel','operation']; + tabledataSource:any; //所有预案审核信息 + + //分页 + @ViewChild(MatPaginator, {static: true}) + pageEvent: PageEvent; + paginator: MatPaginator; + length:any; //共多少条数据 + pageSize:any; //每页条数 + pageSizeOptions: number[] = [10] //设置每页条数 + PageNumber:number = 1; //第几页 + + //查询筛选条件 + CompanyName:any; //单位名称 + selectOrganizationID:any //选中的辖区中队id + selectOrganizationIName:any //选中的辖区中队name + HasChildrenOrganization:boolean = false; //辖区中队是否包含下级 + BuildingTypeId:any; //选中的单位类型 + PlanType:any; //选中的预案类型 + AuditStatus:any = '1'; //选中的审核状态 + PlanLevel:any='2'; //选中的编制级别 + + //分页事件 + chagePage(e){ + this.PageNumber = e.pageIndex + 1 + let header = { + CompanyName: this.CompanyName || '', + OrganizationId: this.selectOrganizationID || '', + HasChildrenOrganization: String(this.HasChildrenOrganization) || 'false', + BuildingTypeId: this.BuildingTypeId || '', + PlanType: this.PlanType || '', + AuditStatus: this.AuditStatus || '1', + PlanLevel: this.PlanLevel || '2', + PageNumber: String(this.PageNumber), + } + this.http.get('/api/PlanAudits',{params:header}).subscribe((data:any)=>{ + this.length = data.totalCount + this.pageSize = data.pageSize + this.tabledataSource = data.items + }) + } + + //查询 + onSubmit(e){ + this.getAllPlanAudits() + } + + //重置 + reset () { + this.CompanyName = '' + this.selectOrganizationID = '' + this.selectOrganizationIName = '' + this.HasChildrenOrganization = false + this.BuildingTypeId = '' + this.PlanType = '', + this.AuditStatus = '1', + this.PlanLevel = '2', + this.getAllPlanAudits() + } + + //获取当前所有预案审核 + getAllPlanAudits () { + let header = { + CompanyName: this.CompanyName || '', + OrganizationId: this.selectOrganizationID || '', + HasChildrenOrganization: String(this.HasChildrenOrganization) || 'false', + BuildingTypeId: this.BuildingTypeId || '', + PlanType: this.PlanType || '', + AuditStatus: this.AuditStatus || '1', + PlanLevel: this.PlanLevel || '2', + PageNumber: '1', + } + this.http.get('/api/PlanAudits',{params:header}).subscribe((data:any)=>{ + this.length = data.totalCount + this.pageSize = data.pageSize + this.pageEvent.pageIndex = 0 + this.tabledataSource = data.items + }) + } + + ngOnInit(): void { + this.getunitdata(); + this.getOrganizations(); + this.getUnittype(); + this.getAllPlanAudits() + } + + //得到当前账号所属辖区中队名称 + getunitdata(){ + this.http.get("/api/Account/Profiles").subscribe((data:any)=>{ + this.organizationName = data.organizationName + }) + } + + //获得所有辖区中队(处理数据结构) + getOrganizations(){ + let treeData = [] + this.http.get('/api/Organizations').subscribe((data:any)=>{ + data.forEach(element => { + element.children = [] + data.forEach(item => { if (item.parentId == element.id) {element.children.push(item)} }); + }); + if (this.organizationName) { //当前账号有辖区中队时 + data.forEach(element => { + if (element.name===this.organizationName) { + treeData.push(element) + this.dataSource.data = treeData } + }); + } else { //当前账号没有有辖区中队时 + data.forEach(element => { + if (!element.parentId) { + treeData.push(element) + this.dataSource.data = treeData } + }); + } + + }) + } + + //获得所有单位类型 + getUnittype(){ + this.http.get('/api/BuildingTypes/Simple').subscribe(data=>{ + this.allunittype = data + }) + } + + isorganizationbox:boolean = false //辖区中队DIV显隐 + + //打开辖区中队 + openorganizationbox() { + this.isorganizationbox = true + } + + //关闭辖区中队 + closediv(){ + this.isorganizationbox = false + } + + //选择辖区中队时 + add(node) { + this.selectOrganizationID = node.id + this.selectOrganizationIName = node.name + this.isorganizationbox = false + } + + //预案审核 + toExamine (e) { + window.open(`/planAudit/planpass?id=${e.companyId}&companyName=${e.companyName}&auditPlanId=${e.id}&auditStatus=${e.auditStatus}`); + } + + //预案公开 + openReserve (e) { + this.http.put(`/api/PlanAudits/${e.id}/Public`,[]).subscribe(data=>{ + const config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.snackBar.open('预案公开成功','确定',config); + this.renew() + }) + } + + //预案取消公开 + closeReserve (e) { + this.http.put(`/api/PlanAudits/${e.id}/Unpublic`,[]).subscribe(data=>{ + const config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.snackBar.open('预案已取消公开','确定',config); + this.renew() + }) + } + + //按查询条件及分页 更新当前页面 + renew () { + let header = { + CompanyName: this.CompanyName || '', + OrganizationId: this.selectOrganizationID || '', + HasChildrenOrganization: String(this.HasChildrenOrganization) || 'false', + BuildingTypeId: this.BuildingTypeId || '', + PlanType: this.PlanType || '', + AuditStatus: this.AuditStatus || '1', + PlanLevel: this.PlanLevel || '2', + PageNumber: String(this.PageNumber), + } + this.http.get('/api/PlanAudits',{params:header}).subscribe((data:any)=>{ + this.length = data.totalCount + this.pageSize = data.pageSize + this.tabledataSource = data.items + }) + } + + + +} diff --git a/src/app/plan-audit/plan-audit-routing.module.ts b/src/app/plan-audit/plan-audit-routing.module.ts new file mode 100644 index 0000000..4069bfa --- /dev/null +++ b/src/app/plan-audit/plan-audit-routing.module.ts @@ -0,0 +1,17 @@ +import { NgModule } from '@angular/core'; +import { Routes, RouterModule } from '@angular/router'; +import {DetachmentLevelComponent} from './detachment-level/detachment-level.component' +import { PlanAuditComponent } from './plan-audit/plan-audit.component'; +import { PlanPassComponent } from './plan-pass/plan-pass.component'; + +const routes: Routes = [ + { path: 'detachmentLevel', component: DetachmentLevelComponent }, + { path: 'planaudit', component: PlanAuditComponent }, + { path: 'planpass', component: PlanPassComponent }, +]; + +@NgModule({ + imports: [RouterModule.forChild(routes)], + exports: [RouterModule] +}) +export class PlanAuditRoutingModule { } diff --git a/src/app/plan-audit/plan-audit.module.ts b/src/app/plan-audit/plan-audit.module.ts new file mode 100644 index 0000000..c8bbc2a --- /dev/null +++ b/src/app/plan-audit/plan-audit.module.ts @@ -0,0 +1,104 @@ +import { NgModule } from '@angular/core'; +import { CommonModule } from '@angular/common'; +import { PlanAuditRoutingModule } from './plan-audit-routing.module'; +import { DetachmentLevelComponent } from './detachment-level/detachment-level.component'; + +import {A11yModule} from '@angular/cdk/a11y'; +import {DragDropModule} from '@angular/cdk/drag-drop'; +import {PortalModule} from '@angular/cdk/portal'; +import {ScrollingModule} from '@angular/cdk/scrolling'; +import {CdkStepperModule} from '@angular/cdk/stepper'; +import {CdkTableModule} from '@angular/cdk/table'; +import {CdkTreeModule} from '@angular/cdk/tree'; +import {MatAutocompleteModule} from '@angular/material/autocomplete'; +import {MatBadgeModule} from '@angular/material/badge'; +import {MatBottomSheetModule} from '@angular/material/bottom-sheet'; +import {MatButtonModule} from '@angular/material/button'; +import {MatButtonToggleModule} from '@angular/material/button-toggle'; +import {MatCardModule} from '@angular/material/card'; +import {MatCheckboxModule} from '@angular/material/checkbox'; +import {MatChipsModule} from '@angular/material/chips'; +import {MatStepperModule} from '@angular/material/stepper'; +import {MatDatepickerModule} from '@angular/material/datepicker'; +import {MatDialogModule} from '@angular/material/dialog'; +import {MatDividerModule} from '@angular/material/divider'; +import {MatExpansionModule} from '@angular/material/expansion'; +import {MatGridListModule} from '@angular/material/grid-list'; +import {MatIconModule} from '@angular/material/icon'; +import {MatInputModule} from '@angular/material/input'; +import {MatListModule} from '@angular/material/list'; +import {MatMenuModule} from '@angular/material/menu'; +import {MatNativeDateModule, MatRippleModule, MatOption} from '@angular/material/core'; +import {MatPaginatorModule} from '@angular/material/paginator'; +import {MatProgressBarModule} from '@angular/material/progress-bar'; +import {MatProgressSpinnerModule} from '@angular/material/progress-spinner'; +import {MatRadioModule} from '@angular/material/radio'; +import {MatSelectModule} from '@angular/material/select'; +import {MatSidenavModule} from '@angular/material/sidenav'; +import {MatSliderModule} from '@angular/material/slider'; +import {MatSlideToggleModule} from '@angular/material/slide-toggle'; +import {MatSnackBarModule} from '@angular/material/snack-bar'; +import {MatSortModule} from '@angular/material/sort'; +import {MatTableModule} from '@angular/material/table'; +import {MatTabsModule} from '@angular/material/tabs'; +import {MatToolbarModule} from '@angular/material/toolbar'; +import {MatTooltipModule} from '@angular/material/tooltip'; +import {MatTreeModule} from '@angular/material/tree'; +import { PlanAuditComponent, PlanOpen } from './plan-audit/plan-audit.component'; +import { FormsModule } from '@angular/forms'; +import { PlanPassComponent } from './plan-pass/plan-pass.component'; +import {ViewUnitDetailsPlanComponent} from '../key-unit/view-unit-details-plan/view-unit-details-plan.component' +import {KeyUnitModule} from '../key-unit/key-unit.module' + +@NgModule({ + declarations: [DetachmentLevelComponent, PlanAuditComponent, PlanPassComponent,PlanOpen,], + imports: [ + CommonModule, + PlanAuditRoutingModule, + A11yModule, + CdkStepperModule, + CdkTableModule, + CdkTreeModule, + DragDropModule, + MatAutocompleteModule, + MatBadgeModule, + MatBottomSheetModule, + MatButtonModule, + MatButtonToggleModule, + MatCardModule, + MatCheckboxModule, + MatChipsModule, + MatStepperModule, + MatDatepickerModule, + MatDialogModule, + MatDividerModule, + MatExpansionModule, + MatGridListModule, + MatIconModule, + MatInputModule, + MatListModule, + MatMenuModule, + MatNativeDateModule, + MatPaginatorModule, + MatProgressBarModule, + MatProgressSpinnerModule, + MatRadioModule, + MatRippleModule, + MatSelectModule, + MatSidenavModule, + MatSliderModule, + MatSlideToggleModule, + MatSnackBarModule, + MatSortModule, + MatTableModule, + MatTabsModule, + MatToolbarModule, + MatTooltipModule, + MatTreeModule, + PortalModule, + ScrollingModule, + FormsModule, + KeyUnitModule + ] +}) +export class PlanAuditModule { } diff --git a/src/app/plan-audit/plan-audit/plan-audit.component.html b/src/app/plan-audit/plan-audit/plan-audit.component.html new file mode 100644 index 0000000..75b1a2d --- /dev/null +++ b/src/app/plan-audit/plan-audit/plan-audit.component.html @@ -0,0 +1,173 @@ +
    +
    +
    +
    + + + + +
    + +
    + + + + + 包含下级 + +
    +
    clear
    + + + +
  • {{node.name}}
  • +
    + + +
  • {{node.name}}
  • +
    +
    +
    + +
    + +
    + + + + + {{unit.name}} + + + +
    + +
    + + + + + {{plan.name}} + + + +
    + +
    + + + + + {{state.name}} + + + +
    + +
    + + + + + {{level.name}} + + + + 包含下级 +
    + +
    + +
    + + +
    +
    +
    + + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    单位名称{{element.companyName}}预案名称{{element.name}}添加人{{element.creatorName}}添加时间 + {{element.creationTime|date:'yyyy-MM-dd'}} + 预案类型 + + + + + 审核状态 + + + + + 是否公开{{element.openRange}}编制级别 + + + + + 操作 + + + + +
    + + +
    +
    \ No newline at end of file diff --git a/src/app/plan-audit/plan-audit/plan-audit.component.scss b/src/app/plan-audit/plan-audit/plan-audit.component.scss new file mode 100644 index 0000000..313ca71 --- /dev/null +++ b/src/app/plan-audit/plan-audit/plan-audit.component.scss @@ -0,0 +1,83 @@ +.header { + width: 100%; + padding: 10px 10px; + box-sizing: border-box; + .queryBox { + box-sizing: border-box; + padding: 5px 25px; + display: flex; + flex-direction: row; + flex-wrap: wrap; + align-items:center; + .queryField { + margin: 3px 40px; + input { + width: 180px; + height: 22px; + line-height: 22px; + border-radius: 3px;} + } + } //queryBox + + .ordiv{ //辖区中队 + position: relative; + .organizationbox{ + width:450px; + height: 200px; + background: white; + position: absolute; + top: 48px; + left: 77px; + z-index: 999; + border: 1px solid grey; + overflow-y: auto; + li{ + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + } + mat-tree-node{ + cursor: pointer; + white-space:pre; + } + mat-tree-node:hover{ + background: rgba(225, 225, 225, 0.8); + } + .closediv{ + z-index: 100; + position: absolute; + right: 0; + top: 0; + width: 30px; + height: 30px; + cursor: pointer; + line-height: 30px; + text-align: center; + } + .closediv:hover{ + background:rgba(225, 225, 225, 0.8); + } + } + } //ordiv + +} //header + +.body{ + .tablebox{ + overflow-y: auto; + table { + width: 100%; + text-align: center; + .cdk-header-cell { text-align: center;} + } + } //tablebox + +} + +textarea { + border-radius: 5px; + padding: 5px; + width: 300px; + height: 100px; + resize: none; +} \ No newline at end of file diff --git a/src/app/plan-audit/plan-audit/plan-audit.component.spec.ts b/src/app/plan-audit/plan-audit/plan-audit.component.spec.ts new file mode 100644 index 0000000..64d9c20 --- /dev/null +++ b/src/app/plan-audit/plan-audit/plan-audit.component.spec.ts @@ -0,0 +1,25 @@ +import { async, ComponentFixture, TestBed } from '@angular/core/testing'; + +import { PlanAuditComponent } from './plan-audit.component'; + +describe('PlanAuditComponent', () => { + let component: PlanAuditComponent; + let fixture: ComponentFixture; + + beforeEach(async(() => { + TestBed.configureTestingModule({ + declarations: [ PlanAuditComponent ] + }) + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(PlanAuditComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/plan-audit/plan-audit/plan-audit.component.ts b/src/app/plan-audit/plan-audit/plan-audit.component.ts new file mode 100644 index 0000000..fa9e7e9 --- /dev/null +++ b/src/app/plan-audit/plan-audit/plan-audit.component.ts @@ -0,0 +1,317 @@ +import { Component, OnInit, ViewChild, Inject } from '@angular/core'; +import { HttpClient } from '@angular/common/http' +import { MatTreeFlatDataSource, MatTreeFlattener } from '@angular/material/tree'; +import { MatPaginator } from '@angular/material/paginator'; +import { FlatTreeControl } from '@angular/cdk/tree'; +import { FormControl } from '@angular/forms'; +import { Router,ActivatedRoute } from '@angular/router' +import { PageEvent } from '@angular/material/paginator'; +import { MatDialogRef, MatDialog, MAT_DIALOG_DATA } from '@angular/material/dialog'; +import { MatSnackBar, MatSnackBarConfig } from '@angular/material/snack-bar'; +import { TreeService } from '../../http-interceptors/tree.service' + + + +export interface Food { + name:string; + value: string; +} +@Component({ + selector: 'app-plan-audit', + templateUrl: './plan-audit.component.html', + styleUrls: ['./plan-audit.component.scss'] +}) +export class PlanAuditComponent implements OnInit { + + constructor(private http:HttpClient,private router:Router,private route:ActivatedRoute,private tree: TreeService,public dialog: MatDialog,public snackBar: MatSnackBar) { } + + private _transformer = (node, level: number) => { //初始化tree + return { + expandable: !!node.children && node.children.length > 0, + name: node.name, + level: level, + id: node.id, + parentId: node.parentId, + children: node.children + }; + } + treeControl = new FlatTreeControl(node => node.level, node => node.expandable); + treeFlattener = new MatTreeFlattener(this._transformer, node => node.level, node => node.expandable, node => node.children); + dataSource = new MatTreeFlatDataSource(this.treeControl, this.treeFlattener); + myControl = new FormControl(); + hasChild = (_: number, node: any) => node.expandable; + + organizationName:any //当前单位所属辖区中队名称 + allunittype:any //所有单位类型 + preparelevels:Food[] //编制级别 + planpatterns:Food[] = [ //预案类型 + {name:"卡片预案",value:"8"}, + {name:"二维预案",value:"1" }, + {name:"三维预案",value:"2" }, + {name:"其他预案",value:"4" },] + passstates:Food[]=[ //审核状态 + {name:"审核中",value:"1"}, + {name:"审核通过",value:"2"}, + {name:"审核退回",value:"4"},] + + displayedColumns: string[] = ['unitname','planname', 'addpeople', 'addtime','plantype','auditstate', 'isopen','preparethelevel','operation']; + tabledataSource:any; //所有预案审核信息 + + //分页 + @ViewChild(MatPaginator, {static: true}) + pageEvent: PageEvent; + paginator: MatPaginator; + length:any; //共多少条数据 + pageSize:any; //每页条数 + pageSizeOptions: number[] = [10] //设置每页条数 + PageNumber:number = 1; //第几页 + + //查询筛选条件 + CompanyName:any; //单位名称 + selectOrganizationID:any //选中的辖区中队id + selectOrganizationIName:any //选中的辖区中队name + HasChildrenOrganization:boolean = false; //辖区中队是否包含下级 + BuildingTypeId:any; //选中的单位类型 + PlanType:any; //选中的预案类型 + AuditStatus:any = '1'; //选中的审核状态 + PlanLevel:any; //选中的编制级别 + HasChildrenPlanLevel:boolean = false; //编制级别是否包含下级 + + //分页事件 + chagePage(e){ + this.PageNumber = e.pageIndex + 1 + let header = { + CompanyName: this.CompanyName || '', + OrganizationId: this.selectOrganizationID || '', + HasChildrenOrganization: String(this.HasChildrenOrganization) || 'false', + BuildingTypeId: this.BuildingTypeId || '', + PlanType: this.PlanType || '', + AuditStatus: this.AuditStatus || '1', + PlanLevel: this.PlanLevel || '', + HasChildrenPlanLevel: String(this.HasChildrenPlanLevel) || 'false', + PageNumber: String(this.PageNumber), + } + this.http.get('/api/PlanAudits',{params:header}).subscribe((data:any)=>{ + this.length = data.totalCount + this.pageSize = data.pageSize + this.tabledataSource = data.items + }) + } + + //查询 + onSubmit(e){ + this.getAllPlanAudits() + } + + //重置 + reset () { + this.CompanyName = '' + this.selectOrganizationID = '' + this.selectOrganizationIName = '' + this.HasChildrenOrganization = false + this.BuildingTypeId = '' + this.PlanType = '', + this.AuditStatus = '1', + this.PlanLevel = '', + this.HasChildrenPlanLevel = false + this.getAllPlanAudits() + } + + //获取当前所有预案审核 + getAllPlanAudits () { + let header = { + CompanyName: this.CompanyName || '', + OrganizationId: this.selectOrganizationID || '', + HasChildrenOrganization: String(this.HasChildrenOrganization) || 'false', + BuildingTypeId: this.BuildingTypeId || '', + PlanType: this.PlanType || '', + AuditStatus: this.AuditStatus || '1', + PlanLevel: this.PlanLevel || '', + HasChildrenPlanLevel: String(this.HasChildrenPlanLevel) || 'false', + PageNumber: '1', + } + this.http.get('/api/PlanAudits',{params:header}).subscribe((data:any)=>{ + this.length = data.totalCount + this.pageSize = data.pageSize + this.pageEvent.pageIndex = 0 + this.tabledataSource = data.items + }) + } + + ngOnInit(): void { + this.getunitdata(); + this.getOrganizations(); + this.getUnittype(); + let level = sessionStorage.getItem("level"); + if(level == "0"){ //如果是总队 + this.preparelevels = [ + {name:"总队",value:"1"}, + {name:"支队",value:"2"}, + {name:"大队",value:"4"}, + {name:"中队",value:"8"},] } + if(level == "1"){ //如果是支队 + this.preparelevels = [ + {name:"支队",value:"2"}, + {name:"大队",value:"4"}, + {name:"中队",value:"8"},] } + if(level == "2"){ //如果是大队 + this.preparelevels = [ + {name:"大队",value:"4"}, + {name:"中队",value:"8"},] } + if(level == "3"){ //如果是中队 + this.preparelevels = [{name:"中队",value:"8"}] } + + this.getAllPlanAudits() + } + + //得到当前账号所属辖区中队名称 + getunitdata(){ + this.http.get("/api/Account/Profiles").subscribe((data:any)=>{ + this.organizationName = data.organizationName + }) + } + + //获得所有辖区中队(处理数据结构) + getOrganizations(){ + let treeData = [] + this.http.get('/api/Organizations').subscribe((data:any)=>{ + data.forEach(element => { + element.children = [] + data.forEach(item => { if (item.parentId == element.id) {element.children.push(item)} }); + }); + if (this.organizationName) { //当前账号有辖区中队时 + data.forEach(element => { + if (element.name===this.organizationName) { + treeData.push(element) + this.dataSource.data = treeData } + }); + } else { //当前账号没有有辖区中队时 + data.forEach(element => { + if (!element.parentId) { + treeData.push(element) + this.dataSource.data = treeData } + }); + } + + }) + } + + //获得所有单位类型 + getUnittype(){ + this.http.get('/api/BuildingTypes/Simple').subscribe(data=>{ + this.allunittype = data + }) + } + + isorganizationbox:boolean = false //辖区中队DIV显隐 + + //打开辖区中队 + openorganizationbox() { + this.isorganizationbox = true + } + + //关闭辖区中队 + closediv(){ + this.isorganizationbox = false + } + + //选择辖区中队时 + add(node) { + this.selectOrganizationID = node.id + this.selectOrganizationIName = node.name + this.isorganizationbox = false + } + + //预案审核 + toExamine (e) { + window.open(`/planAudit/planpass?id=${e.companyId}&companyName=${e.companyName}&auditPlanId=${e.id}&auditStatus=${e.auditStatus}`); + } + + //预案公开 + openReserve (e) { + this.http.put(`/api/PlanAudits/${e.id}/Public`,[]).subscribe(data=>{ + const config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.snackBar.open('预案已公开','确定',config); + this.renew() + }) + } + + //预案取消公开 + closeReserve (e) { + this.http.put(`/api/PlanAudits/${e.id}/Unpublic`,[]).subscribe(data=>{ + const config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.snackBar.open('预案已取消公开','确定',config); + this.renew() + }) + } + + //按查询条件及分页 更新当前页面 + renew () { + let header = { + CompanyName: this.CompanyName || '', + OrganizationId: this.selectOrganizationID || '', + HasChildrenOrganization: String(this.HasChildrenOrganization) || 'false', + BuildingTypeId: this.BuildingTypeId || '', + PlanType: this.PlanType || '', + AuditStatus: this.AuditStatus || '1', + PlanLevel: this.PlanLevel || '', + HasChildrenPlanLevel: String(this.HasChildrenPlanLevel) || 'false', + PageNumber: String(this.PageNumber), + } + this.http.get('/api/PlanAudits',{params:header}).subscribe((data:any)=>{ + this.length = data.totalCount + this.pageSize = data.pageSize + this.tabledataSource = data.items + }) + } + + + +} + + + +@Component({ + selector: 'planopen', + templateUrl: './plan-opendialog.html', + styleUrls: ['./plan-audit.component.scss'] +}) +export class PlanOpen { + + constructor(private http: HttpClient,public dialogRef: MatDialogRef,@Inject(MAT_DIALOG_DATA) public data,public snackBar: MatSnackBar,private tree: TreeService, + private route:ActivatedRoute,) {} + + ngOnInit(): void { + + } + + //审核预案 + onSubmit (e) { + e.auditStatus = Number(e.auditStatus) + this.http.put(`/api/PlanAudits/${this.data}`,e).subscribe(data=>{ + const config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.snackBar.open('审批结果提交成功','确定',config); + this.dialogRef.close(); + }) + } + + //提醒弹窗 + remind () { + let type = this.route.snapshot.queryParams.auditStatus //当前预案审核状态 =2为审核通过时 + if (type==2) { + const config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.snackBar.open('预案驳回,公开预案会设置为未公开状态','确定',config); + } + } + + + +} \ No newline at end of file diff --git a/src/app/plan-audit/plan-audit/plan-opendialog.html b/src/app/plan-audit/plan-audit/plan-opendialog.html new file mode 100644 index 0000000..b15f335 --- /dev/null +++ b/src/app/plan-audit/plan-audit/plan-opendialog.html @@ -0,0 +1,25 @@ +
    审核预案
    +
    +
    + +
    + + + 审批通过 + 审批驳回 + +
    + +
    + + +
    + +
    + + +
    +
    +
    \ No newline at end of file diff --git a/src/app/plan-audit/plan-pass/plan-pass.component.html b/src/app/plan-audit/plan-pass/plan-pass.component.html new file mode 100644 index 0000000..6131a9e --- /dev/null +++ b/src/app/plan-audit/plan-pass/plan-pass.component.html @@ -0,0 +1,64 @@ + + + +
    + +
    + 单位名称: + {{compantData.name?compantData.name : '暂无数据'}} +
    +
    + 辖区中队: + {{compantData.organizationName?compantData.organizationName : '暂无数据'}} +
    +
    + 单位类型: + {{compantData.buildingTypes.length?compantData.buildingTypes[0].name : '暂无数据'}} +
    +
    + 单位地址: + {{compantData.address?compantData.address : '暂无数据'}} +
    +
    + +
    + +
    +
    +
    +
    + +
    + +
    + + + + + + + + + + + + + + + + + +
    文件名称{{element.fileName?element.fileName : compantData.name}}上传时间{{element.lastModified | date:'yyyy-MM-dd'}}操作 + + + +
    +
    +
    + +
    +
    + +
    + +
    diff --git a/src/app/plan-audit/plan-pass/plan-pass.component.scss b/src/app/plan-audit/plan-pass/plan-pass.component.scss new file mode 100644 index 0000000..058dc93 --- /dev/null +++ b/src/app/plan-audit/plan-pass/plan-pass.component.scss @@ -0,0 +1,20 @@ +.planHeader { + width: 100%; + box-sizing: border-box; + display: flex; + align-items: center; + .planBox { + margin: 0px 30px; + color: black; + :first-child {margin-right: 10px;} + } +} + +.table { + overflow-y: auto; + table { + width: 100%; + text-align: center; + .cdk-header-cell { text-align: center;} + } +} diff --git a/src/app/plan-audit/plan-pass/plan-pass.component.spec.ts b/src/app/plan-audit/plan-pass/plan-pass.component.spec.ts new file mode 100644 index 0000000..1df6883 --- /dev/null +++ b/src/app/plan-audit/plan-pass/plan-pass.component.spec.ts @@ -0,0 +1,25 @@ +import { async, ComponentFixture, TestBed } from '@angular/core/testing'; + +import { PlanPassComponent } from './plan-pass.component'; + +describe('PlanPassComponent', () => { + let component: PlanPassComponent; + let fixture: ComponentFixture; + + beforeEach(async(() => { + TestBed.configureTestingModule({ + declarations: [ PlanPassComponent ] + }) + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(PlanPassComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/plan-audit/plan-pass/plan-pass.component.ts b/src/app/plan-audit/plan-pass/plan-pass.component.ts new file mode 100644 index 0000000..f853fdb --- /dev/null +++ b/src/app/plan-audit/plan-pass/plan-pass.component.ts @@ -0,0 +1,170 @@ +import { Component, OnInit, ViewChild, Inject } from '@angular/core'; +import { HttpClient } from '@angular/common/http' +import { MatTreeFlatDataSource, MatTreeFlattener } from '@angular/material/tree'; +import { MatPaginator } from '@angular/material/paginator'; +import { FlatTreeControl } from '@angular/cdk/tree'; +import { FormControl } from '@angular/forms'; +import { Router,ActivatedRoute } from '@angular/router' +import { PageEvent } from '@angular/material/paginator'; +import { MatDialogRef, MatDialog, MAT_DIALOG_DATA } from '@angular/material/dialog'; +import { MatSnackBar, MatSnackBarConfig } from '@angular/material/snack-bar'; +import { TreeService } from '../../http-interceptors/tree.service' +import { MatTableDataSource } from '@angular/material/table'; +import { DomSanitizer } from '@angular/platform-browser'; +import {PlanOpen} from '../plan-audit/plan-audit.component' +import {ViewUnitDetailsPlanComponent} from '../../key-unit/view-unit-details-plan/view-unit-details-plan.component' + + + +export interface Food { + name:string; + value: string; +} +@Component({ + selector: 'app-plan-pass', + templateUrl: './plan-pass.component.html', + styleUrls: ['./plan-pass.component.scss'] +}) +export class PlanPassComponent implements OnInit { + + constructor(private http:HttpClient,private router:Router,private route:ActivatedRoute,private tree: TreeService,public dialog: MatDialog, + public snackBar: MatSnackBar,private sanitizer: DomSanitizer) { } + + type:any //审核按钮是否出现 + ngOnInit(): void { + this.type = this.route.snapshot.queryParams.type + this.getCompanyData() + this.getPlanData() + } + + displayedColumns: string[] = ['filename','addtime','operation']; //表头 + compantData:any = {name:'',organizationName: '', buildingTypes:[{name:''}], address:''}; //当前单位信息 + planData:any; //审核预案信息 + + //获取当前单位信息 + getCompanyData () { + let header = { + CompanyName: this.route.snapshot.queryParams.companyName || '', + PageSize: '100'} + this.http.get('/api/Plans',{params:header}).subscribe((data:any)=>{ + data.items.forEach(element => { + if (element.companyId===this.route.snapshot.queryParams.id) { + this.compantData = element.company + return } }); + + }) + } + + //获取当前单位审核预案的信息 + getPlanData () { + let header = { + CompanyName: this.route.snapshot.queryParams.companyName || '', + AuditStatus: this.route.snapshot.queryParams.auditStatus || '', + PageSize: '100', + } + this.http.get('/api/PlanAudits',{params:header}).subscribe((data:any)=>{ + data.items.forEach(element => { + if (element.id===this.route.snapshot.queryParams.auditPlanId) { + this.planData = element + this.handleData() + return } }); + + }) + } + + planType:any; //展示预案类型 + allFile:any = []; //类型=0时所有文件 + thirdPartyURL:any; //类型=3时网址 + handleData () { + this.planType = this.planData.planMode + let data = this.planData + if (this.planData.planMode==0) { //预案planMode=0时, 下载文件 + data.attachmentUrls.forEach(item => { + this.http.get(`/api/ObjectMetadata/PlanPlatform/${item}`).subscribe((data:any)=>{ + data.isLoading = false + this.allFile.push(data) + this.allFile = new MatTableDataSource(this.allFile) }) + }); + } else if (this.planData.planMode==1) { //预案planMode=1时, 解析文档 + + } else if (this.planData.planMode==2) { //预案planMode=2时, 跳查看页面组件 + sessionStorage.setItem("buildingTypeId", this.compantData.buildingTypes.length? this.compantData.buildingTypes[0].id: undefined); + sessionStorage.setItem("companyId",this.route.snapshot.queryParams.id); + sessionStorage.setItem("planId",this.route.snapshot.queryParams.auditPlanId); + sessionStorage.setItem("editable",'0'); + } else if (this.planData.planMode==3) { //预案planMode=3时, 第三方网址 + this.thirdPartyURL = this.sanitizer.bypassSecurityTrustResourceUrl(data.url) + } + + } + + //预案审核 + toExamine () { + let data = this.route.snapshot.queryParams.auditPlanId + const dialogRef = this.dialog.open(PlanOpen,{data}); + } + + suffix:string; //文件名后缀 + //下载 + download (e) { + e.isLoading = true + let file = e + let fileSize = file.fileLength //下载文件的总大小 + let shardSize = 10 * 1024 * 1024 //文件大小是否大于10MB + this.suffix = this.compantData.name + '.' + (e.objectName.substring(e.objectName.lastIndexOf(".")+1,e.objectName.length)); + + if (file && fileSize<=shardSize) { //<=10MB时直接下载 + this.http.get(`/api/Objects/PlanPlatform/${file.objectName}`,{responseType: 'blob'},).subscribe(data=>{ + let url = window.URL.createObjectURL(new Blob([data])); //createObjectURL创建一个下载Blob的url地址 + let link = document.createElement("a"); + link.style.display = "none"; + link.href = url; + link.setAttribute("download", e.fileName?e.fileName : this.suffix); + document.body.appendChild(link); + link.click(); + e.isLoading = false + }) + } else if (file && fileSize>shardSize) { //>10MB时分块下载 + this.blockingDownload(e) //分段下载 + } + + } + + //分段下载并合并 + async blockingDownload (e) { + let file = e + let fileSize = file.fileLength //下载文件的总大小 + let shardSize = 3 * 1024 * 1024 //3MB一个分片 + let allSlice = Math.ceil(fileSize / shardSize) //总文件/3MB===共分多少段 + let allFile:any = [] //所有的file分段 + + for (let i=0;i{ + this.http.get(`/api/Objects/PlanPlatform/${file.objectName}`,{headers:{'range':`bytes= ${start}-${end}`},responseType:'blob'}).subscribe(data=>{ + result(data) }) + }) + allFile.push(result) + e.progress = Number((i/allSlice).toFixed(2))*100 + '%' + + if (allFile.length === allSlice) { //合并文件输出给浏览器 + let url = window.URL.createObjectURL(new Blob(allFile)); //createObjectURL创建一个下载Blob的url地址 + let link = document.createElement("a"); + link.style.display = "none"; + link.href = url; + link.setAttribute("download", e.fileName?e.fileName : this.suffix); + document.body.appendChild(link); + link.click(); + e.isLoading = false + e.progress = '' + } + + } //for循环 + + } + + + +} diff --git a/src/app/plan-management/entry-plan-look/AddPlanone.html b/src/app/plan-management/entry-plan-look/AddPlanone.html new file mode 100644 index 0000000..beaf0d1 --- /dev/null +++ b/src/app/plan-management/entry-plan-look/AddPlanone.html @@ -0,0 +1,88 @@ +
    +
    + 新建预案 +
    +
    + + + + 填写名称与类型 + + + + +
    + + + + 卡片预案 + 二维预案 + 三维预案 + 其他预案 + + +
    +
    + + +
    + +
    + +
    + 上传预案完成创建 +
    +
    + 预案形式: +
    + + +
    + 本地上传 + + (已上传) +
    +
    + 导入word文档 + +
    +
    + 在线编辑 +
    +
    + 网页地址 + +
    + +
    +
    + +
    + + 上传中... + + +
    +
    + + + +
    +
    + + +
    + +
    +
    + + diff --git a/src/app/plan-management/entry-plan-look/auditresult.html b/src/app/plan-management/entry-plan-look/auditresult.html new file mode 100644 index 0000000..2c61b7e --- /dev/null +++ b/src/app/plan-management/entry-plan-look/auditresult.html @@ -0,0 +1,18 @@ +
    + 审批结果 +
    + +
    +

    预案名称:{{planName}}

    +

    提交时间:{{commitTime| date:'yyyy-MM-dd HH:mm:ss'}}

    +

    发起申请:{{commitOrganizationName }}

    + +

    审批大队:{{auditOrganizationName}}

    +

    审批结果:{{auditResult | auditsatus}}

    +

    审批意见:{{auditOpinion}}

    +
    + + +
    + +
    \ No newline at end of file diff --git a/src/app/plan-management/entry-plan-look/changename.html b/src/app/plan-management/entry-plan-look/changename.html new file mode 100644 index 0000000..5299e45 --- /dev/null +++ b/src/app/plan-management/entry-plan-look/changename.html @@ -0,0 +1,16 @@ +
    +
    + 更改预案名称 +
    +
    + + + + +
    +
    + + +
    +
    diff --git a/src/app/plan-management/entry-plan-look/downloadFile.html b/src/app/plan-management/entry-plan-look/downloadFile.html new file mode 100644 index 0000000..8e6b4d4 --- /dev/null +++ b/src/app/plan-management/entry-plan-look/downloadFile.html @@ -0,0 +1,20 @@ +
    + 选择要下载的文件: + + +
    + insert_drive_file + {{item.fileName ? item.fileName : name2 }} + 文件大小:{{ item.filePige }} M + check_circle +
    + + + +
    + + +
    + + +
    \ No newline at end of file diff --git a/src/app/plan-management/entry-plan-look/entry-plan-look.component.html b/src/app/plan-management/entry-plan-look/entry-plan-look.component.html new file mode 100644 index 0000000..8deae5b --- /dev/null +++ b/src/app/plan-management/entry-plan-look/entry-plan-look.component.html @@ -0,0 +1,95 @@ + +
    +
    + 单位名称:{{unitdata.unitname == "null" ? "无" : unitdata.unitname}} +
    +
    + 辖区中队:{{unitdata.organizationName == "null" ? "无" : unitdata.organizationName}} +
    +
    + 单位类型:{{unitdata.unittype == "null" ? "无" : unitdata.unittype}} +
    +
    + 单位地址:{{unitdata.unitaddress == "null" ? "无" : unitdata.unitaddress}} +
    + + 查看详情 +
    + +
    +
    + + +
    + + + {{downloadFileName}} + 下载中... + +
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    预案名称{{element.name}}添加人{{element.creatorName}}修改时间 + {{element.modifiedTime | date:'yyyy-MM-dd'}} + 预案类型{{element.planType | plantype}}审核状态{{element.auditStatus | auditsatus}}是否公开{{element.openRange}}编制级别{{element.planLevel | planlevel}}操作 + 改名 + 编辑 + 查看 + 下载 + 删除 + 审批结果 + + 提交审核 + 撤销审核 + 操作 + 查看 + 下载 +
    + + +
    +
    \ No newline at end of file diff --git a/src/app/plan-management/entry-plan-look/entry-plan-look.component.scss b/src/app/plan-management/entry-plan-look/entry-plan-look.component.scss new file mode 100644 index 0000000..cadd2d5 --- /dev/null +++ b/src/app/plan-management/entry-plan-look/entry-plan-look.component.scss @@ -0,0 +1,117 @@ +.header{ + height: 130px; + // border-bottom: 1px solid rgba(0, 0, 0, 0.12); + display: flex; + flex-direction: row; + flex-wrap: wrap; + align-items:center; + // justify-content:center; + div{ + width: 300px; + height: 30px; + // margin: 0 30px; + margin-left: 80px; + } + // margin-bottom: 30px; +} +.body{ + .btn{ + button{ + width: 80px; + height: 40px; + margin-left: 2%; + } + } + .tablebox{ + table{ + width: 100%; + margin-left: 0%; + margin-top: 15px; + } + mat-paginator{ + width: 100%; + margin-left: 0%; + // margin-top: 30px; + } + } +} +.upbox{ + height: 100px; + margin-bottom: 15px; + mat-radio-group{ + div{ + margin: 10px 0; + } + } +} +.createbtnbox{ + button{ + margin: 0 6px; + } +} +.mat-header-cell{ + text-align: center; +} +.mat-cell{ + text-align: center; + span{ + color: #0000BF; + margin: 0 3px; + cursor: pointer; + } + span:hover{ + text-decoration:underline + } + .grey{ + color: grey; + pointer-events: none; + } +} + +//进度条 +.progressBox{ + line-height: 49px; + height: 49px; + position: relative; + display: inline-block; + width: 100%; + button{ + float: right; + } + .progress{ + display: inline-block; + position: absolute; + width: 500px; + top: 22px; + left: 32px; + } + + .filename{ + display: inline-block; + max-width: 180px; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; + // margin-left: 160px; + } + +} + + .fileDiv{ + cursor: pointer; + } + .fileDiv:hover{ + background-color: #fafafa; +} +.auditDiv{ + p{ + margin: 8px 0; + margin-left: 16px; + } +} +.btn{ + text-align: center; + button{ + margin: 0 3px; + } +} \ No newline at end of file diff --git a/src/app/plan-management/entry-plan-look/entry-plan-look.component.spec.ts b/src/app/plan-management/entry-plan-look/entry-plan-look.component.spec.ts new file mode 100644 index 0000000..381ed6c --- /dev/null +++ b/src/app/plan-management/entry-plan-look/entry-plan-look.component.spec.ts @@ -0,0 +1,25 @@ +import { async, ComponentFixture, TestBed } from '@angular/core/testing'; + +import { EntryPlanLookComponent } from './entry-plan-look.component'; + +describe('EntryPlanLookComponent', () => { + let component: EntryPlanLookComponent; + let fixture: ComponentFixture; + + beforeEach(async(() => { + TestBed.configureTestingModule({ + declarations: [ EntryPlanLookComponent ] + }) + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(EntryPlanLookComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/plan-management/entry-plan-look/entry-plan-look.component.ts b/src/app/plan-management/entry-plan-look/entry-plan-look.component.ts new file mode 100644 index 0000000..fa1bbb3 --- /dev/null +++ b/src/app/plan-management/entry-plan-look/entry-plan-look.component.ts @@ -0,0 +1,985 @@ +import { Component, OnInit, ViewChild, Inject } from '@angular/core'; +import { HttpClient,HttpHeaders } from '@angular/common/http' +import { MatTreeFlatDataSource, MatTreeFlattener } from '@angular/material/tree'; +import { MatPaginator } from '@angular/material/paginator'; +import { FlatTreeControl } from '@angular/cdk/tree'; +import { FormControl } from '@angular/forms'; +import { Router,ActivatedRoute } from '@angular/router' +import { PageEvent } from '@angular/material/paginator'; +import { MatDialogRef, MatDialog, MAT_DIALOG_DATA } from '@angular/material/dialog'; +import { MatSnackBar, MatSnackBarConfig } from '@angular/material/snack-bar'; +import { TreeService } from '../../http-interceptors/tree.service' +import {FormBuilder, FormGroup, Validators} from '@angular/forms'; +import { async } from '@angular/core/testing'; +@Component({ + selector: 'app-entry-plan-look', + templateUrl: './entry-plan-look.component.html', + styleUrls: ['./entry-plan-look.component.scss'] +}) +export class EntryPlanLookComponent implements OnInit { + constructor(private http:HttpClient,private router:Router,private route:ActivatedRoute,private tree: TreeService,public dialog: MatDialog,public snackBar: MatSnackBar) { } + pageEvent: PageEvent; + private _transformer = (node, level: number) => { //初始化tree + return { + expandable: !!node.children && node.children.length > 0, + name: node.name, + level: level, + id: node.id, + parentId: node.parentId, + children: node.children + }; + } + treeControl = new FlatTreeControl(node => node.level, node => node.expandable); + treeFlattener = new MatTreeFlattener(this._transformer, node => node.level, node => node.expandable, node => node.children); + dataSource = new MatTreeFlatDataSource(this.treeControl, this.treeFlattener); + myControl = new FormControl(); + hasChild = (_: number, node: any) => node.expandable; + + displayedColumns: string[] = ['planname', 'addpeople', 'addtime','plantype','auditstate', 'isopen','preparethelevel','operation']; + tabledataSource:any + //分页 + @ViewChild(MatPaginator, {static: true}) + paginator: MatPaginator; + length:any; //共多少条数据 + pageSize:any; //每页条数 + pageSizeOptions: number[] = [10] //设置每页条数 + PageNumber:any = 1; //第几页 + + unitdata:any = {} + + + + unittypeId:any //单位类型id + + //获取当前单位信息 + compantData:any + getCompanyData () { + let CompanyName = sessionStorage.getItem("companyName") + let header = { + CompanyName: CompanyName || '', + } + this.http.get('/api/Plans',{params:header}).subscribe((data:any)=>{ + data.items.forEach(element => { + if (element.companyId===this.route.snapshot.queryParams.unitId) { + this.compantData = element.company + return } }); + // console.log(123,this.compantData) + this.unitdata.unitname = this.compantData.name + this.unitdata.organizationName = this.compantData.organizationName + this.unitdata.unittype = this.compantData.buildingTypes[0].name + this.unitdata.unitaddress = this.compantData.address + this.unittypeId = this.compantData.buildingTypes[0].id + }) +} + + //分页事件 + changePage(e){ + this.PageNumber = e.pageIndex+1 + this.getAllPlanComponents() + } + isoperation:any //判断预案录入 和 审核公开预案 区别变量 + ngOnInit(): void { + this.tabledataSource = [ + ] + // this.getCompanyData() + this.isoperation = this.route.snapshot.queryParams.operation + + + this.unitdata.unitname = this.route.snapshot.queryParams.unitName + this.unitdata.organizationName = this.route.snapshot.queryParams.orName + this.unitdata.unittype = this.route.snapshot.queryParams.unitType + this.unitdata.unitaddress = this.route.snapshot.queryParams.unitAdd + this.companyId = this.route.snapshot.queryParams.unitId + this.unittypeId = this.route.snapshot.queryParams.unitTypeId + this.getAllPlanComponents() + } + //查看预案 + lookPlan(e){ + if(e.planMode == 0){ + const config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.snackBar.open('本地文件,请下载查看','确定',config); + } + if(e.planMode == 1){ + const config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.snackBar.open('查看导入word文件','确定',config); + } + if(e.planMode == 2){ //如果是在线编辑 + let id = e.id + sessionStorage.setItem("planId",id) + sessionStorage.setItem("companyId",this.companyId) + sessionStorage.setItem("buildingTypeId",this.unittypeId) + sessionStorage.setItem("editable","0") + sessionStorage.setItem("planName",e.name) + let companyId = sessionStorage.getItem("companyId") + window.open(`/keyUnit/viewunitinfoplan?id=${companyId}`); + } + if(e.planMode == 3){ //如果是跳转网页 + sessionStorage.setItem("url",e.url) + window.open(`/planManagement/webLook`) + } + } + //编辑预案 + editPlan(e){ + if(e.planMode == 2){ //如果是在线编辑 + let id = e.id + sessionStorage.setItem("planId",id) + sessionStorage.setItem("companyId",this.companyId) + sessionStorage.setItem("buildingTypeId",this.unittypeId) + sessionStorage.setItem("editable","1") + sessionStorage.setItem("planName",e.name) + let companyId = sessionStorage.getItem("companyId") + window.open(`/keyUnit/editunitinfo?id=${companyId}`); + } + } + allPlanComponents:any //所有预案组件 + companyId : any //新建预案需要使用的id + planId : any //统一预案id + //改名 + changeName(element){ + // console.log(element) + const dialogRef = this.dialog.open(ChangeName, { + data: {element:element} + }); + dialogRef.afterClosed().subscribe( + data=>{ + if(data){ + const config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.snackBar.open('修改成功!','确定',config); + this.getAllPlanComponents() + } + } + ); + } + //获得所有预案组件 + getAllPlanComponents(){ + let pagetype = this.route.snapshot.queryParams.pagetype + let unitId = this.route.snapshot.queryParams.unitId + let paramsData:any + if(pagetype == 'entryplan'){ + paramsData = { + companyId:unitId, + pageNumber: this.PageNumber, + pageSize: "", + sort: "" + } + } + if(pagetype == 'passplan'){ + paramsData = { + companyId:unitId, + pageNumber: this.PageNumber, + pageSize: "", + AuditStatus:2, + sort: "" + } + } + if(pagetype == 'openplan'){ + paramsData = { + companyId:unitId, + pageNumber: this.PageNumber, + pageSize: "", + IsPublic:true, + sort: "" + } + } + + this.http.get("/api/PlanComponents",{params:paramsData}).subscribe((data:any)=>{ + this.length = data.totalCount + this.allPlanComponents = data + this.tabledataSource = data.items + }) + } + //删除预案 + deletePlan(plandata){ + + let isTrue = confirm('您确定要删除吗') + if (isTrue) { + if(plandata.planType == 1){//如果删除的是二维预案 + this.http.delete(`/api/PlanComponents2D/${plandata.id}`).subscribe(data=>{ + const config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.snackBar.open('删除成功!','确定',config); + this.getAllPlanComponents() + }) + }else{ + this.http.delete(`/api/PlanComponents/${plandata.id}`).subscribe(data=>{ + const config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.snackBar.open('删除成功!','确定',config); + this.getAllPlanComponents() + }) + } + } + + } + //提交审核 + submitAudit(element){ + // console.log(element) + if(element.auditStatus == 4){ + const config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.snackBar.open('审核退回的预案需要修改后方可再次提交审核!','确定',config); + }else{ + if(element.planType == 1){//如果提交审核的是二维预案 + this.http.put(`/api/PlanComponents2D/${element.id}/Commit`,"").subscribe(data=>{ + this.getAllPlanComponents() + }) + }else{ + this.http.put(`/api/PlanComponents/${element.id}/Commit`,"").subscribe(data=>{ + this.getAllPlanComponents() + }) + } + } + + } + //撤销审核 + cancelAudit(element){ + if(element.planType == 1){//如果撤销审核的是二维预案 + this.http.put(`/api/PlanComponents2D/${element.id}/Cancel`,"").subscribe(data=>{ + this.getAllPlanComponents() + }) + }else{ + this.http.put(`/api/PlanComponents/${element.id}/Cancel`,"").subscribe(data=>{ + this.getAllPlanComponents() + }) + } + } + //审核结果 + auditResult(element){ + // console.log(element) + const dialogRef = this.dialog.open(AuditResult, { + width:"395px", + data: {element:element} + }); + dialogRef.afterClosed().subscribe( + data=>{ + if(data){ + + } + } + ); + + } + + //下载↓ + selectDownloadFile:any; //选择下载的文件 + download:any; //下载文件元数据 + downloadisLoading:boolean = false; //进度条loading加载 + downloadProgress:number=0; //进度条进度 + downloadFileName:any + + + uploadFileLonging:any + //读取下载文件信息 + readFile (element) { + this.uploadFileLonging = element + const dialogRef = this.dialog.open(DownloadFile, { + width:"435px", + // height:"410px", + data: {fileUrls:element.attachmentUrls,compantData:this.unitdata.unitname,element:element} + }); + dialogRef.afterClosed().subscribe( + data=>{ + if(data){ + this.downloadFileName = data.fileName + this.download = data + this.downloadFile() + } + } + ); + } + + //初始化下载 + downloadFile () { + this.downloadProgress = 0 + let file = this.download + let fileSize = file.fileLength//下载文件的总大小 + let shardSize = 10 * 1024 * 1024 //文件大小是否大于10MB + + if (file && fileSize<=shardSize) { //<=10MB时直接下载 + this.downloadisLoading = true + // this.setFileLoading() + this.http.get(`/api/Objects/PlanPlatform/${file.objectName}`,{responseType: 'blob'},).subscribe(data=>{ + + let url = window.URL.createObjectURL(new Blob([data])); //createObjectURL创建一个下载Blob的url地址 + let link = document.createElement("a"); + link.style.display = "none"; + link.href = url; + + let suffix = file.objectName.substring(file.objectName.lastIndexOf(".")+1,file.objectName.length) ; + link.setAttribute("download", file.fileName ? file.fileName : this.unitdata.unitname + "-" +this.uploadFileLonging.name + "." + suffix); + document.body.appendChild(link); + link.click(); + this.downloadisLoading = false + // this.setFileLoading() + }) + } else if (file && fileSize > shardSize) { //>10MB时分块下载 + this.blockingDownload() //分段下载 + this.downloadisLoading = true + // this.setFileLoading() + } + + } + + //分段下载并合并 + async blockingDownload () { + let file = this.download + let fileSize = file.fileLength //下载文件的总大小 + let shardSize = 3 * 1024 * 1024 //3MB一个分片 + let allSlice = Math.ceil(fileSize / shardSize) //总文件/3MB===共分多少段 + let allFile:any = [] //所有的file分段 + + for (let i=0;i{ + this.http.get(`/api/Objects/PlanPlatform/${file.objectName}`,{headers:{'range':`bytes= ${start}-${end}`},responseType:'blob'}).subscribe(data=>{ + result(data) }) + }) + allFile.push(result) + this.downloadProgress = Number((i/allSlice).toFixed(2))*100 + + if (allFile.length === allSlice) { //合并文件输出给浏览器 + let url = window.URL.createObjectURL(new Blob(allFile)); //createObjectURL创建一个下载Blob的url地址 + let link = document.createElement("a"); + link.style.display = "none"; + link.href = url; + let suffix = file.objectName.substring(file.objectName.lastIndexOf(".")+1,file.objectName.length) ; + link.setAttribute("download", file.fileName ? file.fileName : this.unitdata.unitname + "-" +this.uploadFileLonging.name + "." + suffix); + document.body.appendChild(link); + link.click(); + // this.downloadProgress = 0 + this.downloadisLoading = false + // this.setFileLoading() + } + + } //for循环 + + } + + //取消分块下载 + cancelDowload () { + } + + //封装函数设置当前文件loading状态 + setFileLoading () { + // let id = this.selectDownloadFile.id + // this.CADList.forEach(element => { + // if (element.id === id) { element.loading = !element.loading } + // }); + } + + //新建预案弹出框 + addplan () { + const dialogRef = this.dialog.open(AddPlanone, { + width:"585px", + height:"410px", + data: {companyId:this.companyId}, + disableClose:true + }); + dialogRef.afterClosed().subscribe( + data=>{ + if(data){ + // this.route.snapshot.queryParams.id = data.planId + this.planId = data.planId + this.getAllPlanComponents() + if(data.planMode == 2){//如果添加方式为在线编辑 + sessionStorage.setItem("planId",data.id); + sessionStorage.setItem("companyId",this.companyId) + sessionStorage.setItem("buildingTypeId",this.unittypeId) + sessionStorage.setItem("editable","1") + let companyId = sessionStorage.getItem("companyId") + window.open(`/keyUnit/editunitinfo?id=${companyId}`); + } + } + } + ); + } +} + + +//新建预案弹出框 +@Component({ + selector: 'AddPlanone', + templateUrl: './AddPlanone.html', + styleUrls: ['./entry-plan-look.component.scss'] +}) +export class AddPlanone { + isLinear = true; //是否为线性步进器 + firstFormGroup: FormGroup; + secondFormGroup: FormGroup; + constructor(private _formBuilder: FormBuilder,private http: HttpClient,public dialogRef: MatDialogRef,@Inject(MAT_DIALOG_DATA) public data,public snackBar: MatSnackBar,private tree: TreeService) {} + + + + ngOnInit(): void { + + this.firstFormGroup = this._formBuilder.group({ + firstCtrlone: ['', Validators.required], + firstCtrltwo: ['', Validators.required] + }); + this.secondFormGroup = this._formBuilder.group({ + secondCtrl: ['', Validators.required] + }); + + } + onNoClick(): void { + this.dialogRef.close(); + } + isup:boolean = true //上传input框是否显示 + isweb:boolean = false //web输入框是否显示 + isinput:boolean = false //导入是否显示 + defaultisshow = '0' //默认显示上传input框 + //选择radio + selectradio(e){ + if(e.value == "0"){ //如果点击本地上传 + this.isup = true + this.isinput = false + this.isweb = false + this.webaddress = "" + } + if(e.value == "1"){ //如果点击导入word文档 + this.isinput = true + this.isup = false + this.isweb = false + this.webaddress = "" + } + if(e.value == "2"){ //如果点击在线编辑 + this.isinput = false + this.isup = false + this.isweb = false + this.webaddress = "" + } + if(e.value == "3"){ //如果点击输入网址 + this.isweb = true + this.isup = false + this.isinput = false + this.webaddress = "" + } + } + file2:any = null; //导入的文件 + webaddress:any = "" //输入的网页地址 + + //上传文件↓ + file:any; //上传的文件 + fileName:any; //上传文件name + uploadisLoading:boolean = false; //进度条loading加载 + uploadProgress:number=0; //进度条进度 + objectName:any; //上传对象名 + uploadId:any; //上传分块上传事件编号 + //上传文件input + filechange(e){ + this.file = e.target.files[0] || null //上传的文件 + // this.startUploading() +} + + //上传文件 + startUploading (planType) { + + let file = this.file || null //获取上传的文件 + let fileSize = file.size || null //上传文件的总大小 + let shardSize = 5 * 1024 * 1024 //5MB一个分片 + + if (file && fileSize<=shardSize) { //上传文件<=5MB时 + let formData = new FormData() + formData.append("file",file) + this.http.post(`/api/Objects/PlanPlatform/${this.data.companyId}/2D`,formData).subscribe((data:any)=>{ + this.objectName = data.objectName + const config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.snackBar.open('上传成功!','确定',config); + this.uploadover = true + + let level = sessionStorage.getItem("level") + // console.log(level) + let PlanLevel + if(level == '0'){ + PlanLevel = 1 + } + if(level == '1'){ + PlanLevel = 2 + } + if(level == '2'){ + PlanLevel = 4 + } + if(level == '3'){ + PlanLevel = 8 + } + let uploadUrl + if(planType == "非二维"){ + uploadUrl = "/api/PlanComponents" + }else{ + uploadUrl = "/api/PlanComponents2D" + } + if(this.uploadover){ + this.http.post(uploadUrl,{ + id: "", + name: this.selectedPLanName, + planType:Number(this.selectedPLanType), + planMode: Number(this.defaultisshow), + planLevel: PlanLevel, + url: "", + attachmentUrls: [`${this.objectName}`] + },{params:{ + companyId : this.data.companyId + }}).subscribe(data=>{ + this.dialogRef.close(data); + }) + }else{ + console.log("上传出错") + } + + }) + } else if (file && fileSize>shardSize) { //上传文件>5MB时,分块上传 + let data = {filename: file.name} + this.uploadisLoading = true + this.http.post(`/api/NewMultipartUpload/PlanPlatform/${this.data.companyId}/2D`,{},{params:data}).subscribe((data:any)=>{ //初始化分段上传 + this.objectName = data.objectName + this.uploadId = data.uploadId + this.subsectionUploading(planType) + }) + } + + } + + PartNumberETag:any=[]; //每次返回需要保存的信息 + //开始分段上传 + async subsectionUploading (planType) { + let file = this.file || null //获取上传的文件 + let fileSize = file.size || null //上传文件的总大小 + let shardSize = 5 * 1024 * 1024 //5MB一个分片 + let allSlice = Math.ceil(fileSize / shardSize) //总文件/5MB===共分多少段 向上取整 + + for (let i = 0;i < allSlice;i++) { //循环分段上传 + let start = i * shardSize //切割文件开始位置 + let end = Math.min(fileSize, start + shardSize); //切割文件结束位置 (对比取小数) + let formData = new FormData() + formData.append("file",file.slice(start, end)) + + //同步写法实现异步调用 + let result = await new Promise((resolve, reject) => { + // await 需要后面返回一个 promise 对象 + this.http.post(`/api/MultipartUpload/PlanPlatform/${this.objectName}?uploadId=${this.uploadId}&partNumber=${i+1}`,formData).subscribe((data:any)=>{ + let msg = { + "partNumber":data.partNumber || null, + "eTag": data.eTag || null} + resolve(msg) // 调用 promise 内置方法处理成功 + }) + }); + this.PartNumberETag.push(result) + this.uploadProgress = Number((i/allSlice).toFixed(2))*100 + + if (this.PartNumberETag.length === allSlice) { + this.uploadProgress = 100 + this.endUploading(planType)} + }//for循环 + + } + uploadover:any = false //上传完成之后提示 + //完成分块上传 + endUploading (planType) { + let data = this.PartNumberETag + let paramsData = {uploadId:this.uploadId} + this.http.post(`/api/CompleteMultipartUpload/PlanPlatform/${this.objectName}`,data,{params:paramsData}).subscribe(data=>{ + const config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.snackBar.open('上传成功!','确定',config); + this.uploadProgress = 0; + this.uploadisLoading = false + this.PartNumberETag =[] //清空保存返回的信息 + this.uploadover = true + let level = sessionStorage.getItem("level") + // console.log(level) + let PlanLevel + if(level == '0'){ + PlanLevel = 1 + } + if(level == '1'){ + PlanLevel = 2 + } + if(level == '2'){ + PlanLevel = 4 + } + if(level == '3'){ + PlanLevel = 8 + } + let uploadUrl + if(planType == "非二维"){ + uploadUrl = "/api/PlanComponents" + }else{ + uploadUrl = "/api/PlanComponents2D" + } + if(this.uploadover){//如果上次成功了才创建 + this.http.post(uploadUrl,{ + id: "", + name: this.selectedPLanName, + planType:Number(this.selectedPLanType), + planMode: Number(this.defaultisshow), + planLevel: PlanLevel, + url: "", + attachmentUrls: [`${this.objectName}`] + },{params:{ + companyId : this.data.companyId + }}).subscribe(data=>{ + this.dialogRef.close(data); + }) + }else{ + console.log("上传出错!") + } + + }) + } + + //取消分块上传 + cancel () { + this.http.delete(`/api/MultipartUpload/PlanPlatform/${this.objectName}?uploadId=${this.uploadId}`).subscribe(data=>{ + this.uploadProgress = 0; + this.uploadisLoading= false; + (document.getElementById('uploadFile')).value = null + this.PartNumberETag =[] //清空保存返回的信息 + const config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.snackBar.open('取消上传成功!','确定',config); + this.uploadover = false + this.file = null + }) + } + + + + + + //导入word文件 + fileInput(e){ + this.file2 = e.target.files[0] + } + //点击下一步 + selectedPLanType:any//所选预案类型 + selectedPLanName:any//所选预案名称 + localup:boolean = false //本地上传 + inputword:boolean = false //导入文档 + onlineedit:boolean = false //在线编辑 + website:boolean = false //网页地址 + next(formdata){ + // console.log(formdata.value.firstCtrltwo) + this.selectedPLanName = formdata.value.firstCtrlone + this.selectedPLanType = formdata.value.firstCtrltwo + if(formdata.value.firstCtrltwo=='8'){ //如果是卡片预案 + this.localup = true + this.inputword = true + this.onlineedit = false + this.website = false + } + if(formdata.value.firstCtrltwo=='1'){ //如果是2D预案 + this.localup = true + this.inputword = false + this.onlineedit = true + this.website = true + } + if(formdata.value.firstCtrltwo=='2' || formdata.value.firstCtrltwo=='4'){ + this.localup = true + this.inputword = false + this.onlineedit = false + this.website = true + } + } + closediv(){ + this.cancel(); + this.dialogRef.close(); + } + + + + // 提交创建 + onSubmit(value){ + let level = sessionStorage.getItem("level") + // console.log(level) + let PlanLevel + if(level == '0'){ + PlanLevel = 1 + } + if(level == '1'){ + PlanLevel = 2 + } + if(level == '2'){ + PlanLevel = 4 + } + if(level == '3'){ + PlanLevel = 8 + } + if(this.selectedPLanType != "1"){//如果创建的不是二维预案 + if(this.defaultisshow == '0' && this.file == null){ //如果是本地上传 + const config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.snackBar.open('请先上传文件','确定',config); + } + if(this.defaultisshow == '0' && this.file){ //如果是本地上传并且有文件 + //先上传成功 + this.startUploading("非二维") + + //再创建预案 + // this.http.post("/api/PlanComponents",{ + // id: "", + // name: this.selectedPLanName, + // planType:Number(this.selectedPLanType), + // planMode: Number(this.defaultisshow), + // planLevel: PlanLevel, + // url: "", + // attachmentUrls: [`${this.objectName}`] + // },{params:{ + // companyId : this.data.companyId + // }}).subscribe(data=>{ + // this.dialogRef.close(data); + // }) + } + + if(this.defaultisshow == '1'){//如果是导入则很复杂 + const config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.snackBar.open('暂不支持导入','确定',config); + } + if(this.defaultisshow == '3' && (this.webaddress == "" || this.webaddress == null)){ //如果是填写网址 + const config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.snackBar.open('请先输入网址','确定',config); + } + if(this.defaultisshow == '3' && this.webaddress){ //如果是填写网址 + // console.log(99999,this.selectedPLanType) + var reg = new RegExp('(http|https):\/\/([\w.!@#$%^&*()_+-=])*\s*') + if(reg.test(this.webaddress)){ + let body = { + id: "", + name: this.selectedPLanName, + planType:Number(this.selectedPLanType), + planMode: Number(this.defaultisshow), + planLevel: PlanLevel, + url: this.webaddress, + attachmentUrls: null + } + this.http.post("/api/PlanComponents",body,{params:{ + companyId : this.data.companyId + }}).subscribe(data=>{ + // console.log("创建成功") + this.dialogRef.close(data); + }) + }else{ + const config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.snackBar.open('请填写正确网址格式,需以http://或者https://开头的正确网址','确定',config); + } + + } + }else{ //如果创建的是二维预案 + if(this.defaultisshow == '0' && this.file == null){ //如果是本地上传 + const config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.snackBar.open('请先上传文件','确定',config); + } + if(this.defaultisshow == '0' && this.file){ + this.startUploading("二维") + // let body = { + // id: "", + // name: this.selectedPLanName, + // planType:Number(this.selectedPLanType), + // planMode: Number(this.defaultisshow), + // planLevel: PlanLevel, + // url: "", + // attachmentUrls: [`${this.objectName}`] + // } + // this.http.post("/api/PlanComponents2D",body,{params:{ + // companyId : this.data.companyId + // }}).subscribe(data=>{ + // // console.log("创建成功") + // this.dialogRef.close(data); + // }) + } + if(this.defaultisshow == '2'){ //如果是在线编辑------>跳转编制工具 + let body = { + id: "", + name: this.selectedPLanName, + planType:Number(this.selectedPLanType), + planMode: Number(this.defaultisshow), + planLevel: PlanLevel, + url: "", + attachmentUrls: null + } + this.http.post("/api/PlanComponents2D",body,{params:{ + companyId : this.data.companyId + }}).subscribe(data=>{ + // console.log("创建成功") + this.dialogRef.close(data); + }) + } + if(this.defaultisshow == '3' && (this.webaddress == "" || this.webaddress == null)){ //如果是填写网址 + const config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.snackBar.open('请先输入网址','确定',config); + } + if(this.defaultisshow == '3' && this.webaddress){ //如果是填写网址 + + var reg = new RegExp('(http|https):\/\/([\w.!@#$%^&*()_+-=])*\s*') + if(reg.test(this.webaddress)){ + let body = { + id: "", + name: this.selectedPLanName, + planType:Number(this.selectedPLanType), + planMode: Number(this.defaultisshow), + planLevel: PlanLevel, + url: this.webaddress, + attachmentUrls: null + } + this.http.post("/api/PlanComponents2D",body,{params:{ + companyId : this.data.companyId + }}).subscribe(data=>{ + // console.log("创建成功") + this.dialogRef.close(data); + }) + }else{ + const config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.snackBar.open('请填写正确网址格式,需以http://或者https://开头的正确网址','确定',config); + } + + + + } + + } + } + onSubmit2(value){ + console.log(this.webaddress) + var reg = new RegExp('(http|https):\/\/([\w.!@#$%^&*()_+-=])*\s*') +  console.log(reg.test(this.webaddress)) + } + +} + + + + + + + +//下载文件弹出框 +@Component({ + selector: 'downloadfile', + templateUrl: './downloadFile.html', + styleUrls: ['./entry-plan-look.component.scss'] +}) +export class DownloadFile { + + constructor(private http: HttpClient,public dialogRef: MatDialogRef,@Inject(MAT_DIALOG_DATA) public data,public snackBar: MatSnackBar) {} + fileUrls:any //当前预案附件地址 + fileDatas:any = [] + selectedFileIndex : any = 0 + selectedFileData : any + + name2:any //如果真实姓名为空时 + ngOnInit(): void { + this.name2 = this.data.element.name + this.fileUrls = this.data.fileUrls + this.fileUrls.forEach(item=>{ + this.http.get('/api/ObjectMetadata/PlanPlatform/'+item).subscribe((data:any)=>{ + data.filePige = (data.fileLength / (1024*1024)).toFixed(2) + this.fileDatas.push(data) + this.selectedFileData = data + }) + }) + } + onNoClick(): void { + this.dialogRef.close(); + } + + confirm(){ + this.dialogRef.close(this.selectedFileData); + } + + //点击想要下载的文件 + addurl(item,key){ + console.log(item,key) + this.selectedFileIndex = key + this.selectedFileData = item + } +} + + +//审批结果弹出框 +@Component({ + selector: 'auditresult', + templateUrl: './auditresult.html', + styleUrls: ['./entry-plan-look.component.scss'] +}) +export class AuditResult { + + constructor(private http: HttpClient,public dialogRef: MatDialogRef,@Inject(MAT_DIALOG_DATA) public data,public snackBar: MatSnackBar) {} + + planName:any = this.data.element.name + commitTime:any = this.data.element.committedTime + commitOrganizationName:any = this.data.element.committerOrganizationName + + auditOrganizationName:any = this.data.element.auditorOrganizationName + auditResult:any = this.data.element.auditStatus + auditOpinion:any = this.data.element.auditOpinion + ngOnInit(): void { + + } + onNoClick(): void { + this.dialogRef.close(); + } +} + + +//改名弹出框 +@Component({ + selector: 'changename', + templateUrl: './changename.html', + styleUrls: ['./entry-plan-look.component.scss'] +}) +export class ChangeName { + + constructor(private http: HttpClient,public dialogRef: MatDialogRef,@Inject(MAT_DIALOG_DATA) public data,public snackBar: MatSnackBar) {} + planName:any//预案名称 + ngOnInit(): void { + this.planName = this.data.element.name + } + onNoClick(): void { + this.dialogRef.close(); + } + onSubmit(value){ + let headers = new HttpHeaders({ + 'Content-Type': 'text/json' + }); + let options = { + headers + }; + let body = JSON.stringify(value.name); + if(this.data.element.planType == 1){//如果是二维预案 + this.http.put(`/api/PlanComponents2D/${this.data.element.id}`,body,options).subscribe(data=>{ + this.dialogRef.close("success"); + }) + }else{ + this.http.put(`/api/PlanComponents/${this.data.element.id}`,body,options).subscribe(data=>{ + this.dialogRef.close("success"); + }) + } + } +} \ No newline at end of file diff --git a/src/app/plan-management/entry-plan/entry-plan.component.html b/src/app/plan-management/entry-plan/entry-plan.component.html new file mode 100644 index 0000000..393aed2 --- /dev/null +++ b/src/app/plan-management/entry-plan/entry-plan.component.html @@ -0,0 +1,143 @@ +
    +
    +
    + +
    + + + + +
    + +
    + + + + + 包含下级 +
    +
    clear
    + + + +
  • {{node.name}}
  • +
    + + +
  • {{node.name}}
  • +
    +
    +
    +
    + +
    + + + + + {{unit.name}} + + + +
    +
    + + + + 卡片预案 + 二维预案 + 三维预案 + 其他预案 + + +
    +
    + + + + 未提交审核 + 审核中 + 审核通过 + 审核退回 + + +
    +
    + + + + + {{item.name}} + + + 包含下级 +
    + +
    +
    + + +
    +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    单位名称{{element.company.name}}辖区中队{{element.company.organizationName}}单位类型{{element.company.buildingTypes[0] ? element.company.buildingTypes[0].name : ''}}预案类型{{element.planType}}审核状态{{element.auditStatus}}编制级别{{element.planLevel}}操作 + 查看预案 +
    + + + + +
    +
    \ No newline at end of file diff --git a/src/app/plan-management/entry-plan/entry-plan.component.scss b/src/app/plan-management/entry-plan/entry-plan.component.scss new file mode 100644 index 0000000..4111324 --- /dev/null +++ b/src/app/plan-management/entry-plan/entry-plan.component.scss @@ -0,0 +1,112 @@ +.header { + width: 100%; + padding: 12px 10px; +// margin-bottom: 10px; + box-sizing: border-box; +// border-bottom: 1px solid black; + .queryBox { + box-sizing: border-box; + padding: 5px 25px; + display: flex; + flex-direction: row; + flex-wrap: wrap; + align-items:center; + // justify-content:center; + .queryField { + margin: 3px 40px; + input { + width: 180px; + height: 22px; + line-height: 22px; + border-radius: 3px;} + } + + } //queryBox + .ordiv{ + position: relative; + + .organizationbox{ + width:450px; + height: 200px; + background: white; + position: absolute; + top: 48px; + left: 77px; + z-index: 999; + border: 1px solid grey; + overflow-y: auto; + background-color: #fafafa; + li{ + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + background-color: #fafafa; + } + mat-tree-node{ + cursor: pointer; + white-space:pre; + background-color: #fafafa; + } + mat-tree-node:hover{ + background: rgba(225, 225, 225, 0.8); + li{ + background: rgba(225, 225, 225, 0.8); + } + } + .closediv{ + z-index: 100; + position: absolute; + right: 0; + top: 0; + width: 30px; + height: 30px; + cursor: pointer; + line-height: 30px; + text-align: center; + } + .closediv:hover{ + background:rgba(225, 225, 225, 0.8); + } + } + + } +} +.body{ + .buttonbox{ + padding-left: 50px; + button{ + margin:0 10px + } + } + .tablebox{ + table{ + width: 100%; + margin-left: 0%; + margin-top:15px; + } + mat-paginator{ + width: 100%; + margin-left: 0%; + // margin-top: 30px; + } + } +} + +.mat-header-cell{ + text-align: center; +} +.mat-cell{ + text-align: center; + span{ + color: #0000BF; + margin: 0 3px; + cursor: pointer; + } + span:hover{ + text-decoration:underline + } + .grey{ + color: grey; + pointer-events: none; + } +} \ No newline at end of file diff --git a/src/app/plan-management/entry-plan/entry-plan.component.spec.ts b/src/app/plan-management/entry-plan/entry-plan.component.spec.ts new file mode 100644 index 0000000..8b4ef5a --- /dev/null +++ b/src/app/plan-management/entry-plan/entry-plan.component.spec.ts @@ -0,0 +1,25 @@ +import { async, ComponentFixture, TestBed } from '@angular/core/testing'; + +import { EntryPlanComponent } from './entry-plan.component'; + +describe('EntryPlanComponent', () => { + let component: EntryPlanComponent; + let fixture: ComponentFixture; + + beforeEach(async(() => { + TestBed.configureTestingModule({ + declarations: [ EntryPlanComponent ] + }) + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(EntryPlanComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/plan-management/entry-plan/entry-plan.component.ts b/src/app/plan-management/entry-plan/entry-plan.component.ts new file mode 100644 index 0000000..6fd8ccd --- /dev/null +++ b/src/app/plan-management/entry-plan/entry-plan.component.ts @@ -0,0 +1,237 @@ +import { Component, OnInit, ViewChild, Inject } from '@angular/core'; +import { HttpClient } from '@angular/common/http' +import { MatTreeFlatDataSource, MatTreeFlattener } from '@angular/material/tree'; +import { MatPaginator } from '@angular/material/paginator'; +import { FlatTreeControl } from '@angular/cdk/tree'; +import { FormControl } from '@angular/forms'; +import { Router,ActivatedRoute } from '@angular/router' +import { PageEvent } from '@angular/material/paginator'; +import { MatDialogRef, MatDialog, MAT_DIALOG_DATA } from '@angular/material/dialog'; +import { MatSnackBar, MatSnackBarConfig } from '@angular/material/snack-bar'; +import { TreeService } from '../../http-interceptors/tree.service' +import { ConstantPool } from '@angular/compiler'; +@Component({ + selector: 'app-entry-plan', + templateUrl: './entry-plan.component.html', + styleUrls: ['./entry-plan.component.scss'] +}) +export class EntryPlanComponent implements OnInit { + + constructor(private http:HttpClient,private router:Router,private route:ActivatedRoute,private tree: TreeService,public dialog: MatDialog,public snackBar: MatSnackBar) { } + + private _transformer = (node, level: number) => { //初始化tree + return { + expandable: !!node.children && node.children.length > 0, + name: node.name, + level: level, + id: node.id, + parentId: node.parentId, + children: node.children + }; + } + treeControl = new FlatTreeControl(node => node.level, node => node.expandable); + treeFlattener = new MatTreeFlattener(this._transformer, node => node.level, node => node.expandable, node => node.children); + dataSource = new MatTreeFlatDataSource(this.treeControl, this.treeFlattener); + myControl = new FormControl(); + hasChild = (_: number, node: any) => node.expandable; + //分页 + @ViewChild(MatPaginator, {static: true}) + pageEvent: PageEvent; + paginator: MatPaginator; + length:any; //共多少条数据 + pageSize:any; //每页条数 + pageSizeOptions: number[] = [10] //设置每页条数 + PageNumber:any; //第几页 + + + + displayedColumns: string[] = ['unitname', 'jurisdictionsquadron', 'unittype','plantype', 'passstate','projectlevel','operation']; + allorganizations:any //所有组织机构 + allunittype:any //所有单位类型 + tabledataSource:any //表格数据 + + organizationName:any //当前单位组织机构名称 + preparelevels:any + ngOnInit(): void { + this.getunitdata(); + this.getOrganizations(); + this.getUnittype(); + this.getAllPlanInfo(); + let level = sessionStorage.getItem("level"); + if(level == "0"){//如果是总队 + this.preparelevels = [ + {name:"总队",value:"1"}, + {name:"支队",value:"2"}, + {name:"大队",value:"4"}, + {name:"中队",value:"8"} + ] + } + if(level == "1"){//如果是支队 + this.preparelevels = [ + {name:"支队",value:"2"}, + {name:"大队",value:"4"}, + {name:"中队",value:"8"} + ] + } + if(level == "2"){//如果是大队 + this.preparelevels = [ + {name:"大队",value:"4"}, + {name:"中队",value:"8"} + ] + } + if(level == "3"){//如果是中队 + this.preparelevels = [ + {name:"中队",value:"8"} + ] + } + } + + + + //得到当前单位信息 + getunitdata(){ + this.http.get("/api/Account/Profiles").subscribe( + (data:any)=>{ + this.organizationName = data.organizationName + } + ) + } + treedata:any //组织机构树型数据 + newArr:any = [] + newallorganizations:any //用于存储在原始数据基础上的每个机构增加children字段 + //得到当前单位所在组织机构的tree型数据 + getpresentOrganization(){ + this.newallorganizations = this.allorganizations + + this.newallorganizations.forEach(item => { + item.children = [] + this.newallorganizations.forEach(element => { + if(element.parentId == item.id){ + item.children.push(element) + } + }); + }); + this.http.get("/api/Account/Profiles").subscribe( + (data:any)=>{ + this.organizationName = data.organizationName + if(this.organizationName){ + this.newallorganizations.forEach(item => { + if(item.name == this.organizationName){ + this.dataSource.data = [item] + } + }); + }else{ + this.dataSource.data = this.tree.toTree(this.treedata); + } + } + ) + + + } + //获得所有组织机构 + getOrganizations(){ + this.http.get('/api/Organizations').subscribe( + (data:any)=>{ + this.allorganizations = data + this.treedata = this.tree.toTree(data); + this.getpresentOrganization(); + } + ) + } + //获得所有单位类型 + getUnittype(){ + this.http.get('/api/BuildingTypes/Simple').subscribe( + data=>{ + this.allunittype = data + } + ) + } + + //分页事件 + chagePage(e){ + this.PageNumber = e.pageIndex+1 + this.getAllPlanInfo(); + } + //辖区中队div是否显示 + isorganizationbox:boolean = false + //点击辖区中队树,将选择的辖区中队添加到变量 + add(node) { + this.isorganizationbox = false + this.js = node.name + this.jsId = node.id + } + //打开辖区中队隐藏框 + openorganizationbox() { + this.isorganizationbox = true + } + //关闭出现的组织机构div + closediv(){ + this.isorganizationbox = false + } + + allPlanInfo:any //存储所有预案信息 + //获得所有预案信息 + getAllPlanInfo(){ + let paramsdata:any = { + CompanyName: this.companyName || '', + OrganizationId: this.jsId || '', + HasChildrenOrganization:this.jscheck || '', + BuildingTypeId: this.unittype || '', + PlanType: this.reservePlanType || '', + AuditStatus: this.toExamine || '', + PlanLevel: this.preparelevel || '', + HasChildrenPlanLevel: this.plcheck || '', + PageNumber: this.PageNumber || '1', + PageSize: this.pageSizeOptions[0], + Sort: '' + } + this.http.get("/api/Plans",{params:paramsdata}).subscribe((data:any)=>{ + + this.length = data.totalCount + this.allPlanInfo = data + + this.tabledataSource = data.items + }) + } + + + //查看预案按钮跳转 + routerTo(element){ + // console.log(element) + sessionStorage.setItem("companyName",element.company.name) + window.open(`/planManagement/entryPlandetail?unitId=${element.company.id}&unitTypeId=${element.company.buildingTypes.length == 0 ? null :element.company.buildingTypes[0].id}&operation=true&pagetype=entryplan&unitName=${element.company.name}&orName=${element.company.organizationName}&unitType=${element.company.buildingTypes.length == 0 ? null :element.company.buildingTypes[0].name}&unitAdd=${element.company.address}`); + } + //查询 + onSubmit (value) { + this.PageNumber = 1 + this.pageEvent.pageIndex = 0 + this.getAllPlanInfo(); + } + + companyName:any //单位名称 + js:any //所选组织机构 + jsId:any //所选组织机构的id + jscheck:boolean //所选组织机构勾选框 + unittype:any //单位类型 + reservePlanType:any //预案类型 + toExamine:any //审核状态 + preparelevel:any //编制级别 + plcheck:boolean //编制级别勾选框 + //重置 + reset(){ + this.companyName = '' + this.js = '' + this.jsId = '' + this.jscheck = false + this.unittype = '' + this.reservePlanType = '' + this.toExamine = '' + this.preparelevel = '' + this.plcheck = false + //重新获取初始化列表 + // console.log(this.pageEvent) + this.pageEvent.pageIndex = 0 + this.PageNumber = 1 + this.getAllPlanInfo(); + } +} diff --git a/src/app/plan-management/open-plan/open-plan.component.html b/src/app/plan-management/open-plan/open-plan.component.html new file mode 100644 index 0000000..308e872 --- /dev/null +++ b/src/app/plan-management/open-plan/open-plan.component.html @@ -0,0 +1,109 @@ +
    +
    +
    +
    + + + + +
    + + +
    + + + + + {{unit.name}} + + + +
    +
    + + + + 卡片预案 + 二维预案 + 三维预案 + 其他预案 + + +
    + +
    + + + + + {{item.name}} + + + 包含下级 +
    + +
    +
    + + +
    +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    单位名称{{element.companyName}}预案名称{{element.name}}添加人{{element.creatorName}}添加时间{{element.creationTime | date:'yyyy-MM-dd'}}预案类型{{element.planType | plantype}}审核状态{{element.auditStatus | auditsatus}}是否公开{{element.openRange}}编制级别{{element.planLevel | planlevel}}操作 + 查看预案 +
    + + + +
    +
    + diff --git a/src/app/plan-management/open-plan/open-plan.component.scss b/src/app/plan-management/open-plan/open-plan.component.scss new file mode 100644 index 0000000..dc9f5c8 --- /dev/null +++ b/src/app/plan-management/open-plan/open-plan.component.scss @@ -0,0 +1,84 @@ +.header { + width: 100%; + padding: 12px 10px; + // margin-bottom: 10px; + box-sizing: border-box; + // border-bottom: 1px solid black; + .queryBox { + box-sizing: border-box; + padding: 5px 25px; + display: flex; + flex-direction: row; + flex-wrap: wrap; + align-items:center; + // justify-content:center; + .queryField { + margin: 3px 40px; + input { + width: 180px; + height: 22px; + line-height: 22px; + border-radius: 3px;} + } + + } //queryBox + .ordiv{ + position: relative; + + .organizationbox{ + width:450px; + height: 200px; + background: white; + position: absolute; + top: 48px; + left: 77px; + z-index: 999; + border: 1px solid grey; + overflow-y: auto; + li{ + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + } + mat-tree-node{ + cursor: pointer; + white-space:pre; + } + mat-tree-node:hover{ + background: rgba(225, 225, 225, 0.8); + } + .closediv{ + z-index: 100; + position: absolute; + right: 0; + top: 0; + width: 30px; + height: 30px; + cursor: pointer; + line-height: 30px; + text-align: center; + } + .closediv:hover{ + background:rgba(225, 225, 225, 0.8); + } + } + + } + } + .body{ + .buttonbox{ + padding-left: 50px; + button{ + margin:0 10px + } + } + .tablebox{ + table{ + width: 100%; + margin-top: 15px; + } + mat-paginator{ + width: 100%; + } + } + } \ No newline at end of file diff --git a/src/app/plan-management/open-plan/open-plan.component.spec.ts b/src/app/plan-management/open-plan/open-plan.component.spec.ts new file mode 100644 index 0000000..9a257ca --- /dev/null +++ b/src/app/plan-management/open-plan/open-plan.component.spec.ts @@ -0,0 +1,25 @@ +import { async, ComponentFixture, TestBed } from '@angular/core/testing'; + +import { OpenPlanComponent } from './open-plan.component'; + +describe('OpenPlanComponent', () => { + let component: OpenPlanComponent; + let fixture: ComponentFixture; + + beforeEach(async(() => { + TestBed.configureTestingModule({ + declarations: [ OpenPlanComponent ] + }) + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(OpenPlanComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/plan-management/open-plan/open-plan.component.ts b/src/app/plan-management/open-plan/open-plan.component.ts new file mode 100644 index 0000000..c7e4e3c --- /dev/null +++ b/src/app/plan-management/open-plan/open-plan.component.ts @@ -0,0 +1,223 @@ +import { Component, OnInit, ViewChild, Inject } from '@angular/core'; +import { HttpClient } from '@angular/common/http' +import { MatTreeFlatDataSource, MatTreeFlattener } from '@angular/material/tree'; +import { MatPaginator } from '@angular/material/paginator'; +import { FlatTreeControl } from '@angular/cdk/tree'; +import { FormControl } from '@angular/forms'; +import { Router,ActivatedRoute } from '@angular/router' +import { PageEvent } from '@angular/material/paginator'; +import { MatDialogRef, MatDialog, MAT_DIALOG_DATA } from '@angular/material/dialog'; +import { MatSnackBar, MatSnackBarConfig } from '@angular/material/snack-bar'; +import { TreeService } from '../../http-interceptors/tree.service' +@Component({ + selector: 'app-open-plan', + templateUrl: './open-plan.component.html', + styleUrls: ['./open-plan.component.scss'] +}) +export class OpenPlanComponent implements OnInit { + + constructor(private http:HttpClient,private router:Router,private route:ActivatedRoute,private tree: TreeService,public dialog: MatDialog,public snackBar: MatSnackBar) { } + + private _transformer = (node, level: number) => { //初始化tree + return { + expandable: !!node.children && node.children.length > 0, + name: node.name, + level: level, + id: node.id, + parentId: node.parentId, + children: node.children + }; + } + treeControl = new FlatTreeControl(node => node.level, node => node.expandable); + treeFlattener = new MatTreeFlattener(this._transformer, node => node.level, node => node.expandable, node => node.children); + dataSource = new MatTreeFlatDataSource(this.treeControl, this.treeFlattener); + myControl = new FormControl(); + hasChild = (_: number, node: any) => node.expandable; + //分页 + @ViewChild(MatPaginator, {static: true}) + pageEvent: PageEvent; + paginator: MatPaginator; + length:any; //共多少条数据 + pageSize:any; //每页条数 + pageSizeOptions: number[] = [10] //设置每页条数 + PageNumber:any; //第几页 + + displayedColumns: string[] = ['unitname', 'planname', 'addpeople','addtime','plantype','auditStatus','openRange','projectlevel','operation']; + + allorganizations:any //所有组织机构 + allunittype:any //所有单位类型 + tabledataSource:any //表格数据 + preparelevels:any //编制级别 + ngOnInit(): void { + this.getunitdata(); + this.getOrganizations(); + this.getUnittype(); + this.getAllPlanInfo(); //得到所有单位 + let level = sessionStorage.getItem("level"); + if(level == "0"){//如果是总队 + this.preparelevels = [ + {name:"总队",value:"1"}, + {name:"支队",value:"2"}, + {name:"大队",value:"4"}, + {name:"中队",value:"8"} + ] + } + if(level == "1"){//如果是支队 + this.preparelevels = [ + {name:"支队",value:"2"}, + {name:"大队",value:"4"}, + {name:"中队",value:"8"} + ] + } + if(level == "2"){//如果是大队 + this.preparelevels = [ + {name:"大队",value:"4"}, + {name:"中队",value:"8"} + ] + } + if(level == "3"){//如果是中队 + this.preparelevels = [ + {name:"中队",value:"8"} + ] + } + } + + + allPlanInfo:any //存储所有预案信息 + //获得所有预案信息 + getAllPlanInfo(){ + let paramsdata:any = { + CompanyName: this.companyName || '', + OrganizationId: '', + HasChildrenOrganization:'', + BuildingTypeId: this.unittype || '', + PlanType: this.reservePlanType || '', + AuditStatus:'', //审核状态 + PlanLevel: this.preparelevel || '', + HasChildrenPlanLevel: this.plcheck || '', + PageNumber: this.PageNumber || '1', + PageSize: this.pageSizeOptions[0], + Sort: '' + } + this.http.get("/api/PublicPlans",{params:paramsdata}).subscribe((data:any)=>{ + // console.log(111,data) + this.length = data.totalCount + this.allPlanInfo = data + this.tabledataSource = data.items + }) + } + //得到当前单位信息 + getunitdata(){ + this.http.get("/api/Account/Profiles").subscribe( + (data:any)=>{ + this.organizationName = data.organizationName + } + ) + } + organizationName:any //当前单位组织机构名称 + treedata:any //组织机构树型数据 + newArr:any = [] + newallorganizations:any //用于存储在原始数据基础上的每个机构增加children字段 + //得到当前单位所在组织机构的tree型数据 + getpresentOrganization(){ + this.newallorganizations = this.allorganizations + this.newallorganizations.forEach(item => { + item.children = [] + this.newallorganizations.forEach(element => { + if(element.parentId == item.id){ + item.children.push(element) + } + }); + }); + // console.log(666,this.organizationName) + if(this.organizationName){ + this.newallorganizations.forEach(item => { + if(item.name == this.organizationName){ + this.dataSource.data = [item] + } + }); + }else{ + this.dataSource.data = this.tree.toTree(this.treedata); + } + + } + //获得所有组织机构 + getOrganizations(){ + this.http.get('/api/Organizations').subscribe( + (data:any)=>{ + this.allorganizations = data + this.treedata = this.tree.toTree(data); + this.getpresentOrganization(); + } + ) + } + + //获得所有单位类型 + getUnittype(){ + this.http.get('/api/BuildingTypes/Simple').subscribe( + data=>{ + this.allunittype = data + } + ) + } + //跳转查看预案页面 + routerTo(element){ + sessionStorage.setItem("companyName",element.companyName) + // window.open(`/planManagement/entryPlandetail?unitId=${element.company.id}&unitTypeId=${element.company.buildingTypes.length == 0 ? null :element.company.buildingTypes[0].id}&operation=false&pagetype=openplan&unitName=${element.company.name}&orName=${element.company.organizationName}&unitType=${element.company.buildingTypes.length == 0 ? null :element.company.buildingTypes[0].name}&unitAdd=${element.company.address}`); + window.open(`/planAudit/planpass?id=${element.companyId}&companyName=${element.companyName}&auditPlanId=${element.id}&auditStatus=${element.auditStatus}&type=6`); + + } + //分页事件 + chagePage(e){ + this.PageNumber = e.pageIndex+1 + this.getAllPlanInfo(); + } + //辖区中队div是否显示 + isorganizationbox:boolean = false + //点击辖区中队树,将选择的辖区中队添加到变量 + add(node) { + this.isorganizationbox = false + this.js = node.name + this.jsId = node.id + } + //关闭辖区中队隐藏框 + closeorganizationbox() { + this.isorganizationbox = false + } + //打开辖区中队隐藏框 + openorganizationbox() { + this.isorganizationbox = true + } + //关闭出现的组织机构div + closediv(){ + this.isorganizationbox = false + } + //查询 + onSubmit (e) { + this.getAllPlanInfo() + } + companyName:any //单位名称 + js:any //所选组织机构 + jsId:any //所选组织机构的id + // jscheck:boolean //所选组织机构勾选框 + unittype:any //单位类型 + reservePlanType:any //预案类型 + preparelevel:any //编制级别 + plcheck:boolean //编制级别勾选框 + //重置 + reset(){ + this.companyName = '' + // this.js = '' + // this.jsId = '' + // this.jscheck = false + this.unittype = '' + this.reservePlanType = '' + this.preparelevel = '' + this.plcheck = false + //重新获取初始化列表 + this.pageEvent.pageIndex = 0 + this.PageNumber = 1 + this.getAllPlanInfo(); + + } +} diff --git a/src/app/plan-management/pass-plan/pass-plan.component.html b/src/app/plan-management/pass-plan/pass-plan.component.html new file mode 100644 index 0000000..c62fb6d --- /dev/null +++ b/src/app/plan-management/pass-plan/pass-plan.component.html @@ -0,0 +1,142 @@ +
    +
    +
    + +
    + + + + +
    + +
    + + + + + 包含下级 +
    +
    clear
    + + + +
  • {{node.name}}
  • +
    + + +
  • {{node.name}}
  • +
    +
    +
    +
    + +
    + + + + + {{unit.name}} + + + +
    +
    + + + + 卡片预案 + 二维预案 + 三维预案 + 其他预案 + + +
    + +
    + + + + + {{item.name}} + + + 包含下级 +
    + +
    +
    + + +
    +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    单位名称{{element.companyName}}预案名称{{element.name}}添加人{{element.creatorName}}添加时间{{element.creationTime | date:'yyyy-MM-dd'}}预案类型{{element.planType | plantype}}审核状态{{element.auditStatus | auditsatus}}是否公开{{element.openRange}}编制级别{{element.planLevel | planlevel}}操作 + 查看预案 +
    + + + +
    +
    + + \ No newline at end of file diff --git a/src/app/plan-management/pass-plan/pass-plan.component.scss b/src/app/plan-management/pass-plan/pass-plan.component.scss new file mode 100644 index 0000000..3769e5e --- /dev/null +++ b/src/app/plan-management/pass-plan/pass-plan.component.scss @@ -0,0 +1,92 @@ +.header { + width: 100%; + padding: 12px 10px; + box-sizing: border-box; + .queryBox { + box-sizing: border-box; + padding: 5px 25px; + // margin-left: 50px; + display: flex; + flex-direction: row; + flex-wrap: wrap; + align-items:center; + // justify-content:center; + .queryField { + margin: 3px 40px; + input { + width: 180px; + height: 22px; + line-height: 22px; + border-radius: 3px;} + } + + } //queryBox + .ordiv{ + position: relative; + .organizationbox{ + width:450px; + height: 200px; + background: white; + position: absolute; + top: 48px; + left: 77px; + z-index: 999; + border: 1px solid grey; + overflow-y: auto; + li{ + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + } + mat-tree-node{ + cursor: pointer; + white-space:pre; + } + mat-tree-node:hover{ + background: rgba(225, 225, 225, 0.8); + } + .closediv{ + z-index: 100; + position: absolute; + right: 0; + top: 0; + width: 30px; + height: 30px; + cursor: pointer; + line-height: 30px; + text-align: center; + } + .closediv:hover{ + background:rgba(225, 225, 225, 0.8); + } + } + + } + } + .body{ + .buttonbox{ + padding-left: 50px; + button{ + margin:0 10px + } + } + .tablebox{ + table{ + width: 100%; + // margin-left: 2%; + margin-top: 15px; + } + mat-paginator{ + width:100%; + // margin-left: 2%; + // margin-top: 30px; + } + } + } + .mat-header-cell{ + text-align: center; +} +.mat-cell{ + text-align: center; + +} \ No newline at end of file diff --git a/src/app/plan-management/pass-plan/pass-plan.component.spec.ts b/src/app/plan-management/pass-plan/pass-plan.component.spec.ts new file mode 100644 index 0000000..7ee8878 --- /dev/null +++ b/src/app/plan-management/pass-plan/pass-plan.component.spec.ts @@ -0,0 +1,25 @@ +import { async, ComponentFixture, TestBed } from '@angular/core/testing'; + +import { PassPlanComponent } from './pass-plan.component'; + +describe('PassPlanComponent', () => { + let component: PassPlanComponent; + let fixture: ComponentFixture; + + beforeEach(async(() => { + TestBed.configureTestingModule({ + declarations: [ PassPlanComponent ] + }) + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(PassPlanComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/plan-management/pass-plan/pass-plan.component.ts b/src/app/plan-management/pass-plan/pass-plan.component.ts new file mode 100644 index 0000000..db73627 --- /dev/null +++ b/src/app/plan-management/pass-plan/pass-plan.component.ts @@ -0,0 +1,232 @@ +import { Component, OnInit, ViewChild, Inject } from '@angular/core'; +import { HttpClient } from '@angular/common/http' +import { MatTreeFlatDataSource, MatTreeFlattener } from '@angular/material/tree'; +import { MatPaginator } from '@angular/material/paginator'; +import { FlatTreeControl } from '@angular/cdk/tree'; +import { FormControl } from '@angular/forms'; +import { Router,ActivatedRoute } from '@angular/router' +import { PageEvent } from '@angular/material/paginator'; +import { MatDialogRef, MatDialog, MAT_DIALOG_DATA } from '@angular/material/dialog'; +import { MatSnackBar, MatSnackBarConfig } from '@angular/material/snack-bar'; +import { TreeService } from '../../http-interceptors/tree.service' +@Component({ + selector: 'app-pass-plan', + templateUrl: './pass-plan.component.html', + styleUrls: ['./pass-plan.component.scss'] +}) +export class PassPlanComponent implements OnInit { + + constructor(private http:HttpClient,private router:Router,private route:ActivatedRoute,private tree: TreeService,public dialog: MatDialog,public snackBar: MatSnackBar) { } + + private _transformer = (node, level: number) => { //初始化tree + return { + expandable: !!node.children && node.children.length > 0, + name: node.name, + level: level, + id: node.id, + parentId: node.parentId, + children: node.children + }; + } + treeControl = new FlatTreeControl(node => node.level, node => node.expandable); + treeFlattener = new MatTreeFlattener(this._transformer, node => node.level, node => node.expandable, node => node.children); + dataSource = new MatTreeFlatDataSource(this.treeControl, this.treeFlattener); + myControl = new FormControl(); + hasChild = (_: number, node: any) => node.expandable; + //分页 + @ViewChild(MatPaginator, {static: true}) + pageEvent: PageEvent; + paginator: MatPaginator; + length:any; //共多少条数据 + pageSize:any; //每页条数 + pageSizeOptions: number[] = [10] //设置每页条数 + PageNumber:any; //第几页 + + displayedColumns: string[] = ['unitname', 'planname', 'addpeople','addtime','plantype','auditStatus','openRange','projectlevel','operation']; + allorganizations:any //所有组织机构 + allunittype:any //所有单位类型 + tabledataSource:any //表格数据 + + preparelevels:any + ngOnInit(): void { + this.getunitdata(); + this.getOrganizations(); + this.getUnittype(); + this.getAllPlanInfo(); + let level = sessionStorage.getItem("level"); + if(level == "0"){//如果是总队 + this.preparelevels = [ + {name:"总队",value:"1"}, + {name:"支队",value:"2"}, + {name:"大队",value:"4"}, + {name:"中队",value:"8"} + ] + } + if(level == "1"){//如果是支队 + this.preparelevels = [ + {name:"支队",value:"2"}, + {name:"大队",value:"4"}, + {name:"中队",value:"8"} + ] + } + if(level == "2"){//如果是大队 + this.preparelevels = [ + {name:"大队",value:"4"}, + {name:"中队",value:"8"} + ] + } + if(level == "3"){//如果是中队 + this.preparelevels = [ + {name:"中队",value:"8"} + ] + } + } + + allPlanInfo:any //存储所有预案信息 + //获得所有预案信息 + getAllPlanInfo(){ + let paramsdata:any = { + CompanyName: this.companyName || '', + OrganizationId: this.jsId || '', + HasChildrenOrganization:this.jscheck || '', + BuildingTypeId: this.unittype || '', + PlanType: this.reservePlanType || '', + AuditStatus:'', //审核状态 + PlanLevel: this.preparelevel || '', + HasChildrenPlanLevel: this.plcheck || '', + PageNumber: this.PageNumber || '1', + PageSize: this.pageSizeOptions[0], + Sort: '' + } + this.http.get("/api/ApprovedPlans",{params:paramsdata}).subscribe((data:any)=>{ + this.length = data.totalCount + this.allPlanInfo = data + this.tabledataSource = data.items + }) + } + + + + + //得到当前单位信息 + getunitdata(){ + this.http.get("/api/Account/Profiles").subscribe( + (data:any)=>{ + this.organizationName = data.organizationName + } + ) + } + organizationName:any //当前单位组织机构名称 + treedata:any //组织机构树型数据 + newArr:any = [] + newallorganizations:any //用于存储在原始数据基础上的每个机构增加children字段 + //得到当前单位所在组织机构的tree型数据 + getpresentOrganization(){ + this.newallorganizations = this.allorganizations + this.newallorganizations.forEach(item => { + item.children = [] + this.newallorganizations.forEach(element => { + if(element.parentId == item.id){ + item.children.push(element) + } + }); + }); + this.http.get("/api/Account/Profiles").subscribe( + (data:any)=>{ + this.organizationName = data.organizationName + if(this.organizationName){ + this.newallorganizations.forEach(item => { + if(item.name == this.organizationName){ + this.dataSource.data = [item] + } + }); + }else{ + this.dataSource.data = this.tree.toTree(this.treedata); + } + } + ) + + } + //获得所有组织机构 + getOrganizations(){ + this.http.get('/api/Organizations').subscribe( + (data:any)=>{ + this.allorganizations = data + this.treedata = this.tree.toTree(data); + this.getpresentOrganization(); + } + ) + } + + //获得所有单位类型 + getUnittype(){ + this.http.get('/api/BuildingTypes/Simple').subscribe( + data=>{ + this.allunittype = data + } + ) + } + //跳转查看预案页面 + routerTo(element){ + sessionStorage.setItem("companyName",element.companyName) + // window.open(`/planManagement/entryPlandetail?unitId=${element.company.id}&unitTypeId=${element.company.buildingTypes.length == 0 ? null :element.company.buildingTypes[0].id}&operation=false&pagetype=passplan&unitName=${element.company.name}&orName=${element.company.organizationName}&unitType=${element.company.buildingTypes.length == 0 ? null :element.company.buildingTypes[0].name}&unitAdd=${element.company.address}`); + window.open(`/planAudit/planpass?id=${element.companyId}&companyName=${element.companyName}&auditPlanId=${element.id}&auditStatus=${element.auditStatus}&type=6`); + + } + //分页事件 + chagePage(e){ + this.PageNumber = e.pageIndex+1 + this.getAllPlanInfo(); + } + + //辖区中队div是否显示 + isorganizationbox:boolean = false + //点击辖区中队树,将选择的辖区中队添加到变量 + add(node) { + this.isorganizationbox = false + this.js = node.name + this.jsId = node.id + } + //关闭辖区中队隐藏框 + closeorganizationbox() { + this.isorganizationbox = false + } + //打开辖区中队隐藏框 + openorganizationbox() { + this.isorganizationbox = true + } + //关闭出现的组织机构div + closediv(){ + this.isorganizationbox = false + } + //查询 + onSubmit (e) { + this.PageNumber = 1 + this.pageEvent.pageIndex = 0 + this.getAllPlanInfo(); + } + companyName:any //单位名称 + js:any //所选组织机构 + jsId:any //所选组织机构的id + jscheck:boolean //所选组织机构勾选框 + unittype:any //单位类型 + reservePlanType:any //预案类型 + preparelevel:any //编制级别 + plcheck:boolean //编制级别勾选框 + //重置 + reset(){ + this.companyName = '' + this.js = '' + this.jsId = '' + this.jscheck = false + this.unittype = '' + this.reservePlanType = '' + this.preparelevel = '' + this.plcheck = false + //重新获取初始化列表 + this.pageEvent.pageIndex = 0 + this.PageNumber = 1 + this.getAllPlanInfo(); + + } +} diff --git a/src/app/plan-management/plan-management-routing.module.ts b/src/app/plan-management/plan-management-routing.module.ts new file mode 100644 index 0000000..7fa18ab --- /dev/null +++ b/src/app/plan-management/plan-management-routing.module.ts @@ -0,0 +1,21 @@ +import { NgModule } from '@angular/core'; +import { Routes, RouterModule } from '@angular/router'; +import {EntryPlanComponent} from './entry-plan/entry-plan.component' +import { OpenPlanComponent } from './open-plan/open-plan.component'; +import { PassPlanComponent } from './pass-plan/pass-plan.component'; +import { EntryPlanLookComponent } from './entry-plan-look/entry-plan-look.component'; +import { WebLookComponent } from './web-look/web-look.component'; + +const routes: Routes = [ + { path: 'entryPlan', component: EntryPlanComponent}, + { path: 'openPlan', component: OpenPlanComponent}, + { path: 'passPlan', component: PassPlanComponent}, + { path: 'entryPlandetail', component: EntryPlanLookComponent}, + { path: 'webLook', component: WebLookComponent} +]; + +@NgModule({ + imports: [RouterModule.forChild(routes)], + exports: [RouterModule] +}) +export class PlanManagementRoutingModule { } diff --git a/src/app/plan-management/plan-management.module.ts b/src/app/plan-management/plan-management.module.ts new file mode 100644 index 0000000..d874586 --- /dev/null +++ b/src/app/plan-management/plan-management.module.ts @@ -0,0 +1,107 @@ +import { NgModule } from '@angular/core'; +import { CommonModule } from '@angular/common'; +import { PlanManagementRoutingModule } from './plan-management-routing.module'; +import { ReactiveFormsModule, FormsModule } from '@angular/forms'; +import {A11yModule} from '@angular/cdk/a11y'; +import {DragDropModule} from '@angular/cdk/drag-drop'; +import {PortalModule} from '@angular/cdk/portal'; +import {ScrollingModule} from '@angular/cdk/scrolling'; +import {CdkStepperModule} from '@angular/cdk/stepper'; +import {CdkTableModule} from '@angular/cdk/table'; +import {CdkTreeModule} from '@angular/cdk/tree'; +import {MatAutocompleteModule} from '@angular/material/autocomplete'; +import {MatBadgeModule} from '@angular/material/badge'; +import {MatBottomSheetModule} from '@angular/material/bottom-sheet'; +import {MatButtonModule} from '@angular/material/button'; +import {MatButtonToggleModule} from '@angular/material/button-toggle'; +import {MatCardModule} from '@angular/material/card'; +import {MatCheckboxModule} from '@angular/material/checkbox'; +import {MatChipsModule} from '@angular/material/chips'; +import {MatStepperModule} from '@angular/material/stepper'; +import {MatDatepickerModule} from '@angular/material/datepicker'; +import {MatDialogModule} from '@angular/material/dialog'; +import {MatDividerModule} from '@angular/material/divider'; +import {MatExpansionModule} from '@angular/material/expansion'; +import {MatGridListModule} from '@angular/material/grid-list'; +import {MatIconModule} from '@angular/material/icon'; +import {MatInputModule} from '@angular/material/input'; +import {MatListModule} from '@angular/material/list'; +import {MatMenuModule} from '@angular/material/menu'; +import {MatNativeDateModule, MatRippleModule} from '@angular/material/core'; +import {MatPaginatorModule} from '@angular/material/paginator'; +import {MatProgressBarModule} from '@angular/material/progress-bar'; +import {MatProgressSpinnerModule} from '@angular/material/progress-spinner'; +import {MatRadioModule} from '@angular/material/radio'; +import {MatSelectModule} from '@angular/material/select'; +import {MatSidenavModule} from '@angular/material/sidenav'; +import {MatSliderModule} from '@angular/material/slider'; +import {MatSlideToggleModule} from '@angular/material/slide-toggle'; +import {MatSnackBarModule} from '@angular/material/snack-bar'; +import {MatSortModule} from '@angular/material/sort'; +import {MatTableModule} from '@angular/material/table'; +import {MatTabsModule} from '@angular/material/tabs'; +import {MatToolbarModule} from '@angular/material/toolbar'; +import {MatTooltipModule} from '@angular/material/tooltip'; +import {MatTreeModule} from '@angular/material/tree'; + +import { EntryPlanComponent } from './entry-plan/entry-plan.component'; +import { PassPlanComponent } from './pass-plan/pass-plan.component'; +import { OpenPlanComponent } from './open-plan/open-plan.component'; +import { EntryPlanLookComponent, AddPlanone, DownloadFile, AuditResult, ChangeName } from './entry-plan-look/entry-plan-look.component'; +import { PlanType, AuditSatus, PlanLevel } from '../pipes/boolean.pipe'; +import { WebLookComponent } from './web-look/web-look.component'; + + + +@NgModule({ + declarations: [EntryPlanComponent, PassPlanComponent, OpenPlanComponent, EntryPlanLookComponent,AddPlanone,PlanType,AuditSatus,PlanLevel,DownloadFile,AuditResult,ChangeName, WebLookComponent], + imports: [ + CommonModule, + PlanManagementRoutingModule, + ReactiveFormsModule, + FormsModule, + A11yModule, + DragDropModule, + PortalModule, + ScrollingModule, + CdkStepperModule, + CdkTableModule, + CdkTreeModule, + MatAutocompleteModule, + MatBadgeModule, + MatBottomSheetModule, + MatButtonModule, + MatButtonToggleModule, + MatCardModule, + MatCheckboxModule, + MatChipsModule, + MatStepperModule, + MatDatepickerModule, + MatDialogModule, + MatDividerModule, + MatExpansionModule, + MatGridListModule, + MatIconModule, + MatInputModule, + MatListModule, + MatMenuModule, + MatNativeDateModule, + MatRippleModule, + MatPaginatorModule, + MatProgressBarModule, + MatProgressSpinnerModule, + MatRadioModule, + MatSelectModule, + MatSidenavModule, + MatSliderModule, + MatSlideToggleModule, + MatSnackBarModule, + MatSortModule, + MatTableModule, + MatTabsModule, + MatToolbarModule, + MatTooltipModule, + MatTreeModule + ] +}) +export class PlanManagementModule { } diff --git a/src/app/plan-management/web-look/web-look.component.html b/src/app/plan-management/web-look/web-look.component.html new file mode 100644 index 0000000..f2c7bee --- /dev/null +++ b/src/app/plan-management/web-look/web-look.component.html @@ -0,0 +1,4 @@ + +
    + +
    \ No newline at end of file diff --git a/src/app/plan-management/web-look/web-look.component.scss b/src/app/plan-management/web-look/web-look.component.scss new file mode 100644 index 0000000..e69de29 diff --git a/src/app/plan-management/web-look/web-look.component.spec.ts b/src/app/plan-management/web-look/web-look.component.spec.ts new file mode 100644 index 0000000..894b3db --- /dev/null +++ b/src/app/plan-management/web-look/web-look.component.spec.ts @@ -0,0 +1,25 @@ +import { async, ComponentFixture, TestBed } from '@angular/core/testing'; + +import { WebLookComponent } from './web-look.component'; + +describe('WebLookComponent', () => { + let component: WebLookComponent; + let fixture: ComponentFixture; + + beforeEach(async(() => { + TestBed.configureTestingModule({ + declarations: [ WebLookComponent ] + }) + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(WebLookComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/plan-management/web-look/web-look.component.ts b/src/app/plan-management/web-look/web-look.component.ts new file mode 100644 index 0000000..7e4c581 --- /dev/null +++ b/src/app/plan-management/web-look/web-look.component.ts @@ -0,0 +1,19 @@ +import { Component, OnInit } from '@angular/core'; +import { Router,ActivatedRoute } from '@angular/router' +import { DomSanitizer } from '@angular/platform-browser'; + +@Component({ + selector: 'app-web-look', + templateUrl: './web-look.component.html', + styleUrls: ['./web-look.component.scss'] +}) +export class WebLookComponent implements OnInit { + + constructor(private router:Router,private route:ActivatedRoute,private sanitizer: DomSanitizer) { } + url:any = sessionStorage.getItem("url") + thirdPartyURL:any + ngOnInit(): void { + this.thirdPartyURL = this.sanitizer.bypassSecurityTrustResourceUrl(this.url) + } + +} diff --git a/src/app/tabbar/tabbar.component.html b/src/app/tabbar/tabbar.component.html new file mode 100644 index 0000000..f3f3d62 --- /dev/null +++ b/src/app/tabbar/tabbar.component.html @@ -0,0 +1,64 @@ + + +

    {{title}} : {{planName}}

    +

    欢迎您, {{realName}}

    + + + + + + + + + + + + + + + + + + + + + + + + + +
    \ No newline at end of file diff --git a/src/app/tabbar/tabbar.component.scss b/src/app/tabbar/tabbar.component.scss new file mode 100644 index 0000000..115d3d0 --- /dev/null +++ b/src/app/tabbar/tabbar.component.scss @@ -0,0 +1,41 @@ +mat-toolbar{ + position: relative; + padding-left: 65px; +} +.logo{ + height: 64px; + widows: 64px; +} + +h1{ + line-height: 64px; + color: white; +} +mat-icon{ + color: white; +} +.login{ + position: absolute; + right:30px; +} +.fullscreen{ + position: absolute; + right:60px; +} +.setting{ + position: absolute; + right:120px; +} +.lockscreen{ + position: absolute; + right:160px; +} +.darktheme{ + position: absolute; + right:140px; + display: none; +} + +.boxed{ + width: 1200px; +} \ No newline at end of file diff --git a/src/app/tabbar/tabbar.component.spec.ts b/src/app/tabbar/tabbar.component.spec.ts new file mode 100644 index 0000000..6bcc230 --- /dev/null +++ b/src/app/tabbar/tabbar.component.spec.ts @@ -0,0 +1,25 @@ +import { async, ComponentFixture, TestBed } from '@angular/core/testing'; + +import { TabbarComponent } from './tabbar.component'; + +describe('TabbarComponent', () => { + let component: TabbarComponent; + let fixture: ComponentFixture; + + beforeEach(async(() => { + TestBed.configureTestingModule({ + declarations: [ TabbarComponent ] + }) + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(TabbarComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/tabbar/tabbar.component.ts b/src/app/tabbar/tabbar.component.ts new file mode 100644 index 0000000..0bbbea8 --- /dev/null +++ b/src/app/tabbar/tabbar.component.ts @@ -0,0 +1,132 @@ +import { Component, OnInit,Output,EventEmitter } from '@angular/core'; +import { HttpClient } from '@angular/common/http' +import { Router,ActivatedRoute } from '@angular/router' +import {CacheTokenService} from '../http-interceptors/cache-token.service'//引入服务 +import { MatDialog } from '@angular/material/dialog'; +import {ChangepasswordComponent} from '../ui/changepassword/changepassword.component' +import { MatSnackBar, MatSnackBarConfig } from '@angular/material/snack-bar'; + + + +@Component({ + selector: 'app-tabbar', + templateUrl: './tabbar.component.html', + styleUrls: ['./tabbar.component.scss'] +}) +export class TabbarComponent implements OnInit { + theme: boolean = true; + @Output() + toggle = new EventEmitter(); + @Output() + toggleDarkTheme = new EventEmitter(); + @Output() + defaulttheme = new EventEmitter(); + @Output() + redtheme = new EventEmitter(); + + onChange(eventValue: boolean){ + this.toggleDarkTheme.emit(eventValue); + } + + constructor(private http:HttpClient,private router:Router,private route:ActivatedRoute,public token:CacheTokenService,public dialog: MatDialog, + public snackBar: MatSnackBar) { } + title:any = "数字化预案编制管理平台" + planName:any = null + ngOnInit() { + this.getUserInfo() + if(this.router.url.indexOf("editunitinfo") != -1 || this.router.url.indexOf("viewunitinfoplan") != -1){//如果url地址是从录入预案跳转 + this.title = sessionStorage.getItem("companyName") + this.planName = sessionStorage.getItem("planName") + } + if(this.router.url.indexOf("editplaninfo") != -1 || this.router.url.indexOf("viewunitinfo") != -1){//如果url地址是从重点单位跳转 + this.title = sessionStorage.getItem("companyName") + } + } + + boxed(css){ + const Element = document.body; + Element.style.width = '1200px' + } + + standard(){ + const Element = document.body; + Element.style.width = '100%' + } + + isfullscreen:boolean = false; + fullscreenToggle(){ + const docElmWithBrowsersFullScreenFunctions = document.documentElement as HTMLElement & { + mozRequestFullScreen(): Promise; + webkitRequestFullscreen(): Promise; + msRequestFullscreen(): Promise; + }; + + if (docElmWithBrowsersFullScreenFunctions.requestFullscreen) { + docElmWithBrowsersFullScreenFunctions.requestFullscreen(); + } else if (docElmWithBrowsersFullScreenFunctions.mozRequestFullScreen) { /* Firefox */ + docElmWithBrowsersFullScreenFunctions.mozRequestFullScreen(); + } else if (docElmWithBrowsersFullScreenFunctions.webkitRequestFullscreen) { /* Chrome, Safari and Opera */ + docElmWithBrowsersFullScreenFunctions.webkitRequestFullscreen(); + } else if (docElmWithBrowsersFullScreenFunctions.msRequestFullscreen) { /* IE/Edge */ + docElmWithBrowsersFullScreenFunctions.msRequestFullscreen(); + } + + this.isfullscreen = true; + + } + closefullscreen(){ + const docWithBrowsersExitFunctions = document as Document & { + mozCancelFullScreen(): Promise; + webkitExitFullscreen(): Promise; + msExitFullscreen(): Promise; + }; + if (docWithBrowsersExitFunctions.exitFullscreen) { + docWithBrowsersExitFunctions.exitFullscreen(); + } else if (docWithBrowsersExitFunctions.mozCancelFullScreen) { /* Firefox */ + docWithBrowsersExitFunctions.mozCancelFullScreen(); + } else if (docWithBrowsersExitFunctions.webkitExitFullscreen) { /* Chrome, Safari and Opera */ + docWithBrowsersExitFunctions.webkitExitFullscreen(); + } else if (docWithBrowsersExitFunctions.msExitFullscreen) { /* IE/Edge */ + docWithBrowsersExitFunctions.msExitFullscreen(); + } + this.isfullscreen = false; + } + + realName:any; //登录用户信息 + //获取用户信息 + getUserInfo () { + this.http.get("/api/Account/Profiles").subscribe((data:any)=>{ + this.realName = data.realName + }) + } + + //退出系统 + signOut = () => { + let out = confirm("您确定要退出吗") + if(out) { + this.http.post('/api/Account/SignOut',{}).subscribe( + data=> { + this.token.delete() + sessionStorage.clear() + window.localStorage.clear() + this.router.navigate(['/login']) + const config = new MatSnackBarConfig(); + config.verticalPosition = 'bottom'; + config.duration = 3000 + this.snackBar.open('成功退出','确定',config); + } + ) + } + } + + //修改密码 + changpsw() { + let dialogRef = this.dialog.open(ChangepasswordComponent, + {width:'348px'}); + + dialogRef.afterClosed().subscribe(); + } + + + +} diff --git a/src/app/theme.scss b/src/app/theme.scss new file mode 100644 index 0000000..f220098 --- /dev/null +++ b/src/app/theme.scss @@ -0,0 +1,18 @@ +@import "./theming"; +@include mat-core(); + +$my-app-primary:mat-palette($mat-blue,500); +$my-app-accent :mat-palette($mat-pink,A200,A100,A400); +$my-app-warn :mat-palette($mat-red); +$my-app-theme :mat-light-theme($my-app-primary,$my-app-accent,$my-app-warn); +@include angular-material-theme($my-app-theme); + + +$my-dark-primary:mat-palette($mat-red,A700); +$my-dark-accent :mat-palette($mat-amber,A200,A100,A400); +$my-dark-warn :mat-palette($mat-deep-orange); +$my-dark-theme :mat-dark-theme($my-dark-primary,$my-dark-accent,$my-dark-warn); + +.myapp-dark-theme{ +@include angular-material-theme($my-dark-theme); +} diff --git a/src/app/ui/authority/authority.component.html b/src/app/ui/authority/authority.component.html new file mode 100644 index 0000000..8acc302 --- /dev/null +++ b/src/app/ui/authority/authority.component.html @@ -0,0 +1,25 @@ +
    + + + + {{node.name}} + + + + + + + + {{node.name}} + + + + + +
    \ No newline at end of file diff --git a/src/app/ui/authority/authority.component.scss b/src/app/ui/authority/authority.component.scss new file mode 100644 index 0000000..dea1283 --- /dev/null +++ b/src/app/ui/authority/authority.component.scss @@ -0,0 +1,30 @@ +table { + width: 100%; + th,td{ + text-align: center; + } +} +form{ + text-align: center; + button{ + margin: 0 12px; + } +} +mat-tree{ + width: 500px; + button{ + display: block; + float: right; + } + mat-tree-node{ + position: relative; + .deleted{ + position: absolute; + right: 0; + } + .create{ + position: absolute; + right: 40px; + } + } +} diff --git a/src/app/ui/authority/authority.component.ts b/src/app/ui/authority/authority.component.ts new file mode 100644 index 0000000..239757c --- /dev/null +++ b/src/app/ui/authority/authority.component.ts @@ -0,0 +1,144 @@ +import { Component, OnInit, Inject } from '@angular/core'; +import {MatTreeFlatDataSource, MatTreeFlattener} from '@angular/material/tree'; +import {FlatTreeControl} from '@angular/cdk/tree'; +import {MatDialog, MatDialogRef, MAT_DIALOG_DATA} from '@angular/material/dialog'; +import {FormControl} from '@angular/forms'; +import { HttpClient } from '@angular/common/http'; +import { TreeService } from '../../http-interceptors/tree.service' +import { MatSnackBar, MatSnackBarConfig } from '@angular/material/snack-bar'; +export interface authority { + id: string, + name: string, + value: string, + order: number, + parentId: string +} +@Component({ + selector: 'app-authority', + templateUrl: './authority.component.html', + styleUrls: ['./authority.component.scss'] +}) +export class AuthorityComponent implements OnInit { + + data:any =[] + newdata = []; + + private _transformer = (node, level: number) => { + return { + expandable: !!node.children && node.children.length > 0, + name: node.name, + level: level, + id: node.id, + parentId: node.parentId + }; + } + treeControl = new FlatTreeControl(node => node.level, node => node.expandable); + treeFlattener = new MatTreeFlattener(this._transformer, node => node.level, node => node.expandable, node => node.children); + dataSource = new MatTreeFlatDataSource(this.treeControl, this.treeFlattener); + constructor(private http: HttpClient,public dialog: MatDialog,private tree:TreeService) { } + + //重新拉去列表函数 + getlist = ():void=>{ + this.http.get('/api/Permissions').subscribe((data: any[])=>{ + this.newdata = this.tree.toTree(data) + const nodes = this.treeControl.dataNodes; + const expandNodes = []; + nodes.forEach((item) => { + if(item.expandable && this.treeControl.isExpanded(item)){ + expandNodes.push(item.id); + } + }); + this.dataSource.data = this.newdata; + let newNodes = this.treeControl.dataNodes; + newNodes = newNodes.filter(n => { + return expandNodes.indexOf(n.id) >= 0; + }); + newNodes.forEach(item => { + this.treeControl.expand(item); + }); + }) + } + + //初始化视图 + ngOnInit() { + this.http.get('/api/Permissions').subscribe((data: any[])=>{ + this.dataSource.data = this.tree.toTree(data) + }) + } + hasChild = (_: number, node: any) => node.expandable; + + //创建按钮 + createauthority(value){ + const dialogRef = this.dialog.open(CreateAuthority, {//调用open方法打开对话框并且携带参数过去 + width: '260px', + data: {id:value.id} + }); + dialogRef.afterClosed().subscribe( + data=>{ + if(data){ + this.newdata = [] + this.getlist() + } + } + ); + } + //删除按钮 + deleted(authority){ + var isdeleted = confirm("确定要删除此用户吗?") + if(isdeleted){ + //请求删除接口 + this.newdata = [] + this.http.delete(`/api/Permissions/${authority.id}`).subscribe( data=>{ + this.getlist() + }) + } + } +} + + +//创建组件 +@Component({ + selector: 'createauthority', + templateUrl: './createauthority.component.html', + styleUrls: ['./authority.component.scss'] +}) +export class CreateAuthority { + myControl = new FormControl(); + options: string[] = ['0', '1','2', '3','4', '5','6', '7','8']; + + //注入MatDialogRef,可以用来关闭对话框 + //要访问对话框组件中的数据,必须使用MAT_DIALOG_DATA注入令牌 + constructor(private http: HttpClient,public dialogRef: MatDialogRef,public snackBar: MatSnackBar, + @Inject(MAT_DIALOG_DATA) public data) {} + + onNoClick(): void { + this.dialogRef.close(); + } + onSubmit(value){ + + if(value.parentId == "null"){ + value.parentId = null + } + //编写请求创建用户接口(value是参数)//并且刷新一下 + this.http.post( + '/api/Permissions', + { + id: '', + name: value.name, + value: value.value, + order: Number(value.order), + parentId: this.data.id + } + ).subscribe( + data=>{ + this.dialogRef.close(data); + }, + err=>{ + const config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.snackBar.open('请填写正确格式','确定',config); + } + ) + } +} \ No newline at end of file diff --git a/src/app/ui/authority/createauthority.component.html b/src/app/ui/authority/createauthority.component.html new file mode 100644 index 0000000..b8e7500 --- /dev/null +++ b/src/app/ui/authority/createauthority.component.html @@ -0,0 +1,36 @@ +
    + + + + + + + + + + + + + + + {{option}} + + + + + +
    + + +
    + +
    \ No newline at end of file diff --git a/src/app/ui/badge/badge.component.html b/src/app/ui/badge/badge.component.html new file mode 100644 index 0000000..ef434c9 --- /dev/null +++ b/src/app/ui/badge/badge.component.html @@ -0,0 +1,18 @@ +

    + 未读信息 +

    + +

    + +

    + +

    + home +

    + diff --git a/src/app/ui/badge/badge.component.scss b/src/app/ui/badge/badge.component.scss new file mode 100644 index 0000000..d91e4df --- /dev/null +++ b/src/app/ui/badge/badge.component.scss @@ -0,0 +1,3 @@ +p{ + margin: 30px; +} \ No newline at end of file diff --git a/src/app/ui/badge/badge.component.spec.ts b/src/app/ui/badge/badge.component.spec.ts new file mode 100644 index 0000000..21c0577 --- /dev/null +++ b/src/app/ui/badge/badge.component.spec.ts @@ -0,0 +1,25 @@ +import { async, ComponentFixture, TestBed } from '@angular/core/testing'; + +import { BadgeComponent } from './badge.component'; + +describe('BadgeComponent', () => { + let component: BadgeComponent; + let fixture: ComponentFixture; + + beforeEach(async(() => { + TestBed.configureTestingModule({ + declarations: [ BadgeComponent ] + }) + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(BadgeComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/ui/badge/badge.component.ts b/src/app/ui/badge/badge.component.ts new file mode 100644 index 0000000..a64e7c1 --- /dev/null +++ b/src/app/ui/badge/badge.component.ts @@ -0,0 +1,14 @@ +import { Component, OnInit } from '@angular/core'; + +@Component({ + selector: 'app-badge', + templateUrl: './badge.component.html', + styleUrls: ['./badge.component.scss'] +}) +export class BadgeComponent implements OnInit { + constructor() { } + + ngOnInit() { + } + +} diff --git a/src/app/ui/button/button.component.html b/src/app/ui/button/button.component.html new file mode 100644 index 0000000..1c1d3c0 --- /dev/null +++ b/src/app/ui/button/button.component.html @@ -0,0 +1,6 @@ + +
      +
    • {{item.name}}
    • +
    + + \ No newline at end of file diff --git a/src/app/ui/button/button.component.scss b/src/app/ui/button/button.component.scss new file mode 100644 index 0000000..e69de29 diff --git a/src/app/ui/button/button.component.spec.ts b/src/app/ui/button/button.component.spec.ts new file mode 100644 index 0000000..794fc67 --- /dev/null +++ b/src/app/ui/button/button.component.spec.ts @@ -0,0 +1,25 @@ +import { async, ComponentFixture, TestBed } from '@angular/core/testing'; + +import { ButtonComponent } from './button.component'; + +describe('ButtonComponent', () => { + let component: ButtonComponent; + let fixture: ComponentFixture; + + beforeEach(async(() => { + TestBed.configureTestingModule({ + declarations: [ ButtonComponent ] + }) + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(ButtonComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/ui/button/button.component.ts b/src/app/ui/button/button.component.ts new file mode 100644 index 0000000..a59ed36 --- /dev/null +++ b/src/app/ui/button/button.component.ts @@ -0,0 +1,89 @@ +import { Component, OnInit } from '@angular/core'; +import { HttpClient } from '@angular/common/http'; +import {CdkDragDrop, moveItemInArray} from '@angular/cdk/drag-drop'; +@Component({ + selector: 'app-button', + templateUrl: './button.component.html', + styleUrls: ['./button.component.scss'] +}) +export class ButtonComponent implements OnInit { + + constructor(public http: HttpClient) { } + + + data =[ + { + id:"1", + name:"广西总队", + order:0, + parentId:null, + children:[ + { + id:"2", + name:"南宁支队", + order:2, + parentId:1, + children:[ + { + id:"6", + name:"南宁特勤大队", + order:0, + parentId:2, + children:[ + { + id:"6", + name:"南宁特勤3中队", + order:3, + parentId:6, + }, + { + id:"6", + name:"南宁特勤2中队", + order:2, + parentId:6, + }, + { + id:"6", + name:"南宁特勤1中队", + order:1, + parentId:6, + } + ] + } + ] + }, + { + id:"3", + name:"北海支队", + order:1, + parentId:1 + }, + { + id:"4", + name:"梧州支队", + order:0, + parentId:1 + }, + { + id:"5", + name:"桂林支队", + order:3, + parentId:1 + }, + ] + } + ] + + + ngOnInit() { + var str = "xxxx.jjjj" + // console.log(2222,str.split('.')[1]) + } + + drop(event: CdkDragDrop) { + moveItemInArray(this.data, event.previousIndex, event.currentIndex); + + } + + +} diff --git a/src/app/ui/card/card.component.html b/src/app/ui/card/card.component.html new file mode 100644 index 0000000..da5b6ca --- /dev/null +++ b/src/app/ui/card/card.component.html @@ -0,0 +1,12 @@ + + 简单的卡片 + 卡片的字幕 + 原来爱情的世界很大,大得可以装下一百种委屈;原来爱情的世界很小,小得三个人就会窒息。 + + + + + + 我要被固定在卡片底部 + + \ No newline at end of file diff --git a/src/app/ui/card/card.component.scss b/src/app/ui/card/card.component.scss new file mode 100644 index 0000000..feb037a --- /dev/null +++ b/src/app/ui/card/card.component.scss @@ -0,0 +1,10 @@ + +mat-card{ + width: 300px; + height: 600px; + img{ + width: 300px; + height: 300px; + padding: 16px; + } +} \ No newline at end of file diff --git a/src/app/ui/card/card.component.spec.ts b/src/app/ui/card/card.component.spec.ts new file mode 100644 index 0000000..e141708 --- /dev/null +++ b/src/app/ui/card/card.component.spec.ts @@ -0,0 +1,25 @@ +import { async, ComponentFixture, TestBed } from '@angular/core/testing'; + +import { CardComponent } from './card.component'; + +describe('CardComponent', () => { + let component: CardComponent; + let fixture: ComponentFixture; + + beforeEach(async(() => { + TestBed.configureTestingModule({ + declarations: [ CardComponent ] + }) + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(CardComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/ui/card/card.component.ts b/src/app/ui/card/card.component.ts new file mode 100644 index 0000000..ae25273 --- /dev/null +++ b/src/app/ui/card/card.component.ts @@ -0,0 +1,15 @@ +import { Component, OnInit } from '@angular/core'; + +@Component({ + selector: 'app-card', + templateUrl: './card.component.html', + styleUrls: ['./card.component.scss'] +}) +export class CardComponent implements OnInit { + + constructor() { } + + ngOnInit() { + } + +} diff --git a/src/app/ui/changepassword/changepassword.component.html b/src/app/ui/changepassword/changepassword.component.html new file mode 100644 index 0000000..a2ebef3 --- /dev/null +++ b/src/app/ui/changepassword/changepassword.component.html @@ -0,0 +1,48 @@ +
    + 修改密码 +
    +
    + +
    + + 原密码 + + + + + 新密码 + + + +
    +
    密码格式8-20位,字母+数字
    +
    + + 确认新密码 + + + +
    +
    密码输入不一致!
    +
    +
    + {{errmsg}} +
    + +
    + + +
    + +
    +
    \ No newline at end of file diff --git a/src/app/ui/changepassword/changepassword.component.scss b/src/app/ui/changepassword/changepassword.component.scss new file mode 100644 index 0000000..1cc8052 --- /dev/null +++ b/src/app/ui/changepassword/changepassword.component.scss @@ -0,0 +1,15 @@ +.passwordCard { + width: 300px; + height: 100%; +} +.mat-form-field { + display: block; + width: 300px; +} +.group-error-content { + font-size: 12px; + color: red; +} +.mat-dialog-content { + overflow: visible +} diff --git a/src/app/ui/changepassword/changepassword.component.ts b/src/app/ui/changepassword/changepassword.component.ts new file mode 100644 index 0000000..928d2e8 --- /dev/null +++ b/src/app/ui/changepassword/changepassword.component.ts @@ -0,0 +1,44 @@ +import { Component, OnInit } from '@angular/core'; +import { HttpClient } from '@angular/common/http' +import { MatDialogRef } from '@angular/material/dialog'; +import { MatSnackBar, MatSnackBarConfig } from '@angular/material/snack-bar'; + + + +@Component({ + selector: 'app-changepassword', + templateUrl: './changepassword.component.html', + styleUrls: ['./changepassword.component.scss'] +}) + +export class ChangepasswordComponent implements OnInit { + + constructor(private http:HttpClient,public snackBar: MatSnackBar, + public dialogRef: MatDialogRef) { } + + ngOnInit() { + } + errmsg :string = '' + + onSubmit(e){ + this.http.put( + '/api/Account/Password', + { + newPassword: e.newPassword, + password: e.password + } + ).subscribe(data=> { + this.dialogRef.close(data); + const config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.snackBar.open('密码修改成功','确定',config); + },(err) => + {this.errmsg = err} + ) + } + + + +} + diff --git a/src/app/ui/changepassword/equal-validator.directive.ts b/src/app/ui/changepassword/equal-validator.directive.ts new file mode 100644 index 0000000..44d50bf --- /dev/null +++ b/src/app/ui/changepassword/equal-validator.directive.ts @@ -0,0 +1,30 @@ +import { Directive, Input } from '@angular/core'; +import { NG_VALIDATORS, Validator, AbstractControl, ValidatorFn} from '@angular/forms'; + +@Directive({ + selector: '[appConfirmpsw]', + providers: [{ + provide : NG_VALIDATORS, + useExisting : ConfirmpswDirective, + multi: true + }] +}) +export class ConfirmpswDirective implements Validator { + + @Input('appConfirmpsw') confirmpsw: string; + constructor() { + + } + validate(control: AbstractControl): {[key: string]: any} { + return this.confirmpsw ? comfirmPswValidator(this.confirmpsw)(control) : null; + } +} + +export function comfirmPswValidator(_confirmpsw: string): ValidatorFn { + return (control: AbstractControl): {[key: string]: any} => { + if ( !control.value ) { + return { 'required' : true }; + } + return control.value !== _confirmpsw ? {'confirmpsw' : {value: true}} : null; + }; +} \ No newline at end of file diff --git a/src/app/ui/dateselect/dateselect.component.html b/src/app/ui/dateselect/dateselect.component.html new file mode 100644 index 0000000..c400626 --- /dev/null +++ b/src/app/ui/dateselect/dateselect.component.html @@ -0,0 +1,11 @@ + + + + + + +
    +
    {{e}}
    +
    + + diff --git a/src/app/ui/dateselect/dateselect.component.scss b/src/app/ui/dateselect/dateselect.component.scss new file mode 100644 index 0000000..be335f5 --- /dev/null +++ b/src/app/ui/dateselect/dateselect.component.scss @@ -0,0 +1,7 @@ +.example-events { + width: 400px; + height: 200px; + border: 1px solid #555; + overflow: auto; + } + \ No newline at end of file diff --git a/src/app/ui/dateselect/dateselect.component.spec.ts b/src/app/ui/dateselect/dateselect.component.spec.ts new file mode 100644 index 0000000..1e4f0dc --- /dev/null +++ b/src/app/ui/dateselect/dateselect.component.spec.ts @@ -0,0 +1,25 @@ +import { async, ComponentFixture, TestBed } from '@angular/core/testing'; + +import { DateselectComponent } from './dateselect.component'; + +describe('DateselectComponent', () => { + let component: DateselectComponent; + let fixture: ComponentFixture; + + beforeEach(async(() => { + TestBed.configureTestingModule({ + declarations: [ DateselectComponent ] + }) + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(DateselectComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/ui/dateselect/dateselect.component.ts b/src/app/ui/dateselect/dateselect.component.ts new file mode 100644 index 0000000..6c3347c --- /dev/null +++ b/src/app/ui/dateselect/dateselect.component.ts @@ -0,0 +1,23 @@ +import { Component, OnInit } from '@angular/core'; +import {MatDatepickerInputEvent} from '@angular/material/datepicker'; + + + +@Component({ + selector: 'app-dateselect', + templateUrl: './dateselect.component.html', + styleUrls: ['./dateselect.component.scss'], +}) + +export class DateselectComponent implements OnInit { + + constructor() { } + + ngOnInit() { + } + events: string[] = []; + + addEvent(type: string, event: MatDatepickerInputEvent) { + this.events.push(`${type}: ${event.value}`); + } +} diff --git a/src/app/ui/enterpriseuser/addenterpriseuser.component.html b/src/app/ui/enterpriseuser/addenterpriseuser.component.html new file mode 100644 index 0000000..1ee3b98 --- /dev/null +++ b/src/app/ui/enterpriseuser/addenterpriseuser.component.html @@ -0,0 +1,44 @@ +

    创建企业用户

    + +
    + +
    + + + +
    + +
    + + + +
    + +
    + + + +
    + +
    + + + +
    + +
    +

    {{errmsg}}

    +
    + +
    + + +
    + +
    \ No newline at end of file diff --git a/src/app/ui/enterpriseuser/addenterpriseuser.component.ts b/src/app/ui/enterpriseuser/addenterpriseuser.component.ts new file mode 100644 index 0000000..0ebea60 --- /dev/null +++ b/src/app/ui/enterpriseuser/addenterpriseuser.component.ts @@ -0,0 +1,35 @@ +import { Component, OnInit, Inject } from '@angular/core'; +import { HttpClient } from '@angular/common/http'; +import {MatDialogRef} from '@angular/material/dialog'; + + + +@Component({ + selector: 'addenterpriseuser', + templateUrl: './addenterpriseuser.component.html', + styleUrls: ['./enterpriseuser.component.scss'] + }) +export class AddEnterpriserUser { + + constructor(private http: HttpClient,public dialogRef: MatDialogRef) {} + + errmsg:any; //捕获错误信息 + //提交创建表单 + onSubmit (e) { + let date = new Date() + this.http.post('/api/CompanyUsers',{ + name:e.loginName, + phone:e.tel, + enabled:true, + creationTime:date, + usci:e.creditcode, + companyName:e.unitname + }).subscribe(data=>{ + this.dialogRef.close(data)}, + error=>{this.errmsg=error} + ) + } + + + +} \ No newline at end of file diff --git a/src/app/ui/enterpriseuser/editenterpriseuser.html b/src/app/ui/enterpriseuser/editenterpriseuser.html new file mode 100644 index 0000000..2b8a15a --- /dev/null +++ b/src/app/ui/enterpriseuser/editenterpriseuser.html @@ -0,0 +1,40 @@ +

    编辑企业用户

    + +
    + +
    + + + +
    + +
    + + + +
    + +
    + + + +
    + +
    + + + +
    + +
    + + +
    + +
    \ No newline at end of file diff --git a/src/app/ui/enterpriseuser/enterpriseuser.component.html b/src/app/ui/enterpriseuser/enterpriseuser.component.html new file mode 100644 index 0000000..af329b3 --- /dev/null +++ b/src/app/ui/enterpriseuser/enterpriseuser.component.html @@ -0,0 +1,78 @@ +
    +
    +
    + +
    + +
    + +
    + + +
    + +
    + + +
    + +
    + + +
    + +
    +
    + + +
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    登录账号{{element.name}}(该账号已被注销)单位名称{{element.companyName}}统一社会信用代码{{element.usci}}创建时间 + {{element.creationTime|date:'yyyy-MM-dd'}} + 操作 + + + + + + + +
    + + + diff --git a/src/app/ui/enterpriseuser/enterpriseuser.component.scss b/src/app/ui/enterpriseuser/enterpriseuser.component.scss new file mode 100644 index 0000000..6171aff --- /dev/null +++ b/src/app/ui/enterpriseuser/enterpriseuser.component.scss @@ -0,0 +1,38 @@ +table { + width: 100%; + text-align: center; + .cdk-header-cell { + text-align: center; + } + } +.maginleft { + margin-left: 5px; +} + + + +.header { + width: 100%; + padding: 10px; + margin-bottom: 10px; + box-sizing: border-box; + border-bottom: 1px solid rgba(0,0,0,0.12); + .queryBox { + box-sizing: border-box; + padding: 5px 15px; + display: flex; + flex-direction: row; + flex-wrap: wrap; + align-items:center; + justify-content:center; + .queryField { + margin: 0 15px; + input { + width: 180px; + height: 22px; + line-height: 22px; + border-radius: 3px;} + } + + } //queryBox +} \ No newline at end of file diff --git a/src/app/ui/enterpriseuser/enterpriseuser.component.spec.ts b/src/app/ui/enterpriseuser/enterpriseuser.component.spec.ts new file mode 100644 index 0000000..044b696 --- /dev/null +++ b/src/app/ui/enterpriseuser/enterpriseuser.component.spec.ts @@ -0,0 +1,25 @@ +import { async, ComponentFixture, TestBed } from '@angular/core/testing'; + +import { EnterpriseuserComponent } from './enterpriseuser.component'; + +describe('EnterpriseuserComponent', () => { + let component: EnterpriseuserComponent; + let fixture: ComponentFixture; + + beforeEach(async(() => { + TestBed.configureTestingModule({ + declarations: [ EnterpriseuserComponent ] + }) + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(EnterpriseuserComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/ui/enterpriseuser/enterpriseuser.component.ts b/src/app/ui/enterpriseuser/enterpriseuser.component.ts new file mode 100644 index 0000000..08603ed --- /dev/null +++ b/src/app/ui/enterpriseuser/enterpriseuser.component.ts @@ -0,0 +1,241 @@ +import { Component, OnInit, ViewChild, Inject } from '@angular/core'; +import {HttpClient} from '@angular/common/http' +import { MatDialogRef, MatDialog, MAT_DIALOG_DATA } from '@angular/material/dialog'; +import { MatPaginator } from '@angular/material/paginator'; +import { MatTableDataSource } from '@angular/material/table'; +import { PageEvent } from '@angular/material/paginator'; +import { AddEnterpriserUser } from './addenterpriseuser.component' +import { MatSnackBar, MatSnackBarConfig } from '@angular/material/snack-bar'; + + + +@Component({ + selector: 'app-enterpriseuser', + templateUrl: './enterpriseuser.component.html', + styleUrls: ['./enterpriseuser.component.scss'] +}) +export class EnterpriseuserComponent implements OnInit { + + constructor(public http: HttpClient,public dialog: MatDialog,public snackBar: MatSnackBar) { } + + ngOnInit() { + this.initData() + } + + displayedColumns: string[] = ['loginName', 'unitName', 'creditcode','time', 'operation']; + dataSource:any; //所有企业用户 + + userLogin:string; //搜索账号 + userName:string; //搜索名称 + creditcode:string//统一社会信用代码 + //分页 + @ViewChild(MatPaginator, {static: true}) + pageEvent: PageEvent; + paginator: MatPaginator; + length:any; //共多少条数据 + pageSize:any; //每页条数 + pageSizeOptions: number[] = [10] //设置每页条数 + pageNumber:number = 1; //第几页 + + //分页切换 + chagePage (e) { + this.pageNumber = e.pageIndex+1 + let data= { + Name: this.userLogin || '', + CompanyName: this.userName || '', + USCI: this.creditcode || '', + PageNumber: String(this.pageNumber), + } + this.http.get('/api/CompanyUsers',{params:data}).subscribe((data:any)=>{ + this.length = data.totalCount + this.pageSize = data.pageSize + this.dataSource = new MatTableDataSource(data.items) + }) + } + + //页面初始化 + 查询 + 重置 + initData () { + let data= { + Name: this.userLogin || '', + CompanyName: this.userName || '', + USCI: this.creditcode || '', + PageNumber: '1', + } + this.http.get('/api/CompanyUsers',{params:data}).subscribe((data:any)=>{ + this.length = data.totalCount + this.pageSize = data.pageSize + this.pageEvent.pageIndex = 0 + this.dataSource = new MatTableDataSource(data.items) + }) + } + + //更新当前页数据 + getAllCompanyUsers () { + let data= { + Name: this.userLogin || '', + CompanyName: this.userName || '', + USCI: this.creditcode || '', + PageNumber: String(this.pageNumber), + } + this.http.get('/api/CompanyUsers',{params:data}).subscribe((data:any)=>{ + this.length = data.totalCount + this.pageSize = data.pageSize + this.dataSource = new MatTableDataSource(data.items) + }) + } + + //清空搜索 + empty () { + this.userLogin = '' + this.userName = '' + this.creditcode = '' + this.initData() + } + + //创建企业用户 + open(){ + let dialogRef = this.dialog.open(AddEnterpriserUser); + dialogRef.afterClosed().subscribe(data=>{ + if (data) {this.getAllCompanyUsers()} + }); + } + + //编辑企业用户 + edit (e) { + let dialogRef = this.dialog.open(editenterpriseuser,{data:e}); + dialogRef.afterClosed().subscribe(data=>{ + if (data) {this.getAllCompanyUsers()} + }); + } + + //重置密码 + reset (e) { + this.http.put(`/api/CompanyUsers/${e.name}/ResetPassword`,{}).subscribe(data=>{ + const config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.snackBar.open('重置密码成功!','确定',config); + }) + } + + //查看企业信息 + see (e) { + this.http.get(`/api/CompanyUsers/${e.name}`).subscribe( + data=> { + let dialogRef = this.dialog.open(seeenterpriseuser, {data}); + dialogRef.afterClosed().subscribe(); + } + ) + } + + //启用 + enabled (e) { + this.http.put(`/api/CompanyUsers/${e.name}`,{ + name:e.name, + phone:e.phone, + enabled:true, + creationTime:e.creationTime, + usci:e.usci, + companyId:e.companyId, + companyName:e.companyName + }).subscribe(data=>{ + this.getAllCompanyUsers() + }) + } + + //禁用 + noEnabled (e) { + this.http.put(`/api/CompanyUsers/${e.name}`,{ + name:e.name, + phone:e.phone, + enabled:false, + creationTime:e.creationTime, + usci:e.usci, + companyId:e.companyId, + companyName:e.companyName + }).subscribe(data=>{ + this.getAllCompanyUsers() + }) + } + + //注销用户 + logoff (e) { + let isTrue = confirm('注销是不可逆操作,您确定要注销吗') + if (isTrue) { + this.http.delete(`/api/CompanyUsers/${e.name}/Cancel`).subscribe(data=>{ + this.getAllCompanyUsers() }) + } + } + + //删除 + delete (e) { + let isTrue = confirm('您确定要删除吗') + if (isTrue) { + this.http.delete(`/api/CompanyUsers/${e.name}`).subscribe(data=>{ + this.getAllCompanyUsers() + }) + } + } + + + +} + + + +//编辑企业用户 +@Component({ + selector: 'app-editenterpriseuser', + templateUrl: './editenterpriseuser.html', + styleUrls: ['./enterpriseuser.component.scss'] +}) +export class editenterpriseuser { + + constructor(public http: HttpClient,public dialog: MatDialog, + @Inject(MAT_DIALOG_DATA) public data,public dialogRef: MatDialogRef,) { } + + ngOnInit() { + this.companyName = this.data.companyName + this.companyPhone = this.data.phone + this.companyUsci = this.data.usci + } + + companyName:any; //企业单位名称 + companyPhone:any; //企业电话 + companyUsci:any; //企业统一社会信用代码 + + //提交表单 + onSubmit (e) { + this.http.put(`/api/CompanyUsers/${this.data.name}`,{ + name:this.data.name, + phone:e.tel, + enabled:this.data.enabled, + creationTime:this.data.creationTime, + usci:e.creditcode, + companyId:this.data.companyId, + companyName:e.unitname + }).subscribe(data=>{ + this.dialogRef.close('success') + }) + } + + + +} + + + +//查看企业用户 +@Component({ + selector: 'app-seeenterpriseuser', + templateUrl: './seeenterpriseuser.html', + styleUrls: ['./enterpriseuser.component.scss'] +}) +export class seeenterpriseuser { + + constructor(public http: HttpClient,public dialog: MatDialog, + @Inject(MAT_DIALOG_DATA) public data) { } + + ngOnInit() {} + +} \ No newline at end of file diff --git a/src/app/ui/enterpriseuser/seeenterpriseuser.html b/src/app/ui/enterpriseuser/seeenterpriseuser.html new file mode 100644 index 0000000..a5e8a1c --- /dev/null +++ b/src/app/ui/enterpriseuser/seeenterpriseuser.html @@ -0,0 +1,29 @@ +查看企业用户 + +
    + + 登录账号: + {{data.name}} + + 单位名称: + {{data.companyName}} + + 联系电话: + {{data.phone}} + + 统一社会信用代码: + {{data.usci}} + + 创建时间: + {{data.creationTime|date:'yyyy-MM-dd'}} + + 是否禁用: + + + + +
    + +
    + +
    \ No newline at end of file diff --git a/src/app/ui/fire-fighting-facilities-formwork/addBuilt-in.html b/src/app/ui/fire-fighting-facilities-formwork/addBuilt-in.html new file mode 100644 index 0000000..0b7db78 --- /dev/null +++ b/src/app/ui/fire-fighting-facilities-formwork/addBuilt-in.html @@ -0,0 +1,20 @@ +
    新增内置分组
    +
    +
    + +
    + + + +
    + +
    + + +
    +
    +
    \ No newline at end of file diff --git a/src/app/ui/fire-fighting-facilities-formwork/addBuilt-inAttribute.html b/src/app/ui/fire-fighting-facilities-formwork/addBuilt-inAttribute.html new file mode 100644 index 0000000..44f46e2 --- /dev/null +++ b/src/app/ui/fire-fighting-facilities-formwork/addBuilt-inAttribute.html @@ -0,0 +1,34 @@ +
    新增内置分组属性
    +
    +
    + +
    + + + +
    +
    + + + + + +
    +
    + + + + + +
    + +
    + + +
    +
    +
    \ No newline at end of file diff --git a/src/app/ui/fire-fighting-facilities-formwork/addFireFightingFacilitiesFormwork.html b/src/app/ui/fire-fighting-facilities-formwork/addFireFightingFacilitiesFormwork.html new file mode 100644 index 0000000..19d1c0f --- /dev/null +++ b/src/app/ui/fire-fighting-facilities-formwork/addFireFightingFacilitiesFormwork.html @@ -0,0 +1,20 @@ +
    新增消防设施模板
    +
    +
    + +
    + + + +
    + +
    + + +
    +
    +
    \ No newline at end of file diff --git a/src/app/ui/fire-fighting-facilities-formwork/addOptional.html b/src/app/ui/fire-fighting-facilities-formwork/addOptional.html new file mode 100644 index 0000000..1065e7f --- /dev/null +++ b/src/app/ui/fire-fighting-facilities-formwork/addOptional.html @@ -0,0 +1,37 @@ +
    新增可选分组
    +
    +
    + +
    + + + +
    +
    + + + 表单 + 表格 + + +
    +
    + + + 不新增 + 新增行 + 新增组 + + +
    + +
    + + +
    +
    +
    \ No newline at end of file diff --git a/src/app/ui/fire-fighting-facilities-formwork/addOptionalAttribute.html b/src/app/ui/fire-fighting-facilities-formwork/addOptionalAttribute.html new file mode 100644 index 0000000..ff98186 --- /dev/null +++ b/src/app/ui/fire-fighting-facilities-formwork/addOptionalAttribute.html @@ -0,0 +1,71 @@ +
    新增可选分组属性
    +
    +
    + +
    + + + +
    + +
    + + + + {{item.viewValue}} + + + + + + +
    + +
    + + + + + +
    + +
    + + + 不验证 + + + 区间 + 正则匹配 + + + + + +
    + +
    + + + +
    + +
    + + + +
    + +
    + + +
    +
    +
    \ No newline at end of file diff --git a/src/app/ui/fire-fighting-facilities-formwork/editBuilt-inAttribute.html b/src/app/ui/fire-fighting-facilities-formwork/editBuilt-inAttribute.html new file mode 100644 index 0000000..7b897c8 --- /dev/null +++ b/src/app/ui/fire-fighting-facilities-formwork/editBuilt-inAttribute.html @@ -0,0 +1,40 @@ +
    编辑内置分组属性
    +
    +
    + +
    + + + +
    +
    + + + + + +
    +
    + + + + + +
    +
    + + + +
    + +
    + + +
    +
    +
    \ No newline at end of file diff --git a/src/app/ui/fire-fighting-facilities-formwork/editFireFightingFacilitiesFormwork.html b/src/app/ui/fire-fighting-facilities-formwork/editFireFightingFacilitiesFormwork.html new file mode 100644 index 0000000..8ef636a --- /dev/null +++ b/src/app/ui/fire-fighting-facilities-formwork/editFireFightingFacilitiesFormwork.html @@ -0,0 +1,20 @@ +
    编辑消防设施模板
    +
    +
    + +
    + + + +
    + +
    + + +
    +
    +
    \ No newline at end of file diff --git a/src/app/ui/fire-fighting-facilities-formwork/editOptionalAttribute.html b/src/app/ui/fire-fighting-facilities-formwork/editOptionalAttribute.html new file mode 100644 index 0000000..3207882 --- /dev/null +++ b/src/app/ui/fire-fighting-facilities-formwork/editOptionalAttribute.html @@ -0,0 +1,76 @@ +
    编辑可选分组属性
    +
    +
    + +
    + + + +
    + +
    + + + + {{item.viewValue}} + + + + + + +
    + +
    + + + + + +
    + +
    + + + 不验证 + + + 区间 + 正则匹配 + + + + + +
    + +
    + + + + + + +
    + +
    + + + +
    + +
    + + +
    +
    +
    \ No newline at end of file diff --git a/src/app/ui/fire-fighting-facilities-formwork/fire-fighting-facilities-formwork.component.html b/src/app/ui/fire-fighting-facilities-formwork/fire-fighting-facilities-formwork.component.html new file mode 100644 index 0000000..cfad728 --- /dev/null +++ b/src/app/ui/fire-fighting-facilities-formwork/fire-fighting-facilities-formwork.component.html @@ -0,0 +1,189 @@ +
    +
    +
    + 消防设施模板 +
    + + + + +
    +
    +
    +
    + {{item.name}} + block +
    +
    +
    + +
    + + + +
    +
    + + + arrow_upward + arrow_downward +
    + +
    +

    + + + add_box + block + block + delete +

    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    名称 + {{element.name}} + 是否逐层统计 + + + 是否合并 + + + 操作 + border_color + delete +
    +
    +
    + +
    +
    + + +
    +
    + + + arrow_upward + arrow_downward +
    + +
    +

    + + + add_box + star + star_border + block + block + delete +

    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    名称 + {{element.propertyName}} + 类型 + + + + + + + + + + 默认值 + {{element.propertyValue}} + 必填 + + + 单位 + {{element.physicalUnit}} + 操作 + border_color + delete +
    +
    +
    + +
    +
    + +
    + +
    +
    + diff --git a/src/app/ui/fire-fighting-facilities-formwork/fire-fighting-facilities-formwork.component.scss b/src/app/ui/fire-fighting-facilities-formwork/fire-fighting-facilities-formwork.component.scss new file mode 100644 index 0000000..5ca7442 --- /dev/null +++ b/src/app/ui/fire-fighting-facilities-formwork/fire-fighting-facilities-formwork.component.scss @@ -0,0 +1,80 @@ +.content { + margin: 0 0 0 10px; + width: 100%; + height: 90%; + overflow-y: auto; + display: flex; + .leftBox { + flex: 20%; + padding-top: 10px; + } + .rightBox { + border-left: 1px solid #999; + flex: 80%; + overflow-y: auto; + } +} + +//左侧样式 +.bank { + display: flex; + font-size: 18px; + font-weight: 500; +} +.mat-icon { + width: 18px; + height: 18px; + vertical-align:top; + margin-right: 8px; + cursor:pointer; +} +.material { + cursor:pointer; + height: 30px; + font-size: 16px; + margin-top: 10px; + padding-left: 25px; + .overFlowText { + width: 135px; + display: inline-block; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + } + .blockBtn { + float: right; + margin-right: 12px; + width: 16px; + height: 16px; + } +} +//选择样式 +.active { + background-color: rgba(225,225,225,0.8) +} + +//右侧样式 +.groupingContent { + height: 100%; + overflow-y: auto; + .groupingButton{ + padding-left: 10px; + margin: 10px 0; + .mat-icon{ + margin: 5px 0 0 15px;} + } + .groupingHeader{ + background-color: #d7d7d7; + padding: 5px 0 0 25px; + height: 30px; + display: flex; + .mat-icon {margin: 0 5px;} + } +} +table { + width: 100%; + text-align: center; + .cdk-header-cell { + text-align: center; + } +} \ No newline at end of file diff --git a/src/app/ui/fire-fighting-facilities-formwork/fire-fighting-facilities-formwork.component.spec.ts b/src/app/ui/fire-fighting-facilities-formwork/fire-fighting-facilities-formwork.component.spec.ts new file mode 100644 index 0000000..4d81e94 --- /dev/null +++ b/src/app/ui/fire-fighting-facilities-formwork/fire-fighting-facilities-formwork.component.spec.ts @@ -0,0 +1,25 @@ +import { async, ComponentFixture, TestBed } from '@angular/core/testing'; + +import { FireFightingFacilitiesFormworkComponent } from './fire-fighting-facilities-formwork.component'; + +describe('FireFightingFacilitiesFormworkComponent', () => { + let component: FireFightingFacilitiesFormworkComponent; + let fixture: ComponentFixture; + + beforeEach(async(() => { + TestBed.configureTestingModule({ + declarations: [ FireFightingFacilitiesFormworkComponent ] + }) + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(FireFightingFacilitiesFormworkComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/ui/fire-fighting-facilities-formwork/fire-fighting-facilities-formwork.component.ts b/src/app/ui/fire-fighting-facilities-formwork/fire-fighting-facilities-formwork.component.ts new file mode 100644 index 0000000..b3bb4e1 --- /dev/null +++ b/src/app/ui/fire-fighting-facilities-formwork/fire-fighting-facilities-formwork.component.ts @@ -0,0 +1,806 @@ +import { Component, OnInit, Inject } from '@angular/core'; +import { HttpClient } from '@angular/common/http'; +import { MatDialog, MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog'; +import { MatSnackBarConfig, MatSnackBar } from '@angular/material/snack-bar'; + + + +@Component({ + selector: 'app-fire-fighting-facilities-formwork', + templateUrl: './fire-fighting-facilities-formwork.component.html', + styleUrls: ['./fire-fighting-facilities-formwork.component.scss'] +}) +export class FireFightingFacilitiesFormworkComponent implements OnInit { + + constructor(private http:HttpClient,public dialog: MatDialog,public snackBar: MatSnackBar) { } + + displayedColumn = ['checked','name','isEachFloor','isMerged','operation'] + displayedColumns = ['checked','name', 'type', 'default','required','physicalUnit','operation']; + + ngOnInit(): void { + this.http.get('/api/FacilityCategories').subscribe(data=>{ + this.allFireProtectionFacilities = data + this.selectFireProtectionFacilities = data[0] + this.getBuiltInGrouping() + this.getOptionalGrouping() + }) + } + + allFireProtectionFacilities:any = []; //所有的消防设施模板 + selectFireProtectionFacilities:any; //选中的消防设施模板 + FireProtectionFacilitiesIndex:any = 0; //选中的消防设施模板下标 + builtInGrouping:any = []; //当前模板的内置分组 + optionalGrouping:any = []; //当前模板的可选分组 + + //获取所有的消防设施模板 + getAllTemplate () { + this.http.get('/api/FacilityCategories').subscribe(data=>{ + this.allFireProtectionFacilities = data + this.selectFireProtectionFacilities = data[this.FireProtectionFacilitiesIndex] + }) + } + + //获取当前模板内置分组 + getBuiltInGrouping () { + if (this.selectFireProtectionFacilities){ + let id = {categoryId: this.selectFireProtectionFacilities.id} + this.http.get(`/api/FacilityGroups`,{params:id}).subscribe(data=>{ + this.builtInGrouping = data + this.selectBuiltIn = [] + }) + } + } + + //获取当前模板可选分组 + getOptionalGrouping () { + if (this.selectFireProtectionFacilities){ + let id = {categoryId: this.selectFireProtectionFacilities.id} + this.http.get(`/api/OptionalGroups`,{params:id}).subscribe(data=>{ + this.optionalGrouping = data + this.selectOptional = [] + }) + } + } + + //切换左侧模板时 + selectFire (e,index) { + if (this.FireProtectionFacilitiesIndex != index) { + this.selectFireProtectionFacilities = e + this.FireProtectionFacilitiesIndex = index + this.selectBuiltIn = [] + this.selectOptional = [] + this.getBuiltInGrouping() + this.getOptionalGrouping() + } + } + + //新增消防设施模板 + addTemplate () { + const dialogRef = this.dialog.open(addFireFightingFacilitiesFormworkComponent,{}); + dialogRef.afterClosed().subscribe(data=>{ + if (data) {this.getAllTemplate()} + }); + } + + //编辑消防设施模板 + editTemplate () { + if (this.selectFireProtectionFacilities) { + let data = this.selectFireProtectionFacilities + const dialogRef = this.dialog.open(editFireFightingFacilitiesFormworkComponent,{data}); + dialogRef.afterClosed().subscribe(data=>{ + if (data) {this.getAllTemplate()} + }); + } + } + + //禁启用消防设施模板 + enabledTemplate () { + if (this.selectFireProtectionFacilities) { + let data = this.selectFireProtectionFacilities + if (data.enabled) { + let newDate = { + id: data.id, + name: data.name, + enabled: false} + this.http.put(`/api/FacilityCategories/${data.id}`,newDate).subscribe(data=>{ + this.getAllTemplate()}) + } else{ + let newDate = { + id: data.id, + name: data.name, + enabled: true} + this.http.put(`/api/FacilityCategories/${data.id}`,newDate).subscribe(data=>{ + this.getAllTemplate()}) + } + } + } + + //删除消防设施模板 + deleteTemplate () { + if (this.selectFireProtectionFacilities) { + let isDelete = confirm('您确定要删除吗') + if (isDelete) { + this.http.delete(`/api/FacilityCategories/${this.selectFireProtectionFacilities.id}`).subscribe(data=>{ + this.http.get('/api/FacilityCategories').subscribe(data=>{ + this.allFireProtectionFacilities = data + this.selectFireProtectionFacilities = data[this.FireProtectionFacilitiesIndex] + this.builtInGrouping = [] + this.optionalGrouping = [] + this.getBuiltInGrouping() + this.getOptionalGrouping() })//http.get + }) + } + } + } + + //新增内置分组 + addBuiltIn () { + if (this.selectFireProtectionFacilities) { + let data = {template:this.selectFireProtectionFacilities, order:this.builtInGrouping[this.builtInGrouping.length-1]} + const dialogRef = this.dialog.open(addBuiltInComponent,{data}); + dialogRef.afterClosed().subscribe(data=>{ + if (data) {this.getBuiltInGrouping()} + }); + } + } + + //禁启用内置分组 + enabledBuilt (e) { + if (e.enabled) { + let data = { + id: e.id, + name: e.name, + order:e.order, + enabled: false, + facilityItems: e.facilityItems, + facilityCategoryId: e.facilityCategoryId} + this.http.put(`/api/FacilityGroups/${e.id}`,data).subscribe(data=>{ + const config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.snackBar.open('禁用成功','确定',config); + this.getBuiltInGrouping() + }) + } else { + let data = { + id: e.id, + name: e.name, + order:e.order, + enabled: true, + facilityItems: e.facilityItems, + facilityCategoryId: e.facilityCategoryId} + this.http.put(`/api/FacilityGroups/${e.id}`,data).subscribe(data=>{ + const config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.snackBar.open('启用成功','确定',config); + this.getBuiltInGrouping() + }) + } + } + + //删除内置分组 + deleteBuilt (e) { + let isDelete = confirm('您确定要删除吗') + if (isDelete) { + this.http.delete(`/api/FacilityGroups/${e.id}`).subscribe(data=>{ + this.getBuiltInGrouping() + }) + } + } + + //新增内置分组属性 + addBuiltInAttribute (e) { + let data = e + const dialogRef = this.dialog.open(addBuiltInAttributeComponent,{data}); + dialogRef.afterClosed().subscribe(data=>{ + if (data) {this.getBuiltInGrouping()} + }); + } + + //编辑内置分组属性 + editBuiltInAttribute (e,element) { + let data = {grouping:e, attribute: element} + const dialogRef = this.dialog.open(editBuiltInAttributeComponent,{data}); + dialogRef.afterClosed().subscribe(data=>{ + if (data) {this.getBuiltInGrouping()} + }); + } + + //删除内置分组属性 + deleteBuiltInAttribute (e,element){ + let isDelete = confirm('您确定要删除吗') + if (isDelete) { + e.facilityItems.splice(e.facilityItems.findIndex(item=>item==element),1) + this.http.put(`/api/FacilityGroups/${e.id}`,e).subscribe(data=>{ + this.getBuiltInGrouping() + }) + } + } + + //内置分组排序 + selectBuiltIn = []; //checked选中的内置分组 + + //内置分组change时 + changeBuilt (e,item) { + if (e.checked) { + this.selectBuiltIn.push(item) + } else{this.selectBuiltIn.splice(this.selectBuiltIn.findIndex(items=>items==item),1)} + } + + //内置分组上移 + topBuilt () { + if(this.selectBuiltIn.length) { + let attribute = this.selectBuiltIn[this.selectBuiltIn.length-1] //选中分组最后一项 + let newOrder = attribute.order //选中项的order + let index = this.builtInGrouping.findIndex(item=>item==attribute) //选中项在数组中的位置 + if (index!=0) { + this.builtInGrouping[index].order = this.builtInGrouping[index-1].order + this.http.put(`/api/FacilityGroups/${this.builtInGrouping[index].id}`,this.builtInGrouping[index]).subscribe(data=>{ + this.builtInGrouping[index-1].order = newOrder + this.http.put(`/api/FacilityGroups/${this.builtInGrouping[index-1].id}`,this.builtInGrouping[index-1]).subscribe(data=>{ + this.getBuiltInGrouping() + }) + }) + } + } + } + + //内置分组下移 + bottomBuilt () { + if(this.selectBuiltIn.length) { + let attribute = this.selectBuiltIn[this.selectBuiltIn.length-1] //选中分组最后一项 + let newOrder = attribute.order //最后一项的order + let index = this.builtInGrouping.findIndex(item=>item==attribute) + if (index!= this.builtInGrouping.length-1) { + this.builtInGrouping[index].order = this.builtInGrouping[index+1].order + this.http.put(`/api/FacilityGroups/${this.builtInGrouping[index].id}`,this.builtInGrouping[index]).subscribe(data=>{ + this.builtInGrouping[index+1].order = newOrder + this.http.put(`/api/FacilityGroups/${this.builtInGrouping[index+1].id}`,this.builtInGrouping[index+1]).subscribe(data=>{ + this.getBuiltInGrouping() + }) + }) + } + } + } + + + + //新增可选分组 + addOptional () { + if (this.selectFireProtectionFacilities) { + let data = {template:this.selectFireProtectionFacilities, order:this.optionalGrouping[this.optionalGrouping.length-1]} + const dialogRef = this.dialog.open(addOptionalComponent,{data}); + dialogRef.afterClosed().subscribe(data=>{ + if (data) {this.getOptionalGrouping()} + }); + } + } + + //是否可选-可选分组 + isOptional (e) { + if (e.isOptional) { + let data = { + facilityCategoryId: e.facilityCategoryId, + id: e.id, + name: e.name, + type: e.type, + addMode: e.addMode, + isOptional: false, + order: e.order, + enabled: e.enabled, + propertyInfos: e.propertyInfos} + this.http.put(`/api/OptionalGroups/${e.id}`,data).subscribe(data=>{ + const config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.snackBar.open('现状态为不可选','确定',config); + this.getOptionalGrouping() + }) + } else { + let data = { + facilityCategoryId: e.facilityCategoryId, + id: e.id, + name: e.name, + type: e.type, + addMode: e.addMode, + isOptional: true, + order: e.order, + enabled: e.enabled, + propertyInfos: e.propertyInfos} + this.http.put(`/api/OptionalGroups/${e.id}`,data).subscribe(data=>{ + const config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.snackBar.open('现状态为可选','确定',config); + this.getOptionalGrouping() + }) + } + } + + //禁启用可选分组 + enabledOptional (e) { + if (e.enabled) { + let data = { + facilityCategoryId: e.facilityCategoryId, + id: e.id, + name: e.name, + type: e.type, + addMode: e.addMode, + isOptional: e.isOptional, + order: e.order, + enabled: false, + propertyInfos: e.propertyInfos} + this.http.put(`/api/OptionalGroups/${e.id}`,data).subscribe(data=>{ + const config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.snackBar.open('禁用成功','确定',config); + this.getOptionalGrouping() + }) + } else { + let data = { + facilityCategoryId: e.facilityCategoryId, + id: e.id, + name: e.name, + type: e.type, + addMode: e.addMode, + isOptional: e.isOptional, + order: e.order, + enabled: true, + propertyInfos: e.propertyInfos} + this.http.put(`/api/OptionalGroups/${e.id}`,data).subscribe(data=>{ + const config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.snackBar.open('启用成功','确定',config); + this.getOptionalGrouping() + }) + } + } + + //删除可选分组 + deleteOptional (e) { + let isDelete = confirm('您确定要删除吗') + if (isDelete) { + this.http.delete(`/api/OptionalGroups/${e.id}`).subscribe(data=>{ + this.getOptionalGrouping() + }) + } + } + + //新增可选分组属性 + addOptionalAttribute (e) { + let data = e + const dialogRef = this.dialog.open(addOptionalAttributeComponent,{data}); + dialogRef.afterClosed().subscribe(data=>{ + if (data) {this.getOptionalGrouping()} + }); + } + + //编辑可选分组属性 + editOptionalAttribute (e,element) { + let data = {grouping:e, attribute: element} + const dialogRef = this.dialog.open(editOptionalAttributeComponent,{data}); + dialogRef.afterClosed().subscribe(data=>{ + if (data) {this.getOptionalGrouping()} + }); + } + + //删除可选分组属性 + deleteOptionalAttribute (e,element) { + let isDelete = confirm('您确定要删除吗') + if (isDelete) { + e.propertyInfos.splice(e.propertyInfos.findIndex(item=>item==element),1) + this.http.put(`/api/OptionalGroups/${e.id}`,e).subscribe(data=>{ + this.getOptionalGrouping() + }) + } + } + + //可选分组排序 + selectOptional = []; //checked选中的可选分组 + + //可选分组change时 + changeOptional (e,item) { + if (e.checked) { + this.selectOptional.push(item) + } else{this.selectOptional.splice(this.selectOptional.findIndex(items=>items==item),1)} + } + + //可选分组上移 + topOptional () { + if(this.selectOptional.length) { + let attribute = this.selectOptional[this.selectOptional.length-1] //选中分组最后一项 + let newOrder = attribute.order //选中项的order + let index = this.optionalGrouping.findIndex(item=>item==attribute) //选中项在数组中的位置 + if (index!=0) { + this.optionalGrouping[index].order = this.optionalGrouping[index-1].order + this.http.put(`/api/OptionalGroups/${this.optionalGrouping[index].id}`,this.optionalGrouping[index]).subscribe(data=>{ + this.optionalGrouping[index-1].order = newOrder + this.http.put(`/api/OptionalGroups/${this.optionalGrouping[index-1].id}`,this.optionalGrouping[index-1]).subscribe(data=>{ + this.getOptionalGrouping() + }) + }) + } + } + } + + //可选分组下移 + bottomOptional () { + if(this.selectOptional.length) { + let attribute = this.selectOptional[this.selectOptional.length-1] //选中分组最后一项 + let newOrder = attribute.order //选中项的order + let index = this.optionalGrouping.findIndex(item=>item==attribute) //选中项在数组中的位置 + if (index!=this.optionalGrouping.length-1) { + this.optionalGrouping[index].order = this.optionalGrouping[index+1].order + this.http.put(`/api/OptionalGroups/${this.optionalGrouping[index].id}`,this.optionalGrouping[index]).subscribe(data=>{ + this.optionalGrouping[index+1].order = newOrder + this.http.put(`/api/OptionalGroups/${this.optionalGrouping[index+1].id}`,this.optionalGrouping[index+1]).subscribe(data=>{ + this.getOptionalGrouping() + }) + }) + } + } + } + + + +} + + + +//新增消防设施模板 +@Component({ + selector: 'app-addFireFightingFacilitiesFormwork', + templateUrl: './addFireFightingFacilitiesFormwork.html', + styleUrls: ['./fire-fighting-facilities-formwork.component.scss'] +}) +export class addFireFightingFacilitiesFormworkComponent { + + constructor(private http:HttpClient,public dialogRef: MatDialogRef) { } + + ngOnInit(): void { + + } + + //提交表单 + onSubmit (e) { + let data = { + name: e.name, + enabled: true + } + this.http.post('/api/FacilityCategories',data).subscribe(data=>{ + this.dialogRef.close(data); + }) + } + +} + + + +//编辑消防设施模板 +@Component({ + selector: 'app-editFireFightingFacilitiesFormwork', + templateUrl: './editFireFightingFacilitiesFormwork.html', + styleUrls: ['./fire-fighting-facilities-formwork.component.scss'] +}) +export class editFireFightingFacilitiesFormworkComponent { + + constructor(private http:HttpClient,public dialogRef: MatDialogRef, + @Inject(MAT_DIALOG_DATA) public data) { } + + ngOnInit(): void { + this.templateName = this.data.name + } + + templateName:any; //模板名字 + + //提交表单 + onSubmit (e) { + let data = { + id: this.data.id, + name: this.templateName, + enabled: this.data.enabled} + this.http.put(`/api/FacilityCategories/${this.data.id}`,data).subscribe(data=>{ + this.dialogRef.close('success'); + }) + } + +} + + + +//新增消防设施模板内置分组 +@Component({ + selector: 'app-addBuiltIn', + templateUrl: './addBuilt-in.html', + styleUrls: ['./fire-fighting-facilities-formwork.component.scss'] +}) +export class addBuiltInComponent { + + constructor(private http:HttpClient,public dialogRef: MatDialogRef, + @Inject(MAT_DIALOG_DATA) public data) { } + + ngOnInit(): void { + if (this.data.order) { + this.order = this.data.order.order+1 + } else{this.order=0} + } + + order:number; //order + //提交表单 + onSubmit (e) { + let data = { + name: e.name, + order: this.order, + enabled: true, + facilityItems: [], + facilityCategoryId: this.data.template.id} + this.http.post(`/api/FacilityGroups`,data).subscribe(data=>{ + this.dialogRef.close(data) + }) + } + +} + + + +//新增消防设施模板内置分组属性 +@Component({ + selector: 'app-addBuiltInAttribute', + templateUrl: './addBuilt-inAttribute.html', + styleUrls: ['./fire-fighting-facilities-formwork.component.scss'] +}) +export class addBuiltInAttributeComponent { + + constructor(private http:HttpClient,public dialogRef: MatDialogRef, + @Inject(MAT_DIALOG_DATA) public data) { } + + ngOnInit(): void { + if (this.data.facilityItems.length) { + this.order = this.data.facilityItems[this.data.facilityItems.length-1].order+1 + } else{ + this.order = 0 + } + } + + order:number; //order + + //提交表单 + onSubmit (e) { + let newFacilityItems = {name:e.name,isEachFloor:e.isEachFloor=='true'? true: false,order:this.order,isMerged:e.isMerged=='true'? true: false,} + this.data.facilityItems.push(newFacilityItems) + let data = { + id: this.data.id, + name: this.data.name, + order: this.data.order, + enabled: this.data.enabled, + facilityItems: this.data.facilityItems, + facilityCategoryId: this.data.facilityCategoryId} + this.http.put(`/api/FacilityGroups/${this.data.id}`,data).subscribe(data=>{ + this.dialogRef.close('success') + }) + } + +} + + + +//编辑消防设施模板内置分组属性 +@Component({ + selector: 'app-editBuiltInAttribute', + templateUrl: './editBuilt-inAttribute.html', + styleUrls: ['./fire-fighting-facilities-formwork.component.scss'] +}) +export class editBuiltInAttributeComponent { + + constructor(private http:HttpClient,public dialogRef: MatDialogRef, + @Inject(MAT_DIALOG_DATA) public data) { } + + ngOnInit(): void { + this.attributeName = this.data.attribute.name + this.attributeIsEachFloor = String(this.data.attribute.isEachFloor) + this.attributeIsMerged = String(this.data.attribute.isMerged) + this.attributeOrder = this.data.attribute.order + } + + attributeName:any; //属性名 + attributeIsEachFloor:any; //是否逐层统计 + attributeIsMerged:any; //是否合并 + attributeOrder:number; //属性order + + //提交表单 + onSubmit (e) { + let data = { + name: e.name, + isEachFloor: e.isEachFloor=='true'? true: false, + isMerged: e.isMerged=='true'? true: false, + order: e.order} + this.data.grouping.facilityItems.splice(this.data.grouping.facilityItems.findIndex(item=>item==this.data.attribute),1) + this.data.grouping.facilityItems.push(data) + this.http.put(`/api/FacilityGroups/${this.data.grouping.id}`,this.data.grouping).subscribe(data=>{ + this.dialogRef.close('success') + }) + } + + + +} + + + +//新增消防设施模板可选分组 +@Component({ + selector: 'app-addOptional', + templateUrl: './addOptional.html', + styleUrls: ['./fire-fighting-facilities-formwork.component.scss'] +}) +export class addOptionalComponent { + + constructor(private http:HttpClient,public dialogRef: MatDialogRef, + @Inject(MAT_DIALOG_DATA) public data) { } + + ngOnInit(): void { + if (this.data.order) { + this.order = this.data.order.order+1 + } else{this.order=0} + } + + order:number; //order + + //提交表单 + onSubmit (e) { + let data = { + facilityCategoryId: this.data.template.id, + name: e.name, + type: Number(e.type), + addMode: Number(e.addMode), + isOptional: true, + order: this.order, + enabled: true, + propertyInfos: [] + } + this.http.post('/api/OptionalGroups',data).subscribe(data=>{ + this.dialogRef.close(data) + }) + } + + + +} + + + +export interface Food { + value: number; + viewValue: string; +} +//新增消防设施模板可选分组属性 +@Component({ + selector: 'app-addOptionalAttribute', + templateUrl: './addOptionalAttribute.html', + styleUrls: ['./fire-fighting-facilities-formwork.component.scss'] +}) +export class addOptionalAttributeComponent { + + constructor(private http:HttpClient,public dialogRef: MatDialogRef, + @Inject(MAT_DIALOG_DATA) public data) { } + + ngOnInit(): void { + if (this.data.propertyInfos.length) { + this.order = this.data.propertyInfos[this.data.propertyInfos.length-1].order+1 + } else{ + this.order = 0 + } + } + + //定义属性数据 + propertyType:Food[]=[ + {value:0, viewValue: '单行文本'}, + {value:1, viewValue: '多行文本'}, + {value:2, viewValue: '数值'}, + {value:3, viewValue: '图片'}, + {value:4, viewValue: '图片数量'}, + {value:5, viewValue: '方向'}, + {value:6, viewValue: '布尔值'}, + {value:7, viewValue: '供给区域'}, + {value:8, viewValue: '供给类型'}] + + + order:number; //order + //提交表单 + onSubmit (e) { + let data = { + propertyName: e.propertyName, + propertyValue: e.propertyValue, + propertyType: e.propertyType, + required: e.required=='true'? true: false, + ruleName: e.ruleName, + ruleValue: e.ruleValue, + physicalUnit: e.physicalUnit, + order: this.order, + enabled: true, + visible: true, + tag: e.tag} + this.data.propertyInfos.push(data) + this.http.put(`/api/OptionalGroups/${this.data.id}`,this.data).subscribe(data=>{ + this.dialogRef.close('success') + }) + } + + + +} + + + +//编辑消防设施模板可选分组属性 +@Component({ + selector: 'app-editOptionalAttribute', + templateUrl: './editOptionalAttribute.html', + styleUrls: ['./fire-fighting-facilities-formwork.component.scss'] +}) +export class editOptionalAttributeComponent { + + constructor(private http:HttpClient,public dialogRef: MatDialogRef, + @Inject(MAT_DIALOG_DATA) public data) { } + + ngOnInit(): void { + this.propertyName = this.data.attribute.propertyName, + this.propertyType = this.data.attribute.propertyType + this.propertyValue = this.data.attribute.propertyValue, + this.required = String(this.data.attribute.required), + this.ruleName = this.data.attribute.ruleName, + this.ruleValue = this.data.attribute.ruleValue, + this.physicalUnit = this.data.attribute.physicalUnit, + this.order = this.data.attribute.order, + this.tag = this.data.attribute.tag + } + + //定义属性数据 + type:Food[]=[ + {value:0, viewValue: '单行文本'}, + {value:1, viewValue: '多行文本'}, + {value:2, viewValue: '数值'}, + {value:3, viewValue: '图片'}, + {value:4, viewValue: '图片数量'}, + {value:5, viewValue: '方向'}, + {value:6, viewValue: '布尔值'}, + {value:7, viewValue: '供给区域'}, + {value:8, viewValue: '供给类型'}] + + propertyName:any; //属性名 + propertyType:number; //属性类型 + propertyValue:any; //默认值 + required:any; //是否必填 + ruleName:any; //验证规则 + ruleValue:any; //验证内容 + physicalUnit:any; //单位 + order:number; //order + tag:any; //注释说明 + + //提交表单 + onSubmit (e) { + let data = { + propertyName: e.propertyName, + propertyValue: e.propertyValue, + propertyType: e.propertyType, + required: e.required=='true'? true: false, + ruleName: e.ruleName, + ruleValue: e.ruleValue, + physicalUnit: e.physicalUnit, + order: e.order, + enabled: true, + visible: true, + tag: e.tag} + this.data.grouping.propertyInfos.splice(this.data.grouping.propertyInfos.findIndex(item=>item==this.data.attribute),1) + this.data.grouping.propertyInfos.push(data) + this.http.put(`/api/OptionalGroups/${this.data.grouping.id}`,this.data.grouping).subscribe(data=>{ + this.dialogRef.close('success') + }) + } + + + +} \ No newline at end of file diff --git a/src/app/ui/fire-fighting-template/editingFireControl.html b/src/app/ui/fire-fighting-template/editingFireControl.html new file mode 100644 index 0000000..9d2be33 --- /dev/null +++ b/src/app/ui/fire-fighting-template/editingFireControl.html @@ -0,0 +1,45 @@ +
    编辑消防要素模板
    + +
    +
    + + + +
    + + +
    + +
    + + + + + {{node.name}} + + + + + + + {{node.name}} + + + +
    + +
    + + +
    +
    +
    \ No newline at end of file diff --git a/src/app/ui/fire-fighting-template/fire-fighting-template.component.html b/src/app/ui/fire-fighting-template/fire-fighting-template.component.html new file mode 100644 index 0000000..0b62ce3 --- /dev/null +++ b/src/app/ui/fire-fighting-template/fire-fighting-template.component.html @@ -0,0 +1,36 @@ +
    + 消防要素模板 + +
    + + + + + + + + + + + + + + +
    模板名称 {{element.name}} 操作 + + + + +
    \ No newline at end of file diff --git a/src/app/ui/fire-fighting-template/fire-fighting-template.component.scss b/src/app/ui/fire-fighting-template/fire-fighting-template.component.scss new file mode 100644 index 0000000..06f7d26 --- /dev/null +++ b/src/app/ui/fire-fighting-template/fire-fighting-template.component.scss @@ -0,0 +1,18 @@ +table { + width: 100%; + text-align: center; + .cdk-header-cell { + text-align: center; + } +} +.magin { + margin: 10px; + font-weight: 600; +} +.marginLeft { + margin-left: 5px; +} +.tree { + height: 450px; + overflow: auto; +} \ No newline at end of file diff --git a/src/app/ui/fire-fighting-template/fire-fighting-template.component.ts b/src/app/ui/fire-fighting-template/fire-fighting-template.component.ts new file mode 100644 index 0000000..f9aae74 --- /dev/null +++ b/src/app/ui/fire-fighting-template/fire-fighting-template.component.ts @@ -0,0 +1,309 @@ +import { Component, OnInit, Inject } from '@angular/core'; +import { HttpClient } from '@angular/common/http'; +import { MatDialog, MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog'; +import { MatTreeFlattener, MatTreeFlatDataSource } from '@angular/material/tree'; +import { FlatTreeControl } from '@angular/cdk/tree'; +import { MatSnackBar, MatSnackBarConfig } from '@angular/material/snack-bar'; + + + +@Component({ + selector: 'app-fire-fighting-template', + templateUrl: './fire-fighting-template.component.html', + styleUrls: ['./fire-fighting-template.component.scss'] +}) +export class FireFightingTemplateComponent implements OnInit { + + constructor(private http:HttpClient,public dialog: MatDialog,public snackBar: MatSnackBar) { } + + ngOnInit(): void { + this.getAllFireFighting() + } + + displayedColumns: string[] = ['name','operation']; + aLLFireFighting:any; //所有消防要素模板 + + //获取所有消防要素模板 + getAllFireFighting () { + this.http.get('/api/FireCategories').subscribe(data=>{ + this.aLLFireFighting=data + }) + } + + + + //新增消防模块窗口 + establish () { + let dialogRef = this.dialog.open(NewFireFighting, + { + width:'600px', + }); + dialogRef.afterClosed().subscribe((data)=>{ + if (data) {this.getAllFireFighting()} + }); + } + + //编辑消防模块窗口 + edit (e) { + let dialogRef = this.dialog.open(EditFireClassification, + { + width:'600px', + data:{e} + }); + dialogRef.afterClosed().subscribe((data)=>{ + if (data) {this.getAllFireFighting()} + }); + } + + //启用 + enable (e) { + this.http.put(`/api/FireCategories/${e.id}`,{ + id:e.id, + name:e.name, + enabled:true, + fireElements:e.fireElements + }).subscribe(data=>{ + this.getAllFireFighting() + }) + } + + //禁用 + prohibit (e) { + this.http.put(`/api/FireCategories/${e.id}`,{ + id:e.id, + name:e.name, + enabled:false, + fireElements:e.fireElements + }).subscribe(data=>{ + this.getAllFireFighting() + }) + } + + //删除 + delete (e) { + let isTrue = confirm('您确定要删除吗') + if (isTrue) { + this.http.delete(`/api/FireCategories/${e}`).subscribe(data=>{ + this.getAllFireFighting() + }) + } + } + + + + +} + + + +//新增消防分类窗口 +@Component({ + selector: 'app-newFireFighting', + templateUrl: './newFireFighting.html', + styleUrls: ['./fire-fighting-template.component.scss'] +}) +export class NewFireFighting { + newdata = []; + + private _transformer = (node, level: number) => { + return { + expandable: !!node.children && node.children.length > 0, + name: node.name, + level: level, + id: node.id, + parentId: node.parentId, + computed:node.computed, + order:node.order, + children:node.children ||'', + tag:node.tag, + }; + } + treeControl = new FlatTreeControl(node => node.level, node => node.expandable); + treeFlattener = new MatTreeFlattener(this._transformer, node => node.level, node => node.expandable, node => node.children); + dataSource = new MatTreeFlatDataSource(this.treeControl, this.treeFlattener); + + constructor(private http:HttpClient,public snackBar: MatSnackBar, + public dialogRef: MatDialogRef) {} + + ngOnInit(): void { + this.rendering() + } + + + + checkedAll:boolean=false; //全选 + checkedList:any=[]; //选中的消防要素 + + //渲染Tree + rendering () { + this.http.get('/api/FireElements').subscribe((data:any)=>{ + this.newdata=[] + function getparentNode(parentId){ + return data.find((item)=>{ + return item.id == parentId + }) + } + data.forEach(item => { + var parentNode = getparentNode(item.parentId); + if(parentNode){ + if(!parentNode.children){ + parentNode.children = [] + } + parentNode.children.push(item) + }else{ + if(!item.parentId){ + this.newdata.push(item) + } + } + }); + this.dataSource.data = this.newdata; + this.treeControl.expandAll() + }) + } + hasChild = (_: number, node: any) => node.expandable; + + //change时判断是否选中 + changed (e,id) { + if (e.checked) { + this.checkedList.push(id) + } else if (e.checked == false) { + this.checkedList.splice(this.checkedList.findIndex(item => item === id), 1) + } + } + + + + //提交创建 + onSubmit (e) { + if(this.checkedList.length) { + this.http.post('/api/FireCategories',{ + name:e.name, + enabled:true, + fireElements:this.checkedList + }).subscribe(data=>{ + this.dialogRef.close('success') + }) + }else { + const config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.snackBar.open('请选择消防要素','确定',config); + } + } + + + +} + + + + + +//编辑消防分类窗口 +@Component({ + selector: 'app-editingFire', + templateUrl: './editingFireControl.html', + styleUrls: ['./fire-fighting-template.component.scss'] +}) +export class EditFireClassification { + newdata = []; + + private transformer = (node, level: number) => { + return { + expandable: !!node.children && node.children.length > 0, + name: node.name, + level: level, + id: node.id, + parentId: node.parentId, + computed:node.computed, + order:node.order, + children:node.children ||'', + tag:node.tag, + checked:node.checked, + }; + } + treeControl = new FlatTreeControl(node => node.level, node => node.expandable); + treeFlattener = new MatTreeFlattener(this.transformer, node => node.level, node => node.expandable, node => node.children); + newDataSource = new MatTreeFlatDataSource(this.treeControl, this.treeFlattener); + + constructor(private http:HttpClient,public snackBar: MatSnackBar, + public dialogRef: MatDialogRef, + @Inject(MAT_DIALOG_DATA) public newdate) {} + + ngOnInit(): void { + this.fireID=this.newdate.e.id + this.fireName=this.newdate.e.name + this.rendering() + } + + + + fireID:any; //模板id + fireName:any; //模板name + checkedAll:boolean=false; //全选 + checkedList:any=[]; //选中的消防要素 + + //渲染Tree + rendering () { + this.http.get(`/api/FireCategories/${this.newdate.e.id}/FireElements`).subscribe((data:any)=>{ + data.forEach(item=>{ + if (item.checked === true) { + this.checkedList.push(item.id) + } + }) + this.newdata=[] + function getparentNode(parentId){ + return data.find((item)=>{ + return item.id == parentId + }) + } + data.forEach(item => { + var parentNode = getparentNode(item.parentId); + if(parentNode){ + if(!parentNode.children){ + parentNode.children = [] + } + parentNode.children.push(item) + }else{ + if(!item.parentId){ + this.newdata.push(item) + } + } + }); + this.newDataSource.data = this.newdata; + this.treeControl.expandAll() + }) + } + hasChild = (_: number, node: any) => node.expandable; + + //change时判断是否选中 + changed (e,id) { + if (e.checked) { + this.checkedList.push(id) + } else if (e.checked == false) { + this.checkedList.splice(this.checkedList.findIndex(item => item === id), 1) + } + } + + //提交编辑修改 + onSubmit (e) { + if (this.checkedList.length) { + this.http.put(`/api/FireCategories/${this.fireID}`,{ + id:this.fireID, + name:e.name, + enabled:this.newdate.e.enabled, + fireElements:this.checkedList + }).subscribe(data=>{ + this.dialogRef.close('success') + }) + } else{ + const config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.snackBar.open('请选择消防要素','确定',config); + } + } + + + +} \ No newline at end of file diff --git a/src/app/ui/fire-fighting-template/newFireFighting.html b/src/app/ui/fire-fighting-template/newFireFighting.html new file mode 100644 index 0000000..9d9fa46 --- /dev/null +++ b/src/app/ui/fire-fighting-template/newFireFighting.html @@ -0,0 +1,44 @@ +
    创建消防要素模板
    + +
    +
    + + + +
    + + +
    + +
    + + + + + {{node.name}} + + + + + + + {{node.name}} + + + +
    + +
    + + +
    +
    +
    \ No newline at end of file diff --git a/src/app/ui/fire-protection-elements/editingFireControl.html b/src/app/ui/fire-protection-elements/editingFireControl.html new file mode 100644 index 0000000..0abff80 --- /dev/null +++ b/src/app/ui/fire-protection-elements/editingFireControl.html @@ -0,0 +1,47 @@ +
    编辑消防要素
    +
    + +
    + + + + + +
    + + + +
    + +
    + + + + 是 + + + 否 + + +
    + +
    + + + 信息录入 + 预案管理 + 指挥系统 + + +
    + +
    + + +
    + +
    +
    \ No newline at end of file diff --git a/src/app/ui/fire-protection-elements/establish.html b/src/app/ui/fire-protection-elements/establish.html new file mode 100644 index 0000000..50f86b8 --- /dev/null +++ b/src/app/ui/fire-protection-elements/establish.html @@ -0,0 +1,41 @@ +
    创建消防要素
    +
    + +
    + + + + + +
    + + + + 是 + + + 否 + + +
    + +
    + + + 信息录入 + 预案管理 + 指挥系统 + + +
    + +
    + + +
    + +
    +
    \ No newline at end of file diff --git a/src/app/ui/fire-protection-elements/fire-protection-elements.component.html b/src/app/ui/fire-protection-elements/fire-protection-elements.component.html new file mode 100644 index 0000000..b390b48 --- /dev/null +++ b/src/app/ui/fire-protection-elements/fire-protection-elements.component.html @@ -0,0 +1,67 @@ +
    +
    +
    + 消防要素 + +
    + + + + {{node.name}} +
    + + + + + +
    +
    + + + + + {{node.name}} +
    + + + + + +
    +
    + +
    +
    + +
    + +
    +
    \ No newline at end of file diff --git a/src/app/ui/fire-protection-elements/fire-protection-elements.component.scss b/src/app/ui/fire-protection-elements/fire-protection-elements.component.scss new file mode 100644 index 0000000..12c709e --- /dev/null +++ b/src/app/ui/fire-protection-elements/fire-protection-elements.component.scss @@ -0,0 +1,36 @@ + +.magin { + margin: 8px 0 8px 10px; + font-weight: 600; +} + +.Box { + width: 100%; + height: 90%; + overflow-y: auto; + display: flex; + padding-left: 10px; + .right { + width: 100%; + } +} + +.mat-tree-node { + width: 380px; + position: relative; + .float { + position: absolute; + right: 0; + } +} +.maginTop { + margin: 10px 0; +} + +.example-radio-group { + flex-direction: column; +} + +.example-radio-button { +margin: 5px; +} \ No newline at end of file diff --git a/src/app/ui/fire-protection-elements/fire-protection-elements.component.ts b/src/app/ui/fire-protection-elements/fire-protection-elements.component.ts new file mode 100644 index 0000000..bb78d75 --- /dev/null +++ b/src/app/ui/fire-protection-elements/fire-protection-elements.component.ts @@ -0,0 +1,284 @@ +import { Component, OnInit, Inject } from '@angular/core'; +import { HttpClient } from '@angular/common/http'; +import { MatDialog, MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog'; +import { MatTreeFlattener, MatTreeFlatDataSource } from '@angular/material/tree'; +import { FlatTreeControl } from '@angular/cdk/tree'; + +@Component({ + selector: 'app-fire-protection-elements', + templateUrl: './fire-protection-elements.component.html', + styleUrls: ['./fire-protection-elements.component.scss'] +}) +export class FireProtectionElementsComponent implements OnInit { + data:any =[] + newdata = []; + + private _transformer = (node, level: number) => { + return { + expandable: !!node.children && node.children.length > 0, + name: node.name, + level: level, + id: node.id, + parentId: node.parentId, + computed:node.computed, + order:node.order, + children:node.children ||'', + tag:node.tag + }; + } + treeControl = new FlatTreeControl(node => node.level, node => node.expandable); + treeFlattener = new MatTreeFlattener(this._transformer, node => node.level, node => node.expandable, node => node.children); + dataSource = new MatTreeFlatDataSource(this.treeControl, this.treeFlattener); + + constructor(private http:HttpClient,public dialog: MatDialog) { } + + ngOnInit(): void { + this.getAllfireControl() + } + + //获取所有消防要素 + getAllfireControl () { + this.http.get('/api/FireElements').subscribe( + (data:any)=>{ + this.newdata=[] + function getparentNode(parentId){ + return data.find((item)=>{ + return item.id == parentId + }) + } + data.forEach(item => { + var parentNode = getparentNode(item.parentId); + if(parentNode){ + if(!parentNode.children){ + parentNode.children = [] + } + parentNode.children.push(item) + }else{ + if(!item.parentId){ + this.newdata.push(item) + } + } + }); + this.dataSource.data = this.newdata; + } + + ) + } + + //更新数据后重新渲染Tree + getlist = ():void=>{ + this.http.get('/api/FireElements').subscribe( + (data:any)=>{ + this.newdata = [] + function getparentNode(parentId){ + return data.find((item)=>{ + return item.id == parentId + }) + } + data.forEach(item => { + var parentNode = getparentNode(item.parentId); + if(parentNode){ + if(!parentNode.children){ + parentNode.children = [] + } + parentNode.children.push(item) + }else{ + if(!item.parentId){ + this.newdata.push(item) + } + } + }); + + const nodes = this.treeControl.dataNodes; + const expandNodes = []; + nodes.forEach((item) => { + if(item.expandable && this.treeControl.isExpanded(item)){ + expandNodes.push(item.id); + } + }); + this.dataSource.data = this.newdata; + let newNodes = this.treeControl.dataNodes; + newNodes = newNodes.filter(n => { + return expandNodes.indexOf(n.id) >= 0; + }); + newNodes.forEach(item => { + this.treeControl.expand(item); + }); + } + ) + } + + hasChild = (_: number, node: any) => node.expandable; + + //打开创建一级消防要素窗口 + addNew () { + let dialogRef = this.dialog.open(Establish); + dialogRef.afterClosed().subscribe((data)=>{ + if (data) {this.getlist()} + }); + } + + //打开创建窗口 + establish (e) { + let dialogRef = this.dialog.open(Establish, + { + data:e + }); + dialogRef.afterClosed().subscribe((data)=>{ + if (data) {this.getlist()} + }); + } + + //打开编辑窗口 + edit (e) { + let dialogRef = this.dialog.open(EditingFireControl, + { + data:e + }); + dialogRef.afterClosed().subscribe((data)=>{ + if (data) {this.getlist()} + }); + } + + //取消统计 + noStatistics (e) { + this.http.put(`/api/FireElements/${e.id}`,{ + expandable:e.expandable, + id:e.id, + name:e.name, + level:e.level, + order:e.order, + computed:false, + tag:e.tag, + parentId:e.parentId, + children:e.children + }).subscribe(data=>{ + this.getlist() + }) + } + + //确定统计 + statistics (e) { + this.http.put(`/api/FireElements/${e.id}`,{ + expandable:e.expandable, + id:e.id, + name:e.name, + level:e.level, + order:e.order, + computed:true, + tag:e.tag, + parentId:e.parentId, + children:e.children + }).subscribe(data=>{ + this.getlist() + }) + } + + //删除 + delete (e) { + let isTrue = confirm(`您确定要删除${e.name}吗`) + if (isTrue) { + this.http.delete(`/api/FireElements/${e.id}`).subscribe(data=>{ + this.getlist() + }) + } + } + + + + +} + + + +//创建窗口组件 +@Component({ + selector: 'app-establish', + templateUrl: './establish.html', + styleUrls: ['./fire-protection-elements.component.scss'] +}) +export class Establish { + + constructor(private http:HttpClient, + public dialogRef: MatDialogRef, + @Inject(MAT_DIALOG_DATA) public data) {} + + ngOnInit(): void {} + + order:any; //创建消防要素order排序值 + + //提交创建消防要素 + onSubmit (e) { + if (this.data) { + if(this.data.children == '') { + this.order=0 + } else if (this.data.children.length) { + this.order=this.data.children[this.data.children.length-1].order+1 + } + this.http.post('/api/FireElements',{ + name:e.name, + order:this.order, + computed:e.radio, + tag:e.tag, + parentId:this.data.id + }).subscribe(data=>{ + this.dialogRef.close('success') + }) + } else { + this.http.post('/api/FireElements',{ + name:e.name, + order:0, + computed:e.radio, + tag:e.tag, + parentId:null + }).subscribe(data=>{ + this.dialogRef.close('success') + }) + } + + } + + + +} + + + +//编辑窗口组件 +@Component({ + selector: 'app-editingFireControl', + templateUrl: './editingFireControl.html', + styleUrls: ['./fire-protection-elements.component.scss'] +}) +export class EditingFireControl { + + constructor(private http:HttpClient, + public dialogRef: MatDialogRef, + @Inject(MAT_DIALOG_DATA) public data) {} + + ngOnInit(): void { + this.fireName=this.data.name + } + + fireName:any; //消防要素name + + //编辑提交 + onSubmit (e) { + this.http.put(`/api/FireElements/${this.data.id}`,{ + expandable:this.data.expandable, + id:this.data.id, + name:e.name, + level:this.data.level, + order:e.order, + computed:this.data.computed, + tag:this.data.tag, + parentId:this.data.parentId, + children:this.data.children + }).subscribe(data=>{ + this.dialogRef.close('success') + }) + } + + + + } diff --git a/src/app/ui/footer/footer.component.html b/src/app/ui/footer/footer.component.html new file mode 100644 index 0000000..aacca5e --- /dev/null +++ b/src/app/ui/footer/footer.component.html @@ -0,0 +1,6 @@ + +
    + Copyright 2020. All Rights Reserved By Anxin +
    +
    + \ No newline at end of file diff --git a/src/app/ui/footer/footer.component.scss b/src/app/ui/footer/footer.component.scss new file mode 100644 index 0000000..59e0ee1 --- /dev/null +++ b/src/app/ui/footer/footer.component.scss @@ -0,0 +1,15 @@ + +.footer{ + position: fixed; + bottom: 0; + height: 46px; + width: 100%; + z-index: 100; + span{ + font-size: 16px; + color: white; + position: absolute; + right: 80px; + top: 8px; + } +} \ No newline at end of file diff --git a/src/app/ui/footer/footer.component.spec.ts b/src/app/ui/footer/footer.component.spec.ts new file mode 100644 index 0000000..2ca6c45 --- /dev/null +++ b/src/app/ui/footer/footer.component.spec.ts @@ -0,0 +1,25 @@ +import { async, ComponentFixture, TestBed } from '@angular/core/testing'; + +import { FooterComponent } from './footer.component'; + +describe('FooterComponent', () => { + let component: FooterComponent; + let fixture: ComponentFixture; + + beforeEach(async(() => { + TestBed.configureTestingModule({ + declarations: [ FooterComponent ] + }) + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(FooterComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/ui/footer/footer.component.ts b/src/app/ui/footer/footer.component.ts new file mode 100644 index 0000000..da17d82 --- /dev/null +++ b/src/app/ui/footer/footer.component.ts @@ -0,0 +1,15 @@ +import { Component, OnInit } from '@angular/core'; + +@Component({ + selector: 'app-footer', + templateUrl: './footer.component.html', + styleUrls: ['./footer.component.scss'] +}) +export class FooterComponent implements OnInit { + + constructor() { } + + ngOnInit() { + } + +} diff --git a/src/app/ui/grid/grid.component.html b/src/app/ui/grid/grid.component.html new file mode 100644 index 0000000..9014316 --- /dev/null +++ b/src/app/ui/grid/grid.component.html @@ -0,0 +1,34 @@ +

    网格列表

    + + + 我是页眉 + + 我是页脚 + + + + + + + +


    + + + + + + + + + + + + + + + + + + + + diff --git a/src/app/ui/grid/grid.component.scss b/src/app/ui/grid/grid.component.scss new file mode 100644 index 0000000..f302609 --- /dev/null +++ b/src/app/ui/grid/grid.component.scss @@ -0,0 +1,12 @@ +mat-grid-tile { + background: lightblue; +} +h1{ + font-size: 26px; +} + +img { + width: 100%; + height: 100%; +} + diff --git a/src/app/ui/grid/grid.component.spec.ts b/src/app/ui/grid/grid.component.spec.ts new file mode 100644 index 0000000..6410123 --- /dev/null +++ b/src/app/ui/grid/grid.component.spec.ts @@ -0,0 +1,25 @@ +import { async, ComponentFixture, TestBed } from '@angular/core/testing'; + +import { GridComponent } from './grid.component'; + +describe('GridComponent', () => { + let component: GridComponent; + let fixture: ComponentFixture; + + beforeEach(async(() => { + TestBed.configureTestingModule({ + declarations: [ GridComponent ] + }) + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(GridComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/ui/grid/grid.component.ts b/src/app/ui/grid/grid.component.ts new file mode 100644 index 0000000..203cb0c --- /dev/null +++ b/src/app/ui/grid/grid.component.ts @@ -0,0 +1,15 @@ +import { Component, OnInit } from '@angular/core'; + +@Component({ + selector: 'app-grid', + templateUrl: './grid.component.html', + styleUrls: ['./grid.component.scss'] +}) +export class GridComponent implements OnInit { + + constructor() { } + + ngOnInit() { + } + +} diff --git a/src/app/ui/list/list.component.html b/src/app/ui/list/list.component.html new file mode 100644 index 0000000..2d7dbdf --- /dev/null +++ b/src/app/ui/list/list.component.html @@ -0,0 +1,63 @@ + +

    列表分隔线

    + + Item 1 + + Item 2 + + Item 3 + +


    +

    导航列表

    + + + {{ link.name }} + + + +


    +

    行动列表

    + + + + +


    +

    选择列表

    + + + {{shoe}} + + +

    + 已选: {{shoes.selectedOptions.selected.length}}种 +

    +


    +

    多行列表且带图标

    + + + folder +

    item标题

    +

    + 我是 + -- xxx +

    +
    +
    + diff --git a/src/app/ui/list/list.component.scss b/src/app/ui/list/list.component.scss new file mode 100644 index 0000000..e69de29 diff --git a/src/app/ui/list/list.component.spec.ts b/src/app/ui/list/list.component.spec.ts new file mode 100644 index 0000000..beacd15 --- /dev/null +++ b/src/app/ui/list/list.component.spec.ts @@ -0,0 +1,25 @@ +import { async, ComponentFixture, TestBed } from '@angular/core/testing'; + +import { ListComponent } from './list.component'; + +describe('ListComponent', () => { + let component: ListComponent; + let fixture: ComponentFixture; + + beforeEach(async(() => { + TestBed.configureTestingModule({ + declarations: [ ListComponent ] + }) + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(ListComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/ui/list/list.component.ts b/src/app/ui/list/list.component.ts new file mode 100644 index 0000000..969eb9c --- /dev/null +++ b/src/app/ui/list/list.component.ts @@ -0,0 +1,28 @@ +import { Component, OnInit } from '@angular/core'; +import { Router,ActivatedRoute } from '@angular/router' +@Component({ + selector: 'app-list', + templateUrl: './list.component.html', + styleUrls: ['./list.component.scss'] +}) +export class ListComponent implements OnInit { + + constructor(private router:Router,private route:ActivatedRoute) { } + + ngOnInit() { + } + links = [ + {id:0,name:'小红'}, + {id:1,name:'小绿'}, + {id:2,name:'小兰'} + ] + typesOfShoes: string[] = ['耐克', '阿迪达斯', '彪马', '亚瑟士', '斯凯奇']; + showInfo(link){ + this.router.navigate([link.id],{relativeTo:this.route}) + } + save () { + + } + + undo () {} +} diff --git a/src/app/ui/material-bank/addAttribute.html b/src/app/ui/material-bank/addAttribute.html new file mode 100644 index 0000000..6f60aca --- /dev/null +++ b/src/app/ui/material-bank/addAttribute.html @@ -0,0 +1,71 @@ +
    新增属性
    +
    +
    + +
    + + + +
    + +
    + + + + {{item.viewValue}} + + + + + + +
    + +
    + + + + + +
    + +
    + + + 不验证 + + + 区间 + 正则匹配 + + + + + +
    + +
    + + + +
    + +
    + + + +
    + +
    + + +
    +
    +
    \ No newline at end of file diff --git a/src/app/ui/material-bank/addmatlibrary.component.html b/src/app/ui/material-bank/addmatlibrary.component.html new file mode 100644 index 0000000..6ac2f4d --- /dev/null +++ b/src/app/ui/material-bank/addmatlibrary.component.html @@ -0,0 +1,23 @@ +
    + 创建素材库 + + + + + + + 信息录入 + 预案管理 + 指挥系统 + + + + +
    + + +
    + +
    \ No newline at end of file diff --git a/src/app/ui/material-bank/addmatlibrary.component.ts b/src/app/ui/material-bank/addmatlibrary.component.ts new file mode 100644 index 0000000..366b348 --- /dev/null +++ b/src/app/ui/material-bank/addmatlibrary.component.ts @@ -0,0 +1,52 @@ +import { Component, OnInit, Inject } from '@angular/core'; +import {MatTreeFlatDataSource, MatTreeFlattener} from '@angular/material/tree'; +import {FlatTreeControl} from '@angular/cdk/tree'; +import { HttpClient } from '@angular/common/http'; +import {MatDialog, MatDialogRef, MAT_DIALOG_DATA} from '@angular/material/dialog'; +import {FormControl} from '@angular/forms'; +import { MatSnackBar } from '@angular/material/snack-bar'; +import format from 'date-fns/format'; + + + +@Component({ + selector: 'addmatlibrary', + templateUrl: './addmatlibrary.component.html', + styleUrls: ['./material-bank.component.scss'] + }) + export class AddMatLibrary { + myControl = new FormControl(); + constructor(private http: HttpClient,public dialogRef: MatDialogRef,@Inject(MAT_DIALOG_DATA) public data) {} + + ngOnInit(): void { + if (this.data.length) { + this.order = this.data[this.data.length - 1].order + 1 + } else { + this.order =0 + } + } + + onNoClick(): void { + this.dialogRef.close(); + } + + order:number; //order + + onSubmit(value){ + let newdate = new Date(); + let time = format(newdate, 'yyyy-MM-dd') + this.http.post("/api/AssetLibraries",{ + id: "", + name: value.name, + order: this.order, + tag: value.tag, + enabled: true, + modifiedTime: time + }).subscribe(data=>{ + this.dialogRef.close(); + }) + } + + + + } \ No newline at end of file diff --git a/src/app/ui/material-bank/addoriginalcopy.component.html b/src/app/ui/material-bank/addoriginalcopy.component.html new file mode 100644 index 0000000..eb0ac05 --- /dev/null +++ b/src/app/ui/material-bank/addoriginalcopy.component.html @@ -0,0 +1,147 @@ +
    +
    + 新增原件 +
    +
    +
    + + + + + + + 多点连线 + 多边形 + + +
    + 是否来自建筑: + + + + +
    +
    + 是否允许连接: + + + + +
    +
    +
    + 最大连接数: + +
    +
    +
    + 固定大小: + + + + +
    +
    + 填充方式: + + 颜色 + 图片 + +
    +
    +
      +
    • +
    +
    + + + + + + 简单 + 九宫格 + 平铺 + + + +
    + 九宫格边框数值: +
    + 左: + +
    +
    + 右: + +
    +
    + 上: + +
    +
    + 下: + +
    +
    + + + + +
    + 图片: +
    + + +
    + + +
    + + + + + + + +
    +
    + +
    + + + +
  • {{node.name}}
  • +
    + + + + +
  • {{node.name}}
  • +
    +
    +
    +
    + +
    + + + +
    + + +
    + +
    diff --git a/src/app/ui/material-bank/addoriginalcopy.component.ts b/src/app/ui/material-bank/addoriginalcopy.component.ts new file mode 100644 index 0000000..abe2bea --- /dev/null +++ b/src/app/ui/material-bank/addoriginalcopy.component.ts @@ -0,0 +1,242 @@ +import { Component, OnInit, Inject } from '@angular/core'; +import {MatTreeFlatDataSource, MatTreeFlattener} from '@angular/material/tree'; +import {FlatTreeControl} from '@angular/cdk/tree'; +import { HttpClient } from '@angular/common/http'; +import {MatDialog, MatDialogRef, MAT_DIALOG_DATA} from '@angular/material/dialog'; +import {FormControl} from '@angular/forms'; +import format from 'date-fns/format'; +import { TreeService } from '../../http-interceptors/tree.service' +import { FileUploader } from 'ng2-file-upload' +import { MatSnackBar,MatSnackBarConfig } from '@angular/material/snack-bar'; +import { DomSanitizer } from '@angular/platform-browser' +import { NgZone } from '@angular/core'; +import { ChangeDetectorRef } from '@angular/core' +@Component({ + selector: 'addoriginalcopy', + templateUrl: './addoriginalcopy.component.html', + styleUrls: ['./material-bank.component.scss'] + }) + export class AddOriginalCopy { + + uploader:FileUploader = new FileUploader({ + url: "/api/Objects/PlanPlatform", + method: "POST", + itemAlias: "uploadedfile", + removeAfterUpload:true + }); + + + + private _transformer = (node, level: number) => { + return { + expandable: !!node.children && node.children.length > 0, + name: node.name, + level: level, + id: node.id, + parentId: node.parentId, + children:node.children + }; + } + treeControl = new FlatTreeControl(node => node.level, node => node.expandable); + treeFlattener = new MatTreeFlattener(this._transformer, node => node.level, node => node.expandable, node => node.children); + dataSource = new MatTreeFlatDataSource(this.treeControl, this.treeFlattener); + myControl = new FormControl(); + displaynoneid = ""//选择的关联消防id + displaynonename = "" + padding = "0" + pige = "1" + from = "1" + connect = "1" + isallowconnect :boolean = true + constructor(public changeDetectorRef:ChangeDetectorRef,private zone: NgZone,private http: HttpClient,public dialogRef: MatDialogRef,@Inject(MAT_DIALOG_DATA) public data,private tree:TreeService,private sanitizer:DomSanitizer,public snackBar: MatSnackBar) {} + + isallowconnect1(){ + this.isallowconnect = true + } + isallowconnect2(){ + this.isallowconnect = false + } + onNoClick(): void { + this.dialogRef.close(); + } + ngOnInit() { + // console.log(222,this.data.sourceMaterial) + //获取所有的消防要素 + this.http.get('/api/FireElements').subscribe(data=>{ + this.dataSource.data = this.tree.toTree(data) + }) + } + add(e){ + this.displaynoneid = e.id + this.displaynonename = e.name + } + isImg = true + selectedcolor2(){ + this.isImg = true + this.selectedcolor ="#066eed" + this.colorIndex = 0 + } + selectedimg2(){ + this.isImg = false + this.selectedcolor ="" + } + hasChild = (_: number, node: any) => node.expandable; + + colors = ['#066eed','#00e5ef','#00ef76','#ffff00','#efb522','#20b4ac','#836eff','#ff8d00','#ef00ef','#ffa17a','#ff6a6a','#ff0000','#ff6eb5','#00bfff','#54ff9f','#00cd00','#00ffff','#6495ed','#ffdbb9','#836eff'] + isshow = true//选择颜色或者上传图片 + colorIndex:any=0; //选中的颜色的index + selectedcolor = "#066eed" + imgUrl = ""//返回来的图片地址后缀 + selectcolor(item,key){ + if(this.colorIndex != key){ + this.colorIndex = key + } + this.selectedcolor = item + } + + imgsrc = "../../../assets/images/upload2.png" + + filechange(e){ + const file = e.srcElement.files[0]; // 获取图片这里只操作一张图片 + var reader = new FileReader(); + reader.readAsDataURL(file); + var image:any = new Image(); + reader.onload = function(){ + image.src = reader.result + } + setTimeout(() => { + if(image.width > 128 && image.height > 128){ + var obj = document.getElementById('selectedfile') ; + obj.outerHTML=obj.outerHTML; + const config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.snackBar.open('请选择分辨率小于128*128的图片','确定',config); + }else{ + this.upload() + } + }, 100); + } + + upload(){ + if(!this.uploader.queue[0]){ + const config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.snackBar.open('请选择文件','确定',config); + }else{ + this.uploader.queue[0].upload();//开始上传 + this.uploader.queue[0].onSuccess = (response, status, headers) => { + // 上传文件成功 + if (status == 201) { + // 上传文件后获取服务器返回的数据 + const config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.snackBar.open('上传成功','确定',config); + + let tempRes = JSON.parse(response); + this.imgUrl = tempRes.objectName + this.imgsrc = '/api/Objects/PlanPlatform/' + this.imgUrl + }else { + // 上传文件后获取服务器返回的数据错误 + } + }; + this.uploader.queue[0].onError = (response, status, headers) => { + if (status == 401) { + const config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.snackBar.open('上传失败','确定',config); + } + }; + } + + } + showtype:string = '0' //默认渲染方式 + isbordernum:boolean = false + changeshowtype(e){ + if(e.value == "1"){ + this.isbordernum = true + }else{ + this.isbordernum = false + } + } + onSubmit(value){ + value.pige=Boolean(Number(value.pige)) + value.from=Boolean(Number(value.from)) + value.connect=Boolean(Number(value.connect)) + if(value.showtype == "1"){ + this.http.post(`/api/Assets`,{ + id:"", + name:value.name, + width: 0, + height: 0, + angle: 0, + interactiveMode: Number(value.tag),//交互方式 + isFromBuilding:value.from, + canConnect:value.connect, + holeMaxCount:value.connect ? value.maxconnect : 0, + fixedSize: value.pige, + fillMode: Number(value.padding),//填充方式 + color: this.selectedcolor+'80', + imageUrl:'/api/Objects/PlanPlatform/' + this.imgUrl, + drawMode: Number(value.showtype) , //渲染方式 + border:{ + x: value.left, + y: value.bottom, + z: value.right, + w: value.top + }, + order: this.data.sourceMaterial.length, + enabled: true, + propertyInfos: [], + fireElementId:this.displaynoneid + }, + { + params: { + libraryId:this.data.node.id, + } + }).subscribe((data)=>{ + this.dialogRef.close("ooo"); + const config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.snackBar.open('新建成功','确定',config); + }) + }else{ + this.http.post(`/api/Assets`,{ + id:"", + name:value.name, + width: 0, + height: 0, + angle: 0, + interactiveMode: Number(value.tag),//交互方式 + isFromBuilding:value.from, + canConnect:value.connect, + holeMaxCount:value.connect ? value.maxconnect : 0, + fixedSize: value.pige, + fillMode: Number(value.padding),//填充方式 + color: this.selectedcolor+'80', + imageUrl:'/api/Objects/PlanPlatform/' + this.imgUrl, + drawMode: Number(value.showtype) , //渲染方式 + border:{}, + order: this.data.sourceMaterial.length, + enabled: true, + propertyInfos: [], + fireElementId:this.displaynoneid + }, + { + params: { + libraryId:this.data.node.id, + } + }).subscribe((data)=>{ + this.dialogRef.close("ooo"); + const config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.snackBar.open('新建成功','确定',config); + }) + } + } + } \ No newline at end of file diff --git a/src/app/ui/material-bank/attribute.html b/src/app/ui/material-bank/attribute.html new file mode 100644 index 0000000..369a50d --- /dev/null +++ b/src/app/ui/material-bank/attribute.html @@ -0,0 +1,94 @@ +
    +
    +
    {{data.name}}
    +
    + + + +
    +
    + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + add_box + + + 名称 + {{element.propertyName}} + 类型 + + + + + + + + + + 默认值 + {{element.propertyValue}} + 必填 + + + 单位 + {{element.physicalUnit}} + 操作 + border_color + visibility + visibility_off + block + block + delete +
    +
    +
    \ No newline at end of file diff --git a/src/app/ui/material-bank/editAttribute.html b/src/app/ui/material-bank/editAttribute.html new file mode 100644 index 0000000..22a190c --- /dev/null +++ b/src/app/ui/material-bank/editAttribute.html @@ -0,0 +1,71 @@ +
    编辑属性
    +
    +
    + +
    + + + +
    + +
    + + + + {{item.viewValue}} + + + + + + +
    + +
    + + + + + +
    + +
    + + + 不验证 + + + 区间 + 正则匹配 + + + + + +
    + +
    + + + +
    + +
    + + + +
    + +
    + + +
    +
    +
    \ No newline at end of file diff --git a/src/app/ui/material-bank/editmatlibrary.component.html b/src/app/ui/material-bank/editmatlibrary.component.html new file mode 100644 index 0000000..c86c117 --- /dev/null +++ b/src/app/ui/material-bank/editmatlibrary.component.html @@ -0,0 +1,23 @@ +
    + 修改素材库 + + + + + + + 信息录入 + 预案管理 + 指挥系统 + + + + +
    + + +
    + +
    \ No newline at end of file diff --git a/src/app/ui/material-bank/editmatlibrary.component.ts b/src/app/ui/material-bank/editmatlibrary.component.ts new file mode 100644 index 0000000..fcbba63 --- /dev/null +++ b/src/app/ui/material-bank/editmatlibrary.component.ts @@ -0,0 +1,41 @@ +import { Component, OnInit, Inject } from '@angular/core'; +import {MatTreeFlatDataSource, MatTreeFlattener} from '@angular/material/tree'; +import {FlatTreeControl} from '@angular/cdk/tree'; +import { HttpClient } from '@angular/common/http'; +import {MatDialog, MatDialogRef, MAT_DIALOG_DATA} from '@angular/material/dialog'; +import {FormControl} from '@angular/forms'; +import { MatSnackBar } from '@angular/material/snack-bar'; +import format from 'date-fns/format'; +@Component({ + selector: 'editmatlibrary', + templateUrl: './editmatlibrary.component.html', + styleUrls: ['./material-bank.component.scss'] + }) + export class EditMatLibrary { + myControl = new FormControl(); + constructor(private http: HttpClient,public dialogRef: MatDialogRef,@Inject(MAT_DIALOG_DATA) public data) {} + name:any + input:any + ngOnInit(): void { + this.name = this.data.material.name + this.input = this.data.material.tag + } + onNoClick(): void { + + this.dialogRef.close(); + } + onSubmit(value){ + let newdate = new Date(); + let time = format(newdate, 'yyyy-MM-dd') + this.http.put(`/api/AssetLibraries/${this.data.material.id}`,{ + id: this.data.material.id, + name: value.name, + order: this.data.material.order, + tag: value.tag, + enabled: true, + modifiedTime: time + }).subscribe(data=>{ + this.dialogRef.close(); + }) + } + } \ No newline at end of file diff --git a/src/app/ui/material-bank/editoriginalcopy.component.html b/src/app/ui/material-bank/editoriginalcopy.component.html new file mode 100644 index 0000000..e00e323 --- /dev/null +++ b/src/app/ui/material-bank/editoriginalcopy.component.html @@ -0,0 +1,149 @@ +
    +
    + 编辑原件 +
    +
    +
    + + + + + + + 多点连线 + 多边形 + + +
    + 是否来自建筑: + + + + +
    +
    + 是否允许连接: + + + + +
    +
    +
    + 最大连接数: + +
    +
    +
    + 固定大小: + + + + +
    + +
    + 填充方式: + + 颜色 + 图片 + +
    +
    +
      +
    • +
    +
    + + + + + + 简单 + 九宫格 + 平铺 + + + +
    +

    九宫格边框数值:

    +
    +
    + 左: + +
    +
    + 右: + +
    +
    + 上: + +
    +
    + 下: + +
    +
    + +
    + + + + + + + +
    + 图片: +
    + 暂无图片 + +
    + +
    + + + +
    +
    + +
    + + + +
  • {{node.name}}
  • +
    + + + + +
  • {{node.name}}
  • +
    +
    +
    +
    + +
    + + + +
    + + +
    + +
    diff --git a/src/app/ui/material-bank/editoriginalcopy.component.ts b/src/app/ui/material-bank/editoriginalcopy.component.ts new file mode 100644 index 0000000..4a7f751 --- /dev/null +++ b/src/app/ui/material-bank/editoriginalcopy.component.ts @@ -0,0 +1,305 @@ +import { Component, OnInit, Inject } from '@angular/core'; +import {MatTreeFlatDataSource, MatTreeFlattener} from '@angular/material/tree'; +import {FlatTreeControl} from '@angular/cdk/tree'; +import { HttpClient } from '@angular/common/http'; +import {MatDialog, MatDialogRef, MAT_DIALOG_DATA} from '@angular/material/dialog'; +import {FormControl} from '@angular/forms'; +import { MatSnackBar,MatSnackBarConfig } from '@angular/material/snack-bar'; +import format from 'date-fns/format'; +import { TreeService } from '../../http-interceptors/tree.service' +import { FileUploader } from 'ng2-file-upload' +import { DomSanitizer } from '@angular/platform-browser' +@Component({ + selector: 'editoriginalcopy', + templateUrl: './editoriginalcopy.component.html', + styleUrls: ['./material-bank.component.scss'] + }) + export class EditOriginalCopy { + + uploader:FileUploader = new FileUploader({ + url: "/api/Objects/PlanPlatform", + method: "POST", + itemAlias: "uploadedfile", + removeAfterUpload:true + }); + + + + private _transformer = (node, level: number) => { + return { + expandable: !!node.children && node.children.length > 0, + name: node.name, + level: level, + id: node.id, + parentId: node.parentId, + children:node.children + }; + } + treeControl = new FlatTreeControl(node => node.level, node => node.expandable); + treeFlattener = new MatTreeFlattener(this._transformer, node => node.level, node => node.expandable, node => node.children); + dataSource = new MatTreeFlatDataSource(this.treeControl, this.treeFlattener); + myControl = new FormControl(); + + displaynonename = "" + iscolor =null + isimg = null + constructor(private http: HttpClient,public dialogRef: MatDialogRef,@Inject(MAT_DIALOG_DATA) public data,private tree:TreeService,private sanitizer:DomSanitizer,public snackBar: MatSnackBar) {} + + colors = ['#066eed','#00e5ef','#00ef76','#ffff00','#efb522','#20b4ac','#836eff','#ff8d00','#ef00ef','#ffa17a','#ff6a6a','#ff0000','#ff6eb5','#00bfff','#54ff9f','#00cd00','#00ffff','#6495ed','#ffdbb9','#836eff'] + isshow = true//选择颜色或者上传图片 + colorIndex:any=0; //选中的颜色的index + selectedcolor = "#066eed" + imgUrl = ""//返回来的图片地址后缀 + defaultname = this.data.Original.name//点击的原件的name + OriginalId = this.data.Original.id//点击的原件的id + OriginalfireElementId = this.data.Original.fireElementId//点击的原件的消防id + displaynoneid = this.OriginalfireElementId//选择的关联消防id + OriginalfireElementName = null //点击的原件的消防name + OriginalpropertyInfos = this.data.Original.propertyInfos//点击原件的属性信息 + OriginalinteractiveMode = String(this.data.Original.interactiveMode) //点击原件的交互方式 + OriginalfixedSize = String(Number(this.data.Original.fixedSize))//点击原件的固定大小 + from = String(Number(this.data.Original.isFromBuilding)) + Originalpadding = null + Originalimageurl = this.data.Original.imageUrl//点击原件的图片地址 + Originalcolor = this.data.Original.color + padding = "0"// + showtype:any//默认渲染方式 + + left:number + right:number + top:number + bottom:number + isbordernum:boolean + connect:any + isallowconnect :boolean = true + connectvalue:any + onNoClick(): void { + this.dialogRef.close(); + } + isallowconnect1(){ + this.isallowconnect = true + } + isallowconnect2(){ + this.isallowconnect = false + } + changeshowtype(e){ + if(e.value == "1"){ + this.isbordernum = true + }else{ + this.isbordernum = false + } + } + ngOnInit() { + // console.log(this.data.Original) + if(this.data.Original.drawMode == 1){ + this.isbordernum = true + }else{ + this.isbordernum = false + } + this.connectvalue = this.data.Original.holeMaxCount + if(this.data.Original.canConnect){ + this.connect = "1" + }else{ + this.connect = "0" + } + this.isallowconnect = this.data.Original.canConnect + + this.showtype = this.data.Original.drawMode + '' + if(this.data.Original.border){ + this.left = this.data.Original.border.x + this.bottom = this.data.Original.border.y + this.right = this.data.Original.border.z + this.top = this.data.Original.border.w + } + + if(this.data.Original.fillMode == 1){ + this.isxxx = false + this.colorIndex = null + } + if(this.Originalcolor){//如果该原件有颜色 + let Originalcolordata =(this.Originalcolor).slice(0,7) + this.colors.forEach((item,index)=>{ + if(item == Originalcolordata){ + this.colorIndex = index + } + }) + } + + + + this.http.get('/api/FireElements').subscribe((data:any)=>{ + this.dataSource.data = this.tree.toTree(data) + data.forEach(item=>{ + if(item.id === this.OriginalfireElementId){ + this.OriginalfireElementName = item.name + } + }) + }) + + this.dataSource.data.forEach(item=>{ + + }) + + if(this.data.Original.fillMode == 0){ + this.Originalpadding ="0" + }else{ + this.Originalpadding ="1" + } + } + add(e){ + this.displaynoneid = e.id + this.OriginalfireElementName = e.name + } + hasChild = (_: number, node: any) => node.expandable; + //控制20种颜色是否显示 + isxxx = true + //点击选择颜色 + selcolor(){ + this.isxxx = true + if(this.data.Original.fillMode == 1){ + this.colorIndex = null + } + } + //点击选择图片 + selimg(){ + this.isxxx = false + } + selectcolor(item,key){ + if(this.colorIndex != key){ + this.colorIndex = key + } + this.selectedcolor = item + } + imgsrc = "" + filechange(e){ + const file = e.srcElement.files[0]; // 获取图片这里只操作一张图片 + var reader = new FileReader(); + reader.readAsDataURL(file); + var image:any = new Image(); + reader.onload = function(){ + image.src = reader.result + } + setTimeout(() => { + if(image.width > 128 && image.height > 128){ + var obj = document.getElementById('selectedfile') ; + obj.outerHTML=obj.outerHTML; + const config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.snackBar.open('请选择分辨率小于128*128的图片','确定',config); + }else{ + this.upload() + } + }, 100); + } + upload(){ + if(!this.uploader.queue[0]){ + const config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.snackBar.open('请选择文件','确定',config); + }else{ + this.uploader.queue[0].upload();//开始上传 + this.uploader.queue[0].onSuccess = (response, status, headers) => { + // 上传文件成功 + if (status == 201) { + // 上传文件后获取服务器返回的数据 + const config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.snackBar.open('上传成功','确定',config); + let tempRes = JSON.parse(response); + this.imgUrl = tempRes.objectName + this.Originalimageurl = '/api/Objects/PlanPlatform/' + this.imgUrl + }else { + // 上传文件后获取服务器返回的数据错误 + } + }; + this.uploader.queue[0].onError = (response, status, headers) => { + if (status == 401) { + const config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.snackBar.open('无权限上传','确定',config); + } + }; + } + + } + newimageUrl = "" + onSubmit(value){ + // console.log(value) + if(!this.imgUrl){//判断编辑时是否重新上传了照片 + this.newimageUrl = this.Originalimageurl + }else{ + this.newimageUrl = '/api/Objects/PlanPlatform/' + this.imgUrl + } + value.from=Boolean(Number(value.from)) + value.pige=Boolean(Number(value.pige)) + value.connect=Boolean(Number(value.connect)) + if(value.showtype == "1"){ + this.http.put(`/api/Assets/${this.OriginalId}`,{ + id:this.OriginalId, + name:value.name, + width: 0, + height: 0, + angle: 0, + interactiveMode: Number(value.tag),//交互方式 + isFromBuilding:value.from, + canConnect:value.connect, + holeMaxCount:value.connect ? value.maxconnect : 0, + fixedSize: value.pige, + fillMode: Number(value.padding),//填充方式 + color: this.selectedcolor+'80', + imageUrl:this.newimageUrl, + drawMode: Number(value.showtype) , //渲染方式 + border: { + x: value.left, + y: value.bottom, + z: value.right, + w: value.top + }, + order: this.data.Original.order, + enabled: true, + propertyInfos: this.OriginalpropertyInfos, + fireElementId:this.displaynoneid + }).subscribe((data)=>{ + this.dialogRef.close("ooo"); + const config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.snackBar.open('修改成功','确定',config); + }) + }else{ + this.http.put(`/api/Assets/${this.OriginalId}`,{ + id:this.OriginalId, + name:value.name, + width: 0, + height: 0, + angle: 0, + interactiveMode: Number(value.tag),//交互方式 + isFromBuilding:value.from, + canConnect:value.connect, + holeMaxCount:value.connect ? value.maxconnect : 0, + fixedSize: value.pige, + fillMode: Number(value.padding),//填充方式 + color: this.selectedcolor+'80', + imageUrl:this.newimageUrl, + drawMode: Number(value.showtype) , //渲染方式 + border: {}, + order: this.data.Original.order, + enabled: true, + propertyInfos: this.OriginalpropertyInfos, + fireElementId:this.displaynoneid + }).subscribe((data)=>{ + this.dialogRef.close("ooo"); + const config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.snackBar.open('修改成功','确定',config); + }) + } + + + } + } \ No newline at end of file diff --git a/src/app/ui/material-bank/material-bank.component.html b/src/app/ui/material-bank/material-bank.component.html new file mode 100644 index 0000000..e4eb8ba --- /dev/null +++ b/src/app/ui/material-bank/material-bank.component.html @@ -0,0 +1,68 @@ +
    +
    +
    + keyboard_arrow_down + chevron_right + 素材库管理 +
    + + + + +
    +
    +
    +
    + folder{{item.name}} + block +
    +
    + +
    + +
    +
    +
    +

    {{material.name}}

    +
    + + + + + + +
    +
    + +
    +
    + + {{item.name}} + block +
    +
    + +
    + + +
    +
    diff --git a/src/app/ui/material-bank/material-bank.component.scss b/src/app/ui/material-bank/material-bank.component.scss new file mode 100644 index 0000000..a42d67c --- /dev/null +++ b/src/app/ui/material-bank/material-bank.component.scss @@ -0,0 +1,310 @@ +.content { + padding: 0 0 0 10px; + width: 100%; + height: 90%; + overflow-x: hidden; + overflow-y: auto; + display: flex; + .leftBox { + flex: 20%; + padding-top: 10px; + } + .rightBox { + border-left: 1px solid #999; + flex: 80%; + display: flex; + flex-direction: column; + .topBox { + flex:1; + .originalScript { + border-bottom: 1px solid #999; + background-color: #fafafa; + padding:5px 0; + width: 100%; + padding-left: 20px; + font-weight: 500; + display: flex; + flex-direction: row; + p{ + margin-top: 11px; + } + .mat-icon { + vertical-align:middle; + } + } + } + } +} + + + +.bank { + display: flex; + font-size: 18px; + font-weight: 500; +} + +.mat-icon { + width: 18px; + height: 18px; + vertical-align:top; + margin-right: 8px; + cursor:pointer; +} +.material { + cursor:pointer; + height: 30px; + font-size: 16px; + margin-top: 10px; + padding-left: 25px; + .btn { + color: #FFC122; + } + .blockBtn { + float: right; + margin-right: 15px; + width: 16px; + height: 16px; + } +} +.imgBox { + padding: 5px 0 0 5px; + margin-top: 5px; + display: flex; + flex-direction: row; + flex-wrap: wrap; + .imgDiv { + span{ + overflow: hidden; + text-overflow: ellipsis; + } + display: inline-block; + margin-right: 10px; + margin-bottom: 10px; + width: 90px; + height: 165px; + text-align: center; + img { + width: 100%; + } + } +} + +.attribute { + padding-left: 25px; + display: flex; + flex-direction: row; + background-color: #d7d7d7; + div { + margin-right: 25px; + } + .attributeLeft{ + padding-top: 8px; + flex: 75%; + } +} +.btnBox .mat-icon{ + padding: 8px; +} +.overFlow { + height: 500px; + overflow: auto; +} +table { + width: 100%; + text-align: center; + .cdk-header-cell { + text-align: center; + } +} + + + +.active { + background-color: rgba(225,225,225,0.8) +} +.OriginalActive { + background-color: rgba(225,225,225,0.8); +} + +.btn{ + text-align: center; + button{ + margin: 0 8px; + } +} +.addbtn{ + width: 584px; + height: 32px; + border-top: 1px solid black; + text-align: center; + padding-top: 6px; + button{ + margin: 0 6px; + } +} +.mat-radio-button { + font-size: 14px; + margin-right: 5px; +} +.topbox{ + height: 32px; + border-bottom: 1px solid black; + +} +.mainbox{ + position: relative; + width: 582px; + height: 656px; + .mainleft{ + height: 646px; + width: 290px; + float: left; + border-right: 1px solid black; + padding-top: 10px; + mat-form-field{ + display: block; + width: 220px; + } + .padding{ + margin-top: 12px; + } + .color{ + height: 50px; + .color1{ + + margin-bottom: 5px; + margin-top: 12px; + li{ + width: 23px; + height: 23px; + list-style: none; + // margin: 2px; + float: left; + border: 2px solid white; + } + } + } + } + .mainright{ + width: 288px; + height: 654px; + float: left; + overflow: auto; + label{ + font-weight: 900; + } + } +} +.coloractive{ + border: 2px solid black !important; + +} +.pigepadding{ + font-size: 16px; +} +.selectoriginalcopybox{ + width: 423px; + height: 300px; + border: 1px solid black; + overflow: auto; + margin-bottom: 10px; +} +.originalcopyimg{ + width: 100px; + height: 120px; + float: left; + text-align: center; + img{ + width: 70px; + height: 70px; + } + p{ + font-size: 11px; + height: 11px; + } + +} +.selectedback{ + background-color:rgba(0,165,219,0.5); +} +.selecteditem{ + // background: grey; + cursor:not-allowed; + background-color: rgba(225, 225, 225, 0.8) +} +.selecteditemimg{ + opacity: 0.3; + filter: alpha(opacity=30); +} +.matname{ + margin-left: 6px; + +} +.divImg{ + width: 95px; + height: 95px; + font-size: 15px; + margin-left: 48px; + margin-top: -11px; + border: 1px dashed grey; + padding: 4px; + img{ + width: 100%; + height: 100%; + + } +} +.Input{ + width: 102px; + height: 103px; + position: absolute; + left:0px; + top: 0px; + cursor: pointer; + opacity:0 +} +.relevancefire{ + margin-top: 5px; +} +.fireli{ + list-style: none; + +} +.fireli:hover{ + background: rgba(225, 225, 225, 0.8); + cursor: pointer; +} +.firebtn{ + line-height: 24px; +} +.image{ + margin-bottom: 6px; +} + +.positionup{ + position: absolute; + top:407px; + left: 50px +} +.isbordernum{ + position: absolute; + top: 410px; + left: 50px +} +.from{ + margin-bottom: 10px; +} +.border{ + .bordernum{ + display: block; + } + .borderinputbox{ + float: left; + width: 142px; + input{ + width: 98px; + } + } + +} \ No newline at end of file diff --git a/src/app/ui/material-bank/material-bank.component.ts b/src/app/ui/material-bank/material-bank.component.ts new file mode 100644 index 0000000..eb9e703 --- /dev/null +++ b/src/app/ui/material-bank/material-bank.component.ts @@ -0,0 +1,572 @@ +import { Component, OnInit, Inject } from '@angular/core'; +import { HttpClient } from '@angular/common/http'; +import { MatDialog, MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog'; +import { AddMatLibrary } from './addmatlibrary.component' +import { EditMatLibrary } from './editmatlibrary.component' +import { AddOriginalCopy } from './addoriginalcopy.component' +import { MatTableDataSource } from '@angular/material/table'; +import { EditOriginalCopy } from './editoriginalcopy.component' +import { SelectOriginalCopy } from './selectoriginalcopy.component' +import { MatSnackBar,MatSnackBarConfig } from '@angular/material/snack-bar'; +import format from 'date-fns/format'; + + + +@Component({ + selector: 'app-material-bank', + templateUrl: './material-bank.component.html', + styleUrls: ['./material-bank.component.scss'] +}) +export class MaterialBankComponent implements OnInit { + + constructor(private http:HttpClient,public dialog: MatDialog,public snackBar: MatSnackBar) { } + + ngOnInit(): void { + this.http.get('/api/AssetLibraries').subscribe(data=>{ + this.material = data[0] + this.allMaterialBank = data + this.getSourceMaterial() + }) + } + + allMaterialBank:any = []; //所有素材库 + material:any={name:''}; //选中的素材库 + materialIndex:any=0; //选中的素材库index + + sourceMaterial:any; //素材库对应所有原件 + Original:any; //选中的原件 + OriginalIndex:any=null; //选中的原件index + isshow = true//左侧列表的显示隐藏 + + //收起左侧列表 + showlist(){ + this.isshow = !this.isshow + } + //获取所有素材库 + getMaterialBank () { + this.http.get('/api/AssetLibraries').subscribe(data=>{ + this.allMaterialBank = data + this.material = data[this.materialIndex] + }) + } + + //获得指定素材库所有原件 + getSourceMaterial () { + this.sourceMaterial = null + if (this.material) { + let data = { + libraryId:this.material.id + } + this.http.get('/api/Assets',{ + params:data + }).subscribe(data=>{ + this.sourceMaterial = data + this.Original = data[this.OriginalIndex] + }) + } + } + + //选中素材库 + add (e,index) { + this.Original = null + this.OriginalIndex = null + if (this.materialIndex != index) { + this.material = e + this.materialIndex = index + this.getSourceMaterial() + } + } + + //选中原件 + addOriginal (e,index) { + this.Original = e + this.OriginalIndex = index + } + + //打开查看属性弹窗 + viewProperties () { + if(this.Original){ + let data = this.Original + const dialogRef = this.dialog.open(attributeComponent, + {width: '1000px',data}); + dialogRef.afterClosed().subscribe( + (data)=>{if(data){this.getSourceMaterial()}} + ) + }else { + const config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.snackBar.open('请选择原件','确定',config); + } + } + + + + + //新增素材库 + addmatlibrary(){ + let data = this.allMaterialBank || [] + const dialogRef = this.dialog.open(AddMatLibrary, {//调用open方法打开对话框并且携带参数过去 + width: '260px', + data + }); + dialogRef.afterClosed().subscribe( + data=>{ + this.getMaterialBank () + } + ); + } + + //编辑素材库 + editmatlibrary(){ + const dialogRef = this.dialog.open(EditMatLibrary, {//调用open方法打开对话框并且携带参数过去 + width: '260px', + data: {allMaterialBank:this.allMaterialBank,material:this.material} + }); + dialogRef.afterClosed().subscribe( + data=>{ + this.getMaterialBank () + } + ); + } + + //删除素材库 + delete(){ + var isdeleted = confirm(`确定要删除${this.material.name}素材库吗?`) + if(isdeleted){ + //请求删除接口 + this.http.delete(`/api/AssetLibraries/${this.material.id}`).subscribe( data=>{ + this.materialIndex -= 1//删除之后焦点前移 + this.getMaterialBank () + }) + } + } + + //禁启用素材库 + disabled(){ + let newdate = new Date(); + let time = format(newdate, 'yyyy-MM-dd') + if(this.material.enabled){ + this.http.put(`/api/AssetLibraries/${this.material.id}`,{ + id: this.material.id, + name: this.material.name, + order: this.material.order, + tag: this.material.tag, + enabled: false, + modifiedTime: time + }).subscribe(data=>{ + const config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.snackBar.open('禁用成功','确定',config); + this.getMaterialBank () + }) + }else{ + this.http.put(`/api/AssetLibraries/${this.material.id}`,{ + id: this.material.id, + name: this.material.name, + order: this.material.order, + tag: this.material.tag, + enabled: true, + modifiedTime: time + }).subscribe(data=>{ + const config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.snackBar.open('启用成功','确定',config); + this.getMaterialBank () + }) + } + + } + + //新增素材原件 + addoriginalcopy(node){ + const dialogRef = this.dialog.open(AddOriginalCopy, {//调用open方法打开对话框并且携带参数过去 + // height:"715px", + width:"640px", + data: {allMaterialBank:this.allMaterialBank,node:node,sourceMaterial:this.sourceMaterial} + }); + dialogRef.afterClosed().subscribe( + data=>{ + if(data){ + this.getSourceMaterial () + } + + } + ); + } + //修改素材原件 + editoriginalcopy(node){ + if(this.Original){ + const dialogRef = this.dialog.open(EditOriginalCopy, {//调用open方法打开对话框并且携带参数过去 + // height:"580px", + width:"640px", + data: {allMaterialBank:this.allMaterialBank,node:node,Original:this.Original} + }); + dialogRef.afterClosed().subscribe( + data=>{ + if(data){ + this.getSourceMaterial () + } + } + ); + }else{ + const config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.snackBar.open('请选择原件','确定',config); + } + + } + + //禁启用原件 + disableoriginal(material){ + if(this.Original){ + this.http.put(`/api/Assets/${this.Original.id}`,{ + id:this.Original.id, + name:this.Original.name, + width: this.Original.width, + height: this.Original.height, + angle: this.Original.angle, + interactiveMode:this.Original.interactiveMode,//交互方式 + fixedSize: this.Original.fixedSize, + fillMode: this.Original.fillMode,//填充方式 + color: this.Original.color, + imageUrl:this.Original.imageUrl, + order: this.Original.order, + enabled: !this.Original.enabled, + propertyInfos: this.Original.propertyInfos, + fireElementId:this.Original.fireElementId + }).subscribe((data)=>{ + this.getSourceMaterial () + }) + }else{ + const config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.snackBar.open('请选择原件','确定',config); + } + } + + //删除原件 + deleteoriginal(material){ + if(this.Original){ + var isdeleted = confirm(`确定要删除当前原件吗?`) + if(isdeleted){ + //请求删除接口 + this.http.delete(`/api/Assets`,{ + params:{ + libraryId:material.id, + id:this.Original.id + } + }).subscribe( data=>{ + this.getSourceMaterial () + }) + } + }else{ + const config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.snackBar.open('请选择原件','确定',config); + } + } + + //选择原件素材 material为当前素材库的信息 + selectoriginal(material){ + const dialogRef = this.dialog.open(SelectOriginalCopy, {//调用open方法打开对话框并且携带参数过去 + // height:"525px", + data: {allMaterialBank:this.allMaterialBank,material:material} + }); + dialogRef.afterClosed().subscribe( + data=>{ + if(data){ + this.getSourceMaterial () + } + + } + ); + } + + + +} + + + +//原件对应所有属性弹窗 +@Component({ + selector: 'app-attribute', + templateUrl: './attribute.html', + styleUrls: ['./material-bank.component.scss'] +}) +export class attributeComponent { + + constructor(private http:HttpClient,public dialog: MatDialog, + public dialogRef: MatDialogRef, + @Inject(MAT_DIALOG_DATA) public data,public snackBar: MatSnackBar) { } + + ngOnInit(): void { + if (this.data.propertyInfos == null) { + this.data.propertyInfos = [] + } + this.setIndex() + this.dataSource = new MatTableDataSource(this.data.propertyInfos) + } + + displayedColumns = ['checked', 'name', 'type', 'default','required','physicalUnit','operation']; + dataSource:any=[]; //当前原件属性渲染table + dataSourceIndex:any=[]; //选中属性的index + + + + //封装函数每次更改,重新获取下标 + setIndex () { + if (this.data.propertyInfos) { + this.data.propertyInfos.forEach((item,index)=>{ + item.index = index + }) + } + } + + //点击checked框获取当前属性index + checkedChange (e,index) { + if (e.checked) { + this.dataSourceIndex.push(index) + } else { + this.dataSourceIndex.splice(this.dataSourceIndex.findIndex(item=>item==index),1) + } + } + + //上移 + toTop () { + if(this.dataSourceIndex.length) { + let index = this.dataSourceIndex[this.dataSourceIndex.length-1] + if (index != 0) { + let data = this.data.propertyInfos[index] + this.data.propertyInfos[index]=this.data.propertyInfos[index-1] + this.data.propertyInfos[index-1] = data + this.dataSourceIndex[this.dataSourceIndex.length-1] = index-1 + this.setIndex() + this.dataSource = new MatTableDataSource(this.data.propertyInfos) + } + } + } + + //下移 + toBottom () { + if(this.dataSourceIndex.length) { + let index = this.dataSourceIndex[this.dataSourceIndex.length-1] + if (index != this.data.propertyInfos.length-1) { + let data = this.data.propertyInfos[index] + this.data.propertyInfos[index]=this.data.propertyInfos[index+1] + this.data.propertyInfos[index+1] = data + this.dataSourceIndex[this.dataSourceIndex.length-1] = index+1 + this.setIndex() + this.dataSource = new MatTableDataSource(this.data.propertyInfos) + } + } + } + + + + //新增属性弹窗 + add () { + const dialogRef = this.dialog.open(addAttributeComponent); + dialogRef.afterClosed().subscribe( + (data)=>{ + if (data) { + this.data.propertyInfos.push(data) + this.setIndex() + this.dataSource = new MatTableDataSource(this.data.propertyInfos)} + }) + } + + //编辑属性弹窗 + edit (e) { + + let data = this.data.propertyInfos[e] + const dialogRef = this.dialog.open(editAttribute,{data}); + dialogRef.afterClosed().subscribe( + data=>{ + if (data) { + this.data.propertyInfos[data.index] = data + this.setIndex() + this.dataSource = new MatTableDataSource(this.data.propertyInfos)} + }) + } + + //显示 + visible (e) { + this.data.propertyInfos[e].visible = true + } + //隐藏 + noVisible (e) { + this.data.propertyInfos[e].visible = false + } + //启用 + enabled (e) { + this.data.propertyInfos[e].enabled = true + } + //禁用 + noEnabled (e) { + this.data.propertyInfos[e].enabled = false + } + //删除 + delete (e) { + let isTrue = confirm('您确定要删除吗') + if (isTrue) { + this.data.propertyInfos.splice(e,1) + this.setIndex() + this.dataSource = new MatTableDataSource(this.data.propertyInfos) + } + } + + + + //原件属性保存 + preservation () { + if (this.data.propertyInfos.length) { + this.data.propertyInfos.forEach(item => { + delete item.index + }); + this.submit() + } else { + this.submit() + } + } + + //提交保存 + submit () { + this.http.put(`/api/Assets/${this.data.id}`,{ + id:this.data.id, + name:this.data.name, + width:this.data.width, + height:this.data.height, + angle:this.data.angle, + interactiveMode:this.data.interactiveMode, + isFromBuilding: this.data.isFromBuilding, + canConnect:this.data.canConnect, + holeMaxCount:this.data.holeMaxCount, + fixedSize:this.data.fixedSize, + fillMode:this.data.fillMode, + color:this.data.color, + imageUrl:this.data.imageUrl, + drawMode:this.data.drawMode, + border:this.data.border, + order:this.data.order, + enabled:this.data.enabled, + propertyInfos:this.data.propertyInfos, + fireElementId:this.data.fireElementId + }).subscribe(data=>{ + const config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.snackBar.open('保存成功','确定',config); + this.dialogRef.close('success') + }) + } + +} + + + +//新增属性弹窗 +export interface Food { + value: number; + viewValue: string; +} +@Component({ + selector: 'app-addAttribute', + templateUrl: './addAttribute.html', + styleUrls: ['./material-bank.component.scss'] +}) +export class addAttributeComponent { + + constructor(private http:HttpClient,public dialog: MatDialog, + public dialogRef: MatDialogRef,) { } + + ngOnInit(): void {} + + //定义属性数据 + propertyType:Food[]=[ + {value:0, viewValue: '单行文本'}, + {value:1, viewValue: '多行文本'}, + {value:2, viewValue: '数值'}, + {value:3, viewValue: '图片'}, + {value:4, viewValue: '图片数量'}, + {value:5, viewValue: '方向'}, + {value:6, viewValue: '布尔值'}, + {value:7, viewValue: '供给区域'}, + {value:8, viewValue: '供给类型'}] + + //提交表单 + onSubmit (e) { + e.order = 0 + e.enabled = true + e.visible = true + e.required = e.required=='true'? true: false, + this.dialogRef.close(e) + } + +} + + + +//编辑属性弹窗 +@Component({ + selector: 'app-editAttribute', + templateUrl: './editAttribute.html', + styleUrls: ['./material-bank.component.scss'] +}) +export class editAttribute { + + constructor(private http:HttpClient,public dialog: MatDialog, + public dialogRef: MatDialogRef, + @Inject(MAT_DIALOG_DATA) public data,) { } + + ngOnInit(): void { + this.propertyName = this.data.propertyName + this.propertyValue = this.data.propertyValue + this.propertyType = this.data.propertyType + this.required = String(this.data.required) + this.ruleName = this.data.ruleName + this.ruleValue = this.data.ruleValue + this.physicalUnit = this.data.physicalUnit + this.tag = this.data.tag} + + + propertyName:any + propertyValue:any; + propertyType:number; + required:any; + ruleName:any; + ruleValue:any; + physicalUnit:any; + tag:any; + + //定义属性数据 + type:Food[]=[ + {value:0, viewValue: '单行文本'}, + {value:1, viewValue: '多行文本'}, + {value:2, viewValue: '数值'}, + {value:3, viewValue: '图片'}, + {value:4, viewValue: '图片数量'}, + {value:5, viewValue: '方向'}, + {value:6, viewValue: '布尔值'}, + {value:7, viewValue: '供给区域'}, + {value:8, viewValue: '供给类型'}] + + //提交表单 + onSubmit (e) { + e.order = 0 + e.enabled = this.data.enabled + e.visible = this.data.visible + e.index = this.data.index + e.required = e.required=='true'? true: false, + this.dialogRef.close(e) + } + + + +} \ No newline at end of file diff --git a/src/app/ui/material-bank/selectoriginalcopy.component.html b/src/app/ui/material-bank/selectoriginalcopy.component.html new file mode 100644 index 0000000..00f4e33 --- /dev/null +++ b/src/app/ui/material-bank/selectoriginalcopy.component.html @@ -0,0 +1,22 @@ +
    + 选择原件 + + + {{item.name}} + + +
    +
    + +

    {{item.name}}

    + + +
    +
    + +
    + + +
    + +
    \ No newline at end of file diff --git a/src/app/ui/material-bank/selectoriginalcopy.component.ts b/src/app/ui/material-bank/selectoriginalcopy.component.ts new file mode 100644 index 0000000..65d195f --- /dev/null +++ b/src/app/ui/material-bank/selectoriginalcopy.component.ts @@ -0,0 +1,103 @@ +import { Component, OnInit, Inject } from '@angular/core'; +import {MatTreeFlatDataSource, MatTreeFlattener} from '@angular/material/tree'; +import {FlatTreeControl} from '@angular/cdk/tree'; +import { HttpClient } from '@angular/common/http'; +import {MatDialog, MatDialogRef, MAT_DIALOG_DATA} from '@angular/material/dialog'; +import {FormControl} from '@angular/forms'; +import { MatSnackBar } from '@angular/material/snack-bar'; +import format from 'date-fns/format'; +@Component({ + selector: 'selectoriginalcopy', + templateUrl: './selectoriginalcopy.component.html', + styleUrls: ['./material-bank.component.scss'] + }) + export class SelectOriginalCopy { + myControl = new FormControl(); + constructor(private http: HttpClient,public dialogRef: MatDialogRef,@Inject(MAT_DIALOG_DATA) public data) {} + matlibrary = this.data.allMaterialBank//所有素材库 + selectedmatlibraryid = ""//当前下拉框选中的素材库id + sourceMaterial:any; //指定素材库对应所有原件 + atpresentSourceMaterial:any//当前选择原件素材库对应所有原件 + aaa = this.data.allMaterialBank[0].id//默认显示第一个素材库 + ngOnInit(): void { + this.getatpresentSourceMaterial ()//初始化时先获取一下当前素材库对应所有原件,然后在获取指定素材库原件时进行筛选对比 + let data = { + libraryId:this.data.allMaterialBank[0].id + } + this.http.get('/api/Assets',{ + params:data + }).subscribe((data : any)=>{ + data.forEach(item => { + this.atpresentSourceMaterial.forEach(n=>{ + if(n.id == item.id){ + item.isselected = true + } + }) + }); + this.sourceMaterial = data + }) + + } + onNoClick(): void { + this.dialogRef.close(); + } + + //获得指定素材库所有原件 + getSourceMaterial () { + let data = { + libraryId:this.selectedmatlibraryid + } + this.http.get('/api/Assets',{ + params:data + }).subscribe((data : any)=>{ + data.forEach(item => { + this.atpresentSourceMaterial.forEach(n=>{ + if(n.id == item.id){ + item.isselected = true + } + }) + }); + this.sourceMaterial = data + }) + } + //获得当前素材库所有原件 + getatpresentSourceMaterial (){ + let data = { + libraryId:this.data.material.id + } + this.http.get('/api/Assets',{ + params:data + }).subscribe(data=>{ + this.atpresentSourceMaterial = data + }) + } + selectmatlibrart(item){//点击下拉框中的一项 + this.selectedmatlibraryid = item.id + this.getSourceMaterial () + } + selectedimg = []//需要提交的原件id数组 + clickimg(item){//点击选择原件的多张图片 + if(!item.isselected){ + if(item.istrue){//如果图片已经被选中,此时点击 + item.istrue = false + this.selectedimg.forEach((n,index) => { + if(n == item.id){//将此id从数组中移除 + this.selectedimg.splice(index,1) + } + }); + }else{//如果图片还没有被选中 + item.istrue = true + this.selectedimg.push(item.id)//将选中图片id存入数组 + } + } + + } + onSubmit(value){ + this.http.post("/api/Assets/Select",{ + assetLibraryId:this.data.material.id , + assetIds: this.selectedimg + }).subscribe(data=>{ + this.dialogRef.close('ooo'); + }) + } + } \ No newline at end of file diff --git a/src/app/ui/menu/menu.component.html b/src/app/ui/menu/menu.component.html new file mode 100644 index 0000000..291721d --- /dev/null +++ b/src/app/ui/menu/menu.component.html @@ -0,0 +1,66 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/app/ui/menu/menu.component.scss b/src/app/ui/menu/menu.component.scss new file mode 100644 index 0000000..e69de29 diff --git a/src/app/ui/menu/menu.component.spec.ts b/src/app/ui/menu/menu.component.spec.ts new file mode 100644 index 0000000..beb2d9b --- /dev/null +++ b/src/app/ui/menu/menu.component.spec.ts @@ -0,0 +1,25 @@ +import { async, ComponentFixture, TestBed } from '@angular/core/testing'; + +import { MenuComponent } from './menu.component'; + +describe('MenuComponent', () => { + let component: MenuComponent; + let fixture: ComponentFixture; + + beforeEach(async(() => { + TestBed.configureTestingModule({ + declarations: [ MenuComponent ] + }) + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(MenuComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/ui/menu/menu.component.ts b/src/app/ui/menu/menu.component.ts new file mode 100644 index 0000000..e21108c --- /dev/null +++ b/src/app/ui/menu/menu.component.ts @@ -0,0 +1,15 @@ +import { Component, OnInit } from '@angular/core'; + +@Component({ + selector: 'app-menu', + templateUrl: './menu.component.html', + styleUrls: ['./menu.component.scss'] +}) +export class MenuComponent implements OnInit { + + constructor() { } + + ngOnInit() { + } + +} diff --git a/src/app/ui/navmenus/createmenus.component.html b/src/app/ui/navmenus/createmenus.component.html new file mode 100644 index 0000000..3258a3d --- /dev/null +++ b/src/app/ui/navmenus/createmenus.component.html @@ -0,0 +1,24 @@ +
    + + + + + + + + + + + + + +
    + + +
    + +
    \ No newline at end of file diff --git a/src/app/ui/navmenus/editmenus.component.html b/src/app/ui/navmenus/editmenus.component.html new file mode 100644 index 0000000..2c37c37 --- /dev/null +++ b/src/app/ui/navmenus/editmenus.component.html @@ -0,0 +1,24 @@ +
    + + + + + + + + + + + + + +
    + + +
    + +
    \ No newline at end of file diff --git a/src/app/ui/navmenus/navmenus.component.html b/src/app/ui/navmenus/navmenus.component.html new file mode 100644 index 0000000..967468b --- /dev/null +++ b/src/app/ui/navmenus/navmenus.component.html @@ -0,0 +1,27 @@ +
    + + + + {{node.name}} + + + + + + + + + {{node.name}} + + + + + + +
    \ No newline at end of file diff --git a/src/app/ui/navmenus/navmenus.component.scss b/src/app/ui/navmenus/navmenus.component.scss new file mode 100644 index 0000000..f6123e2 --- /dev/null +++ b/src/app/ui/navmenus/navmenus.component.scss @@ -0,0 +1,34 @@ +table { + width: 100%; + th,td{ + text-align: center; + } +} +form{ + text-align: center; + button{ + margin: 0 12px; + } +} +mat-tree{ + width: 500px; + button{ + display: block; + float: right; + } + mat-tree-node{ + position: relative; + .deleted{ + position: absolute; + right: 0; + } + .create{ + position: absolute; + right: 80px; + } + .edit{ + position: absolute; + right: 40px; + } + } +} diff --git a/src/app/ui/navmenus/navmenus.component.spec.ts b/src/app/ui/navmenus/navmenus.component.spec.ts new file mode 100644 index 0000000..788f582 --- /dev/null +++ b/src/app/ui/navmenus/navmenus.component.spec.ts @@ -0,0 +1,25 @@ +import { async, ComponentFixture, TestBed } from '@angular/core/testing'; + +import { NavmenusComponent } from './navmenus.component'; + +describe('NavmenusComponent', () => { + let component: NavmenusComponent; + let fixture: ComponentFixture; + + beforeEach(async(() => { + TestBed.configureTestingModule({ + declarations: [ NavmenusComponent ] + }) + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(NavmenusComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/ui/navmenus/navmenus.component.ts b/src/app/ui/navmenus/navmenus.component.ts new file mode 100644 index 0000000..d7a9619 --- /dev/null +++ b/src/app/ui/navmenus/navmenus.component.ts @@ -0,0 +1,228 @@ +import { Component, OnInit,Inject } from '@angular/core'; +import {MatTreeFlatDataSource, MatTreeFlattener} from '@angular/material/tree'; +import {FlatTreeControl} from '@angular/cdk/tree'; +import {MatDialog, MatDialogRef, MAT_DIALOG_DATA} from '@angular/material/dialog'; +import {FormControl} from '@angular/forms'; +import { HttpClient } from '@angular/common/http'; +import { TreeService } from '../../http-interceptors/tree.service' +import { MatSnackBar, MatSnackBarConfig } from '@angular/material/snack-bar'; + + + +@Component({ + selector: 'app-navmenus', + templateUrl: './navmenus.component.html', + styleUrls: ['./navmenus.component.scss'] +}) +export class NavmenusComponent implements OnInit { + newdata = []; + private _transformer = (node, level: number) => { + return { + expandable: !!node.children && node.children.length > 0, + name: node.name, + level: level, + id: node.id, + parentId: node.parentId, + children:node.children, + url:node.url, + icon:node.icon + }; + } + treeControl = new FlatTreeControl(node => node.level, node => node.expandable); + treeFlattener = new MatTreeFlattener(this._transformer, node => node.level, node => node.expandable, node => node.children); + dataSource = new MatTreeFlatDataSource(this.treeControl, this.treeFlattener); + constructor(private http: HttpClient,public dialog: MatDialog,private tree:TreeService,public snackBar: MatSnackBar) { } + getlist = ():void=>{ + this.http.get('/api/NavMenus').subscribe((data: any[])=>{ + this.newdata = this.tree.toTree(data) + const nodes = this.treeControl.dataNodes; + const expandNodes = []; + nodes.forEach((item) => { + if(item.expandable && this.treeControl.isExpanded(item)){ + expandNodes.push(item.id); + } + }); + this.dataSource.data = this.newdata; + let newNodes = this.treeControl.dataNodes; + newNodes = newNodes.filter(n => { + return expandNodes.indexOf(n.id) >= 0; + }); + newNodes.forEach(item => { + this.treeControl.expand(item); + }); + + }) + } + treedata:any + //初始化页面时渲染出tree + ngOnInit() { + this.http.get('/api/NavMenus').subscribe((data: any[])=>{ + // console.log(111,this.data) + // this.treedata = this.tree.toTree(data) + let _data = this.tree.toTree(data) + this.dataSource.data = _data + this.treedata = _data + console.log(111,this.treedata) + }) + } + hasChild = (_: number, node: any) => node.expandable; + + //弹出创建窗口按钮 + createauthority(value){ + const dialogRef = this.dialog.open(CreateMenus, {//调用open方法打开对话框并且携带参数过去 + width: '260px', + data: {id:value.id,children:value.children,icon:value.icon,url:value.url} + }); + dialogRef.afterClosed().subscribe( + data=>{ + this.newdata = [] + this.getlist() + } + ); + } + //删除按钮 + deleted(authority){ + var isdeleted = confirm("确定要删除此用户吗?") + if(isdeleted){ + //请求删除接口 + this.newdata = [] + this.http.delete(`/api/NavMenus/${authority.id}`).subscribe( data=>{ + this.getlist() + }) + } + } + //编辑按钮 + edit(value){ + const dialogRef = this.dialog.open(EditMenus, {//调用open方法打开对话框并且携带参数过去 + width: '260px', + data: {id:value.id,parentId:value.parentId,order:value.order,node:value} + }); + dialogRef.afterClosed().subscribe( + data=>{ + this.newdata = [] + this.getlist() + } + ); + } +} + +//创建组件 +@Component({ + selector: 'createmenus', + templateUrl: './createmenus.component.html', + styleUrls: ['./navmenus.component.scss'] +}) +export class CreateMenus { + myControl = new FormControl(); + //注入MatDialogRef,可以用来关闭对话框 + //要访问对话框组件中的数据,必须使用MAT_DIALOG_DATA注入令牌 + constructor(private http: HttpClient,public dialogRef: MatDialogRef, + public snackBar: MatSnackBar,@Inject(MAT_DIALOG_DATA) public data) {} + + onNoClick(): void { + this.dialogRef.close(); + } + onSubmit(value){ + if(this.data.children){ + this.http.post( + '/api/NavMenus', + { + id: '', + name: value.name, + icon: value.icon, + url: value.url, + order:this.data.children[this.data.children.length -1].order + 1, + parentId: this.data.id + } + ).subscribe( + data=>{ + this.dialogRef.close(); + }, + err=>{ + const config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.snackBar.open('请填写正确格式','确定',config); + } + ) + }else{ + this.http.post( + '/api/NavMenus', + { + id: '', + name: value.name, + icon: value.icon, + url: value.url, + order:0, + parentId: this.data.id + } + ).subscribe( + data=>{ + this.dialogRef.close(); + }, + err=>{ + const config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.snackBar.open('请填写正确格式','确定',config); + } + ) + } + + } +} + + + +//编辑组件 +@Component({ + selector: 'editmenus', + templateUrl: './editmenus.component.html', + styleUrls: ['./navmenus.component.scss'] +}) +export class EditMenus { + myControl = new FormControl(); + //注入MatDialogRef,可以用来关闭对话框 + //要访问对话框组件中的数据,必须使用MAT_DIALOG_DATA注入令牌 + constructor(private http: HttpClient,public dialogRef: MatDialogRef,public snackBar: MatSnackBar,@Inject(MAT_DIALOG_DATA) public data) {} + menuname:any //菜单名称 + menuiconurl:any //菜单图标地址 + menuweburl:any //菜单地址 + ngOnInit(): void { + this.menuname = this.data.node.name; + this.menuiconurl = this.data.node.icon; + this.menuweburl = this.data.node.url; + } + onNoClick(): void { + this.dialogRef.close(); + } + onSubmit(value){ + if(value.icon){ + this.data.icon = value.icon + } + if(value.url){ + this.data.url = value.url + } + this.http.put( + ` /api/NavMenus/${this.data.id}`, + { + id: this.data.id, + name: value.name, + icon: this.data.icon, + url: this.data.url, + order:this.data.order, + parentId: this.data.parentId + } + ).subscribe( + data=>{ + this.dialogRef.close(); + }, + err=>{ + const config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.snackBar.open('请填写正确格式','确定',config); + } + ) + } +} \ No newline at end of file diff --git a/src/app/ui/organization/createorganization.component.html b/src/app/ui/organization/createorganization.component.html new file mode 100644 index 0000000..a3b56fb --- /dev/null +++ b/src/app/ui/organization/createorganization.component.html @@ -0,0 +1,33 @@ +
    + + + + + + + + + + + + + + + +
    + + +
    + +
    diff --git a/src/app/ui/organization/editorganization.component.html b/src/app/ui/organization/editorganization.component.html new file mode 100644 index 0000000..7eedd0b --- /dev/null +++ b/src/app/ui/organization/editorganization.component.html @@ -0,0 +1,50 @@ + +
    +
    + + + + + + + + + + + + + + +
    + + +
    + +
    +
    +
    + + + + +
  • {{node.name}}
  • +
    + + + + +
  • {{node.name}}
  • +
    +
    +
    diff --git a/src/app/ui/organization/organization.component.html b/src/app/ui/organization/organization.component.html new file mode 100644 index 0000000..6f963b9 --- /dev/null +++ b/src/app/ui/organization/organization.component.html @@ -0,0 +1,42 @@ +
    + + + + {{node.name}} + + + + + + + + + + + + + + {{node.name}} + + + + + + + + + + + +
    + +

    努力加载中...

    +
    +
    + diff --git a/src/app/ui/organization/organization.component.scss b/src/app/ui/organization/organization.component.scss new file mode 100644 index 0000000..3e8692d --- /dev/null +++ b/src/app/ui/organization/organization.component.scss @@ -0,0 +1,71 @@ +mat-tree{ + width:800px; + button{ + display: block; + float: right; + } + mat-tree-node{ + position: relative; + + .deleted{ + position: absolute; + right: 0px; + } + + .disabled{ + position: absolute; + right: 40px; + } + + .edit{ + position: absolute; + right:160px; + } + .create{ + position: absolute; + right: 200px; + } + .up{ + position: absolute; + right: 120px; + } + .down{ + position: absolute; + right: 80px; + } + } +} +form{ + text-align: center; + button{ + margin: 0 8px; + margin-top: 8px; + } +} + +.leftbox{ + width: 300px; + float: left; +} +.treebox{ + float: right; + height: 250px; + width: 300px; + /* overflow: auto; */ + overflow-x: hidden; + overflow-y: auto; +} +.smalltreebox{ + width: 300px; + mat-tree-node{ + width: 300px; + } +} +.orilist{ + list-style: none; + +} +.orilist:hover{ + cursor: pointer; + background-color: rgba(225, 225, 225, 0.8); +} \ No newline at end of file diff --git a/src/app/ui/organization/organization.component.ts b/src/app/ui/organization/organization.component.ts new file mode 100644 index 0000000..e4c67d8 --- /dev/null +++ b/src/app/ui/organization/organization.component.ts @@ -0,0 +1,559 @@ +import { Component, OnInit, Inject } from '@angular/core'; +import {MatTreeFlatDataSource, MatTreeFlattener} from '@angular/material/tree'; +import {FlatTreeControl} from '@angular/cdk/tree'; +import { HttpClient } from '@angular/common/http'; +import {MatDialog, MatDialogRef, MAT_DIALOG_DATA} from '@angular/material/dialog'; +import {FormControl} from '@angular/forms'; +import { MatSnackBar, MatSnackBarConfig } from '@angular/material/snack-bar'; +import { TreeService } from '../../http-interceptors/tree.service' +@Component({ + selector: 'app-organization', + templateUrl: './organization.component.html', + styleUrls: ['./organization.component.scss'] +}) +export class OrganizationComponent implements OnInit { + data:any =[] //存储所有组织机构 + newdata = []; + + private _transformer = (node, level: number) => {//要给渲染节点传那些属性参数 + return { + expandable: !!node.children && node.children.length > 0, + name: node.name, + level: level, + id: node.id, + parentId: node.parentId, + enabled:node.enabled, + order:node.order, + children:node.children, + isTop:node.isTop, + isBottom:node.isBottom, + code:node.code, + division:node.division + }; + } + treeControl = new FlatTreeControl(node => node.level, node => node.expandable); + treeFlattener = new MatTreeFlattener(this._transformer, node => node.level, node => node.expandable, node => node.children); + dataSource = new MatTreeFlatDataSource(this.treeControl, this.treeFlattener); + + constructor(private http: HttpClient,public dialog: MatDialog,public snackBar: MatSnackBar,private tree: TreeService) { + } + isloading:any = false //loading效果 + //重新获取列表并且展开到上次位置的方法 + getlist = ():void=>{ + this.http.get('/api/Organizations').subscribe( + (data:any)=>{ + this.data = data; + this.newdata = this.tree.toTree(data) + + const nodes = this.treeControl.dataNodes; + const expandNodes = []; + nodes.forEach((item) => { + if(item.expandable && this.treeControl.isExpanded(item)){ + expandNodes.push(item.id); + } + }); + + + this.dataSource.data = this.newdata; + let newNodes = this.treeControl.dataNodes; + newNodes = newNodes.filter(n => { + return expandNodes.indexOf(n.id) >= 0; + }); + newNodes.forEach(item => { + this.treeControl.expand(item); + }); + this.isloading = false + + } + ) + } + //初始化视图 + ngOnInit() { + this.http.get('/api/Organizations').subscribe( + (data:any)=>{ + // console.log(data) + this.data = data; + this.dataSource.data = this.tree.toTree(data); + this.treeControl.expand(this.treeControl.dataNodes[0]); + } + ) + } + hasChild = (_: number, node: any) => node.expandable; + + //创建组织按钮 + create(value){ + const dialogRef = this.dialog.open(CreateOrganization, {//调用open方法打开对话框并且携带参数过去 + width: '260px', + data: {id:value.id,childlength:value.children,level:value.level} + }); + dialogRef.afterClosed().subscribe( + data=>{ + if(data){ + this.getlist() + } + } + ); + } + //编辑组织按钮 + edit(node){ + const dialogRef = this.dialog.open(EditOrganization, {//调用open方法打开对话框并且携带参数过去 + data: node + }); + dialogRef.afterClosed().subscribe( + data=>{ + this.getlist() + } + ); + } + //删除组织按钮 + delete(value){ + var isdeleted = confirm("确定要删除此组织?") + if(isdeleted){ + //请求删除接口 + this.isloading = true + this.http.delete(`/api/Organizations/${value.id}`).subscribe( data=>{ + this.getlist() + + }) + } + } + //禁用按钮 + disable(value){ + this.isloading = true + if(!value.enabled){ + this.http.put( + `/api/Organizations/${value.id}`, + { + id:value.id, + code:value.code, + name: value.name, + level:value.level, + order: value.order, + location: null, + enabled: true, + parentId: value.parentId + } + ).subscribe( + data=>{ + const config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.snackBar.open('启用成功','确定',config); + this.getlist() + + }, + err=>{ + const config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.snackBar.open('操作无效','确定',config); + this.isloading = false + } + ) + + }else{ + // var isdeleted = confirm("确定要禁用此组织?") + // if(isdeleted){ + this.http.put( + `/api/Organizations/${value.id}`, + { + id:value.id, + code:value.code, + name: value.name, + level:value.level, + order: value.order, + location: null, + enabled: false, + parentId: value.parentId + } + ).subscribe( + data=>{ + const config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.snackBar.open('禁用成功','确定',config); + this.getlist() + + }, + err=>{ + const config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.snackBar.open('操作无效','确定',config); + this.isloading = false + } + ) + // } + } + + + } + + + //向上箭头 + updata = [] + up(node){ + this.isloading = true + var olddata = this.data; + // console.log(1,olddata) + // console.log(2,node) + this.updata = [] + olddata.forEach(item => { + if(item.id == node.parentId){ + this.updata = item.children + } + }); + // console.log(this.updata) + this.updata.forEach((item,index)=>{ + if(item.name == node.name){ + this.http.put(//更改点击的节点为上一节点的order + `/api/Organizations/${this.updata[index].id}`, + { + id:this.updata[index].id, + code:this.updata[index].code, + name: this.updata[index].name, + level: this.updata[index].level, + order: this.updata[index - 1].order, + location: null, + enabled: true, + parentId: this.updata[index].parentId, + } + ).subscribe( + data=>{ + // this.getlist() + this.http.put(//更改上一节点为点击节点的order + `/api/Organizations/${this.updata[index - 1].id}`, + { + id:this.updata[index - 1].id, + code:this.updata[index - 1].code, + name: this.updata[index - 1].name, + level: this.updata[index - 1].level, + order: this.updata[index].order, + location: null, + enabled: true, + parentId: this.updata[index].parentId, + } + ).subscribe( + data=>{ + this.getlist() + + }, + err=>{ + const config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.snackBar.open('更改order失败','确定',config); + this.isloading = false + } + ) + }, + err=>{ + const config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.snackBar.open('更改order失败','确定',config); + this.isloading = false + } + ) + + + } + + + + }) + + } + + + + //向下箭头 + downdata = [] + down(node){ + this.isloading = true + var olddata = this.data; + this.downdata = [] + olddata.forEach(item => { + if(item.id == node.parentId){ + this.downdata = item.children + } + }); + // console.log(this.downdata) + this.downdata.forEach((item,index)=>{ + if(item.name == node.name){ + this.http.put(//更改点击的节点为下一节点的order + `/api/Organizations/${this.downdata[index].id}`, + { + id:this.downdata[index].id, + code:this.downdata[index].code, + name: this.downdata[index].name, + level: this.downdata[index].level, + order: this.downdata[index + 1].order, + location: null, + enabled: true, + parentId: this.downdata[index].parentId, + } + ).subscribe( + data=>{ + // this.getlist() + this.http.put(//更改上一节点为点击节点的order + `/api/Organizations/${this.downdata[index + 1].id}`, + { + id:this.downdata[index + 1].id, + code:this.downdata[index + 1].code, + name: this.downdata[index + 1].name, + level: this.downdata[index + 1].level, + order: this.downdata[index].order, + location: null, + enabled: true, + parentId: this.downdata[index].parentId, + } + ).subscribe( + data=>{ + this.getlist() + + }, + err=>{ + const config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.snackBar.open('更改order失败','确定',config); + this.isloading = false + } + ) + }, + err=>{ + const config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.snackBar.open('更改order失败','确定',config); + this.isloading = false + } + ) + + + } + + + + }) + } +} + + + + + +//创建组织 +@Component({ + selector: 'createorganization', + templateUrl: './createorganization.component.html', + styleUrls: ['./organization.component.scss'] +}) +export class CreateOrganization { + myControl = new FormControl(); + ishttp: boolean =false + constructor(private http: HttpClient,public dialogRef: MatDialogRef,@Inject(MAT_DIALOG_DATA) public data, + public snackBar: MatSnackBar) {} + + onNoClick(): void { + this.dialogRef.close(); + } + + onSubmit(value){ + if(this.data.childlength){//如果点击节点存在children + this.http.post( + '/api/Organizations', + { + id:"", + code:value.number, + division:value.division, + name: value.name, + level:this.data.level + 1, + order: this.data.childlength[this.data.childlength.length -1].order + 1, + location: null, + enabled: true, + parentId: this.data.id, + } + ).subscribe( + data=>{ + this.dialogRef.close(data); + const config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.snackBar.open('创建组织成功','确定',config); + }, + err=>{ + const config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.snackBar.open('请填写正确格式','确定',config); + } + ) + }else{ + this.http.post( + '/api/Organizations', + { + id:"", + code:value.number, + division:value.division, + name: value.name, + level:this.data.level + 1, + order:0, + location: null, + enabled: true, + parentId: this.data.id, + } + ).subscribe( + data=>{ + this.dialogRef.close(data); + const config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.snackBar.open('创建组织成功','确定',config); + }, + err=>{ + const config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.snackBar.open('请填写正确格式','确定',config); + } + ) + } + + } +} + +//编辑组件 +@Component({ + selector: 'editorganization', + templateUrl: './editorganization.component.html', + styleUrls: ['./organization.component.scss'] +}) +export class EditOrganization { + newdata = []; + private _transformer = (node, level: number) => { + return { + expandable: !!node.children && node.children.length > 0, + name: node.name, + level: level, + id: node.id, + parentId: node.parentId, + children:node.children, + division:node.division + }; + } + treeControl = new FlatTreeControl(node => node.level, node => node.expandable); + treeFlattener = new MatTreeFlattener(this._transformer, node => node.level, node => node.expandable, node => node.children); + dataSource = new MatTreeFlatDataSource(this.treeControl, this.treeFlattener); + myControl = new FormControl(); + organizationname:string=""//自己组织的名字 + organizationcode:any//自己组织的编号 + organizationName:any =''//上级组织的名字 + organizationId:any =''//上级组织的id + organizationLevel:number =null//上级组织的层级 + organizationchildlength:number = null + allOrganizations:any //所有组织机构 + division:any //区划 + constructor(private http: HttpClient,public dialogRef: MatDialogRef,@Inject(MAT_DIALOG_DATA) public data, + private tree:TreeService,public snackBar: MatSnackBar) {} + + //获取所有组织机构 + getMechanism () { + this.http.get('/api/Organizations').subscribe( + (data:any)=>{ + this.allOrganizations = data + this.dataSource.data = this.tree.toTree(data); + data.forEach(item=>{ + if(item.id == this.data.parentId){ + this.organizationName = item.name + } + }) + } + ) + } + + ngOnInit() { + // console.log(this.data) + this.getMechanism() + this.organizationname = this.data.name + this.organizationcode = this.data.code + this.division = this.data.division + } + hasChild = (_: number, node: any) => node.expandable; + onNoClick(): void { + this.dialogRef.close(); + } + add(e){ + this.organizationName=e.name + this.organizationId=e.id + this.organizationLevel=e.level + if(e.children){//如果点击的父组织有子节点 + this.organizationchildlength = e.children.length + }else{ + this.organizationchildlength = 0 + } + } + onSubmit(value){ + if(this.organizationLevel){//如果点击了右边的树 + this.http.put( + `/api/Organizations/${this.data.id}`, + { + id:this.data.id, + code:value.number, + division:value.division, + name: value.name, + level:this.organizationLevel + 1, + order: this.organizationchildlength, + location: null, + enabled: true, + parentId: this.organizationId, + } + ).subscribe( + data=>{ + this.dialogRef.close(); + const config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.snackBar.open('修改成功','确定',config); + }, + err=>{ + const config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.snackBar.open('请填写正确格式','确定',config); + } + ) + }else{ //如果只改了姓名 + this.http.put( + `/api/Organizations/${this.data.id}`, + { + id:this.data.id, + code: value.number, + division:value.division, + name: value.name, + level:this.data.level, + order: this.data.order, + location: null, + enabled: true, + parentId: this.data.parentId, + } + ).subscribe( + data=>{ + this.dialogRef.close(); + const config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.snackBar.open('修改成功','确定',config); + }, + err=>{ + const config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.snackBar.open('请填写正确格式','确定',config); + } + ) + } + + } +} \ No newline at end of file diff --git a/src/app/ui/paginator/my-paginator.ts b/src/app/ui/paginator/my-paginator.ts new file mode 100644 index 0000000..9d5ecbb --- /dev/null +++ b/src/app/ui/paginator/my-paginator.ts @@ -0,0 +1,29 @@ +import { MatPaginatorIntl } from '@angular/material/paginator'; + + +const dutchRangeLabel = (page: number, pageSize: number, length: number) => { + if (length === 0 || pageSize === 0) { return `0 到 ${length}`; } + length = Math.max(length, 0); + const startIndex = page * pageSize; + const endIndex = startIndex < length ? + Math.min(startIndex + pageSize, length) : + startIndex + pageSize; + return `${startIndex + 1} - ${endIndex} / ${length}条`; + +} + +export function myPaginator() { + + const paginatorIntl = new MatPaginatorIntl(); + + paginatorIntl.itemsPerPageLabel = '每页条数:'; + + paginatorIntl.nextPageLabel = '下一页:'; + + paginatorIntl.previousPageLabel = '上一页:'; + + paginatorIntl.getRangeLabel = dutchRangeLabel; + + return paginatorIntl; + +} diff --git a/src/app/ui/paginator/paginator.component.html b/src/app/ui/paginator/paginator.component.html new file mode 100644 index 0000000..4cc8c57 --- /dev/null +++ b/src/app/ui/paginator/paginator.component.html @@ -0,0 +1,5 @@ + + diff --git a/src/app/ui/paginator/paginator.component.scss b/src/app/ui/paginator/paginator.component.scss new file mode 100644 index 0000000..c67d923 --- /dev/null +++ b/src/app/ui/paginator/paginator.component.scss @@ -0,0 +1,3 @@ +mat-paginator{ + margin-top: 50px; +} \ No newline at end of file diff --git a/src/app/ui/paginator/paginator.component.spec.ts b/src/app/ui/paginator/paginator.component.spec.ts new file mode 100644 index 0000000..cabc63d --- /dev/null +++ b/src/app/ui/paginator/paginator.component.spec.ts @@ -0,0 +1,25 @@ +import { async, ComponentFixture, TestBed } from '@angular/core/testing'; + +import { PaginatorComponent } from './paginator.component'; + +describe('PaginatorComponent', () => { + let component: PaginatorComponent; + let fixture: ComponentFixture; + + beforeEach(async(() => { + TestBed.configureTestingModule({ + declarations: [ PaginatorComponent ] + }) + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(PaginatorComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/ui/paginator/paginator.component.ts b/src/app/ui/paginator/paginator.component.ts new file mode 100644 index 0000000..f05051e --- /dev/null +++ b/src/app/ui/paginator/paginator.component.ts @@ -0,0 +1,15 @@ +import { Component, OnInit } from '@angular/core'; + +@Component({ + selector: 'app-paginator', + templateUrl: './paginator.component.html', + styleUrls: ['./paginator.component.scss'] +}) +export class PaginatorComponent implements OnInit { + + constructor() { } + + ngOnInit() { + } + +} diff --git a/src/app/ui/paginator/paginator.module.ts b/src/app/ui/paginator/paginator.module.ts new file mode 100644 index 0000000..44f1352 --- /dev/null +++ b/src/app/ui/paginator/paginator.module.ts @@ -0,0 +1,17 @@ +import { NgModule } from '@angular/core'; +import { CommonModule } from '@angular/common'; +import { PaginatorComponent } from './paginator.component'; +import { MatPaginatorIntl, MatPaginatorModule } from '@angular/material/paginator'; +import { myPaginator } from './my-paginator' +import { UiModule } from '../ui.module'; + + +@NgModule({ + declarations: [PaginatorComponent], + imports: [ + CommonModule, + MatPaginatorModule + ], + providers: [ { provide: MatPaginatorIntl, useValue: myPaginator() } ] +}) +export class PaginatorModule { } diff --git a/src/app/ui/progress/progress.component.html b/src/app/ui/progress/progress.component.html new file mode 100644 index 0000000..a858bc9 --- /dev/null +++ b/src/app/ui/progress/progress.component.html @@ -0,0 +1,13 @@ + +
    +

    确定进度条

    + +
    +

    不确定进度条

    + +
    +

    缓冲进度条

    + +
    +

    查询进度条

    + diff --git a/src/app/ui/progress/progress.component.scss b/src/app/ui/progress/progress.component.scss new file mode 100644 index 0000000..e69de29 diff --git a/src/app/ui/progress/progress.component.spec.ts b/src/app/ui/progress/progress.component.spec.ts new file mode 100644 index 0000000..aea0b97 --- /dev/null +++ b/src/app/ui/progress/progress.component.spec.ts @@ -0,0 +1,25 @@ +import { async, ComponentFixture, TestBed } from '@angular/core/testing'; + +import { ProgressComponent } from './progress.component'; + +describe('ProgressComponent', () => { + let component: ProgressComponent; + let fixture: ComponentFixture; + + beforeEach(async(() => { + TestBed.configureTestingModule({ + declarations: [ ProgressComponent ] + }) + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(ProgressComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/ui/progress/progress.component.ts b/src/app/ui/progress/progress.component.ts new file mode 100644 index 0000000..93168b5 --- /dev/null +++ b/src/app/ui/progress/progress.component.ts @@ -0,0 +1,15 @@ +import { Component, OnInit } from '@angular/core'; + +@Component({ + selector: 'app-progress', + templateUrl: './progress.component.html', + styleUrls: ['./progress.component.scss'] +}) +export class ProgressComponent implements OnInit { + + constructor() { } + + ngOnInit() { + } + +} diff --git a/src/app/ui/role/createrole.component.html b/src/app/ui/role/createrole.component.html new file mode 100644 index 0000000..4738ce2 --- /dev/null +++ b/src/app/ui/role/createrole.component.html @@ -0,0 +1,54 @@ +
    + + 创建新角色 + + + + 分配权限 +
    + + +
    + 关联数据权限 + 全选 + + + + + {{node.name}} + + + + + {{node.name}} + + +
    +
    + 关联导航菜单 + 全选 + + + + + {{node.name}} + + + + + {{node.name}} + + +
    +
    + + + +
    + + +
    + +
    \ No newline at end of file diff --git a/src/app/ui/role/editrole.component.html b/src/app/ui/role/editrole.component.html new file mode 100644 index 0000000..0471799 --- /dev/null +++ b/src/app/ui/role/editrole.component.html @@ -0,0 +1,57 @@ +
    + + 编辑角色 + + + + + + 分配权限 + +
    +
    + 关联数据权限 + + + + + {{node.name}} + + + + + + {{node.name}} + + +
    + + +
    + 关联导航菜单 + + + + + {{node.name}} + + + + + + {{node.name}} + + +
    +
    + + + +
    + + +
    + +
    diff --git a/src/app/ui/role/role.component.html b/src/app/ui/role/role.component.html new file mode 100644 index 0000000..3eeef51 --- /dev/null +++ b/src/app/ui/role/role.component.html @@ -0,0 +1,42 @@ +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    角色名称 {{roledata.name}} 创建/修改时间 {{roledata.creationTime | time }} 是否启用 {{roledata.enabled | isno}} 操作 + + + + + + + +
    + + +
    + \ No newline at end of file diff --git a/src/app/ui/role/role.component.scss b/src/app/ui/role/role.component.scss new file mode 100644 index 0000000..d5b7c76 --- /dev/null +++ b/src/app/ui/role/role.component.scss @@ -0,0 +1,49 @@ +table { + width: 100%; + th,td{ + text-align: center; + } + button{ + margin: 0 3px; + } + +} +form{ + // text-align: center; + + button{ + + margin: 0 8px; + margin-bottom: 30px; + } + .mat-checkbox{ + display: block; + text-align: left; + } + .btn{ + padding-top: 18px; + text-align: center; + } + mat-form-field{ + margin-right:80px; + } + span{ + display: block; + margin-bottom: 10px; + } +} +.shareform{ + height: 300px; +} +.leftbox{ + width: 250px; + float: left; +} +.rightbox{ + width: 250px; + float: right; +} +.bigbox{ + height: 400px; + overflow: auto; +} \ No newline at end of file diff --git a/src/app/ui/role/role.component.ts b/src/app/ui/role/role.component.ts new file mode 100644 index 0000000..a3b7501 --- /dev/null +++ b/src/app/ui/role/role.component.ts @@ -0,0 +1,644 @@ +import { Component, OnInit, Inject } from '@angular/core'; +import {MatDialog, MatDialogRef, MAT_DIALOG_DATA} from '@angular/material/dialog'; +import {FormControl} from '@angular/forms'; +import { HttpClient } from '@angular/common/http'; +import { CacheTokenService } from '../../http-interceptors/cache-token.service' +import format from 'date-fns/format'; +import {CdkDragDrop, moveItemInArray} from '@angular/cdk/drag-drop'; +import {MatTreeFlatDataSource, MatTreeFlattener} from '@angular/material/tree'; +import {FlatTreeControl} from '@angular/cdk/tree'; +import { TreeService } from '../../http-interceptors/tree.service' +import { MatSnackBar, MatSnackBarConfig } from '@angular/material/snack-bar'; + + + +export interface roledata { + id: string, + name: string,//名称 + order: number, + enabled: boolean, + creationTime: string +} +@Component({ + selector: 'app-role', + templateUrl: './role.component.html', + styleUrls: ['./role.component.scss'] +}) + +export class RoleComponent implements OnInit { + constructor(private http: HttpClient,public dialog: MatDialog,public createtime:CacheTokenService,private tree:TreeService,public snackBar: MatSnackBar) { } + displayedColumns: string[] = ['name','createtiome', 'edit']; + dataSource: any + + public compare(property){ + return function(a,b){ + var value1 = a[property]; + var value2 = b[property]; + return value1 - value2; + } + } + //获取角色列表并且给排头和排尾赋是否为首尾 + getlist(){ + this.http.get('/api/Roles').subscribe( (data:Array)=>{ + this.dataSource = data + this.dataSource[0].isTop = true; + this.dataSource[this.dataSource.length-1].isBottom = true + }) + } + //初始化视图 + ngOnInit() { + this.getlist() + } + //向上按钮 + up(node){ + let newdate = new Date(); + let time = format(newdate, 'yyyy-MM-dd') + this.http.put(//把上一节点order换成点击的节点 + `/api/Roles/${this.dataSource[node.order -1].id}`, + { + id:this.dataSource[node.order -1].id, + name: this.dataSource[node.order -1].name, + order: node.order, + enabled: true, + creationTime:time, + } + ).subscribe(data=>{ + this.getlist() + }) + + this.http.put(//把当前节点order换成上一点击的节点 + `/api/Roles/${node.id}`, + { + id:node.id, + name: node.name, + order: node.order-1, + enabled: true, + creationTime:time, + } + ).subscribe(data=>{ + this.getlist() + }) + + } + //向下按钮 + down(node){ + let newdate = new Date(); + let time = format(newdate, 'yyyy-MM-dd') + this.http.put(//把下一节点order换成点击的节点 + `/api/Roles/${this.dataSource[node.order + 1].id}`, + { + id:this.dataSource[node.order + 1].id, + name: this.dataSource[node.order + 1].name, + order: node.order, + enabled: true, + creationTime:time, + } + ).subscribe(data=>{ + this.getlist() + }) + + this.http.put(//把当前节点order换成下一点击的节点 + `/api/Roles/${node.id}`, + { + id:node.id, + name: node.name, + order: node.order + 1, + enabled: true, + creationTime:time, + } + ).subscribe(data=>{ + this.getlist() + }) + } + //创建按钮并且弹出对话框 + createuser(){ + const dialogRef = this.dialog.open(CreateRole, {//调用open方法打开对话框并且携带参数过去 + width: '600px', + height:'658px', + data: {name: this.createuser.name,data: this.dataSource,length:this.dataSource.length} + }); + dialogRef.afterClosed().subscribe( + data=>{ + this.getlist() + } + ); + } + + //删除按钮 + deleteduser(roledata){ + var isdeleted = confirm("确定要删除此用户吗?") + if(isdeleted){ + //请求删除接口 + this.http.delete(`/api/Roles/${roledata.id}`).subscribe( data=>{ + this.getlist() + }) + } + } + //编辑按钮 + allot(roledata){ + const dialogRef = this.dialog.open(EditRole, {//调用open方法打开对话框并且携带参数过去 + width: '600px', + height:'658px', + data: {id:roledata.id,name:roledata.name,order:roledata.order}//把点击的id传过去 + }); + + dialogRef.afterClosed().subscribe( + data=>{ + this.getlist() + } + ); + } + + //启用或禁用按钮 + open(roledata){ + let newdate = new Date(); + let time = format(newdate, 'yyyy-MM-dd') + this.http.put( + `/api/Roles/${roledata['id']}`, + { + id:roledata['id'], + name: roledata.name, + order: roledata.order, + enabled: !roledata.enabled, + creationTime: time, + } + ).subscribe( + data=>{ + this.getlist() + } + ) + } + + drop(event: CdkDragDrop) {//拖拽函数 + moveItemInArray(this.dataSource, event.previousIndex, event.currentIndex); + this.dataSource.forEach((item, index) => { + item.order = index; + }) + const a = [...this.dataSource]; + this.dataSource = []; + setTimeout(() => { + this.dataSource = a; + }, 10); + }; +} + + + + + + +//创建角色组件 +@Component({ + selector: 'createrole', + templateUrl: './createrole.component.html', + styleUrls: ['./role.component.scss'] +}) +export class CreateRole { + private _transformer = (node: any, level: number) => { + return { + expandable: !!node.children && node.children.length > 0, + name: node.name, + level: level, + id:node.id + }; + } + treeControl = new FlatTreeControl( + node => node.level, node => node.expandable); + + treeFlattener = new MatTreeFlattener( + this._transformer, node => node.level, node => node.expandable, node => node.children); + + dataSource = new MatTreeFlatDataSource(this.treeControl, this.treeFlattener); + dataSource2 = new MatTreeFlatDataSource(this.treeControl, this.treeFlattener); + myControl = new FormControl(); + //注入MatDialogRef,可以用来关闭对话框 + //要访问对话框组件中的数据,必须使用MAT_DIALOG_DATA注入令牌 + constructor(private http: HttpClient,public dialogRef: MatDialogRef,@Inject(MAT_DIALOG_DATA) public data,private tree:TreeService,public snackBar: MatSnackBar) {} + olddata =[] + olddata2 = [] + xxx = {} + jjj = {} + //用于存放选中的数组 + checkedMap = {} + //初始化两棵tree + ngOnInit(){ + this.http.get('/api/Permissions').subscribe((data: any[])=>{ + this.olddata =data + this.dataSource.data = this.tree.toTree(data); + this.treeControl.expandAll() + this.dataSource.data.forEach(item=>{ + if(item.children){ + var childarr = [] + item.children.forEach(n => { + childarr.push(n.id) + }) + this.xxx[item.id] = childarr + } + }) + + }) + + this.http.get('/api/NavMenus').subscribe((data: any[])=>{ + this.olddata2 =data + this.dataSource2.data = this.tree.toTree(data); + this.treeControl.expandAll() + this.dataSource2.data.forEach(item=>{ + if(item.children){ + var childarr = [] + item.children.forEach(n => { + childarr.push(n.id) + }) + this.jjj[item.id] = childarr + } + }) + }) + } + + //选中后子节点默认选中 + selectedAll(event, node){ + this.olddata.forEach(item=>{ + if(item.parentId == node.id){ + this.checkedMap[item.id] = event.checked; + } + }) + + // console.log(this.olddata2,node ) + var menus =[] //导航菜单可能有三级 用于存储第二级 + //选中一级菜单 + this.olddata2.forEach(item=>{ + if(item.parentId == node.id){ + this.checkedMap[item.id] = event.checked; + menus.push(item) + } + }) + //将二级菜单也选中 + menus.forEach(item=>{ + if(item.children){ + item.children.forEach(n => { + this.checkedMap[n.id] = event.checked; + }); + } + }) + } + + //数据权限tree的全选功能 + leftTreeAll(event,form){ + const values = form.value; + for (let key in values) { + if(key.indexOf("second")){ + this.checkedMap[key.split('.')[1]] = event.checked; + } + } + } + //菜单权限tree的全选功能 + rightTreeAll(event,form){ + const values = form.value; + for (let key in values) { + if(key.indexOf("first")){ + this.checkedMap[key.split('.')[1]] = event.checked; + } + } + } + + hasChild = (_: number, node: any) => node.expandable; + + onNoClick(): void { + this.dialogRef.close(); + } + //提交 + onSubmit(value){ + let newdate = new Date(); + let time = format(newdate, 'yyyy-MM-dd') + this.http.post( + '/api/Roles', + { + id:"", + name: value.name, + order: this.data.data[this.data.data.length - 1].order + 1, + enabled: true, + creationTime: time, + } + ).subscribe( + data=>{ + var id = data['id'] + // console.log(value) + var keydata = [] //菜单权限id集合 + var keydata2 = [] //数据权限id集合 + for(let i in value){ + if(value[i]){ + if(i.indexOf("first") && i!="name"){ + keydata.push(i.split('.')[1]) + } + if(i.indexOf("second") && i!="name"){ + keydata2.push(i.split('.')[1]) + } + } + } + + function includes(arr1, arr2) { + return arr2.every(val => arr1.includes(val)); + } + const orginalList = [...keydata2]; + orginalList.forEach((item) => { // forEach 里面 splice 有问题,详见 https://blog.csdn.net/qq_38128179/article/details/92798157 + if (item in this.xxx) { // 根据 key,可以直接在 对象 里面获取数据 + const datachildarrboxArr = this.xxx[item]; + if (!includes(keydata2, datachildarrboxArr)) { // 如果不全部包含 + keydata2.splice(keydata2.findIndex(items => items == item), 1); + } + } + }); + + this.http.post( + `/api/Roles/${id}/Permissions`, + keydata2 + ).subscribe( + data=>{ + this.http.post( + `/api/Roles/${id}/NavMenus`, + keydata + ).subscribe( + data=>{ + this.dialogRef.close(); + const config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.snackBar.open('创建成功','确定',config); + }, + err=>{ + this.dialogRef.close(); + const config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.snackBar.open('创建菜单权限失败','确定',config); + } + ) + }, + err=>{ + this.dialogRef.close(); + const config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.snackBar.open('创建数据权限失败','确定',config); + } + ) + + }, + err=>{ + const config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.snackBar.open('角色名称不符合规范','确定',config); + } + ) + } +} + + + + + + + + + +//编辑组件 +@Component({ + selector: 'editrole', + templateUrl: './editrole.component.html', + styleUrls: ['./role.component.scss'] +}) +export class EditRole { + private _transformer = (node: any, level: number) => { + return { + expandable: !!node.children && node.children.length > 0, + name: node.name, + level: level, + id:node.id, + children:node.children + }; + } + treeControl = new FlatTreeControl( + node => node.level, node => node.expandable); + + treeFlattener = new MatTreeFlattener( + this._transformer, node => node.level, node => node.expandable, node => node.children); + + dataSource = new MatTreeFlatDataSource(this.treeControl, this.treeFlattener); + dataSource2 = new MatTreeFlatDataSource(this.treeControl, this.treeFlattener); + + myControl = new FormControl(); + //注入MatDialogRef,可以用来关闭对话框 + //要访问对话框组件中的数据,必须使用MAT_DIALOG_DATA注入令牌 + constructor(private http: HttpClient,public dialogRef: MatDialogRef,public snackBar: MatSnackBar,@Inject(MAT_DIALOG_DATA) public data,private tree:TreeService) {} + + olddata =[] //原始所有--数据权限 + olddata2 =[] //原始所有--菜单权限 + newdata = [] + newdata2 = [] + placeholdername = this.data.name + datachildarrbox = {} //数据权限存放有children的 父id:子id1 子id2 子id3 + menuchildarrbox = {} //菜单权限存放有children的 父id:子id1 子id2 子id3 + checkedMap = {} + ngOnInit(){ + //获得角色的数据权限,选中的checked为true + this.http.get(`/api/Roles/${this.data.id}/Permissions`).subscribe((data: any[])=>{ + this.olddata =data + this.newdata = this.tree.toTree(this.olddata) + + //如果子节点存在选中则父节点默认选中 + this.newdata.forEach(item=>{ + if(item.children){ + item.children.forEach(element => { + if(element.checked){ + this.checkedMap[item.id] = true + } + }); + } + }) + + data.forEach(item=>{ + if(item.checked){ + this.checkedMap[item.id] = true; + } + + }) + this.dataSource.data = this.newdata; + this.treeControl.expandAll() + this.dataSource.data.forEach(item=>{ + if(item.children){ + var childarr = [] + item.children.forEach(n => { + childarr.push(n.id) + }) + this.datachildarrbox[item.id] = childarr + } + }) + }) + + + //获得角色的菜单权限,选中的checked为true + this.http.get(`/api/Roles/${this.data.id}/NavMenus`).subscribe((data: any[])=>{ + this.olddata2 =data + this.newdata2 = this.tree.toTree(this.olddata2) + data.forEach(item => { + if(item.checked){ + this.checkedMap[item.id] = item.checked; + } + }); + + this.dataSource2.data = this.newdata2; + this.treeControl.expandAll() + + this.dataSource2.data.forEach(item=>{ + if(item.children){ + var childarr = [] + item.children.forEach(n => { + childarr.push(n.id) + }) + this.menuchildarrbox[item.id] = childarr + } + }) + }) + } + + //选中对应小组 + selectedAll(event, node){ + this.olddata.forEach(item=>{ + if(item.parentId == node.id){ + this.checkedMap[item.id] = event.checked; + } + }) + // console.log(this.olddata2,node ) + var menus =[] //导航菜单可能有三级 用于存储第二级 + //选中一级菜单 + this.olddata2.forEach(item=>{ + if(item.parentId == node.id){ + this.checkedMap[item.id] = event.checked; + menus.push(item) + } + }) + //将二级菜单也选中 + menus.forEach(item=>{ + if(item.children){ + item.children.forEach(n => { + this.checkedMap[n.id] = event.checked; + }); + } + }) + } + + hasChild = (_: number, node: any) => node.expandable; + + onNoClick(): void { + this.dialogRef.close(); + } + + + onSubmit(value){ + var keydata = [] //存储选中的菜单权限 + var keydata2 = [] //存储选中的数据权限 + + for(let i in value){ + if(value[i]){ + if(i.indexOf("first") && i!="name" && i!="order"){ + keydata.push(i.split('.')[1]) + } + if(i.indexOf("second") && i!="name" && i!="order"){ + keydata2.push(i.split('.')[1]) + } + } + } + let newdate = new Date(); + let time = format(newdate, 'yyyy-MM-dd') + if(this.data['id'] != "0" && this.data['id'] != "1"){ + this.http.put( + `/api/Roles/${this.data['id']}`, + { + id:this.data['id'], + name: value.name, + order: this.data.order, + enabled: true, + creationTime:time, + } + ).subscribe(data=>{ + + }, + err=>{ + const config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.snackBar.open('修改角色姓名请求失败','确定',config); + }) + function includes(arr1, arr2) { + return arr2.every(val => arr1.includes(val)); + } + const orginalList = [...keydata2]; + orginalList.forEach((item) => { // forEach 里面 splice 有问题,详见 https://blog.csdn.net/qq_38128179/article/details/92798157 + if (item in this.datachildarrbox) { // 根据 key,可以直接在 对象 里面获取数据 + const datachildarrboxArr = this.datachildarrbox[item]; + if (!includes(keydata2, datachildarrboxArr)) { // 如果不全部包含 + keydata2.splice(keydata2.findIndex(items => items == item), 1); + } + } + }); + this.http.post( + `/api/Roles/${this.data.id}/Permissions`, + keydata2 + ).subscribe(data=>{ + + }, + err=>{ + const config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.snackBar.open('分配数据权限请求失败','确定',config); + }) + } + this.http.post( + `/api/Roles/${this.data.id}/NavMenus`, + keydata + ).subscribe( + data=>{ + this.dialogRef.close(); + const config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.snackBar.open('编辑成功','确定',config); + }, + err=>{ + this.dialogRef.close(); + const config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.snackBar.open('分配菜单权限失败','确定',config); + } + ) + // this.http.put( + // `/api/Roles/${this.data['id']}`, + // { + // id:this.data['id'], + // name: value.name, + // order: this.data.order, + // enabled: true, + // creationTime:time, + // } + // ).subscribe( + // data=>{ + + + + // }, + // err=>{ + // const config = new MatSnackBarConfig(); + // config.verticalPosition = 'top'; + // config.duration = 3000 + // this.snackBar.open('名称格式不正确','确定',config); + // } + // ) + + + + } +} + + diff --git a/src/app/ui/slide/slide.component.html b/src/app/ui/slide/slide.component.html new file mode 100644 index 0000000..46148bf --- /dev/null +++ b/src/app/ui/slide/slide.component.html @@ -0,0 +1 @@ +{{xxx}} diff --git a/src/app/ui/slide/slide.component.scss b/src/app/ui/slide/slide.component.scss new file mode 100644 index 0000000..e69de29 diff --git a/src/app/ui/slide/slide.component.spec.ts b/src/app/ui/slide/slide.component.spec.ts new file mode 100644 index 0000000..c82efb6 --- /dev/null +++ b/src/app/ui/slide/slide.component.spec.ts @@ -0,0 +1,25 @@ +import { async, ComponentFixture, TestBed } from '@angular/core/testing'; + +import { SlideComponent } from './slide.component'; + +describe('SlideComponent', () => { + let component: SlideComponent; + let fixture: ComponentFixture; + + beforeEach(async(() => { + TestBed.configureTestingModule({ + declarations: [ SlideComponent ] + }) + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(SlideComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/ui/slide/slide.component.ts b/src/app/ui/slide/slide.component.ts new file mode 100644 index 0000000..2310459 --- /dev/null +++ b/src/app/ui/slide/slide.component.ts @@ -0,0 +1,22 @@ +import { Component, OnInit } from '@angular/core'; + +@Component({ + selector: 'app-slide', + templateUrl: './slide.component.html', + styleUrls: ['./slide.component.scss'] +}) +export class SlideComponent implements OnInit { + + xxx:boolean=false + sss(){ + this.xxx = !this.xxx + console.log(this.xxx) + } + constructor() { + + } + + ngOnInit() { + } + +} diff --git a/src/app/ui/snackbar/snackbar.component.html b/src/app/ui/snackbar/snackbar.component.html new file mode 100644 index 0000000..49dfc20 --- /dev/null +++ b/src/app/ui/snackbar/snackbar.component.html @@ -0,0 +1,10 @@ +

    底部提示消息

    + + + + + + + + + diff --git a/src/app/ui/snackbar/snackbar.component.scss b/src/app/ui/snackbar/snackbar.component.scss new file mode 100644 index 0000000..e69de29 diff --git a/src/app/ui/snackbar/snackbar.component.spec.ts b/src/app/ui/snackbar/snackbar.component.spec.ts new file mode 100644 index 0000000..664d327 --- /dev/null +++ b/src/app/ui/snackbar/snackbar.component.spec.ts @@ -0,0 +1,25 @@ +import { async, ComponentFixture, TestBed } from '@angular/core/testing'; + +import { SnackbarComponent } from './snackbar.component'; + +describe('SnackbarComponent', () => { + let component: SnackbarComponent; + let fixture: ComponentFixture; + + beforeEach(async(() => { + TestBed.configureTestingModule({ + declarations: [ SnackbarComponent ] + }) + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(SnackbarComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/ui/snackbar/snackbar.component.ts b/src/app/ui/snackbar/snackbar.component.ts new file mode 100644 index 0000000..1fcdc8c --- /dev/null +++ b/src/app/ui/snackbar/snackbar.component.ts @@ -0,0 +1,19 @@ +import { Component, OnInit } from '@angular/core'; +import {MatSnackBar} from '@angular/material/snack-bar'; +@Component({ + selector: 'app-snackbar', + templateUrl: './snackbar.component.html', + styleUrls: ['./snackbar.component.scss'] +}) +export class SnackbarComponent implements OnInit { + + constructor(private _snackBar: MatSnackBar) { } + + ngOnInit() { + } + openSnackBar(message: string, action: string) { + this._snackBar.open(message, action, { + duration: 2000, + }); + } +} diff --git a/src/app/ui/stepper/stepper.component.html b/src/app/ui/stepper/stepper.component.html new file mode 100644 index 0000000..c999bd3 --- /dev/null +++ b/src/app/ui/stepper/stepper.component.html @@ -0,0 +1,51 @@ + + + + + + + + + +
    + 填写姓名 + + + + + +
    + + +
    +
    +
    + + + +
    + 家庭住址 + + + +
    + + + +
    +
    +
    + + + 完成 + 你已经完成了 +
    + + +
    +
    +
    + + diff --git a/src/app/ui/stepper/stepper.component.scss b/src/app/ui/stepper/stepper.component.scss new file mode 100644 index 0000000..e69de29 diff --git a/src/app/ui/stepper/stepper.component.spec.ts b/src/app/ui/stepper/stepper.component.spec.ts new file mode 100644 index 0000000..4bf2213 --- /dev/null +++ b/src/app/ui/stepper/stepper.component.spec.ts @@ -0,0 +1,25 @@ +import { async, ComponentFixture, TestBed } from '@angular/core/testing'; + +import { StepperComponent } from './stepper.component'; + +describe('StepperComponent', () => { + let component: StepperComponent; + let fixture: ComponentFixture; + + beforeEach(async(() => { + TestBed.configureTestingModule({ + declarations: [ StepperComponent ] + }) + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(StepperComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/ui/stepper/stepper.component.ts b/src/app/ui/stepper/stepper.component.ts new file mode 100644 index 0000000..943805a --- /dev/null +++ b/src/app/ui/stepper/stepper.component.ts @@ -0,0 +1,23 @@ +import { Component, OnInit } from '@angular/core'; +import {FormBuilder, FormGroup, Validators} from '@angular/forms'; +@Component({ + selector: 'app-stepper', + templateUrl: './stepper.component.html', + styleUrls: ['./stepper.component.scss'] +}) +export class StepperComponent implements OnInit { + isLinear = false; + firstFormGroup: FormGroup; + secondFormGroup: FormGroup; + constructor(private _formBuilder: FormBuilder) { } + + ngOnInit() { + this.firstFormGroup = this._formBuilder.group({ + firstCtrl: ['', Validators.required] + }); + this.secondFormGroup = this._formBuilder.group({ + secondCtrl: ['', Validators.required] + }); + } + +} diff --git a/src/app/ui/tabgroup/tabgroup.component.html b/src/app/ui/tabgroup/tabgroup.component.html new file mode 100644 index 0000000..8df2739 --- /dev/null +++ b/src/app/ui/tabgroup/tabgroup.component.html @@ -0,0 +1,22 @@ + + 我是内容一 + 我是内容二 + 我是内容三 + + + + + + + + 一 三 + +

    四五六

    +
    + + + thumb_down 失败者 + +

    rush B!!!

    +
    +
    diff --git a/src/app/ui/tabgroup/tabgroup.component.scss b/src/app/ui/tabgroup/tabgroup.component.scss new file mode 100644 index 0000000..e69de29 diff --git a/src/app/ui/tabgroup/tabgroup.component.spec.ts b/src/app/ui/tabgroup/tabgroup.component.spec.ts new file mode 100644 index 0000000..7e9fe94 --- /dev/null +++ b/src/app/ui/tabgroup/tabgroup.component.spec.ts @@ -0,0 +1,25 @@ +import { async, ComponentFixture, TestBed } from '@angular/core/testing'; + +import { TabgroupComponent } from './tabgroup.component'; + +describe('TabgroupComponent', () => { + let component: TabgroupComponent; + let fixture: ComponentFixture; + + beforeEach(async(() => { + TestBed.configureTestingModule({ + declarations: [ TabgroupComponent ] + }) + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(TabgroupComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/ui/tabgroup/tabgroup.component.ts b/src/app/ui/tabgroup/tabgroup.component.ts new file mode 100644 index 0000000..12e1da3 --- /dev/null +++ b/src/app/ui/tabgroup/tabgroup.component.ts @@ -0,0 +1,17 @@ +import { Component, OnInit } from '@angular/core'; + +@Component({ + selector: 'app-tabgroup', + templateUrl: './tabgroup.component.html', + styleUrls: ['./tabgroup.component.scss'] +}) +export class TabgroupComponent implements OnInit { + + constructor() { } + + ngOnInit() { + } + xxx(){ + console.log("xxxx") + } +} diff --git a/src/app/ui/ui-routing.module.ts b/src/app/ui/ui-routing.module.ts new file mode 100644 index 0000000..c34e872 --- /dev/null +++ b/src/app/ui/ui-routing.module.ts @@ -0,0 +1,63 @@ +import { Routes, RouterModule } from '@angular/router'; +import { NgModule } from '@angular/core'; +import { UiComponent } from './ui.component'; +import { DateselectComponent } from './dateselect/dateselect.component'; +import { MenuComponent } from './menu/menu.component'; +import { CardComponent } from './card/card.component'; +import { ListComponent } from './list/list.component'; +import { GridComponent } from './grid/grid.component'; +import { StepperComponent } from './stepper/stepper.component'; +import { TabgroupComponent } from './tabgroup/tabgroup.component'; +import { ButtonComponent } from './button/button.component'; +import { BadgeComponent } from './badge/badge.component'; +import { ProgressComponent } from './progress/progress.component'; +import { PaginatorComponent } from './paginator/paginator.component'; +import { PersonaldataComponent } from '../pages/personaldata/personaldata.component'; +import { UserdataComponent } from './userdata/userdata.component'; +import { OrganizationComponent } from './organization/organization.component'; +import { UnittypeComponent } from './unittype/unittype.component'; +import { AuthorityComponent } from './authority/authority.component'; +import { RoleComponent } from './role/role.component'; +import { UsermanagementComponent } from './usermanagement/usermanagement.component'; +import { NavmenusComponent } from './navmenus/navmenus.component'; +import { FireProtectionElementsComponent } from './fire-protection-elements/fire-protection-elements.component'; +import {MaterialBankComponent} from './material-bank/material-bank.component' +import {UnitInformationComponent} from './unit-information/unit-information.component' +import { EnterpriseuserComponent } from './enterpriseuser/enterpriseuser.component'; +import { FireFightingFacilitiesFormworkComponent } from './fire-fighting-facilities-formwork/fire-fighting-facilities-formwork.component' + + + +const routes: Routes = [ + { path: '', component: UiComponent}, + { path: 'dateselect', component:DateselectComponent}, + { path: 'menu', component:MenuComponent}, + { path: 'card', component:CardComponent}, + { path: 'list', component:ListComponent}, + { path: 'grid', component:GridComponent}, + { path: 'stepper', component:StepperComponent}, + { path: 'tabgroup', component:TabgroupComponent}, + { path: 'btn', component:ButtonComponent }, + { path: 'badge', component:BadgeComponent }, + { path: 'progress', component:ProgressComponent }, + { path: 'paginator', component:PaginatorComponent }, + { path: 'person', component:PersonaldataComponent }, + { path: 'userdata', component:UserdataComponent }, + { path: 'organization', component:OrganizationComponent }, + { path: 'unittype', component:UnittypeComponent }, + { path: 'authority', component:AuthorityComponent }, + { path: 'role', component:RoleComponent }, + { path: 'usermanagement', component:UsermanagementComponent }, + { path: 'navmenus', component:NavmenusComponent }, + { path: 'fireProtectionElements', component:FireProtectionElementsComponent }, + { path: 'materialBank', component:MaterialBankComponent }, + { path: 'unitInformation', component:UnitInformationComponent }, + { path: 'enterpriseuser', component:EnterpriseuserComponent }, + { path: 'fireFightingFacilitiesFormwork', component:FireFightingFacilitiesFormworkComponent } +]; + +@NgModule({ + imports: [RouterModule.forChild(routes)], + exports: [RouterModule] +}) +export class UiRoutingModule {} diff --git a/src/app/ui/ui.component.html b/src/app/ui/ui.component.html new file mode 100644 index 0000000..81f1dc8 --- /dev/null +++ b/src/app/ui/ui.component.html @@ -0,0 +1 @@ +

    ui works!

    diff --git a/src/app/ui/ui.component.scss b/src/app/ui/ui.component.scss new file mode 100644 index 0000000..e69de29 diff --git a/src/app/ui/ui.component.spec.ts b/src/app/ui/ui.component.spec.ts new file mode 100644 index 0000000..6364771 --- /dev/null +++ b/src/app/ui/ui.component.spec.ts @@ -0,0 +1,25 @@ +import { async, ComponentFixture, TestBed } from '@angular/core/testing'; + +import { UiComponent } from './ui.component'; + +describe('UiComponent', () => { + let component: UiComponent; + let fixture: ComponentFixture; + + beforeEach(async(() => { + TestBed.configureTestingModule({ + declarations: [ UiComponent ] + }) + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(UiComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/ui/ui.component.ts b/src/app/ui/ui.component.ts new file mode 100644 index 0000000..aa89818 --- /dev/null +++ b/src/app/ui/ui.component.ts @@ -0,0 +1,15 @@ +import { Component, OnInit } from '@angular/core'; + +@Component({ + selector: 'app-ui', + templateUrl: './ui.component.html', + styleUrls: ['./ui.component.scss'] +}) +export class UiComponent implements OnInit { + + constructor() { } + + ngOnInit() { + } + +} diff --git a/src/app/ui/ui.module.ts b/src/app/ui/ui.module.ts new file mode 100644 index 0000000..1907bcc --- /dev/null +++ b/src/app/ui/ui.module.ts @@ -0,0 +1,154 @@ +import { NgModule } from '@angular/core'; +import { CommonModule } from '@angular/common'; +import { UiComponent } from './ui.component'; +import { DateselectComponent } from './dateselect/dateselect.component'; +import { UiRoutingModule } from './ui-routing.module'; +import {A11yModule} from '@angular/cdk/a11y'; +import {DragDropModule} from '@angular/cdk/drag-drop'; +import {PortalModule} from '@angular/cdk/portal'; +import {ScrollingModule} from '@angular/cdk/scrolling'; +import {CdkStepperModule} from '@angular/cdk/stepper'; +import {CdkTableModule} from '@angular/cdk/table'; +import {CdkTreeModule} from '@angular/cdk/tree'; +import {MatAutocompleteModule} from '@angular/material/autocomplete'; +import {MatBadgeModule} from '@angular/material/badge'; +import {MatBottomSheetModule} from '@angular/material/bottom-sheet'; +import {MatButtonModule} from '@angular/material/button'; +import {MatButtonToggleModule} from '@angular/material/button-toggle'; +import {MatCardModule} from '@angular/material/card'; +import {MatCheckboxModule} from '@angular/material/checkbox'; +import {MatChipsModule} from '@angular/material/chips'; +import {MatStepperModule} from '@angular/material/stepper'; +import {MatDatepickerModule} from '@angular/material/datepicker'; +import {MatDialogModule} from '@angular/material/dialog'; +import {MatDividerModule} from '@angular/material/divider'; +import {MatExpansionModule} from '@angular/material/expansion'; +import {MatGridListModule} from '@angular/material/grid-list'; +import {MatIconModule} from '@angular/material/icon'; +import {MatInputModule} from '@angular/material/input'; +import {MatListModule} from '@angular/material/list'; +import {MatMenuModule} from '@angular/material/menu'; +import {MatNativeDateModule, MatRippleModule, MatOption} from '@angular/material/core'; +import {MatPaginatorModule} from '@angular/material/paginator'; +import {MatProgressBarModule} from '@angular/material/progress-bar'; +import {MatProgressSpinnerModule} from '@angular/material/progress-spinner'; +import {MatRadioModule} from '@angular/material/radio'; +import {MatSelectModule} from '@angular/material/select'; +import {MatSidenavModule} from '@angular/material/sidenav'; +import {MatSliderModule} from '@angular/material/slider'; +import {MatSlideToggleModule} from '@angular/material/slide-toggle'; +import {MatSnackBarModule} from '@angular/material/snack-bar'; +import {MatSortModule} from '@angular/material/sort'; +import {MatTableModule} from '@angular/material/table'; +import {MatTabsModule} from '@angular/material/tabs'; +import {MatToolbarModule} from '@angular/material/toolbar'; +import {MatTooltipModule} from '@angular/material/tooltip'; +import {MatTreeModule} from '@angular/material/tree'; +import { MenuComponent } from './menu/menu.component'; +import { CardComponent } from './card/card.component'; +import { ListComponent } from './list/list.component'; +import { GridComponent } from './grid/grid.component'; +import { StepperComponent } from './stepper/stepper.component'; +import { ReactiveFormsModule, FormsModule } from '@angular/forms'; +import { TabgroupComponent } from './tabgroup/tabgroup.component'; +import { ButtonComponent } from './button/button.component'; +import { BadgeComponent } from './badge/badge.component'; +import { ProgressComponent } from './progress/progress.component'; +import { SnackbarComponent } from './snackbar/snackbar.component'; +import { MatFormFieldModule } from '@angular/material/form-field'; +import { MatPaginatorIntl } from '@angular/material/paginator'; +import { PaginatorModule } from './paginator/paginator.module'; +import { PersonaldataComponent } from '../pages/personaldata/personaldata.component'; +import { FooterComponent } from './footer/footer.component'; +import { UserdataComponent, EditUser } from './userdata/userdata.component'; +import { ChangepasswordComponent } from './changepassword/changepassword.component'; +import { OrganizationComponent, CreateOrganization, EditOrganization } from './organization/organization.component'; +import { UnittypeComponent,DialogOverviewExampleDialog,editorialUnit } from './unittype/unittype.component'; +import { AuthorityComponent, CreateAuthority } from './authority/authority.component'; +import { RoleComponent, CreateRole, EditRole } from './role/role.component'; +import { UsermanagementComponent,CreateNewUser,EditNewUser,allRoles,seeInformation } from './usermanagement/usermanagement.component'; + +import { IsnoPipe } from '../pipes/boolean.pipe'; +import {ConfirmpswDirective} from './changepassword/equal-validator.directive' +import { TimePipe } from '../pipes/time.pipe'; +import { NavmenusComponent, CreateMenus, EditMenus } from './navmenus/navmenus.component'; +import { FireProtectionElementsComponent, Establish, EditingFireControl } from './fire-protection-elements/fire-protection-elements.component'; +import { FireFightingTemplateComponent, NewFireFighting, EditFireClassification } from './fire-fighting-template/fire-fighting-template.component'; +import { MaterialBankComponent,attributeComponent,addAttributeComponent,editAttribute } from './material-bank/material-bank.component'; +import { UnitInformationComponent,addUnitAttributeComponent,editUnitAttribute } from './unit-information/unit-information.component'; +import { AddMatLibrary } from './material-bank/addmatlibrary.component'; +import { EditMatLibrary } from './material-bank/editmatlibrary.component'; +import { AddOriginalCopy } from './material-bank/addoriginalcopy.component'; + +import { FileUploadModule } from 'ng2-file-upload' +import { EditOriginalCopy } from './material-bank/editoriginalcopy.component'; +import { SelectOriginalCopy } from './material-bank/selectoriginalcopy.component'; +import { EditUnitInfo } from './unit-information/editunitinfo.component'; +import { AddUnitInfo } from './unit-information/addunitinfo.component'; +import { AddGroups } from './unit-information/addgroups.component'; +import { EditGroup } from './unit-information/editgroup.component'; +import { EnterpriseuserComponent,seeenterpriseuser,editenterpriseuser } from './enterpriseuser/enterpriseuser.component'; +import { AddEnterpriserUser } from './enterpriseuser/addenterpriseuser.component'; +import { FireFightingFacilitiesFormworkComponent,addFireFightingFacilitiesFormworkComponent,editFireFightingFacilitiesFormworkComponent,addBuiltInComponent,addBuiltInAttributeComponent,addOptionalComponent,addOptionalAttributeComponent,editBuiltInAttributeComponent,editOptionalAttributeComponent } from './fire-fighting-facilities-formwork/fire-fighting-facilities-formwork.component'; + +@NgModule({ + declarations: [UiComponent, DateselectComponent, MenuComponent, CardComponent, ListComponent, GridComponent, StepperComponent, TabgroupComponent, ButtonComponent, BadgeComponent, ProgressComponent, SnackbarComponent,PersonaldataComponent, FooterComponent, UserdataComponent, ChangepasswordComponent, OrganizationComponent, UnittypeComponent, AuthorityComponent, RoleComponent, UsermanagementComponent,IsnoPipe,ConfirmpswDirective,DialogOverviewExampleDialog,CreateAuthority,CreateRole,TimePipe,CreateNewUser,EditNewUser,allRoles,EditRole,CreateOrganization,EditOrganization,seeInformation,EditUser,editorialUnit,FireProtectionElementsComponent,Establish,EditingFireControl,FireFightingTemplateComponent, NavmenusComponent,CreateMenus,EditMenus,NewFireFighting,EditFireClassification, MaterialBankComponent, UnitInformationComponent,AddMatLibrary,EditMatLibrary,attributeComponent,AddOriginalCopy,addAttributeComponent,editAttribute,EditOriginalCopy,SelectOriginalCopy,EditUnitInfo,AddUnitInfo,AddGroups,EditGroup, EnterpriseuserComponent,AddEnterpriserUser,addUnitAttributeComponent,editUnitAttribute,seeenterpriseuser,editenterpriseuser, FireFightingFacilitiesFormworkComponent,addFireFightingFacilitiesFormworkComponent,editFireFightingFacilitiesFormworkComponent,addBuiltInComponent,addBuiltInAttributeComponent,addOptionalComponent,addOptionalAttributeComponent,editBuiltInAttributeComponent,editOptionalAttributeComponent], + + imports: [ + CommonModule, + UiRoutingModule, + A11yModule, + CdkStepperModule, + CdkTableModule, + CdkTreeModule, + DragDropModule, + MatAutocompleteModule, + MatBadgeModule, + MatBottomSheetModule, + MatButtonModule, + MatButtonToggleModule, + MatCardModule, + MatCheckboxModule, + MatChipsModule, + MatStepperModule, + MatDatepickerModule, + MatDialogModule, + MatDividerModule, + MatExpansionModule, + MatGridListModule, + MatIconModule, + MatInputModule, + MatListModule, + MatMenuModule, + MatNativeDateModule, + MatPaginatorModule, + MatProgressBarModule, + MatProgressSpinnerModule, + MatRadioModule, + MatRippleModule, + MatSelectModule, + MatSidenavModule, + MatSliderModule, + MatSlideToggleModule, + MatSnackBarModule, + MatSortModule, + MatTableModule, + MatTabsModule, + MatToolbarModule, + MatTooltipModule, + MatTreeModule, + PortalModule, + ScrollingModule, + + ReactiveFormsModule, + FormsModule, + PaginatorModule, + FileUploadModule + ], + + + exports:[ + FooterComponent + ] +}) +export class UiModule { } diff --git a/src/app/ui/unit-information/addUnitAttribute.html b/src/app/ui/unit-information/addUnitAttribute.html new file mode 100644 index 0000000..a98f573 --- /dev/null +++ b/src/app/ui/unit-information/addUnitAttribute.html @@ -0,0 +1,71 @@ +
    新增属性
    +
    +
    + +
    + + + +
    + +
    + + + + {{item.viewValue}} + + + + + + +
    + +
    + + + + + +
    + +
    + + + 不验证 + + + 区间 + 正则匹配 + + + + + +
    + +
    + + + +
    + +
    + + + +
    + +
    + + +
    +
    +
    \ No newline at end of file diff --git a/src/app/ui/unit-information/addgroups.component.html b/src/app/ui/unit-information/addgroups.component.html new file mode 100644 index 0000000..c8417d5 --- /dev/null +++ b/src/app/ui/unit-information/addgroups.component.html @@ -0,0 +1,28 @@ +
    + 新增分组 + + + +

    *可通过/进行层级分级以及归属,例如:a/b/c

    + + + 表单 + 表格 + + + + + 不新增 + 新增行 + 新增组 + + + +
    + + +
    + +
    \ No newline at end of file diff --git a/src/app/ui/unit-information/addgroups.component.ts b/src/app/ui/unit-information/addgroups.component.ts new file mode 100644 index 0000000..b71963a --- /dev/null +++ b/src/app/ui/unit-information/addgroups.component.ts @@ -0,0 +1,114 @@ +import { Component, OnInit, Inject } from '@angular/core'; +import {MatTreeFlatDataSource, MatTreeFlattener} from '@angular/material/tree'; +import {FlatTreeControl} from '@angular/cdk/tree'; +import { HttpClient } from '@angular/common/http'; +import {MatDialog, MatDialogRef, MAT_DIALOG_DATA} from '@angular/material/dialog'; +import {FormControl} from '@angular/forms'; +import { MatSnackBar } from '@angular/material/snack-bar'; +import format from 'date-fns/format'; + + + +@Component({ + selector: 'addgroups', + templateUrl: './addgroups.component.html', + styleUrls: ['./unit-information.component.scss'] + }) + export class AddGroups { + myControl = new FormControl(); + templatestatus = "0"//创建模板时的默认状态 + constructor(private http: HttpClient,public dialogRef: MatDialogRef,@Inject(MAT_DIALOG_DATA) public data) {} + + ngOnInit(): void {} + + onNoClick(): void { + this.dialogRef.close(); + } + + grouporder = null; //没有'/'情况的order值 + + //提交表单新增分组 + onSubmit(value){ + if(this.data.allGrouping.length == 0){ //分组为空时 + this.http.post("/api/BasicGroups",{ + id: "", + name: value.groupname, + type: Number(value.propertyType), + addMode:Number(value.databehavior), + isOptional:true, + order: 0, + enabled: true, + propertyInfos: [], + basicCategoryId: this.data.unitInformation.id + }).subscribe(data=>{ + this.dialogRef.close('yes'); + }) + } + if (value.groupname.indexOf('/') == -1 && this.data.allGrouping.length != 0) { //分组name中没有'/'情况时 + this.grouporder = this.data.allGrouping[this.data.allGrouping.length - 1].order + 1 + this.http.post("/api/BasicGroups",{ + id: "", + name: value.groupname, + type: Number(value.propertyType), + addMode:Number(value.databehavior), + isOptional:true, + order: this.grouporder, + enabled: true, + propertyInfos: [], + basicCategoryId: this.data.unitInformation.id + }).subscribe(data=>{ + this.dialogRef.close('yes'); + }) + } + else if (value.groupname.indexOf('/') != -1 && this.data.allGrouping.length != 0) { //分组name中有'/'情况时 + let str = value.groupname.substring(0,value.groupname.lastIndexOf('/')) //截取'/'之前字符串 + for (let i=this.data.allGrouping.length;i--;i>=0) { + if (str.indexOf(this.data.allGrouping[i].name)!=-1) {//分组name中含有新建分组'/'之前文字时 + this.grouporder = this.data.allGrouping[this.data.allGrouping.length - 1].order + 1 + this.http.post("/api/BasicGroups",{ + id: "", + name: value.groupname, + type: Number(value.propertyType), + addMode:Number(value.databehavior), + isOptional:true, + order: this.grouporder, + enabled: true, + propertyInfos: [], + basicCategoryId: this.data.unitInformation.id + }).subscribe(data=>{ + let id = {categoryId:this.data.unitInformation.id} + this.http.get('/api/BasicGroups',{params:id}).subscribe((data:any)=>{ + let newitem = data.pop() + data.splice(i+1,0,newitem) + this.dialogRef.close(data); + }) + });break} + else if (str.indexOf(this.data.allGrouping[i].name)==-1 && i<1) {//分组name中没有新建分组'/'之前文字时 + this.grouporder = this.data.allGrouping[this.data.allGrouping.length - 1].order + 1 + this.http.post("/api/BasicGroups",{ + id: "", + name: value.groupname, + type: Number(value.propertyType), + addMode:Number(value.databehavior), + isOptional:true, + order: this.grouporder, + enabled: true, + propertyInfos: [], + basicCategoryId: this.data.unitInformation.id + }).subscribe(data=>{ + this.dialogRef.close('yes'); + });break} + + } //for循环 + + } //else if + + + + } //onSubmit + + + + + +} diff --git a/src/app/ui/unit-information/addunitinfo.component.html b/src/app/ui/unit-information/addunitinfo.component.html new file mode 100644 index 0000000..4ef9240 --- /dev/null +++ b/src/app/ui/unit-information/addunitinfo.component.html @@ -0,0 +1,22 @@ +
    + 新增单位信息 + + + + + + + 禁用 + 启用 + + + + +
    + + +
    + +
    \ No newline at end of file diff --git a/src/app/ui/unit-information/addunitinfo.component.ts b/src/app/ui/unit-information/addunitinfo.component.ts new file mode 100644 index 0000000..60a0e2f --- /dev/null +++ b/src/app/ui/unit-information/addunitinfo.component.ts @@ -0,0 +1,30 @@ +import { Component, OnInit, Inject } from '@angular/core'; +import {MatTreeFlatDataSource, MatTreeFlattener} from '@angular/material/tree'; +import {FlatTreeControl} from '@angular/cdk/tree'; +import { HttpClient } from '@angular/common/http'; +import {MatDialog, MatDialogRef, MAT_DIALOG_DATA} from '@angular/material/dialog'; +import {FormControl} from '@angular/forms'; +import { MatSnackBar } from '@angular/material/snack-bar'; +import format from 'date-fns/format'; +@Component({ + selector: 'addunitinfo', + templateUrl: './addunitinfo.component.html', + styleUrls: ['./unit-information.component.scss'] + }) + export class AddUnitInfo { + myControl = new FormControl(); + templatestatus = "0"//创建模板时的默认状态 + constructor(private http: HttpClient,public dialogRef: MatDialogRef,@Inject(MAT_DIALOG_DATA) public data) {} + onNoClick(): void { + this.dialogRef.close(); + } + onSubmit(value){ + this.http.post("/api/BasicCategories",{ + id: "", + name: value.templatename, + enabled: Boolean(Number(value.enable)) , + }).subscribe(data=>{ + this.dialogRef.close('ooo'); + }) + } + } \ No newline at end of file diff --git a/src/app/ui/unit-information/editUnitAttribute.html b/src/app/ui/unit-information/editUnitAttribute.html new file mode 100644 index 0000000..66aa164 --- /dev/null +++ b/src/app/ui/unit-information/editUnitAttribute.html @@ -0,0 +1,76 @@ +
    编辑属性
    +
    +
    + +
    + + + +
    + +
    + + + + {{item.viewValue}} + + + + + + +
    + +
    + + + + + +
    + +
    + + + 不验证 + + + 区间 + 正则匹配 + + + + + +
    + +
    + + + + + + +
    + +
    + + + +
    + +
    + + +
    +
    +
    \ No newline at end of file diff --git a/src/app/ui/unit-information/editgroup.component.html b/src/app/ui/unit-information/editgroup.component.html new file mode 100644 index 0000000..7975ba9 --- /dev/null +++ b/src/app/ui/unit-information/editgroup.component.html @@ -0,0 +1,27 @@ +
    + 修改分组 + + + + + + 表单 + 表格 + + + + + 不新增 + 新增行 + 新增组 + + + +
    + + +
    + +
    \ No newline at end of file diff --git a/src/app/ui/unit-information/editgroup.component.ts b/src/app/ui/unit-information/editgroup.component.ts new file mode 100644 index 0000000..4bc9385 --- /dev/null +++ b/src/app/ui/unit-information/editgroup.component.ts @@ -0,0 +1,51 @@ +import { Component, OnInit, Inject } from '@angular/core'; +import {MatTreeFlatDataSource, MatTreeFlattener} from '@angular/material/tree'; +import {FlatTreeControl} from '@angular/cdk/tree'; +import { HttpClient } from '@angular/common/http'; +import {MatDialog, MatDialogRef, MAT_DIALOG_DATA} from '@angular/material/dialog'; +import {FormControl} from '@angular/forms'; +import { MatSnackBar } from '@angular/material/snack-bar'; +import format from 'date-fns/format'; + + + +@Component({ + selector: 'editgroup', + templateUrl: './editgroup.component.html', + styleUrls: ['./unit-information.component.scss'] + }) + export class EditGroup { + myControl = new FormControl(); + + groupname = this.data.item.name //分组名 + grouptype = String(this.data.item.type) //分组类型 + groupaddMode = String(this.data.item.addMode) //数据行为 + + templatestatus = "0"//创建模板时的默认状态 + constructor(private http: HttpClient,public dialogRef: MatDialogRef,@Inject(MAT_DIALOG_DATA) public data) {} + + ngOnInit(): void { + + } + + onNoClick(): void { + this.dialogRef.close(); + } + + onSubmit(value){ + this.http.put(`/api/BasicGroups/${this.data.item.id}`,{ + id: this.data.item.id, + name: value.groupname, + type: Number(value.propertyType), + addMode:Number(value.databehavior), + isOptional: this.data.item.isOptional, + order: this.data.item.order, + enabled: this.data.item.enabled, + propertyInfos:this.data.item.propertyInfos, + basicCategoryId: this.data.item.basicCategoryId + }).subscribe(data=>{ + this.dialogRef.close('ooo'); + }) + } + + } \ No newline at end of file diff --git a/src/app/ui/unit-information/editunitinfo.component.html b/src/app/ui/unit-information/editunitinfo.component.html new file mode 100644 index 0000000..8fbc3a5 --- /dev/null +++ b/src/app/ui/unit-information/editunitinfo.component.html @@ -0,0 +1,22 @@ +
    + 修改单位信息 + + + + + + + 禁用 + 启用 + + + + +
    + + +
    + +
    \ No newline at end of file diff --git a/src/app/ui/unit-information/editunitinfo.component.ts b/src/app/ui/unit-information/editunitinfo.component.ts new file mode 100644 index 0000000..749645d --- /dev/null +++ b/src/app/ui/unit-information/editunitinfo.component.ts @@ -0,0 +1,31 @@ +import { Component, OnInit, Inject } from '@angular/core'; +import {MatTreeFlatDataSource, MatTreeFlattener} from '@angular/material/tree'; +import {FlatTreeControl} from '@angular/cdk/tree'; +import { HttpClient } from '@angular/common/http'; +import {MatDialog, MatDialogRef, MAT_DIALOG_DATA} from '@angular/material/dialog'; +import {FormControl} from '@angular/forms'; +import { MatSnackBar } from '@angular/material/snack-bar'; +import format from 'date-fns/format'; +@Component({ + selector: 'editunitinfo', + templateUrl: './editunitinfo.component.html', + styleUrls: ['./unit-information.component.scss'] + }) + export class EditUnitInfo { + templatenamedefault = this.data.unitInformation.name + myControl = new FormControl(); + constructor(private http: HttpClient,public dialogRef: MatDialogRef,@Inject(MAT_DIALOG_DATA) public data) {} + onNoClick(): void { + this.dialogRef.close(); + } + + onSubmit(value){ + this.http.put(`/api/BasicCategories/${this.data.unitInformation.id}`,{ + id: this.data.unitInformation.id, + name: value.templatename, + enabled: Boolean(Number(value.enable)), + }).subscribe(data=>{ + this.dialogRef.close('ooo'); + }) + } + } \ No newline at end of file diff --git a/src/app/ui/unit-information/unit-information.component.html b/src/app/ui/unit-information/unit-information.component.html new file mode 100644 index 0000000..3df4935 --- /dev/null +++ b/src/app/ui/unit-information/unit-information.component.html @@ -0,0 +1,164 @@ +
    +
    +
    + keyboard_arrow_down + chevron_right + 单位信息 +
    + + + + +
    +
    +
    +
    + {{item.name}} + block +
    +
    + +
    + +
    +
    +
    +

    {{unitInformation.name}}

    +
    + + + + +
    +
    + +
    +
    +
    + + {{item.name}} + + arrow_upward + + arrow_downward + + description + border_color + star + star_border + + block + + + block + + delete +
    +
    + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + add_box + + + 名称 + {{element.propertyName}} + 类型 + + + + 默认值 + {{element.propertyValue}} + 必填 + + + 单位 + {{element.physicalUnit}} + 操作 + + border_color + + + + block + + + block + + + delete + +
    +
    +
    + + + +
    +
    +
    \ No newline at end of file diff --git a/src/app/ui/unit-information/unit-information.component.scss b/src/app/ui/unit-information/unit-information.component.scss new file mode 100644 index 0000000..fd0abd5 --- /dev/null +++ b/src/app/ui/unit-information/unit-information.component.scss @@ -0,0 +1,120 @@ +.content { + margin: 0 0 0 10px; + width: 100%; + height: 90%; + overflow-x: hidden; + overflow-y: auto; + display: flex; + .leftBox { + flex: 20%; + padding-top: 10px; + } + .rightBox { + border-left: 1px solid #999; + flex: 80%; + display: flex; + flex-direction: column; + .topBox { + flex:1; + .originalScript { + width: 100%; + background-color: #fafafa; + padding:10px 0; + padding-left: 20px; + font-weight: 500; + display: flex; + flex-direction: row; + p{ + margin-top: 11px; + } + .mat-icon { + vertical-align:middle; + } + } + } + } +} + + + +.bank { + display: flex; + font-size: 18px; + font-weight: 500; +} +.mat-icon { + width: 18px; + height: 18px; + vertical-align:top; + margin-right: 8px; + cursor:pointer; +} +.overFlowText { + width: 135px; + display: inline-block; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; +} +.material { + cursor:pointer; + height: 30px; + font-size: 16px; + margin-top: 10px; + padding-left: 25px; + .blockBtn { + float: right; + margin-right: 12px; + width: 16px; + height: 16px; + } +} + +.tableBox { + margin-top: 10px; +} +.attribute { + padding-left: 25px; + display: flex; + flex-direction: row; + background-color: #d7d7d7; + .attributeLeft{ + flex: 1; + padding: 10px 0 10px 0; + .mat-icon { + margin-left: 5px; + } + } +} +table { + width: 100%; + text-align: center; + .cdk-header-cell { + text-align: center; + } +} + + + +.active { + background-color: rgba(225,225,225,0.8) +} +.btn{ + text-align: center; + button{ + margin: 0 8px; + } +} +.editunitformfield{ + width:230px +} + +//层级显示表格 +.twoLevel { + padding-left: 25px; + margin-top: 0px; +} +.threeLevel { + padding-left: 50px; + margin-top: 0px; +} \ No newline at end of file diff --git a/src/app/ui/unit-information/unit-information.component.ts b/src/app/ui/unit-information/unit-information.component.ts new file mode 100644 index 0000000..de53143 --- /dev/null +++ b/src/app/ui/unit-information/unit-information.component.ts @@ -0,0 +1,635 @@ +import { Component, OnInit, Inject } from '@angular/core'; +import { AddUnitInfo } from './addunitinfo.component' +import { EditUnitInfo } from './editunitinfo.component' +import { AddGroups } from './addgroups.component' +import { EditGroup } from './editgroup.component' +import { HttpClient } from '@angular/common/http'; +import { MatDialog, MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog'; +import { MatSnackBar, MatSnackBarConfig } from '@angular/material/snack-bar'; + + + +@Component({ + selector: 'app-unit-information', + templateUrl: './unit-information.component.html', + styleUrls: ['./unit-information.component.scss'] +}) +export class UnitInformationComponent implements OnInit { + + constructor(private http:HttpClient,public dialog: MatDialog,public snackBar: MatSnackBar) { } + + ngOnInit(): void { + this.http.get('/api/BasicCategories').subscribe(data=>{ + this.allUnitInformation = data + this.unitInformation = data[0] + this.getAllGrouping()}) + } + + allUnitInformation:any; //所有单位 + unitInformation:any={name:''}; //选中的单位 + unitInformationIndex:any=0; //选中的单位index + + allGrouping:any; //单位信息模板对应所有分组 + groupingSelect:any=[]; //选中的分组 + groupingIndex:any=[]; //选中的分组index + attributeSelect:any=[]; //选中的分组属性 + attributeIndex:any=[]; //选中的分组属性所属分组index + + displayedColumns = ['checked', 'name', 'type', 'default','required','physicalUnit','operation']; + + isshow = true//左侧列表的显示隐藏 + //收起左侧列表 + showlist(){ + this.isshow = !this.isshow + } + //获取所有的单位信息模板 + getAllUnitInformation () { + this.http.get('/api/BasicCategories').subscribe(data=>{ + this.allUnitInformation = data + this.unitInformation = data[this.unitInformationIndex] + }) + } + + //单位信息模板对应所有分组 + getAllGrouping () { + if (this.unitInformation) { + let id = {categoryId:this.unitInformation.id} + this.http.get('/api/BasicGroups',{params:id}).subscribe((data:any)=>{ + if (data.length) { + data.forEach((item,index) => { + if (item.name.indexOf('/')!=-1) { + let str=item.name.substring(0,item.name.lastIndexOf('/')) + if (str.indexOf('/')==-1 && index!=0 && data[index-1].name.indexOf(str) != -1 ) { + item.css = true + } else if (str.indexOf('/')!=-1 && index!=0 && data[index-1].name.indexOf(str) != -1 ){ + item.newcss = true + } + } + }); + } + this.allGrouping = data + this.groupingSelect = [] + this.groupingIndex = [] + this.attributeSelect = [] + this.attributeIndex= [] + this.setIndex() + }) + } + + } + + //选中单位 + add (e,index) { + if (this.unitInformationIndex != index) { + this.unitInformation = e + this.unitInformationIndex = index + this.getAllGrouping() + } + } + + //选中当前分组checked + groupingChange (e,index,event) { + if (event.checked === true) { + this.groupingSelect.push(e) + this.groupingIndex.push(index) + } else { + this.groupingSelect.splice(this.groupingSelect.findIndex(item => item.id == e.id), 1) + this.groupingIndex.splice(this.groupingIndex.findIndex(items => items == index), 1) + } + } + + //分组上移 + groupingTop () { + if (this.groupingSelect.length && this.groupingIndex.length) { + let select = this.groupingSelect[this.groupingSelect.length-1] + let index = this.groupingIndex[this.groupingIndex.length-1] + if (index!=0) { + let topOrder = this.allGrouping[index].order + let bottomOrder = this.allGrouping[index-1].order + this.allGrouping[index-1].order = topOrder + this.allGrouping.forEach(item => { + item.propertyInfos.forEach((element) => { + delete element.index + }); + }); + this.http.put(`/api/BasicGroups/${this.allGrouping[index-1].id}`,{ + id:this.allGrouping[index-1].id, + name:this.allGrouping[index-1].name, + type:this.allGrouping[index-1].type, + addMode:this.allGrouping[index-1].addMode, + isOptional:this.allGrouping[index-1].isOptional, + order:this.allGrouping[index-1].order, + enabled:this.allGrouping[index-1].enabled, + propertyInfos:this.allGrouping[index-1].propertyInfos, + basicCategoryId:this.allGrouping[index-1].basicCategoryId + }).subscribe(data=>{ + this.allGrouping[index].order = bottomOrder + this.submit(select,index) + }) + } + } + } + + //分组下移 + groupingBottom () { + if (this.groupingSelect.length && this.groupingIndex.length) { + let select = this.groupingSelect[this.groupingSelect.length-1] + let index = this.groupingIndex[this.groupingIndex.length-1] + if (index!=this.allGrouping.length-1) { + let topOrder = this.allGrouping[index].order + let bottomOrder = this.allGrouping[index+1].order + this.allGrouping[index+1].order = topOrder + this.allGrouping.forEach(item => { + item.propertyInfos.forEach((element) => { + delete element.index + }); + }); + this.http.put(`/api/BasicGroups/${this.allGrouping[index+1].id}`,{ + id:this.allGrouping[index+1].id, + name:this.allGrouping[index+1].name, + type:this.allGrouping[index+1].type, + addMode:this.allGrouping[index+1].addMode, + isOptional:this.allGrouping[index+1].isOptional, + order:this.allGrouping[index+1].order, + enabled:this.allGrouping[index+1].enabled, + propertyInfos:this.allGrouping[index+1].propertyInfos, + basicCategoryId:this.allGrouping[index+1].basicCategoryId + }).subscribe(data=>{ + this.allGrouping[index].order = bottomOrder + this.submit(select,index) + }) + } + } + } + + //新增单位 + addunitinfo(){ + const dialogRef = this.dialog.open(AddUnitInfo, {//调用open方法打开对话框并且携带参数过去 + width: '260px', + data: {} + }); + dialogRef.afterClosed().subscribe( + data=>{ + if(data){ + this.getAllUnitInformation () + } + + } + ); + } + + //编辑单位 + editunitinfo(){ + if(this.unitInformation){ + const dialogRef = this.dialog.open(EditUnitInfo, {//调用open方法打开对话框并且携带参数过去 + width: '295px', + data: {unitInformation:this.unitInformation} + }); + dialogRef.afterClosed().subscribe( + data=>{ + if(data){ + this.getAllUnitInformation () + } + } + ); + }else{ + const config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.snackBar.open('请先选择单位','确定',config); + } + } + + //禁启用单位 + disableunit(){ + if(this.unitInformation){ + this.http.put(`/api/BasicCategories/${this.unitInformation.id}`,{ + id: this.unitInformation.id, + name: this.unitInformation.name, + enabled: !this.unitInformation.enabled, + }).subscribe(data=>{ + this.getAllUnitInformation () + }) + }else{ + const config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.snackBar.open('请先选择单位','确定',config); + } + } + + //删除单位 + deleteunit(){ + var isdeleted = confirm(`确定要删除${this.unitInformation.name}单位信息吗?`) + if(isdeleted){ + //请求删除接口 + this.http.delete(`/api/BasicCategories/${this.unitInformation.id}`).subscribe( data=>{ + this.http.get('/api/BasicCategories').subscribe(data=>{ + this.allUnitInformation = data + this.unitInformation = data[this.unitInformationIndex] + this.getAllGrouping()}) + }) + } + } + + //新增分组 + addgroups(){ + const dialogRef = this.dialog.open(AddGroups, {//调用open方法打开对话框并且携带参数过去 + width: '295px', + data: {unitInformation:this.unitInformation,allGrouping:this.allGrouping} + }); + dialogRef.afterClosed().subscribe( + msg=>{ + if(msg && msg!='yes'){ + msg.forEach((item,index) => { + this.http.put(`/api/BasicGroups/${item.id}`,{ + id: item.id, + name: item.name, + type:item.type, + addMode:item.addMode, + isOptional:item.isOptional, + order: index, + enabled: item.enabled, + propertyInfos:item.propertyInfos, + basicCategoryId: item.basicCategoryId + }).subscribe(data=>{ + if (index===msg.length-1) {this.getAllGrouping()} + }) + }); + // this.getAllGrouping() + } else if (msg == 'yes') {this.getAllGrouping()} + + } + + + + ); + } + + //编辑分组 + editgroup(item,index){ + const dialogRef = this.dialog.open(EditGroup, {//调用open方法打开对话框并且携带参数过去 + width: '295px', + data: {unitInformation:this.unitInformation,allGrouping:this.allGrouping,item:item} + }); + dialogRef.afterClosed().subscribe( + data=>{ + if(data){ + this.getAllGrouping () + } + } + ); + } + + //禁启用分组 + disablegroup(item){ + if(item.enabled){ + this.http.put(`/api/BasicGroups/${item.id}`,{ + id: item.id, + name: item.name, + type:item.type, + addMode:item.addMode, + isOptional:item.isOptional, + order: item.order, + enabled: false, + propertyInfos:item.propertyInfos, + basicCategoryId: item.basicCategoryId + }).subscribe(data=>{ + const config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.snackBar.open('禁用成功','确定',config); + this.getAllGrouping () + }) + }else{ + this.http.put(`/api/BasicGroups/${item.id}`,{ + id: item.id, + name: item.name, + type:item.type, + addMode:item.addMode, + isOptional:item.isOptional, + order: item.order, + enabled: true, + propertyInfos:item.propertyInfos, + basicCategoryId: item.basicCategoryId + }).subscribe(data=>{ + const config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.snackBar.open('启用成功','确定',config); + this.getAllGrouping () + }) + } + } + + //设置是否分组可选 + optional (item) { + if (item.isOptional) { + this.http.put(`/api/BasicGroups/${item.id}`,{ + id: item.id, + name: item.name, + type:item.type, + addMode:item.addMode, + isOptional:false, + order: item.order, + enabled: item.enabled, + propertyInfos:item.propertyInfos, + basicCategoryId: item.basicCategoryId + }).subscribe(data=>{ + const config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.snackBar.open('现状态为不可选','确定',config); + this.getAllGrouping () + }) + } else{ + this.http.put(`/api/BasicGroups/${item.id}`,{ + id: item.id, + name: item.name, + type:item.type, + addMode:item.addMode, + isOptional:true, + order: item.order, + enabled: item.enabled, + propertyInfos:item.propertyInfos, + basicCategoryId: item.basicCategoryId + }).subscribe(data=>{ + const config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.snackBar.open('现状态为可选','确定',config); + this.getAllGrouping () + }) + } + } + + //删除分组 + deletegroup(item){ + var isdeleted = confirm(`确定要删除${item.name}分组吗?`) + if(isdeleted){ + //请求删除接口 + this.http.delete(`/api/BasicGroups/${item.id}`).subscribe( data=>{ + this.getAllGrouping () + }) + } + } + + + + + + //分组属性操作↓ + //选中分组属性checked + attributeChange (item,index,event) { + if (event.checked === true) { + this.attributeSelect.push(item) + this.attributeIndex.push(index) + } else { + this.attributeSelect.splice(this.attributeSelect.findIndex(items => items == item), 1) + this.attributeIndex.splice(this.attributeIndex.findIndex(items => items == index), 1) + } + } + + //属性上移 + attributeTop (e,index) { + let select = this.attributeSelect[this.attributeSelect.length-1] + let newIndex = this.attributeIndex[this.attributeIndex.length-1] + if (this.attributeSelect.length && newIndex===index) { + let newOrder = this.attributeSelect[this.attributeSelect.length-1].order + if(select.index != 0) { + this.allGrouping[index].propertyInfos[select.index].order=this.allGrouping[index].propertyInfos[select.index-1].order + this.allGrouping[index].propertyInfos[select.index-1].order=newOrder + this.submit(e,index) + } + } + } + + //属性下移 + attributeBottom (e,index) { + let select = this.attributeSelect[this.attributeSelect.length-1] + let newIndex = this.attributeIndex[this.attributeIndex.length-1] + if (this.attributeSelect.length && newIndex===index) { + let newOrder = this.attributeSelect[this.attributeSelect.length-1].order + if(select.index != this.allGrouping[index].propertyInfos.length-1) { + this.allGrouping[index].propertyInfos[select.index].order=this.allGrouping[index].propertyInfos[select.index+1].order + this.allGrouping[index].propertyInfos[select.index+1].order=newOrder + this.submit(e,index) + } + } + } + + //封装函数每条属性添加index + setIndex () { + if (this.allGrouping.length) { + this.allGrouping.forEach(item => { + item.propertyInfos.forEach((element,index) => { + element.index = index + }); + }); + } + } + + //创建分组属性 + addGrouping (e,index) { + let data = e + const dialogRef = this.dialog.open(addUnitAttributeComponent,{data}); + dialogRef.afterClosed().subscribe( + data=>{ if (data) { + this.allGrouping[index].propertyInfos.push(data) + this.submit(e,index) + }}) + } + + //编辑分组属性 + editGrouping (e,index,element) { + let data = element + const dialogRef = this.dialog.open(editUnitAttribute,{data}); + dialogRef.afterClosed().subscribe( + data=>{ if (data) { + this.allGrouping[index].propertyInfos[data.index] = data + this.submit(e,index) + }}) + } + + //属性显示 + display (e) { + e.visible = true + } + + //属性隐藏 + noDisplay (e) { + e.visible = false + } + + //属性启用 + enabledGrouping (e) { + e.enabled = true + } + + //属性禁用 + noEnabledGrouping (e) { + e.enabled = false + } + + //属性删除 + deleteGrouping (e,index,elementIndex) { + let isTrue = confirm('您确定要删除吗') + if (isTrue) { + this.allGrouping[index].propertyInfos.splice(elementIndex,1) + this.submit(e,index) + } + } + + + + //提交当前分组保存数据 + submit (e,index) { + if (this.allGrouping.length) { + this.allGrouping.forEach(item => { + item.propertyInfos.forEach((element) => { + delete element.index + }); + }); + this.http.put(`/api/BasicGroups/${e.id}`,{ + id:e.id, + name:e.name, + type:e.type, + addMode:e.addMode, + isOptional: e.isOptional, + order:e.order, + enabled:e.enabled, + propertyInfos:this.allGrouping[index].propertyInfos, + basicCategoryId:e.basicCategoryId + }).subscribe(data=>{ + const config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.snackBar.open('数据更新成功','确定',config); + this.getAllGrouping() + }) + } else { + this.http.put(`/api/BasicGroups/${e.id}`,{ + id:e.id, + name:e.name, + type:e.type, + addMode:e.addMode, + isOptional:e.isOptional, + order:e.order, + enabled:e.enabled, + propertyInfos:this.allGrouping[index].propertyInfos, + basicCategoryId:e.basicCategoryId + }).subscribe(data=>{ + const config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.snackBar.open('数据更新成功','确定',config); + this.getAllGrouping() + }) + } + } + + + +} + + + +//新增属性弹窗 +export interface Food { + value: number; + viewValue: string; +} +@Component({ + selector: 'app-addUnitAttribute', + templateUrl: './addUnitAttribute.html', + styleUrls: ['./unit-information.component.scss'] +}) +export class addUnitAttributeComponent { + + constructor(private http:HttpClient,public dialog: MatDialog, + public dialogRef: MatDialogRef,@Inject(MAT_DIALOG_DATA) public data) { } + + ngOnInit(): void { + if (this.data.propertyInfos.length) { + this.order = this.data.propertyInfos[this.data.propertyInfos.length-1].order +1 + } else { + this.order = 0 + } + } + + //定义属性数据 + propertyType:Food[]=[ + {value:0, viewValue: '单行文本'}, + {value:1, viewValue: '多行文本'}, + {value:2, viewValue: '数值'},] + + order:number; //order + + //提交表单 + onSubmit (e) { + e.order = this.order + e.enabled = true + e.visible = true + e.required = e.required=='true'? true: false, + this.dialogRef.close(e) + } + + + +} + + + +//编辑属性弹窗 +@Component({ + selector: 'app-editUnitAttribute', + templateUrl: './editUnitAttribute.html', + styleUrls: ['./unit-information.component.scss'] +}) +export class editUnitAttribute { + + constructor(private http:HttpClient,public dialog: MatDialog, + public dialogRef: MatDialogRef, + @Inject(MAT_DIALOG_DATA) public data,) { } + + ngOnInit(): void { + this.propertyName = this.data.propertyName + this.propertyValue = this.data.propertyValue + this.propertyType = this.data.propertyType + this.required = String(this.data.required) + this.ruleName = this.data.ruleName + this.ruleValue = this.data.ruleValue + this.physicalUnit = this.data.physicalUnit + this.tag = this.data.tag + this.order = this.data.order} + + + + propertyName:any + propertyValue:any; + propertyType:number; + required:any; + ruleName:any; + ruleValue:any; + physicalUnit:any; + tag:any; + order:number; + + //定义属性数据 + type:Food[]=[ + {value:0, viewValue: '单行文本'}, + {value:1, viewValue: '多行文本'}, + {value:2, viewValue: '数值'},] + + //提交表单 + onSubmit (e) { + e.enabled = this.data.enabled + e.visible = this.data.visible + e.index = this.data.index + e.required = e.required=='true'? true: false, + this.dialogRef.close(e) + } + + + +} diff --git a/src/app/ui/unittype/dialog-overview-example-dialog.html b/src/app/ui/unittype/dialog-overview-example-dialog.html new file mode 100644 index 0000000..cc7f6a1 --- /dev/null +++ b/src/app/ui/unittype/dialog-overview-example-dialog.html @@ -0,0 +1,69 @@ +
    + 创建单位类型 + +
    +
    + + + +
    + +
    + + + {{item.name}} + + +
    + +
    + + + + {{food.name}} + + + +
    + +
    + + + {{item.name}} + + +
    + +
    + + +
    +
    +
    + +
    + + + + {{node.name}} check_circle_outline + + + + + + {{node.name}} check_circle_outline + + + +
    \ No newline at end of file diff --git a/src/app/ui/unittype/editorialUnit.html b/src/app/ui/unittype/editorialUnit.html new file mode 100644 index 0000000..a0a2553 --- /dev/null +++ b/src/app/ui/unittype/editorialUnit.html @@ -0,0 +1,48 @@ +
    + 编辑单位类型 + +
    +
    + + + +
    + +
    + + + + {{item.name}} + + + +
    + +
    + + + + {{food.name}} + + + +
    + +
    + + + {{item.name}} + + +
    + +
    + + +
    +
    +
    \ No newline at end of file diff --git a/src/app/ui/unittype/unittype.component.html b/src/app/ui/unittype/unittype.component.html new file mode 100644 index 0000000..5926469 --- /dev/null +++ b/src/app/ui/unittype/unittype.component.html @@ -0,0 +1,55 @@ +
    + +
    + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    单位类型{{element.name}}单位信息模板{{element.basicCategoryName}}消防要素模板{{element.fireCategoryName}}消防设施模板{{element.facilityCategoryName}}操作 + + + + + + + +
    +
    \ No newline at end of file diff --git a/src/app/ui/unittype/unittype.component.scss b/src/app/ui/unittype/unittype.component.scss new file mode 100644 index 0000000..d4186d3 --- /dev/null +++ b/src/app/ui/unittype/unittype.component.scss @@ -0,0 +1,30 @@ +.left { + margin: 10px; +} +.marginLeft { + margin-left: 5px; +} +table { + width: 100%; + text-align: center; + .cdk-header-cell { + text-align: center; + } + } + +.leftBox { + width: 200px; + float: left; +} +.tree { + float: right; + width: 300px; + height: 350px; + overflow-y: auto; +} +.mat-icon { + font-size: 22px; +} +mat-form-field{ + width: 200px; +} \ No newline at end of file diff --git a/src/app/ui/unittype/unittype.component.ts b/src/app/ui/unittype/unittype.component.ts new file mode 100644 index 0000000..c9d8dd5 --- /dev/null +++ b/src/app/ui/unittype/unittype.component.ts @@ -0,0 +1,307 @@ +import { Component, OnInit, Inject } from '@angular/core'; +import {HttpClient} from '@angular/common/http' +import { MatDialogRef, MatDialog, MAT_DIALOG_DATA } from '@angular/material/dialog'; +import { FlatTreeControl } from '@angular/cdk/tree'; +import { MatTreeFlattener, MatTreeFlatDataSource } from '@angular/material/tree'; +import { MatSnackBar, MatSnackBarConfig } from '@angular/material/snack-bar'; + + + +@Component({ + selector: 'app-unittype', + templateUrl: './unittype.component.html', + styleUrls: ['./unittype.component.scss'] +}) +export class UnittypeComponent implements OnInit { + + constructor(public http: HttpClient,public dialog: MatDialog,public snackBar: MatSnackBar) { } + + displayedColumns: string[]=['company', 'template','fireControl','facilityCategory','operation']; + dataSource:any=[]; //所有单位类型 + allFireControl:any=[]; //所有消防要素模板 + + ngOnInit() { + this.getList() + this.getFireControl() + } + + + //获取所有单位类型 + getList () { + this.http.get('/api/BuildingTypes').subscribe( + (data: any[]) => { + this.dataSource=data + } + ) + } + + //获取所有消防要素模板 + getFireControl () { + this.http.get('/api/FireCategories').subscribe( + (data:any)=>{ + this.allFireControl=data + } + )} + + //创建单位弹窗 + open() { + let data = this.allFireControl || [] + let dialogRef = this.dialog.open(DialogOverviewExampleDialog,{data}); + dialogRef.afterClosed().subscribe( + (data)=>{if (data) {this.getList()}} + ); + } + + //编辑弹窗 + edit (e) { + let data= e + let allFireControl= this.allFireControl || [] + let dialogRef = this.dialog.open(editorialUnit, + { + width:"260px", + data:{data,allFireControl} + }); + dialogRef.afterClosed().subscribe( + (data)=>{if (data) {this.getList()}} + ); + } + + //启用 + enabled(e) { + this.http.put( + `/api/BuildingTypes/${e.id}`, + { + id:e.id, + name: e.name, + enabled: true, + basicCategoryId:e.basicCategoryId, + fireCategoryId:e.fireCategoryId, + facilityCategoryId: e.facilityCategoryId, + } + ).subscribe( + ()=> { + this.getList() + } + ) + } + + //禁用 + prohibit (e) { + this.http.put( + `/api/BuildingTypes/${e.id}`, + { + id:e.id, + name: e.name, + enabled: false, + basicCategoryId:e.basicCategoryId, + fireCategoryId:e.fireCategoryId, + facilityCategoryId: e.facilityCategoryId, + } + ).subscribe( + ()=> { + this.getList() + } + ) + } + + //删除 + delete(e) { + let isTrue = confirm('您确定要删除吗') + if(isTrue) { + this.http.delete(`/api/BuildingTypes/${e}`).subscribe( + ()=>{ + this.getList() + } + ) + } + } + + + +} + +//创建单位弹窗组件 +@Component({ + selector: 'dialog-overview-example-dialog', + templateUrl: 'dialog-overview-example-dialog.html', + styleUrls: ['./unittype.component.scss'] +}) +export class DialogOverviewExampleDialog { + data:any =[] + newdata = []; + + private _transformer = (node, level: number) => { + return { + expandable: !!node.children && node.children.length > 0, + name: node.name, + level: level, + id: node.id, + parentId: node.parentId, + computed:node.computed, + order:node.order, + checked:node.checked, + tag:node.tag + }; + } + treeControl = new FlatTreeControl(node => node.level, node => node.expandable); + treeFlattener = new MatTreeFlattener(this._transformer, node => node.level, node => node.expandable, node => node.children); + dataSource = new MatTreeFlatDataSource(this.treeControl, this.treeFlattener); + + constructor(public http: HttpClient,public snackBar: MatSnackBar, + public dialogRef: MatDialogRef, + @Inject(MAT_DIALOG_DATA) public allFireControl) {} + + ngOnInit() { + this.getunitmsg() + this.getAllFacilityCategory() + } + + oldSelected:any; //选中的单位信息模板id + selected:any; //选中的消防要素模板id + allunitmsg:any //所有单位信息 + allFacilityCategory:any; //所有消防设施模板 + + //获得所有单位信息模板 + getunitmsg(){ + this.http.get('/api/BasicCategories').subscribe(data=>{ + this.allunitmsg = data + }) + } + + //获取所有消防设施模板 + getAllFacilityCategory () { + this.http.get('/api/FacilityCategories').subscribe(data=>{ + this.allFacilityCategory = data + }) + } + + //封装实现select框切换渲染更新Tree函数 + select () { + this.newdata=[] + let id = this.selected + this.http.get(`/api/FireCategories/${id}/FireElements`).subscribe( + (data:any)=>{ + function getparentNode(parentId){ + return data.find((item)=>{ + return item.id == parentId + }) + } + data.forEach(item => { + var parentNode = getparentNode(item.parentId); + if(parentNode){ + if(!parentNode.children){ + parentNode.children = [] + } + parentNode.children.push(item) + }else{ + if(!item.parentId){ + this.newdata.push(item) + } + } + }); + this.dataSource.data = this.newdata; + } + ) + + } + + //select选择切换Tree + toggleDisplay() { + this.select() + } + + hasChild = (_: number, node: any) => node.expandable; + + //创建单位类型 + onSubmit (e) { + if(this.selected) { + this.http.post('/api/BuildingTypes',{ + name:e.name, + enabled:true, + basicCategoryId:e.basicCategoryName, + fireCategoryId:this.selected, + facilityCategoryId: e.facilityCategoryName + }).subscribe(data=>{ + this.dialogRef.close('success') + }) + } else { + const config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.snackBar.open('请填写完整','确定',config); + } + } + + + +} + + +//编辑单位弹窗组件 +@Component({ + selector: 'app-editorialUnit', + templateUrl: './editorialUnit.html', + styleUrls: ['./unittype.component.scss'] +}) +export class editorialUnit { + +constructor(public http: HttpClient,public snackBar: MatSnackBar, + public dialogRef: MatDialogRef, + @Inject(MAT_DIALOG_DATA) public data) {} + + ngOnInit() { + this.companyName=this.data.data.name + this.oldSelected = this.data.data.basicCategoryId + this.selected=this.data.data.fireCategoryId + this.facilityCategoryId = this.data.data.facilityCategoryId + this.getunitmsg() + this.getAllFacilityCategory() + } + + companyName:any; //单位类型name + oldSelected:any; //单位信息模板id + selected:any; //消防要素模板id + facilityCategoryId:any; //消防设施模板id + allunitmsg:any //所有单位信息模板 + allFacilityCategory:any; //所有消防设施模板 + + //获得所有单位信息模板 + getunitmsg(){ + this.http.get('/api/BasicCategories').subscribe(data=>{ + this.allunitmsg = data + }) + } + + //获取所有消防设施模板 + getAllFacilityCategory () { + this.http.get('/api/FacilityCategories').subscribe(data=>{ + this.allFacilityCategory = data + }) + } + + //编辑功能 + onSubmit (e) { + let id = this.data.data.id + let enabled = this.data.data.enabled + if(e.name&&this.selected&&this.oldSelected) { + this.http.put(`/api/BuildingTypes/${id}`,{ + id:id, + name:e.name, + enabled: enabled, + basicCategoryId:this.oldSelected, + fireCategoryId:this.selected, + facilityCategoryId: e.facilityCategoryName + }).subscribe(data=>{ + this.dialogRef.close('success') + }) + } else { + const config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.snackBar.open('请填写完整','确定',config); + } + } + + + +} diff --git a/src/app/ui/userdata/edituserdata.component.html b/src/app/ui/userdata/edituserdata.component.html new file mode 100644 index 0000000..344a1a6 --- /dev/null +++ b/src/app/ui/userdata/edituserdata.component.html @@ -0,0 +1,25 @@ +
    + + + + + + + + + + + + +
    + + +
    + +
    \ No newline at end of file diff --git a/src/app/ui/userdata/userdata.component.html b/src/app/ui/userdata/userdata.component.html new file mode 100644 index 0000000..66e763e --- /dev/null +++ b/src/app/ui/userdata/userdata.component.html @@ -0,0 +1,13 @@ + + 账号: {{userdata.name}} + +

    真实姓名: {{userdata.realName}}

    +

    职务: {{userdata.post}}

    +

    电话: {{userdata.phone}}

    +

    创建时间: {{userdata.creationTime | date:'yyyy-MM-dd'}}

    +

    组织机构名称: {{userdata.organizationName || '无'}}

    +
    + + + +
    \ No newline at end of file diff --git a/src/app/ui/userdata/userdata.component.scss b/src/app/ui/userdata/userdata.component.scss new file mode 100644 index 0000000..3d5f018 --- /dev/null +++ b/src/app/ui/userdata/userdata.component.scss @@ -0,0 +1,21 @@ +mat-card{ + padding-left: 40%; + h1{ + margin: 10px 0; + } + mat-card-actions{ + padding-left: 10%; + } + +} +form{ + text-align: center; + button{ + margin: 0 8px; + margin-top: 8px; + } + .mat-checkbox{ + display: block; + text-align: left; + } +} diff --git a/src/app/ui/userdata/userdata.component.ts b/src/app/ui/userdata/userdata.component.ts new file mode 100644 index 0000000..6df0a23 --- /dev/null +++ b/src/app/ui/userdata/userdata.component.ts @@ -0,0 +1,108 @@ +import { Component, OnInit, ViewChild, Inject } from '@angular/core'; +import {MatPaginator} from '@angular/material/paginator'; +import {MatTableDataSource} from '@angular/material/table'; +import {MatDialog, MatDialogRef, MAT_DIALOG_DATA} from '@angular/material/dialog'; +import {FormControl} from '@angular/forms'; +import { HttpClient,HttpHeaders } from '@angular/common/http'; +import format from 'date-fns/format'; +import { MatSnackBar, MatSnackBarConfig } from '@angular/material/snack-bar'; + + + +export interface userdata { + name: string,//名称 + realName: string,//身份 + enabled: boolean,//是否已启用 + creationTime: string,//创建时间 + organizationId: null//机构编号, +} + +//总页面 +@Component({ + selector: 'app-userdata', + templateUrl: './userdata.component.html', + styleUrls: ['./userdata.component.scss'] +}) +export class UserdataComponent implements OnInit { + + constructor(private http: HttpClient,public dialog: MatDialog,public snackBar: MatSnackBar) { } + + userdata: any = {} + ngOnInit() { + this.http.get("/api/Account/Profiles").subscribe( + data=>{ + if(!data['organizationName']){ + data['organizationName'] = '无' + } + this.userdata = data + } + ) + } + edit(){ + const dialogRef = this.dialog.open(EditUser, {//调用open方法打开对话框并且携带参数过去 + width: '260px', + data: {userdata:this.userdata} + }); + dialogRef.afterClosed().subscribe( + data=>{ + this.http.get("/api/Account/Profiles").subscribe( + data=>{ + this.userdata = data + } + ) + } + ); + } +} + + +@Component({ + selector: 'edituserdata', + templateUrl: './edituserdata.component.html', + styleUrls: ['./userdata.component.scss'] +}) +export class EditUser { + myControl = new FormControl(); + constructor(private http: HttpClient,public dialogRef: MatDialogRef,@Inject(MAT_DIALOG_DATA) public data,public snackBar: MatSnackBar) {} + realName:any = this.data.userdata.realName + post:any = this.data.userdata.post + phone:any = this.data.userdata.phone + onNoClick(): void { + this.dialogRef.close(); + } + + onSubmit(value){ + // let headers = new HttpHeaders({ + // 'Content-Type': 'text/json' + // }); + // let options = { + // headers + // }; + // let body = JSON.stringify(value.realName); + let body = { + realName: value.realName, + post: value.post, + phone: value.phone + } + this.http.put( + "/api/Account/Profiles", + body, + // options + ).subscribe( + data=>{ + const config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.snackBar.open('修改成功','确定',config); + this.dialogRef.close(); + }, + err=>{ + const config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.snackBar.open('修改失败','确定',config); + this.dialogRef.close(); + } + ) + } +} \ No newline at end of file diff --git a/src/app/ui/usermanagement/allRoles.html b/src/app/ui/usermanagement/allRoles.html new file mode 100644 index 0000000..1b5dfd3 --- /dev/null +++ b/src/app/ui/usermanagement/allRoles.html @@ -0,0 +1,29 @@ +分配角色 + +
    +
    +
    所有角色
    +
    + + {{item.name}} + +
    +
    + +
    +
    用户角色
    +
    +

    + {{item.name}} +

    +
    +
    +
    + +
    + + +
    \ No newline at end of file diff --git a/src/app/ui/usermanagement/createUser.html b/src/app/ui/usermanagement/createUser.html new file mode 100644 index 0000000..aa9fa1b --- /dev/null +++ b/src/app/ui/usermanagement/createUser.html @@ -0,0 +1,70 @@ +
    + 创建用户 +
    + +
    + + + +
    +
    登录名格式为字母开头,5-18位
    +
    +
    + +
    + + + +
    + +
    + + + +
    + +
    + + + +
    + +
    + + + +
    + +
    +

    {{errmsg}}

    +
    + +
    + + +
    +
    +
    + +
    + 请选择所属机构 + + + +
  • {{node.name}}
  • +
    + + + +
  • {{node.name}}
  • +
    +
    +
    \ No newline at end of file diff --git a/src/app/ui/usermanagement/editUser.html b/src/app/ui/usermanagement/editUser.html new file mode 100644 index 0000000..2f5e2c5 --- /dev/null +++ b/src/app/ui/usermanagement/editUser.html @@ -0,0 +1,63 @@ +
    + 编辑用户 +
    + +
    + + + +
    + +
    + + + +
    + +
    + + + +
    + +
    + + + +
    + +
    + + + +
    + +
    + + +
    +
    +
    + +
    + 请选择所属机构 + + + +
  • {{node.name}}
  • +
    + + + +
  • {{node.name}}
  • +
    +
    +
    \ No newline at end of file diff --git a/src/app/ui/usermanagement/seeInformation.html b/src/app/ui/usermanagement/seeInformation.html new file mode 100644 index 0000000..a627ce7 --- /dev/null +++ b/src/app/ui/usermanagement/seeInformation.html @@ -0,0 +1,29 @@ +查看用户 + +
    + + 登录账号: + {{data.name}} + + 真实姓名: + {{data.realName}} + + 所属机构: + {{data.organizationName}} + + 所属角色: + {{item}} + + 创建时间: + {{data.creationTime|date:'yyyy-MM-dd'}} + + 是否禁用: + + + + +
    + +
    + +
    \ No newline at end of file diff --git a/src/app/ui/usermanagement/usermanagement.component.html b/src/app/ui/usermanagement/usermanagement.component.html new file mode 100644 index 0000000..1b78d66 --- /dev/null +++ b/src/app/ui/usermanagement/usermanagement.component.html @@ -0,0 +1,112 @@ +
    +
    +
    + +
    + +
    + +
    + + +
    + +
    + + +
    + +
    + + + +
    +
    clear
    + + + +
  • {{node.name}}
  • +
    + + +
  • {{node.name}}
  • +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    登录账号{{element.name}}真实姓名{{element.realName}}所属机构{{element.organizationName}}所属角色 + {{item}} + 创建时间 + {{element.creationTime|date:'yyyy-MM-dd'}} + 操作 + + + + + + + + + + + + +
    + + + diff --git a/src/app/ui/usermanagement/usermanagement.component.scss b/src/app/ui/usermanagement/usermanagement.component.scss new file mode 100644 index 0000000..5466063 --- /dev/null +++ b/src/app/ui/usermanagement/usermanagement.component.scss @@ -0,0 +1,155 @@ +table { + width: 100%; + text-align: center; + .cdk-header-cell { + text-align: center; + } + } +.maginleft { + margin-left: 5px; +} + +.header { + width: 100%; + padding: 10px; + margin-bottom: 10px; + box-sizing: border-box; + border-bottom: 1px solid rgba(0, 0, 0, 0.12); + .queryBox { + box-sizing: border-box; + padding: 5px 15px; + display: flex; + flex-direction: row; + flex-wrap: wrap; + align-items:center; + justify-content:center; + .queryField { + margin: 0 15px; + input { + width: 180px; + height: 22px; + line-height: 22px; + border-radius: 3px;} + } + + } //queryBox +} + + + +//创建用户 +.alert-danger{ + font-size: 14px; + color: red; +} +.leftTree { + width: 200px; + float: left; +} +.tree { + width: 300px; + height: 400px; + float: right; + overflow-y: auto; +} + + + +//分配角色 +.example-margin { + display: block; + margin-top: 5px; +} +.clearfix:after{/*伪元素是行内元素 正常浏览器清除浮动方法*/ + content: ""; + display: block; + height: 0; + clear:both; + visibility: hidden; +} +.clearfix{ + *zoom: 1;/*ie6清除浮动的方式 *号只有IE6-IE7执行,其他浏览器不执行*/ +} +.leftBox { + float: left; + width: 250px; + border-radius: 10px;; + border: 1px solid #999; +} +.rightBox { + float: right; + width: 250px; + border-radius: 10px;; + border: 1px solid #999; +} +.Userheader { + height: 30px; + line-height: 30px; + border-radius: 10px 10px 0 0; + padding-left: 10px; + background-color: #f9fafc; +} +.select { + height: 300px; + padding-left: 10px; + border-top: 1px solid #999; + overflow: auto; + p{ + height: 24px; + line-height: 24px; + } +} +.organizationlist{ + list-style: none +} +.organizationlist:hover{ + background: rgba(225, 225, 225, 0.8); + cursor: pointer; +} + + +//滚动条样式 +::-webkit-scrollbar{ + width: 5px; + background-color: white; +} +::-webkit-scrollbar-thumb{ + background-color: #999; +} +.organizationbox{ + width:450px; + height: 200px; + background: white; + position: absolute; + top: 25px; + left: 78px; + z-index: 999; + border: 1px solid grey; + overflow-y: auto; + li{ + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + } + mat-tree-node{ + cursor: pointer; + white-space:pre; + } + mat-tree-node:hover{ + background: rgba(225, 225, 225, 0.8); + } + .closediv{ + z-index: 100; + position: absolute; + right: 0; + top: 0; + width: 30px; + height: 30px; + cursor: pointer; + line-height: 30px; + text-align: center; + } + .closediv:hover{ + background:rgba(225, 225, 225, 0.8); + } +} \ No newline at end of file diff --git a/src/app/ui/usermanagement/usermanagement.component.ts b/src/app/ui/usermanagement/usermanagement.component.ts new file mode 100644 index 0000000..0c6bd09 --- /dev/null +++ b/src/app/ui/usermanagement/usermanagement.component.ts @@ -0,0 +1,549 @@ +import { Component, OnInit, ViewChild, Inject } from '@angular/core'; +import {HttpClient} from '@angular/common/http' +import { MatDialogRef, MatDialog, MAT_DIALOG_DATA } from '@angular/material/dialog'; +import { MatPaginator } from '@angular/material/paginator'; +import { MatTableDataSource } from '@angular/material/table'; +import { FlatTreeControl } from '@angular/cdk/tree'; +import { MatTreeFlattener, MatTreeFlatDataSource } from '@angular/material/tree'; +import { PageEvent } from '@angular/material/paginator'; +import { MatSnackBar, MatSnackBarConfig } from '@angular/material/snack-bar'; +import { TreeService } from '../../http-interceptors/tree.service' +import { FormControl } from '@angular/forms'; + + + +@Component({ + selector: 'app-usermanagement', + templateUrl: './usermanagement.component.html', + styleUrls: ['./usermanagement.component.scss'] +}) +export class UsermanagementComponent implements OnInit { + + constructor(public http: HttpClient,public dialog: MatDialog,public snackBar: MatSnackBar,private tree: TreeService) { } + private _transformer = (node, level: number) => { //初始化tree + return { + expandable: !!node.children && node.children.length > 0, + name: node.name, + level: level, + id: node.id, + parentId: node.parentId, + children: node.children + }; + } + treeControl = new FlatTreeControl(node => node.level, node => node.expandable); + treeFlattener = new MatTreeFlattener(this._transformer, node => node.level, node => node.expandable, node => node.children); + treedataSource = new MatTreeFlatDataSource(this.treeControl, this.treeFlattener); + myControl = new FormControl(); + hasChild = (_: number, node: any) => node.expandable; + + ngOnInit() { + this.initData() + this.getAllMechanism() + } + + + displayedColumns: string[] = ['loginName', 'realName', 'mechanism','role','time', 'operation']; + dataSource:any; //所有用户 + allMechanism:any; //所有机构 + + userLogin:string; //搜索账号 + userName:string; //搜索名称 + userMechanism:string //搜索机构 + + //分页 + @ViewChild(MatPaginator, {static: true}) + pageEvent: PageEvent; + paginator: MatPaginator; + length:any; //共多少条数据 + pageSize:any; //每页条数 + pageSizeOptions: number[] = [10] //设置每页条数 + pageNumber:number = 1; //第几页 + + //分页切换 + chagePage (e) { + this.pageNumber = e.pageIndex+1 + let data = { + Name: this.userLogin ||'', + RealName:this.userName ||'', + OrganizationId:this.userMechanism ||'', + PageNumber: String(this.pageNumber), + } + this.http.get('/api/Users',{params:data}).subscribe( + (data:any[])=> { + this.length = data['totalCount'] + this.pageSize = data['pageSize'] + this.dataSource = new MatTableDataSource(data['items']); + } + ) + } + + isorganizationbox:any = false + stopclose(e){ + e.stopPropagation(); + } + js:any + // jsId:any + //点击辖区中队树,将选择的辖区中队添加到变量 + add(node) { + this.isorganizationbox = false + this.js = node.name + console.log(this.js) + this.userMechanism = node.id + } + + //打开辖区中队隐藏框 + openorganizationbox() { + this.isorganizationbox = true + } + + //关闭出现的组织机构div + closediv(){ + this.isorganizationbox = false + } + + //页面初始化 + 查询 + 重置 + initData () { + let data = { + Name: this.userLogin ||'', + RealName:this.userName ||'', + OrganizationId:this.userMechanism ||'', + PageNumber: '1', + } + this.http.get('/api/Users',{params:data}).subscribe( + (data:any[])=> { + this.length = data['totalCount'] + this.pageSize = data['pageSize'] + this.pageEvent.pageIndex = 0 + this.dataSource = new MatTableDataSource(data['items']); + } + ) + } + + //更新当前页数据 + getUsers () { + let data = { + Name: this.userLogin ||'', + RealName:this.userName ||'', + OrganizationId:this.userMechanism ||'', + PageNumber: String(this.pageNumber), + } + this.http.get('/api/Users',{params:data}).subscribe( + (data:any[])=> { + this.length = data['totalCount'] + this.pageSize = data['pageSize'] + this.dataSource = new MatTableDataSource(data['items']); + } + ) + + } + + //清空自动搜索 + empty () { + this.userLogin='' + this.userName='' + this.userMechanism='' + this.js = '' + this.isorganizationbox = false + this.initData() + } + allorganizations:any//所有组织机构 + treedata:any//所有组织机构变成树 + newallorganizations:any + + //获取所有机构 + getAllMechanism() { + this.http.get('/api/Organizations').subscribe(data=>{ + this.allorganizations = data + this.treedata = this.tree.toTree(data); + this.treedataSource.data = this.treedata + }) + } + + //打开创建用户窗口 + open() { + let dialogRef = this.dialog.open(CreateNewUser,{ + width: '600px', + }); + dialogRef.afterClosed().subscribe( + (data)=>{ + if (data) {this.getUsers()} + } + ); + } + + //打开分配角色窗口 + openuser (e) { + let dialogRef = this.dialog.open(allRoles, + { + width:'600px', + data: {e} + }); + dialogRef.afterClosed().subscribe( + (data)=>{ + if (data) {this.getUsers()} + } + ); + } + + //启用 + enable (e) { + this.http.put(`/api/Users/${e.name}`,{ + name: e.name, + realName:e.realName, + post: e.post, + phone: e.phone, + enabled: true, + creationTime:e.creationTime, + organizationId:e.organizationId + }).subscribe( + data=> { + this.getUsers() + } + ) + } + + //禁用 + prohibit (e) { + this.http.put(`/api/Users/${e.name}`,{ + name: e.name, + realName:e.realName, + post: e.post, + phone: e.phone, + enabled: false, + creationTime:e.creationTime, + organizationId:e.organizationId + }).subscribe( + data=> { + this.getUsers() + } + ) + } + + //编辑 + edit (e) { + let allMechanism=this.allMechanism + let dialogRef = this.dialog.open(EditNewUser, + { + data: {e,allMechanism} + }); + + dialogRef.afterClosed().subscribe( + (data)=>{ + if (data) {this.getUsers()} + } + ); + } + + //查看 + see (e) { + this.http.get(`/api/Users/${e}`).subscribe( + data=> { + let dialogRef = this.dialog.open(seeInformation, + { + width:'600px', + data + }); + dialogRef.afterClosed().subscribe(); + } + + ) + } + + //重置密码 + reset (e) { + this.http.put(`/api/Users/${e}/ResetPassword`,{}).subscribe( + data=> { + const config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.snackBar.open('重置密码成功!','确定',config); + } + ) + } + + //删除 + delete (e) { + let isTrue = confirm('您确定要删除吗') + if (isTrue) { + this.http.delete(`/api/Users/${e}`).subscribe( + data=>{ + this.getUsers() + } + ) + } + } + + + +} + +//创建用户组件 +@Component({ + selector: 'app-createUser', + templateUrl: './createUser.html', + styleUrls: ['./usermanagement.component.scss'] +}) +export class CreateNewUser { + + newdata = []; + + private _transformer = (node, level: number) => { + return { + expandable: !!node.children && node.children.length > 0, + name: node.name, + level: level, + id: node.id, + parentId: node.parentId, + enabled:node.enabled, + order:node.order, + }; + } + treeControl = new FlatTreeControl(node => node.level, node => node.expandable); + treeFlattener = new MatTreeFlattener(this._transformer, node => node.level, node => node.expandable, node => node.children); + dataSource = new MatTreeFlatDataSource(this.treeControl, this.treeFlattener); + + constructor(public http: HttpClient,public snackBar: MatSnackBar, + public dialogRef: MatDialogRef) {} + + organizationId:any=''; //所属机构id + organizationName:any; //所属机构name + + ngOnInit() { + this.tree() + } + + //渲染Tree + tree () { + this.newdata=[] + this.http.get('/api/Organizations').subscribe( + (data:any)=>{ + function getparentNode(parentId){ + return data.find((item)=>{ + return item.id == parentId + }) + } + data.forEach(item => { + var parentNode = getparentNode(item.parentId); + if(parentNode){ + if(!parentNode.children){ + parentNode.children = [] + } + parentNode.children.push(item) + }else{ + if(!item.parentId){ + this.newdata.push(item) + } + } + }); + this.dataSource.data = this.newdata; + } + ) + + } + hasChild = (_: number, node: any) => node.expandable; + + //选择机构 + add (e) { + this.organizationId = e.id + this.organizationName = e.name + } + + errmsg:any; //捕获错误信息 + //新增用户 + onSubmit(e) { + let time =new Date() + if(this.organizationId) { + this.http.post('/api/Users',{ + name:e.name, + realName:e.user, + post:e.post, + phone:e.phone, + enabled:true, + creationTime:time, + organizationId:this.organizationId + }).subscribe(data=> { + this.dialogRef.close('success')}, + error=>{this.errmsg = error} + ) + }else{ + const config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.snackBar.open('请选择机构','确定',config); + } + } + + + +} + + + +//编辑用户组件 +@Component({ + selector: 'app-editUser', + templateUrl: './editUser.html', + styleUrls: ['./usermanagement.component.scss'] +}) +export class EditNewUser { + constructor(public http: HttpClient,public snackBar: MatSnackBar, + public dialogRef: MatDialogRef,@Inject(MAT_DIALOG_DATA) public data) {} + + ngOnInit() { + this.getTreeData() + this.name=this.data.e.name + this.realName=this.data.e.realName + this.post=this.data.e.post, + this.phone=this.data.e.phone, + this.affiliate=this.data.e.organizationId + this.affiliateName=this.data.e.organizationName + } + + private _transformer = (node, level: number) => { + return { + expandable: !!node.children && node.children.length > 0, + name: node.name, + level: level, + id: node.id, + parentId: node.parentId, + enabled:node.enabled, + order:node.order, + }; + } + treeControl = new FlatTreeControl(node => node.level, node => node.expandable); + treeFlattener = new MatTreeFlattener(this._transformer, node => node.level, node => node.expandable, node => node.children); + dataSource = new MatTreeFlatDataSource(this.treeControl, this.treeFlattener); + hasChild = (_: number, node: any) => node.expandable; + + name:any; //登录账号 + realName:any; //真实姓名 + post:any; //职务 + phone:any; //联系电话 + affiliate:any; //所属机构id + affiliateName:any; //所属机构name + + //获取tree数据 + getTreeData () { + this.http.get('/api/Organizations').subscribe((data:any)=>{ + let treeData = [] + data.forEach(element => { + element.children = [] + data.forEach(item => { if (item.parentId==element.id) {element.children.push(item)} }); + if(!element.parentId) {treeData.push(element)} + }); //forEach + this.dataSource.data = treeData + + }) + } + + //选择组织机构 + add (e) { + this.affiliate = e.id + this.affiliateName = e.name + } + + //编辑 + onSubmit (e) { + this.http.put(`/api/Users/${this.data.e.name}`,{ + name:this.data.e.name, + realName:this.realName, + post:this.post, + phone:this.phone, + roleNames:this.data.e.roleNames, + enabled: this.data.e.enabled, + creationTime:this.data.e.creationTime, + organizationId:this.affiliate + }).subscribe(data=>{ + this.dialogRef.close('success') + }) + + } + + + +} + + + +//分配角色组件 +@Component({ + selector: 'app-allRoles', + templateUrl: './allRoles.html', + styleUrls: ['./usermanagement.component.scss'] +}) +export class allRoles { + + constructor(public http: HttpClient,public snackBar: MatSnackBar, + public dialogRef: MatDialogRef, + @Inject(MAT_DIALOG_DATA) public data) {} + + ngOnInit() { + this.getUsers() + } + + allRoles:any; //所有角色 + checked:any=[]; //选中的角色 + + //获取所有角色 + getUsers () { + this.http.get('/api/Roles').subscribe( data=>{ + this.allRoles=data + this.allRoles.forEach(element => { //所有角色 + element.checked = false + this.data.e.roleNames.forEach(elements=> { //当前账号已有角色 + if (element.name == elements) { + element.checked = true + this.checked.push(element)} }); + }); + + }) + } + + //check框change事件 + fill (e) { + e.checked = !e.checked + if (e.checked) { + this.checked.push(e) + } else { + this.checked.splice(this.checked.findIndex(item => item==e), 1) + } + } + + //分配角色 + onSubmit () { + if (this.checked.length) { + let data:any=[] + this.checked.forEach(item=>{ + data.push(item.id) + }) + this.http.post(`/api/Users/${this.data.e.name}/Roles`,data).subscribe( data=> { + this.dialogRef.close('success') + }) + } else { + const config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.snackBar.open('请选择分配角色','确定',config); + } + } + + + +} + + +//查看用户组件 +@Component({ + selector: 'app-seeInformation', + templateUrl: './seeInformation.html', + styleUrls: ['./usermanagement.component.scss'] +}) +export class seeInformation { + constructor(public http: HttpClient, + public dialogRef: MatDialogRef, + @Inject(MAT_DIALOG_DATA) public data) {} + + ngOnInit() { + } + +} diff --git a/src/assets/.gitkeep b/src/assets/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/src/assets/acharts/acharts.min.js b/src/assets/acharts/acharts.min.js new file mode 100644 index 0000000..24a50b4 --- /dev/null +++ b/src/assets/acharts/acharts.min.js @@ -0,0 +1,8 @@ +!function(){var t,e,n,r,i,a,s,o,c,l,u,h,f,g,d,p,v,m,x,y,b,_,k,w,C,S,A,T,I,P,L,B,M,R,O,D,N,F,G,E,z,U,V,j,Y,H,W,q,X,$,Z,J,Q,K,te,ee,ne,re,ie,ae,se,oe,ce,le,ue,he,fe,ge,de,pe;t=function(){!function(t){var e,n,r="0.4.2",i="hasOwnProperty",a=/[\.\/]/,s="*",o=function(){},c=function(t,e){return t-e},l={n:{}},u=function(t,r){t=String(t);var i,a=n,s=Array.prototype.slice.call(arguments,2),o=u.listeners(t),l=0,h=[],f={},g=[],d=e;e=t,n=0;for(var p=0,v=o.length;v>p;p++)"zIndex"in o[p]&&(h.push(o[p].zIndex),o[p].zIndex<0&&(f[o[p].zIndex]=o[p]));for(h.sort(c);h[l]<0;)if(i=f[h[l++]],g.push(i.apply(r,s)),n)return n=a,g;for(p=0;v>p;p++)if(i=o[p],"zIndex"in i)if(i.zIndex==h[l]){if(g.push(i.apply(r,s)),n)break;do if(l++,i=f[h[l]],i&&g.push(i.apply(r,s)),n)break;while(i)}else f[i.zIndex]=i;else if(g.push(i.apply(r,s)),n)break;return n=a,e=d,g.length?g:null};u._events=l,u.listeners=function(t){var e,n,r,i,o,c,u,h,f=t.split(a),g=l,d=[g],p=[];for(i=0,o=f.length;o>i;i++){for(h=[],c=0,u=d.length;u>c;c++)for(g=d[c].n,n=[g[f[i]],g[s]],r=2;r--;)e=n[r],e&&(h.push(e),p=p.concat(e.f||[]));d=h}return p},u.on=function(t,e){if(t=String(t),"function"!=typeof e)return function(){};for(var n=t.split(a),r=l,i=0,s=n.length;s>i;i++)r=r.n,r=r.hasOwnProperty(n[i])&&r[n[i]]||(r[n[i]]={n:{}});for(r.f=r.f||[],i=0,s=r.f.length;s>i;i++)if(r.f[i]==e)return o;return r.f.push(e),function(t){+t==+t&&(e.zIndex=+t)}},u.f=function(t){var e=[].slice.call(arguments,1);return function(){u.apply(null,[t,null].concat(e).concat([].slice.call(arguments,0)))}},u.stop=function(){n=1},u.nt=function(t){return t?new RegExp("(?:\\.|\\/|^)"+t+"(?:\\.|\\/|$)").test(e):e},u.nts=function(){return e.split(a)},u.off=u.unbind=function(t,e){if(!t)return void(u._events=l={n:{}});var n,r,o,c,h,f,g,d=t.split(a),p=[l];for(c=0,h=d.length;h>c;c++)for(f=0;fc;c++)for(n=p[c];n.n;){if(e){if(n.f){for(f=0,g=n.f.length;g>f;f++)if(n.f[f]==e){n.f.splice(f,1);break}!n.f.length&&delete n.f}for(r in n.n)if(n.n[i](r)&&n.n[r].f){var v=n.n[r].f;for(f=0,g=v.length;g>f;f++)if(v[f]==e){v.splice(f,1);break}!v.length&&delete n.n[r].f}}else{delete n.f;for(r in n.n)n.n[i](r)&&n.n[r].f&&delete n.n[r].f}n=n.n}},u.once=function(t,e){var n=function(){return u.unbind(t,n),e.apply(this,arguments)};return u.on(t,n)},u.version=r,u.toString=function(){return"You are running Eve "+r},t.eve=u,exports=u}(this)}(),e=function(t){function e(t){return t instanceof Date?t:new Date(t)}function n(t,e,n){var r=new Date(n);switch(isNaN(r)&&(r=new Date),e=parseInt(e,10),t){case"s":r=new Date(r.getTime()+1e3*e);break;case"n":r=new Date(r.getTime()+6e4*e);break;case"h":r=new Date(r.getTime()+36e5*e);break;case"d":r=new Date(r.getTime()+864e5*e);break;case"w":r=new Date(r.getTime()+6048e5*e);break;case"m":r=new Date(r.getFullYear(),r.getMonth()+e,r.getDate(),r.getHours(),r.getMinutes(),r.getSeconds());break;case"y":r=new Date(r.getFullYear()+e,r.getMonth(),r.getDate(),r.getHours(),r.getMinutes(),r.getSeconds())}return r}var r=/^(?:(?!0000)[0-9]{4}([-/.]+)(?:(?:0?[1-9]|1[0-2])\1(?:0?[1-9]|1[0-9]|2[0-8])|(?:0?[13-9]|1[0-2])\1(?:29|30)|(?:0?[13578]|1[02])\1(?:31))|(?:[0-9]{2}(?:0[48]|[2468][048]|[13579][26])|(?:0[48]|[2468][048]|[13579][26])00)([-/.]?)0?2\2(?:29))(\s+([01]|([01][0-9]|2[0-3])):([0-9]|[0-5][0-9]):([0-9]|[0-5][0-9]))?$/,i=function(){var t=/w{1}|d{1,4}|m{1,4}|yy(?:yy)?|([HhMsTt])\1?|[LloSZ]|"[^"]*"|'[^']*'/g,e=/\b(?:[PMCEA][SDP]T|(?:Pacific|Mountain|Central|Eastern|Atlantic) (?:Standard|Daylight|Prevailing) Time|(?:GMT|UTC)(?:[-+]\d{4})?)\b/g,n=/[^-+\dA-Z]/g,r=function(t,e){for(t=String(t),e=e||2;t.length99?Math.round(m/10):m,void 0),t:12>d?"a":"p",tt:12>d?"am":"pm",T:12>d?"A":"P",TT:12>d?"AM":"PM",Z:c?"UTC":(String(s).match(e)||[""]).pop().replace(n,""),o:(x>0?"-":"+")+r(100*Math.floor(Math.abs(x)/60)+Math.abs(x)%60,4),S:["th","st","nd","rd"][u%10>3?0:(u%100-u%10!==10)*u%10]};return o.replace(t,function(t){return t in y?y[t]:t.slice(1,t.length-1)})}}(),a={add:function(t,e,r){return n(t,e,r)},addHour:function(t,e){return n("h",t,e)},addMinute:function(t,e){return n("n",t,e)},addSecond:function(t,e){return n("s",t,e)},addDay:function(t,e){return n("d",t,e)},addWeek:function(t,e){return n("w",t,e)},addMonths:function(t,e){return n("m",t,e)},addYear:function(t,e){return n("y",t,e)},isDateEquals:function(t,e){return t.getFullYear()===e.getFullYear()&&t.getMonth()===e.getMonth()&&t.getDate()===e.getDate()},isEquals:function(t,e){return t==e?!0:t&&e&&t.getTime&&e.getTime?t.getTime()==e.getTime():!1},isDateString:function(t){return r.test(t)},format:function(t,e,n){return i(t,e,n)},parse:function(t){return"string"==typeof t&&(t=t.replace(/-/g,"/")),e(t)},today:function(){var t=new Date;return new Date(t.getFullYear(),t.getMonth(),t.getDate())},getDate:function(t){return new Date(t.getFullYear(),t.getMonth(),t.getDate())}};return t=a}(),n=function(t){return function(t,e){"function"==typeof define&&define.amd?define(["eve"],function(n){return e(t,n)}):e(t,t.eve)}(this,function(t,e){function n(t){if(n.is(t,"function"))return b?t():e.on("raphael.DOMload",t);if(n.is(t,q))return n._engine.create[P](n,t.splice(0,3+n.is(t[0],H))).add(t);var r=Array.prototype.slice.call(arguments,0);if(n.is(r[r.length-1],"function")){var i=r.pop();return b?i.call(n._engine.create[P](n,r)):e.on("raphael.DOMload",function(){i.call(n._engine.create[P](n,r))})}return n._engine.create[P](n,arguments)}function r(t){if("function"==typeof t||Object(t)!==t)return t;var e=new t.constructor;for(var n in t)t[S](n)&&(e[n]=r(t[n]));return e}function i(t,e){for(var n=0,r=t.length;r>n;n++)if(t[n]===e)return t.push(t.splice(n,1)[0])}function a(t,e,n){function r(){var a=Array.prototype.slice.call(arguments,0),s=a.join("\u2400"),o=r.cache=r.cache||{},c=r.count=r.count||[];return o[S](s)?(i(c,s),n?n(o[s]):o[s]):(c.length>=1e3&&delete o[c.shift()],c.push(s),o[s]=t[P](e,a),n?n(o[s]):o[s])}return r}function s(){return this.hex}function o(t,e){for(var n=[],r=0,i=t.length;i-2*!e>r;r+=2){var a=[{x:+t[r-2],y:+t[r-1]},{x:+t[r],y:+t[r+1]},{x:+t[r+2],y:+t[r+3]},{x:+t[r+4],y:+t[r+5]}];e?r?i-4==r?a[3]={x:+t[0],y:+t[1]}:i-2==r&&(a[2]={x:+t[0],y:+t[1]},a[3]={x:+t[2],y:+t[3]}):a[0]={x:+t[i-2],y:+t[i-1]}:i-4==r?a[3]=a[2]:r||(a[0]={x:+t[r],y:+t[r+1]}),n.push(["C",(-a[0].x+6*a[1].x+a[2].x)/6,(-a[0].y+6*a[1].y+a[2].y)/6,(a[1].x+6*a[2].x-a[3].x)/6,(a[1].y+6*a[2].y-a[3].y)/6,a[2].x,a[2].y])}return n}function c(t,e,n,r,i){var a=-3*e+9*n-9*r+3*i,s=t*a+6*e-12*n+6*r;return t*s-3*e+3*n}function l(t,e,n,r,i,a,s,o,l){null==l&&(l=1),l=l>1?1:0>l?0:l;for(var u=l/2,h=12,f=[-.1252,.1252,-.3678,.3678,-.5873,.5873,-.7699,.7699,-.9041,.9041,-.9816,.9816],g=[.2491,.2491,.2335,.2335,.2032,.2032,.1601,.1601,.1069,.1069,.0472,.0472],d=0,p=0;h>p;p++){var v=u*f[p]+u,m=c(v,t,n,i,s),x=c(v,e,r,a,o),y=m*m+x*x;d+=g[p]*E.sqrt(y)}return u*d}function u(t,e,n,r,i,a,s,o,c){if(!(0>c||l(t,e,n,r,i,a,s,o)d;)f/=2,g+=(c>u?1:-1)*f,u=l(t,e,n,r,i,a,s,o,g);return g}}function h(t,e,n,r,i,a,s,o){if(!(z(t,n)z(i,s)||z(e,r)z(a,o))){var c=(t*r-e*n)*(i-s)-(t-n)*(i*o-a*s),l=(t*r-e*n)*(a-o)-(e-r)*(i*o-a*s),u=(t-n)*(a-o)-(e-r)*(i-s);if(u){var h=c/u,f=l/u,g=+h.toFixed(2),d=+f.toFixed(2);if(!(g<+U(t,n).toFixed(2)||g>+z(t,n).toFixed(2)||g<+U(i,s).toFixed(2)||g>+z(i,s).toFixed(2)||d<+U(e,r).toFixed(2)||d>+z(e,r).toFixed(2)||d<+U(a,o).toFixed(2)||d>+z(a,o).toFixed(2)))return{x:h,y:f}}}}function f(t,e,r){var i=n.bezierBBox(t),a=n.bezierBBox(e);if(!n.isBBoxIntersect(i,a))return r?0:[];for(var s=l.apply(0,t),o=l.apply(0,e),c=z(~~(s/5),1),u=z(~~(o/5),1),f=[],g=[],d={},p=r?0:[],v=0;c+1>v;v++){var m=n.findDotsAtSegment.apply(n,t.concat(v/c));f.push({x:m.x,y:m.y,t:v/c})}for(v=0;u+1>v;v++)m=n.findDotsAtSegment.apply(n,e.concat(v/u)),g.push({x:m.x,y:m.y,t:v/u});for(v=0;c>v;v++)for(var x=0;u>x;x++){var y=f[v],b=f[v+1],_=g[x],k=g[x+1],w=V(b.x-y.x)<.001?"y":"x",C=V(k.x-_.x)<.001?"y":"x",S=h(y.x,y.y,b.x,b.y,_.x,_.y,k.x,k.y);if(S){if(d[S.x.toFixed(4)]==S.y.toFixed(4))continue;d[S.x.toFixed(4)]=S.y.toFixed(4);var A=y.t+V((S[w]-y[w])/(b[w]-y[w]))*(b.t-y.t),T=_.t+V((S[C]-_[C])/(k[C]-_[C]))*(k.t-_.t);A>=0&&1.001>=A&&T>=0&&1.001>=T&&(r?p++:p.push({x:S.x,y:S.y,t1:U(A,1),t2:U(T,1)}))}}return p}function g(t,e,r){t=n._path2curve(t),e=n._path2curve(e);for(var i,a,s,o,c,l,u,h,g,d,p=r?0:[],v=0,m=t.length;m>v;v++){var x=t[v];if("M"==x[0])i=c=x[1],a=l=x[2];else{"C"==x[0]?(g=[i,a].concat(x.slice(1)),i=g[6],a=g[7]):(g=[i,a,i,a,c,l,c,l],i=c,a=l);for(var y=0,b=e.length;b>y;y++){var _=e[y];if("M"==_[0])s=u=_[1],o=h=_[2];else{"C"==_[0]?(d=[s,o].concat(_.slice(1)),s=d[6],o=d[7]):(d=[s,o,s,o,u,h,u,h],s=u,o=h);var k=f(g,d,r);if(r)p+=k;else{for(var w=0,C=k.length;C>w;w++)k[w].segment1=v,k[w].segment2=y,k[w].bez1=g,k[w].bez2=d;p=p.concat(k)}}}}}return p}function d(t,e,n,r,i,a){null!=t?(this.a=+t,this.b=+e,this.c=+n,this.d=+r,this.e=+i,this.f=+a):(this.a=1,this.b=0,this.c=0,this.d=1,this.e=0,this.f=0)}function p(){return this.x+R+this.y+R+this.width+" \xd7 "+this.height}function v(t,e,n,r,i,a){function s(t){return((h*t+u)*t+l)*t}function o(t,e){var n=c(t,e);return((d*n+g)*n+f)*n}function c(t,e){var n,r,i,a,o,c;for(i=t,c=0;8>c;c++){if(a=s(i)-t,V(a)i)return n;if(i>r)return r;for(;r>n;){if(a=s(i),V(a-t)a?n=i:r=i,i=(r-n)/2+n}return i}var l=3*e,u=3*(r-e)-l,h=1-l-u,f=3*n,g=3*(i-n)-f,d=1-f-g;return o(t,1/(200*a))}function m(t,e){var n=[],r={};if(this.ms=e,this.times=1,t){for(var i in t)t[S](i)&&(r[K(i)]=t[i],n.push(K(i)));n.sort(he)}this.anim=r,this.top=n[n.length-1],this.percents=n}function x(t,r,i,a,s,o){i=K(i);var c,l,u,h,f,g,p=t.ms,m={},x={},y={};if(a)for(_=0,w=ln.length;w>_;_++){var b=ln[_];if(b.el.id==r.id&&b.anim==t){b.percent!=i?(ln.splice(_,1),u=1):l=b,r.attr(b.totalOrigin);break}}else a=+x;for(var _=0,w=t.percents.length;w>_;_++){if(t.percents[_]==i||t.percents[_]>a*t.top){i=t.percents[_],f=t.percents[_-1]||0,p=p/t.top*(i-f),h=t.percents[_+1],c=t.anim[i];break}a&&r.attr(t.anim[t.percents[_]])}if(c){if(l)l.initstatus=a,l.start=new Date-l.ms*a;else{for(var C in c)if(c[S](C)&&(re[S](C)||r.paper.customAttributes[S](C)))switch(m[C]=r.attr(C),null==m[C]&&(m[C]=ne[C]),x[C]=c[C],re[C]){case H:y[C]=(x[C]-m[C])/p;break;case"colour":m[C]=n.getRGB(m[C]);var A=n.getRGB(x[C]);y[C]={r:(A.r-m[C].r)/p,g:(A.g-m[C].g)/p,b:(A.b-m[C].b)/p};break;case"path":var T=Ne(m[C],x[C]),I=T[1];for(m[C]=T[0],y[C]=[],_=0,w=m[C].length;w>_;_++){y[C][_]=[0];for(var P=1,B=m[C][_].length;B>P;P++)y[C][_][P]=(I[_][P]-m[C][_][P])/p}break;case"transform":var M=r._,R=Ue(M[C],x[C]);if(R)for(m[C]=R.from,x[C]=R.to,y[C]=[],y[C].real=!0,_=0,w=m[C].length;w>_;_++)for(y[C][_]=[m[C][_][0]],P=1,B=m[C][_].length;B>P;P++)y[C][_][P]=(x[C][_][P]-m[C][_][P])/p;else{var N=r.matrix||new d,F={_:{transform:M.transform},getBBox:function(){return r.getBBox(1)}};m[C]=[N.a,N.b,N.c,N.d,N.e,N.f],Ee(F,x[C]),x[C]=F._.transform,y[C]=[(F.matrix.a-N.a)/p,(F.matrix.b-N.b)/p,(F.matrix.c-N.c)/p,(F.matrix.d-N.d)/p,(F.matrix.e-N.e)/p,(F.matrix.f-N.f)/p]}break;case"csv":var G=O(c[C])[D](k),E=O(m[C])[D](k);if("clip-rect"==C)for(m[C]=E,y[C]=[],_=E.length;_--;)y[C][_]=(G[_]-m[C][_])/p;x[C]=G;break;default:for(G=[][L](c[C]),E=[][L](m[C]),y[C]=[],_=r.paper.customAttributes[C].length;_--;)y[C][_]=((G[_]||0)-(E[_]||0))/p}var z=c.easing,U=n.easing_formulas[z];if(!U)if(U=O(z).match(J),U&&5==U.length){var V=U;U=function(t){return v(t,+V[1],+V[2],+V[3],+V[4],p)}}else U=ge;if(g=c.start||t.start||+new Date,b={anim:t,percent:i,timestamp:g,start:g+(t.del||0),status:0,initstatus:a||0,stop:!1,ms:p,easing:U,from:m,diff:y,to:x,el:r,callback:c.callback,prev:f,next:h,repeat:o||t.times,origin:r.attr(),totalOrigin:s},ln.push(b),a&&!l&&!u&&(b.stop=!0,b.start=new Date-p*a,1==ln.length))return hn();u&&(b.start=new Date-b.ms*a),1==ln.length&&un(hn)}e("raphael.anim.start."+r.id,r,t)}}function y(t){for(var e=0;ei;i++)for(c=t[i],a=1,o=c.length;o>a;a+=2)n=e.x(c[a],c[a+1]),r=e.y(c[a],c[a+1]),c[a]=n,c[a+1]=r;return t};if(n._g=A,n.type=A.win.SVGAngle||A.doc.implementation.hasFeature("http://www.w3.org/TR/SVG11/feature#BasicStructure","1.1")?"SVG":"VML","VML"==n.type){var xe,ye=A.doc.createElement("div");if(ye.innerHTML='',xe=ye.firstChild,xe.style.behavior="url(#default#VML)",!xe||"object"!=typeof xe.adj)return n.type=M;ye=null}n.svg=!(n.vml="VML"==n.type),n._Paper=I,n.fn=_=I.prototype=n.prototype,n._id=0,n._oid=0,n.is=function(t,e){return e=G.call(e),"finite"==e?!Z[S](+t):"array"==e?t instanceof Array:"null"==e&&null===t||e==typeof t&&null!==t||"object"==e&&t===Object(t)||"array"==e&&Array.isArray&&Array.isArray(t)||X.call(t).slice(8,-1).toLowerCase()==e},n.angle=function(t,e,r,i,a,s){if(null==a){var o=t-r,c=e-i;return o||c?(180+180*E.atan2(-c,-o)/Y+360)%360:0}return n.angle(t,e,a,s)-n.angle(r,i,a,s)},n.rad=function(t){return t%360*Y/180},n.deg=function(t){return 180*t/Y%360},n.snapTo=function(t,e,r){if(r=n.is(r,"finite")?r:10,n.is(t,q)){for(var i=t.length;i--;)if(V(t[i]-e)<=r)return t[i]}else{t=+t;var a=e%t;if(r>a)return e-a;if(a>t-r)return e-a+t}return e};n.createUUID=function(t,e){return function(){return"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(t,e).toUpperCase()}}(/[xy]/g,function(t){var e=16*E.random()|0,n="x"==t?e:3&e|8;return n.toString(16)});n.setWindow=function(t){e("raphael.setWindow",n,A.win,t),A.win=t,A.doc=A.win.document,n._engine.initWin&&n._engine.initWin(A.win)};var be=function(t){if(n.vml){var e,r=/^\s+|\s+$/g;try{var i=new ActiveXObject("htmlfile");i.write(""),i.close(),e=i.body}catch(s){e=createPopup().document.body}var o=e.createTextRange();be=a(function(t){try{e.style.color=O(t).replace(r,M);var n=o.queryCommandValue("ForeColor");return n=(255&n)<<16|65280&n|(16711680&n)>>>16,"#"+("000000"+n.toString(16)).slice(-6)}catch(i){return"none"}})}else{var c=A.doc.createElement("i");c.title="Rapha\xebl Colour Picker",c.style.display="none",A.doc.body.appendChild(c),be=a(function(t){return c.style.color=t,A.doc.defaultView.getComputedStyle(c,M).getPropertyValue("color")})}return be(t)},_e=function(){return"hsb("+[this.h,this.s,this.b]+")"},ke=function(){return"hsl("+[this.h,this.s,this.l]+")"},we=function(){return this.hex},Ce=function(t,e,r){if(null==e&&n.is(t,"object")&&"r"in t&&"g"in t&&"b"in t&&(r=t.b,e=t.g,t=t.r),null==e&&n.is(t,W)){var i=n.getRGB(t);t=i.r,e=i.g,r=i.b}return(t>1||e>1||r>1)&&(t/=255,e/=255,r/=255),[t,e,r]},Se=function(t,e,r,i){t*=255,e*=255,r*=255;var a={r:t,g:e,b:r,hex:n.rgb(t,e,r),toString:we};return n.is(i,"finite")&&(a.opacity=i),a};n.color=function(t){var e;return n.is(t,"object")&&"h"in t&&"s"in t&&"b"in t?(e=n.hsb2rgb(t),t.r=e.r,t.g=e.g,t.b=e.b,t.hex=e.hex):n.is(t,"object")&&"h"in t&&"s"in t&&"l"in t?(e=n.hsl2rgb(t),t.r=e.r,t.g=e.g,t.b=e.b,t.hex=e.hex):(n.is(t,"string")&&(t=n.getRGB(t)),n.is(t,"object")&&"r"in t&&"g"in t&&"b"in t?(e=n.rgb2hsl(t),t.h=e.h,t.s=e.s,t.l=e.l,e=n.rgb2hsb(t),t.v=e.b):(t={hex:"none"},t.r=t.g=t.b=t.h=t.s=t.v=t.l=-1)),t.toString=we,t},n.hsb2rgb=function(t,e,n,r){this.is(t,"object")&&"h"in t&&"s"in t&&"b"in t&&(n=t.b,e=t.s,t=t.h,r=t.o),t*=360;var i,a,s,o,c;return t=t%360/60,c=n*e,o=c*(1-V(t%2-1)),i=a=s=n-c,t=~~t,i+=[c,o,0,0,o,c][t],a+=[o,c,c,o,0,0][t],s+=[0,0,o,c,c,o][t],Se(i,a,s,r)},n.hsl2rgb=function(t,e,n,r){this.is(t,"object")&&"h"in t&&"s"in t&&"l"in t&&(n=t.l,e=t.s,t=t.h),(t>1||e>1||n>1)&&(t/=360,e/=100,n/=100),t*=360;var i,a,s,o,c;return t=t%360/60,c=2*e*(.5>n?n:1-n),o=c*(1-V(t%2-1)),i=a=s=n-c/2,t=~~t,i+=[c,o,0,0,o,c][t],a+=[o,c,c,o,0,0][t],s+=[0,0,o,c,c,o][t],Se(i,a,s,r)},n.rgb2hsb=function(t,e,n){n=Ce(t,e,n),t=n[0],e=n[1],n=n[2];var r,i,a,s;return a=z(t,e,n),s=a-U(t,e,n),r=0==s?null:a==t?(e-n)/s:a==e?(n-t)/s+2:(t-e)/s+4,r=(r+360)%6*60/360,i=0==s?0:s/a,{h:r,s:i,b:a,toString:_e}},n.rgb2hsl=function(t,e,n){n=Ce(t,e,n),t=n[0],e=n[1],n=n[2];var r,i,a,s,o,c;return s=z(t,e,n),o=U(t,e,n),c=s-o,r=0==c?null:s==t?(e-n)/c:s==e?(n-t)/c+2:(t-e)/c+4,r=(r+360)%6*60/360,a=(s+o)/2,i=0==c?0:.5>a?c/(2*a):c/(2-2*a),{h:r,s:i,l:a,toString:ke}},n._path2string=function(){return this.join(",").replace(se,"$1")};n._preload=function(t,e){var n=A.doc.createElement("img");n.style.cssText="position:absolute;left:-9999em;top:-9999em",n.onload=function(){e.call(this),this.onload=null,A.doc.body.removeChild(this)},n.onerror=function(){A.doc.body.removeChild(this)},A.doc.body.appendChild(n),n.src=t};n.getRGB=a(function(t){if(!t||(t=O(t)).indexOf("-")+1)return{r:-1,g:-1,b:-1,hex:"none",error:1,toString:s};if("none"==t)return{r:-1,g:-1,b:-1,hex:"none",toString:s};!(ae[S](t.toLowerCase().substring(0,2))||"#"==t.charAt())&&(t=be(t));var e,r,i,a,o,c,l=t.match($);return l?(l[2]&&(i=te(l[2].substring(5),16),r=te(l[2].substring(3,5),16),e=te(l[2].substring(1,3),16)),l[3]&&(i=te((o=l[3].charAt(3))+o,16),r=te((o=l[3].charAt(2))+o,16),e=te((o=l[3].charAt(1))+o,16)),l[4]&&(c=l[4][D](ie),e=K(c[0]),"%"==c[0].slice(-1)&&(e*=2.55),r=K(c[1]),"%"==c[1].slice(-1)&&(r*=2.55),i=K(c[2]),"%"==c[2].slice(-1)&&(i*=2.55),"rgba"==l[1].toLowerCase().slice(0,4)&&(a=K(c[3])),c[3]&&"%"==c[3].slice(-1)&&(a/=100)),l[5]?(c=l[5][D](ie),e=K(c[0]),"%"==c[0].slice(-1)&&(e*=2.55),r=K(c[1]),"%"==c[1].slice(-1)&&(r*=2.55),i=K(c[2]),"%"==c[2].slice(-1)&&(i*=2.55),("deg"==c[0].slice(-3)||"\xb0"==c[0].slice(-1))&&(e/=360),"hsba"==l[1].toLowerCase().slice(0,4)&&(a=K(c[3])),c[3]&&"%"==c[3].slice(-1)&&(a/=100),n.hsb2rgb(e,r,i,a)):l[6]?(c=l[6][D](ie),e=K(c[0]),"%"==c[0].slice(-1)&&(e*=2.55),r=K(c[1]),"%"==c[1].slice(-1)&&(r*=2.55),i=K(c[2]),"%"==c[2].slice(-1)&&(i*=2.55),("deg"==c[0].slice(-3)||"\xb0"==c[0].slice(-1))&&(e/=360),"hsla"==l[1].toLowerCase().slice(0,4)&&(a=K(c[3])),c[3]&&"%"==c[3].slice(-1)&&(a/=100),n.hsl2rgb(e,r,i,a)):(l={r:e,g:r,b:i,toString:s},l.hex="#"+(16777216|i|r<<8|e<<16).toString(16).slice(1),n.is(a,"finite")&&(l.opacity=a),l)):{r:-1,g:-1,b:-1,hex:"none",error:1,toString:s}},n),n.hsb=a(function(t,e,r){return n.hsb2rgb(t,e,r).hex}),n.hsl=a(function(t,e,r){return n.hsl2rgb(t,e,r).hex}),n.rgb=a(function(t,e,n){return"#"+(16777216|n|e<<8|t<<16).toString(16).slice(1)}),n.getColor=function(t){var e=this.getColor.start=this.getColor.start||{h:0,s:1,b:t||.75},n=this.hsb2rgb(e.h,e.s,e.b);return e.h+=.075,e.h>1&&(e.h=0,e.s-=.2,e.s<=0&&(this.getColor.start={h:0,s:1,b:e.b})),n.hex},n.getColor.reset=function(){delete this.start},n.parsePathString=function(t){if(!t)return null;var e=Ae(t);if(e.arr)return Ie(e.arr);var r={a:7,c:6,h:1,l:2,m:2,r:4,q:4,s:4,t:2,v:1,z:0},i=[];return n.is(t,q)&&n.is(t[0],q)&&(i=Ie(t)),i.length||O(t).replace(oe,function(t,e,n){var a=[],s=e.toLowerCase();if(n.replace(le,function(t,e){e&&a.push(+e)}),"m"==s&&a.length>2&&(i.push([e][L](a.splice(0,2))),s="l",e="m"==e?"l":"L"),"r"==s)i.push([e][L](a));else for(;a.length>=r[s]&&(i.push([e][L](a.splice(0,r[s]))),r[s]););}),i.toString=n._path2string,e.arr=Ie(i),i},n.parseTransformString=a(function(t){if(!t)return null;var e=[];return n.is(t,q)&&n.is(t[0],q)&&(e=Ie(t)),e.length||O(t).replace(ce,function(t,n,r){{var i=[];G.call(n)}r.replace(le,function(t,e){e&&i.push(+e)}),e.push([n][L](i))}),e.toString=n._path2string,e});var Ae=function(t){var e=Ae.ps=Ae.ps||{};return e[t]?e[t].sleep=100:e[t]={sleep:100},setTimeout(function(){for(var n in e)e[S](n)&&n!=t&&(e[n].sleep--,!e[n].sleep&&delete e[n])}),e[t]};n.findDotsAtSegment=function(t,e,n,r,i,a,s,o,c){var l=1-c,u=j(l,3),h=j(l,2),f=c*c,g=f*c,d=u*t+3*h*c*n+3*l*c*c*i+g*s,p=u*e+3*h*c*r+3*l*c*c*a+g*o,v=t+2*c*(n-t)+f*(i-2*n+t),m=e+2*c*(r-e)+f*(a-2*r+e),x=n+2*c*(i-n)+f*(s-2*i+n),y=r+2*c*(a-r)+f*(o-2*a+r),b=l*t+c*n,_=l*e+c*r,k=l*i+c*s,w=l*a+c*o,C=90-180*E.atan2(v-x,m-y)/Y;return(v>x||y>m)&&(C+=180),{x:d,y:p,m:{x:v,y:m},n:{x:x,y:y},start:{x:b,y:_},end:{x:k,y:w},alpha:C}},n.bezierBBox=function(t,e,r,i,a,s,o,c){n.is(t,"array")||(t=[t,e,r,i,a,s,o,c]);var l=De.apply(null,t);return{x:l.min.x,y:l.min.y,x2:l.max.x,y2:l.max.y,width:l.max.x-l.min.x,height:l.max.y-l.min.y}},n.isPointInsideBBox=function(t,e,n){return e>=t.x&&e<=t.x2&&n>=t.y&&n<=t.y2},n.isBBoxIntersect=function(t,e){var r=n.isPointInsideBBox;return r(e,t.x,t.y)||r(e,t.x2,t.y)||r(e,t.x,t.y2)||r(e,t.x2,t.y2)||r(t,e.x,e.y)||r(t,e.x2,e.y)||r(t,e.x,e.y2)||r(t,e.x2,e.y2)||(t.xe.x||e.xt.x)&&(t.ye.y||e.yt.y)},n.pathIntersection=function(t,e){return g(t,e)},n.pathIntersectionNumber=function(t,e){return g(t,e,1)},n.isPointInsidePath=function(t,e,r){var i=n.pathBBox(t);return n.isPointInsideBBox(i,e,r)&&g(t,[["M",e,r],["H",i.x2+10]],1)%2==1},n._removedFactory=function(t){return function(){e("raphael.log",null,"Rapha\xebl: you are calling to method \u201c"+t+"\u201d of removed object",t)}};var Te=n.pathBBox=function(t){var e=Ae(t);if(e.bbox)return r(e.bbox);if(!t)return{x:0,y:0,width:0,height:0,x2:0,y2:0};t=Ne(t);for(var n,i=0,a=0,s=[],o=[],c=0,l=t.length;l>c;c++)if(n=t[c],"M"==n[0])i=n[1],a=n[2],s.push(i),o.push(a);else{var u=De(i,a,n[1],n[2],n[3],n[4],n[5],n[6]);s=s[L](u.min.x,u.max.x),o=o[L](u.min.y,u.max.y),i=n[5],a=n[6]}var h=U[P](0,s),f=U[P](0,o),g=z[P](0,s),d=z[P](0,o),p=g-h,v=d-f,m={x:h,y:f,x2:g,y2:d,width:p,height:v,cx:h+p/2,cy:f+v/2};return e.bbox=r(m),m},Ie=function(t){var e=r(t);return e.toString=n._path2string,e},Pe=n._pathToRelative=function(t){var e=Ae(t);if(e.rel)return Ie(e.rel);n.is(t,q)&&n.is(t&&t[0],q)||(t=n.parsePathString(t));var r=[],i=0,a=0,s=0,o=0,c=0;"M"==t[0][0]&&(i=t[0][1],a=t[0][2],s=i,o=a,c++,r.push(["M",i,a]));for(var l=c,u=t.length;u>l;l++){var h=r[l]=[],f=t[l];if(f[0]!=G.call(f[0]))switch(h[0]=G.call(f[0]),h[0]){case"a":h[1]=f[1],h[2]=f[2],h[3]=f[3],h[4]=f[4],h[5]=f[5],h[6]=+(f[6]-i).toFixed(3),h[7]=+(f[7]-a).toFixed(3);break;case"v":h[1]=+(f[1]-a).toFixed(3);break;case"m":s=f[1],o=f[2];default:for(var g=1,d=f.length;d>g;g++)h[g]=+(f[g]-(g%2?i:a)).toFixed(3)}else{h=r[l]=[],"m"==f[0]&&(s=f[1]+i,o=f[2]+a);for(var p=0,v=f.length;v>p;p++)r[l][p]=f[p]}var m=r[l].length;switch(r[l][0]){case"z":i=s,a=o;break;case"h":i+=+r[l][m-1];break;case"v":a+=+r[l][m-1];break;default:i+=+r[l][m-2],a+=+r[l][m-1]}}return r.toString=n._path2string,e.rel=Ie(r),r},Le=n._pathToAbsolute=function(t){var e=Ae(t);if(e.abs)return Ie(e.abs);if(n.is(t,q)&&n.is(t&&t[0],q)||(t=n.parsePathString(t)),!t||!t.length)return[["M",0,0]];var r=[],i=0,a=0,s=0,c=0,l=0;"M"==t[0][0]&&(i=+t[0][1],a=+t[0][2],s=i,c=a,l++,r[0]=["M",i,a]);for(var u,h,f=3==t.length&&"M"==t[0][0]&&"R"==t[1][0].toUpperCase()&&"Z"==t[2][0].toUpperCase(),g=l,d=t.length;d>g;g++){if(r.push(u=[]),h=t[g],h[0]!=ee.call(h[0]))switch(u[0]=ee.call(h[0]),u[0]){case"A":u[1]=h[1],u[2]=h[2],u[3]=h[3],u[4]=h[4],u[5]=h[5],u[6]=+(h[6]+i),u[7]=+(h[7]+a);break;case"V":u[1]=+h[1]+a;break;case"H":u[1]=+h[1]+i;break;case"R":for(var p=[i,a][L](h.slice(1)),v=2,m=p.length;m>v;v++)p[v]=+p[v]+i,p[++v]=+p[v]+a;r.pop(),r=r[L](o(p,f));break;case"M":s=+h[1]+i,c=+h[2]+a;default:for(v=1,m=h.length;m>v;v++)u[v]=+h[v]+(v%2?i:a)}else if("R"==h[0])p=[i,a][L](h.slice(1)),r.pop(),r=r[L](o(p,f)),u=["R"][L](h.slice(-2));else for(var x=0,y=h.length;y>x;x++)u[x]=h[x];switch(u[0]){case"Z":i=s,a=c;break;case"H":i=u[1];break;case"V":a=u[1];break;case"M":s=u[u.length-2],c=u[u.length-1];default:i=u[u.length-2],a=u[u.length-1]}}return r.toString=n._path2string,e.abs=Ie(r),r},Be=function(t,e,n,r){return[t,e,n,r,n,r]},Me=function(t,e,n,r,i,a){var s=1/3,o=2/3;return[s*t+o*n,s*e+o*r,s*i+o*n,s*a+o*r,i,a]},Re=function(t,e,n,r,i,s,o,c,l,u){var h,f=120*Y/180,g=Y/180*(+i||0),d=[],p=a(function(t,e,n){var r=t*E.cos(n)-e*E.sin(n),i=t*E.sin(n)+e*E.cos(n);return{x:r,y:i}});if(u)C=u[0],S=u[1],k=u[2],w=u[3];else{h=p(t,e,-g),t=h.x,e=h.y,h=p(c,l,-g),c=h.x,l=h.y;var v=(E.cos(Y/180*i),E.sin(Y/180*i),(t-c)/2),m=(e-l)/2,x=v*v/(n*n)+m*m/(r*r);x>1&&(x=E.sqrt(x),n=x*n,r=x*r);var y=n*n,b=r*r,_=(s==o?-1:1)*E.sqrt(V((y*b-y*m*m-b*v*v)/(y*m*m+b*v*v))),k=_*n*m/r+(t+c)/2,w=_*-r*v/n+(e+l)/2,C=E.asin(((e-w)/r).toFixed(9)),S=E.asin(((l-w)/r).toFixed(9));C=k>t?Y-C:C,S=k>c?Y-S:S,0>C&&(C=2*Y+C),0>S&&(S=2*Y+S),o&&C>S&&(C-=2*Y),!o&&S>C&&(S-=2*Y)}var A=S-C;if(V(A)>f){var T=S,I=c,P=l;S=C+f*(o&&S>C?1:-1),c=k+n*E.cos(S),l=w+r*E.sin(S),d=Re(c,l,n,r,i,0,o,I,P,[S,T,k,w])}A=S-C;var B=E.cos(C),M=E.sin(C),R=E.cos(S),O=E.sin(S),N=E.tan(A/4),F=4/3*n*N,G=4/3*r*N,z=[t,e],U=[t+F*M,e-G*B],j=[c+F*O,l-G*R],H=[c,l];if(U[0]=2*z[0]-U[0],U[1]=2*z[1]-U[1],u)return[U,j,H][L](d);d=[U,j,H][L](d).join()[D](",");for(var W=[],q=0,X=d.length;X>q;q++)W[q]=q%2?p(d[q-1],d[q],g).y:p(d[q],d[q+1],g).x;return W},Oe=function(t,e,n,r,i,a,s,o,c){var l=1-c;return{x:j(l,3)*t+3*j(l,2)*c*n+3*l*c*c*i+j(c,3)*s,y:j(l,3)*e+3*j(l,2)*c*r+3*l*c*c*a+j(c,3)*o}},De=a(function(t,e,n,r,i,a,s,o){var c,l=i-2*n+t-(s-2*i+n),u=2*(n-t)-2*(i-n),h=t-n,f=(-u+E.sqrt(u*u-4*l*h))/2/l,g=(-u-E.sqrt(u*u-4*l*h))/2/l,d=[e,o],p=[t,s];return V(f)>"1e12"&&(f=.5),V(g)>"1e12"&&(g=.5),f>0&&1>f&&(c=Oe(t,e,n,r,i,a,s,o,f),p.push(c.x),d.push(c.y)),g>0&&1>g&&(c=Oe(t,e,n,r,i,a,s,o,g),p.push(c.x),d.push(c.y)),l=a-2*r+e-(o-2*a+r),u=2*(r-e)-2*(a-r),h=e-r,f=(-u+E.sqrt(u*u-4*l*h))/2/l,g=(-u-E.sqrt(u*u-4*l*h))/2/l,V(f)>"1e12"&&(f=.5),V(g)>"1e12"&&(g=.5),f>0&&1>f&&(c=Oe(t,e,n,r,i,a,s,o,f),p.push(c.x),d.push(c.y)),g>0&&1>g&&(c=Oe(t,e,n,r,i,a,s,o,g),p.push(c.x),d.push(c.y)),{min:{x:U[P](0,p),y:U[P](0,d)},max:{x:z[P](0,p),y:z[P](0,d)}} +}),Ne=n._path2curve=a(function(t,e){var n=!e&&Ae(t);if(!e&&n.curve)return Ie(n.curve);for(var r=Le(t),i=e&&Le(e),a={x:0,y:0,bx:0,by:0,X:0,Y:0,qx:null,qy:null},s={x:0,y:0,bx:0,by:0,X:0,Y:0,qx:null,qy:null},o=(function(t,e,n){var r,i;if(!t)return["C",e.x,e.y,e.x,e.y,e.x,e.y];switch(!(t[0]in{T:1,Q:1})&&(e.qx=e.qy=null),t[0]){case"M":e.X=t[1],e.Y=t[2];break;case"A":t=["C"][L](Re[P](0,[e.x,e.y][L](t.slice(1))));break;case"S":"C"==n||"S"==n?(r=2*e.x-e.bx,i=2*e.y-e.by):(r=e.x,i=e.y),t=["C",r,i][L](t.slice(1));break;case"T":"Q"==n||"T"==n?(e.qx=2*e.x-e.qx,e.qy=2*e.y-e.qy):(e.qx=e.x,e.qy=e.y),t=["C"][L](Me(e.x,e.y,e.qx,e.qy,t[1],t[2]));break;case"Q":e.qx=t[1],e.qy=t[2],t=["C"][L](Me(e.x,e.y,t[1],t[2],t[3],t[4]));break;case"L":t=["C"][L](Be(e.x,e.y,t[1],t[2]));break;case"H":t=["C"][L](Be(e.x,e.y,t[1],e.y));break;case"V":t=["C"][L](Be(e.x,e.y,e.x,t[1]));break;case"Z":t=["C"][L](Be(e.x,e.y,e.X,e.Y))}return t}),c=function(t,e){if(t[e].length>7){t[e].shift();for(var n=t[e];n.length;)t.splice(e++,0,["C"][L](n.splice(0,6)));t.splice(e,1),h=z(r.length,i&&i.length||0)}},l=function(t,e,n,a,s){t&&e&&"M"==t[s][0]&&"M"!=e[s][0]&&(e.splice(s,0,["M",a.x,a.y]),n.bx=0,n.by=0,n.x=t[s][1],n.y=t[s][2],h=z(r.length,i&&i.length||0))},u=0,h=z(r.length,i&&i.length||0);h>u;u++){r[u]=o(r[u],a),c(r,u),i&&(i[u]=o(i[u],s)),i&&c(i,u),l(r,i,a,s,u),l(i,r,s,a,u);var f=r[u],g=i&&i[u],d=f.length,p=i&&g.length;a.x=f[d-2],a.y=f[d-1],a.bx=K(f[d-4])||a.x,a.by=K(f[d-3])||a.y,s.bx=i&&(K(g[p-4])||s.x),s.by=i&&(K(g[p-3])||s.y),s.x=i&&g[p-2],s.y=i&&g[p-1]}return i||(n.curve=Ie(r)),i?[r,i]:r},null,Ie),Fe=(n._parseDots=a(function(t){for(var e=[],r=0,i=t.length;i>r;r++){var a={},s=t[r].match(/^([^:]*):?([\d\.]*)/);if(a.color=n.getRGB(s[1]),a.color.error)return null;a.color=a.color.hex,s[2]&&(a.offset=s[2]+"%"),e.push(a)}for(r=1,i=e.length-1;i>r;r++)if(!e[r].offset){for(var o=K(e[r-1].offset||0),c=0,l=r+1;i>l;l++)if(e[l].offset){c=e[l].offset;break}c||(c=100,l=i),c=K(c);for(var u=(c-o)/(l-r+1);l>r;r++)o+=u,e[r].offset=o+"%"}return e}),n._tear=function(t,e){t==e.top&&(e.top=t.prev),t==e.bottom&&(e.bottom=t.next),t.next&&(t.next.prev=t.prev),t.prev&&(t.prev.next=t.next)}),Ge=(n._tofront=function(t,e){e.top!==t&&(Fe(t,e),t.next=null,t.prev=e.top,e.top.next=t,e.top=t)},n._toback=function(t,e){e.bottom!==t&&(Fe(t,e),t.next=e.bottom,t.prev=null,e.bottom.prev=t,e.bottom=t)},n._insertafter=function(t,e,n){Fe(t,n),e==n.top&&(n.top=t),e.next&&(e.next.prev=t),t.next=e.next,t.prev=e,e.next=t},n._insertbefore=function(t,e,n){Fe(t,n),e==n.bottom&&(n.bottom=t),e.prev&&(e.prev.next=t),t.prev=e.prev,e.prev=t,t.next=e},n.toMatrix=function(t,e){var n=Te(t),r={_:{transform:M},getBBox:function(){return n}};return Ee(r,e),r.matrix}),Ee=(n.transformPath=function(t,e){return me(t,Ge(t,e))},n._extractTransform=function(t,e){if(null==e)return t._.transform;e=O(e).replace(/\.{3}|\u2026/g,t._.transform||M);var r=n.parseTransformString(e),i=0,a=0,s=0,o=1,c=1,l=t._,u=new d;if(l.transform=r||[],r)for(var h=0,f=r.length;f>h;h++){var g,p,v,m,x,y=r[h],b=y.length,_=O(y[0]).toLowerCase(),k=y[0]!=_,w=k?u.invert():0;"t"==_&&3==b?k?(g=w.x(0,0),p=w.y(0,0),v=w.x(y[1],y[2]),m=w.y(y[1],y[2]),u.translate(v-g,m-p)):u.translate(y[1],y[2]):"r"==_?2==b?(x=x||t.getBBox(1),u.rotate(y[1],x.x+x.width/2,x.y+x.height/2),i+=y[1]):4==b&&(k?(v=w.x(y[2],y[3]),m=w.y(y[2],y[3]),u.rotate(y[1],v,m)):u.rotate(y[1],y[2],y[3]),i+=y[1]):"s"==_?2==b||3==b?(x=x||t.getBBox(1),u.scale(y[1],y[b-1],x.x+x.width/2,x.y+x.height/2),o*=y[1],c*=y[b-1]):5==b&&(k?(v=w.x(y[3],y[4]),m=w.y(y[3],y[4]),u.scale(y[1],y[2],v,m)):u.scale(y[1],y[2],y[3],y[4]),o*=y[1],c*=y[2]):"m"==_&&7==b&&u.add(y[1],y[2],y[3],y[4],y[5],y[6]),l.dirtyT=1,t.matrix=u}t.matrix=u,l.sx=o,l.sy=c,l.deg=i,l.dx=a=u.e,l.dy=s=u.f,1==o&&1==c&&!i&&l.bbox?(l.bbox.x+=+a,l.bbox.y+=+s):l.dirtyT=1}),ze=function(t){var e=t[0];switch(e.toLowerCase()){case"t":return[e,0,0];case"m":return[e,1,0,0,1,0,0];case"r":return 4==t.length?[e,0,t[2],t[3]]:[e,0];case"s":return 5==t.length?[e,1,1,t[3],t[4]]:3==t.length?[e,1,1]:[e,1]}},Ue=n._equaliseTransform=function(t,e){e=O(e).replace(/\.{3}|\u2026/g,t),t=n.parseTransformString(t)||[],e=n.parseTransformString(e)||[];for(var r,i,a,s,o=z(t.length,e.length),c=[],l=[],u=0;o>u;u++){if(a=t[u]||ze(e[u]),s=e[u]||ze(a),a[0]!=s[0]||"r"==a[0].toLowerCase()&&(a[2]!=s[2]||a[3]!=s[3])||"s"==a[0].toLowerCase()&&(a[3]!=s[3]||a[4]!=s[4]))return;for(c[u]=[],l[u]=[],r=0,i=z(a.length,s.length);i>r;r++)r in a&&(c[u][r]=a[r]),r in s&&(l[u][r]=s[r])}return{from:c,to:l}};n._getContainer=function(t,e,r,i){var a;return a=null!=i||n.is(t,"object")?t:A.doc.getElementById(t),null!=a?a.tagName?null==e?{container:a,width:a.style.pixelWidth||a.offsetWidth,height:a.style.pixelHeight||a.offsetHeight}:{container:a,width:e,height:r}:{container:1,x:t,y:e,width:r,height:i}:void 0},n.pathToRelative=Pe,n._engine={},n.path2curve=Ne,n.matrix=function(t,e,n,r,i,a){return new d(t,e,n,r,i,a)},function(t){function e(t){return t[0]*t[0]+t[1]*t[1]}function r(t){var n=E.sqrt(e(t));t[0]&&(t[0]/=n),t[1]&&(t[1]/=n)}t.add=function(t,e,n,r,i,a){var s,o,c,l,u=[[],[],[]],h=[[this.a,this.c,this.e],[this.b,this.d,this.f],[0,0,1]],f=[[t,n,i],[e,r,a],[0,0,1]];for(t&&t instanceof d&&(f=[[t.a,t.c,t.e],[t.b,t.d,t.f],[0,0,1]]),s=0;3>s;s++)for(o=0;3>o;o++){for(l=0,c=0;3>c;c++)l+=h[s][c]*f[c][o];u[s][o]=l}this.a=u[0][0],this.b=u[1][0],this.c=u[0][1],this.d=u[1][1],this.e=u[0][2],this.f=u[1][2]},t.invert=function(){var t=this,e=t.a*t.d-t.b*t.c;return new d(t.d/e,-t.b/e,-t.c/e,t.a/e,(t.c*t.f-t.d*t.e)/e,(t.b*t.e-t.a*t.f)/e)},t.clone=function(){return new d(this.a,this.b,this.c,this.d,this.e,this.f)},t.translate=function(t,e){this.add(1,0,0,1,t,e)},t.scale=function(t,e,n,r){null==e&&(e=t),(n||r)&&this.add(1,0,0,1,n,r),this.add(t,0,0,e,0,0),(n||r)&&this.add(1,0,0,1,-n,-r)},t.rotate=function(t,e,r){t=n.rad(t),e=e||0,r=r||0;var i=+E.cos(t).toFixed(9),a=+E.sin(t).toFixed(9);this.add(i,a,-a,i,e,r),this.add(1,0,0,1,-e,-r)},t.x=function(t,e){return t*this.a+e*this.c+this.e},t.y=function(t,e){return t*this.b+e*this.d+this.f},t.get=function(t){return+this[O.fromCharCode(97+t)].toFixed(4)},t.toString=function(){return n.svg?"matrix("+[this.get(0),this.get(1),this.get(2),this.get(3),this.get(4),this.get(5)].join()+")":[this.get(0),this.get(2),this.get(1),this.get(3),0,0].join()},t.toFilter=function(){return"progid:DXImageTransform.Microsoft.Matrix(M11="+this.get(0)+", M12="+this.get(2)+", M21="+this.get(1)+", M22="+this.get(3)+", Dx="+this.get(4)+", Dy="+this.get(5)+", sizingmethod='auto expand')"},t.offset=function(){return[this.e.toFixed(4),this.f.toFixed(4)]},t.split=function(){var t={};t.dx=this.e,t.dy=this.f;var i=[[this.a,this.c],[this.b,this.d]];t.scalex=E.sqrt(e(i[0])),r(i[0]),t.shear=i[0][0]*i[1][0]+i[0][1]*i[1][1],i[1]=[i[1][0]-i[0][0]*t.shear,i[1][1]-i[0][1]*t.shear],t.scaley=E.sqrt(e(i[1])),r(i[1]),t.shear/=t.scaley;var a=-i[0][1],s=i[1][1];return 0>s?(t.rotate=n.deg(E.acos(s)),0>a&&(t.rotate=360-t.rotate)):t.rotate=n.deg(E.asin(a)),t.isSimple=!(+t.shear.toFixed(9)||t.scalex.toFixed(9)!=t.scaley.toFixed(9)&&t.rotate),t.isSuperSimple=!+t.shear.toFixed(9)&&t.scalex.toFixed(9)==t.scaley.toFixed(9)&&!t.rotate,t.noRotation=!+t.shear.toFixed(9)&&!t.rotate,t},t.toTransformString=function(t){var e=t||this[D]();return e.isSimple?(e.scalex=+e.scalex.toFixed(4),e.scaley=+e.scaley.toFixed(4),e.rotate=+e.rotate.toFixed(4),(e.dx||e.dy?"t"+[e.dx,e.dy]:M)+(1!=e.scalex||1!=e.scaley?"s"+[e.scalex,e.scaley,0,0]:M)+(e.rotate?"r"+[e.rotate,0,0]:M)):"m"+[this.get(0),this.get(1),this.get(2),this.get(3),this.get(4),this.get(5)]}}(d.prototype);var Ve=navigator.userAgent.match(/Version\/(.*?)\s/)||navigator.userAgent.match(/Chrome\/(\d+)/);_.safari="Apple Computer, Inc."==navigator.vendor&&(Ve&&Ve[1]<4||"iP"==navigator.platform.slice(0,2))||"Google Inc."==navigator.vendor&&Ve&&Ve[1]<8?function(){var t=this.rect(-99,-99,this.width+99,this.height+99).attr({stroke:"none"});setTimeout(function(){t.remove()})}:fe;for(var je=function(){this.returnValue=!1},Ye=function(){return this.originalEvent.preventDefault()},He=function(){this.cancelBubble=!0},We=function(){return this.originalEvent.stopPropagation()},qe=function(t){var e=A.doc.documentElement.scrollTop||A.doc.body.scrollTop,n=A.doc.documentElement.scrollLeft||A.doc.body.scrollLeft;return{x:t.clientX+n,y:t.clientY+e}},Xe=function(){return A.doc.addEventListener?function(t,e,n,r){var i=function(t){var e=qe(t);return n.call(r,t,e.x,e.y)};if(t.addEventListener(e,i,!1),B&&F[e]){var a=function(e){for(var i=qe(e),a=e,s=0,o=e.targetTouches&&e.targetTouches.length;o>s;s++)if(e.targetTouches[s].target==t){e=e.targetTouches[s],e.originalEvent=a,e.preventDefault=Ye,e.stopPropagation=We;break}return n.call(r,e,i.x,i.y)};t.addEventListener(F[e],a,!1)}return function(){return t.removeEventListener(e,i,!1),B&&F[e]&&t.removeEventListener(F[e],i,!1),!0}}:A.doc.attachEvent?function(t,e,n,r){var i=function(t){t=t||A.win.event;var e=A.doc.documentElement.scrollTop||A.doc.body.scrollTop,i=A.doc.documentElement.scrollLeft||A.doc.body.scrollLeft,a=t.clientX+i,s=t.clientY+e;return t.preventDefault=t.preventDefault||je,t.stopPropagation=t.stopPropagation||He,n.call(r,t,a,s)};t.attachEvent("on"+e,i);var a=function(){return t.detachEvent("on"+e,i),!0};return a}:void 0}(),$e=[],Ze=function(t){for(var n,r=t.clientX,i=t.clientY,a=A.doc.documentElement.scrollTop||A.doc.body.scrollTop,s=A.doc.documentElement.scrollLeft||A.doc.body.scrollLeft,o=$e.length;o--;){if(n=$e[o],B&&t.touches){for(var c,l=t.touches.length;l--;)if(c=t.touches[l],c.identifier==n.el._drag.id){r=c.clientX,i=c.clientY,(t.originalEvent?t.originalEvent:t).preventDefault();break}}else t.preventDefault();var u,h=n.el.node,f=h.nextSibling,g=h.parentNode,d=h.style.display;A.win.opera&&g.removeChild(h),h.style.display="none",u=n.el.paper.getElementByPoint(r,i),h.style.display=d,A.win.opera&&(f?g.insertBefore(h,f):g.appendChild(h)),u&&e("raphael.drag.over."+n.el.id,n.el,u),r+=s,i+=a,e("raphael.drag.move."+n.el.id,n.move_scope||n.el,r-n.el._drag.x,i-n.el._drag.y,r,i,t)}},Je=function(t){n.unmousemove(Ze).unmouseup(Je);for(var r,i=$e.length;i--;)r=$e[i],r.el._drag={},e("raphael.drag.end."+r.el.id,r.end_scope||r.start_scope||r.move_scope||r.el,t);$e=[]},Qe=n.el={},Ke=N.length;Ke--;)!function(t){n[t]=Qe[t]=function(e,r){return n.is(e,"function")&&(this.events=this.events||[],this.events.push({name:t,f:e,unbind:Xe(this.shape||this.node||A.doc,t,e,r||this)})),this},n["un"+t]=Qe["un"+t]=function(e){for(var r=this.events||[],i=r.length;i--;)r[i].name!=t||!n.is(e,"undefined")&&r[i].f!=e||(r[i].unbind(),r.splice(i,1),!r.length&&delete this.events);return this}}(N[Ke]);Qe.data=function(t,r){var i=ue[this.id]=ue[this.id]||{};if(0==arguments.length)return i;if(1==arguments.length){if(n.is(t,"object")){for(var a in t)t[S](a)&&this.data(a,t[a]);return this}return e("raphael.data.get."+this.id,this,i[t],t),i[t]}return i[t]=r,e("raphael.data.set."+this.id,this,r,t),this},Qe.removeData=function(t){return null==t?ue[this.id]={}:ue[this.id]&&delete ue[this.id][t],this},Qe.getData=function(){return r(ue[this.id]||{})},Qe.hover=function(t,e,n,r){return this.mouseover(t,n).mouseout(e,r||n)},Qe.unhover=function(t,e){return this.unmouseover(t).unmouseout(e)};var tn=[];Qe.drag=function(t,r,i,a,s,o){function c(c){(c.originalEvent||c).preventDefault();var l=c.clientX,u=c.clientY,h=A.doc.documentElement.scrollTop||A.doc.body.scrollTop,f=A.doc.documentElement.scrollLeft||A.doc.body.scrollLeft;if(this._drag.id=c.identifier,B&&c.touches)for(var g,d=c.touches.length;d--;)if(g=c.touches[d],this._drag.id=g.identifier,g.identifier==this._drag.id){l=g.clientX,u=g.clientY;break}this._drag.x=l+f,this._drag.y=u+h,!$e.length&&n.mousemove(Ze).mouseup(Je),$e.push({el:this,move_scope:a,start_scope:s,end_scope:o}),r&&e.on("raphael.drag.start."+this.id,r),t&&e.on("raphael.drag.move."+this.id,t),i&&e.on("raphael.drag.end."+this.id,i),e("raphael.drag.start."+this.id,s||a||this,c.clientX+f,c.clientY+h,c)}return this._drag={},tn.push({el:this,start:c}),this.mousedown(c),this},Qe.onDragOver=function(t){t?e.on("raphael.drag.over."+this.id,t):e.unbind("raphael.drag.over."+this.id)},Qe.undrag=function(){for(var t=tn.length;t--;)tn[t].el==this&&(this.unmousedown(tn[t].start),tn.splice(t,1),e.unbind("raphael.drag.*."+this.id));!tn.length&&n.unmousemove(Ze).unmouseup(Je),$e=[]},_.circle=function(t,e,r){var i=n._engine.circle(this,t||0,e||0,r||0);return this.__set__&&this.__set__.push(i),i},_.rect=function(t,e,r,i,a){var s=n._engine.rect(this,t||0,e||0,r||0,i||0,a||0);return this.__set__&&this.__set__.push(s),s},_.ellipse=function(t,e,r,i){var a=n._engine.ellipse(this,t||0,e||0,r||0,i||0);return this.__set__&&this.__set__.push(a),a},_.path=function(t){t&&!n.is(t,W)&&!n.is(t[0],q)&&(t+=M);var e=n._engine.path(n.format[P](n,arguments),this);return this.__set__&&this.__set__.push(e),e},_.image=function(t,e,r,i,a){var s=n._engine.image(this,t||"about:blank",e||0,r||0,i||0,a||0);return this.__set__&&this.__set__.push(s),s},_.text=function(t,e,r){var i=n._engine.text(this,t||0,e||0,O(r));return this.__set__&&this.__set__.push(i),i},_.set=function(t){!n.is(t,"array")&&(t=Array.prototype.splice.call(arguments,0,arguments.length));var e=new gn(t);return this.__set__&&this.__set__.push(e),e.paper=this,e.type="set",e},_.setStart=function(t){this.__set__=t||this.set()},_.setFinish=function(){var t=this.__set__;return delete this.__set__,t},_.setSize=function(t,e){return n._engine.setSize.call(this,t,e)},_.setViewBox=function(t,e,r,i,a){return n._engine.setViewBox.call(this,t,e,r,i,a)},_.top=_.bottom=null,_.raphael=n;var en=function(t){var e=t.getBoundingClientRect(),n=t.ownerDocument,r=n.body,i=n.documentElement,a=i.clientTop||r.clientTop||0,s=i.clientLeft||r.clientLeft||0,o=e.top+(A.win.pageYOffset||i.scrollTop||r.scrollTop)-a,c=e.left+(A.win.pageXOffset||i.scrollLeft||r.scrollLeft)-s;return{y:o,x:c}};_.getElementByPoint=function(t,e){var n=this,r=n.canvas,i=A.doc.elementFromPoint(t,e);if(A.win.opera&&"svg"==i.tagName){var a=en(r),s=r.createSVGRect();s.x=t-a.x,s.y=e-a.y,s.width=s.height=1;var o=r.getIntersectionList(s,null);o.length&&(i=o[o.length-1])}if(!i)return null;for(;i.parentNode&&i!=r.parentNode&&!i.raphael;)i=i.parentNode;return i==n.canvas.parentNode&&(i=r),i=i&&i.raphael?n.getById(i.raphaelid):null},_.getElementsByBBox=function(t){var e=this.set();return this.forEach(function(r){n.isBBoxIntersect(r.getBBox(),t)&&e.push(r)}),e},_.getById=function(t){for(var e=this.bottom;e;){if(e.id==t)return e;e=e.next}return null},_.forEach=function(t,e){for(var n=this.bottom;n;){if(t.call(e,n)===!1)return this;n=n.next}return this},_.getElementsByPoint=function(t,e){var n=this.set();return this.forEach(function(r){r.isPointInside(t,e)&&n.push(r)}),n},Qe.isPointInside=function(t,e){var r=this.realPath=ve[this.type](this);return this.attr("transform")&&this.attr("transform").length&&(r=n.transformPath(r,this.attr("transform"))),n.isPointInsidePath(r,t,e)},Qe.getBBox=function(t){if(this.removed)return{};var e=this._;return t?((e.dirty||!e.bboxwt)&&(this.realPath=ve[this.type](this),e.bboxwt=Te(this.realPath),e.bboxwt.toString=p,e.dirty=0),e.bboxwt):((e.dirty||e.dirtyT||!e.bbox)&&((e.dirty||!this.realPath)&&(e.bboxwt=0,this.realPath=ve[this.type](this)),e.bbox=Te(me(this.realPath,this.matrix)),e.bbox.toString=p,e.dirty=e.dirtyT=0),e.bbox)},Qe.clone=function(){if(this.removed)return null;var t=this.paper[this.type]().attr(this.attr());return this.__set__&&this.__set__.push(t),t},Qe.glow=function(t){if("text"==this.type)return null;t=t||{};var e={width:(t.width||10)+(+this.attr("stroke-width")||1),fill:t.fill||!1,opacity:t.opacity||.5,offsetx:t.offsetx||0,offsety:t.offsety||0,color:t.color||"#000"},n=e.width/2,r=this.paper,i=r.set(),a=this.realPath||ve[this.type](this);a=this.matrix?me(a,this.matrix):a;for(var s=1;n+1>s;s++)i.push(r.path(a).attr({stroke:e.color,fill:e.fill?e.color:"none","stroke-linejoin":"round","stroke-linecap":"round","stroke-width":+(e.width/n*s).toFixed(3),opacity:+(e.opacity/n).toFixed(3)}));return i.insertBefore(this).translate(e.offsetx,e.offsety)};var nn=function(t,e,r,i,a,s,o,c,h){return null==h?l(t,e,r,i,a,s,o,c):n.findDotsAtSegment(t,e,r,i,a,s,o,c,u(t,e,r,i,a,s,o,c,h))},rn=function(t,e){return function(r,i,a){r=Ne(r);for(var s,o,c,l,u,h="",f={},g=0,d=0,p=r.length;p>d;d++){if(c=r[d],"M"==c[0])s=+c[1],o=+c[2];else{if(l=nn(s,o,c[1],c[2],c[3],c[4],c[5],c[6]),g+l>i){if(e&&!f.start){if(u=nn(s,o,c[1],c[2],c[3],c[4],c[5],c[6],i-g),h+=["C"+u.start.x,u.start.y,u.m.x,u.m.y,u.x,u.y],a)return h;f.start=h,h=["M"+u.x,u.y+"C"+u.n.x,u.n.y,u.end.x,u.end.y,c[5],c[6]].join(),g+=l,s=+c[5],o=+c[6];continue}if(!t&&!e)return u=nn(s,o,c[1],c[2],c[3],c[4],c[5],c[6],i-g),{x:u.x,y:u.y,alpha:u.alpha}}g+=l,s=+c[5],o=+c[6]}h+=c.shift()+c}return f.end=h,u=t?g:e?f:n.findDotsAtSegment(s,o,c[0],c[1],c[2],c[3],c[4],c[5],1),u.alpha&&(u={x:u.x,y:u.y,alpha:u.alpha}),u}},an=rn(1),sn=rn(),on=rn(0,1);n.getTotalLength=an,n.getPointAtLength=sn,n.getSubpath=function(t,e,n){if(this.getTotalLength(t)-n<1e-6)return on(t,e).end;var r=on(t,n,1);return e?on(r,e).end:r},Qe.getTotalLength=function(){var t=this.getPath();if(t)return this.node.getTotalLength?this.node.getTotalLength():an(t)},Qe.getPointAtLength=function(t){var e=this.getPath();if(e)return sn(e,t)},Qe.getPath=function(){var t,e=n._getPath[this.type];if("text"!=this.type&&"set"!=this.type)return e&&(t=e(this)),t},Qe.getSubpath=function(t,e){var r=this.getPath();if(r)return n.getSubpath(r,t,e)};var cn=n.easing_formulas={linear:function(t){return t},"<":function(t){return j(t,1.7)},">":function(t){return j(t,.48)},"<>":function(t){var e=.48-t/1.04,n=E.sqrt(.1734+e*e),r=n-e,i=j(V(r),1/3)*(0>r?-1:1),a=-n-e,s=j(V(a),1/3)*(0>a?-1:1),o=i+s+.5;return 3*(1-o)*o*o+o*o*o},backIn:function(t){var e=1.70158;return t*t*((e+1)*t-e)},backOut:function(t){t-=1;var e=1.70158;return t*t*((e+1)*t+e)+1},elastic:function(t){return t==!!t?t:j(2,-10*t)*E.sin(2*(t-.075)*Y/.3)+1},bounce:function(t){var e,n=7.5625,r=2.75;return 1/r>t?e=n*t*t:2/r>t?(t-=1.5/r,e=n*t*t+.75):2.5/r>t?(t-=2.25/r,e=n*t*t+.9375):(t-=2.625/r,e=n*t*t+.984375),e}};cn.easeIn=cn["ease-in"]=cn["<"],cn.easeOut=cn["ease-out"]=cn[">"],cn.easeInOut=cn["ease-in-out"]=cn["<>"],cn["back-in"]=cn.backIn,cn["back-out"]=cn.backOut;var ln=[],un=t.requestAnimationFrame||t.webkitRequestAnimationFrame||t.mozRequestAnimationFrame||t.oRequestAnimationFrame||t.msRequestAnimationFrame||function(t){setTimeout(t,16)},hn=function(){for(var t=+new Date,r=0;ro))if(c>o){var v=l(o/c);for(var m in u)if(u[S](m)){switch(re[m]){case H:a=+u[m]+v*c*h[m];break;case"colour":a="rgb("+[fn(Q(u[m].r+v*c*h[m].r)),fn(Q(u[m].g+v*c*h[m].g)),fn(Q(u[m].b+v*c*h[m].b))].join(",")+")";break;case"path":a=[];for(var y=0,b=u[m].length;b>y;y++){a[y]=[u[m][y][0]];for(var _=1,k=u[m][y].length;k>_;_++)a[y][_]=+u[m][y][_]+v*c*h[m][y][_];a[y]=a[y].join(R)}a=a.join(R);break;case"transform":if(h[m].real)for(a=[],y=0,b=u[m].length;b>y;y++)for(a[y]=[u[m][y][0]],_=1,k=u[m][y].length;k>_;_++)a[y][_]=u[m][y][_]+v*c*h[m][y][_];else{var w=function(t){return+u[m][t]+v*c*h[m][t]};a=[["m",w(0),w(1),w(2),w(3),w(4),w(5)]]}break;case"csv":if("clip-rect"==m)for(a=[],y=4;y--;)a[y]=+u[m][y]+v*c*h[m][y];break;default:var C=[][L](u[m]);for(a=[],y=g.paper.customAttributes[m].length;y--;)a[y]=+C[y]+v*c*h[m][y]}d[m]=a}g.attr(d),function(t,n,r){setTimeout(function(){e("raphael.anim.frame."+t,n,r)})}(g.id,g,i.anim)}else{if(function(t,r,i){setTimeout(function(){e("raphael.anim.frame."+r.id,r,i),e("raphael.anim.finish."+r.id,r,i),n.is(t,"function")&&t.call(r)})}(i.callback,g,i.anim),g.attr(f),ln.splice(r--,1),i.repeat>1&&!i.next){for(s in f)f[S](s)&&(p[s]=i.totalOrigin[s]);i.el.attr(p),x(i.anim,i.el,i.anim.percents[0],null,i.totalOrigin,i.repeat-1)}i.next&&!i.stop&&x(i.anim,i.el,i.next,null,i.totalOrigin,i.repeat)}}}n.svg&&g&&g.paper&&g.paper.safari(),ln.length&&un(hn)},fn=function(t){return t>255?255:0>t?0:t};Qe.animateWith=function(t,e,r,i,a,s){var o=this;if(o.removed)return s&&s.call(o),o;var c=r instanceof m?r:n.animation(r,i,a,s);x(c,o,c.percents[0],null,o.attr());for(var l=0,u=ln.length;u>l;l++)if(ln[l].anim==e&&ln[l].el==t){ln[u-1].start=ln[l].start;break}return o},Qe.onAnimation=function(t){return t?e.on("raphael.anim.frame."+this.id,t):e.unbind("raphael.anim.frame."+this.id),this},m.prototype.delay=function(t){var e=new m(this.anim,this.ms);return e.times=this.times,e.del=+t||0,e},m.prototype.repeat=function(t){var e=new m(this.anim,this.ms);return e.del=this.del,e.times=E.floor(z(t,0))||1,e},n.animation=function(t,e,r,i){if(t instanceof m)return t;(n.is(r,"function")||!r)&&(i=i||r||null,r=null),t=Object(t),e=+e||0;var a,s,o={};for(s in t)t[S](s)&&K(s)!=s&&K(s)+"%"!=s&&(a=!0,o[s]=t[s]);return a?(r&&(o.easing=r),i&&(o.callback=i),new m({100:o},e)):new m(t,e)},Qe.animate=function(t,e,r,i){var a=this;if(a.removed)return i&&i.call(a),a;var s=t instanceof m?t:n.animation(t,e,r,i);return x(s,a,s.percents[0],null,a.attr()),a},Qe.setTime=function(t,e){return t&&null!=e&&this.status(t,U(e,t.ms)/t.ms),this},Qe.status=function(t,e){var n,r,i=[],a=0;if(null!=e)return x(t,this,-1,U(e,1)),this;for(n=ln.length;n>a;a++)if(r=ln[a],r.el.id==this.id&&(!t||r.anim==t)){if(t)return r.status;i.push({anim:r.anim,status:r.status})}return t?0:i},Qe.pause=function(t){for(var n=0;ne;e++)!t[e]||t[e].constructor!=Qe.constructor&&t[e].constructor!=gn||(this[this.items.length]=this.items[this.items.length]=t[e],this.length++)},dn=gn.prototype;dn.push=function(){for(var t,e,n=0,r=arguments.length;r>n;n++)t=arguments[n],!t||t.constructor!=Qe.constructor&&t.constructor!=gn||(e=this.items.length,this[e]=this.items[e]=t,this.length++);return this},dn.pop=function(){return this.length&&delete this[this.length--],this.items.pop()},dn.forEach=function(t,e){for(var n=0,r=this.items.length;r>n;n++)if(t.call(e,this.items[n],n)===!1)return this;return this};for(var pn in Qe)Qe[S](pn)&&(dn[pn]=function(t){return function(){var e=arguments;return this.forEach(function(n){n[t][P](n,e)})}}(pn));return dn.attr=function(t,e){if(t&&n.is(t,q)&&n.is(t[0],"object"))for(var r=0,i=t.length;i>r;r++)this.items[r].attr(t[r]);else for(var a=0,s=this.items.length;s>a;a++)this.items[a].attr(t,e);return this},dn.clear=function(){for(;this.length;)this.pop()},dn.splice=function(t,e){t=0>t?z(this.length+t,0):t,e=z(0,U(this.length-t,e));var n,r=[],i=[],a=[];for(n=2;nn;n++)i.push(this[t+n]);for(;nn?a[n]:r[n-s];for(n=this.items.length=this.length-=e-s;this[n];)delete this[n++];return new gn(i)},dn.exclude=function(t){for(var e=0,n=this.length;n>e;e++)if(this[e]==t)return this.splice(e,1),!0},dn.animate=function(t,e,r,i){(n.is(r,"function")||!r)&&(i=r||null);var a,s,o=this.items.length,c=o,l=this;if(!o)return this;i&&(s=function(){!--o&&i.call(l)}),r=n.is(r,W)?r:s;var u=n.animation(t,e,r,s);for(a=this.items[--c].animate(u);c--;)this.items[c]&&!this.items[c].removed&&this.items[c].animateWith(a,u,u),this.items[c]&&!this.items[c].removed||o--;return this},dn.insertAfter=function(t){for(var e=this.items.length;e--;)this.items[e].insertAfter(t);return this},dn.getBBox=function(){for(var t=[],e=[],n=[],r=[],i=this.items.length;i--;)if(!this.items[i].removed){var a=this.items[i].getBBox();t.push(a.x),e.push(a.y),n.push(a.x+a.width),r.push(a.y+a.height)}return t=U[P](0,t),e=U[P](0,e),n=z[P](0,n),r=z[P](0,r),{x:t,y:e,x2:n,y2:r,width:n-t,height:r-e}},dn.clone=function(t){t=this.paper.set();for(var e=0,n=this.items.length;n>e;e++)t.push(this.items[e].clone());return t},dn.toString=function(){return"Rapha\xebl\u2018s set"},dn.glow=function(t){var e=this.paper.set();return this.forEach(function(n){var r=n.glow(t);null!=r&&r.forEach(function(t){e.push(t)})}),e},dn.isPointInside=function(t,e){var n=!1;return this.forEach(function(r){return r.isPointInside(t,e)?(n=!0,!1):void 0}),n},n.registerFont=function(t){if(!t.face)return t;this.fonts=this.fonts||{};var e={w:t.w,face:{},glyphs:{}},n=t.face["font-family"];for(var r in t.face)t.face[S](r)&&(e.face[r]=t.face[r]);if(this.fonts[n]?this.fonts[n].push(e):this.fonts[n]=[e],!t.svg){e.face["units-per-em"]=te(t.face["units-per-em"],10);for(var i in t.glyphs)if(t.glyphs[S](i)){var a=t.glyphs[i];if(e.glyphs[i]={w:a.w,k:{},d:a.d&&"M"+a.d.replace(/[mlcxtrv]/g,function(t){return{l:"L",c:"C",x:"z",t:"m",r:"l",v:"c"}[t]||"M"})+"z"},a.k)for(var s in a.k)a[S](s)&&(e.glyphs[i].k[s]=a.k[s])}}return t},_.getFont=function(t,e,r,i){if(i=i||"normal",r=r||"normal",e=+e||{normal:400,bold:700,lighter:300,bolder:800}[e]||400,n.fonts){var a=n.fonts[t];if(!a){var s=new RegExp("(^|\\s)"+t.replace(/[^\w\d\s+!~.:_-]/g,M)+"(\\s|$)","i");for(var o in n.fonts)if(n.fonts[S](o)&&s.test(o)){a=n.fonts[o];break}}var c;if(a)for(var l=0,u=a.length;u>l&&(c=a[l],c.face["font-weight"]!=e||c.face["font-style"]!=r&&c.face["font-style"]||c.face["font-stretch"]!=i);l++);return c}},_.print=function(t,e,r,i,a,s,o,c){s=s||"middle",o=z(U(o||0,1),-1),c=z(U(c||1,3),1);var l,u=O(r)[D](M),h=0,f=0,g=M;if(n.is(i,"string")&&(i=this.getFont(i)),i){l=(a||16)/i.face["units-per-em"];for(var d=i.face.bbox[D](k),p=+d[0],v=d[3]-d[1],m=0,x=+d[1]+("baseline"==s?v+ +i.face.descent:v/2),y=0,b=u.length;b>y;y++){if("\n"==u[y])h=0,w=0,f=0,m+=v*c;else{var _=f&&i.glyphs[u[y-1]]||{},w=i.glyphs[u[y]];h+=f?(_.w||i.w)+(_.k&&_.k[u[y]]||0)+i.w*o:0,f=1}w&&w.d&&(g+=n.transformPath(w.d,["t",h*l,m*l,"s",l,l,p,x,"t",(t-p)/l,(e-x)/l]))}}return this.path(g).attr({fill:"#000",stroke:"none"})},_.add=function(t){if(n.is(t,"array"))for(var e,r=this.set(),i=0,a=t.length;a>i;i++)e=t[i]||{},w[S](e.type)&&r.push(this[e.type]().attr(e));return r},n.format=function(t,e){var r=n.is(e,q)?[0][L](e):arguments;return t&&n.is(t,W)&&r.length-1&&(t=t.replace(C,function(t,e){return null==r[++e]?M:r[e]})),t||M},n.fullfill=function(){var t=/\{([^\}]+)\}/g,e=/(?:(?:^|\.)(.+?)(?=\[|\.|$|\()|\[('|")(.+?)\2\])(\(\))?/g,n=function(t,n,r){var i=r;return n.replace(e,function(t,e,n,r,a){e=e||r,i&&(e in i&&(i=i[e]),"function"==typeof i&&a&&(i=i()))}),i=(null==i||i==r?t:i)+""};return function(e,r){return String(e).replace(t,function(t,e){return n(t,e,r)})}}(),n.ninja=function(){return T.was?A.win.Raphael=T.is:delete Raphael,n},n.st=dn,function(t,e,r){function i(){/in/.test(t.readyState)?setTimeout(i,9):n.eve("raphael.DOMload")}null==t.readyState&&t.addEventListener&&(t.addEventListener(e,r=function(){t.removeEventListener(e,r,!1),t.readyState="complete"},!1),t.readyState="loading"),i()}(document,"DOMContentLoaded"),e.on("raphael.DOMload",function(){b=!0}),T.was?A.win.Raphael=n:Raphael=n,n}),t=Raphael}(),r=function(){window.Raphael&&window.Raphael.svg&&function(t){var e="hasOwnProperty",n=String,r=parseFloat,i=parseInt,a=Math,s=a.max,o=a.abs,c=a.pow,l=/[, ]+/,u=t.eve,h="",f=" ",g="http://www.w3.org/1999/xlink",d={block:"M5,0 0,2.5 5,5z",classic:"M5,0 0,2.5 5,5 3.5,3 3.5,2z",diamond:"M2.5,0 5,2.5 2.5,5 0,2.5z",open:"M6,1 1,3.5 6,6",oval:"M2.5,0A2.5,2.5,0,0,1,2.5,5 2.5,2.5,0,0,1,2.5,0z"},p={};t.toString=function(){return"Your browser supports SVG.\nYou are running Rapha\xebl "+this.version};var v=function(r,i){if(i){"string"==typeof r&&(r=v(r));for(var a in i)i[e](a)&&("xlink:"==a.substring(0,6)?r.setAttributeNS(g,a.substring(6),n(i[a])):r.setAttribute(a,n(i[a])))}else r=t._g.doc.createElementNS("http://www.w3.org/2000/svg",r),r.style&&(r.style.webkitTapHighlightColor="rgba(0,0,0,0)");return r},m=function(e,i){var l="linear",u=e.id+i,f=.5,g=.5,d=e.node,p=e.paper,m=d.style,x=t._g.doc.getElementById(u);if(!x){if(i=n(i).replace(t._radial_gradient,function(t,e,n){if(l="radial",e&&n){f=r(e),g=r(n);var i=2*(g>.5)-1;c(f-.5,2)+c(g-.5,2)>.25&&(g=a.sqrt(.25-c(f-.5,2))*i+.5)&&.5!=g&&(g=g.toFixed(5)-1e-5*i)}return h}),i=i.split(/\s*\-\s*/),"linear"==l){var y=i.shift();if(y=-r(y),isNaN(y))return null;var b=[0,0,a.cos(t.rad(y)),a.sin(t.rad(y))],_=1/(s(o(b[2]),o(b[3]))||1);b[2]*=_,b[3]*=_,b[2]<0&&(b[0]=-b[2],b[2]=0),b[3]<0&&(b[1]=-b[3],b[3]=0)}var k=t._parseDots(i);if(!k)return null;if(u=u.replace(/[\(\)\s,\xb0#]/g,"_"),e.gradient&&u!=e.gradient.id&&(p.defs.removeChild(e.gradient),delete e.gradient),!e.gradient){x=v(l+"Gradient",{id:u}),e.gradient=x,v(x,"radial"==l?{fx:f,fy:g}:{x1:b[0],y1:b[1],x2:b[2],y2:b[3],gradientTransform:e.matrix.invert()}),p.defs.appendChild(x);for(var w=0,C=k.length;C>w;w++)x.appendChild(v("stop",{offset:k[w].offset?k[w].offset:w?"100%":"0%","stop-color":k[w].color||"#fff"}))}}return v(d,{fill:"url(#"+u+")",opacity:1,"fill-opacity":1}),m.fill=h,m.opacity=1,m.fillOpacity=1,1},x=function(t){var e=t.getBBox(1);v(t.pattern,{patternTransform:t.matrix.invert()+" translate("+e.x+","+e.y+")"})},y=function(r,i,a){if("path"==r.type){for(var s,o,c,l,u,f=n(i).toLowerCase().split("-"),g=r.paper,m=a?"end":"start",x=r.node,y=r.attrs,b=y["stroke-width"],_=f.length,k="classic",w=3,C=3,S=5;_--;)switch(f[_]){case"block":case"classic":case"oval":case"diamond":case"open":case"none":k=f[_];break;case"wide":C=5;break;case"narrow":C=2;break;case"long":w=5;break;case"short":w=2}if("open"==k?(w+=2,C+=2,S+=2,c=1,l=a?4:1,u={fill:"none",stroke:y.stroke}):(l=c=w/2,u={fill:y.stroke,stroke:"none"}),r._.arrows?a?(r._.arrows.endPath&&p[r._.arrows.endPath]--,r._.arrows.endMarker&&p[r._.arrows.endMarker]--):(r._.arrows.startPath&&p[r._.arrows.startPath]--,r._.arrows.startMarker&&p[r._.arrows.startMarker]--):r._.arrows={},"none"!=k){var A="raphael-marker-"+k,T="raphael-marker-"+m+k+w+C;t._g.doc.getElementById(A)?p[A]++:(g.defs.appendChild(v(v("path"),{"stroke-linecap":"round",d:d[k],id:A})),p[A]=1);var I,P=t._g.doc.getElementById(T);P?(p[T]++,I=P.getElementsByTagName("use")[0]):(P=v(v("marker"),{id:T,markerHeight:C,markerWidth:w,orient:"auto",refX:l,refY:C/2}),I=v(v("use"),{"xlink:href":"#"+A,transform:(a?"rotate(180 "+w/2+" "+C/2+") ":h)+"scale("+w/S+","+C/S+")","stroke-width":(1/((w/S+C/S)/2)).toFixed(4)}),P.appendChild(I),g.defs.appendChild(P),p[T]=1),v(I,u);var L=c*("diamond"!=k&&"oval"!=k);a?(s=r._.arrows.startdx*b||0,o=t.getTotalLength(y.path)-L*b):(s=L*b,o=t.getTotalLength(y.path)-(r._.arrows.enddx*b||0)),u={},u["marker-"+m]="url(#"+T+")",(o||s)&&(u.d=t.getSubpath(y.path,s,o)),v(x,u),r._.arrows[m+"Path"]=A,r._.arrows[m+"Marker"]=T,r._.arrows[m+"dx"]=L,r._.arrows[m+"Type"]=k,r._.arrows[m+"String"]=i}else a?(s=r._.arrows.startdx*b||0,o=t.getTotalLength(y.path)-s):(s=0,o=t.getTotalLength(y.path)-(r._.arrows.enddx*b||0)),r._.arrows[m+"Path"]&&v(x,{d:t.getSubpath(y.path,s,o)}),delete r._.arrows[m+"Path"],delete r._.arrows[m+"Marker"],delete r._.arrows[m+"dx"],delete r._.arrows[m+"Type"],delete r._.arrows[m+"String"];for(u in p)if(p[e](u)&&!p[u]){var B=t._g.doc.getElementById(u);B&&B.parentNode.removeChild(B)}}},b={"":[0],none:[0],"-":[3,1],".":[1,1],"-.":[3,1,1,1],"-..":[3,1,1,1,1,1],". ":[1,3],"- ":[4,3],"--":[8,3],"- .":[4,3,1,3],"--.":[8,3,1,3],"--..":[8,3,1,3,1,3]},_=function(t,e,r){if(e=b[n(e).toLowerCase()]){for(var i=t.attrs["stroke-width"]||"1",a={round:i,square:i,butt:0}[t.attrs["stroke-linecap"]||r["stroke-linecap"]]||0,s=[],o=e.length;o--;)s[o]=e[o]*i+(o%2?1:-1)*a; +v(t.node,{"stroke-dasharray":s.join(",")})}},k=function(r,a){var c=r.node,u=r.attrs,f=c.style.visibility;c.style.visibility="hidden";for(var d in a)if(a[e](d)){if(!t._availableAttrs[e](d))continue;var p=a[d];switch(u[d]=p,d){case"blur":r.blur(p);break;case"href":case"title":var b=v("title"),k=t._g.doc.createTextNode(p);b.appendChild(k),c.appendChild(b);break;case"target":var w=c.parentNode;if("a"!=w.tagName.toLowerCase()){var b=v("a");w.insertBefore(b,c),b.appendChild(c),w=b}"target"==d?w.setAttributeNS(g,"show","blank"==p?"new":p):w.setAttributeNS(g,d,p);break;case"cursor":c.style.cursor=p;break;case"transform":r.transform(p);break;case"arrow-start":y(r,p);break;case"arrow-end":y(r,p,1);break;case"clip-rect":var S=n(p).split(l);if(4==S.length){r.clip&&r.clip.parentNode.parentNode.removeChild(r.clip.parentNode);var A=v("clipPath"),T=v("rect");A.id=t.createUUID(),v(T,{x:S[0],y:S[1],width:S[2],height:S[3]}),A.appendChild(T),r.paper.defs.appendChild(A),v(c,{"clip-path":"url(#"+A.id+")"}),r.clip=T}if(!p){var I=c.getAttribute("clip-path");if(I){var P=t._g.doc.getElementById(I.replace(/(^url\(#|\)$)/g,h));P&&P.parentNode.removeChild(P),v(c,{"clip-path":h}),delete r.clip}}break;case"path":"path"==r.type&&(v(c,{d:p?u.path=t._pathToAbsolute(p):"M0,0"}),r._.dirty=1,r._.arrows&&("startString"in r._.arrows&&y(r,r._.arrows.startString),"endString"in r._.arrows&&y(r,r._.arrows.endString,1)));break;case"width":if(c.setAttribute(d,p),r._.dirty=1,!u.fx)break;d="x",p=u.x;case"x":u.fx&&(p=-u.x-(u.width||0));case"rx":if("rx"==d&&"rect"==r.type)break;case"cx":c.setAttribute(d,p),r.pattern&&x(r),r._.dirty=1;break;case"height":if(c.setAttribute(d,p),r._.dirty=1,!u.fy)break;d="y",p=u.y;case"y":u.fy&&(p=-u.y-(u.height||0));case"ry":if("ry"==d&&"rect"==r.type)break;case"cy":c.setAttribute(d,p),r.pattern&&x(r),r._.dirty=1;break;case"r":"rect"==r.type?v(c,{rx:p,ry:p}):c.setAttribute(d,p),r._.dirty=1;break;case"src":"image"==r.type&&c.setAttributeNS(g,"href",p);break;case"stroke-width":(1!=r._.sx||1!=r._.sy)&&(p/=s(o(r._.sx),o(r._.sy))||1),r.paper._vbSize&&(p*=r.paper._vbSize),c.setAttribute(d,p),u["stroke-dasharray"]&&_(r,u["stroke-dasharray"],a),r._.arrows&&("startString"in r._.arrows&&y(r,r._.arrows.startString),"endString"in r._.arrows&&y(r,r._.arrows.endString,1));break;case"stroke-dasharray":_(r,p,a);break;case"fill":var L=n(p).match(t._ISURL);if(L){A=v("pattern");var B=v("image");A.id=t.createUUID(),v(A,{x:0,y:0,patternUnits:"userSpaceOnUse",height:1,width:1}),v(B,{x:0,y:0,"xlink:href":L[1]}),A.appendChild(B),function(e){t._preload(L[1],function(){var t=this.offsetWidth,n=this.offsetHeight;v(e,{width:t,height:n}),v(B,{width:t,height:n}),r.paper.safari()})}(A),r.paper.defs.appendChild(A),v(c,{fill:"url(#"+A.id+")"}),r.pattern=A,r.pattern&&x(r);break}var M=t.getRGB(p);if(M.error){if(("circle"==r.type||"ellipse"==r.type||"r"!=n(p).charAt())&&m(r,p)){if("opacity"in u||"fill-opacity"in u){var R=t._g.doc.getElementById(c.getAttribute("fill").replace(/^url\(#|\)$/g,h));if(R){var O=R.getElementsByTagName("stop");v(O[O.length-1],{"stop-opacity":("opacity"in u?u.opacity:1)*("fill-opacity"in u?u["fill-opacity"]:1)})}}u.gradient=p,u.fill="none";break}}else delete a.gradient,delete u.gradient,!t.is(u.opacity,"undefined")&&t.is(a.opacity,"undefined")&&v(c,{opacity:u.opacity}),!t.is(u["fill-opacity"],"undefined")&&t.is(a["fill-opacity"],"undefined")&&v(c,{"fill-opacity":u["fill-opacity"]});M[e]("opacity")&&v(c,{"fill-opacity":M.opacity>1?M.opacity/100:M.opacity});case"stroke":M=t.getRGB(p),c.setAttribute(d,M.hex),"stroke"==d&&M[e]("opacity")&&v(c,{"stroke-opacity":M.opacity>1?M.opacity/100:M.opacity}),"stroke"==d&&r._.arrows&&("startString"in r._.arrows&&y(r,r._.arrows.startString),"endString"in r._.arrows&&y(r,r._.arrows.endString,1));break;case"gradient":("circle"==r.type||"ellipse"==r.type||"r"!=n(p).charAt())&&m(r,p);break;case"opacity":u.gradient&&!u[e]("stroke-opacity")&&v(c,{"stroke-opacity":p>1?p/100:p});case"fill-opacity":if(u.gradient){R=t._g.doc.getElementById(c.getAttribute("fill").replace(/^url\(#|\)$/g,h)),R&&(O=R.getElementsByTagName("stop"),v(O[O.length-1],{"stop-opacity":p}));break}default:"font-size"==d&&(p=i(p,10)+"px");var D=d.replace(/(\-.)/g,function(t){return t.substring(1).toUpperCase()});c.style[D]=p,r._.dirty=1,c.setAttribute(d,p)}}C(r,a),c.style.visibility=f},w=1.2,C=function(r,a){if("text"==r.type&&(a[e]("text")||a[e]("font")||a[e]("font-size")||a[e]("x")||a[e]("y"))){var s=r.attrs,o=r.node,c=o.firstChild?i(t._g.doc.defaultView.getComputedStyle(o.firstChild,h).getPropertyValue("font-size"),10):10;if(a[e]("text")){for(s.text=a.text;o.firstChild;)o.removeChild(o.firstChild);for(var l,u=n(a.text).split("\n"),f=[],g=0,d=u.length;d>g;g++)l=v("tspan"),g&&v(l,{dy:c*w,x:s.x}),l.appendChild(t._g.doc.createTextNode(u[g])),o.appendChild(l),f[g]=l}else for(f=o.getElementsByTagName("tspan"),g=0,d=f.length;d>g;g++)g?v(f[g],{dy:c*w,x:s.x}):v(f[0],{dy:0});v(o,{x:s.x,y:s.y}),r._.dirty=1;var p=r._getBBox(),m=s.y-(p.y+p.height/2);m&&t.is(m,"finite")&&v(f[0],{dy:m})}},S=function(e,n){this[0]=this.node=e,e.raphael=!0,this.id=t._oid++,e.raphaelid=this.id,this.matrix=t.matrix(),this.realPath=null,this.paper=n,this.attrs=this.attrs||{},this._={transform:[],sx:1,sy:1,deg:0,dx:0,dy:0,dirty:1},!n.bottom&&(n.bottom=this),this.prev=n.top,n.top&&(n.top.next=this),n.top=this,this.next=null},A=t.el;S.prototype=A,A.constructor=S,t._engine.path=function(t,e){var n=v("path");e.canvas&&e.canvas.appendChild(n);var r=new S(n,e);return r.type="path",k(r,{fill:"none",stroke:"#000",path:t}),r},A.rotate=function(t,e,i){if(this.removed)return this;if(t=n(t).split(l),t.length-1&&(e=r(t[1]),i=r(t[2])),t=r(t[0]),null==i&&(e=i),null==e||null==i){var a=this.getBBox(1);e=a.x+a.width/2,i=a.y+a.height/2}return this.transform(this._.transform.concat([["r",t,e,i]])),this},A.scale=function(t,e,i,a){if(this.removed)return this;if(t=n(t).split(l),t.length-1&&(e=r(t[1]),i=r(t[2]),a=r(t[3])),t=r(t[0]),null==e&&(e=t),null==a&&(i=a),null==i||null==a)var s=this.getBBox(1);return i=null==i?s.x+s.width/2:i,a=null==a?s.y+s.height/2:a,this.transform(this._.transform.concat([["s",t,e,i,a]])),this},A.translate=function(t,e){return this.removed?this:(t=n(t).split(l),t.length-1&&(e=r(t[1])),t=r(t[0])||0,e=+e||0,this.transform(this._.transform.concat([["t",t,e]])),this)},A.transform=function(n){var r=this._;if(null==n)return r.transform;if(t._extractTransform(this,n),this.clip&&v(this.clip,{transform:this.matrix.invert()}),this.pattern&&x(this),this.node&&v(this.node,{transform:this.matrix}),1!=r.sx||1!=r.sy){var i=this.attrs[e]("stroke-width")?this.attrs["stroke-width"]:1;this.attr({"stroke-width":i})}return this},A.hide=function(){return!this.removed&&this.paper.safari(this.node.style.display="none"),this},A.show=function(){return!this.removed&&this.paper.safari(this.node.style.display=""),this},A.remove=function(){if(!this.removed&&this.node.parentNode){var e=this.paper;e.__set__&&e.__set__.exclude(this),u.unbind("raphael.*.*."+this.id),this.gradient&&e.defs.removeChild(this.gradient),t._tear(this,e),"a"==this.node.parentNode.tagName.toLowerCase()?this.node.parentNode.parentNode.removeChild(this.node.parentNode):this.node.parentNode.removeChild(this.node);for(var n in this)this[n]="function"==typeof this[n]?t._removedFactory(n):null;this.removed=!0}},A._getBBox=function(){if("none"==this.node.style.display){this.show();var t=!0}var e={};try{e=this.node.getBBox()}catch(n){}finally{e=e||{}}return t&&this.hide(),e},A.attr=function(n,r){if(this.removed)return this;if(null==n){var i={};for(var a in this.attrs)this.attrs[e](a)&&(i[a]=this.attrs[a]);return i.gradient&&"none"==i.fill&&(i.fill=i.gradient)&&delete i.gradient,i.transform=this._.transform,i}if(null==r&&t.is(n,"string")){if("fill"==n&&"none"==this.attrs.fill&&this.attrs.gradient)return this.attrs.gradient;if("transform"==n)return this._.transform;for(var s=n.split(l),o={},c=0,h=s.length;h>c;c++)n=s[c],o[n]=n in this.attrs?this.attrs[n]:t.is(this.paper.customAttributes[n],"function")?this.paper.customAttributes[n].def:t._availableAttrs[n];return h-1?o:o[s[0]]}if(null==r&&t.is(n,"array")){for(o={},c=0,h=n.length;h>c;c++)o[n[c]]=this.attr(n[c]);return o}if(null!=r){var f={};f[n]=r}else null!=n&&t.is(n,"object")&&(f=n);for(var g in f)u("raphael.attr."+g+"."+this.id,this,f[g]);for(g in this.paper.customAttributes)if(this.paper.customAttributes[e](g)&&f[e](g)&&t.is(this.paper.customAttributes[g],"function")){var d=this.paper.customAttributes[g].apply(this,[].concat(f[g]));this.attrs[g]=f[g];for(var p in d)d[e](p)&&(f[p]=d[p])}return k(this,f),this},A.toFront=function(){if(this.removed)return this;"a"==this.node.parentNode.tagName.toLowerCase()?this.node.parentNode.parentNode.appendChild(this.node.parentNode):this.node.parentNode.appendChild(this.node);var e=this.paper;return e.top!=this&&t._tofront(this,e),this},A.toBack=function(){if(this.removed)return this;var e=this.node.parentNode;"a"==e.tagName.toLowerCase()?e.parentNode.insertBefore(this.node.parentNode,this.node.parentNode.parentNode.firstChild):e.firstChild!=this.node&&e.insertBefore(this.node,this.node.parentNode.firstChild),t._toback(this,this.paper);this.paper;return this},A.insertAfter=function(e){if(this.removed)return this;var n=e.node||e[e.length-1].node;return n.nextSibling?n.parentNode.insertBefore(this.node,n.nextSibling):n.parentNode.appendChild(this.node),t._insertafter(this,e,this.paper),this},A.insertBefore=function(e){if(this.removed)return this;var n=e.node||e[0].node;return n.parentNode.insertBefore(this.node,n),t._insertbefore(this,e,this.paper),this},A.blur=function(e){var n=this;if(0!==+e){var r=v("filter"),i=v("feGaussianBlur");n.attrs.blur=e,r.id=t.createUUID(),v(i,{stdDeviation:+e||1.5}),r.appendChild(i),n.paper.defs.appendChild(r),n._blur=r,v(n.node,{filter:"url(#"+r.id+")"})}else n._blur&&(n._blur.parentNode.removeChild(n._blur),delete n._blur,delete n.attrs.blur),n.node.removeAttribute("filter");return n},t._engine.circle=function(t,e,n,r){var i=v("circle");t.canvas&&t.canvas.appendChild(i);var a=new S(i,t);return a.attrs={cx:e,cy:n,r:r,fill:"none",stroke:"#000"},a.type="circle",v(i,a.attrs),a},t._engine.rect=function(t,e,n,r,i,a){var s=v("rect");t.canvas&&t.canvas.appendChild(s);var o=new S(s,t);return o.attrs={x:e,y:n,width:r,height:i,r:a||0,rx:a||0,ry:a||0,fill:"none",stroke:"#000"},o.type="rect",v(s,o.attrs),o},t._engine.ellipse=function(t,e,n,r,i){var a=v("ellipse");t.canvas&&t.canvas.appendChild(a);var s=new S(a,t);return s.attrs={cx:e,cy:n,rx:r,ry:i,fill:"none",stroke:"#000"},s.type="ellipse",v(a,s.attrs),s},t._engine.image=function(t,e,n,r,i,a){var s=v("image");v(s,{x:n,y:r,width:i,height:a,preserveAspectRatio:"none"}),s.setAttributeNS(g,"href",e),t.canvas&&t.canvas.appendChild(s);var o=new S(s,t);return o.attrs={x:n,y:r,width:i,height:a,src:e},o.type="image",o},t._engine.text=function(e,n,r,i){var a=v("text");e.canvas&&e.canvas.appendChild(a);var s=new S(a,e);return s.attrs={x:n,y:r,"text-anchor":"middle",text:i,font:t._availableAttrs.font,stroke:"none",fill:"#000"},s.type="text",k(s,s.attrs),s},t._engine.setSize=function(t,e){return this.width=t||this.width,this.height=e||this.height,this.canvas.setAttribute("width",this.width),this.canvas.setAttribute("height",this.height),this._viewBox&&this.setViewBox.apply(this,this._viewBox),this},t._engine.create=function(){var e=t._getContainer.apply(0,arguments),n=e&&e.container,r=e.x,i=e.y,a=e.width,s=e.height;if(!n)throw new Error("SVG container not found.");var o,c=v("svg"),l="overflow:hidden;";return r=r||0,i=i||0,a=a||512,s=s||342,v(c,{height:s,version:1.1,width:a,xmlns:"http://www.w3.org/2000/svg"}),1==n?(c.style.cssText=l+"position:absolute;left:"+r+"px;top:"+i+"px",t._g.doc.body.appendChild(c),o=1):(c.style.cssText=l+"position:relative",n.firstChild?n.insertBefore(c,n.firstChild):n.appendChild(c)),n=new t._Paper,n.width=a,n.height=s,n.canvas=c,n.clear(),n._left=n._top=0,o&&(n.renderfix=function(){}),n.renderfix(),n},t._engine.setViewBox=function(t,e,n,r,i){u("raphael.setViewBox",this,this._viewBox,[t,e,n,r,i]);var a,o,c=s(n/this.width,r/this.height),l=this.top,h=i?"meet":"xMinYMin";for(null==t?(this._vbSize&&(c=1),delete this._vbSize,a="0 0 "+this.width+f+this.height):(this._vbSize=c,a=t+f+e+f+n+f+r),v(this.canvas,{viewBox:a,preserveAspectRatio:h});c&&l;)o="stroke-width"in l.attrs?l.attrs["stroke-width"]:1,l.attr({"stroke-width":o}),l._.dirty=1,l._.dirtyT=1,l=l.prev;return this._viewBox=[t,e,n,r,!!i],this},t.prototype.renderfix=function(){var t,e=this.canvas,n=e.style;try{t=e.getScreenCTM()||e.createSVGMatrix()}catch(r){t=e.createSVGMatrix()}var i=-t.e%1,a=-t.f%1;(i||a)&&(i&&(this._left=(this._left+i)%1,n.left=this._left+"px"),a&&(this._top=(this._top+a)%1,n.top=this._top+"px"))},t.prototype.clear=function(){t.eve("raphael.clear",this);for(var e=this.canvas;e.firstChild;)e.removeChild(e.firstChild);this.bottom=this.top=null,(this.desc=v("desc")).appendChild(t._g.doc.createTextNode("Created with Rapha\xebl "+t.version)),e.appendChild(this.desc),e.appendChild(this.defs=v("defs"))},t.prototype.remove=function(){u("raphael.remove",this),this.canvas.parentNode&&this.canvas.parentNode.removeChild(this.canvas);for(var e in this)this[e]="function"==typeof this[e]?t._removedFactory(e):null};var T=t.st;for(var I in A)A[e](I)&&!T[e](I)&&(T[I]=function(t){return function(){var e=arguments;return this.forEach(function(n){n[t].apply(n,e)})}}(I))}(window.Raphael)}(),i=function(){window.Raphael&&window.Raphael.vml&&function(t){var e="hasOwnProperty",n=String,r=parseFloat,i=Math,a=i.round,s=i.max,o=i.min,c=i.abs,l="fill",u=/[, ]+/,h=t.eve,f=" progid:DXImageTransform.Microsoft",g=" ",d="",p={M:"m",L:"l",C:"c",Z:"x",m:"t",l:"r",c:"v",z:"x"},v=/([clmz]),?([^clmz]*)/gi,m=/ progid:\S+Blur\([^\)]+\)/g,x=/-?[^,\s-]+/g,y="position:absolute;left:0;top:0;width:1px;height:1px",b=21600,_={path:1,rect:1,image:1},k={circle:1,ellipse:1},w=function(e){var r=/[ahqstv]/gi,i=t._pathToAbsolute;if(n(e).match(r)&&(i=t._path2curve),r=/[clmz]/g,i==t._pathToAbsolute&&!n(e).match(r)){var s=n(e).replace(v,function(t,e,n){var r=[],i="m"==e.toLowerCase(),s=p[e];return n.replace(x,function(t){i&&2==r.length&&(s+=r+p["m"==e?"l":"L"],r=[]),r.push(a(t*b))}),s+r});return s}var o,c,l=i(e);s=[];for(var u=0,h=l.length;h>u;u++){o=l[u],c=l[u][0].toLowerCase(),"z"==c&&(c="x");for(var f=1,m=o.length;m>f;f++)c+=a(o[f]*b)+(f!=m-1?",":d);s.push(c)}return s.join(g)},C=function(e,n,r){var i=t.matrix();return i.rotate(-e,.5,.5),{dx:i.x(n,r),dy:i.y(n,r)}},S=function(t,e,n,r,i,a){var s=t._,o=t.matrix,u=s.fillpos,h=t.node,f=h.style,d=1,p="",v=b/e,m=b/n;if(f.visibility="hidden",e&&n){if(h.coordsize=c(v)+g+c(m),f.rotation=a*(0>e*n?-1:1),a){var x=C(a,r,i);r=x.dx,i=x.dy}if(0>e&&(p+="x"),0>n&&(p+=" y")&&(d=-1),f.flip=p,h.coordorigin=r*-v+g+i*-m,u||s.fillsize){var y=h.getElementsByTagName(l);y=y&&y[0],h.removeChild(y),u&&(x=C(a,o.x(u[0],u[1]),o.y(u[0],u[1])),y.position=x.dx*d+g+x.dy*d),s.fillsize&&(y.size=s.fillsize[0]*c(e)+g+s.fillsize[1]*c(n)),h.appendChild(y)}f.visibility="visible"}};t.toString=function(){return"Your browser doesn\u2019t support SVG. Falling down to VML.\nYou are running Rapha\xebl "+this.version};var A=function(t,e,r){for(var i=n(e).toLowerCase().split("-"),a=r?"end":"start",s=i.length,o="classic",c="medium",l="medium";s--;)switch(i[s]){case"block":case"classic":case"oval":case"diamond":case"open":case"none":o=i[s];break;case"wide":case"narrow":l=i[s];break;case"long":case"short":c=i[s]}var u=t.node.getElementsByTagName("stroke")[0];u[a+"arrow"]=o,u[a+"arrowlength"]=c,u[a+"arrowwidth"]=l},T=function(i,c){i.attrs=i.attrs||{};var h=i.node,f=i.attrs,p=h.style,v=_[i.type]&&(c.x!=f.x||c.y!=f.y||c.width!=f.width||c.height!=f.height||c.cx!=f.cx||c.cy!=f.cy||c.rx!=f.rx||c.ry!=f.ry||c.r!=f.r),m=k[i.type]&&(f.cx!=c.cx||f.cy!=c.cy||f.r!=c.r||f.rx!=c.rx||f.ry!=c.ry),x=i;for(var y in c)c[e](y)&&(f[y]=c[y]);if(v&&(f.path=t._getPath[i.type](i),i._.dirty=1),c.href&&(h.href=c.href),c.title&&(h.title=c.title),c.target&&(h.target=c.target),c.cursor&&(p.cursor=c.cursor),"blur"in c&&i.blur(c.blur),(c.path&&"path"==i.type||v)&&(h.path=w(~n(f.path).toLowerCase().indexOf("r")?t._pathToAbsolute(f.path):f.path),"image"==i.type&&(i._.fillpos=[f.x,f.y],i._.fillsize=[f.width,f.height],S(i,1,1,0,0,0))),"transform"in c&&i.transform(c.transform),m){var C=+f.cx,T=+f.cy,P=+f.rx||+f.r||0,L=+f.ry||+f.r||0;h.path=t.format("ar{0},{1},{2},{3},{4},{1},{4},{1}x",a((C-P)*b),a((T-L)*b),a((C+P)*b),a((T+L)*b),a(C*b)),i._.dirty=1}if("clip-rect"in c){var M=n(c["clip-rect"]).split(u);if(4==M.length){M[2]=+M[2]+ +M[0],M[3]=+M[3]+ +M[1];var R=h.clipRect||t._g.doc.createElement("div"),O=R.style;O.clip=t.format("rect({1}px {2}px {3}px {0}px)",M),h.clipRect||(O.position="absolute",O.top=0,O.left=0,O.width=i.paper.width+"px",O.height=i.paper.height+"px",h.parentNode.insertBefore(R,h),R.appendChild(h),h.clipRect=R)}c["clip-rect"]||h.clipRect&&(h.clipRect.style.clip="auto")}if(i.textpath){var D=i.textpath.style;c.font&&(D.font=c.font),c["font-family"]&&(D.fontFamily='"'+c["font-family"].split(",")[0].replace(/^['"]+|['"]+$/g,d)+'"'),c["font-size"]&&(D.fontSize=c["font-size"]),c["font-weight"]&&(D.fontWeight=c["font-weight"]),c["font-style"]&&(D.fontStyle=c["font-style"])}if("arrow-start"in c&&A(x,c["arrow-start"]),"arrow-end"in c&&A(x,c["arrow-end"],1),null!=c.opacity||null!=c["stroke-width"]||null!=c.fill||null!=c.src||null!=c.stroke||null!=c["stroke-width"]||null!=c["stroke-opacity"]||null!=c["fill-opacity"]||null!=c["stroke-dasharray"]||null!=c["stroke-miterlimit"]||null!=c["stroke-linejoin"]||null!=c["stroke-linecap"]){var N=h.getElementsByTagName(l),F=!1;if(N=N&&N[0],!N&&(F=N=B(l)),"image"==i.type&&c.src&&(N.src=c.src),c.fill&&(N.on=!0),(null==N.on||"none"==c.fill||null===c.fill)&&(N.on=!1),N.on&&c.fill){var G=n(c.fill).match(t._ISURL);if(G){N.parentNode==h&&h.removeChild(N),N.rotate=!0,N.src=G[1],N.type="tile";var E=i.getBBox(1);N.position=E.x+g+E.y,i._.fillpos=[E.x,E.y],t._preload(G[1],function(){i._.fillsize=[this.offsetWidth,this.offsetHeight]})}else N.color=t.getRGB(c.fill).hex,N.src=d,N.type="solid",t.getRGB(c.fill).error&&(x.type in{circle:1,ellipse:1}||"r"!=n(c.fill).charAt())&&I(x,c.fill,N)&&(f.fill="none",f.gradient=c.fill,N.rotate=!1)}if("fill-opacity"in c||"opacity"in c){var z=((+f["fill-opacity"]+1||2)-1)*((+f.opacity+1||2)-1)*((+t.getRGB(c.fill).o+1||2)-1);z=o(s(z,0),1),N.opacity=z,N.src&&(N.color="none")}h.appendChild(N);var U=h.getElementsByTagName("stroke")&&h.getElementsByTagName("stroke")[0],V=!1;!U&&(V=U=B("stroke")),(c.stroke&&"none"!=c.stroke||c["stroke-width"]||null!=c["stroke-opacity"]||c["stroke-dasharray"]||c["stroke-miterlimit"]||c["stroke-linejoin"]||c["stroke-linecap"])&&(U.on=!0),("none"==c.stroke||null===c.stroke||null==U.on||0==c.stroke||0==c["stroke-width"])&&(U.on=!1);var j=t.getRGB(c.stroke);U.on&&c.stroke&&(U.color=j.hex),z=((+f["stroke-opacity"]+1||2)-1)*((+f.opacity+1||2)-1)*((+j.o+1||2)-1);var Y=.75*(r(c["stroke-width"])||1);if(z=o(s(z,0),1),null==c["stroke-width"]&&(Y=f["stroke-width"]),c["stroke-width"]&&(U.weight=Y),Y&&1>Y&&(z*=Y)&&(U.weight=1),U.opacity=z,c["stroke-linejoin"]&&(U.joinstyle=c["stroke-linejoin"]||"miter"),U.miterlimit=c["stroke-miterlimit"]||8,c["stroke-linecap"]&&(U.endcap="butt"==c["stroke-linecap"]?"flat":"square"==c["stroke-linecap"]?"square":"round"),c["stroke-dasharray"]){var H={"-":"shortdash",".":"shortdot","-.":"shortdashdot","-..":"shortdashdotdot",". ":"dot","- ":"dash","--":"longdash","- .":"dashdot","--.":"longdashdot","--..":"longdashdotdot"};U.dashstyle=H[e](c["stroke-dasharray"])?H[c["stroke-dasharray"]]:d}V&&h.appendChild(U)}if("text"==x.type){x.paper.canvas.style.display=d;var W=x.paper.span,q=100,X=f.font&&f.font.match(/\d+(?:\.\d*)?(?=px)/);p=W.style,f.font&&(p.font=f.font),f["font-family"]&&(p.fontFamily=f["font-family"]),f["font-weight"]&&(p.fontWeight=f["font-weight"]),f["font-style"]&&(p.fontStyle=f["font-style"]),X=r(f["font-size"]||X&&X[0])||10,p.fontSize=X*q+"px",x.textpath.string&&(W.innerHTML=n(x.textpath.string).replace(/"));var $=W.getBoundingClientRect();x.W=f.w=($.right-$.left)/q,x.H=f.h=($.bottom-$.top)/q,x.X=f.x,x.Y=f.y+x.H/2,("x"in c||"y"in c)&&(x.path.v=t.format("m{0},{1}l{2},{1}",a(f.x*b),a(f.y*b),a(f.x*b)+1));for(var Z=["x","y","text","font","font-family","font-weight","font-style","font-size"],J=0,Q=Z.length;Q>J;J++)if(Z[J]in c){x._.dirty=1;break}switch(f["text-anchor"]){case"start":x.textpath.style["v-text-align"]="left",x.bbx=x.W/2;break;case"end":x.textpath.style["v-text-align"]="right",x.bbx=-x.W/2;break;default:x.textpath.style["v-text-align"]="center",x.bbx=0}x.textpath.style["v-text-kern"]=!0}},I=function(e,a,s){e.attrs=e.attrs||{};var o=(e.attrs,Math.pow),c="linear",l=".5 .5";if(e.attrs.gradient=a,a=n(a).replace(t._radial_gradient,function(t,e,n){return c="radial",e&&n&&(e=r(e),n=r(n),o(e-.5,2)+o(n-.5,2)>.25&&(n=i.sqrt(.25-o(e-.5,2))*(2*(n>.5)-1)+.5),l=e+g+n),d}),a=a.split(/\s*\-\s*/),"linear"==c){var u=a.shift();if(u=-r(u),isNaN(u))return null}var h=t._parseDots(a);if(!h)return null;if(e=e.shape||e.node,h.length){e.removeChild(s),s.on=!0,s.method="none",s.color=h[0].color,s.color2=h[h.length-1].color;for(var f=[],p=0,v=h.length;v>p;p++)h[p].offset&&f.push(h[p].offset+g+h[p].color);s.colors=f.length?f.join():"0% "+s.color,"radial"==c?(s.type="gradientTitle",s.focus="100%",s.focussize="0 0",s.focusposition=l,s.angle=0):(s.type="gradient",s.angle=(270-u)%360),e.appendChild(s)}return 1},P=function(e,n){this[0]=this.node=e,e.raphael=!0,this.id=t._oid++,e.raphaelid=this.id,this.X=0,this.Y=0,this.attrs={},this.paper=n,this.matrix=t.matrix(),this._={transform:[],sx:1,sy:1,dx:0,dy:0,deg:0,dirty:1,dirtyT:1},!n.bottom&&(n.bottom=this),this.prev=n.top,n.top&&(n.top.next=this),n.top=this,this.next=null},L=t.el;P.prototype=L,L.constructor=P,L.transform=function(e){if(null==e)return this._.transform;var r,i=this.paper._viewBoxShift,a=i?"s"+[i.scale,i.scale]+"-1-1t"+[i.dx,i.dy]:d;i&&(r=e=n(e).replace(/\.{3}|\u2026/g,this._.transform||d)),t._extractTransform(this,a+e);var s,o=this.matrix.clone(),c=this.skew,l=this.node,u=~n(this.attrs.fill).indexOf("-"),h=!n(this.attrs.fill).indexOf("url(");if(o.translate(1,1),h||u||"image"==this.type)if(c.matrix="1 0 0 1",c.offset="0 0",s=o.split(),u&&s.noRotation||!s.isSimple){l.style.filter=o.toFilter();var f=this.getBBox(),p=this.getBBox(1),v=f.x-p.x,m=f.y-p.y;l.coordorigin=v*-b+g+m*-b,S(this,1,1,v,m,0)}else l.style.filter=d,S(this,s.scalex,s.scaley,s.dx,s.dy,s.rotate);else c&&(l.style.filter=d,c.matrix=n(o),c.offset=o.offset());return r&&(this._.transform=r),this},L.rotate=function(t,e,i){if(this.removed)return this;if(null!=t){if(t=n(t).split(u),t.length-1&&(e=r(t[1]),i=r(t[2])),t=r(t[0]),null==i&&(e=i),null==e||null==i){var a=this.getBBox(1);e=a.x+a.width/2,i=a.y+a.height/2}return this._.dirtyT=1,this.transform(this._.transform.concat([["r",t,e,i]])),this}},L.translate=function(t,e){return this.removed?this:(t=n(t).split(u),t.length-1&&(e=r(t[1])),t=r(t[0])||0,e=+e||0,this._.bbox&&(this._.bbox.x+=t,this._.bbox.y+=e),this.transform(this._.transform.concat([["t",t,e]])),this)},L.scale=function(t,e,i,a){if(this.removed)return this;if(t=n(t).split(u),t.length-1&&(e=r(t[1]),i=r(t[2]),a=r(t[3]),isNaN(i)&&(i=null),isNaN(a)&&(a=null)),t=r(t[0]),null==e&&(e=t),null==a&&(i=a),null==i||null==a)var s=this.getBBox(1);return i=null==i?s.x+s.width/2:i,a=null==a?s.y+s.height/2:a,this.transform(this._.transform.concat([["s",t,e,i,a]])),this._.dirtyT=1,this},L.hide=function(){return!this.removed&&(this.node.style.display="none"),this},L.show=function(){return!this.removed&&(this.node.style.display=d),this},L._getBBox=function(){return this.removed?{}:{x:this.X+(this.bbx||0)-this.W/2,y:this.Y-this.H,width:this.W,height:this.H}},L.remove=function(){if(!this.removed&&this.node.parentNode){this.paper.__set__&&this.paper.__set__.exclude(this),t.eve.unbind("raphael.*.*."+this.id),t._tear(this,this.paper),this.node.parentNode.removeChild(this.node),this.shape&&this.shape.parentNode.removeChild(this.shape);for(var e in this)this[e]="function"==typeof this[e]?t._removedFactory(e):null;this.removed=!0}},L.attr=function(n,r){if(this.removed)return this;if(null==n){var i={};for(var a in this.attrs)this.attrs[e](a)&&(i[a]=this.attrs[a]);return i.gradient&&"none"==i.fill&&(i.fill=i.gradient)&&delete i.gradient,i.transform=this._.transform,i}if(null==r&&t.is(n,"string")){if(n==l&&"none"==this.attrs.fill&&this.attrs.gradient)return this.attrs.gradient;for(var s=n.split(u),o={},c=0,f=s.length;f>c;c++)n=s[c],o[n]=n in this.attrs?this.attrs[n]:t.is(this.paper.customAttributes[n],"function")?this.paper.customAttributes[n].def:t._availableAttrs[n];return f-1?o:o[s[0]]}if(this.attrs&&null==r&&t.is(n,"array")){for(o={},c=0,f=n.length;f>c;c++)o[n[c]]=this.attr(n[c]);return o}var g;null!=r&&(g={},g[n]=r),null==r&&t.is(n,"object")&&(g=n);for(var d in g)h("raphael.attr."+d+"."+this.id,this,g[d]);if(g){for(d in this.paper.customAttributes)if(this.paper.customAttributes[e](d)&&g[e](d)&&t.is(this.paper.customAttributes[d],"function")){var p=this.paper.customAttributes[d].apply(this,[].concat(g[d]));this.attrs[d]=g[d];for(var v in p)p[e](v)&&(g[v]=p[v])}g.text&&"text"==this.type&&(this.textpath.string=g.text),T(this,g)}return this},L.toFront=function(){return!this.removed&&this.node.parentNode.appendChild(this.node),this.paper&&this.paper.top!=this&&t._tofront(this,this.paper),this},L.toBack=function(){return this.removed?this:(this.node.parentNode.firstChild!=this.node&&(this.node.parentNode.insertBefore(this.node,this.node.parentNode.firstChild),t._toback(this,this.paper)),this)},L.insertAfter=function(e){return this.removed?this:(e.constructor==t.st.constructor&&(e=e[e.length-1]),e.node.nextSibling?e.node.parentNode.insertBefore(this.node,e.node.nextSibling):e.node.parentNode.appendChild(this.node),t._insertafter(this,e,this.paper),this)},L.insertBefore=function(e){return this.removed?this:(e.constructor==t.st.constructor&&(e=e[0]),e.node.parentNode.insertBefore(this.node,e.node),t._insertbefore(this,e,this.paper),this)},L.blur=function(e){var n=this.node.runtimeStyle,r=n.filter;return r=r.replace(m,d),0!==+e?(this.attrs.blur=e,n.filter=r+g+f+".Blur(pixelradius="+(+e||1.5)+")",n.margin=t.format("-{0}px 0 0 -{0}px",a(+e||1.5))):(n.filter=r,n.margin=0,delete this.attrs.blur),this},t._engine.path=function(t,e){var n=B("shape");n.style.cssText=y,n.coordsize=b+g+b,n.coordorigin=e.coordorigin;var r=new P(n,e),i={fill:"none",stroke:"#000"};t&&(i.path=t),r.type="path",r.path=[],r.Path=d,T(r,i),e.canvas.appendChild(n);var a=B("skew");return a.on=!0,n.appendChild(a),r.skew=a,r.transform(d),r},t._engine.rect=function(e,n,r,i,a,s){var o=t._rectPath(n,r,i,a,s),c=e.path(o),l=c.attrs;return c.X=l.x=n,c.Y=l.y=r,c.W=l.width=i,c.H=l.height=a,l.r=s,l.path=o,c.type="rect",c},t._engine.ellipse=function(t,e,n,r,i){{var a=t.path();a.attrs}return a.X=e-r,a.Y=n-i,a.W=2*r,a.H=2*i,a.type="ellipse",T(a,{cx:e,cy:n,rx:r,ry:i}),a},t._engine.circle=function(t,e,n,r){{var i=t.path();i.attrs}return i.X=e-r,i.Y=n-r,i.W=i.H=2*r,i.type="circle",T(i,{cx:e,cy:n,r:r}),i},t._engine.image=function(e,n,r,i,a,s){var o=t._rectPath(r,i,a,s),c=e.path(o).attr({stroke:"none"}),u=c.attrs,h=c.node,f=h.getElementsByTagName(l)[0];return u.src=n,c.X=u.x=r,c.Y=u.y=i,c.W=u.width=a,c.H=u.height=s,u.path=o,c.type="image",f.parentNode==h&&h.removeChild(f),f.rotate=!0,f.src=n,f.type="tile",c._.fillpos=[r,i],c._.fillsize=[a,s],h.appendChild(f),S(c,1,1,0,0,0),c},t._engine.text=function(e,r,i,s){var o=B("shape"),c=B("path"),l=B("textpath");r=r||0,i=i||0,s=s||"",c.v=t.format("m{0},{1}l{2},{1}",a(r*b),a(i*b),a(r*b)+1),c.textpathok=!0,l.string=n(s),l.on=!0,o.style.cssText=y,o.coordsize=b+g+b,o.coordorigin="0 0";var u=new P(o,e),h={fill:"#000",stroke:"none",font:t._availableAttrs.font,text:s};u.shape=o,u.path=c,u.textpath=l,u.type="text",u.attrs.text=n(s),u.attrs.x=r,u.attrs.y=i,u.attrs.w=1,u.attrs.h=1,T(u,h),o.appendChild(l),o.appendChild(c),e.canvas.appendChild(o);var f=B("skew");return f.on=!0,o.appendChild(f),u.skew=f,u.transform(d),u},t._engine.setSize=function(e,n){var r=this.canvas.style;return this.width=e,this.height=n,e==+e&&(e+="px"),n==+n&&(n+="px"),r.width=e,r.height=n,r.clip="rect(0 "+e+" "+n+" 0)",this._viewBox&&t._engine.setViewBox.apply(this,this._viewBox),this},t._engine.setViewBox=function(e,n,r,i,a){t.eve("raphael.setViewBox",this,this._viewBox,[e,n,r,i,a]);var o,c,l=this.width,u=this.height,h=1/s(r/l,i/u);return a&&(o=u/i,c=l/r,l>r*o&&(e-=(l-r*o)/2/o),u>i*c&&(n-=(u-i*c)/2/c)),this._viewBox=[e,n,r,i,!!a],this._viewBoxShift={dx:-e,dy:-n,scale:h},this.forEach(function(t){t.transform("...")}),this};var B;t._engine.initWin=function(t){var e=t.document;e.createStyleSheet().addRule(".rvml","behavior:url(#default#VML)");try{!e.namespaces.rvml&&e.namespaces.add("rvml","urn:schemas-microsoft-com:vml"),B=function(t){return e.createElement("')}}catch(n){B=function(t){return e.createElement("<"+t+' xmlns="urn:schemas-microsoft.com:vml" class="rvml">')}}},t._engine.initWin(t._g.win),t._engine.create=function(){var e=t._getContainer.apply(0,arguments),n=e.container,r=e.height,i=e.width,a=e.x,s=e.y;if(!n)throw new Error("VML container not found.");var o=new t._Paper,c=o.canvas=t._g.doc.createElement("div"),l=c.style;return a=a||0,s=s||0,i=i||512,r=r||342,o.width=i,o.height=r,i==+i&&(i+="px"),r==+r&&(r+="px"),o.coordsize=1e3*b+g+1e3*b,o.coordorigin="0 0",o.span=t._g.doc.createElement("span"),o.span.style.cssText="position:absolute;left:-9999em;top:-9999em;padding:0;margin:0;line-height:1;",c.appendChild(o.span),l.cssText=t.format("top:0;left:0;width:{0};height:{1};display:inline-block;position:relative;clip:rect(0 {0} {1} 0);overflow:hidden",i,r),1==n?(t._g.doc.body.appendChild(c),l.left=a+"px",l.top=s+"px",l.position="absolute"):n.firstChild?n.insertBefore(c,n.firstChild):n.appendChild(c),o.renderfix=function(){},o},t.prototype.clear=function(){t.eve("raphael.clear",this),this.canvas.innerHTML=d,this.span=t._g.doc.createElement("span"),this.span.style.cssText="position:absolute;left:-9999em;top:-9999em;padding:0;margin:0;line-height:1;display:inline;",this.canvas.appendChild(this.span),this.bottom=this.top=null},t.prototype.remove=function(){t.eve("raphael.remove",this),this.canvas.parentNode.removeChild(this.canvas);for(var e in this)this[e]="function"==typeof this[e]?t._removedFactory(e):null;return!0};var M=t.st;for(var R in L)L[e](R)&&!M[e](R)&&(M[R]=function(t){return function(){var e=arguments;return this.forEach(function(n){n[t].apply(n,e)})}}(R))}(window.Raphael)}(),a=function(t){var e=n;return t=e}(),s=function(t){var e=a;return t=e}(),o=function(t){function e(t,e){var n=t.length,r=t[0];if(e=t[n-1])return t[n-1];for(var i=1;it[r-1])return h;if(e=n)return e(1,t),void(s&&s());var l=Math.pow(c/n,1.7);e(l,t),u[a]=v.requestAnimationFrame(function(){r(t+1,e,n,s)})}var i=(new Date).getTime(),a=v.guid(f);return r(0,e,t,n),a}function a(t){u[t]&&(v.cancelAnimationFrame(u[t]),delete u[t])}function o(t,e,n){n=n||0;for(var r in e)if(e.hasOwnProperty(r)){var i=e[r];null!==i&&v.isObject(i)?(v.isObject(t[r])||(t[r]={}),p>n?o(t[r],e[r]):t[r]=e[r]):v.isArray(i)?(t[r]=[],t[r]=t[r].concat(i)):void 0!==i&&(t[r]=e[r])}}function c(t){var e={};return e.target=t.srcElement,e.pageX=t.clientX+document.body.scrollLeft-document.body.clientLeft,e.pageY=t.clientY+document.body.scrollTop-document.body.clientTop,v.each(m,function(n){e[n]=t[n]}),e.stopPropagation=function(){window.event.cancelBubble=!0},e}var l=s,u={},h=0/0,f="h",g=Object.prototype,d=g.toString,p=5,v={substitute:function(t,e){return t&&e?t.replace(/\\?\{([^{}]+)\}/g,function(t,n){return"\\"===t.charAt(0)?t.slice(1):void 0===e[n]?"":e[n] +}):t},ucfirst:function(t){return t+="",t.charAt(0).toUpperCase()+t.substring(1)},isString:function(t){return"string"==typeof t},isNumber:function(t){return"number"==typeof t},isNumeric:function(t){return!isNaN(parseFloat(t))&&isFinite(t)},isBoolean:function(t){return"boolean"==typeof t},isFunction:function(t){return"function"==typeof t},isArray:"isArray"in Array?Array.isArray:function(t){return"[object Array]"===d.call(t)},isDate:function(t){return"[object Date]"===d.call(t)},isObject:"[object Object]"===d.call(null)?function(t){return null!==t&&void 0!==t&&"[object Object]"===d.call(t)&&void 0===t.ownerDocument}:function(t){return"[object Object]"===d.call(t)},extend:function(t,e,n,r){v.isFunction(e)||(n=e,e=t,t=function(){});var i=Object.create?function(t,e){return Object.create(t,{constructor:{value:e}})}:function(t,e){function n(){}n.prototype=t;var r=new n;return r.constructor=e,r},a=i(e.prototype,t);return t.prototype=v.mix(a,t.prototype),t.superclass=i(e.prototype,e),v.mix(a,n),v.mix(t,r),t},augment:function(t){for(var e=v.toArray(arguments),n=1;n=0;e--)delete t[e];t.length=0},equalsArray:function(t,e){if(t==e)return!0;if(!t||!e)return!1;if(t.length!=e.length)return!1;for(var n=!0,r=0;r]*>/,y=document.createElement("table"),b=document.createElement("tr"),_={tr:document.createElement("tbody"),tbody:y,thead:y,tfoot:y,td:b,th:b,"*":document.createElement("div")};return v.mix(v,{vml:l.vml,svg:l.svg,createDom:function(t){var e=x.test(t)&&RegExp.$1;return e in _||(e="*"),container=_[e],t=t.replace(/(^\s*)|(\s*$)/g,""),container.innerHTML=""+t,container.childNodes[0]},getOffset:function(t){for(var e={},n=0,r=0;null!=t&&t!=document.body;)n+=t.offsetLeft||0,r+=t.offsetTop||0,t=t.offsetParent;return e.top=r,e.left=n,e},contains:function(t,e){if(!t||!e)return!1;for(var n=!1,r=e.parentNode;null!=r&&r!=document.body;){if(r==t){n=!0;break}r=r.parentNode}return n},getWidth:function(t){var e=v.getStyle(t,"width");return("auto"==e||e.indexOf("%")>-1)&&(e=t.offsetWidth),parseFloat(e)},getHeight:function(t){var e=v.getStyle(t,"height");return"auto"==e&&(e=t.offsetHeight),parseFloat(e)},getOuterWidth:function(t){var e=v.getWidth(t),n=parseFloat(v.getStyle(t,"borderLeftWidth"))||0,r=parseFloat(v.getStyle(t,"paddingLeft")),i=parseFloat(v.getStyle(t,"paddingRight")),a=parseFloat(v.getStyle(t,"borderRightWidth"))||0;return e+n+a+r+i},getOuterHeight:function(t){var e=v.getHeight(t),n=parseFloat(v.getStyle(t,"borderTopWidth"))||0,r=parseFloat(v.getStyle(t,"paddingTop")),i=parseFloat(v.getStyle(t,"paddingBottom")),a=parseFloat(v.getStyle(t,"borderBottomWidth"))||0;return e+n+a+r+i},getStyle:function(t,e){return window.getComputedStyle?window.getComputedStyle(t,null)[e]:t.currentStyle[e]},addEvent:function(t,e,n){t.attachEvent?(t["e"+e+n]=n,t[e+n]=function(){window.event.target=window.event.srcElement,t["e"+e+n](c(window.event))},t.attachEvent("on"+e,t[e+n])):t.addEventListener(e,n,!1)},removeEvent:function(t,e,n){t.detachEvent?(t.detachEvent("on"+e,t[e+n]),t[e+n]=null):t.removeEventListener(e,n,!1)},angle:function(t,e,n,r){return l.angle(t,e,n,r)},animStep:function(t,e,n){return i(t,e,n)},stopStep:function(t){a(t)},animPath:function(t,e,n,r,i,a){function s(){t.attr("path",e),a&&a()}if(v.vml)return void s();if(n=n||0,r=r||400,!e)return void s();var o,c=t.getPath(),l=v.parsePathString(e),u=c.slice(-1*n);if(c.length>l.length)o=c.slice(0,l.length);else if(o=c.concat([]),n)for(var h=o.length;h=r)return t[0];var o=t[t.length-1];if(r>=o)return o}return Math.abs(r-a)e?e:t}function n(t,e){return t>e?t:e}function r(t,e){this.start=t,this.end=e,this.init()}var i=c;return i.augment(r,{init:function(){var t=this;start=t.start,end=t.end;var r=t.tl={};r.x=e(start.x,end.x),r.y=e(start.y,end.y);var i=t.tr={};i.x=n(start.x,end.x),i.y=e(start.y,end.y);var a=t.bl={};a.x=e(start.x,end.x),a.y=n(start.y,end.y);var s=t.br={};s.x=n(start.x,end.x),s.y=n(start.y,end.y);var o=t.cc={};o.x=(s.x-r.x)/2+r.x,o.y=(s.y-r.y)/2+r.y},reset:function(t,e){this.start=t,this.end=e,this.init()},isInRange:function(t,e){i.isObject(t)&&(e=t.y,t=t.x);var n=this,r=n.tl,a=n.br;return t>=r.x&&t<=a.x&&e>=r.y&&e<=a.y},isInVertical:function(t){i.isObject(t)&&(t=t.y);var e=this,n=e.tl,r=e.br;return t>=n.y&&t<=r.y},isInHorizontal:function(t){i.isObject(t)&&(t=t.x);var e=this,n=e.tl,r=e.br;return t>=n.x&&t<=r.x},getWidth:function(){var t=this.tl,e=this.br;return e.x-t.x},getHeight:function(){var t=this.tl,e=this.br;return e.y-t.y}}),t=r}(),g=function(t){var e=c,n=function(){};return n.ATTRS={actived:!1},e.augment(n,{isActived:function(){return this.get("actived")},setActived:function(){this.setActiveStatus(!0),this.set("actived",!0)},setActiveStatus:function(){},clearActived:function(){this.setActiveStatus(!1),this.set("actived",!1),this.clearActivedItem&&this.clearActivedItem()}}),t=n}(),d=function(t){var e=c,n=function(){};return n.ATTRS={},e.augment(n,{isItemActived:function(t){return t.isActived()},getActiveItems:function(){return this.get("children")},setItemActived:function(t,e){e?t.setActived():t.clearActived()},onActived:function(t){this.fire("itemactived",{item:t}),this.fireUpGroup&&this.fireUpGroup("actived",t)},onUnActived:function(t){this.fire("itemunactived",{item:t}),this.fireUpGroup&&this.fireUpGroup("unactived",t)},setActivedItem:function(t){var e=this;e.clearActivedItem(),t&&!e.isItemActived(t)&&(e.setItemActived(t,!0),e.onActived(t))},getActived:function(){var t=this,n=t.getActiveItems(),r=null;return e.each(n,function(e){return t.isItemActived(e)?(r=e,!1):void 0}),r},clearActivedItem:function(t){var e=this;t=t||e.getActived(),t&&(e.setItemActived(t,!1),e.onUnActived(t))}}),t=n}(),p=function(t){function n(t){return null==t}function r(t){var e=1;if(1e-6>t)return e;for(;t>10;)e=10*e,t/=10;for(;1>t;)e/=10,t=10*t;return e}function i(t,e,n){n=n||C;var i=n==C?!1:!0,s=1;0>t&&(s=-1),t*=s;var o=r(t);return s*=o,t/=o,t=i?a(n,t):e&&s>0?k.snapFloor(n,t):k.snapCeiling(n,t),t*s}function a(t,e){for(var n=e,r=e,i=e,a=1;ae){n=s;break}r=s}return i=Math.abs(r-e)i;i++){var a=t[i];a>e&&(e=a),n>a&&(n=a)}return n==e&&(n>0?n=0:e=0),{max:e,min:n}}function u(t,e){var n=[];return k.isArray(t[0])?e?k.each(t[0],function(e,r){for(var i=e,a=1;ae&&(e=w.addDay(1,e)),e.getTime()}function d(t){return new Date(t).getFullYear()}function p(t){return new Date(t,0,1).getTime()}function v(t){return new Date(t).getMonth()}function m(t,e){var n=d(t),r=d(e),i=v(t),a=v(e);return 12*(r-n)+(a-i)%12}function x(t,e){return new Date(t,e,1).getTime()}function y(t,e){return Math.ceil((e-t)/M)}function b(t,e){return Math.ceil((e-t)/B)}function _(t,e){return Math.ceil((e-t)/6e4)}var k=c,w=e,C=[0,1,1.5,2,2.5,3,4,5,6,8,10],S=[0,1,2.5,5,10],A=[1,2,4,6,8,12],T=5,I=7,P={};P.caculate=function(t,e){var r,a=t.min,c=t.max,l=t.data,u=t.interval,f=[],g=t.minCount||T,d=t.maxCount||I,p=(g+d)/2,v=!1;if(e&&"percent"==e&&(a=0,c=100,u=25),n(a)||n(c)||n(u)){var m=h(l,null,v);if(n(c)&&(c=m.max+.05*(m.max-m.min)),n(a)&&(a=m.min),c==a&&(c=a+1,a-=1,u=1),n(u)){var x=(c-a)/p;u=i(x,!0,S),r=parseInt((c-a)/u,10),r>d&&(r=d),g>r&&(r=g),u=i((c-a)/r,!0,S),c=s(c,u,!0),a=s(a,u),r=Math.round((c-a)/u)}}n(r)&&(r=(c-a)/u),a=o(a,u),n(a)||f.push(a);for(var y=1;r>=y;y++)f.push(o(u*y+a,u));return{min:a,max:o(c,u),interval:u,count:r,ticks:f,info:m}},P.Time={};var L=6e4,B=36e5,M=864e5;return P.Time.caculate=function(t){var e,r=t.min,i=t.max,a=t.data,s=t.interval,c=[],l={};if(n(r)||n(i)||n(s)){if(l=h(a,function(t){return k.isDate(t)&&(t=t.getTime()),k.isString(t)&&(t=t.replace(/-/gi,"/"),t=new Date(t)),t}),n(i)&&(i=l.max),n(r)&&(r=l.min),i-r>M&&(r=f(r),i=g(i)),i==r)throw"max not equal to min";if(n(s)){var u,w,C=i-r,S=M,T=365*S;s=parseInt(C/(t.maxCount||8)),u=s/T;var I=d(r);if(u>.51){w=Math.ceil(u),s=w*T;for(var P=d(i),R=I;P+w>=R;R+=w)c.push(p(R));s=null}else if(u>.0834){for(var w=d(r),O=Math.floor(u/.0834),D=v(r),N=m(r,i),R=0;N+O>=R;R+=O)c.push(x(I,R+D));s=null}else if(s>.5*S){var F=new Date(r),w=F.getFullYear(),O=F.getMonth(r),G=F.getDate(),E=Math.ceil(s/S),z=y(r,i);s=E*S;for(var R=0;z+E>R;R+=E)c.push(new Date(w,O,G+R).getTime())}else if(s>B){var F=new Date(r),w=F.getFullYear(),O=F.getMonth(r),E=F.getDate(),U=F.getHours(),V=k.snapTo(A,Math.ceil(s/B)),j=b(r,i);s=V*B;for(var R=0;j+V>=R;R+=V)c.push(new Date(w,O,E,U+R).getTime())}else if(s>L){var Y=_(r,i),H=Math.ceil(s/L);s=H*L;for(var R=0;Y+H>=R;R+=H)c.push(r+R*L)}else{r=1e3*Math.floor(r/1e3);var W=Math.ceil((i-r)/1e3),q=Math.ceil(s/1e3);s=1e3*q;for(var R=0;W+q>R;R+=q)c.push(r+1e3*R)}}}if(!c.length){r=1e3*Math.floor(r/1e3),i=1e3*Math.ceil(i/1e3);for(var e=(i-r)/s,R=0;e>=R;R++)c.push(o(s*R+r,s))}return{max:l.max||i,min:l.min||r,interval:s,ticks:c,count:c.length}},P.TimeCategory={},P.TimeCategory.caculate=function(t){var e={},n=[],r=t.maxCount||I,i=u(t.data);if(i.lengtho;o+=s)n.push(i[o]);var c=i[a-1];i[1]-i[0]>2*(c-i[i.length-2])&&n.pop(),n.push(c)}return e.categories=i,e.ticks=n,e},t=P}(),v=function(t){var e=c,n=function(){};return n.ATTRS={stackType:"none"},e.augment(n,{processStackedPoint:function(t,e){var n=this,r=n.getVisiblePrev(),i=n.getXName(),a=n.getYName();if(r){var s=r.getPoints()[e],o=n.getBaseValue();if(n.isInCircle()){var c,l=n.get("xAxis"),u=l.getDistance(t.x,t.y),h=s.r||l.getDistance(s.x,s.y);u=h+u,c=l.getCirclePoint(t.xValue,u),t.x=c.x,t.y=c.y,t.r=u,t.ir=h}else t[a]=t[a]+s[a]-o;t.lowY=s[a],t.lowX=s[i]}},getStackedPercent:function(t,e){var n=this,r=n.get("parent").getStackedData(n.get("yAxis"),"yAxis"),i=r[e];return i?t/i:0/0},parseYValue:function(t){var n,r=this,i=r.get("stackType"),a=r.get("data"),s=e.indexOf(a,t);return"percent"==i&&(n=r.getStackedPercent(t,s),t=100*n),t},getVisiblePrev:function(){var t,n=this,r=n.get("parent"),i=n.get("yAxis"),a=r.get("children");return e.each(a,function(e){return e==n?!1:void(e.get("visible")&&e.get("yAxis")==i&&(t=e))}),t},getTipInfo:function(t){var e=this,n=e.get("stackType");if("percent"==n){var r=t.yValue||0;return[t.value,"\uff08"+r.toFixed(2)+"%\uff09"]}return t.value},isStacked:function(){var t=this,e=t.get("stackType");return e&&"none"!==e}}),t=n}(),m=function(t){var e=c,n=function(t,e){return n.initTheme(t,e)};n.initTheme=function(t,n){return e.mix(!0,{},t,n)};var r={duration:1e3,line:{"stroke-width":2,"stroke-linejoin":"round","stroke-linecap":"round"},lineActived:{"stroke-width":3},markers:{marker:{radius:3},actived:{radius:6,stroke:"#fff"}},animate:!0};return n.Origin=n({plotCfg:{margin:[50]},yTickCounts:[3,5],xTickCounts:[5,10],title:{"font-size":"16px","font-family":"SimSun,Georgia, Times, serif",fill:"#274b6d"},subTitle:{"font-size":14,"font-family":"tahoma,arial,SimSun,Georgia, Times, serif",fill:"#4d759e"},xAxis:{labels:{label:{y:12}}},yAxis:{line:null,tickLine:null,grid:{line:{stroke:"#c0c0c0"}},title:{text:"",rotate:-90,x:-30},position:"left",labels:{label:{x:-12}}},legend:{dy:30},seriesOptions:{lineCfg:r,areaCfg:{line:{"stroke-width":.5,"stroke-linejoin":"round","stroke-linecap":"round"},lineActived:{"stroke-width":1},animate:!0,markers:r.markers},arearangeCfg:{markers:null,line:{stroke:null},area:{stroke:null},lineActived:{stroke:null},areaActived:{stroke:null}},flagCfg:{flags:{flag:{distance:-15,line:{stroke:"#333","stroke-width":1},shapeType:"rect",shapeCfg:{stroke:"#333",width:22,height:22},title:"A",titleCfg:{rotate:90,fill:"#333333","font-size":13,"font-weight":"bold"},text:""}},duration:1e3,animate:!0,onSeries:"xaxis"},candlestickCfg:{candlesticks:{candlestick:{riseLine:{stroke:"red"},fallLine:{stroke:"green"},riseShape:{stroke:"red",fill:"red"},fallShape:{stroke:"green",fill:"green"}}}},bubbleCfg:{circle:{"stroke-width":1,"fill-opacity":.5},activeCircle:{"stroke-width":2}},pieCfg:{colors:["#5e90c9","#1c2d3f","#a9d052","#a12d2d","#43bbb4","#5a2a94","#fabe3c","#2279dc","#e360e5","#48000c"],item:{stroke:"#fff"},labels:{distance:30,label:{}}}},tooltip:{x:-999,y:-999,offset:5}}),n.Base=n.initTheme(n.Origin,{colors:["#5e90c9","#1c2d3f","#a9d052","#a12d2d","#43bbb4","#5a2a94","#fabe3c","#2279dc","#e360e5","#48000c"],symbols:["circle","diamond","square","triangle","triangle-down"],plotCfg:{margin:[50,50,100]},seriesOptions:{pieCfg:{colors:["#5e90c9","#1c2d3f","#a9d052","#a12d2d","#43bbb4","#5a2a94","#fabe3c","#2279dc","#e360e5","#48000c"]}}}),n.SmoothBase=n.initTheme(n.Origin,{title:{fill:"#505050"},subTitle:{fill:"#999"},xAxis:{line:{"stroke-width":1,stroke:"#a7a7a7"},tickLine:null,labels:{label:{y:12,fill:"#444444","font-size":"12"}}},yAxis:{grid:{line:{stroke:"#a7a7a7","stroke-dasharray":"."}},title:{text:"",rotate:-90,x:-35,fill:"#444"},position:"left",labels:{label:{x:-20,fill:"#444444","font-size":"12"}}},plotCfg:{margin:[50,50,100]},legend:{back:null,spacingX:30,itemCfg:{label:{fill:"#a7a7a7","text-anchor":"start",cursor:"pointer","font-size":"12"}}},colors:["#4dceff","#79c850","#ffb65d","#fc694b","#7179cb","#9a9792"],symbols:["circle"],seriesOptions:{lineCfg:{line:{"stroke-width":4},lineActived:{"stroke-width":4},markers:{marker:{fill:"#fff",radius:6,"stroke-width":4},actived:{fill:"#fff","stroke-width":5,stroke:null}}},areaCfg:{markers:{single:!0,marker:{fill:"#fff",radius:6,"stroke-width":4},actived:{fill:"#fff","stroke-width":5,stroke:null}},area:{"fill-opacity":.5,stroke:null}},pieCfg:{colors:["#4dceff","#79c850","#ffb65d","#fc694b","#7179cb","#9a9792"],labels:{distance:30,label:{"font-size":"12",fill:"#a7a7a7"}}}},tooltip:{offset:10,title:{"font-size":"12","text-anchor":"start",x:8,y:15,fill:"#444"},value:{"font-size":"12","font-weight":"normal","text-anchor":"start",fill:"#444"},crossLine:{stroke:"#d7d7d7"}}}),n.Smooth1=n.initTheme(n.SmoothBase),n.Smooth2=n.initTheme(n.SmoothBase,{colors:["#00a3d7","#6ebb46","#f6c100","#ff6a00","#e32400","#423ba8"],symbols:["circle","diamond","square","triangle","triangle-down"],seriesOptions:{pieCfg:{colors:["#00a3d7","#6ebb46","#f6c100","#ff6a00","#e32400","#423ba8"]}}}),n.Smooth3=n.initTheme(n.SmoothBase,{colors:["#40a00e","#444444","#85cc82","#5e5e64","#60b336","#89847f"],seriesOptions:{pieCfg:{colors:["#40a00e","#444444","#85cc82","#5e5e64","#60b336","#89847f"]}}}),n.Smooth4=n.initTheme(n.SmoothBase,{colors:["#e1c673","#c49756","#8c6c42","#595348","#c86c4b","#7c4f34"],seriesOptions:{pieCfg:{colors:["#e1c673","#c49756","#8c6c42","#595348","#c86c4b","#7c4f34"]}}}),n.Smooth5=n.initTheme(n.SmoothBase,{colors:["#89847f","#aea9a2","#606060","#232323","#d8d2c7","#444444"],seriesOptions:{pieCfg:{colors:["#89847f","#aea9a2","#606060","#232323","#d8d2c7","#444444"]}}}),n.Smooth6=n.initTheme(n.SmoothBase,{colors:["#ff9d40","#89847f","#ff8127","#b4aea7","#ffba66","#606060"],seriesOptions:{pieCfg:{colors:["#ff9d40","#89847f","#ff8127","#b4aea7","#ffba66","#606060"]}}}),n.Smooth7=n.initTheme(n.SmoothBase,{colors:["#25b0dd","#7fdcff","#30b2c8","#5dc5ee","#266796","#258bca"],seriesOptions:{pieCfg:{colors:["#25b0dd","#7fdcff","#30b2c8","#5dc5ee","#266796","#258bca"]}}}),t=n}(),x=function(t){function e(t,e){return i.isArray(t)&&(t=t.join(" ")),"M"+t+e}var n=l,r=u,i=c,a=function(t){a.superclass.constructor.call(this,t)};a.ATTRS={attrs:{}},i.extend(a,n),i.mixin(a,[r]),i.augment(a,{isShape:!0,createDom:function(){var t,e,n,r=this,i=r.get("el");i||(e=r.cfg,n=r.parseElCfg(e.attrs),i=r.createElement(n),r.set("el",i)),t=i.node,t.shape=this,r.set("node",t),0==this.get("visible")&&i.hide()},createElement:function(t){var e,n=this,r=n.get("parent"),i=r.get("el").add([t]);return e=i[0]},parseElCfg:function(t){return t.type=this.get("type"),t},getTotalLength:function(){return this.get("el").getTotalLength()},rotate:function(t,e,n){var r=this;if(r.isGroup&&null==e&&null==n){var i=r._getTranslatePoint();e=i.x,n=i.y}this.get("el").rotate(t,e,n)},scale:function(t,e,n,r){var i=this,a=i.get("el");a.scale(t,e,n,r)},transform:function(t){var e=this,n=e.get("el");n.transform(t)},getBBox:function(){return this.get("el").getBBox()},getPath:function(){var t=this,e=t.get("el"),n=e.getPath();return i.isString(n)&&(n=i.parsePathString(n)),n},getPathString:function(){var t=this,e=t.getPath();return i.parsePathArray(e)},getTransformPath:function(){var t=this,e=t.getPath(),n=t.get("el").matrix;return i.transformPath(e,n.toTransformString())},_getTranslatePoint:function(){var t=this,e=t.getTransformPath(),n={x:0,y:0};return i.each(e,function(t){"M"==t[0]&&(n.x=t[1],n.y=t[2])}),n},__getTransform:function(t){if(i.isString(t)){t=t.replace(/([t,s,r])/,";$1 ").split(";");var e=[];i.each(t,function(t){if(t){var n=t.split(" ");n=i.map(n,function(t){return i.isNumeric(t)?parseFloat(t):t}),e.push(n)}}),t=e}return t}});var s=function(t){s.superclass.constructor.call(this,t)};s.ATTRS={cx:{},cy:{},r:{}},i.extend(s,a),a.Circle=s;var o=function(t){o.superclass.constructor.call(this,t)};o.ATTRS={x:{},y:{},width:{},height:{},r:{value:0}},i.extend(o,a),a.Rect=o;var h=function(t){h.superclass.constructor.call(this,t)};h.ATTRS={cx:{},cy:{},rx:{},ry:{}},i.extend(h,a),a.Ellipse=h;var f=function(t){f.superclass.constructor.call(this,t)};f.ATTRS={path:{}},i.extend(f,a),a.Path=f;var g=function(t){g.superclass.constructor.call(this,t)};g.ATTRS={x1:{},y1:{},x2:{},y2:{}},i.extend(g,f),i.augment(g,{parseElCfg:function(t){return t.type="path",t.path=i.substitute("M {x1},{y1}L{x2},{y2}",t),t},_getLinePoint:function(t,e){var n=this.getPath();return n[t][e]},_setLinePoint:function(t,e,n){var r=this,i=this.getPath();i[t][e]=n,r.attr("path",i)},__setX1:function(t){this._setLinePoint(0,1,t)},__getX1:function(){return this._getLinePoint(0,1)},__setX2:function(t){this._setLinePoint(1,1,t)},__getX2:function(){return this._getLinePoint(1,1)},__setY1:function(t){this._setLinePoint(0,2,t)},__getY1:function(){return this._getLinePoint(0,2)},__setY2:function(t){this._setLinePoint(1,2,t)},__getY2:function(){return this._getLinePoint(1,2)}}),a.Line=g;var d=function(t){d.superclass.constructor.call(this,t)};d.ATTRS={points:[]},i.extend(d,f),i.augment(d,{__setPoints:function(t){var n=this,r=(n.get("el"),e(t,""));n.attr("path",r)},parseElCfg:function(t){return t.type="path",t.path=e(t.points,""),t}}),a.PolyLine=d;var p=function(t){d.superclass.constructor.call(this,t)};p.ATTRS={points:[]},i.extend(p,f),i.augment(p,{__setPoints:function(t){var n=this,r=(n.get("el"),e(t,"z"));n.attr("path",r)},parseElCfg:function(t){return t.type="path",t.path=e(t.points,"z"),t}}),a.Polygon=p;var v=function(t){v.superclass.constructor.call(this,t)};v.ATTRS={x:{},y:{},text:{},font:{},"text-anchor":{}},i.extend(v,a),a.Text=v;var m=function(t){m.superclass.constructor.call(this,t)};i.extend(m,v),m.ATTRS={rotate:{}},i.augment(m,{parseElCfg:function(t){return t.type="text",t.rotate&&(t.transform=i.substitute("r{rotate} {x} {y}",t)),t}}),a.Label=m;var x=function(t){x.superclass.constructor.call(this,t)};x.ATTRS={symbol:{value:"custom"},radius:{value:5},path:{},x:{},y:{}},x.Symbols={circle:function(t,e,n){return[["M",t,e-n],["a",n,n,0,1,1,0,2*n],["a",n,n,0,1,1,0,-2*n],["z"]]},square:function(t,e,n){return[["M",t-n,e-n],["L",t+n,e-n],["L",t+n,e+n],["L",t-n,e+n],["z"]]},diamond:function(t,e,n){return[["M",t-n,e],["L",t,e-n],["L",t+n,e],["L",t,e+n],["z"]]},triangle:function(t,e,n){var r=n/.866,i=n;return[["M",t,e-n],["L",t+r,e+i],["L",t-r,e+i],["z"]]},"triangle-down":function(t,e,n){var r=n/.866,i=n;return[["M",t,e+n],["L",t+r,e-i],["L",t-r,e-i],["z"]]}},i.extend(x,a),i.augment(x,{__setRadius:function(t){var e=this,n=e.get("attrs");e._setSize(n.x,n.y,t)},__getRadius:function(){return this.get("attrs").radius},__setX:function(t){var e=this,n=e.get("attrs");e._setSize(t,n.y,n.radius)},__getX:function(){return this.get("attrs").x},__setY:function(t){var e=this,n=e.get("attrs");e._setSize(n.x,t,n.radius)},__getY:function(){return this.get("attrs").y},__getSymbol:function(){return this.get("attrs").symbol},_setSize:function(t,e,n){var r=this,a=r.get("attrs"),s=r.get("el");if("image"!==s.type){var o={x:t,y:e,radius:n};i.mix(a,o);var c=r._getPath(a);s.attr("path",c)}else i.mix(a,{width:2*n,height:2*n,x:t-(n-a.radius),y:e-(n-a.radius),radius:n}),s.attr(a)},animate:function(t,e,n,r){var a,s=this,o=s.get("attrs");if("image"==s.get("el").type){var c=t.radius||s.attr("radius");t.x=t.x-c,t.y=t.y-c,i.mix(o,{x:t.x,y:t.y}),s.get("el").animate(t,e,n,r)}else i.mix(o,{x:t.x,y:t.y}),a=s._getPath(o),s.get("el").animate({path:a},e,n,r)},parseElCfg:function(t){var e=this,n=t.symbol,r=t.radius||5;return n&&!i.isFunction(n)&&-1!=n.indexOf("url")?(t.type="image",t.src=n.replace(/url\((.*)\)/,"$1"),t.width=2*t.radius,t.height=2*t.radius,i.vml?(t.x-=r-1,t.y-=r-1):(t.x-=r,t.y-=r)):(t.type="path",t.path=e._getPath(t)),t},_getPath:function(t){if(!t.symbol&&t.path)return i.substitute(t.path,t);var e;if(e=i.isFunction(t.symbol)?t.symbol:x.Symbols[t.symbol])return e(t.x,t.y,t.radius);throw"not support this type "+t.symbol}}),a.Marker=x;var y=function(t){y.superclass.constructor.call(this,t)};return y.ATTRS={src:{},x:{},y:{},width:{},height:{}},i.extend(y,a),a.Image=y,t=a}(),y=function(t){var e=g;return e.Group=d,t=e}(),b=function(t){var e=x,n=l,r=c,i=function(t){i.superclass.constructor.call(this,t)};return r.extend(i,n),i.ATTRS={children:[]},r.augment(i,{isContainer:!0,beforeRenderUI:function(){this.set("children",[])},getGroupClass:function(){},getShapeClass:function(t){var n=r.ucfirst(t);return e[n]?e[n]:e},addShape:function(t,e){var n,i,a,s=this;return r.isObject(t)?(i=t,t=i.type):i={type:t,attrs:e,canvas:s.get("canvas")},i.parent=s,n=s.getShapeClass(t),a=new n(i),a.set("canvas",s.get("canvas")),s.addChild(a),a},addGroup:function(t,e){r.isObject(t)&&(e=t,t=null);var n,i=this,e=r.mix({parent:i,canvas:i.get("canvas")},e);return t=t||i.getGroupClass(),n=new t(e),i.addChild(n),n},removeChild:function(t,e){void 0==e&&(e=!0);var n=this,i=n.get("el"),a=n.get("children");return r.remove(a,t),i.__set&&i.__set.exclude&&i.__set.exclude(t.get("el")),e&&t.destroy(),t},addChild:function(t){var e=this,n=e.get("children");n.push(t),t.parent=t},getChildAt:function(t){return this.get("children")[t]},getCount:function(){return this.get("children").length},getLast:function(){return this.getChildAt(this.getCount()-1)},getFirst:function(){return this.getChildAt(0)},find:function(t){var e=this;return e.findBy(function(e){return e.get("id")==t})},sort:function(){var t=this,e=t.get("node"),n=r.toArray(e.childNodes);r.svg?(n.sort(function(t,e){var n=t.getAttribute("zIndex")||0,r=e.getAttribute("zIndex")||0;return+n-+r}),r.each(n,function(t){e.appendChild(t)})):r.each(n,function(t){var e=t.getAttribute("zIndex");e&&(t.style.zIndex=e)})},findBy:function(t){var e=this,n=e.get("children"),i=null;return r.each(n,function(e){return t(e)?i=e:e.findBy&&(i=e.findBy(t)),i?!1:void 0}),i},findByNode:function(t){return this.findBy(function(e){return e.get("node")==t})},clear:function(){var t=this,e=t.get("children"),n=t.get("el");r.each(e,function(t){t.destroy()}),e&&r.empty(e),n.__set&&n.__set.clear&&n.__set.clear(),n.clear&&n.clear()},destroy:function(){{var t=this;t.get("children"),t.get("el"),t.get("node")}t.get("destroyed")||(t.clear(),i.superclass.destroy.call(this))}}),t=i}(),_=function(t){var e=b,n=u,r=c,i=function(t){i.superclass.constructor.call(this,t)};return i.ATTRS={x:null,y:null},r.extend(i,e),r.mixin(i,[n]),r.augment(i,{isGroup:!0,createDom:function(){var t,e=this,n=e.get("el"),r=e.get("attrs");n||(n=e.createElement(),r&&n.attr(r),e.set("el",n)),t=n.node,t.group=e,e.set("node",t)},renderUI:function(){this._initTranslate()},_initTranslate:function(){var t=this,e=t.get("x"),n=t.get("y");e||n?t._translate(e||0,n||0):(t.set("x",e||0),t.set("y",n||0))},translate:function(t,e){var n=this,r=n.get("x")||0,i=n.get("y")||0;n.set("x",r+t),n.set("y",i+e),n._translate(t,e)},getBBox:function(){var t=this,e=t.get("children"),n=0,i=0,a={};return r.each(e,function(t){var e=t.getBBox(),r=e.width+e.x,a=e.height+e.y; +r>n&&(n=r),a>i&&(i=a)}),a.x=t.get("x"),a.y=t.get("y"),a.width=n,a.height=i,a},_translate:function(t,e){var n=this,r=n.get("el");r.translate(t,e)},containsElement:function(t){var e=this,n=e.get("node");return n==t||r.contains(n,t)},animate:function(t,e,n,i){var a=this,s=a.get("el");if(r.svg){var o={};void 0!=t.x&&(o.transform="t "+t.x+" "+t.y),t["clip-rect"]&&(o["clip-rect"]=t["clip-rect"]),s.animate(o,e,n,i)}else s.animate(t,e,n,i);a.set("x",t.x),a.set("y",t.y)},move:function(t,e){var n=this,i=n.get("x")||0,a=n.get("y")||0;r.svg?n._translate(t-i,e-a):n.get("el").move(t,e),n.set("x",t),n.set("y",e)},createElement:function(){var t=this,e=t.get("parent").get("el");return e.group()},getGroupClass:function(){return i}}),t=i}(),k=function(t){var e=c,n=_,r=s,i=b,a=function(t){a.superclass.constructor.call(this,t)};return a.ATTRS={width:{},height:{},id:{},viewbox:{}},e.extend(a,i),e.augment(a,{getGroupClass:function(){return n},renderUI:function(){var t,e=this,n=e.get("id"),i=e.get("width"),a=e.get("height");t=r(n,i,a),e.set("canvas",e),e.set("el",t),e.set("node",t.canvas)},setSize:function(t,e){this.set("width",t),this.set("height",e),this.get("el").setSize(t,e)},setViewBox:function(t,e,n,r,i){this.get("el").setViewBox(t,e,n,r,i),this.set("viewbox",{x:t,y:e,width:n,height:r})},getPoint:function(t,e){var n=this,r=n.get("node"),i=n.get("viewbox"),a=r.getBoundingClientRect(),s={};if(i){var o=i.width/n.get("width"),c=i.height/n.get("height");s.x=(t-a.left)*o+i.x,s.y=(e-a.top)*c+i.y}else s.x=t-a.left,s.y=e-a.top;return s},getRelativePoint:function(t,e){var n=this,r=n.get("viewbox"),i={};if(r){{var a=r.width/n.get("width");r.height/n.get("height")}i.x=t*a+r.x,i.y=e*a+r.y}else i.x=t,i.y=e;return i}}),t=a}(),w=function(t){var e=k;return e.Group=_,e.Shape=x,t=e}(),C=function(t){function e(t){if(!t._attrs&&t!=i.Group){var n=t.superclass.constructor;n&&!n._attrs&&e(n),t._attrs={},r.mix(!0,t._attrs,n._attrs),r.mix(!0,t._attrs,t.ATTRS)}}function n(t){e(this.constructor),n.superclass.constructor.call(this,t)}var r=c,i=w;return n.ATTRS={itemName:"item",groupName:"group",events:null},r.extend(n,i.Group),r.augment(n,{getDefaultCfg:function(){var t=this,e=t.constructor,n=e._attrs,i=r.mix(!0,{},n);return i},beforeRenderUI:function(){var t=this,e=t.get("events");n.superclass.beforeRenderUI.call(this),e&&r.each(e,function(e,n){t.on(n,e)})},getVisibleChildren:function(){var t=this,e=t.get("children");return r.filter(e,function(t){return t.get("visible")})},showChild:function(t){t&&t.show()},hideChild:function(t){t&&t.hide()},fireUp:function(t,e){var n=this,r=n.get("canvas"),i=r.chart;e=e||{},i&&(e.target=e.target||i,i.fire(t,e))},fireUpGroup:function(t,e,n){var r=this,i=r.get("itemName"),a=r.get("groupName");n=n||{},n[i]=e,a&&(n[a]=r.get("parent")),r.fireUp(i.toLowerCase()+t,n)}}),t=n}(),S=function(t){var e=c,n=C,r=f,i=function(t){i.superclass.constructor.call(this,t)};return i.ATTRS={elCls:"x-chart-back",zIndex:0,margin:20,plotRange:null,background:null,border:null},e.extend(i,n),e.augment(i,{beforeRenderUI:function(){i.superclass.beforeRenderUI.call(this),this._calculateRange()},renderUI:function(){i.superclass.renderUI.call(this),this._renderBorder(),this._renderBackground()},repaint:function(){return this._calculateRange(),this._renderBorder(),this._renderBackground(),this},_renderBorder:function(){var t,n=this,r=n.get("border"),i=n.get("canvas"),a=n.get("borderShape");if(r){var s=i.get("width"),o=i.get("height");a?a.attr({width:s,height:o}):(t=e.mix({width:s,height:o},r),a=this.addShape("rect",t),this.set("borderShape",a))}},_renderBackground:function(){var t,n,r,i,a=this,s=a.get("background"),o=a.get("plotRange"),c=a.get("backShape");s&&(t=o.getWidth(),n=o.getHeight(),r=o.tl,i={x:r.x,y:r.y,width:t,height:n},c?c.attr(i):(s.image?(i.src=s.image,c=a.addShape("image",i)):(e.mix(i,s),c=a.addShape("rect",i)),a.set("backShape",c)))},_calculateRange:function(){var t,n,i=this,a=i.get("margin"),s=i.get("canvas"),o=s.get("width"),c=s.get("height"),l=i.get("plotRange"),u=0,h=0,f=0,g=0;e.isNumber(a)&&(u=h=f=g=a),e.isArray(a)&&(u=a[0],f=null!=a[1]?a[1]:a[0],g=null!=a[2]?a[2]:a[0],h=null!=a[3]?a[3]:f),t=s.getRelativePoint(h,c-g),n=s.getRelativePoint(o-f,u),l?l.reset(t,n):(l=new r(t,n),i.set("plotRange",l))}}),t=i}(),A=function(t){var e={};return e.Item=C,e.Back=S,e.Range=f,t=e}(),T=function(t){var e=c,n=A.Item,r=20,i=7,a=function(t){a.superclass.constructor.call(this,t)};return a.ATTRS={elCls:"x-chart-legend-item",label:{x:r,"text-anchor":"start",y:i,cursor:"pointer"},checked:!0,legend:null,x:null,y:null,name:null,color:null,symbol:null,type:"rect",uncheckedColor:"#CCC",line:{x1:3,y1:7,x2:17,y2:7,"stroke-width":2},circle:{cx:10,cy:7,r:5,"fill-opacity":.5},rect:{x:2,y:2,width:15,height:10}},e.extend(a,n),e.augment(a,{renderUI:function(){var t=this;a.superclass.renderUI.call(t),t._createShape(),t._createMarker(),t._createLabel()},bindUI:function(){var t=this;a.superclass.bindUI.call(t)},_setChecked:function(t){var e=this,n=e.get("shape"),r=e.get("marker"),i=e.get(t?"color":"uncheckedColor");n&&n.attr({stroke:i,fill:i}),r&&r.attr({stroke:i,fill:i})},_onRenderChecked:function(t){var e=this;e.get("rendered")&&e._setChecked(t)},getWidth:function(){var t=this,e=t.get("labelShape");return e.getBBox().width+r},_createLabel:function(){var t,n=this,a=n.get("name"),s=n.get("label"),o=e.mix({},s,{text:a});o.x||(o.x=r),o.y||(o.y=i),t=n.addShape("label",o),n.set("labelShape",t)},_createShape:function(){var t,n=this,r=n.get("type"),i=n.get("color"),a=e.mix({fill:i,stroke:i},n.get(r));a&&r&&(t=n.addShape(r,a)),t&&t.attr("cursor","pointer"),n.set("shape",t)},_createMarker:function(){var t,e=this,n=e.get("symbol");n&&(t={symbol:n,fill:e.get("color"),stroke:e.get("color")},t.radius=3,t.x=10,t.y=7,t=e.addShape("marker",t)),e.set("marker",t)}}),t=a}(),I=function(t){function e(t,e){for(var n=t.getElementsByTagName("*"),r=n.length,i=[],a=0;r>a;a++){var s=n[a].className||"";if(!(s.indexOf(e)<0)){s=s.split(/\s+/);for(var o=s.length,c=0;o>c;c++)if(e==s[c]){i.push(n[a]);break}}}return i}function n(t,n){return t.getElementsByClassName?t.getElementsByClassName(n)[0]:e(t,n)[0]}var r=A.Item,i=c,a="ac-title",s="ac-list",o=Math.max,l=function(t){l.superclass.constructor.call(this,t)};return l.ATTRS={zIndex:10,elCls:"x-chart-tootip",itemName:"tootip",crosshairs:!1,plotRange:null,shared:!1,offset:0,title:{"font-size":"10","text-anchor":"start",x:5,y:15},name:{"font-size":"12","text-anchor":"start"},value:{"font-size":"12","font-weight":"bold","text-anchor":"start"},border:{x:0,y:0,r:3,fill:"#fff","fill-opacity":.85},animate:!0,duration:100,pointRenderer:null,valueSuffix:"",valueSplit:" ",visible:!1,custom:!1,customFollow:!0,html:'',itemTpl:'
  • {name} : {value}
  • ',items:[],crossLine:{stroke:"#C0C0C0"}},i.extend(l,r),i.augment(l,{renderUI:function(){var t=this,e=t.get("custom");l.superclass.renderUI.call(t),e?t._renderCustom():(t._renderBorer(),t._renderText(),t._renderItemGroup()),t._renderCrossLine()},_renderBorer:function(){var t=this,e=(t.getBBox(),t.addShape("rect",t.get("border")));t.set("borderShape",e)},_renderText:function(){var t=this,e=t.get("title");e&&t.setTitle(e.text)},_renderCustom:function(){var t,e=this,n=e.get("html"),r=e.get("canvas").get("node").parentNode;if(/^\#/.test(n)){var a=n.replace("#","");t=document.getElementById(a)}else t=i.createDom(n);e.get("customFollow")&&(r.appendChild(t),r.style.position="relative"),e.set("customDiv",t);var s=e.get("items");i.each(s,function(t,n){e.addCustomItem(t,n)})},_renderItemGroup:function(){var t,e=this,n=e.get("items"),r=e.get("titleShape"),i={x:8,y:10};r&&(i.y+=20),t=e.addGroup(i),e.set("textGroup",t),n&&e.setItems(n)},_renderCrossLine:function(){var t,e=this,n=e.get("crosshairs"),r=e.get("canvas"),i=e.get("plotRange");if(n){var a,s;i?(a=i.bl.y,s=i.tl.y):(a=r.get("height"),s=0),t=e.get("parent").addShape({type:"line",visible:!1,zIndex:3,attrs:{stroke:e.get("crossLine").stroke,x1:0,y1:a,x2:0,y2:s}}),e.set("crossShape",t)}},setTitle:function(t){var e,r=this,i=r.get("title"),s=r.get("custom");if(i){if(r.set("titleText",t),s){var o=r.get("customDiv"),c=n(o,a);return void(c&&(c.innerHTML=t))}e=r.get("titleShape"),e||(i.text=t||"",i["text-anchor"]="start",e=r.addShape("text",i),r.set("titleShape",e)),e.attr("text",t)}},getInnerBox:function(){var t=this,e={},n=t.get("textGroup"),r=t.get("titleShape"),i=n.getBBox(),a=i.width;if(r){var s=r.getBBox();a=Math.max(a,s.width)}return e.width=i.x+a+8,e.height=i.height+i.y+8,e},setColor:function(t){var e=this,n=e.get("borderShape"),r=e.get("customDiv");n&&n.attr("stroke",t),r&&(r.style.borderColor=t)},show:function(){var t=this,e=t.get("crossShape"),n=t.get("customDiv"),r=t.get("hideHandler");r&&clearTimeout(r),l.superclass.show.call(t),n&&t.get("customFollow")&&(n.style.visibility="visible"),t.fireUp("tooltipshow",t.getEventObj()),e&&e.show()},hide:function(){var t=this,e=t.get("customDiv"),n=t.get("crossShape"),r=setTimeout(function(){t.fireUp("tooltiphide",t.getEventObj()),e&&t.get("customFollow")&&(e.style.visibility="hidden"),l.superclass.hide.call(t),t.set("hideHandler",null)},t.get("duration"));t.set("hideHandler",r),n&&n.hide()},setPosition:function(t,e){var n=this,r=n.get("plotRange"),a=n.get("offset"),s=n.get("crossShape"),c=n.getBBox(),l=n.get("customDiv"),u=!0,h=n.get("animate"),f=t;if(t=t-c.width-a,e-=c.height,l&&n.get("customFollow")){var g=parseFloat(i.getStyle(l,"paddingLeft"))||0,d=parseFloat(i.getStyle(l,"paddingTop"))||0;t=t-i.getOuterWidth(l)+g,e=e-i.getOuterHeight(l)+d}r&&(r.isInRange(t,e)||(r.isInVertical(e)||l||(e=r.tl.y),r.isInHorizontal(t)||(t=o(r.tl.x,f)+a,u=!1))),(n.get("x")!=t||n.get("y")!=e)&&(h&&i.svg&&n.get("visible")&&n.animate({x:t,y:e},n.get("duration")),n.move(t,e),n.moveCustom(t,e),s&&(u?s.attr("transform","t"+f+" 0"):s.attr("transform","t"+(t-a)+" 0")))},resetBorder:function(){var t=this,e=t.getInnerBox(),n=t.get("borderShape");n.attr({width:e.width,height:e.height})},moveCustom:function(t,e){var n=this,r=n.get("customDiv");if(r&&n.get("customFollow")){var a=parseFloat(i.getStyle(r,"paddingTop")),s=parseFloat(i.getStyle(r,"borderTopWidth"))||0,o=parseFloat(i.getStyle(r,"paddingLeft")),c=parseFloat(i.getStyle(r,"borderLeftWidth"))||0;r.style.left=t-c-o+"px",r.style.top=e-s-a+"px"}},addCustomItem:function(t,e){t.index=e;var r=this,a=r.get("customDiv"),o=n(a,s);if(o){var c=r.get("itemTpl"),l=i.substitute(c,t),u=i.createDom(l);o.appendChild(u)}},addItem:function(t,e){function n(t,e){var n=i.mix({},u,{x:f,y:h,text:t},e);return c.addShape("text",n)}var r,a,s=this,o=s.get("textGroup"),c=o.addGroup(),l=s.get("name"),u=s.get("value"),h=16*e,f=0;l&&(r=i.mix({},l,{x:0,y:h,text:t.name+":",fill:t.color}),a=c.addShape("text",r),f=a.getBBox().width+10);var g,d=t.suffix||s.get("valueSuffix");i.isArray(t.value)?i.each(t.value,function(t){var e;e=i.isObject(t)?n(t.text,t):n(t),f+=e.getBBox().width}):(g=d?t.value+s.get("valueSplit")+d:t.value,n(g))},setItems:function(t){var e=this,n=e.get("custom");e.clearItems(),i.each(t,function(t,r){n?e.addCustomItem(t,r):e.addItem(t,r)}),t[0]&&e.setColor(t[0].color),n||e.resetBorder(),e.get("items")!=t&&(e.set("items",t),e.onChange())},onChange:function(){this.fireUp("tooltipchange",this.getEventObj())},getEventObj:function(){var t=this;return{title:t.get("titleText"),items:t.get("items"),dom:t.get("customDiv"),tooltip:t}},clearItems:function(){var t=this,e=t.get("textGroup"),r=t.get("customDiv");if(e&&e.clear(),r){var i=n(r,s);i&&(i.innerHTML="")}},remove:function(){var t=this,e=t.get("crossShape"),n=t.get("customDiv");e&&e.remove(),l.superclass.remove.call(this),n&&n.parentNode.removeChild(n)}}),t=l}(),P=function(t){function e(t,e,n){var r=e.get(t);return r||(r=n,e.set(t,r)),r}function n(t,e){var n="",r=a.mix({},e);return a.each(t,function(t){var e=a.substitute("M{x1} {y1}L{x2} {y2}",t);n+=e}),r.path=n,r}function r(t){r.superclass.constructor.call(this,t)}var i=A.Item,a=c,s="x-chart-grid";return a.extend(r,i),r.ATTRS={zIndex:1,elCls:s,type:"line",line:null,minorLine:null,minorCount:0,renderer:null,items:null,odd:null,even:null,animate:!0,duration:1e3},a.augment(r,{renderUI:function(){var t=this;r.superclass.renderUI.call(t),t._drawLines()},_drawLines:function(){var t=this,e=t.get("line"),n=t.get("items");if(n){t._precessItems(n),t._drawGridLines(n,e,s+"-line"),t.get("minorCount")&&t.drawMinorLines()}},_precessItems:function(t){var e,n=this,r=n.get("minorCount"),i=n.get("renderer");a.each(t,function(t,a){i?i.call(this,t,a):r&&e&&n._addMonorItem(t,e),e&&(n.get("odd")||n.get("even"))&&n._drawOddEven(t,e,a),e=t})},change:function(t){var e=this;e.set("items",t),e._clearPre(),e._precessItems(t),e._changeGridLines(t,s+"-line"),e._changeMinorLinses()},_clearPre:function(){var t,e=this;e.get("minorCount")&&e.set("minorItems",[]),t=e.findBy(function(t){var e=t.get("elCls");return e==s+"-line"||e==s+"-minor"?!1:!0}),a.each(t,function(t){t.remove()})},_isVertical:function(t){return t.x1==t.x2?!0:!1},_drawGridLines:function(t,e,n){var r=this,i=r._linesToPath(t,e),a=r.addShape({type:"path",elCls:n,attrs:i});r.set("gridLine"+n,a)},_changeGridLines:function(t,e){var n=this,r=n.get("animate"),i=n.get("gridLine"+e);if(i){var o=n._linesToPath(t,{});r?a.animPath(i,o.path,2):i.attr("path",o.path)}else if(t&&t.length){var c;c=n.get(e==s+"-line"?"line":"minorLine"),n._drawGridLines(t,c,e)}},_linesToPath:function(t,e){var r,i=this,s=[],o=i.get("type");return"line"==o?0==t.length?"":n(t,e):(r=a.mix({},e),a.each(t,function(t){s=s.concat(i._getMultiplePath(t,o))}),r.path=s,r)},_getMultiplePath:function(t,e){var n=t.points,r=[];if("polygon"==e)a.each(n,function(t,e){r.push(0==e?["M",t.x,t.y]:["L",t.x,t.y])}),r.push(["L",n[0].x,n[0].y]),r.push(["z"]);else{var i=t.center.x,s=t.center.y,o=t.r,c=t.r;r=0==o?[]:[["M",i,s],["m",0,-c],["a",o,c,0,1,1,0,2*c],["a",o,c,0,1,1,0,-2*c]]}return r},_drawOddEven:function(t,e,n){var r,i,a=this,o=a.get("odd"),c=a.get("even");n%2==0?c&&(i=a._getBackItem(e,t,c),r="even"):o&&(i=a._getBackItem(e,t,o),r="odd"),i&&a.addShape({type:"path",elCls:s+"-"+r,attrs:i})},_getBackItem:function(t,e,n){var r=a.substitute("M {x1} {y1} L{x2} {y2}",t);return r+=a.substitute("L{x2} {y2} L{x1} {y1}Z",e),n=a.mix({},n,{path:r})},_getMinorItem:function(t,e,n,r){var i=this,a=i._isVertical(t,e),s=a?"x":"y",o=a?"y":"x",c=e[s+"1"]-t[s+"1"],l=c/(r+1),u={};return u[s+"1"]=u[s+"2"]=(n+1)*l+t[s+"1"],u[o+"1"]=t[o+"1"],u[o+"2"]=t[o+"2"],u},_addMonorItem:function(t,n){var r=this,i=e("minorItems",r,[]),a=r.get("minorCount");if(a)for(var s=0;a>s;s++){var o=r._getMinorItem(n,t,s,a);i.push(o)}},drawMinorLines:function(){var t=this,e=t.get("minorLine"),n=t.get("minorItems");t._drawGridLines(n,e,s+"-minor")},_changeMinorLinses:function(){var t=this,e=t.get("minorItems");t._changeGridLines(e,s+"-minor")}}),t=r}(),L=function(t){var e=A.Item,n=c,r="x-chart-labels",i=function(t){i.superclass.constructor.call(this,t)};return i.ATTRS={elCls:r,zIndex:6,items:null,label:null,renderer:null,custom:!1,html:'
    ',itemTpl:'
    {text}
    ',animate:!0,duration:400},n.extend(i,e),n.augment(i,{renderUI:function(){var t=this;i.superclass.renderUI.call(t),t._drawLabels()},addLabel:function(t){var e=this,n=e.get("items"),r=n.length;return n.push(t),e._addLabel(t,r)},setItems:function(t){var e=this;e.clear(),e.set("items",t),e._drawLabels()},clear:function(){var t=this,e=t.get("customDiv");e&&(e.innerHTML=""),i.superclass.clear.call(t)},_drawLabels:function(){var t=this,e=t.get("items");n.each(e,function(e,n){t._addLabel(e,n)})},_addLabel:function(t,e){var n=this,r=n._getLabelCfg(t,e);return n._createText(r)},_getLabelCfg:function(t,e){var r=this,i=r.get("label"),a=r.get("renderer");if(!n.isObject(t)){var s=t;t={},t.text=s}return a&&(t.text=a(t.text,t,e)),null==t.text&&(t.text=""),t.text=t.text.toString(),t.x=(t.x||0)+(i.x||0),t.y=(t.y||0)+(i.y||0),cfg=n.mix({},i,t)},getLabels:function(){var t=this,e=t.get("customDiv");return e?n.makArray(e.childNodes):t.get("children")},changeLabel:function(t,e){var r,i,a=this,s=a.get("custom");if(r=n.indexOf(a.get("children"),t),i=a._getLabelCfg(e,r),t)if(s){var o=a._createDom(i);t.innerHTML=o.innerHTML,a._setCustomPosition(i,t)}else t.attr("text",i.text),(t.attr("x")!=i.x||t.attr("y")!=i.y)&&(n.svg&&a.get("animate")&&!i.rotate?(i.rotate&&t.attr("transform",""),t.animate({x:i.x,y:i.y},a.get("duration"))):(t.attr(i),i.rotate&&t.attr("transform",n.substitute("r{rotate} {x} {y}",i))))},_setCustomPosition:function(t,e){var r=t["text-anchor"]||"middle",i=t.y,a=t.x,s=n.getWidth(e),o=n.getHeight(e);i-=o/2,"middle"==r?a-=s/2:"end"==r&&(a-=s),e.style.top=parseInt(i)+"px",e.style.left=parseInt(a)+"px"},_createText:function(t){var e=this,r=e.get("custom"),i=e.get("customDiv");if(!r)return this.addShape("label",t);if(!i){var a=e.get("html"),s=e.get("canvas").get("node").parentNode;i=n.createDom(a),s.style.position="relative",s.appendChild(i),e.set("customDiv",i)}var o=e._createDom(t);i.appendChild(o),e._setCustomPosition(t,o)},_createDom:function(t){var e=this,r=e.get("itemTpl"),i=n.substitute(r,t),a=n.createDom(i);return a},remove:function(){var t=this,e=t.get("customDiv");i.superclass.remove.call(this),e&&e.parentNode.removeChild(e)}}),t=i}(),B=function(t){function e(t){t.remove?t.remove():t.parentNode&&t.parentNode.removeChild(t)}var n=c,r=L,i=function(){};return i.ATTRS={labels:null},n.augment(i,{renderLabels:function(){var t,e=this,n=e.get("labels");n&&(n.items||(n.items=[]),null==n.animate&&(n.animate=e.get("animate")),t=e.addGroup(r,n),e.set("labelsGroup",t))},resetLabels:function(t){var r=this,i=r.get("labels");if(i){var a=r.get("labelsGroup"),s=a.getLabels(),o=s.length;t=t||i.items,n.each(t,function(t,e){if(o>e){var n=s[e];a.changeLabel(n,t)}else r.addLabel(t.text,t)});for(var c=o-1;c>=t.length;c--)e(s[c])}},addLabel:function(t,e){var n,r=this,i=r.get("labelsGroup"),a={};return i&&(a.text=t,a.x=e.x,a.y=e.y,a.point=e,n=i.addLabel(a)),n},removeLabels:function(){var t=this,e=t.get("labelsGroup");e&&e.remove(),t.set("labelsGroup",null)}}),t=i}(),M=function(t){var e=c,n=y.Group,r=A.Item,i=function(t){i.superclass.constructor.call(this,t)};return e.extend(i,r),e.mixin(i,[n]),i.ATTRS={elCls:"x-chart-markers",zIndex:6,marker:null,actived:null,single:!1,xCache:null},e.augment(i,{renderUI:function(){var t=this;t.set("xCache",[]),i.superclass.renderUI.call(t),t._drawMarkers()},bindUI:function(){var t=this;t.on("click",function(e){var n=e.target.shape;if(n){var r=n.get("point")||n.get("item");t.fire("markerclick",{marker:n,point:r})}})},isItemActived:function(t){return t.get("actived")},setItemActived:function(t,e){var n=this,r=n.get("marker"),i=n.get("actived"),a=n.get("single");e?(t.attr(i),t.set("actived",!0),a&&!t.get("visible")&&t.show()):(t.attr(r),t.set("actived",!1),a&&t.hide())},change:function(t){var n=this,r=n.get("children"),i=n.get("invert"),a=[];if(!n.get("single")){n.set("items",t),e.each(t,function(t,s){var o=r[s];if(o){if(e.svg)if(n.get("animate")){var c={x:t.x,y:t.y},l=e.mix({},t);delete l.x,delete l.y,o.animate(c,400),o.attr(l)}else o.attr(t);else o.attr(t);a.push(i?t.y:t.x),o.set("item",t)}else n._addMarker(t)});for(var s=n.getCount(),o=s-1;o>t.length-1;o--)n.getChildAt(o).remove();n.set("xCache",a)}},_drawMarkers:function(){var t=this,n=t.get("single"),r=t.get("items");if(n){var i=t._addMarker({x:0,y:0});i.hide()}else e.each(r,function(e){t._addMarker(e)})},addMarker:function(t){return this._addMarker(t)},_addMarker:function(t){var n=this,r=n.get("xCache"),i=n.get("marker"),a=e.mix({},i,t);r.push(parseInt(n.get("invert")?t.y:t.x));var s=n.addShape("marker",a);return s.set("item",t),s},getSnapMarker:function(t,n){var r,i=this,a=i.get("xCache"),s=i.get("single");if(s)return i.getChildAt(0);if(e.isObject(t)){var o=i.get("children");e.each(o,function(e){return e.attr("x")==t.x&&e.attr("y")==t.y?(r=e,!1):void 0})}else{var c=[].concat(a).sort(function(t,e){return t-e}),l=e.snapTo(c,t,n),u=e.indexOf(a,l);r=i.getChildAt(u)}return r}}),t=i}(),R=function(t){var e=c,n=A.Item,r=function(t){r.superclass.constructor.call(this,t)};return r.ATTRS={title:"",titleCfg:null,text:"",line:null,distance:0,shapeCfg:{},shapeType:"",point:null,cash:{}},e.extend(r,n),e.augment(r,{renderUI:function(){var t=this;r.superclass.renderUI.call(t),t.drawFlag()},drawFlag:function(){var t=this;t._drawLine(),t._drawShape(),t._drawTitle()},_drawLine:function(){var t=this,e=t.get("cash"),n=t.addShape("line",t.__getLineAttr());e.line=n},__getLineAttr:function(){var t=this,n=t.get("line"),r=t.get("point"),i=r.x,a=r.y,s=t.get("distance"),o=e.mix(n,{x1:i,y1:a,x2:i,y2:s+a});return 0>=s?t.set("bottomY",a):t.set("topY",a),o},_drawShape:function(){var t=this,e=t.get("cash"),n=t.addShape(t.__getShapeAttr());e.shape=n},__getShapeAttr:function(){var t,n=this,r=n.get("point"),i=r.x,a=r.y,s=n.get("shapeType"),o=n.get("shapeCfg"),c=n.get("distance"),l=o.width||24,u=o.height||24;switch(s){case"rect":t=e.mix(o,{x:i-l/2,y:c>0?a+c:a-u+c,width:l,height:u}),0>=c?n.set("topY",t.y):n.set("bottomY",t.y+u);break;case"image":t=e.mix(o,{x:i-l/2,y:c>0?a+c:a+c-u,width:l,height:u}),0>=c?n.set("topY",t.y):n.set("bottomY",t.y+u);break;default:s="circle",t=e.mix(o,{cx:i,cy:c>0?a+o.r+c:a-o.r+c}),0>=c?n.set("topY",t.cy-o.r):n.set("bottomY",t.cy+o.r)}return{type:s,attrs:t}},_drawTitle:function(){var t=this,e=t.get("cash"),n=t.__getTitleAttr();if(n){var r=t.addShape("text",t.__getTitleAttr());e.title=r}},__getTitleAttr:function(){var t=this,n=t.get("title"),r=t.get("shapeCfg"),i=t.get("titleCfg"),a=t.get("point"),s=a.x,o=a.y,c=t.get("distance"),l=(r.width||24,r.height||24);if(n){var u=e.mix(i,{text:n,x:s,y:c>0?o+c+l/2:o+c-l/2});return u}},removeFlag:function(){var t=this,e=t.get("cash");e.line&&e.line.remove(),e.shape&&e.shape.remove(),e.title&&e.title.remove(),t.remove()},change:function(t){var n=this;e.mix(n._attrs,t),n.repaint()},repaint:function(){var t=this,e=t.get("cash");e.line&&e.line.remove(),e.shape&&e.shape.remove(),e.title&&e.title.remove(),t._drawLine(),t._drawShape(),t._drawTitle()},changeStackCfg:function(t){var n,r=this,i=t.point,a=i.y,s=t.distance,o=t.shapeCfg,c=t.shapeType;0>=s?r.set("bottomY",a):r.set("topY",a);var l=o.height||24;switch(c){case"rect":n=e.mix(o,{y:s>0?a+s:a-l+s}),0>=s?r.set("topY",n.y):r.set("bottomY",n.y+l);break;case"image":n=e.mix(o,{y:s>0?a+s:a+s-l}),0>=s?r.set("topY",n.y):r.set("bottomY",n.y+l);break;default:c="circle",n=e.mix(o,{cy:s>0?a+o.r+s:a-o.r+s}),0>=s?r.set("topY",n.cy-o.r):r.set("bottomY",n.cy+o.r)}}}),t=r}(),O=function(t){var e=c,n=A.Item,r=function(t){r.superclass.constructor.call(this,t)};return r.ATTRS={riseLine:null,fallLine:null,riseShape:null,fallShape:null,points:null,singleWidth:null},e.extend(r,n),e.augment(r,{renderUI:function(){var t=this;r.superclass.renderUI.call(t),t._drawCandlestick()},_drawCandlestick:function(){var t=this;t._setType(),t._drawLine(),t._drawShape()},_setType:function(){var t=this,e=t.get("points"),n=e[0],r=e[3],i=n.value>=r.value?!1:!0;t.set("isRise",i)},_drawLine:function(){var t=this,n=t.get("isRise"),r=t.get(n?"riseLine":"fallLine"),i=t.get("points"),a=i[1],s=i[2],o=e.mix(r,{x1:a.x,y1:a.y,x2:s.x,y2:s.y}),c=t.addShape("line",o);t.set("lineShape",c)},_drawShape:function(){var t=this,n=t.get("points"),r=t.get("isRise"),i=t.get(r?"riseShape":"fallShape"),a=n[0],s=n[3],o=t.get("singleWidth")||i.width||20,c=e.mix(i,{x:a.x-o/2,y:Math.min(a.y,s.y),width:o,height:Math.max(Math.abs(a.y-s.y),.1)}),l=t.addShape("rect",c);t.set("rectShape",l)}}),t=r}(),D=function(t){var e=c,n=A.Item,r=T,i=15,a=5,s=function(t){s.superclass.constructor.call(this,t)};return s.ATTRS={zIndex:8,elCls:"x-chart-legend",items:null,spacingX:a,spacingY:a,itemCfg:null,checkable:!0,leaveChecked:!0,layout:"horizontal",dx:0,dy:0,align:"bottom",back:{stroke:"#909090",fill:"#fff"}},e.extend(s,n),e.augment(s,{renderUI:function(){var t=this;s.superclass.renderUI.call(t),t._renderItems(),t._renderBorder()},bindUI:function(){s.superclass.bindUI.call(this);var t=this;t.on("mousemove",function(t){t.stopPropagation?t.stopPropagation():window.event.cancelBubble=!0}),t._bindOverOut(),t._bindClick()},_bindOverOut:function(){var t=this;t.on("mouseover",function(e){var n=t.getItemByNode(e.target);n&&t.fire("itemover",{item:n})}),t.on("mouseout",function(e){var n=t.getItemByNode(e.target);n&&t.fire("itemout",{item:n})})},_bindClick:function(){var t=this,e=t.get("checkable");e&&t.on("click",function(n){var r=t.getItemByNode(n.target);if(r&&(t.fire("itemclick",{item:r}),e)){var i=r.get("checked");if(t.get("leaveChecked")&&i&&1==t._getLeaveCount())return;r.set("checked",!i),i?t.fire("itemunchecked",{item:r}):t.fire("itemchecked",{item:r})}})},getItemByNode:function(t){var n=this,r=n.get("itemsGroup"),i=r.get("children"),a=null;return e.each(i,function(e){return e.containsElement(t)?(a=e,!1):void 0}),a},_getLeaveCount:function(){var t=this,n=t.get("itemsGroup"),r=n.get("children"),i=[];return i=e.filter(r,function(t){return t.get("checked")}),i.length},_renderItems:function(){var t=this,e=t.get("items"),n=t.addGroup();t.set("itemsGroup",n),t._setItems(e)},_setItems:function(t){var n=this;e.each(t,function(t,e){n._addItem(t,e)}),t&&t.length&&(n.resetPosition(),n.resetBorder())},addItem:function(t){var e=this,n=e.get("items");e._addItem(t,n.length),e.resetBorder(),e.resetPosition()},setItems:function(t){var e=this,n=e.get("itemsGroup");n.clear(),e.set("items",t),e._setItems(t)},_addItem:function(t){var n=this,i=n.get("itemsGroup"),a=n._getNextX(),s=n._getNextY(),o=n.get("itemCfg"),c=e.mix({x:a,y:s},t,o);c.legend=n,i.addGroup(r,c)},_renderBorder:function(){var t,n,r,i,a=this,s=a.get("back");s&&(t=a._getTotalWidth(),n=a._getTotalHeight(),r=e.mix({r:5,width:t,height:n},s),i=a.addShape("rect",r),i.toBack(),a.set("borderShape",i))},resetBorder:function(){var t=this,e=t.get("borderShape");e&&e.attr({width:t._getTotalWidth(),height:t._getTotalHeight()})},resetPosition:function(){var t=this,e=t.get("align"),n=t.get("plotRange");if(n){var r,i,a=n.tl,s=n.br,o=t.get("dx"),c=t.get("dy"),l=t._getTotalWidth();switch(e){case"top":r=a.x,i=a.y;break;case"left":r=a.x,i=(a.y+s.y)/2;break;case"right":r=s.x-l,i=(a.y+s.y)/2;break;case"bottom":r=(a.x+s.x)/2-l/2,i=s.y}t.move(r+o,i+c)}},_getCount:function(){return this.get("itemsGroup").get("children").length},_getNextX:function(){var t=this,n=t.get("layout"),r=t.get("spacingX"),i=r;if("horizontal"==n){var a=t.get("itemsGroup").get("children");e.each(a,function(t){t.isGroup&&(i+=t.getWidth()+r)})}return i},_getNextY:function(){var t=this,e=t.get("spacingY"),n=t.get("layout"),r=t._getCount();return"horizontal"==n?e:i*r+e*(r+1)},_getTotalWidth:function(){var t=this,n=t.get("spacingX");if("horizontal"==t.get("layout"))return this._getNextX();var r=t.get("itemsGroup").get("children"),i=n;return e.each(r,function(t){var e=t.getWidth();t.isGroup&&e>i&&(i=e)}),i+2*n},_getTotalHeight:function(){var t=this,e=t._getNextY();return"horizontal"==t.get("layout")?i+2*a:e+a}}),t=s}(),N=function(t){var e=D,n=function(){};return n.ATTRS={legend:null,legendGroup:null},n.prototype={renderLegend:function(){var t=this,n=t.get("legend"),r=t.get("canvas");if(n){n.plotRange||(n.plotRange=t.get("plotRange")||t.get("parent").get("plotRange")),n.items=n.items||t.getLengendItems();var i=r.addGroup(e,n);t.set("legendGroup",i),t._bindLegendEvent()}},getLengendItems:function(){return[]},getByLendItem:function(t){return t.get("item")},addLengendItem:function(t){var e=this,n=e.get("legendGroup");n&&n.addItem(t)},resetLegendItems:function(){var t=this,e=t.get("legendGroup"),n=t.getLengendItems();e.setItems(n)},_bindLegendEvent:function(){var t=this,e=t.get("legendGroup");e.on("itemover",function(e){var n=e.item,r=t.getByLendItem(n);t.setActivedItem&&t.setActivedItem(r)}),e.on("itemout",function(e){var n=e.item,r=t.getByLendItem(n);t.clearActivedItem&&t.clearActivedItem(r)}),e.on("itemchecked",function(e){var n=e.item,r=t.getByLendItem(n);t.showChild(r)}),e.on("itemunchecked",function(e){var n=e.item,r=t.getByLendItem(n);t.hideChild(r)})},removeLegend:function(){var t=this,e=t.get("legendGroup");e&&e.remove()}},t=n}(),F=function(t){var e=I;return t=e}(),G=function(t){var e=L;return e.ShowLabels=B,t=e}(),E=function(t){var e=M;return t=e}(),z=function(t){var e=c,n=R,r=y.Group,i=A.Item,a=function(t){a.superclass.constructor.call(this,t)};return e.extend(a,i),e.mixin(a,[r]),a.ATTRS={elCls:"x-chart-flags",zIndex:6,flag:null,items:null,flagGroups:null},e.augment(a,{renderUI:function(){var t=this;a.superclass.renderUI.call(t),t._drawFlags()},bindUI:function(){var t=this;t.on("click",function(e){var n=t.findBy(function(t){return t.containsElement&&t.containsElement(e.target)});t.fire("flagclick",{flag:n})}),t.on("mouseover",function(e){var n=t.findBy(function(t){return t.containsElement&&t.containsElement(e.target)});t.fire("flagover",{flag:n})}),t.on("mouseout",function(e){var n=t.findBy(function(t){return t.containsElement&&t.containsElement(e.target)});t.fire("flagout",{flag:n})})},_drawFlags:function(){var t=this,n=t.get("items"),r=[];e.each(n,function(e){r.push(t._addFlag(e))}),t.set("flagGroups",r)},addFlag:function(t){var e=this,n=e.get("flagGroups"),r=e.get("items");r||(r=[],e.set("items",r)),r.push(t);var i=this._addFlag(t);return n.push(i),i},_addFlag:function(t){var r=this,i=r.get("flag"),a=(r.get("items"),e.mix({},i,t));return r.addGroup(n,a)},removeAll:function(){var t=this,n=t.get("flagGroups");e.each(n,function(t){t.removeFlag()}),t.set("flagGroups",[]),t.set("items",[])},removeByIndex:function(t){var e=this,n=e.get("flagGroups"),r=e.get("items"),i=n[t];i&&(i.remove(),n.splice(t,1),r.splice(t,1))},change:function(t,n){var r=this,i=r.get("items"),a=r.get("flagGroups");if(n){var s=t.length>a.length?t:a,o=[];e.each(s,function(e,n){var s=a[n],c=i[n],l=t[n];if(t.length>a.length&&!s)s=r.addFlag(l);else if(t.lengtho;o++)r.push(i+n*o);t.set("ticks",r)}},getCenter:function(){var t=this,e=t.get("plotRange");return e.cc},getRadius:function(){var t=this,e=t.get("radius"),n=t.get("plotRange");return e||(e=Math.min(n.getWidth(),n.getHeight())/2-t.get("margin"),t.set("radius",e)),e},getTickAvgAngle:function(){var t=this,e=t.get("ticks"),n=t.get("startAngle"),r=t.get("endAngle");return(r-n)/e.length},getLinePath:function(){var t=this,e=t.getCenter(),n=e.x,r=e.y,i=t.getRadius(),a=i;return[["M",n,r],["m",0,-a],["a",i,a,0,1,1,0,2*a],["a",i,a,0,1,1,0,-2*a],["z"]]},getOffsetPoint:function(t){var e=this,n=e.getOffsetByIndex(t),r=e.getRadius();return e.getCirclePoint(n,r)},getCirclePoint:function(t,n){return null==n&&(n=this.getRadius()),e(this,n,t)},getDistance:function(t,e){var n=this,r=n.getCenter();return Math.sqrt(Math.pow(t-r.x,2)+Math.pow(e-r.y,2))},getCircleAngle:function(t,e){var n=this,r=n.getCenter(),i=n.getDistance(t,e),a=Math.asin(Math.abs(t-r.x)/i)/Math.PI*180;return t>=r.x&&e<=r.y?a:t>=r.x&&e>=r.y?180-a:t<=r.x&&e>=r.y?a+180:360-a},getOffsetByIndex:function(t){var e=this,n=e.get("ticks"),r=n.length,i=e.get("startAngle"),a=e.get("endAngle");return i+(a-i)/r*t},getValue:function(t){return this.getSnapValue(t)},getSnapValue:function(t){var e=this,r=e.get("pointCache");return n.snapFloor(r,t)},getGridItemCfg:function(t){var e=this,n=e.getCenter();return{x1:n.x,y1:n.y,x2:t.x,y2:t.y}},addLabel:function(t,e,n){var r=this,i=r.get("margin"),s=r.getRadius();e=r.getCirclePoint(n,s+i),a.superclass.addLabel.call(r,t,e)},getTickEnd:function(t,e){var n=this,r=n.getRadius(),i=n.get("tickLine"),a=i.value,s=n.getCirclePoint(e,r+a);return{x2:s.x,y2:s.y}}}),t=a}(),H=function(t){var e=c,n=A.Item,r=G.ShowLabels,i=y,a=E,s=function(t){s.superclass.constructor.call(this,t)};return e.extend(s,n),e.mixin(s,[r,i]),s.ATTRS={zIndex:5,markers:null,labels:null,animate:!1,duration:1e3,changeDuration:400,data:[],autoPaint:!0,enableMouseTracking:!0,stickyTracking:!0,xField:"x",yField:"y",itemName:"seriesItem",legendType:"rect",groupName:"series",effectChart:!1},e.augment(s,{renderUI:function(){var t=this;s.superclass.renderUI.call(t),t.processColor(this.get("color")),t.renderLabels(),t.renderMarkers(),t.get("autoPaint")&&t.paint()},bindUI:function(){var t=this;if(s.superclass.bindUI.call(t),t.get("enableMouseTracking")){t.bindMouseOver();var e=t.get("parent");t.on("mouseover",function(){e.setActivedItem&&(e.isItemActived(t)||e.setActivedItem(t))})}t.get("stickyTracking")||t.bindMouseOut()},changeData:function(t,e){var n=this,r=n.get("data"),i=n.get("parent");t!=r&&n.set("data",t),e&&(n.get("effectChart")&&i&&i.repaint?i.repaint():n.get("visible")&&n.repaint()),n.fire("datachange",{data:t})},addPoint:function(t,e,n){var r=this,i=r.get("data"),a=r.get("animate");i.push(t),e&&i.shift(),a?(e&&n&&i.unshift(i[0]),r.changeData(i,n),e&&n&&setTimeout(function(){i.shift(),r.set("points",null),r.shiftPoint(),r.repaint(),r.fire("datachange",{data:i})},800)):r.changeData(i,n)},shiftPoint:function(){var t,e=this,n=e.get("markersGroup"),r=e.get("labelsGroup"),i=e.get("xAxis");if(n&&(t=n.getChildAt(0),t&&t.remove()),r&&(t=r.getChildAt(0),t&&t.remove()),i){var a=i.get("labelsGroup");a&&(t=a.getChildAt(0),t&&t.remove())}},getData:function(){},bindMouseOver:function(){},bindMouseOut:function(){},onStickyTracking:function(){},processColor:function(){},getTrackingInfo:function(){},getPoints:function(){var t=this,e=t.get("points");return e||(e=t._getPoints(),t.set("points",e)),e},_getPoints:function(){var t=this,n=t.get("data"),r=t.get("xField"),i=t.get("yField"),a=[];return e.each(n,function(n,s){var o;if(e.isObject(n)){var c=n[r],l=n[i];o=null==c?t.getPointByIndex(l,s):t.getPointByValue(c,l),o.obj=n}else e.isArray(n)?(o=t.hasXValueInArray()?t.getPointByValue(n[0],n[1]):t.getPointByIndex(n[0],s),o.arr=n):o=t.getPointByIndex(n,s);o.name=o.name||t.get("name"),o.seriesName=t.get("name"),t.processPoint(o,s),a.push(o)}),a},hasXValueInArray:function(){return!0},processPoint:function(){},getPointByIndex:function(){},getPointByValue:function(){},getTipInfo:function(t){return t.value},findPointByValue:function(t){var n,r,i=this,a=i.get("points"),s=a[0],o=a[a.length-1];return s?e.isNumber(t)&&(t>o.xValue||tMath.abs(r.xValue-t)&&(o=r),n||o):null},snapEqual:function(t,e){return t==e},draw:function(){},paint:function(){var t=this,e=t.getPoints();!t.get("isPaint")&&t.get("data").length&&(t.set("painting",!0),t.fire("beforepaint"),t.draw(e,function(){t.fire("afterpaint")}),t.sort(),t.set("isPaint",!0),t.set("painting",!1))},repaint:function(){var t,n=this,r=n.get("labels"),i=n.get("markers");return n.set("points",null),n.get("isPaint")||n.get("painting")?(n.set("repainting",!0),t=n.getPoints(),r&&(r.items=[]),i&&(i.items=[]),n.changeShapes(t),e.each(t,function(t){if(null!=t.value){if(r){var e={};e.text=t.value,e.x=t.x,e.y=t.y,r.items.push(e)}i&&i.items.push(t)}}),n._changeMarkers(),n._changeLabels(),void n.set("repainting",!1)):void n.paint()},changeShapes:function(){},addMarker:function(t){var n,r=this,i=r.get("markersGroup"),a={};return i&&(a.x=t.x,a.y=t.y,t.obj&&t.obj.marker&&e.mix(a,t.obj.marker),n=i.addMarker(a),n.set("point",t)),n},renderMarkers:function(){var t,n=this,r=n.get("markers");if(r){var i=e.mix({},r);null==i.animate&&(i.animate=n.get("animate")),i.invert=n.get("invert"),t=n.addGroup(a,i),n.set("markersGroup",t)}},_changeMarkers:function(){var t,n=this,r=n.get("markers");if(r){t=n.get("markersGroup"),t.change(r.items);var i=t.get("children");e.each(i,function(t,e){t.set("point",r.items[e])})}},_changeLabels:function(){this.resetLabels()},removeMarkers:function(){var t=this,e=t.get("markersGroup");e&&e.remove()},setActiveStatus:function(){},remove:function(){var t=this;t.removeMarkers(),t.removeLabels(),s.superclass.remove.call(this)}}),t=s}(),W=function(t){function e(t){return i.isNumber(t)?t:(i.isString(t)?(t=t.replace(/'-'/gi,"/"),t=new Date(t).getTime()):i.isDate(t)&&(t=t.getTime()),t)}function n(t){n.superclass.constructor.call(this,t)}var r=H,i=c;return n.ATTRS={pointInterval:null,pointStart:0,xAxis:null,yAxis:null,effectChart:!0,invert:!1,pointsCache:{}},i.extend(n,r),i.augment(n,{getXName:function(){var t=this,e=t.get("xName");return e||(e=t.get("invert")?"y":"x",t.set("xName",e)),e},getYName:function(){var t=this,e=t.get("yName");return e||(e=t.get("invert")?"x":"y",t.set("yName",e)),e},getPoint:function(t,n){var r=this,a=r.get("xAxis"),s=r.get("yAxis"),o=r.parseYValue(n),c=r.getXName(),l=r.getYName(),u={};return"time"==a.get("type")&&(t=e(t)),r.isInCircle()?u=s.getPointByAngle(t,o):(u[c]=a.getOffset(t),u[l]=s.getOffset(o)),i.mix(u,{yValue:o,xValue:t,value:n}),u},changeData:function(t,e){this.set("pointsCache",{}),n.superclass.changeData.call(this,t,e)},hasXValueInArray:function(){var t=this,e=t.get("xAxis"),n=e.get("type");return("number"!=n&&"time"!=n||!t.get("pointInterval"))&&("category"!=n||e.get("autoTicks"))?!0:!1},getPointByValue:function(t,e){return this.getPoint(t,e)},parseYValue:function(t){return t},animateClip:function(t,e){if(i.svg){var n=this,r=n.get("canvas"),a=n.get("invert"),s=r.get("width"),o=n.get("duration"),c=r.get("height"),l=a?"0,0,"+s+",0":"0,0,0,"+c;n.attr("clip-rect",l),t&&t(),n.animate({"clip-rect":"0,0,"+s+","+c},o,function(){e&&e(),n.attr("clip-rect","")})}else e&&e()},snapEqual:function(t,e){var n=this;if(i.isString(t))return t==e;var r=n.get("pointInterval");return r?Math.abs(t-e)c;c++){var l=e.addItem(t[c],c);s>1&&i&&e.animateItem(l,o.get("prePoint"))}for(var c=s-1;c>=a;c--){var u=n[c];e.removeItem(u)}},onSelected:function(t){this.fire("itemselected",{item:t,point:t.get("point")}),this.fireUpGroup("selected",t)},onUnSelected:function(t){this.fire("itemunselected",{item:t,point:t.get("point")}),this.fireUpGroup("unselected",t)},clearSelected:function(t){var e=this;t=t||e.getSelected(),t&&(e.setItemSelected(t,!1),e.onUnSelected(t))},setItemSelected:function(){},isSelected:function(t){return t&&t.get("selected")},getSelected:function(){var t,e=this,n=e.getItems();return r.each(n,function(n){return e.isSelected(n)?(t=n,!1):void 0}),t},getItemCfg:function(t){var e=this,n=e.get("item"),i=t.obj,a={};return r.mix(a,n),i&&i.attrs&&r.mix(a,i.attrs),a},getItems:function(){var t=this.get("group");return t?t.get("children"):[]},animateItems:function(t){var e=this,n=e.getItems();r.animStep(e.get("duration"),function(t){r.each(n,function(n){var r=n.get("point"),i=e.pointToFactorPath(r,t);n.attr("path",i)})},t)},animateItem:function(t){var e=this,n=t.get("point"),r=e.pointToPath(n);t.animate({path:r},e.get("changeDuration"))},removeItem:function(t){var e=this,n=t.get("animHadler");e.removeLabel(t),n&&r.stopStep(n),t.remove()},removeLabel:function(t){var n=t.get("label");n&&e(n)},pointToFactorPath:function(){},pointToPath:function(t){return this.pointToFactorPath(t,1)}}),t=i}(),$=function(t){function e(t,e,n){t&&!t[e]&&(t[e]=n)}function n(t,e,n,r){return r?t+n+" "+e:t+e+" "+n}function r(t,e){if(e){var n=t[1];t[1]=t[2],t[2]=n}return t}var i=q,a=c,s=v,o=/^M.*(M).*$/,l=function(t){l.superclass.constructor.call(this,t)};return l.ATTRS={elCls:"x-chart-area-series",area:{stroke:"","fill-opacity":"0.70"}},a.extend(l,i),a.mixin(l,[s]),a.augment(l,{processColor:function(){l.superclass.processColor.call(this);var t=this,n=t.get("color"),r=t.get("area");e(r,"fill",n)},renderUI:function(){l.superclass.renderUI.call(this);var t=this,e=t.get("canvas"),n=t.get("markersGroup");t.on("afterpaint",function(){n&&t.isStacked()&&e.get("node").appendChild(n.get("node"))})},hide:function(){l.superclass.hide.call(this);var t=this,e=t.get("markersGroup");e&&e.hide()},show:function(){l.superclass.show.call(this);var t=this,e=t.get("markersGroup");e&&e.show()},drawInner:function(t){var e=this,n=e.get("areaShape");if(n){var r=e._getAreaPath(t);n.attr("path",r)}else e.drawArea(t)},_getAreaPath:function(t){var e,n=this,r=n.get("stackType");return e=r&&"none"!=r?n.points2StackArea(t):n.points2area(t)},changeShapes:function(){l.superclass.changeShapes.call(this);var t=this,e=t.get("areaShape"),n=t.getPoints(),r=t._getAreaPath(n);t.get("animate")?a.animPath(e,r):e.attr("path",r)},drawArea:function(t){var e,n=this,r=n.get("area"),i=n.isStacked()?n.points2StackArea(t):n.points2area(t),s=a.mix({path:i},r);e=n.addShape("path",s),n.set("areaShape",e)},processPoint:function(t,e){var n=this,r=n.get("stackType");r&&"none"!=r&&n.processStackedPoint(t,e)},points2StackArea:function(t){{var e,r,i=this,a=t.length,s=i.getBaseValue(),o=t[0],c=t[a-1],l=i.isInCircle(),u="",h=i.get("invert"),f=i.getXName();i.getYName()}if(a){if(r=i.getVisiblePrev(),e=i.points2path(t),u=e,r){var g=r.getPoints().slice(0,t.length),d=g[0],p=i.points2path(g.reverse());p=p.replace("M","L"),u=l?e+"L"+d.x+" "+d.y+p:e+p}else l||(u=n("M ",o[f],s,h)+e.replace("M","L"),u=u+n("L ",c[f],s,h)+"");u&&!l&&(u+="z")}return u},_getFirstPoint:function(t){var e=null;return a.each(t,function(t){return null!=t.value?(e=t,!1):void 0}),e},_getLastPoint:function(t){for(var e=null,n=t.length-1;n>=0;n--){var r=t[n];if(null!=r.value){e=r;break}}return e},points2area:function(t){var e,i=this,s=t.length,c=i.getBaseValue(),l=i._getFirstPoint(t)||t[0],u=i._getLastPoint(t)||t[s-1],h=i.isInCircle(),f=i.get("invert"),g=i.getXName(),d=(i.getYName(),"");if(s)if(e=i.points2path(t),h){{i.getCircleCenter()}d=e}else if(d=n("M",l[g],c,f),d+=e.replace("M","L"),o.test(d)){d=a.parsePathString(d);var p=[],v=d[0];a.each(d,function(t,e){if(0!==e&&"M"==t[0]){var n=[],i=[],a=[],s=d[e-1];n[0]="L",n[1]=s[1],n[2]=c,i[0]="L",i[1]=v[1],i[2]=c,a[0]="M",a[1]=t[1],a[2]=c,"R"==s[0]?(s[0]="L",t[0]="R"):t[0]="L",p.push(r(n,f)),p.push(r(i,f)),p.push(r(a,f)),v=t}p.push(r(t))}),d=p,d.push(r(["L",u.x,c],f)),a.svg&&d.push(["Z"])}else d=d+n("L",u[g],c,f)+"z";return d}}),t=l}(),Z=function(t){function e(t,e){if(u.isNumber(e))return e;var n=i(t),a=r(e),s=n.getWidth();return n.tl.x+s*a}function n(t,e){if(u.isNumber(e))return e;var n=i(t),a=r(e),s=n.getHeight();return n.tl.y+s*a}function r(t){return.01*parseFloat(t)}function i(t){return t.get("parent").get("plotRange")}function a(t,e,n,r,i,a){var s=Math.acos((r-e)/r)/Math.PI*180,o=a?n-180+s:n-s;t.orignAngle=t.angle,t.angle=o,t.orignX=t.x,t.orignY=t.y,t.x=i.x+(r+5)*Math.cos(t.angle*g),t.y=i.y+(r+5)*Math.sin(t.angle*g)}function s(t,e,n,r,i,s){var o=parseInt(2*e/s,10),c=t.y+e,l=t.y-e;ov;v++){var m=n[v],x=(m.angle,m.y);if(h=d-v,u=i>0?(c-x)/h:(x-l)/h,v>0&&(p=i>0?(x-l)/v:(c-x)/v),g=v,s>u){g=v+1;break}p>0&&s>p&&(f=v)}if(f)for(var v=0;f>=v;v++){var y=v*s;a(n[v],y,r,e,t,!0,s)}if(g&&d-1>g){var b=g-1,_=n[b],x=_.y,k=i>0?c:l;h=d-b-1,u=Math.abs(k-x)/h,s>u&&(u=s);for(var v=d-1;v>=b;v--){var y=(d-1-v)*u;a(n[v],y,r,e,t)}for(var w=i>0?l:c,C=!1,v=b-1;v>0;v--){var S=n[v];if(!C&&Math.abs(w-S.y)/(v+1)r?n.addLabel(a):a.factor>0?g.push(a):i.push(a)}}),i.length){var d;d=l>=-90?270:-90,s(a,c,i,d,-1,h),u.each(i,function(t){n.addLabel(t),f&&e.lineToLabel(t,o,r)})}g.length&&(s(a,c,g,90,1,h),u.each(g,function(t){n.addLabel(t),f&&e.lineToLabel(t,o,r)}))},getLengendItems:function(){var t=this,e=t.getItems(),n=t.get("legendType")||"rect",r=[];return u.each(e,function(t){var e={name:t.get("point").xValue,color:t.attr("fill"),type:n,item:t};r.push(e)}),r},resetLabels:function(){var t=this,e=t.get("labelsGroup"),n=t.get("lineGroup");e&&(e.clear(),n&&n.clear(),t.processLabels(t.getPoints()))},lineToLabel:function(t,e,n){var r,i=this,a=t.orignAngle||t.angle,s=i.getCenter(),o=i._getOffset(a,e+d/2),c=i.get("labelHeight"),l=i.get("lineGroup"),u=[];if(-90==t.angle&&(n-=c/2),u.push(["M",s.x+o.x,s.y+o.y]),null!=t.orignX){r=i._getOffset(a,e+n/2);var h=-90==t.angle?t.y+c/2:t.y;u.push(["R",s.x+r.x,s.y+r.y,t.x,h])}else u.push(["L",t.x,t.y]);l||(l=i.addGroup({elCls:"x-line-group"}),i.set("lineGroup",l)),l.addShape("path",{path:u,fill:null,stroke:t.color})},bindUI:function(){p.superclass.bindUI.call(this),this.bindItemClick()},bindMouseOver:function(){var t=this;t.on("mouseover",function(e){var n=e.target,r=n.shape;r&&t.setActivedItem(r)})},_getLabelCfg:function(t,e,n){var r=this,i=t.startAngle+(t.endAngle-t.startAngle)/2,a=r.getCenter(),s=a.x+(n+d)*Math.cos(i*g),o=a.y+(n+d)*Math.sin(i*g),c={},l=1;return c.x=s,c.y=o,0>e?i>-90&&90>=i?(c["text-anchor"]="end",c.rotate=i):(c["text-anchor"]="start",c.rotate=i-180):i>-90&&90>=i?(c["text-anchor"]="start",l=1):(l=-1,c["text-anchor"]="end"),c.factor=l,c.angle=i,c.color=t.color,c.point=t,c.text=t.xValue,c},getActiveItems:function(){return this.getItems()},isPlaceHolder:function(t){var e=t.get("point");return e&&e.obj&&e.obj.placeHolder},setItemActived:function(t,e){var n=this,r=t.getCfgAttr("attrs").fill||t.getCfgAttr("attrs").color;n.isPlaceHolder(t)||(e?(t.attr({fill:u.highlight(r,.1)}),t.set("actived",!0)):(t.attr({fill:r}),t.set("actived",!1)))},getTrackingInfo:function(){var t=this,e=t.getActived();return e&&e.get("point")},isItemActived:function(t){return t.get("actived")},getRadius:function(){var t=this,e=t.get("radius");return e||(e=t.calculateRadius(t.get("size")),t.set("radius",e)),e},getInnerRadius:function(){var t=this,e=t.get("innerRadius"),n=t.get("innerSize");return!e&&n&&(e=t.calculateRadius(n),t.set("innerRadius",e)),e},calculateRadius:function(t){var e=this,n=e.get("parent").get("plotRange"),i=r(t);return Math.min(n.getWidth(),n.getHeight())/2*i},getCenter:function(){var t,r=this,i=r.get("centerPoint");return i||(i={},t=r.get("center"),i.x=e(r,t[0]),i.y=n(r,t[1]),r.set("centerPoint",i)),i},getItemCfg:function(t){var e=this,n=e.get("item"),r=t.obj,i={};return u.mix(i,n),r&&r.attrs&&u.mix(i,r.attrs),i.fill=t.color,e.get("allowPointSelect")&&(i.cursor="pointer"),i},_getColor:function(t){var e,n=this,r=n.get("colors"),i=n.get("colorHighlight");return t%=r.length,e=r[t],i&&(e=u.highlight(i)),e},formatPoint:function(t,e){var n=this,r=n.getVisiblePoints(),i=!1;if(t.index=e,u.each(r,function(e){(t.index==e.index||t==e)&&(i=!0)}),t.visible=i,i){var a=n._getPiePercent(t,r),s=n.get("startAngle"),o=n.get("endAngle"),c=o-s;t.percent=a.percent,t.obj&&t.obj.attrs&&(t.color=t.obj.attrs.fill),t.color=t.color||n._getColor(e),t.prePercent=a.prePercent,t.startAngle=s+c*a.prePercent,t.endAngle=s+c*(t.prePercent+t.percent)}},getPointByValue:function(t,e){return{xValue:t,value:e}},_getPiePercent:function(t,e){var n=0,r=0,i=null,a={};return u.each(e,function(e,n){(t.index==e.index||t==e)&&(i=n)}),u.each(e,function(t,e){i>e&&(r+=t.value),n+=t.value}),a.percent=t.value/n,a.prePercent=r/n,a},getVisiblePoints:function(){var t,e=this,n=[],r=e.getItems();return!e.get("isPaint")||0==r.length||e.get("repainting")?e.getPoints():(t=e.get("visiblePoints"))?t:(u.each(r,function(t){t.get("visible")&&n.push(t.get("point"))}),e.set("visiblePoints",n),n)},animateItem:function(t,e){var n=this,r=t.get("point"),i=r.startAngle,a=r.endAngle,s=e==t.get("prePoint"),o=s?e.startAngle:e.endAngle,c=s?e.endAngle:e.endAngle,l=t.get("animHadler");l&&u.stopStep(l),l=u.animStep(n.get("changeDuration"),function(e){var r,l,u;if(s?(l=o+(i-o)*e,u=c+(a-c)*e):(l=o-(o-i)*e,u=c-(c-a)*e),r=n._getPiePath(l,u),t.attr("path",r),n.isSelected(t)){var h=n._getOffset(l,u,10);t.attr("transform","t"+h.x+" "+h.y)}}),t.set("animHadler",l)},pointToFactorPath:function(t,e){var n,r,i=this,a=i.get("startAngle");return n=t.startAngle,r=t.endAngle,i._getPiePath(a+(n-a)*e,a+(r-a)*e)},_getPiePath:function(t,e){var n,r=this,i=r.getCenter(),a=i.x,s=i.y,o=r.getRadius(),c=r.getInnerRadius(),l=a+o*Math.cos(t*g),u=a+o*Math.cos(e*g),h=s+o*Math.sin(t*g),f=s+o*Math.sin(e*g);if(c){var d=a+c*Math.cos(t*g),p=a+c*Math.cos(e*g),v=s+c*Math.sin(t*g),m=s+c*Math.sin(e*g);n=[],e-t==360?(n.push(["M",a,s-o]),n.push(["a",o,o,0,1,1,0,2*o]),n.push(["a",o,o,0,1,1,0,-2*o]),n.push(["M",a,s-c]),n.push(["a",c,c,0,1,0,0,2*c]),n.push(["a",c,c,0,1,0,0,-2*c]),n.push(["z"])):(n.push(["M",d,v]),n.push(["L",l,h]),n.push(["A",o,o,0,+(e-t>180),1,u,f]),n.push(["L",p,m]),n.push(["A",c,c,0,+(e-t>180),0,d,v]),n.push(["z"]))}else n=e-t==360?[["M",a,s-o],["a",o,o,0,1,1,0,2*o],["a",o,o,0,1,1,0,-2*o],["z"]]:["M",a,s,"L",l,h,"A",o,o,0,+(e-t>180),1,u,f,"z"];return n},_getOffset:function(t,e,n){var r,i={};return null==n?(r=t,n=e):r=t+(e-t)/2,i.x=n*Math.cos(r*g),i.y=n*Math.sin(r*g),i},setItemSelected:function(t,e){var n,r=this,i=t.get("point"),a=r.get("changeDuration");e?(n=r._getOffset(i.startAngle,i.endAngle,10),t.animate({transform:"t"+n.x+" "+n.y},a)):t.animate({transform:"t0 0"},a),t.set("selected",e)},_onVisibleChange:function(){var t=this;t.set("points",null),this.set("visiblePoints",null),this.changeShapes(),t.resetLabels()},showChild:function(t){p.superclass.showChild.call(this,t),this._onVisibleChange()},hideChild:function(t){p.superclass.hideChild.call(this,t),this._onVisibleChange()},remove:function(){this.removeLegend(),p.superclass.remove.call(this)}}),t=p}(),J=function(t){var e=z;return t=e}(),Q=function(t){var e=U;return t=e}(),K=function(t){function e(t){e.superclass.constructor.call(this,t)}var n=j,r=c,i="x-chart-axis";return e.ATTRS={zIndex:4,x:null,y:null,start:null,end:null,tickOffset:0,elCls:i,position:"bottom",line:{"stroke-width":1,stroke:"#C0D0E0"},tickLine:{"stroke-width":1,stroke:"#C0D0E0",value:5}},r.extend(e,n),r.augment(e,{beforeRenderUI:function(){var t,n=this;if(e.superclass.beforeRenderUI.call(n),t=n.get("plotRange")){var r=n.getRangeInfo();n.set("start",r.start),n.set("end",r.end),n.set("orthoEnd",n._getOrthoEnd())}n.set("indexCache",{}),n.set("pointCache",[])},getRangeInfo:function(){var t=this,e=t.get("plotRange"),n={};if(e){var r=e.start,i=t.get("position"),a={};t.isVertical()?"left"==i?(a.y=e.end.y,a.x=r.x):(r={},a=e.end,r.x=e.end.x,r.y=e.start.y):"top"==i?(r={},r.x=e.start.x,r.y=e.end.y,a=e.end):(a.x=e.end.x,a.y=r.y),n.start=r,n.end=a}return n},change:function(t){var e=this;e.isChange(t.ticks)&&(e.fire("beforechange",{info:t}),e._resetRange(),e._clearTicksInfo(),e.changeInfo(t),e._processTicks(null,!0),e._changeLine(),e._changeTicks(),e._changeGrid(),e.resetLabels(),e.fire("afterchange"))},_resetRange:function(){var t=this,e=t.getRangeInfo();t.set("start",e.start),t.set("end",e.end),t.set("orthoEnd",t._getOrthoEnd())},isRangeChange:function(){var t=this,e=t.getRangeInfo(),n=t.get("start"),r=t.get("end");return e.start.x!=n.x||e.start.y!=n.y||e.end.x!=r.x||e.end.y!=r.y?!0:t.get("orthoEnd")!==t._getOrthoEnd()?!0:!1},isChange:function(t){var e=this,n=e.get("ticks");return e.isRangeChange()||!r.equalsArray(t,n)},changeInfo:function(t){var e=this;e.set("ticks",t.ticks)},_clearTicksInfo:function(){var t=this,e=t.get("grid"),n=t.get("labels");t.set("pointCache",[]),t.set("indexCache",[]),t.set("tickItems",[]),e&&(e.items=[]),n&&(n.items=[])},paint:function(){var t=this;t.fire("beforepaint"),t._drawLines(),t._renderTicks(),t._renderGrid(),t.fire("afterpaint")},_changeLine:function(){var t,e=this,n=e.get("lineShape");n&&(t=e.getLinePath(),n.attr("path",t))},isVertical:function(){var t,e=this,n=e.get("isVertical");return null!=n?n:(t=e.get("position"),n="bottom"==t||"top"==t?!1:!0,e.set("isVertical",n),n)},getOffset:function(t){var e=this,n=e.get("ticks"),i=r.indexOf(n,t);return e.getOffsetByIndex(i)},getStartOffset:function(){return this._getStartCoord()},getEndOffset:function(){return this._getEndCoord()},getValue:function(t){var e=this,n=e._getStartCoord(),r=e._getEndCoord();return n>t||t>r?0/0:e.parseOffsetValue(t)},getStartValue:function(){var t=this,e=t.get("ticks");return e[0]},getEndValue:function(){var t=this,e=t.get("ticks");return e[e.length-1]},getSnapIndex:function(t){var e=this,n=e.get("pointCache"),i=[].concat(n).sort(function(t,e){return t-e}),a=r.snapTo(i,t);return r.indexOf(n,a)},_appendEndOffset:function(t){var e,n=this,r=n.get("tickOffset");return"number"!=typeof r&&(r=r[0]),r&&(e=n._getDirectFactor(),0==t?t+=r*e:e>0?t+=r:t-=r),t +},getOffsetByIndex:function(t){var e=this,n=e._getLength(),r=e.get("ticks"),i=r.length,a=n/(i-1)*t;return e._appendEndOffset(a)+e._getStartCoord()},getOffsetPoint:function(t,e){var n=this,r=n._getOrthoCoord(),i=n.get("indexCache");return e||(void 0!==i[t]?e=i[t]:(e=n.getOffsetByIndex(t),i[t]=e)),n.isVertical()?{x:r,y:e}:{x:e,y:r}},getTickOffsetPoint:function(t){return this.getOffsetPoint(t)},_getStartCoord:function(){var t=this,e=t.get("start");return t.isVertical()?e.y:e.x},_getOrthoCoord:function(){var t=this,e=t.get("start");return t.isVertical()?e.x:e.y},_getEndCoord:function(){var t=this,e=t.get("end");return t.isVertical()?e.y:e.x},_getOrthoEnd:function(){var t,e=this,n=e.get("plotRange");return t=e.isVertical()?n.end.x:n.end.y},_getMiddleCoord:function(){var t=this,e=t._getStartCoord(),n=t._getLength();return e+t._appendEndOffset(n/2)},getLength:function(){return Math.abs(this._getLength())},getTickAvgLength:function(){var t=this,e=t.get("ticks");return t.getLength()/(e.length-1)},_getLength:function(){var t,e=this,n=e.get("start"),r=e.get("tickOffset"),i=e.get("end");return r="number"!=typeof r?r[0]+r[1]:2*r,t=e.isVertical()?i.y-n.y:i.x-n.x,t>0?t-=r:t+=r,t},getLinePath:function(){var t=this,e=t.get("start"),n=t.get("end"),r=[];return r.push(["M",e.x,e.y]),r.push(["L",n.x,n.y]),r},getTickEnd:function(t){var e=this,n=e.get("tickLine"),r=e._getAlignFactor(),i=n.value,a={};return e.isVertical()?(a.x2=t.x1+i*r,a.y2=t.y1):(a.x2=t.x1,a.y2=t.y1+i*r),a},_changeTicks:function(){var t=this,e=t.get("tickShape"),n=t.get("tickItems"),i="";return e?(r.each(n,function(t){var e=r.substitute("M{x1} {y1}L{x2} {y2}",t);i+=e}),void(t.get("animate")?r.animPath(e,i,2):e.attr("path",i))):void(n&&n.length&&t._renderTicks())},_getDirectFactor:function(){var t,e,n,r=this,i=r.get("directfactor");return i?i:(i=1,t=r.get("position"),e=r.get("start"),n=r.get("end"),"bottom"==t||"top"==t?e.x>n.x&&(i=-1):e.y>n.y&&(i=-1),r.set("directfactor",i),i)},_getAlignFactor:function(){var t,e=this,n=e.get("factor");return n?n:(t=e.get("position"),n="bottom"==t||"right"==t?1:-1,e.set("factor",n),n)},_renderTitle:function(){var t=this,e=t.get("title"),n=t._getMiddleCoord(),a=t.getOffsetPoint(null,n),s=r.mix({},e);e.text&&(s.x=a.x+(e.x||0),s.y=a.y+(e.y||0),t.addShape({type:"label",elCls:i+"-title",attrs:s}))},getGridItemCfg:function(t){var e=this,n={},r=e.get("plotRange");return n.x1=t.x,n.y1=t.y,e.isVertical()?(n.y2=n.y1,n.x2=r.end.x):(n.x2=n.x1,n.y2=r.end.y),n},_changeGrid:function(){var t,e=this,n=e.get("grid");n&&(t=e.get("gridGroup"),t&&t.change(n.items))},remove:function(){{var t=this,n=t.get("gridGroup");t.get("labelsGroup")}n&&n.remove(),t.removeLabels(),e.superclass.remove.call(this)}}),t=e}(),te=function(t){function e(t){e.superclass.constructor.call(this,t)}var n=c,r=K;return n.extend(e,r),e.ATTRS={categories:null,type:"category",tickAlignCenter:!0},n.augment(e,{beforeRenderUI:function(){var t=this;if(e.superclass.beforeRenderUI.call(t),t.get("ticks")){if(!t.get("categories")){var n=[];n.concat(t.get("ticks")),t.set("categories",n)}}else{var n=t.get("categories"),r=[];r=r.concat(n),t.get("tickAlignCenter")&&" "!=r[r.length-1]&&r.push(" "),t.set("ticks",r)}},changeInfo:function(t){var e=this,r=t.ticks;r?t.categories||(t.categories=[].concat(t.ticks),n.remove(t.categories," ")):(r=[].concat(t.categories),e.get("tickAlignCenter")&&r.length&&" "!=r[r.length-1]&&r.push(" ")),e.set("categories",t.categories),e.set("ticks",r)},getOffsetByIndex:function(t){return this._getOffsetByTicks(t)},getValue:function(t){var e,n=this,r=n.get("ticks"),i=n.get("categories"),a=n.get("pointCache");if(i.length<=r.length)e=n.getSnapIndex(t);else{var s=a[0],o=t-s,c=n.get("tickAlignCenter")?i.length+1:i.length,l=n._getAvgLength(c);e=Math.round(o/l)}return i[e]},getOffset:function(t){var e=this,r=e.get("categories"),i=n.indexOf(r,t);return e._getOffsetByCategories(i)},_getOffsetByIndex:function(t,e){var n=this,r=n._getAvgLength(e),i=r*t;return n.get("tickAlignCenter")&&(i+=r/2),n._appendEndOffset(i)+n._getStartCoord()},_getOffsetByCategories:function(t){var e=this,n=e.get("categories"),r=e.get("tickAlignCenter")?n.length+1:n.length;return e._getOffsetByIndex(t,r)},_getOffsetByTicks:function(t){var e=this,r=e.get("ticks"),i=e.get("categories"),a=r[t],s=n.indexOf(i,a);return-1!=s?e._getOffsetByCategories(s):e._getOffsetByIndex(t)},_getAvgLength:function(t){var e=this,n=e._getLength(),t=t||e.get("ticks").length,r=n/(t-1);return r},getTickOffsetPoint:function(t){var e=this,n=e._getOrthoCoord(),r=e._getAvgLength(),i=e.getOffsetByIndex(t);return e.get("tickAlignCenter")&&(i-=r/2),e.isVertical()?{x:n,y:i}:{x:i,y:n}}}),t=e}(),ee=function(t){function e(t,e,n){var r=Math.min(t,e),i=Math.max(t,e);return(n>=r||2>r-n)&&(i>=n||2>n-i)}function n(t){n.superclass.constructor.call(this,t)}var r=K,i=c,a=["k","m","g","t"],s=0/0,o=i.snapFloor,l=i.snapCeiling;return i.extend(n,r),n.ATTRS={min:null,max:null,tickInterval:null,autoOffset:!1,autoAppend:5,type:"number",formatter:function(t){if(null==t||isNaN(t))return"";if(1e3>t)return t;var e=this.get("tickInterval");if(e%1e3!==0)return t;for(var n=1e3,r=1;r<=a.length;r++){if(t>=n&&1e3*n>t)return t/n+a[r-1];n=1e3*n}return t/1e12+"t"}},i.augment(n,{beforeRenderUI:function(){var t=this;n.superclass.beforeRenderUI.call(t);var e=t.get("ticks");t.get("autoOffset")&&e&&t._setAutoOffset({ticks:e,min:t.get("min"),max:t.get("max")}),e||(e=t._getTicks(t.get("max"),t.get("min"),t.get("tickInterval")),t.set("ticks",e))},_getTicks:function(t,e,n){var r,i=[],a=(t-e)/n;if(!(t>e)||isNaN(t)||null==t||isNaN(e)||null==e||isNaN(n)||null==n)return[];i.push(e);for(var s=1;a>=s;s++)r=n*s+e,i.push(r);return i},changeInfo:function(t){var e=this;if(t.interval&&(t.tickInterval=t.interval),e.get("autoOffset")&&e._setAutoOffset(t),t.ticks)e.set("ticks",t.ticks);else{var n=e._getTicks(t.max,t.min,t.tickInterval);e.set("ticks",n)}e.set("tickInterval",t.tickInterval)},_setAutoOffset:function(t){var e,n=this,r=t.ticks,i=0,a=0,s=[],o=n.get("autoAppend"),c=n.getEndOffset()-n.getStartOffset();if(null!=t.min&&t.min>r[0]){for(;t.min>r[1];)r.shift();i=(r[1]-t.min)/(r[1]-r[0]),.8>i?r.shift():i=0}var l=r.length;if(null!=t.max&&t.maxt||t>v)return 0/0;var x=e.slice(0).sort(function(t,e){return t-e});if(n=p?l(x,t):o(x,t),isNaN(n)&&(n=x[0],c=x[1]),a=n,r=i.indexOf(e,n),s=r,h=f.get("ticks"),u=f.get("tickInterval"),avg=f._getAvgLength(h.length),n==t)return h[r];if(u)return h[r]+(t-a)/avg*u;if(null==c&&(c=l(x,t),isNaN(c))){var y=x.length;r=y-2,s=y-1,a=x[y-1]}return h[s]+(t-a)/avg*(h[r+1]-h[r])},_getAvgLength:function(t){var e=this,n=e._getLength();return n/(t-1)},getRelativeOffset:function(t){var e,n,r,a,s=this,c=s.get("ticks"),u=i.indexOf(c,t),h=s.get("tickInterval"),f=c.length,g=s._getAvgLength(c.length);return-1!==u?g*u:(e=o(c,t),n=l(c,t),r=e,isNaN(e)?(e=c[0],n=c[1],r=e,a=0):(u=i.indexOf(c,e),a=g*u),isNaN(n)&&(e=c[f-2],n=c[f-1],r=n,a=g*(f-1)),a+=h?(t-r)/h*g:(t-r)/(n-e)*g)}}),t=n}(),ne=function(t){function e(t){if(t instanceof Date)return t.getTime();if(n.isNumber(t))return t;var e=t;return n.isString(t)&&(e=t.replace("-","/"),e=new Date(e).getTime()),e}var n=c,r=ee,i=function(t){i.superclass.constructor.call(this,t)};return i.ATTRS={type:"time",startDate:null,autoOffset:!0,endDate:null},n.extend(i,r),n.augment(i,{beforeRenderUI:function(){var t=this,n=e(t.get("startDate")),r=e(t.get("endDate"));n&&!t.get("min")&&t.set("min",n),r&&!t.get("max")&&t.set("max",r),i.superclass.beforeRenderUI.call(t)}}),t=i}(),re=function(t){var e=c,n=te,r=function(t){r.superclass.constructor.call(this,t)};return r.ATTRS={type:"timeCategory",tickAlignCenter:!1},e.extend(r,n),t=r}(),ie=function(t){var e=c,n=te,r=function(t){r.superclass.constructor.call(this,t)};return r.ATTRS={type:"numberCategory",tickAlignCenter:!1},e.extend(r,n),t=r}(),ae=function(t){var e=c,n=ee,r=function(t){r.superclass.constructor.call(this,t)};return r.ATTRS={circle:null,position:"left",type:"radius"},e.extend(r,n),e.augment(r,{beforeRenderUI:function(){r.superclass.beforeRenderUI.call(this);var t=this,e=t.get("circle");e&&(t.set("start",e.getCenter()),t.set("end",e.getCirclePoint(0)))},getGridItemCfg:function(t){for(var e=this,n={},r=[],i=e.get("circle"),a=i.getCenter(),s=i.getTicksCount(),o=Math.abs(t.y-a.y),c=0;s>c;c++){var l=i.getOffsetByIndex(c),u=i.getCirclePoint(l,o);r.push(u)}return n.points=r,n.r=o,n.center=a,n},getPointByAngle:function(t,e){var n=this,r=n.get("circle"),i=r.getCenter(),a=n.getOffset(e);return r.getCirclePoint(t,Math.abs(a-i.y))},_resetRange:function(){},isRangeChange:function(){return!1},getValueByPoint:function(t,e){var n=this,r=n.get("circle"),i=r.getCenter(),a=r.getDistance(t,e);return n.getValue(i.y-a)}}),t=r}(),se=function(t){function e(t,e){var n=Raphael.color(t),r=n.l*(1+e);return Raphael.hsl2rgb(n.h,n.s,r).hex}function n(t,e,n,r,i){var a,s=i.getCenter(),o=s.x,c=s.y,l=i.getCirclePoint(t,n),u=i.getCirclePoint(e,n);if(r){var h=i.getCirclePoint(t,r),f=i.getCirclePoint(e,r);a=[],a.push(["M",h.x,h.y]),a.push(["L",l.x,l.y]),a.push(["A",n,n,0,+(e-t>180),1,u.x,u.y]),a.push(["L",f.x,f.y]),a.push(["A",r,r,0,+(e-t>180),0,h.x,h.y]),a.push(["z"])}else a=["M",o,c,"L",l.x,l.y,"A",n,n,0,+(e-t>180),1,u.x,u.y,"z"];return a}var r=c,i=W,a=y.Group,s=v,o=X,l=function(t){l.superclass.constructor.call(this,t)};return l.ATTRS={type:"column",elCls:"x-chart-column",columnWidth:null,autoWidth:!0,columnOffset:0,cancelSelect:!1,stackPadding:1,animate:!0,duration:1e3,item:{stroke:"none","stroke-width":1,"fill-opacity":.75}},r.extend(l,i),r.mixin(l,[o,a,s]),r.augment(l,{processColor:function(){var t=this,e=t.get("color");if(e){var n=t.get("item");n.fill||(n.fill=e)}},bindUI:function(){l.superclass.bindUI.call(this),this.bindItemClick()},draw:function(t){var e=this;e.resetWidth(),r.each(t,function(t,n){e._drawPoint(t,n)}),e.get("animate")&&e.animateItems(),e.sort()},_drawPoint:function(t,e){var n=this,r=n.addItem(t,e);if(n.get("labels")){var i=n.addLabel(t.value,t);r.set("label",i)}},addPoint:function(t,e,n){var r=this,i=r.get("data");i.push(t),e&&(i.shift(),n&&r.shiftPoint()),r.changeData(i,n)},shiftPoint:function(){var t=this,e=t.getItems()[0];e&&e.remove(),l.superclass.shiftPoint.call(this)},resetWidth:function(){if(this.get("autoWidth")){if(this.isInCircle())return void this.resetCircleWidth();var t,e,n,r,i=this,a=(i.get("xAxis"),i._getAvgLength()),s=10,o=i._getIndexInfo();e=o.count,t=o.curIndex,n=a/2/e,s=.5*n,r=.5*(a-e*n-(e-1)*s)+((t+1)*n+t*s)-.5*n-.5*a,i.set("columnWidth",n),i.set("columnOffset",r)}},_getAvgLength:function(){var t,e=this,n=e.get("xAxis"),r=n.get("type"),i=e.get("data");if("time"!=r&&"number"!=r&&"timeCategory"!=r)t=n.getTickAvgLength();else{var a=n.getLength();t=a/i.length}return t},_getIndexInfo:function(){var t,e,n=this,i=n.get("parent"),a=i.getSeries?i.getSeries():i.get("children"),s=[];return n.isStacked()?(e=1,t=0):(r.each(a,function(t){t.get("visible")&&"column"==t.get("type")&&s.push(t)}),e=s.length,t=r.indexOf(s,n)),{curIndex:t,count:e}},resetCircleWidth:function(){var t,e,n,r,i=this,a=i.get("xAxis"),s=a.getTickAvgAngle();info=i._getIndexInfo(),e=info.count,t=info.curIndex,n=s/e,r=t*n,i.set("columnWidth",n),i.set("columnOffset",r)},changeShapes:function(t){var e=this;e.resetWidth(),e.changePoints(t)},getActiveItems:function(){return this.getItems()},isItemActived:function(t){return t.get("actived")},setItemActived:function(t,n){var r=t.getCfgAttr("attrs").fill;n?(t.attr("fill",e(r,.2)),t.set("actived",!0)):(t.attr("fill",r),t.set("actived",!1))},setItemSelected:function(t,e){var n=t.getCfgAttr("attrs"),i=n.fill,a=n.stroke,s=n["stroke-width"];e?(t.attr({stroke:r.dark(i,.3),"stroke-width":2}),t.set("selected",!0)):(t.attr({stroke:a,"stroke-width":s}),t.set("selected",!1))},onStickyTracking:function(t){var e=this,n=e.getTrackingInfo(t.point),i=e.getItems();n&&r.each(i,function(t){t.get("point").x==n.x&&t.get("point").y==n.y&&e.setActivedItem(t)})},pointToFactorPath:function(t,e){var r,i,a=this,s=(a.get("item"),a.get("columnWidth")),o=a.get("columnOffset"),c=a.getXName(),l=a.getYName(),u=a.get("invert"),h=u?"h":"v",f=u?"v":"h",g=0,d=a.getBaseValue(),p=a.isInCircle(),v=[];if(p){var m=a.get("xAxis"),x=t.xValue,y=o+x,b=o+x+s,_=t.r||m.getDistance(t.x,t.y),k=t.ir||0;_*=e,k*=e,v=n(y,b,_,k,m)}else{a.isStacked()&&t.lowY?(i=t.lowY,g=a.get("stackPadding")):i=d,i-=g,r=t[l]-i;var w=t[c]+o-s/2,C=d+(i-d)*e;v.push(u?["M",C,w]:["M",w,C]),v.push([h,r*e]),v.push([f,s]),v.push([h,-1*r*e]),v.push(["z"])}return v},processPoint:function(t,e){var n=this,r=n.get("stackType");r&&"none"!=r&&n.processStackedPoint(t,e)}}),t=l}(),oe=function(t){var e=K;return e.Category=te,e.Number=ee,e.Time=ne,e.TimeCategory=re,e.NumberCategory=ie,e.Auto=p,e.Circle=Y,e.Radius=ae,t=e}(),ce=function(t){var e=H;return e.Cartesian=W,e.Line=q,e.Column=se,e.Area=$,e.Pie=Z,e.Stacked=v,e.ItemGroup=X,t=e}(),le=function(t){var e=ce.Cartesian,n=y.Group,r=c,i=function(t){i.superclass.constructor.call(this,t)};return i.ATTRS={elCls:"x-chart-bubble",type:"bubble",circle:{},activeCircle:{},legendType:"circle",radiusField:"r",animate:!0,radiusFormatter:function(t){return Math.pow(t,.75)},autoPaint:!1,stickyTracking:!1},r.extend(i,e),r.mixin(i,[n]),r.augment(i,{processColor:function(){var t=this,e=t.get("color");if(e){var n=t.get("circle");n&&(r.trySet(n,"stroke",e),r.trySet(n,"fill",e))}},renderUI:function(){i.superclass.renderUI.call(this),this._renderGroup()},draw:function(t){var e=this;r.each(t,function(t){e.addBubble(t)})},changeShapes:function(){var t=this,e=t.getPoints(),n=t.getItems();r.each(n,function(n,r){var i=e[r];i&&(n.animate({cx:i.x,cy:i.y},t.get("changeDuration")),n.set("point",i))});var i=n.length;if(e.length=e.length;a--)n[a].remove();if(e.length>i)for(var a=i;ae&&r[n]==t[n]&&c++}),o=i.mix({},o,{y:o.y,index:c}),r.tooltip=r.flag&&r.flag.text?r.flag.text:t.get("flags").flag.text,o.obj=r}t.processPoint(o,a),h.push(o)}),h},changeShapes:function(t,e){var n=this,r=n.get("flag"),a=n.get("line"),s=(i.mix({},r,a),n.get("flagGroup"));e=e||n.get("animate"),t=t||this._getPoints();var o=[];i.each(t,function(t,e){var r=n.__getShapeCfg(t,e);o.push(r),s.changeStackCfg(e,r)}),s.change(o,e)},getTipItem:function(t){return t.obj.tooltip?t.obj.tooltip:t.value},draw:function(t,e){function n(){e&&e()}function a(e){i.each(t,function(t,n){t.x!=e.x||t.isDraw||(s._drawShape(t,n),t.isDraw=!0)})}var s=this,o=s.get("animate"),c=s.get("duration");if(s.set("flagGroup",s.addGroup(r,s.get("flags"))),o){var l=(s.get("onSeries"),s.get("parent"),s._getPoints()),u=0,h=[],f=l.length;i.animStep(c,function(e){var n=u;if(u=parseInt(e*f,10),u>f-1&&(u=f-1),u!=n){h=t.slice(0,u+1);for(var r=n;u>r;r++)a(l[r])}1==e&&a(l[u])},n)}else i.each(t,function(t,e){s._drawShape(t,e)}),n()},_drawShape:function(t,e){var n=this,r=n.get("flagGroup"),i=n.__getShapeCfg(t,e),a=r.addFlag(i);return a},__getShapeCfg:function(t,e){var n=this,r=n.get("data"),a=n.get("flagGroup"),s=n.get("flags");s.flag.point=t;var o=i.mix({},{},{point:t});return r&&r[e]&&r[e].flag&&i.mix(o,r[e].flag),t.index>0&&i.each(a.get("children"),function(e){var n=e.get("point");if(n.x==t.x&&n.index+1==t.index){var r=e.get(o.distance||e.get("distance")<=0?"topY":"bottomY");r&&(o.point.y=r)}}),o}}),t=e}(),fe=function(t){function e(t,e){return t>e?e:t}function n(t){n.superclass.constructor.call(this,t)}var r=c,i=y.Group,a=A.Item,s=V,o=F,l=oe,u=ce;return n.ATTRS={elCls:"x-chart-series-group",zIndex:5,plotRange:null,colors:["#2f7ed8","#0d233a","#8bbc21","#910000","#1aadce","#492970","#f28f43","#77a1e5","#c42525","#a6c96a"],symbols:["circle","diamond","square","triangle","triangle-down"],seriesOptions:{},yTickCounts:[3,5],xTickCounts:[5,10],series:null,legend:null,xAxis:null,yAxis:null,tooltip:null,stackedData:null,data:null,itemName:"series"},r.extend(n,a),r.mixin(n,[i,s.UseLegend]),r.augment(n,{renderUI:function(){var t=this;n.superclass.renderUI.call(t),t._renderSeries(),t._renderAxis(),t._addSeriesAxis(),t._paintAxis(t.get("xAxis"),"xAxis"),t._paintAxis(t.get("yAxis"),"yAxis"),t._paintSeries(),t.renderLegend(),t._renderTooltip()},bindUI:function(){var t=this;n.superclass.bindUI.call(t),t.bindCanvasEvent(),t.bindChartEvent()},bindCanvasEvent:function(){function t(n){r.contains(a.get("node"),n.target)||a.get("node")==n.target||(e.onTriggerOut(n),r.removeEvent(document,"click",t))}var e=this,n=e.get("tipGroup"),i=n?n.get("triggerEvent"):"",a=e.get("canvas");"click"==i?a.on("click",function(n){e.onCanvasMove(n),setTimeout(function(){r.removeEvent(document,"click",t),r.addEvent(document,"click",t)})}):(a.on("mousemove",r.wrapBehavior(e,"onCanvasMove")),a.on("mouseout",r.wrapBehavior(e,"onMouseOut")))},bindChartEvent:function(){var t=this,e=t.get("canvas");e.on("click",function(n){var r=e.getPoint(n.clientX,n.clientY);if(t._isInAxis(r)){var i=t.getPointInfo(r,n);t.fireUp("plotclick",i)}}),e.on("mousemove",function(n){var r=e.getPoint(n.clientX,n.clientY),i=t.get("isOver");if(t._isInAxis(r)){var a=t.getPointInfo(r,n);t.fireUp("plotmove",a),i||(t.fireUp("plotover",a),t.set("isOver",!0))}else i&&(t.fireUp("plotout"),t.set("isOver",!1))})},getPointInfo:function(t,e){var n=e.target.shape;return r.mix({shape:n},t)},onCanvasMove:function(t){var e,n=this,r=n.get("canvas"),i=n.get("tipGroup");i&&(e=r.getPoint(t.clientX,t.clientY),n._isInAxis(e)?n._processTracking(e,i):n.onMouseOut())},onTriggerOut:function(){var t=this,e=t.get("tipGroup");t.clearActivedItem(),e.get("visible")&&(e.get("shared")&&r.each(t.getVisibleSeries(),function(t){var e=t.get("markersGroup");e&&e.clearActivedItem(),t.clearActivedItem&&t.clearActivedItem()}),t._hideTip())},onMouseOut:function(t){var e=this;t&&t.target!=e.get("canvas").get("none")||e.onTriggerOut(t)},getSeries:function(){return this.get("children")},_processTracking:function(t,e){var n,i=this,a=[];if(e.get("shared"))a=i.getSeries();else{var s=i.getActived();s&&a.push(s)}r.each(a,function(e){e&&e.get("stickyTracking")&&e.get("visible")&&e.onStickyTracking({point:t})}),a.length&&(n=i._getTipInfo(a,t),n.items.length&&i._showTooltip(n.title,n.point,n.items))},_getTipInfo:function(t,e){var n={items:[],point:{}},i=0,a=this.get("tipGroup")&&this.get("tipGroup").get("pointRenderer");return r.each(t,function(s){var o,c=s.getTrackingInfo(e),l={},u=s.get("invert"),h=u?"y":"x",f=u?"x":"y";if(c){if(s.get("visible")){var g=s.get("markersGroup");if(null!=c.value){var d=a;s.get("pointRenderer")&&(d=s.get("pointRenderer")),i+=1;var p=s.getTipInfo(c);if(r.isObject(p)?n.items.push(p):r.isArray(p)&&r.isObject(p[0])?n.items=n.items.concat(p):(l.name=s.get("name"),l.value=d?d(c,s):p,l.color=c.color||s.get("color"),l.suffix=s.get("suffix"),n.items.push(l)),g&&g.get("single")){g.show();var v=g.getChildAt(0);v&&v.attr({x:c.x,y:c.y})}}else g&&g.get("single")&&g.hide()}o=s.get("xAxis")?s.get("xAxis").formatPoint(c.xValue):c.xValue,1==i&&(n.title=o,n.point.name=c.name,c[h]?(n.point[h]=c[h],n.point[f]=1==t.length?c[f]:e[f]):(n.point[h]=e[h],n.point[f]=e[f]))}}),n},_showTooltip:function(t,e,n){var r=this,i=r.get("tipGroup"),a=r.get("prePoint");a&&a.x==e.x&&a.y==e.y&&e.name==a.name||(i.setPosition(e.x,e.y),r.set("prePoint",e),i.get("visible")||i.show(),i.setTitle(t),i.setItems(n))},_hideTip:function(){var t=this,e=t.get("tipGroup");e&&e.get("visible")&&(e.hide(),t.set("prePoint",null))},_isInAxis:function(t){var e=this,n=e.get("plotRange");return n.isInRange(t)},_renderSeries:function(){var t=this,e=t.get("series");r.each(e,function(e,n){t.addSeries(e,n)})},getLengendItems:function(){var t=this,e=t.getSeries(),n=[];return r.each(e,function(t){var e=t.get("markers"),r=e&&e.marker.symbol,t={name:t.get("name"),color:t.get("color"),type:t.get("legendType"),symbol:r,item:t};n.push(t)}),n},_renderTooltip:function(){var t,e=this,n=e.get("tooltip");n&&(n.plotRange=e.get("plotRange"),t=e.get("parent").addGroup(o,n),e.set("tipGroup",t))},_renderAxis:function(){var t=this,e=t.get("xAxis"),n=t.get("yAxis");if(e&&!e.isGroup&&(e=t._createAxis(e),t.set("xAxis",e)),r.isArray(n)&&!n[0].isGroup){var i=[];r.each(n,function(e){i.push(t._createAxis(e)),t.set("yAxis",i)})}else n&&!n.isGroup&&(e&&"circle"==e.get("type")&&(n.type="radius",n.circle=e),n=t._createAxis(n),t.set("yAxis",n))},_createAxis:function(t){var e,n,i=this,a=t.type;return!a&&t.categories&&(a="category"),"category"==a||"timeCategory"==a?t.categories||(t.autoTicks=!0):t.ticks||"circle"==a||(t.autoTicks=!0),t.plotRange=i.get("plotRange"),t.autoPaint=!1,a=a||"number",n=r.ucfirst(a),e=l[n],e?i.get("parent").addGroup(e,t):null},_caculateAxisInfo:function(t,e){if("category"==t.get("type"))return this._caculateCategories(t,e);var n,r,i,a,s,o,c,u=this,h=[],f=t.get("type"),g=(t.getLength(),u.get("xAxis"==e?"xTickCounts":"yTickCounts")||[]);if("number"==f||"radius"==f)i=t.getCfgAttr("min"),a=t.getCfgAttr("max"),o=l.Auto;else if("time"==f){var d=t.get("startDate"),p=t.get("endDate");d&&(i=d.getTime()),p&&(a=p.getTime()),o=l.Auto.Time}else"timeCategory"==f&&(o=l.Auto.TimeCategory);s=t.getCfgAttr("tickInterval"),r=u._getRelativeSeries(t,e);var v={min:i,max:a,minCount:g[0],maxCount:g[1],interval:s};return"yAxis"==e&&r.length&&(n=r[0].get("stackType")),h=n&&"none"!=n?u.getStackedData(t,e):u.getSeriesData(t,e),h.length?(v.data=h,c=o.caculate(v,n)):c={ticks:[]},c},_caculateCategories:function(t,e){var n=this,i=n.getSeriesData(t,e),a=[];if(i.length&&(a=a.concat(i[0])),i.length>1&&!n.get("data"))for(var s=1;ss)&&(e=s)}arr.push(r)}),arr.push(e),s.set("stackedData",arr));var o=s.getSeriesData(t,n,!1);return o.length?(rst.push(arr),rst=rst.concat(o)):rst=arr,rst},_paintAxis:function(t,e){var n,i=this;n=r.isArray(t)?t:[t],r.each(n,function(t){if(i._hasRelativeSeries(t,e)){if(t.get("autoTicks")){var n=i._caculateAxisInfo(t,e);t.changeInfo(n)}t.paint()}})},_getRelativeSeries:function(t,e){var n=this,i=n.getVisibleSeries(),a=[];return r.each(i,function(n){n.get(e)==t&&a.push(n)}),a},_hasRelativeSeries:function(t,e){var n=this,i=n.getVisibleSeries(),a=!1;return r.each(i,function(n){return n.get(e)==t?(a=!0,!1):void 0}),a},_resetAxis:function(t,e){if(!t.get("autoTicks"))return void(t.isRangeChange()&&t.change({ticks:t.get("ticks")}));e=e||"yAxis",this.set("stackedData",null);var n=this,r=n._caculateAxisInfo(t,e);t.change(r)},_resetSeries:function(){var t=this,e=t.getSeries();r.each(e,function(t){t.get("visible")&&t.repaint()})},repaint:function(){var t=this,e=t.get("legendGroup"),n=t.get("xAxis"),i=t.get("yAxis");n&&t._resetAxis(n,"xAxis"),i&&(r.isArray(i)?r.each(i,function(e){t._resetAxis(e,"yAxis")}):t._resetAxis(i,"yAxis")),t._resetSeries(),e&&e.resetPosition()},changeData:function(t){var e=this,n=e.getSeries(),i=e.get("fields");e.set("data",t),r.each(n,function(n,a){if(i){var s=e._getSeriesData(n.get("name"),a);n.changeData(s)}else n.changeData(r.isArray(t[0])?t[a]:t)}),e.repaint()},_getSeriesData:function(t,e){var n=this,i=n.get("data"),a=n.get("fields"),s=i[e];return t&&r.each(i,function(e){return e.name==t?(s=e,!1):void 0}),n._parseData(s,a)},_getDefaultType:function(){var t=this,e=t.get("seriesOptions"),n="line";return r.each(e,function(t,e){return n=e.replace("Cfg",""),!1}),n},getVisibleSeries:function(){var t=this,e=t.getSeries();return r.filter(e,function(t){return t.get("visible")})},addSeries:function(t,e){var n,r=this,i=t.type||r._getDefaultType(),a=r._getSeriesClass(i),s=r._getSeriesCfg(i,t,e);return s.autoPaint=s.autoPaint||!1,n=r.addGroup(a,s)},_paintSeries:function(){var t=this,e=t.getSeries();r.each(e,function(t){t.paint()})},_addSeriesAxis:function(){var t=this,e=t.getSeries();r.each(e,function(e){if(!(e instanceof u.Cartesian))return!0;e.get("xAxis")||e.set("xAxis",t.get("xAxis"));var n=t.get("yAxis");null==e.get("yAxis")&&(r.isArray(n)?e.set("yAxis",n[0]):e.set("yAxis",n)),r.isNumber(e.get("yAxis"))&&e.set("yAxis",n[e.get("yAxis")])})},showChild:function(t){var e=this,n=t.get("yAxis");t.get("visible")||(t.show(),n&&(e._resetAxis(n),e._resetSeries()))},hideChild:function(t){var e=this,n=t.get("yAxis");t.get("visible")&&(t.hide(),n&&(e._resetAxis(n),e._resetSeries()))},_getSeriesCfg:function(t,e,n){var i=this,a=i.get("seriesOptions"),s=i.get("colors"),o=i.get("data"),c=i.get("fields"),l=i.get("symbols");return e=r.mix(!0,{},a[t+"Cfg"],e),e.invert=i.get("invert"),!e.color&&s.length&&(e.color=s[n%s.length]),e.markers&&e.markers.marker&&!e.markers.marker.symbol&&(e.markers.marker.symbol=l[n%l.length]),o&&!e.data&&(e.data=c?i._getSeriesData(e.name,n):o),e},_getSeriesClass:function(t){var e=r.ucfirst(t),n=u[e]||u;return n},remove:function(){var t=this,e=t.get("canvas");e.off("mousemove",r.getWrapBehavior(t,"onCanvasMove")),e.off("mouseout",r.getWrapBehavior(t,"onMouseOut")),n.superclass.remove.call(t)}}),t=n}(),ge=function(t){var e=ce;return e.Bubble=le,e.Scatter=ue,e.Flag=he,t=e}(),de=function(t){var e=c,n=w,r=A.Back,i=fe,a=m,s=function(t){this._attrs=e.mix({},s.ATTRS,t),this.events={}};return s.ATTRS={canvas:void 0,colors:void 0,data:void 0,yTickCounts:void 0,xTickCounts:void 0,width:null,height:null,legend:void 0,plotCfg:void 0,plotRange:void 0,series:void 0,invert:!1,seriesOptions:void 0,subTitle:void 0,title:void 0,tooltip:void 0,xAxis:void 0,yAxis:void 0,forceFit:!1,fitRatio:0,fields:void 0,theme:a.SmoothBase},e.augment(s,{get:function(t){return this._attrs[t]},set:function(t,e){return this._attrs[t]=e,this},render:function(){var t=this;if(!t.get("id"))throw"You must assign id for the chart!";t.paint()},clear:function(){var t=this,e=t.get("canvas");e.destroy(),t.set("isPaint",!1)},paint:function(){var t=this;t.get("isPaint")||(t._renderCanvas(),t._renderPlot(),t._renderTitle(),t._renderSeries(),t.get("canvas").sort(),t.get("forceFit")&&t.bindFitEvent())},_getFitInfo:function(){var t=this,n=t.get("el"),r=t.get("fitRatio"),i=e.getWidth(n),a=t.get("height")||e.getHeight(n);return r&&(a=i*r),{width:i,height:a}},forceFit:function(){var t=this,e=t.get("plotBack"),n=t.get("canvas"),r=t._getFitInfo(),i=t.get("seriesGroup");n.setSize(r.width,r.height),e.repaint(),t._renderTitle(),i.repaint()},_renderCanvas:function(){var t=this,r=t.get("id")||t.get("render")||"";r=r.replace("#","");var i,a,s,o=document.getElementById(r);if(t.set("el",o),t.get("forceFit")){var c=t._getFitInfo();i=c.width,a=c.height}else i=t.get("width")||e.getWidth(o),a=t.get("height")||e.getHeight(o);s=new n({width:i,height:a,id:r}),s.chart=t,t.set("canvas",s)},_renderPlot:function(){var t,n,i=this,a=i.get("plotCfg"),s=i.get("canvas"),o=i.get("theme");a=e.mix({},o.plotCfg,a),t=s.addGroup(r,a),n=t.get("plotRange"),i.set("plotBack",t),i.set("plotRange",n)},_renderTitle:function(){var t=this,n=t.get("title"),r=t.get("subTitle"),i=t.get("theme"),a=t.get("canvas"),s={},o={};if(n){var c=t.get("titleShape");null==n.x&&(s.x=a.get("width")/2,s.y=n.y||15),c?c.attr(s):(s=e.mix(s,i.title,n),c=a.addShape("label",s),t.set("titleShape",c))}if(r){var l=t.get("subTitleShape");null==r.x&&(o.x=a.get("width")/2,o.y=r.y||35),l?l.attr(o):(o=e.mix(o,i.subTitle,r),l=a.addShape("label",o),t.set("subTitleShape",l))}},_getDefaultType:function(){var t=this,n=t.get("seriesOptions"),r="line";return e.each(n,function(t,e){return r=e.replace("Cfg",""),!1}),r},_renderSeries:function(){var t,n=this,r=n.get("theme"),a={},s=n._attrs,o=n._getDefaultType();e.each(s.series,function(t){t.type||(t.type=o)}),e.mix(!0,a,r,{colors:s.colors,xTickCounts:s.xTickCounts,yTickCounts:s.yTickCounts,data:s.data,invert:n.get("invert"),fields:s.fields,series:s.series,seriesOptions:s.seriesOptions,tooltip:s.tooltip,legend:s.legend,xAxis:s.xAxis}),e.mix(a,{plotRange:s.plotRange}),e.isObject(s.yAxis)?e.mix(!0,a,{yAxis:s.yAxis}):e.isArray(s.yAxis)&&(e.each(s.yAxis,function(t,n){s.yAxis[n]=e.mix(!0,{},r.yAxis,t)}),a.yAxis=s.yAxis),t=n.get("canvas").addGroup(i,a),n.set("seriesGroup",t)},bindFitEvent:function(){function t(){clearTimeout(r),r=setTimeout(function(){n.forceFit()},200)}var n=this,r=null;e.addEvent(window,"resize",t)},repaint:function(){var t=this;t.get("seriesGroup").repaint()},getSeries:function(){return this.get("seriesGroup").getSeries()},getSerieByName:function(t){return this.get("seriesGroup").findBy(function(e){return e.get("name")==t})},getXAxis:function(t){var e,n=this; +return e=t?n.getSerieByName(t):n.getSeries()[0],e.get("xAxis")},getYAxis:function(t){var e,n=this;return e=t?n.getSerieByName(t):n.getSeries()[0],e.get("yAxis")},changeData:function(t){var e=this,n=e.get("seriesGroup");t!==e.get("data")&&e.set("data",t),n.changeData(t)},on:function(t,e){var n=this.events,r=n[t];return r||(r=n[t]=[]),r.push(e),this},fire:function(t,n){var r=this,i=r.events,a=i[t];a&&e.each(a,function(t){t(n)})},off:function(t,n){var r=this,i=(r.get("node"),this.events),a=i[t];return t?(a&&e.remove(a,n),this):(this.events={},this)}}),t=s}(),pe=function(t){var n=de;return n.Util=c,n.Canvas=w,n.Plot=A,n.Actived=y,n.Date=e,n.Theme=m,n.Series=ce,n.Legend=V,n.Flags=J,n.Candlesticks=Q,n.Axis=oe,n.Tooltip=F,window.Chart=n,window.AChart=n,t=n}()}(); \ No newline at end of file diff --git a/src/assets/chartstheme/chongqing.js b/src/assets/chartstheme/chongqing.js new file mode 100644 index 0000000..971a9d9 --- /dev/null +++ b/src/assets/chartstheme/chongqing.js @@ -0,0 +1,31 @@ +(function (root, factory) { + if (typeof define === 'function' && define.amd) { + // AMD. Register as an anonymous module. + define(['exports', 'echarts'], factory); + } else if (typeof exports === 'object' && typeof exports.nodeName !== 'string') { + // CommonJS + factory(exports, require('echarts')); + } else { + // Browser globals + factory({}, root.echarts); + } +}(this, function (exports, echarts) { + var log = function (msg) { + if (typeof console !== 'undefined') { + console && console.error && console.error(msg); + } + } + if (!echarts) { + log('ECharts is not Loaded'); + return; + } + if (!echarts.registerMap) { + log('ECharts Map is not loaded') + return; + } + + echarts.registerMap('chongqing', + {"features":[{"type":"Feature","properties":{"adcode":500101,"name":"万州区","center":[108.380246,30.807807],"centroid":[108.406819,30.704054],"childrenNum":0,"level":"district","subFeatureIndex":0,"acroutes":[100000,500000]},"geometry":{"type":"MultiPolygon","coordinates":[[[[108.034778,30.574187],[108.028051,30.587432],[108.033697,30.592424],[108.025252,30.60289],[108.016954,30.629571],[108.023091,30.63617],[108.025645,30.648844],[108.042585,30.662481],[108.0554,30.660027],[108.079558,30.664532],[108.082259,30.677926],[108.074844,30.696304],[108.086678,30.713714],[108.074894,30.723121],[108.047544,30.723684],[108.03517,30.715362],[108.011405,30.709814],[107.959112,30.719262],[107.918653,30.75829],[107.908243,30.762911],[107.905592,30.77601],[107.88492,30.806138],[107.876131,30.813287],[107.896508,30.834932],[107.929504,30.859342],[107.954202,30.872428],[107.95597,30.882983],[107.986953,30.901924],[107.994711,30.908665],[108.000849,30.911915],[108.009392,30.907662],[108.029426,30.884508],[108.0363,30.8701],[108.041112,30.876522],[108.069149,30.888281],[108.071751,30.892695],[108.081817,30.885712],[108.101654,30.878007],[108.090115,30.871545],[108.096646,30.84782],[108.105287,30.841356],[108.109608,30.82931],[108.122866,30.833487],[108.126057,30.840875],[108.131704,30.832001],[108.152179,30.831278],[108.157482,30.834771],[108.167106,30.827182],[108.18218,30.824211],[108.197254,30.833647],[108.200102,30.839188],[108.218417,30.852839],[108.229956,30.856171],[108.225488,30.860908],[108.231184,30.87612],[108.228237,30.881298],[108.244294,30.89113],[108.243803,30.882261],[108.260055,30.872789],[108.268402,30.881659],[108.29202,30.892976],[108.300269,30.901041],[108.346277,30.921222],[108.360861,30.932976],[108.349027,30.939153],[108.339649,30.963135],[108.355214,30.960408],[108.372792,30.969791],[108.395674,30.991641],[108.41497,30.998897],[108.426509,30.998216],[108.440356,31.002545],[108.455626,30.994728],[108.45327,30.988755],[108.454743,30.970232],[108.460537,30.967426],[108.486413,30.977008],[108.496626,30.972839],[108.50409,30.977289],[108.501094,30.98651],[108.506643,30.992604],[108.51666,30.990559],[108.533894,30.996251],[108.531243,30.978051],[108.523632,30.973159],[108.537577,30.958123],[108.552602,30.915405],[108.566448,30.912396],[108.593307,30.920259],[108.608578,30.93807],[108.61884,30.934741],[108.619233,30.926999],[108.628169,30.918253],[108.623013,30.912837],[108.621589,30.888561],[108.625419,30.875358],[108.634798,30.885271],[108.653014,30.89105],[108.665977,30.867972],[108.671968,30.852116],[108.685078,30.845773],[108.685127,30.835976],[108.698482,30.822885],[108.699955,30.811841],[108.715177,30.815094],[108.733393,30.81405],[108.738549,30.808026],[108.740808,30.787259],[108.74724,30.782116],[108.740169,30.775527],[108.749842,30.74555],[108.754998,30.740044],[108.76639,30.74141],[108.762609,30.728106],[108.766586,30.720548],[108.763444,30.713031],[108.789762,30.714277],[108.79261,30.706558],[108.781022,30.697028],[108.779254,30.685125],[108.785883,30.683516],[108.818094,30.693771],[108.823347,30.69168],[108.828699,30.679414],[108.836016,30.678449],[108.872007,30.690112],[108.883546,30.695661],[108.884331,30.687337],[108.896312,30.684039],[108.899946,30.676438],[108.901713,30.646792],[108.871565,30.618103],[108.869896,30.610979],[108.90952,30.581273],[108.894643,30.56702],[108.893121,30.557799],[108.871663,30.532749],[108.854429,30.521913],[108.853005,30.514984],[108.839011,30.50318],[108.806948,30.491414],[108.799239,30.50592],[108.788534,30.51293],[108.77292,30.503502],[108.761529,30.505315],[108.744196,30.494799],[108.723966,30.507572],[108.726176,30.515548],[108.711887,30.523203],[108.715815,30.530373],[108.711592,30.537864],[108.699415,30.544389],[108.700004,30.561786],[108.690479,30.586708],[108.666223,30.5886],[108.654487,30.585017],[108.639904,30.574751],[108.64344,30.562027],[108.649725,30.554215],[108.649332,30.537824],[108.628611,30.525176],[108.620116,30.52288],[108.621737,30.515468],[108.604551,30.510795],[108.611376,30.502173],[108.598561,30.493872],[108.590606,30.494718],[108.591245,30.487787],[108.581719,30.485893],[108.569935,30.470418],[108.564926,30.468564],[108.55707,30.486014],[108.542929,30.491978],[108.528297,30.487505],[108.513124,30.501407],[108.491765,30.501488],[108.479146,30.488956],[108.455086,30.489319],[108.45268,30.495968],[108.440994,30.491011],[108.424054,30.488956],[108.42101,30.497176],[108.427786,30.512567],[108.412368,30.503059],[108.409962,30.517563],[108.399553,30.520504],[108.402253,30.529688],[108.409717,30.532749],[108.410404,30.543261],[108.404315,30.548295],[108.394593,30.536737],[108.378734,30.534884],[108.344657,30.476987],[108.338814,30.470337],[108.33248,30.449336],[108.317062,30.433129],[108.315835,30.425387],[108.298944,30.407562],[108.296538,30.401109],[108.275031,30.405546],[108.261479,30.388605],[108.254261,30.403529],[108.236732,30.409216],[108.223622,30.421274],[108.241937,30.443773],[108.232755,30.45502],[108.230496,30.476705],[108.207811,30.49766],[108.195045,30.514501],[108.184537,30.518167],[108.175552,30.510633],[108.165633,30.524411],[108.171378,30.539314],[108.163374,30.540805],[108.152523,30.535931],[108.153063,30.545879],[108.143587,30.566215],[108.12645,30.564],[108.120067,30.576965],[108.126647,30.577972],[108.127187,30.586104],[108.111621,30.59343],[108.105631,30.591458],[108.103863,30.573382],[108.088593,30.572617],[108.083339,30.579582],[108.072537,30.582159],[108.062667,30.574429],[108.052847,30.572094],[108.034778,30.574187]]]]}},{"type":"Feature","properties":{"adcode":500102,"name":"涪陵区","center":[107.394905,29.703652],"centroid":[107.334026,29.658582],"childrenNum":0,"level":"district","subFeatureIndex":1,"acroutes":[100000,500000]},"geometry":{"type":"MultiPolygon","coordinates":[[[[107.701575,29.615443],[107.69804,29.605889],[107.687532,29.600481],[107.666958,29.573804],[107.654634,29.562457],[107.651197,29.553304],[107.629003,29.539147],[107.608135,29.532474],[107.607546,29.514652],[107.615009,29.512373],[107.620558,29.483638],[107.613143,29.479526],[107.595958,29.480951],[107.577446,29.462427],[107.574206,29.452533],[107.56139,29.453062],[107.552798,29.447809],[107.546562,29.431845],[107.532666,29.423047],[107.513664,29.461165],[107.478507,29.497151],[107.475905,29.50635],[107.4625,29.502117],[107.463826,29.498617],[107.450519,29.490028],[107.441386,29.491575],[107.431762,29.483475],[107.427491,29.505658],[107.391548,29.530969],[107.380599,29.523197],[107.365868,29.522383],[107.358601,29.51575],[107.348683,29.515547],[107.328993,29.509321],[107.323248,29.497558],[107.313526,29.487912],[107.30567,29.465318],[107.277338,29.440357],[107.262264,29.436162],[107.260938,29.429035],[107.245422,29.424391],[107.240512,29.426795],[107.227598,29.418159],[107.226666,29.406835],[107.237713,29.394817],[107.241691,29.379415],[107.239285,29.364744],[107.225487,29.367801],[107.20732,29.366293],[107.207221,29.385934],[107.214439,29.39775],[107.199561,29.399135],[107.203244,29.411316],[107.185911,29.412945],[107.173096,29.408342],[107.167056,29.420603],[107.16082,29.424432],[107.155272,29.417304],[107.148741,29.419259],[107.134846,29.411438],[107.142947,29.408179],[107.146827,29.396365],[107.134158,29.394613],[107.125124,29.387564],[107.110442,29.391598],[107.109166,29.383856],[107.114812,29.366741],[107.10018,29.361606],[107.083387,29.359813],[107.07229,29.362829],[107.043321,29.378437],[107.052552,29.388705],[107.051619,29.394205],[107.035121,29.391231],[107.026381,29.402802],[107.034581,29.406713],[107.029228,29.410827],[107.025055,29.441782],[107.034482,29.453103],[107.034581,29.467435],[107.015873,29.473338],[107.019997,29.487057],[107.012927,29.487708],[107.00453,29.471058],[106.993925,29.482579],[106.98052,29.488767],[106.964415,29.488685],[106.945952,29.497029],[106.947278,29.510826],[106.953612,29.535811],[106.953268,29.551311],[106.958768,29.582508],[106.966624,29.599546],[106.975315,29.634142],[106.993581,29.679331],[107.002223,29.714468],[107.009195,29.712762],[107.027166,29.717189],[107.041406,29.734407],[107.070032,29.751217],[107.070277,29.758524],[107.086726,29.761813],[107.102635,29.754546],[107.111572,29.76299],[107.153111,29.784827],[107.186992,29.79473],[107.198039,29.809622],[107.212279,29.816276],[107.206583,29.824958],[107.210806,29.840292],[107.229317,29.84374],[107.240512,29.841347],[107.265161,29.847472],[107.270857,29.851447],[107.272379,29.837291],[107.29801,29.839603],[107.299827,29.847472],[107.313084,29.845809],[107.323445,29.852947],[107.337193,29.873062],[107.335818,29.884415],[107.342005,29.892929],[107.360762,29.897227],[107.369354,29.906794],[107.379666,29.899132],[107.377505,29.910523],[107.387129,29.921993],[107.383545,29.926614],[107.415755,29.970577],[107.421156,29.967944],[107.448064,29.999092],[107.453171,30.001441],[107.466968,29.998606],[107.471338,29.989453],[107.487443,29.972076],[107.498197,29.972481],[107.500554,29.960611],[107.515186,29.959436],[107.523779,29.978678],[107.53355,29.968551],[107.546905,29.965675],[107.546807,29.958585],[107.56193,29.946146],[107.571898,29.951049],[107.57946,29.943877],[107.573126,29.933827],[107.579361,29.923939],[107.59473,29.917657],[107.602979,29.897389],[107.598707,29.888632],[107.613094,29.876955],[107.626892,29.874522],[107.616973,29.865884],[107.613585,29.856111],[107.604256,29.852014],[107.595369,29.835222],[107.605238,29.832423],[107.605336,29.808161],[107.622669,29.802562],[107.638627,29.813274],[107.638529,29.772976],[107.64226,29.76303],[107.625075,29.753896],[107.640345,29.740701],[107.632784,29.719016],[107.630427,29.701714],[107.64447,29.687821],[107.6565,29.686156],[107.670101,29.675064],[107.674176,29.663362],[107.684733,29.666532],[107.696616,29.660315],[107.718073,29.65682],[107.713752,29.642555],[107.698482,29.618614],[107.701575,29.615443]]]]}},{"type":"Feature","properties":{"adcode":500103,"name":"渝中区","center":[106.56288,29.556742],"centroid":[106.540387,29.549305],"childrenNum":0,"level":"district","subFeatureIndex":2,"acroutes":[100000,500000]},"geometry":{"type":"MultiPolygon","coordinates":[[[[106.588199,29.571242],[106.589623,29.556518],[106.583731,29.547812],[106.556185,29.5411],[106.539441,29.540489],[106.532272,29.52869],[106.500995,29.529789],[106.495594,29.546958],[106.482778,29.548097],[106.494022,29.554809],[106.502321,29.557494],[106.530407,29.552369],[106.545382,29.566483],[106.560849,29.567175],[106.572487,29.562619],[106.588199,29.571242]]]]}},{"type":"Feature","properties":{"adcode":500104,"name":"大渡口区","center":[106.48613,29.481002],"centroid":[106.458637,29.417574],"childrenNum":0,"level":"district","subFeatureIndex":3,"acroutes":[100000,500000]},"geometry":{"type":"MultiPolygon","coordinates":[[[[106.424298,29.426306],[106.430436,29.415512],[106.439372,29.417834],[106.451402,29.414127],[106.457884,29.41983],[106.454545,29.430623],[106.458767,29.448379],[106.451942,29.456401],[106.458915,29.472443],[106.47065,29.475048],[106.462696,29.485266],[106.454888,29.483556],[106.468097,29.498128],[106.480569,29.490273],[106.50291,29.494994],[106.523729,29.485673],[106.521765,29.479974],[106.509538,29.481765],[106.502075,29.47745],[106.498343,29.446913],[106.526528,29.411275],[106.534924,29.392005],[106.528197,29.388338],[106.509735,29.397506],[106.49196,29.39775],[106.469619,29.389153],[106.455036,29.380596],[106.441926,29.358916],[106.435542,29.352965],[106.411876,29.342245],[106.400877,29.340777],[106.39631,29.357286],[106.409568,29.368086],[106.405738,29.380963],[106.398225,29.386016],[106.392726,29.408831],[106.398471,29.413638],[106.393708,29.429361],[106.398422,29.440438],[106.406965,29.439054],[106.410108,29.439176],[106.416786,29.430175],[106.417522,29.420563],[106.423071,29.426591],[106.424298,29.426306]]]]}},{"type":"Feature","properties":{"adcode":500105,"name":"江北区","center":[106.532844,29.575352],"centroid":[106.707032,29.613285],"childrenNum":0,"level":"district","subFeatureIndex":4,"acroutes":[100000,500000]},"geometry":{"type":"MultiPolygon","coordinates":[[[[106.46191,29.608247],[106.478506,29.609751],[106.482434,29.613329],[106.492009,29.599424],[106.484251,29.589868],[106.497754,29.573113],[106.506543,29.573032],[106.527215,29.587062],[106.549851,29.581531],[106.562175,29.589543],[106.563305,29.606173],[106.579213,29.619061],[106.582798,29.633695],[106.595613,29.638572],[106.602929,29.634386],[106.61162,29.639873],[106.621834,29.635199],[106.648054,29.63719],[106.687237,29.623654],[106.70948,29.631337],[106.712671,29.646945],[106.723915,29.640604],[106.729906,29.646294],[106.73462,29.667263],[106.741297,29.662184],[106.744735,29.670433],[106.749988,29.663606],[106.747926,29.655154],[106.754162,29.651578],[106.782543,29.662428],[106.78323,29.669986],[106.793001,29.678599],[106.806701,29.671123],[106.809401,29.674699],[106.822118,29.67153],[106.819811,29.663647],[106.825703,29.659502],[106.833706,29.6632],[106.850548,29.659908],[106.866359,29.646985],[106.87775,29.659339],[106.893659,29.657064],[106.873086,29.615809],[106.861547,29.602067],[106.85045,29.575431],[106.843527,29.57657],[106.821087,29.591576],[106.801152,29.589055],[106.792461,29.604059],[106.766977,29.610401],[106.748614,29.607718],[106.740512,29.589665],[106.730937,29.583402],[106.709627,29.577627],[106.692343,29.564287],[106.683652,29.562131],[106.672654,29.566321],[106.65645,29.591861],[106.641916,29.586818],[106.633274,29.592023],[106.623307,29.614995],[106.602242,29.615565],[106.589672,29.609344],[106.580392,29.590275],[106.581177,29.578766],[106.588199,29.571242],[106.572487,29.562619],[106.560849,29.567175],[106.545382,29.566483],[106.530407,29.552369],[106.502321,29.557494],[106.494022,29.554809],[106.487688,29.555135],[106.463432,29.581165],[106.451942,29.586452],[106.46191,29.608247]]]]}},{"type":"Feature","properties":{"adcode":500106,"name":"沙坪坝区","center":[106.4542,29.541224],"centroid":[106.368212,29.624503],"childrenNum":0,"level":"district","subFeatureIndex":5,"acroutes":[100000,500000]},"geometry":{"type":"MultiPolygon","coordinates":[[[[106.305669,29.736641],[106.317797,29.738752],[106.327126,29.728519],[106.32968,29.732702],[106.365327,29.735504],[106.366604,29.746994],[106.380647,29.744233],[106.382758,29.747847],[106.39361,29.740457],[106.40947,29.738833],[106.417768,29.750202],[106.431418,29.749146],[106.442908,29.743624],[106.442073,29.730387],[106.433431,29.711706],[106.426508,29.680021],[106.429061,29.662956],[106.424396,29.65747],[106.448702,29.652187],[106.448603,29.661453],[106.457589,29.668889],[106.469766,29.657714],[106.468293,29.645969],[106.45209,29.632109],[106.453121,29.620321],[106.462843,29.616296],[106.46191,29.608247],[106.451942,29.586452],[106.463432,29.581165],[106.487688,29.555135],[106.494022,29.554809],[106.482778,29.548097],[106.483466,29.539025],[106.460093,29.532108],[106.461615,29.52808],[106.448063,29.509524],[106.44281,29.494139],[106.426999,29.498006],[106.424544,29.493325],[106.407506,29.492918],[106.411237,29.505536],[106.41384,29.540815],[106.403528,29.538903],[106.395083,29.547934],[106.390762,29.54053],[106.379272,29.536584],[106.379763,29.546958],[106.37392,29.546633],[106.356145,29.559772],[106.343526,29.554891],[106.33405,29.544029],[106.312789,29.544883],[106.293639,29.531254],[106.285488,29.532881],[106.264031,29.525354],[106.253425,29.532841],[106.251707,29.559406],[106.260005,29.592633],[106.265602,29.605889],[106.274882,29.612231],[106.282493,29.626744],[106.273017,29.631215],[106.279105,29.637841],[106.287649,29.635849],[106.2794,29.652553],[106.287698,29.663484],[106.284506,29.675268],[106.278712,29.67669],[106.280431,29.703298],[106.285636,29.697896],[106.297076,29.706467],[106.305669,29.736641]]]]}},{"type":"Feature","properties":{"adcode":500107,"name":"九龙坡区","center":[106.480989,29.523492],"centroid":[106.364435,29.428551],"childrenNum":0,"level":"district","subFeatureIndex":6,"acroutes":[100000,500000]},"geometry":{"type":"MultiPolygon","coordinates":[[[[106.253425,29.532841],[106.264031,29.525354],[106.285488,29.532881],[106.293639,29.531254],[106.312789,29.544883],[106.33405,29.544029],[106.343526,29.554891],[106.356145,29.559772],[106.37392,29.546633],[106.379763,29.546958],[106.379272,29.536584],[106.390762,29.54053],[106.395083,29.547934],[106.403528,29.538903],[106.41384,29.540815],[106.411237,29.505536],[106.407506,29.492918],[106.424544,29.493325],[106.426999,29.498006],[106.44281,29.494139],[106.448063,29.509524],[106.461615,29.52808],[106.460093,29.532108],[106.483466,29.539025],[106.482778,29.548097],[106.495594,29.546958],[106.500995,29.529789],[106.532272,29.52869],[106.534187,29.505454],[106.549851,29.495523],[106.552011,29.48726],[106.542044,29.472972],[106.521765,29.479974],[106.523729,29.485673],[106.50291,29.494994],[106.480569,29.490273],[106.468097,29.498128],[106.454888,29.483556],[106.462696,29.485266],[106.47065,29.475048],[106.458915,29.472443],[106.451942,29.456401],[106.458767,29.448379],[106.454545,29.430623],[106.457884,29.41983],[106.451402,29.414127],[106.439372,29.417834],[106.430436,29.415512],[106.424298,29.426306],[106.424249,29.426795],[106.423955,29.427731],[106.423709,29.427691],[106.423316,29.427202],[106.423071,29.426591],[106.417522,29.420563],[106.416786,29.430175],[106.410108,29.439176],[106.410599,29.440397],[106.408537,29.441375],[106.406965,29.439054],[106.398422,29.440438],[106.393708,29.429361],[106.398471,29.413638],[106.392726,29.408831],[106.398225,29.386016],[106.405738,29.380963],[106.409568,29.368086],[106.39631,29.357286],[106.400877,29.340777],[106.395525,29.339351],[106.385999,29.312401],[106.393217,29.294948],[106.384035,29.283039],[106.3559,29.27688],[106.339844,29.26456],[106.311905,29.254769],[106.298697,29.256483],[106.27994,29.286913],[106.289171,29.320679],[106.276945,29.322269],[106.274539,29.32871],[106.261232,29.335519],[106.267468,29.350234],[106.277829,29.352924],[106.275668,29.363236],[106.282248,29.368167],[106.284359,29.38516],[106.294425,29.384549],[106.295554,29.378763],[106.30891,29.379985],[106.314409,29.388827],[106.322314,29.38732],[106.331005,29.39555],[106.329041,29.413679],[106.317257,29.415227],[106.323002,29.420481],[106.320596,29.427976],[106.307339,29.426835],[106.30724,29.434248],[106.298549,29.440764],[106.285636,29.441986],[106.278565,29.449031],[106.262705,29.451596],[106.26025,29.466051],[106.267026,29.494994],[106.260594,29.494262],[106.261969,29.516524],[106.253278,29.519698],[106.253425,29.532841]]],[[[106.423955,29.427731],[106.424249,29.426795],[106.424298,29.426306],[106.423071,29.426591],[106.423316,29.427202],[106.423709,29.427691],[106.423955,29.427731]]],[[[106.410599,29.440397],[106.410108,29.439176],[106.406965,29.439054],[106.408537,29.441375],[106.410599,29.440397]]]]}},{"type":"Feature","properties":{"adcode":500108,"name":"南岸区","center":[106.560813,29.523992],"centroid":[106.660614,29.535521],"childrenNum":0,"level":"district","subFeatureIndex":7,"acroutes":[100000,500000]},"geometry":{"type":"MultiPolygon","coordinates":[[[[106.801152,29.589055],[106.787993,29.576326],[106.7712,29.549155],[106.764179,29.530928],[106.738548,29.486731],[106.732115,29.483923],[106.705257,29.482254],[106.703686,29.487993],[106.693276,29.48897],[106.69308,29.483353],[106.683358,29.476473],[106.688808,29.468453],[106.673341,29.458437],[106.65866,29.46772],[106.655321,29.462346],[106.642849,29.469959],[106.627971,29.465847],[106.606808,29.474315],[106.59581,29.463974],[106.586677,29.473094],[106.578772,29.469878],[106.56954,29.485144],[106.552011,29.48726],[106.549851,29.495523],[106.534187,29.505454],[106.532272,29.52869],[106.539441,29.540489],[106.556185,29.5411],[106.583731,29.547812],[106.589623,29.556518],[106.588199,29.571242],[106.581177,29.578766],[106.580392,29.590275],[106.589672,29.609344],[106.602242,29.615565],[106.623307,29.614995],[106.633274,29.592023],[106.641916,29.586818],[106.65645,29.591861],[106.672654,29.566321],[106.683652,29.562131],[106.692343,29.564287],[106.709627,29.577627],[106.730937,29.583402],[106.740512,29.589665],[106.748614,29.607718],[106.766977,29.610401],[106.792461,29.604059],[106.801152,29.589055]]]]}},{"type":"Feature","properties":{"adcode":500109,"name":"北碚区","center":[106.437868,29.82543],"centroid":[106.513996,29.861006],"childrenNum":0,"level":"district","subFeatureIndex":8,"acroutes":[100000,500000]},"geometry":{"type":"MultiPolygon","coordinates":[[[[106.648447,30.085559],[106.677024,30.063989],[106.678153,30.058121],[106.670739,30.034805],[106.678889,30.026141],[106.676385,30.015087],[106.677465,29.98601],[106.679724,29.97961],[106.674225,29.961948],[106.674274,29.932206],[106.687384,29.935489],[106.678497,29.92864],[106.679822,29.923615],[106.669118,29.912712],[106.678889,29.908212],[106.67506,29.897713],[106.668775,29.900348],[106.658512,29.869534],[106.64987,29.863857],[106.646581,29.849378],[106.634109,29.839481],[106.620262,29.840252],[106.622865,29.831327],[106.612848,29.832626],[106.598461,29.825607],[106.598805,29.816763],[106.587217,29.812665],[106.584909,29.799599],[106.5936,29.79964],[106.593011,29.808932],[106.601653,29.799843],[106.609018,29.799437],[106.592864,29.784705],[106.604746,29.769322],[106.588543,29.76161],[106.589181,29.754992],[106.57175,29.763355],[106.556529,29.754789],[106.5417,29.754871],[106.532076,29.749471],[106.530799,29.758687],[106.54116,29.763112],[106.532469,29.767333],[106.530996,29.775979],[106.515676,29.769688],[106.520144,29.764614],[106.524956,29.742609],[106.536741,29.730306],[106.536741,29.723321],[106.518377,29.71199],[106.512337,29.703461],[106.514743,29.694281],[106.506887,29.685425],[106.496134,29.68969],[106.487197,29.699399],[106.469373,29.697165],[106.457147,29.687415],[106.457589,29.668889],[106.448603,29.661453],[106.448702,29.652187],[106.424396,29.65747],[106.429061,29.662956],[106.426508,29.680021],[106.433431,29.711706],[106.442073,29.730387],[106.442908,29.743624],[106.431418,29.749146],[106.417768,29.750202],[106.40947,29.738833],[106.39361,29.740457],[106.382758,29.747847],[106.380647,29.744233],[106.366604,29.746994],[106.365327,29.735504],[106.32968,29.732702],[106.327126,29.728519],[106.317797,29.738752],[106.305669,29.736641],[106.31598,29.764898],[106.324279,29.774843],[106.334197,29.771311],[106.344214,29.779307],[106.372889,29.814207],[106.351284,29.812422],[106.34225,29.816804],[106.345883,29.836114],[106.337585,29.834532],[106.342446,29.842523],[106.330956,29.848323],[106.336407,29.860247],[106.329385,29.859639],[106.325653,29.872737],[106.314409,29.884861],[106.339598,29.901767],[106.383053,29.92787],[106.390909,29.921304],[106.390958,29.906672],[106.396507,29.898118],[106.409077,29.889443],[106.423611,29.884334],[106.429601,29.892362],[106.423414,29.904564],[106.433235,29.901889],[106.443841,29.906834],[106.455281,29.926776],[106.46191,29.92402],[106.44281,29.883564],[106.452777,29.878212],[106.458522,29.887456],[106.462892,29.88478],[106.452581,29.869128],[106.465347,29.870832],[106.466967,29.882996],[106.477131,29.891875],[106.479046,29.908172],[106.488916,29.908415],[106.501338,29.922115],[106.505659,29.931234],[106.519506,29.927546],[106.526773,29.945822],[106.544941,29.935246],[106.55697,29.961259],[106.568706,29.991154],[106.572192,30.012698],[106.582209,30.022214],[106.596546,30.030432],[106.598265,30.039582],[106.591587,30.047071],[106.629101,30.079448],[106.648447,30.085559]]]]}},{"type":"Feature","properties":{"adcode":500110,"name":"綦江区","center":[106.651417,29.028091],"centroid":[106.722706,28.87864],"childrenNum":0,"level":"district","subFeatureIndex":9,"acroutes":[100000,500000]},"geometry":{"type":"MultiPolygon","coordinates":[[[[107.057462,28.894785],[107.052552,28.8911],[107.045579,28.874926],[107.058689,28.868947],[107.04062,28.863869],[107.036594,28.88115],[107.016118,28.882501],[107.019114,28.860675],[107.005169,28.859159],[106.997853,28.853507],[106.983368,28.851173],[106.98926,28.829585],[106.980814,28.812951],[106.981355,28.804347],[106.988671,28.790331],[106.987885,28.774675],[106.967803,28.774101],[106.951746,28.766969],[106.950224,28.777626],[106.94227,28.782135],[106.938391,28.792381],[106.923071,28.810042],[106.905345,28.79611],[106.897882,28.80115],[106.886392,28.794716],[106.874215,28.779716],[106.864591,28.77447],[106.862333,28.780577],[106.845393,28.781028],[106.838469,28.765985],[106.833363,28.768772],[106.824033,28.756146],[106.828354,28.737696],[106.852905,28.724452],[106.862529,28.707555],[106.853936,28.706324],[106.854722,28.697095],[106.862136,28.690983],[106.883201,28.69246],[106.871515,28.658817],[106.866359,28.624507],[106.856146,28.622496],[106.829287,28.622742],[106.833264,28.613219],[106.827078,28.598562],[106.807732,28.589447],[106.800514,28.602134],[106.793443,28.606486],[106.792559,28.616256],[106.780333,28.625],[106.773901,28.611946],[106.759023,28.611084],[106.758581,28.588133],[106.766634,28.580166],[106.780922,28.574869],[106.779891,28.56378],[106.765161,28.558153],[106.754358,28.558318],[106.73732,28.553307],[106.728187,28.54201],[106.723965,28.529891],[106.726027,28.518551],[106.744833,28.489867],[106.746649,28.466643],[106.732901,28.46356],[106.725241,28.454433],[106.716207,28.456365],[106.708547,28.450486],[106.693276,28.45653],[106.696713,28.4784],[106.688268,28.484647],[106.678349,28.481359],[106.661066,28.491881],[106.649772,28.47955],[106.631114,28.490237],[106.632734,28.503553],[106.610147,28.497922],[106.593404,28.510169],[106.584958,28.50684],[106.591489,28.499073],[106.589181,28.488387],[106.568018,28.484031],[106.562814,28.497388],[106.56792,28.505278],[106.560309,28.513374],[106.568657,28.523646],[106.584615,28.523276],[106.600622,28.541353],[106.615254,28.549651],[106.616825,28.562795],[106.607054,28.594292],[106.614665,28.609442],[106.629641,28.604762],[106.636466,28.613219],[106.636809,28.623235],[106.62861,28.63444],[106.618887,28.637272],[106.620213,28.645727],[106.641179,28.644167],[106.651393,28.64942],[106.643684,28.664316],[106.635238,28.658448],[106.626891,28.659269],[106.61766,28.667311],[106.614272,28.680276],[106.619182,28.689178],[106.606072,28.685035],[106.598068,28.691886],[106.587315,28.691517],[106.582356,28.702223],[106.576857,28.702387],[106.56026,28.72072],[106.559229,28.731546],[106.563894,28.746184],[106.561831,28.756064],[106.547985,28.769838],[106.53404,28.770904],[106.533795,28.778733],[106.523041,28.78111],[106.521126,28.794266],[106.508753,28.795864],[106.490585,28.806518],[106.476199,28.826759],[106.47448,28.833027],[106.461861,28.831019],[106.455723,28.836427],[106.446443,28.863337],[106.43623,28.870217],[106.415264,28.876236],[106.411826,28.891182],[106.410992,28.922294],[106.402792,28.940956],[106.408733,28.95401],[106.399846,28.962521],[106.405738,28.979622],[106.397587,28.993693],[106.391842,29.022443],[106.385803,29.029476],[106.398765,29.027023],[106.404314,29.035364],[106.419732,29.047834],[106.427834,29.047588],[106.442515,29.039739],[106.44281,29.050573],[106.463874,29.042069],[106.444135,29.038103],[106.454447,29.0177],[106.475413,29.012179],[106.478113,29.024774],[106.489849,29.042969],[106.484497,29.065738],[106.49034,29.083476],[106.501044,29.0771],[106.498,29.071624],[106.504825,29.063285],[106.514547,29.059852],[106.524956,29.044195],[106.526331,29.036141],[106.544646,29.036386],[106.551815,29.024692],[106.549703,29.00535],[106.557118,29.006004],[106.562666,29.016555],[106.57833,29.022443],[106.585204,29.008294],[106.592471,29.005963],[106.608773,29.014756],[106.59414,29.019131],[106.589525,29.030008],[106.585695,29.053148],[106.589672,29.056663],[106.583436,29.071256],[106.584418,29.079634],[106.578084,29.09312],[106.581177,29.110076],[106.574205,29.116777],[106.574451,29.128215],[106.585007,29.131442],[106.588395,29.12654],[106.604599,29.126908],[106.623896,29.160154],[106.642603,29.173874],[106.656205,29.175385],[106.65316,29.16142],[106.665092,29.158439],[106.668234,29.168158],[106.676631,29.176855],[106.680313,29.173548],[106.686746,29.188042],[106.699561,29.177181],[106.712377,29.179182],[106.729464,29.162604],[106.748908,29.176691],[106.757894,29.170159],[106.767665,29.169587],[106.768843,29.161298],[106.776405,29.163666],[106.788386,29.177181],[106.793689,29.169709],[106.800121,29.179958],[106.809941,29.178161],[106.812936,29.165014],[106.821235,29.149577],[106.849468,29.1575],[106.858012,29.149046],[106.868028,29.151456],[106.885263,29.141817],[106.891695,29.131769],[106.905542,29.11596],[106.911483,29.114775],[106.921844,29.100475],[106.910256,29.068844],[106.906131,29.051758],[106.915362,29.054538],[106.920567,29.045749],[106.926361,29.047793],[106.938685,29.041906],[106.950421,29.071787],[106.954545,29.059239],[106.96358,29.058217],[106.975266,29.050532],[106.977034,29.056009],[106.988671,29.043459],[106.981158,29.039861],[106.979832,29.031766],[106.990045,29.021094],[107.003892,29.016023],[107.01715,28.998724],[107.024564,28.995983],[107.02967,28.985717],[107.022256,28.974058],[107.013614,28.969599],[107.015971,28.952087],[107.02913,28.941284],[107.043124,28.945785],[107.051275,28.942143],[107.057315,28.932771],[107.053288,28.919183],[107.04337,28.919879],[107.057462,28.894785]]]]}},{"type":"Feature","properties":{"adcode":500111,"name":"大足区","center":[105.715319,29.700498],"centroid":[105.742721,29.65],"childrenNum":0,"level":"district","subFeatureIndex":10,"acroutes":[100000,500000]},"geometry":{"type":"MultiPolygon","coordinates":[[[[105.482777,29.679127],[105.481353,29.692737],[105.474234,29.697124],[105.473448,29.707523],[105.482188,29.718082],[105.49029,29.720275],[105.49903,29.709553],[105.520095,29.703583],[105.527951,29.692412],[105.538851,29.69489],[105.52962,29.707604],[105.550341,29.722022],[105.542829,29.726529],[105.549212,29.737615],[105.557952,29.726651],[105.56571,29.724012],[105.564335,29.737818],[105.574941,29.744477],[105.576218,29.757388],[105.572289,29.768713],[105.587511,29.784868],[105.580293,29.790753],[105.588444,29.823133],[105.604107,29.816844],[105.605875,29.827879],[105.617659,29.845728],[105.641473,29.836844],[105.656204,29.844389],[105.661801,29.84082],[105.677759,29.854286],[105.690428,29.852298],[105.695436,29.843497],[105.708939,29.840576],[105.720625,29.849662],[105.719397,29.856557],[105.733146,29.860693],[105.738105,29.856516],[105.738252,29.845646],[105.725339,29.832747],[105.735846,29.819319],[105.72308,29.809825],[105.714684,29.79684],[105.713898,29.789129],[105.721411,29.78779],[105.746354,29.801466],[105.763883,29.793512],[105.77719,29.801831],[105.778368,29.811367],[105.789269,29.794121],[105.808418,29.783569],[105.806945,29.771636],[105.820939,29.773381],[105.822461,29.762827],[105.83076,29.757997],[105.868911,29.756982],[105.878584,29.769525],[105.888012,29.77468],[105.893904,29.785882],[105.888208,29.790347],[105.893806,29.802967],[105.906523,29.795582],[105.904706,29.785598],[105.922334,29.788236],[105.944233,29.775979],[105.957638,29.781662],[105.970601,29.779876],[105.976542,29.784746],[105.991223,29.781174],[105.998588,29.768916],[105.997508,29.756819],[106.001289,29.748375],[106.010913,29.747279],[106.014448,29.752841],[106.028344,29.749552],[106.025987,29.734854],[106.036838,29.726692],[106.031732,29.722184],[106.005659,29.682581],[105.997361,29.6645],[105.982532,29.671936],[105.969815,29.646294],[105.953513,29.630199],[105.946099,29.626988],[105.938243,29.613166],[105.924347,29.595805],[105.890467,29.570429],[105.873969,29.552572],[105.876817,29.541791],[105.868617,29.537316],[105.855016,29.540042],[105.834933,29.527917],[105.825899,29.51396],[105.817895,29.490395],[105.802674,29.437139],[105.770561,29.408302],[105.773507,29.394857],[105.767762,29.379578],[105.747582,29.372487],[105.735159,29.38459],[105.728678,29.384875],[105.741002,29.397628],[105.722835,29.397872],[105.73403,29.417386],[105.727646,29.422844],[105.737663,29.435592],[105.735061,29.445162],[105.724013,29.449967],[105.725486,29.454121],[105.714929,29.464259],[105.687236,29.446506],[105.662194,29.460025],[105.657431,29.468168],[105.658119,29.481317],[105.65311,29.485022],[105.662636,29.499431],[105.648397,29.494139],[105.641179,29.505861],[105.639509,29.489052],[105.646236,29.486121],[105.637152,29.473623],[105.629738,29.478386],[105.631506,29.485917],[105.620556,29.494017],[105.619967,29.504803],[105.607642,29.508262],[105.595711,29.504152],[105.593059,29.517744],[105.583239,29.515588],[105.590015,29.524011],[105.59522,29.539432],[105.592175,29.549928],[105.599983,29.553019],[105.602241,29.569941],[105.594483,29.575553],[105.590899,29.590397],[105.580047,29.591617],[105.561045,29.588892],[105.549703,29.572096],[105.542534,29.57413],[105.542681,29.586412],[105.536642,29.59121],[105.517738,29.586493],[105.50561,29.609344],[105.509243,29.637962],[105.496673,29.648652],[105.487688,29.663159],[105.490683,29.675186],[105.482777,29.679127]]]]}},{"type":"Feature","properties":{"adcode":500112,"name":"渝北区","center":[106.512851,29.601451],"centroid":[106.746924,29.810209],"childrenNum":0,"level":"district","subFeatureIndex":11,"acroutes":[100000,500000]},"geometry":{"type":"MultiPolygon","coordinates":[[[[106.893659,29.657064],[106.87775,29.659339],[106.866359,29.646985],[106.850548,29.659908],[106.833706,29.6632],[106.825703,29.659502],[106.819811,29.663647],[106.822118,29.67153],[106.809401,29.674699],[106.806701,29.671123],[106.793001,29.678599],[106.78323,29.669986],[106.782543,29.662428],[106.754162,29.651578],[106.747926,29.655154],[106.749988,29.663606],[106.744735,29.670433],[106.741297,29.662184],[106.73462,29.667263],[106.729906,29.646294],[106.723915,29.640604],[106.712671,29.646945],[106.70948,29.631337],[106.687237,29.623654],[106.648054,29.63719],[106.621834,29.635199],[106.61162,29.639873],[106.602929,29.634386],[106.595613,29.638572],[106.582798,29.633695],[106.579213,29.619061],[106.563305,29.606173],[106.562175,29.589543],[106.549851,29.581531],[106.527215,29.587062],[106.506543,29.573032],[106.497754,29.573113],[106.484251,29.589868],[106.492009,29.599424],[106.482434,29.613329],[106.478506,29.609751],[106.46191,29.608247],[106.462843,29.616296],[106.453121,29.620321],[106.45209,29.632109],[106.468293,29.645969],[106.469766,29.657714],[106.457589,29.668889],[106.457147,29.687415],[106.469373,29.697165],[106.487197,29.699399],[106.496134,29.68969],[106.506887,29.685425],[106.514743,29.694281],[106.512337,29.703461],[106.518377,29.71199],[106.536741,29.723321],[106.536741,29.730306],[106.524956,29.742609],[106.520144,29.764614],[106.515676,29.769688],[106.530996,29.775979],[106.532469,29.767333],[106.54116,29.763112],[106.530799,29.758687],[106.532076,29.749471],[106.5417,29.754871],[106.556529,29.754789],[106.57175,29.763355],[106.589181,29.754992],[106.588543,29.76161],[106.604746,29.769322],[106.592864,29.784705],[106.609018,29.799437],[106.601653,29.799843],[106.593011,29.808932],[106.5936,29.79964],[106.584909,29.799599],[106.587217,29.812665],[106.598805,29.816763],[106.598461,29.825607],[106.612848,29.832626],[106.622865,29.831327],[106.620262,29.840252],[106.634109,29.839481],[106.646581,29.849378],[106.64987,29.863857],[106.658512,29.869534],[106.668775,29.900348],[106.67506,29.897713],[106.678889,29.908212],[106.669118,29.912712],[106.679822,29.923615],[106.678497,29.92864],[106.687384,29.935489],[106.674274,29.932206],[106.674225,29.961948],[106.679724,29.97961],[106.677465,29.98601],[106.676385,30.015087],[106.678889,30.026141],[106.670739,30.034805],[106.678153,30.058121],[106.677024,30.063989],[106.648447,30.085559],[106.656352,30.086165],[106.668382,30.101742],[106.673881,30.12213],[106.688857,30.124031],[106.689643,30.117802],[106.703195,30.118126],[106.698726,30.098708],[106.698825,30.076535],[106.72583,30.057068],[106.726076,30.034319],[106.73241,30.026829],[106.742132,30.025938],[106.759416,30.018893],[106.764228,30.024602],[106.768598,30.017274],[106.785587,30.017233],[106.797764,30.023145],[106.799974,30.030554],[106.812495,30.028975],[106.830171,30.033955],[106.836996,30.049742],[106.842054,30.049135],[106.861449,30.028165],[106.856195,30.013872],[106.866506,30.012293],[106.864444,29.984916],[106.868323,29.978962],[106.877947,29.98601],[106.88708,29.981392],[106.889928,29.987954],[106.896654,29.978597],[106.909077,29.971873],[106.931467,29.975397],[106.935248,29.964054],[106.942515,29.964824],[106.946934,29.953683],[106.965691,29.951981],[106.970012,29.938326],[106.98489,29.934314],[106.974529,29.916603],[106.962058,29.901929],[106.952679,29.882145],[106.945461,29.875454],[106.944528,29.855908],[106.937114,29.851893],[106.936574,29.842483],[106.942859,29.839765],[106.944234,29.812949],[106.939913,29.804347],[106.952237,29.792214],[106.945167,29.784178],[106.952532,29.784259],[106.958522,29.769485],[106.96466,29.774518],[106.972222,29.763924],[106.945609,29.724743],[106.942564,29.705857],[106.930534,29.689],[106.913742,29.684043],[106.906082,29.678152],[106.893659,29.657064]]]]}},{"type":"Feature","properties":{"adcode":500113,"name":"巴南区","center":[106.519423,29.381919],"centroid":[106.751731,29.371851],"childrenNum":0,"level":"district","subFeatureIndex":12,"acroutes":[100000,500000]},"geometry":{"type":"MultiPolygon","coordinates":[[[[106.552011,29.48726],[106.56954,29.485144],[106.578772,29.469878],[106.586677,29.473094],[106.59581,29.463974],[106.606808,29.474315],[106.627971,29.465847],[106.642849,29.469959],[106.655321,29.462346],[106.65866,29.46772],[106.673341,29.458437],[106.688808,29.468453],[106.683358,29.476473],[106.69308,29.483353],[106.693276,29.48897],[106.703686,29.487993],[106.705257,29.482254],[106.732115,29.483923],[106.738548,29.486731],[106.764179,29.530928],[106.7712,29.549155],[106.787993,29.576326],[106.801152,29.589055],[106.821087,29.591576],[106.843527,29.57657],[106.85045,29.575431],[106.861547,29.602067],[106.873086,29.615809],[106.893659,29.657064],[106.906082,29.678152],[106.913742,29.684043],[106.930534,29.689],[106.942564,29.705857],[106.945609,29.724743],[106.972222,29.763924],[106.988131,29.769322],[106.993483,29.75824],[106.988818,29.748781],[106.990144,29.738062],[106.998638,29.732539],[107.002223,29.714468],[106.993581,29.679331],[106.975315,29.634142],[106.966624,29.599546],[106.958768,29.582508],[106.953268,29.551311],[106.953612,29.535811],[106.947278,29.510826],[106.945952,29.497029],[106.935297,29.464463],[106.933039,29.448542],[106.936574,29.439339],[106.932253,29.399746],[106.922531,29.403046],[106.919978,29.329893],[106.922433,29.310322],[106.920616,29.302411],[106.92312,29.280673],[106.933039,29.279653],[106.936132,29.256931],[106.954692,29.252199],[106.95754,29.228981],[106.968392,29.215228],[106.961812,29.202738],[106.95263,29.197104],[106.955527,29.190695],[106.945069,29.183142],[106.919045,29.180366],[106.911385,29.197472],[106.895574,29.190491],[106.896409,29.180039],[106.907751,29.179672],[106.909175,29.160562],[106.899355,29.155621],[106.891744,29.14149],[106.891695,29.131769],[106.885263,29.141817],[106.868028,29.151456],[106.858012,29.149046],[106.849468,29.1575],[106.821235,29.149577],[106.812936,29.165014],[106.809941,29.178161],[106.800121,29.179958],[106.793689,29.169709],[106.788386,29.177181],[106.776405,29.163666],[106.768843,29.161298],[106.767665,29.169587],[106.757894,29.170159],[106.748908,29.176691],[106.729464,29.162604],[106.712377,29.179182],[106.699561,29.177181],[106.686746,29.188042],[106.680313,29.173548],[106.676631,29.176855],[106.668234,29.168158],[106.665092,29.158439],[106.65316,29.16142],[106.656205,29.175385],[106.642603,29.173874],[106.623896,29.160154],[106.604599,29.126908],[106.588395,29.12654],[106.585007,29.131442],[106.574451,29.128215],[106.560997,29.133239],[106.550047,29.145493],[106.549998,29.153498],[106.562372,29.161379],[106.545972,29.183265],[106.541896,29.192369],[106.547788,29.212534],[106.539343,29.213717],[106.535906,29.221962],[106.521225,29.224614],[106.515774,29.232042],[106.519653,29.251791],[106.514056,29.254688],[106.511208,29.268069],[106.505021,29.268966],[106.508655,29.278674],[106.486363,29.294336],[106.473645,29.335722],[106.474431,29.35696],[106.478163,29.36022],[106.460241,29.360872],[106.454496,29.35427],[106.440404,29.350153],[106.435542,29.352965],[106.441926,29.358916],[106.455036,29.380596],[106.469619,29.389153],[106.49196,29.39775],[106.509735,29.397506],[106.528197,29.388338],[106.534924,29.392005],[106.526528,29.411275],[106.498343,29.446913],[106.502075,29.47745],[106.509538,29.481765],[106.521765,29.479974],[106.542044,29.472972],[106.552011,29.48726]]]]}},{"type":"Feature","properties":{"adcode":500114,"name":"黔江区","center":[108.782577,29.527548],"centroid":[108.708597,29.435532],"childrenNum":0,"level":"district","subFeatureIndex":13,"acroutes":[100000,500000]},"geometry":{"type":"MultiPolygon","coordinates":[[[[108.55869,29.13953],[108.570671,29.152313],[108.574403,29.164115],[108.556775,29.184857],[108.548919,29.205064],[108.555597,29.218738],[108.569247,29.224941],[108.568314,29.236245],[108.575778,29.252362],[108.571948,29.265703],[108.583192,29.278063],[108.584272,29.285812],[108.573568,29.302411],[108.560409,29.306081],[108.549459,29.315378],[108.549705,29.328303],[108.561538,29.352598],[108.550196,29.371754],[108.547201,29.381697],[108.552995,29.390539],[108.555843,29.412701],[108.576367,29.41706],[108.59257,29.442963],[108.581228,29.464911],[108.585549,29.477328],[108.561686,29.491657],[108.539688,29.491697],[108.50954,29.50285],[108.501242,29.49996],[108.494711,29.515099],[108.506054,29.536868],[108.515334,29.543948],[108.536251,29.540001],[108.547643,29.547406],[108.548379,29.557575],[108.534532,29.572177],[108.534974,29.588851],[108.516709,29.602148],[108.512633,29.614467],[108.507036,29.611093],[108.499965,29.622069],[108.487199,29.624102],[108.489997,29.642515],[108.504139,29.666288],[108.503549,29.67669],[108.52373,29.683109],[108.526676,29.696759],[108.506446,29.708172],[108.515285,29.71861],[108.504188,29.729413],[108.51666,29.735666],[108.520244,29.730347],[108.547004,29.742569],[108.548526,29.749512],[108.540081,29.756779],[108.522503,29.763761],[108.534434,29.787506],[108.557463,29.819035],[108.56581,29.820861],[108.579902,29.831206],[108.577349,29.844673],[108.588151,29.84808],[108.587955,29.85388],[108.601409,29.8656],[108.60843,29.862964],[108.622915,29.867304],[108.632686,29.86487],[108.633226,29.855908],[108.662491,29.852582],[108.657728,29.84808],[108.666124,29.842726],[108.670347,29.819076],[108.656942,29.816682],[108.670986,29.811813],[108.680658,29.800167],[108.678449,29.777887],[108.681788,29.770459],[108.67732,29.761447],[108.677565,29.748537],[108.686649,29.740051],[108.681051,29.721413],[108.69313,29.704476],[108.684783,29.693509],[108.691166,29.68969],[108.710365,29.699196],[108.718221,29.691924],[108.710905,29.679168],[108.73359,29.671489],[108.740611,29.665719],[108.743017,29.655926],[108.752641,29.649017],[108.763002,29.653366],[108.765899,29.661046],[108.774541,29.65174],[108.783281,29.653772],[108.773018,29.661534],[108.775964,29.67539],[108.765113,29.682256],[108.758141,29.678721],[108.752592,29.689365],[108.760645,29.693549],[108.786276,29.691518],[108.784655,29.677177],[108.794132,29.671205],[108.79752,29.660071],[108.792266,29.647351],[108.780089,29.645522],[108.785637,29.633857],[108.804394,29.640564],[108.813625,29.63154],[108.819812,29.632435],[108.816473,29.644018],[108.828061,29.671286],[108.835377,29.668442],[108.827325,29.654382],[108.83302,29.651293],[108.84451,29.658364],[108.855754,29.636377],[108.869699,29.643002],[108.879618,29.639222],[108.887916,29.628573],[108.885854,29.621134],[108.868324,29.598001],[108.885903,29.588445],[108.897589,29.596496],[108.901271,29.604791],[108.909177,29.593284],[108.899995,29.584866],[108.913056,29.574455],[108.902106,29.563026],[108.886934,29.553101],[108.878439,29.53935],[108.886983,29.530562],[108.888652,29.507041],[108.885952,29.498047],[108.869846,29.485917],[108.866557,29.471058],[108.873726,29.462753],[108.873971,29.449397],[108.886541,29.440601],[108.89808,29.441945],[108.90957,29.436814],[108.921256,29.436895],[108.932009,29.431682],[108.943646,29.410746],[108.93412,29.399461],[108.931027,29.369634],[108.916591,29.334622],[108.919734,29.326305],[108.908784,29.312972],[108.903432,29.296416],[108.915462,29.293561],[108.919783,29.283732],[108.93903,29.274065],[108.954252,29.272066],[108.937607,29.244283],[108.925871,29.23347],[108.925135,29.222615],[108.915265,29.215513],[108.896607,29.209024],[108.882416,29.1791],[108.854625,29.133484],[108.855656,29.122659],[108.847702,29.105214],[108.833266,29.109995],[108.832087,29.117267],[108.812054,29.122047],[108.803756,29.129195],[108.784852,29.123272],[108.775768,29.124008],[108.774295,29.110485],[108.749008,29.10881],[108.747584,29.092384],[108.726912,29.080492],[108.700397,29.094427],[108.698777,29.101619],[108.686698,29.109341],[108.681984,29.105623],[108.668678,29.108156],[108.66416,29.103744],[108.669856,29.095939],[108.662835,29.090382],[108.667205,29.078776],[108.661313,29.071624],[108.646533,29.081841],[108.628906,29.072891],[108.622179,29.073422],[108.625665,29.08699],[108.614568,29.095408],[108.615206,29.109709],[108.60789,29.109014],[108.599396,29.086908],[108.587169,29.095081],[108.598266,29.105705],[108.570769,29.124416],[108.55869,29.13953]]]]}},{"type":"Feature","properties":{"adcode":500115,"name":"长寿区","center":[107.074854,29.833671],"centroid":[107.140012,29.954647],"childrenNum":0,"level":"district","subFeatureIndex":14,"acroutes":[100000,500000]},"geometry":{"type":"MultiPolygon","coordinates":[[[[107.053779,30.043751],[107.054221,30.040837],[107.0554,30.040553],[107.058395,30.043063],[107.075286,30.051118],[107.084517,30.063868],[107.073911,30.080986],[107.080147,30.094177],[107.093797,30.095391],[107.103077,30.090131],[107.111032,30.104251],[107.106563,30.113838],[107.13131,30.121524],[107.136466,30.134426],[107.16848,30.160306],[107.187335,30.181248],[107.221068,30.213743],[107.228335,30.223805],[107.256568,30.205903],[107.277044,30.181086],[107.288484,30.171303],[107.269482,30.145992],[107.274098,30.135841],[107.291381,30.136327],[107.295555,30.122454],[107.286766,30.107892],[107.29089,30.097939],[107.28328,30.091021],[107.271741,30.09446],[107.269089,30.081148],[107.259072,30.075887],[107.247534,30.07528],[107.26521,30.062006],[107.266045,30.055045],[107.279204,30.04873],[107.27724,30.043144],[107.294867,30.044359],[107.307879,30.035493],[107.31166,30.02023],[107.304688,30.0161],[107.31112,30.008203],[107.294818,30.002696],[107.29418,29.997917],[107.307094,29.992328],[107.325556,29.973007],[107.335573,29.97398],[107.347995,29.980501],[107.362824,29.979853],[107.374068,29.973372],[107.436329,30.033833],[107.46029,30.01533],[107.451501,30.008203],[107.453171,30.001441],[107.448064,29.999092],[107.421156,29.967944],[107.415755,29.970577],[107.383545,29.926614],[107.387129,29.921993],[107.377505,29.910523],[107.379666,29.899132],[107.369354,29.906794],[107.360762,29.897227],[107.342005,29.892929],[107.335818,29.884415],[107.337193,29.873062],[107.323445,29.852947],[107.313084,29.845809],[107.299827,29.847472],[107.29801,29.839603],[107.272379,29.837291],[107.270857,29.851447],[107.265161,29.847472],[107.240512,29.841347],[107.229317,29.84374],[107.210806,29.840292],[107.206583,29.824958],[107.212279,29.816276],[107.198039,29.809622],[107.186992,29.79473],[107.153111,29.784827],[107.111572,29.76299],[107.102635,29.754546],[107.086726,29.761813],[107.070277,29.758524],[107.070032,29.751217],[107.041406,29.734407],[107.027166,29.717189],[107.009195,29.712762],[107.002223,29.714468],[106.998638,29.732539],[106.990144,29.738062],[106.988818,29.748781],[106.993483,29.75824],[106.988131,29.769322],[106.972222,29.763924],[106.96466,29.774518],[106.958522,29.769485],[106.952532,29.784259],[106.945167,29.784178],[106.952237,29.792214],[106.939913,29.804347],[106.944234,29.812949],[106.942859,29.839765],[106.936574,29.842483],[106.937114,29.851893],[106.944528,29.855908],[106.945461,29.875454],[106.952679,29.882145],[106.962058,29.901929],[106.974529,29.916603],[106.98489,29.934314],[106.970012,29.938326],[106.965691,29.951981],[106.946934,29.953683],[106.942515,29.964824],[106.935248,29.964054],[106.931467,29.975397],[106.909077,29.971873],[106.896654,29.978597],[106.889928,29.987954],[106.88708,29.981392],[106.877947,29.98601],[106.868323,29.978962],[106.864444,29.984916],[106.866506,30.012293],[106.856195,30.013872],[106.861449,30.028165],[106.88433,30.0344],[106.913594,30.025574],[106.914871,30.033955],[106.941877,30.042739],[106.948604,30.040149],[106.956755,30.06059],[106.954889,30.066094],[106.966477,30.079894],[106.985332,30.084061],[106.998295,30.059456],[107.005316,30.052495],[107.014351,30.051604],[107.020636,30.036829],[107.042682,30.035007],[107.037821,30.047273],[107.042486,30.055085],[107.050588,30.053426],[107.053779,30.043751]]],[[[107.058395,30.043063],[107.0554,30.040553],[107.054221,30.040837],[107.053779,30.043751],[107.058395,30.043063]]]]}},{"type":"Feature","properties":{"adcode":500116,"name":"江津区","center":[106.253156,29.283387],"centroid":[106.26321,29.029607],"childrenNum":0,"level":"district","subFeatureIndex":15,"acroutes":[100000,500000]},"geometry":{"type":"MultiPolygon","coordinates":[[[[106.461861,28.831019],[106.46844,28.826472],[106.453514,28.816967],[106.451402,28.808116],[106.46029,28.804961],[106.462794,28.797216],[106.451648,28.79279],[106.454201,28.776068],[106.462057,28.76123],[106.493826,28.73946],[106.499325,28.717398],[106.510324,28.715183],[106.515774,28.688194],[106.529719,28.673137],[106.520144,28.6621],[106.502762,28.661321],[106.506641,28.635343],[106.501338,28.628735],[106.501093,28.617898],[106.494955,28.615148],[106.494464,28.599999],[106.513319,28.577046],[106.524711,28.577826],[106.508802,28.564889],[106.498785,28.585874],[106.473842,28.598973],[106.466967,28.586408],[106.478899,28.574992],[106.488867,28.557496],[106.504726,28.54468],[106.501191,28.534533],[106.493384,28.538313],[106.483858,28.530589],[106.471632,28.532603],[106.466918,28.541846],[106.453072,28.544721],[106.454054,28.549774],[106.439471,28.559427],[106.43402,28.556675],[106.423218,28.562671],[106.412956,28.563123],[106.399109,28.571173],[106.385704,28.560823],[106.389829,28.553266],[106.373576,28.537656],[106.378487,28.533835],[106.374313,28.525618],[106.363903,28.526892],[106.349811,28.540121],[106.34225,28.532603],[106.338371,28.546858],[106.332037,28.553224],[106.344803,28.562014],[106.339304,28.566368],[106.345196,28.573021],[106.34662,28.58378],[106.340187,28.59889],[106.332184,28.603366],[106.324524,28.616749],[106.329778,28.63403],[106.310776,28.639981],[106.304049,28.649872],[106.311168,28.660048],[106.321087,28.665465],[106.30616,28.675763],[106.307191,28.687907],[106.303509,28.709113],[106.287698,28.732366],[106.273213,28.739788],[106.267665,28.779348],[106.252394,28.785823],[106.24439,28.814631],[106.254358,28.819179],[106.246698,28.826472],[106.260201,28.833641],[106.265062,28.846708],[106.255586,28.857398],[106.253229,28.865753],[106.242181,28.86821],[106.228089,28.881764],[106.225585,28.890568],[106.215371,28.891714],[106.206926,28.904528],[106.191606,28.908663],[106.173684,28.92082],[106.162538,28.908908],[106.149183,28.901949],[106.134354,28.90506],[106.10126,28.898961],[106.087708,28.904201],[106.085645,28.9103],[106.070522,28.919797],[106.062813,28.918201],[106.051913,28.906862],[106.042534,28.910587],[106.03949,28.918651],[106.042338,28.929538],[106.04003,28.940465],[106.047346,28.943575],[106.043811,28.954133],[106.036102,28.955729],[106.02417,28.949714],[106.017443,28.952905],[106.001535,28.973608],[105.984103,28.979008],[105.974627,28.973567],[105.985969,28.970131],[105.988424,28.964198],[105.9761,28.959166],[105.971877,28.965957],[105.961566,28.960107],[105.95808,28.952496],[105.934511,28.933876],[105.920321,28.930643],[105.909764,28.920452],[105.915607,28.907476],[105.909567,28.900189],[105.889338,28.909523],[105.888061,28.926837],[105.875049,28.933958],[105.852708,28.927369],[105.844262,28.93093],[105.830514,28.944271],[105.824769,28.953396],[105.826782,28.964403],[105.851677,28.976185],[105.858011,28.98678],[105.857323,29.012997],[105.864492,29.026001],[105.882905,29.029722],[105.885459,29.037204],[105.897145,29.049632],[105.919928,29.056132],[105.922285,29.078858],[105.913888,29.08086],[105.909518,29.093855],[105.917473,29.098881],[105.918848,29.109464],[105.93186,29.115102],[105.937899,29.127561],[105.942858,29.128338],[105.958276,29.147943],[105.954299,29.151251],[105.965347,29.15603],[105.96736,29.177671],[105.982287,29.193512],[105.996673,29.213595],[106.004677,29.215513],[106.016363,29.242529],[106.033156,29.253953],[106.031486,29.261868],[106.036789,29.284915],[106.038164,29.313339],[106.043418,29.32549],[106.072928,29.321005],[106.086382,29.30706],[106.084663,29.300331],[106.096104,29.291359],[106.110442,29.294907],[106.113289,29.284018],[106.120065,29.278878],[106.136416,29.294826],[106.152276,29.293684],[106.156106,29.301962],[106.17663,29.308446],[106.195731,29.327447],[106.206042,29.334826],[106.223621,29.353984],[106.245569,29.40989],[106.248613,29.429238],[106.262705,29.451596],[106.278565,29.449031],[106.285636,29.441986],[106.298549,29.440764],[106.30724,29.434248],[106.307339,29.426835],[106.320596,29.427976],[106.323002,29.420481],[106.317257,29.415227],[106.329041,29.413679],[106.331005,29.39555],[106.322314,29.38732],[106.314409,29.388827],[106.30891,29.379985],[106.295554,29.378763],[106.294425,29.384549],[106.284359,29.38516],[106.282248,29.368167],[106.275668,29.363236],[106.277829,29.352924],[106.267468,29.350234],[106.261232,29.335519],[106.274539,29.32871],[106.276945,29.322269],[106.289171,29.320679],[106.27994,29.286913],[106.298697,29.256483],[106.311905,29.254769],[106.339844,29.26456],[106.3559,29.27688],[106.384035,29.283039],[106.393217,29.294948],[106.385999,29.312401],[106.395525,29.339351],[106.400877,29.340777],[106.411876,29.342245],[106.435542,29.352965],[106.440404,29.350153],[106.454496,29.35427],[106.460241,29.360872],[106.478163,29.36022],[106.474431,29.35696],[106.473645,29.335722],[106.486363,29.294336],[106.508655,29.278674],[106.505021,29.268966],[106.511208,29.268069],[106.514056,29.254688],[106.519653,29.251791],[106.515774,29.232042],[106.521225,29.224614],[106.535906,29.221962],[106.539343,29.213717],[106.547788,29.212534],[106.541896,29.192369],[106.545972,29.183265],[106.562372,29.161379],[106.549998,29.153498],[106.550047,29.145493],[106.560997,29.133239],[106.574451,29.128215],[106.574205,29.116777],[106.581177,29.110076],[106.578084,29.09312],[106.584418,29.079634],[106.583436,29.071256],[106.589672,29.056663],[106.585695,29.053148],[106.589525,29.030008],[106.59414,29.019131],[106.608773,29.014756],[106.592471,29.005963],[106.585204,29.008294],[106.57833,29.022443],[106.562666,29.016555],[106.557118,29.006004],[106.549703,29.00535],[106.551815,29.024692],[106.544646,29.036386],[106.526331,29.036141],[106.524956,29.044195],[106.514547,29.059852],[106.504825,29.063285],[106.498,29.071624],[106.501044,29.0771],[106.49034,29.083476],[106.484497,29.065738],[106.489849,29.042969],[106.478113,29.024774],[106.475413,29.012179],[106.454447,29.0177],[106.444135,29.038103],[106.463874,29.042069],[106.44281,29.050573],[106.442515,29.039739],[106.427834,29.047588],[106.419732,29.047834],[106.404314,29.035364],[106.398765,29.027023],[106.385803,29.029476],[106.391842,29.022443],[106.397587,28.993693],[106.405738,28.979622],[106.399846,28.962521],[106.408733,28.95401],[106.402792,28.940956],[106.410992,28.922294],[106.411826,28.891182],[106.415264,28.876236],[106.43623,28.870217],[106.446443,28.863337],[106.455723,28.836427],[106.461861,28.831019]]]]}},{"type":"Feature","properties":{"adcode":500117,"name":"合川区","center":[106.265554,29.990993],"centroid":[106.311538,30.112474],"childrenNum":0,"level":"district","subFeatureIndex":16,"acroutes":[100000,500000]},"geometry":{"type":"MultiPolygon","coordinates":[[[[106.648447,30.085559],[106.629101,30.079448],[106.591587,30.047071],[106.598265,30.039582],[106.596546,30.030432],[106.582209,30.022214],[106.572192,30.012698],[106.568706,29.991154],[106.55697,29.961259],[106.544941,29.935246],[106.526773,29.945822],[106.519506,29.927546],[106.505659,29.931234],[106.501338,29.922115],[106.488916,29.908415],[106.479046,29.908172],[106.477131,29.891875],[106.466967,29.882996],[106.465347,29.870832],[106.452581,29.869128],[106.462892,29.88478],[106.458522,29.887456],[106.452777,29.878212],[106.44281,29.883564],[106.46191,29.92402],[106.455281,29.926776],[106.443841,29.906834],[106.433235,29.901889],[106.423414,29.904564],[106.429601,29.892362],[106.423611,29.884334],[106.409077,29.889443],[106.396507,29.898118],[106.390958,29.906672],[106.390909,29.921304],[106.383053,29.92787],[106.339598,29.901767],[106.314409,29.884861],[106.26791,29.84443],[106.263393,29.852258],[106.271593,29.86779],[106.265995,29.873913],[106.276699,29.873021],[106.281658,29.894673],[106.27012,29.887334],[106.266977,29.895686],[106.258139,29.89747],[106.245078,29.907685],[106.245127,29.908253],[106.244783,29.908374],[106.244341,29.908253],[106.242377,29.910239],[106.2384,29.912549],[106.239873,29.919116],[106.221018,29.920413],[106.219005,29.929451],[106.208645,29.929126],[106.200346,29.936826],[106.197744,29.931153],[106.165877,29.922399],[106.164944,29.921507],[106.160574,29.919359],[106.146924,29.92787],[106.130426,29.921993],[106.129198,29.929491],[106.134845,29.938771],[106.124141,29.936461],[106.1127,29.9519],[106.112946,29.960813],[106.119378,29.966607],[106.123306,29.980056],[106.118052,29.986982],[106.123061,29.998687],[106.098215,30.002331],[106.075727,30.001643],[106.049163,29.997026],[106.036495,29.997674],[106.028,29.991883],[106.027362,30.001522],[106.046511,30.007474],[106.047788,30.01363],[106.020439,30.028084],[105.998785,30.026627],[105.991076,30.033671],[105.981501,30.052414],[105.981207,30.061359],[105.98592,30.070262],[105.980814,30.083131],[105.989357,30.093125],[105.985184,30.101742],[105.999472,30.113757],[105.994513,30.120108],[105.998343,30.129289],[105.978801,30.143606],[105.976247,30.153109],[105.987639,30.164026],[105.974381,30.175224],[105.973743,30.188079],[105.991174,30.177246],[106.00669,30.187958],[106.019948,30.201417],[106.006052,30.213622],[106.004039,30.224775],[105.995102,30.231845],[105.981059,30.233583],[105.985724,30.248692],[105.995397,30.256892],[106.006248,30.260002],[106.013466,30.268282],[106.009489,30.275754],[105.998588,30.280681],[105.992107,30.277369],[105.98101,30.280156],[105.983367,30.289766],[105.974872,30.289322],[105.967507,30.308379],[105.975216,30.30632],[105.988277,30.320006],[105.981305,30.325051],[105.980372,30.342084],[105.989063,30.352697],[105.97826,30.373477],[105.992009,30.36916],[106.002222,30.376906],[106.01381,30.372347],[106.030897,30.374244],[106.033745,30.361817],[106.061046,30.342003],[106.070768,30.341196],[106.073517,30.334133],[106.079311,30.344344],[106.088591,30.345958],[106.091047,30.336837],[106.088346,30.323154],[106.098019,30.323558],[106.106072,30.310761],[106.114812,30.317341],[106.122864,30.313708],[106.122324,30.306805],[106.131801,30.301799],[106.134403,30.308622],[106.124828,30.317907],[106.124092,30.324769],[106.132685,30.323679],[106.137153,30.315686],[106.149428,30.309469],[106.156499,30.313668],[106.169069,30.3041],[106.179822,30.278661],[106.178447,30.256892],[106.170542,30.250591],[106.178251,30.248611],[106.180362,30.232855],[106.201083,30.228411],[106.192539,30.2154],[106.201819,30.213137],[106.204471,30.205701],[106.212524,30.203115],[106.232213,30.212531],[106.240315,30.200164],[106.232704,30.186139],[106.240315,30.18533],[106.241788,30.177731],[106.249742,30.189736],[106.245913,30.196527],[106.254358,30.198426],[106.264424,30.193536],[106.27174,30.204004],[106.26192,30.213784],[106.279793,30.207924],[106.278467,30.195718],[106.28431,30.201983],[106.296684,30.205135],[106.292706,30.220209],[106.305816,30.225704],[106.300563,30.238552],[106.309794,30.2373],[106.318681,30.229138],[106.335032,30.226391],[106.336799,30.237906],[106.343968,30.237219],[106.34932,30.245258],[106.359632,30.241218],[106.372545,30.248167],[106.390222,30.243683],[106.383102,30.254711],[106.397391,30.249662],[106.401319,30.242673],[106.410795,30.24336],[106.416786,30.253418],[106.427834,30.253782],[106.429405,30.261174],[106.422138,30.262466],[106.407997,30.276117],[106.41821,30.278783],[106.434708,30.277046],[106.428619,30.291543],[106.43569,30.295177],[106.441877,30.289484],[106.444774,30.295702],[106.436475,30.303575],[106.441042,30.308945],[106.4515,30.308137],[106.44826,30.299618],[106.458964,30.302283],[106.472123,30.300022],[106.476149,30.306966],[106.481845,30.298407],[106.498,30.296025],[106.499865,30.288918],[106.509391,30.289363],[106.521372,30.300305],[106.544842,30.296752],[106.547052,30.310358],[106.56026,30.315162],[106.571603,30.30624],[106.586382,30.302969],[106.590507,30.294248],[106.611669,30.292431],[106.623061,30.281609],[106.627578,30.265899],[106.634845,30.265697],[106.642653,30.249863],[106.633029,30.24643],[106.621686,30.236492],[106.609804,30.23532],[106.611473,30.228047],[106.619133,30.229664],[106.632734,30.216208],[106.624436,30.211318],[106.626989,30.19778],[106.633618,30.199679],[106.63185,30.186543],[106.646973,30.189494],[106.639265,30.180156],[106.649527,30.176922],[106.653995,30.169726],[106.662195,30.170171],[106.665779,30.158972],[106.677613,30.157395],[106.67501,30.147165],[106.673881,30.12213],[106.668382,30.101742],[106.656352,30.086165],[106.648447,30.085559]]],[[[106.244783,29.908374],[106.245127,29.908253],[106.245078,29.907685],[106.244341,29.908253],[106.244783,29.908374]]]]}},{"type":"Feature","properties":{"adcode":500118,"name":"永川区","center":[105.894714,29.348748],"centroid":[105.872859,29.290183],"childrenNum":0,"level":"district","subFeatureIndex":17,"acroutes":[100000,500000]},"geometry":{"type":"MultiPolygon","coordinates":[[[[105.66514,29.276594],[105.655664,29.284426],[105.645794,29.286506],[105.637251,29.298251],[105.635974,29.320638],[105.645352,29.319252],[105.653405,29.33397],[105.649575,29.340247],[105.653209,29.349052],[105.663078,29.346647],[105.675501,29.355574],[105.691655,29.357652],[105.696172,29.364622],[105.709283,29.368616],[105.709086,29.375625],[105.716893,29.372813],[105.728678,29.384875],[105.735159,29.38459],[105.747582,29.372487],[105.767762,29.379578],[105.773507,29.394857],[105.770561,29.408302],[105.802674,29.437139],[105.817895,29.490395],[105.825899,29.51396],[105.834933,29.527917],[105.855016,29.540042],[105.868617,29.537316],[105.876817,29.541791],[105.873969,29.552572],[105.890467,29.570429],[105.906572,29.562741],[105.903626,29.552531],[105.910746,29.539065],[105.921303,29.537438],[105.938341,29.543744],[105.935984,29.549968],[105.951156,29.548463],[105.956116,29.540734],[105.967802,29.53695],[105.975363,29.54228],[105.981992,29.533369],[105.988523,29.542483],[105.995446,29.541303],[105.995446,29.525801],[106.010127,29.520512],[106.018769,29.527388],[106.038803,29.529179],[106.071553,29.536014],[106.078526,29.545209],[106.089132,29.546388],[106.085989,29.530562],[106.076709,29.505536],[106.078035,29.491168],[106.076218,29.470366],[106.071799,29.461491],[106.073272,29.448868],[106.063648,29.418974],[106.062666,29.396161],[106.067822,29.390946],[106.065612,29.375788],[106.048377,29.353251],[106.049998,29.341878],[106.043418,29.32549],[106.038164,29.313339],[106.036789,29.284915],[106.031486,29.261868],[106.033156,29.253953],[106.016363,29.242529],[106.004677,29.215513],[105.996673,29.213595],[105.982287,29.193512],[105.96736,29.177671],[105.965347,29.15603],[105.954299,29.151251],[105.958276,29.147943],[105.942858,29.128338],[105.937899,29.127561],[105.93186,29.115102],[105.918848,29.109464],[105.917473,29.098881],[105.909518,29.093855],[105.913888,29.08086],[105.922285,29.078858],[105.919928,29.056132],[105.897145,29.049632],[105.885459,29.037204],[105.882905,29.029722],[105.864492,29.026001],[105.857323,29.012997],[105.858011,28.98678],[105.851677,28.976185],[105.826782,28.964403],[105.824769,28.953396],[105.830514,28.944271],[105.810579,28.940874],[105.797567,28.935923],[105.792706,28.943453],[105.796339,28.949632],[105.803852,28.947586],[105.80886,28.956547],[105.801348,28.958184],[105.788778,28.977617],[105.779105,28.979949],[105.76187,28.992998],[105.76624,29.013365],[105.754063,29.02412],[105.747631,29.037899],[105.741788,29.039494],[105.757795,29.069008],[105.745028,29.075465],[105.740855,29.088625],[105.729905,29.098759],[105.729267,29.107748],[105.735208,29.122414],[105.752099,29.129767],[105.742868,29.137569],[105.733195,29.130993],[105.728825,29.134424],[105.729463,29.152558],[105.719594,29.172159],[105.705796,29.174732],[105.70452,29.202411],[105.711983,29.218901],[105.705845,29.223757],[105.70889,29.238],[105.693963,29.267579],[105.69519,29.287362],[105.715911,29.29087],[105.70506,29.29923],[105.689838,29.29193],[105.678054,29.273494],[105.66514,29.276594]]]]}},{"type":"Feature","properties":{"adcode":500119,"name":"南川区","center":[107.098153,29.156646],"centroid":[107.171436,29.135469],"childrenNum":0,"level":"district","subFeatureIndex":18,"acroutes":[100000,500000]},"geometry":{"type":"MultiPolygon","coordinates":[[[[107.401565,29.184694],[107.401516,29.175957],[107.412318,29.161379],[107.408095,29.150271],[107.408439,29.138345],[107.4215,29.135813],[107.427589,29.127357],[107.412957,29.095735],[107.392285,29.091281],[107.374412,29.097574],[107.369747,29.091608],[107.379862,29.05744],[107.390714,29.059075],[107.395182,29.039657],[107.381041,29.029926],[107.378536,29.021912],[107.364542,29.010543],[107.370435,28.993897],[107.396949,28.993325],[107.404413,28.981872],[107.405542,28.972258],[107.412957,28.960148],[107.421549,28.954542],[107.438784,28.955278],[107.441043,28.94378],[107.433579,28.933754],[107.422875,28.928269],[107.41443,28.913248],[107.415657,28.88979],[107.406131,28.89155],[107.391941,28.868497],[107.395378,28.86088],[107.383447,28.848551],[107.367243,28.844988],[107.359878,28.849985],[107.331988,28.841178],[107.345147,28.829585],[107.325409,28.809591],[107.304639,28.806764],[107.277142,28.799183],[107.261429,28.792708],[107.252395,28.780577],[107.253573,28.766805],[107.248417,28.761804],[107.219202,28.772707],[107.21876,28.788733],[107.213408,28.795003],[107.210609,28.814795],[107.216354,28.828151],[107.226371,28.836795],[107.195142,28.838065],[107.19691,28.847405],[107.206534,28.868005],[107.194013,28.876605],[107.198432,28.878407],[107.193571,28.888766],[107.184095,28.879922],[107.178644,28.883361],[107.166565,28.880659],[107.155861,28.882993],[107.146827,28.876236],[107.141965,28.887742],[107.096694,28.890076],[107.08707,28.872264],[107.072683,28.866613],[107.059819,28.868456],[107.063354,28.877055],[107.07234,28.879308],[107.066546,28.895358],[107.057462,28.894785],[107.04337,28.919879],[107.053288,28.919183],[107.057315,28.932771],[107.051275,28.942143],[107.043124,28.945785],[107.02913,28.941284],[107.015971,28.952087],[107.013614,28.969599],[107.022256,28.974058],[107.02967,28.985717],[107.024564,28.995983],[107.01715,28.998724],[107.003892,29.016023],[106.990045,29.021094],[106.979832,29.031766],[106.981158,29.039861],[106.988671,29.043459],[106.977034,29.056009],[106.975266,29.050532],[106.96358,29.058217],[106.954545,29.059239],[106.950421,29.071787],[106.938685,29.041906],[106.926361,29.047793],[106.920567,29.045749],[106.915362,29.054538],[106.906131,29.051758],[106.910256,29.068844],[106.921844,29.100475],[106.911483,29.114775],[106.905542,29.11596],[106.891695,29.131769],[106.891744,29.14149],[106.899355,29.155621],[106.909175,29.160562],[106.907751,29.179672],[106.896409,29.180039],[106.895574,29.190491],[106.911385,29.197472],[106.919045,29.180366],[106.945069,29.183142],[106.955527,29.190695],[106.95263,29.197104],[106.961812,29.202738],[106.968392,29.215228],[106.95754,29.228981],[106.954692,29.252199],[106.936132,29.256931],[106.933039,29.279653],[106.92312,29.280673],[106.920616,29.302411],[106.922433,29.310322],[106.919978,29.329893],[106.922531,29.403046],[106.932253,29.399746],[106.936574,29.439339],[106.933039,29.448542],[106.935297,29.464463],[106.945952,29.497029],[106.964415,29.488685],[106.98052,29.488767],[106.993925,29.482579],[107.00453,29.471058],[107.012927,29.487708],[107.019997,29.487057],[107.015873,29.473338],[107.034581,29.467435],[107.034482,29.453103],[107.025055,29.441782],[107.029228,29.410827],[107.034581,29.406713],[107.026381,29.402802],[107.035121,29.391231],[107.051619,29.394205],[107.052552,29.388705],[107.043321,29.378437],[107.07229,29.362829],[107.083387,29.359813],[107.10018,29.361606],[107.114812,29.366741],[107.109166,29.383856],[107.110442,29.391598],[107.125124,29.387564],[107.134158,29.394613],[107.146827,29.396365],[107.142947,29.408179],[107.134846,29.411438],[107.148741,29.419259],[107.155272,29.417304],[107.16082,29.424432],[107.167056,29.420603],[107.173096,29.408342],[107.185911,29.412945],[107.203244,29.411316],[107.199561,29.399135],[107.214439,29.39775],[107.207221,29.385934],[107.20732,29.366293],[107.225487,29.367801],[107.239285,29.364744],[107.241691,29.379415],[107.256176,29.38463],[107.263393,29.383571],[107.272428,29.37371],[107.272428,29.358386],[107.293444,29.349704],[107.298599,29.352069],[107.309893,29.345098],[107.318387,29.347789],[107.323395,29.339147],[107.347308,29.342571],[107.350156,29.346892],[107.367047,29.341756],[107.392039,29.326754],[107.38271,29.308609],[107.373332,29.298578],[107.379764,29.299516],[107.391597,29.289279],[107.388553,29.281081],[107.404069,29.28259],[107.421942,29.274636],[107.416541,29.264234],[107.401025,29.248853],[107.399355,29.235714],[107.401909,29.218248],[107.395378,29.205881],[107.401565,29.184694]]]]}},{"type":"Feature","properties":{"adcode":500120,"name":"璧山区","center":[106.231126,29.593581],"centroid":[106.191948,29.561371],"childrenNum":0,"level":"district","subFeatureIndex":19,"acroutes":[100000,500000]},"geometry":{"type":"MultiPolygon","coordinates":[[[[106.253425,29.532841],[106.253278,29.519698],[106.261969,29.516524],[106.260594,29.494262],[106.267026,29.494994],[106.26025,29.466051],[106.262705,29.451596],[106.248613,29.429238],[106.245569,29.40989],[106.223621,29.353984],[106.206042,29.334826],[106.195731,29.327447],[106.17663,29.308446],[106.156106,29.301962],[106.152276,29.293684],[106.136416,29.294826],[106.120065,29.278878],[106.113289,29.284018],[106.110442,29.294907],[106.096104,29.291359],[106.084663,29.300331],[106.086382,29.30706],[106.072928,29.321005],[106.043418,29.32549],[106.049998,29.341878],[106.048377,29.353251],[106.065612,29.375788],[106.067822,29.390946],[106.062666,29.396161],[106.063648,29.418974],[106.073272,29.448868],[106.071799,29.461491],[106.076218,29.470366],[106.078035,29.491168],[106.076709,29.505536],[106.085989,29.530562],[106.089132,29.546388],[106.087217,29.552287],[106.096251,29.559691],[106.104844,29.576041],[106.112307,29.601457],[106.117561,29.610076],[106.113928,29.615687],[106.122717,29.638816],[106.144813,29.662956],[106.156695,29.667304],[106.165828,29.675755],[106.163226,29.681321],[106.169314,29.689893],[106.156155,29.70935],[106.163422,29.721088],[106.169069,29.752557],[106.160771,29.759702],[106.180559,29.771555],[106.194552,29.785395],[106.211689,29.791564],[106.233048,29.805686],[106.26791,29.84443],[106.314409,29.884861],[106.325653,29.872737],[106.329385,29.859639],[106.336407,29.860247],[106.330956,29.848323],[106.342446,29.842523],[106.337585,29.834532],[106.345883,29.836114],[106.34225,29.816804],[106.351284,29.812422],[106.372889,29.814207],[106.344214,29.779307],[106.334197,29.771311],[106.324279,29.774843],[106.31598,29.764898],[106.305669,29.736641],[106.297076,29.706467],[106.285636,29.697896],[106.280431,29.703298],[106.278712,29.67669],[106.284506,29.675268],[106.287698,29.663484],[106.2794,29.652553],[106.287649,29.635849],[106.279105,29.637841],[106.273017,29.631215],[106.282493,29.626744],[106.274882,29.612231],[106.265602,29.605889],[106.260005,29.592633],[106.251707,29.559406],[106.253425,29.532841]]]]}},{"type":"Feature","properties":{"adcode":500151,"name":"铜梁区","center":[106.054948,29.839944],"centroid":[106.0332,29.81109],"childrenNum":0,"level":"district","subFeatureIndex":20,"acroutes":[100000,500000]},"geometry":{"type":"MultiPolygon","coordinates":[[[[105.981207,30.061359],[105.981501,30.052414],[105.991076,30.033671],[105.998785,30.026627],[106.020439,30.028084],[106.047788,30.01363],[106.046511,30.007474],[106.027362,30.001522],[106.028,29.991883],[106.036495,29.997674],[106.049163,29.997026],[106.075727,30.001643],[106.098215,30.002331],[106.123061,29.998687],[106.118052,29.986982],[106.123306,29.980056],[106.119378,29.966607],[106.112946,29.960813],[106.1127,29.9519],[106.124141,29.936461],[106.134845,29.938771],[106.129198,29.929491],[106.130426,29.921993],[106.146924,29.92787],[106.160574,29.919359],[106.164944,29.921507],[106.165141,29.921426],[106.165435,29.921102],[106.165533,29.92094],[106.165926,29.920696],[106.166074,29.920777],[106.166123,29.921142],[106.165877,29.922399],[106.197744,29.931153],[106.200346,29.936826],[106.208645,29.929126],[106.219005,29.929451],[106.221018,29.920413],[106.239873,29.919116],[106.2384,29.912549],[106.238302,29.912144],[106.2384,29.91182],[106.23894,29.911212],[106.239529,29.911131],[106.239873,29.91109],[106.240119,29.910928],[106.239971,29.909631],[106.240119,29.909347],[106.240757,29.909428],[106.24115,29.90955],[106.242377,29.910239],[106.244341,29.908253],[106.245078,29.907685],[106.258139,29.89747],[106.266977,29.895686],[106.27012,29.887334],[106.281658,29.894673],[106.276699,29.873021],[106.265995,29.873913],[106.271593,29.86779],[106.263393,29.852258],[106.26791,29.84443],[106.233048,29.805686],[106.211689,29.791564],[106.194552,29.785395],[106.180559,29.771555],[106.160771,29.759702],[106.169069,29.752557],[106.163422,29.721088],[106.156155,29.70935],[106.169314,29.689893],[106.163226,29.681321],[106.165828,29.675755],[106.156695,29.667304],[106.144813,29.662956],[106.122717,29.638816],[106.113928,29.615687],[106.117561,29.610076],[106.112307,29.601457],[106.104844,29.576041],[106.096251,29.559691],[106.087217,29.552287],[106.089132,29.546388],[106.078526,29.545209],[106.071553,29.536014],[106.038803,29.529179],[106.018769,29.527388],[106.010127,29.520512],[105.995446,29.525801],[105.995446,29.541303],[105.988523,29.542483],[105.981992,29.533369],[105.975363,29.54228],[105.967802,29.53695],[105.956116,29.540734],[105.951156,29.548463],[105.935984,29.549968],[105.938341,29.543744],[105.921303,29.537438],[105.910746,29.539065],[105.903626,29.552531],[105.906572,29.562741],[105.890467,29.570429],[105.924347,29.595805],[105.938243,29.613166],[105.946099,29.626988],[105.953513,29.630199],[105.969815,29.646294],[105.982532,29.671936],[105.997361,29.6645],[106.005659,29.682581],[106.031732,29.722184],[106.036838,29.726692],[106.025987,29.734854],[106.028344,29.749552],[106.014448,29.752841],[106.010913,29.747279],[106.001289,29.748375],[105.997508,29.756819],[105.998588,29.768916],[105.991223,29.781174],[105.976542,29.784746],[105.970601,29.779876],[105.957638,29.781662],[105.944233,29.775979],[105.922334,29.788236],[105.904706,29.785598],[105.906523,29.795582],[105.893806,29.802967],[105.888208,29.790347],[105.893904,29.785882],[105.888012,29.77468],[105.878584,29.769525],[105.868911,29.756982],[105.83076,29.757997],[105.822461,29.762827],[105.820939,29.773381],[105.806945,29.771636],[105.808418,29.783569],[105.789269,29.794121],[105.778368,29.811367],[105.790987,29.827879],[105.807387,29.833031],[105.809253,29.844714],[105.818926,29.855583],[105.824769,29.881861],[105.837241,29.878293],[105.846177,29.895402],[105.860319,29.896902],[105.870434,29.89078],[105.875638,29.897551],[105.88266,29.890659],[105.90888,29.879955],[105.910058,29.868561],[105.923169,29.865763],[105.930681,29.872373],[105.926606,29.877928],[105.933185,29.88778],[105.945657,29.893051],[105.95042,29.908172],[105.931712,29.927546],[105.941385,29.935691],[105.934953,29.954493],[105.925034,29.956478],[105.924347,29.963123],[105.91104,29.961624],[105.907849,29.98038],[105.915656,29.993179],[105.904019,29.995649],[105.886784,30.006462],[105.870335,30.00549],[105.866702,30.009864],[105.875491,30.027356],[105.869648,30.032983],[105.872103,30.045411],[105.883691,30.049256],[105.891498,30.044156],[105.900336,30.045775],[105.901711,30.057392],[105.895475,30.065123],[105.904608,30.073662],[105.897783,30.079003],[105.907554,30.091951],[105.917571,30.093934],[105.933333,30.088027],[105.934511,30.080703],[105.943006,30.074511],[105.939274,30.063342],[105.949438,30.060832],[105.959209,30.071234],[105.95862,30.076778],[105.973105,30.072771],[105.981207,30.061359]]],[[[106.2384,29.912549],[106.242377,29.910239],[106.24115,29.90955],[106.240757,29.909428],[106.240119,29.909347],[106.239971,29.909631],[106.240119,29.910928],[106.239873,29.91109],[106.239529,29.911131],[106.23894,29.911212],[106.2384,29.91182],[106.238302,29.912144],[106.2384,29.912549]]],[[[106.165877,29.922399],[106.166123,29.921142],[106.166074,29.920777],[106.165926,29.920696],[106.165533,29.92094],[106.165435,29.921102],[106.165141,29.921426],[106.164944,29.921507],[106.165877,29.922399]]]]}},{"type":"Feature","properties":{"adcode":500152,"name":"潼南区","center":[105.841818,30.189554],"centroid":[105.814632,30.143351],"childrenNum":0,"level":"district","subFeatureIndex":21,"acroutes":[100000,500000]},"geometry":{"type":"MultiPolygon","coordinates":[[[[105.733146,29.860693],[105.735257,29.871967],[105.73403,29.893578],[105.717433,29.893578],[105.711639,29.899497],[105.715027,29.911171],[105.702507,29.923939],[105.714978,29.930747],[105.721116,29.950563],[105.731034,29.95664],[105.723326,29.976005],[105.732508,29.998768],[105.74876,30.005895],[105.75367,30.01861],[105.743359,30.027113],[105.742033,30.03359],[105.728039,30.027194],[105.721312,30.042051],[105.705354,30.035776],[105.699413,30.043144],[105.68699,30.038975],[105.683455,30.052859],[105.676728,30.056057],[105.674617,30.071274],[105.660476,30.066296],[105.649231,30.074592],[105.639264,30.076413],[105.637496,30.093691],[105.640835,30.101338],[105.619721,30.104129],[105.606759,30.109712],[105.598068,30.109227],[105.583141,30.12395],[105.582699,30.12755],[105.580244,30.129694],[105.574155,30.130422],[105.569982,30.134304],[105.593207,30.144738],[105.59684,30.157112],[105.582159,30.162974],[105.571406,30.161559],[105.558197,30.151977],[105.556086,30.144779],[105.549605,30.151734],[105.536151,30.152907],[105.536445,30.164834],[105.546904,30.180722],[105.567036,30.183188],[105.5799,30.173446],[105.595122,30.183673],[105.607888,30.178297],[105.618052,30.185694],[105.632832,30.183754],[105.642406,30.186422],[105.645549,30.206873],[105.662342,30.210066],[105.655418,30.220815],[105.636269,30.219724],[105.618739,30.23536],[105.62036,30.248934],[105.610589,30.255882],[105.620163,30.261779],[105.622668,30.273856],[105.645745,30.273371],[105.660672,30.264324],[105.667203,30.265697],[105.67334,30.252772],[105.701475,30.257862],[105.723866,30.254751],[105.720969,30.263193],[105.735159,30.261537],[105.730102,30.265818],[105.734963,30.277046],[105.722982,30.275552],[105.711787,30.282255],[105.711001,30.294208],[105.718612,30.307733],[105.711738,30.315848],[105.714831,30.322791],[105.729905,30.316897],[105.741493,30.319158],[105.735012,30.336676],[105.74984,30.339703],[105.756224,30.347088],[105.751854,30.357136],[105.770021,30.37618],[105.760299,30.384571],[105.770708,30.404054],[105.782787,30.403086],[105.795456,30.418491],[105.792313,30.427282],[105.802183,30.427927],[105.820154,30.437524],[105.831103,30.429016],[105.836946,30.41583],[105.846128,30.411152],[105.839107,30.399698],[105.846227,30.392437],[105.862332,30.406353],[105.873772,30.408692],[105.869108,30.401513],[105.877602,30.386669],[105.886784,30.392639],[105.876522,30.399536],[105.905296,30.406433],[105.905983,30.397036],[105.899011,30.396027],[105.901515,30.386346],[105.917031,30.395987],[105.925575,30.385338],[105.939568,30.380537],[105.940894,30.372267],[105.970257,30.378883],[105.97826,30.373477],[105.989063,30.352697],[105.980372,30.342084],[105.981305,30.325051],[105.988277,30.320006],[105.975216,30.30632],[105.967507,30.308379],[105.974872,30.289322],[105.983367,30.289766],[105.98101,30.280156],[105.992107,30.277369],[105.998588,30.280681],[106.009489,30.275754],[106.013466,30.268282],[106.006248,30.260002],[105.995397,30.256892],[105.985724,30.248692],[105.981059,30.233583],[105.995102,30.231845],[106.004039,30.224775],[106.006052,30.213622],[106.019948,30.201417],[106.00669,30.187958],[105.991174,30.177246],[105.973743,30.188079],[105.974381,30.175224],[105.987639,30.164026],[105.976247,30.153109],[105.978801,30.143606],[105.998343,30.129289],[105.994513,30.120108],[105.999472,30.113757],[105.985184,30.101742],[105.989357,30.093125],[105.980814,30.083131],[105.98592,30.070262],[105.981207,30.061359],[105.973105,30.072771],[105.95862,30.076778],[105.959209,30.071234],[105.949438,30.060832],[105.939274,30.063342],[105.943006,30.074511],[105.934511,30.080703],[105.933333,30.088027],[105.917571,30.093934],[105.907554,30.091951],[105.897783,30.079003],[105.904608,30.073662],[105.895475,30.065123],[105.901711,30.057392],[105.900336,30.045775],[105.891498,30.044156],[105.883691,30.049256],[105.872103,30.045411],[105.869648,30.032983],[105.875491,30.027356],[105.866702,30.009864],[105.870335,30.00549],[105.886784,30.006462],[105.904019,29.995649],[105.915656,29.993179],[105.907849,29.98038],[105.91104,29.961624],[105.924347,29.963123],[105.925034,29.956478],[105.934953,29.954493],[105.941385,29.935691],[105.931712,29.927546],[105.95042,29.908172],[105.945657,29.893051],[105.933185,29.88778],[105.926606,29.877928],[105.930681,29.872373],[105.923169,29.865763],[105.910058,29.868561],[105.90888,29.879955],[105.88266,29.890659],[105.875638,29.897551],[105.870434,29.89078],[105.860319,29.896902],[105.846177,29.895402],[105.837241,29.878293],[105.824769,29.881861],[105.818926,29.855583],[105.809253,29.844714],[105.807387,29.833031],[105.790987,29.827879],[105.778368,29.811367],[105.77719,29.801831],[105.763883,29.793512],[105.746354,29.801466],[105.721411,29.78779],[105.713898,29.789129],[105.714684,29.79684],[105.72308,29.809825],[105.735846,29.819319],[105.725339,29.832747],[105.738252,29.845646],[105.738105,29.856516],[105.733146,29.860693]]],[[[105.583141,30.12395],[105.574155,30.130422],[105.580244,30.129694],[105.582699,30.12755],[105.583141,30.12395]]]]}},{"type":"Feature","properties":{"adcode":500153,"name":"荣昌区","center":[105.594061,29.403627],"centroid":[105.506727,29.464817],"childrenNum":0,"level":"district","subFeatureIndex":22,"acroutes":[100000,500000]},"geometry":{"type":"MultiPolygon","coordinates":[[[[105.66514,29.276594],[105.664698,29.269048],[105.671622,29.260889],[105.666515,29.252933],[105.647611,29.25326],[105.63946,29.261582],[105.644076,29.270965],[105.6318,29.280388],[105.619771,29.27174],[105.614173,29.258359],[105.607986,29.255748],[105.609508,29.27276],[105.596005,29.274473],[105.583288,29.270353],[105.558295,29.27847],[105.55584,29.273576],[105.537869,29.272882],[105.518425,29.264438],[105.50939,29.274677],[105.509145,29.285404],[105.488866,29.278185],[105.459307,29.290136],[105.465395,29.292379],[105.466427,29.305592],[105.474283,29.309996],[105.466083,29.313421],[105.466476,29.321576],[105.454691,29.329077],[105.44929,29.317498],[105.436573,29.319496],[105.420075,29.316968],[105.422972,29.326509],[105.418602,29.352313],[105.434805,29.363114],[105.438586,29.370816],[105.432203,29.379659],[105.443693,29.386382],[105.443103,29.399094],[105.431466,29.408179],[105.427293,29.418852],[105.417031,29.423373],[105.413544,29.418567],[105.39631,29.422884],[105.373281,29.420766],[105.371759,29.423862],[105.388797,29.431886],[105.387471,29.438361],[105.399207,29.438972],[105.389534,29.452818],[105.373821,29.458274],[105.362037,29.454691],[105.360417,29.444225],[105.345588,29.448501],[105.334147,29.441416],[105.324622,29.450008],[105.336111,29.455546],[105.338026,29.461857],[105.331299,29.47175],[105.321234,29.475984],[105.323247,29.495157],[105.318877,29.512413],[105.304686,29.531254],[105.294326,29.53398],[105.289759,29.552613],[105.298647,29.572503],[105.317649,29.578156],[105.311315,29.593365],[105.320644,29.601782],[105.320988,29.60971],[105.329826,29.604384],[105.325653,29.595927],[105.335522,29.595195],[105.341611,29.60292],[105.346766,29.620199],[105.354377,29.626703],[105.365965,29.627516],[105.369648,29.621053],[105.380794,29.628248],[105.377553,29.643287],[105.393167,29.650724],[105.383887,29.669823],[105.389681,29.676487],[105.400532,29.67157],[105.420615,29.688309],[105.436377,29.676974],[105.475658,29.674699],[105.482777,29.679127],[105.490683,29.675186],[105.487688,29.663159],[105.496673,29.648652],[105.509243,29.637962],[105.50561,29.609344],[105.517738,29.586493],[105.536642,29.59121],[105.542681,29.586412],[105.542534,29.57413],[105.549703,29.572096],[105.561045,29.588892],[105.580047,29.591617],[105.590899,29.590397],[105.594483,29.575553],[105.602241,29.569941],[105.599983,29.553019],[105.592175,29.549928],[105.59522,29.539432],[105.590015,29.524011],[105.583239,29.515588],[105.593059,29.517744],[105.595711,29.504152],[105.607642,29.508262],[105.619967,29.504803],[105.620556,29.494017],[105.631506,29.485917],[105.629738,29.478386],[105.637152,29.473623],[105.646236,29.486121],[105.639509,29.489052],[105.641179,29.505861],[105.648397,29.494139],[105.662636,29.499431],[105.65311,29.485022],[105.658119,29.481317],[105.657431,29.468168],[105.662194,29.460025],[105.687236,29.446506],[105.714929,29.464259],[105.725486,29.454121],[105.724013,29.449967],[105.735061,29.445162],[105.737663,29.435592],[105.727646,29.422844],[105.73403,29.417386],[105.722835,29.397872],[105.741002,29.397628],[105.728678,29.384875],[105.716893,29.372813],[105.709086,29.375625],[105.709283,29.368616],[105.696172,29.364622],[105.691655,29.357652],[105.675501,29.355574],[105.663078,29.346647],[105.653209,29.349052],[105.649575,29.340247],[105.653405,29.33397],[105.645352,29.319252],[105.635974,29.320638],[105.637251,29.298251],[105.645794,29.286506],[105.655664,29.284426],[105.66514,29.276594]]]]}},{"type":"Feature","properties":{"adcode":500154,"name":"开州区","center":[108.413317,31.167735],"centroid":[108.382659,31.271013],"childrenNum":0,"level":"district","subFeatureIndex":23,"acroutes":[100000,500000]},"geometry":{"type":"MultiPolygon","coordinates":[[[[108.41497,30.998897],[108.395674,30.991641],[108.372792,30.969791],[108.355214,30.960408],[108.339649,30.963135],[108.349027,30.939153],[108.360861,30.932976],[108.346277,30.921222],[108.300269,30.901041],[108.29202,30.892976],[108.268402,30.881659],[108.260055,30.872789],[108.243803,30.882261],[108.244294,30.89113],[108.228237,30.881298],[108.231184,30.87612],[108.225488,30.860908],[108.229956,30.856171],[108.218417,30.852839],[108.200102,30.839188],[108.197254,30.833647],[108.18218,30.824211],[108.167106,30.827182],[108.157482,30.834771],[108.152179,30.831278],[108.131704,30.832001],[108.126057,30.840875],[108.122866,30.833487],[108.109608,30.82931],[108.105287,30.841356],[108.096646,30.84782],[108.090115,30.871545],[108.101654,30.878007],[108.081817,30.885712],[108.071751,30.892695],[108.069149,30.888281],[108.041112,30.876522],[108.0363,30.8701],[108.029426,30.884508],[108.009392,30.907662],[108.000849,30.911915],[107.994711,30.908665],[107.982435,30.913239],[107.971535,30.911794],[107.957345,30.919858],[107.948261,30.919056],[107.938735,30.940035],[107.936329,30.952749],[107.937409,30.968669],[107.943547,30.989437],[107.971535,30.982421],[107.983123,30.984225],[107.995889,31.004308],[108.003795,31.025389],[108.011062,31.023666],[108.033599,31.036128],[108.043321,31.035407],[108.053289,31.040736],[108.059869,31.053196],[108.050245,31.059966],[108.028984,31.061728],[108.024712,31.089244],[108.01386,31.098735],[108.009294,31.108785],[108.014744,31.115271],[108.025743,31.116351],[108.035318,31.128962],[108.0363,31.139929],[108.045629,31.145893],[108.056628,31.145652],[108.055253,31.156658],[108.069443,31.169383],[108.070278,31.177785],[108.085696,31.188107],[108.089919,31.201867],[108.080737,31.218945],[108.071113,31.218345],[108.076268,31.231822],[108.040081,31.218625],[108.027903,31.221984],[108.031635,31.23682],[108.021422,31.245736],[108.040866,31.253611],[108.059967,31.254971],[108.066399,31.261766],[108.080589,31.261446],[108.092374,31.265764],[108.094485,31.275036],[108.111916,31.286586],[108.146533,31.30277],[108.16141,31.313757],[108.162834,31.31971],[108.180462,31.325782],[108.185519,31.338005],[108.180609,31.349227],[108.171182,31.356975],[108.158906,31.360289],[108.154143,31.37075],[108.157826,31.376659],[108.175257,31.382608],[108.182868,31.393027],[108.203392,31.395382],[108.216306,31.411188],[108.216551,31.427031],[108.210561,31.435769],[108.225586,31.453004],[108.223131,31.46517],[108.210806,31.467883],[108.206829,31.464293],[108.193326,31.468202],[108.190478,31.491492],[108.218417,31.496197],[108.226764,31.505846],[108.236683,31.506365],[108.254801,31.498829],[108.259564,31.502497],[108.276995,31.501181],[108.281709,31.507282],[108.295998,31.503494],[108.311415,31.506684],[108.323298,31.502378],[108.345345,31.514936],[108.346572,31.525141],[108.33906,31.537896],[108.347603,31.545189],[108.381139,31.542599],[108.388652,31.546385],[108.391795,31.560452],[108.377948,31.570413],[108.393611,31.576349],[108.388357,31.586906],[108.402646,31.603874],[108.417916,31.610087],[108.423072,31.621277],[108.442664,31.6337],[108.456461,31.628882],[108.46525,31.61837],[108.468786,31.636169],[108.486168,31.639871],[108.494564,31.649545],[108.506692,31.657307],[108.513272,31.656193],[108.519066,31.665706],[108.532814,31.669129],[108.546464,31.666701],[108.542831,31.673626],[108.561833,31.669726],[108.574501,31.67088],[108.576809,31.664114],[108.608725,31.650421],[108.624388,31.651655],[108.640101,31.637005],[108.64123,31.625179],[108.649381,31.621715],[108.65542,31.626095],[108.67673,31.62275],[108.683899,31.627449],[108.69151,31.625259],[108.701183,31.634098],[108.714686,31.627648],[108.728974,31.634457],[108.736192,31.633302],[108.742281,31.640906],[108.755342,31.647077],[108.758141,31.664313],[108.770612,31.682142],[108.782888,31.688828],[108.794525,31.684251],[108.809894,31.685764],[108.840533,31.684371],[108.860517,31.681068],[108.865378,31.671079],[108.879421,31.663835],[108.888407,31.654999],[108.898227,31.65484],[108.892728,31.642578],[108.893268,31.632187],[108.887719,31.625657],[108.895821,31.614587],[108.894888,31.606025],[108.877997,31.602799],[108.865133,31.592801],[108.853398,31.578939],[108.837096,31.574237],[108.824133,31.578899],[108.820303,31.574596],[108.801399,31.574078],[108.794034,31.551366],[108.777094,31.543635],[108.769483,31.529845],[108.766881,31.513621],[108.761087,31.503893],[108.748026,31.505208],[108.730055,31.499746],[108.721707,31.503255],[108.703982,31.503972],[108.694554,31.499347],[108.69971,31.491652],[108.697255,31.476737],[108.703098,31.463814],[108.726617,31.455118],[108.740071,31.441834],[108.752298,31.443749],[108.759908,31.438602],[108.757797,31.430941],[108.742084,31.420087],[108.740022,31.407676],[108.731528,31.403285],[108.736389,31.395742],[108.729956,31.390752],[108.712525,31.394584],[108.694554,31.387199],[108.693474,31.377418],[108.709186,31.374983],[108.696567,31.359011],[108.701527,31.348988],[108.698237,31.343956],[108.683261,31.34084],[108.644176,31.339482],[108.63578,31.329896],[108.639806,31.31955],[108.659054,31.298535],[108.654586,31.289184],[108.63632,31.283509],[108.643489,31.268721],[108.631262,31.257249],[108.622768,31.259488],[108.618643,31.252212],[108.596646,31.230622],[108.588741,31.201587],[108.587759,31.185066],[108.578036,31.180065],[108.583585,31.174864],[108.598414,31.170943],[108.601851,31.160099],[108.576956,31.142851],[108.567823,31.140529],[108.562717,31.130443],[108.562619,31.115791],[108.547544,31.105261],[108.558887,31.089404],[108.537921,31.095491],[108.539934,31.082957],[108.53031,31.083838],[108.510964,31.07791],[108.511995,31.074145],[108.488181,31.064733],[108.486217,31.057322],[108.476691,31.052795],[108.48003,31.037811],[108.474334,31.022544],[108.451256,31.013527],[108.432156,31.012725],[108.418015,31.006072],[108.41497,30.998897]]]]}},{"type":"Feature","properties":{"adcode":500155,"name":"梁平区","center":[107.800034,30.672168],"centroid":[107.719234,30.658344],"childrenNum":0,"level":"district","subFeatureIndex":24,"acroutes":[100000,500000]},"geometry":{"type":"MultiPolygon","coordinates":[[[[107.876131,30.813287],[107.88492,30.806138],[107.905592,30.77601],[107.908243,30.762911],[107.918653,30.75829],[107.959112,30.719262],[108.011405,30.709814],[108.03517,30.715362],[108.047544,30.723684],[108.074894,30.723121],[108.086678,30.713714],[108.074844,30.696304],[108.082259,30.677926],[108.079558,30.664532],[108.0554,30.660027],[108.042585,30.662481],[108.025645,30.648844],[108.023091,30.63617],[108.016954,30.629571],[108.025252,30.60289],[108.033697,30.592424],[108.028051,30.587432],[108.034778,30.574187],[108.029622,30.561544],[108.003795,30.542174],[107.990243,30.538871],[107.985676,30.531017],[107.972615,30.521913],[107.958621,30.531017],[107.953711,30.51434],[107.942025,30.498828],[107.939864,30.485893],[107.924839,30.494074],[107.916001,30.495323],[107.909422,30.502938],[107.897883,30.502938],[107.88546,30.512124],[107.886884,30.539556],[107.891352,30.54608],[107.885411,30.549544],[107.870386,30.547248],[107.860713,30.559088],[107.826145,30.554417],[107.829239,30.544671],[107.814017,30.521631],[107.819173,30.50882],[107.818142,30.497539],[107.810629,30.482428],[107.817455,30.471466],[107.80621,30.470861],[107.796488,30.479204],[107.796488,30.484805],[107.77783,30.497821],[107.777535,30.506121],[107.767911,30.513736],[107.757894,30.514058],[107.748123,30.521269],[107.741347,30.517885],[107.715716,30.482589],[107.695241,30.460986],[107.679479,30.438612],[107.661803,30.420387],[107.656205,30.431193],[107.673538,30.453851],[107.670346,30.464493],[107.660772,30.470136],[107.636957,30.470498],[107.637743,30.483032],[107.629298,30.485611],[107.611719,30.47211],[107.610197,30.48009],[107.593994,30.475174],[107.570523,30.47731],[107.562225,30.487949],[107.553436,30.491092],[107.55157,30.50322],[107.544352,30.498869],[107.533452,30.500843],[107.527559,30.490487],[107.516266,30.489198],[107.509097,30.495363],[107.496036,30.494638],[107.480029,30.478599],[107.463629,30.481984],[107.446837,30.49766],[107.425527,30.510835],[107.404855,30.516112],[107.408734,30.521551],[107.419929,30.516475],[107.433825,30.523565],[107.442859,30.535287],[107.42754,30.547611],[107.460241,30.571329],[107.46741,30.586305],[107.485332,30.598341],[107.493728,30.618988],[107.515431,30.642045],[107.516806,30.647838],[107.499179,30.660148],[107.477427,30.664774],[107.469718,30.677604],[107.456559,30.682712],[107.460929,30.687498],[107.458621,30.704788],[107.437065,30.721031],[107.425674,30.746756],[107.439029,30.747077],[107.44502,30.752503],[107.43957,30.759776],[107.446837,30.770103],[107.44556,30.778179],[107.453809,30.77167],[107.466379,30.774041],[107.460339,30.784165],[107.47345,30.785772],[107.47777,30.799792],[107.493778,30.803688],[107.490193,30.810757],[107.498982,30.810757],[107.489997,30.821118],[107.492108,30.833165],[107.482926,30.838305],[107.514793,30.854926],[107.523288,30.848222],[107.526626,30.839429],[107.535465,30.84766],[107.556529,30.846295],[107.560654,30.849868],[107.577594,30.848141],[107.584075,30.840473],[107.598266,30.844729],[107.614665,30.839148],[107.616138,30.828588],[107.633766,30.817785],[107.647465,30.823247],[107.670445,30.851996],[107.691951,30.874756],[107.704128,30.872227],[107.715864,30.887839],[107.737714,30.88499],[107.749547,30.873471],[107.750038,30.864801],[107.760349,30.862272],[107.752788,30.850751],[107.757452,30.840232],[107.755341,30.829551],[107.763836,30.817102],[107.775375,30.814853],[107.783722,30.819311],[107.799189,30.814934],[107.817749,30.798024],[107.831399,30.798426],[107.849861,30.792601],[107.876131,30.813287]]]]}},{"type":"Feature","properties":{"adcode":500156,"name":"武隆区","center":[107.75655,29.32376],"centroid":[107.709628,29.373159],"childrenNum":0,"level":"district","subFeatureIndex":25,"acroutes":[100000,500000]},"geometry":{"type":"MultiPolygon","coordinates":[[[[107.401565,29.184694],[107.395378,29.205881],[107.401909,29.218248],[107.399355,29.235714],[107.401025,29.248853],[107.416541,29.264234],[107.421942,29.274636],[107.404069,29.28259],[107.388553,29.281081],[107.391597,29.289279],[107.379764,29.299516],[107.373332,29.298578],[107.38271,29.308609],[107.392039,29.326754],[107.367047,29.341756],[107.350156,29.346892],[107.347308,29.342571],[107.323395,29.339147],[107.318387,29.347789],[107.309893,29.345098],[107.298599,29.352069],[107.293444,29.349704],[107.272428,29.358386],[107.272428,29.37371],[107.263393,29.383571],[107.256176,29.38463],[107.241691,29.379415],[107.237713,29.394817],[107.226666,29.406835],[107.227598,29.418159],[107.240512,29.426795],[107.245422,29.424391],[107.260938,29.429035],[107.262264,29.436162],[107.277338,29.440357],[107.30567,29.465318],[107.313526,29.487912],[107.323248,29.497558],[107.328993,29.509321],[107.348683,29.515547],[107.358601,29.51575],[107.365868,29.522383],[107.380599,29.523197],[107.391548,29.530969],[107.427491,29.505658],[107.431762,29.483475],[107.441386,29.491575],[107.450519,29.490028],[107.463826,29.498617],[107.4625,29.502117],[107.475905,29.50635],[107.478507,29.497151],[107.513664,29.461165],[107.532666,29.423047],[107.546562,29.431845],[107.552798,29.447809],[107.56139,29.453062],[107.574206,29.452533],[107.577446,29.462427],[107.595958,29.480951],[107.613143,29.479526],[107.620558,29.483638],[107.615009,29.512373],[107.607546,29.514652],[107.608135,29.532474],[107.629003,29.539147],[107.651197,29.553304],[107.654634,29.562457],[107.666958,29.573804],[107.687532,29.600481],[107.69804,29.605889],[107.701575,29.615443],[107.709431,29.60906],[107.716404,29.596659],[107.732263,29.585598],[107.757403,29.602636],[107.767862,29.597635],[107.772576,29.585883],[107.781267,29.582142],[107.7685,29.579254],[107.795801,29.567744],[107.791774,29.560952],[107.80351,29.563433],[107.80729,29.554606],[107.818928,29.554647],[107.825851,29.545005],[107.828551,29.556192],[107.836309,29.560179],[107.83847,29.573926],[107.832283,29.581247],[107.831743,29.59243],[107.839943,29.607393],[107.845246,29.628695],[107.842938,29.653569],[107.845786,29.660233],[107.857472,29.667629],[107.87073,29.667995],[107.897146,29.661493],[107.905543,29.662428],[107.922974,29.655235],[107.934218,29.655723],[107.948703,29.623126],[107.949881,29.601701],[107.961715,29.608978],[107.969129,29.620321],[107.979784,29.627435],[108.000259,29.626256],[108.024368,29.619467],[108.046513,29.622679],[108.056039,29.621581],[108.067872,29.614223],[108.076563,29.605726],[108.084026,29.588892],[108.075876,29.577627],[108.066153,29.575472],[108.066988,29.566687],[108.075826,29.557982],[108.074059,29.549073],[108.055793,29.531783],[108.015432,29.504559],[108.017347,29.483719],[108.013959,29.469674],[108.013075,29.448786],[108.002763,29.442108],[108.004286,29.428424],[107.989653,29.416856],[107.992796,29.397383],[107.988426,29.38027],[107.976641,29.36344],[107.983319,29.350397],[107.984301,29.339188],[107.992059,29.325408],[108.003304,29.315174],[107.996282,29.288545],[107.998983,29.273943],[107.99697,29.26248],[108.010325,29.247792],[108.006446,29.229267],[107.997804,29.236857],[107.986756,29.217799],[107.973057,29.210166],[107.970111,29.198492],[107.960143,29.188695],[107.94286,29.178243],[107.934905,29.185102],[107.911975,29.190328],[107.898865,29.184245],[107.903775,29.172282],[107.899896,29.166361],[107.892727,29.134138],[107.895133,29.117185],[107.883889,29.106195],[107.889486,29.085151],[107.883938,29.078163],[107.873086,29.074852],[107.874707,29.057031],[107.849567,29.039289],[107.838421,29.040597],[107.823543,29.034219],[107.785244,29.04722],[107.78981,29.082372],[107.799974,29.106195],[107.810629,29.138345],[107.808567,29.142838],[107.795162,29.146473],[107.781905,29.161992],[107.775227,29.162808],[107.767911,29.17514],[107.760251,29.177712],[107.76089,29.189021],[107.751609,29.199635],[107.739383,29.189021],[107.724751,29.182203],[107.727206,29.175712],[107.718515,29.156152],[107.707565,29.154151],[107.698629,29.141245],[107.66362,29.147535],[107.659446,29.16289],[107.641573,29.16093],[107.629936,29.165585],[107.616924,29.163013],[107.606711,29.165463],[107.600622,29.15897],[107.601015,29.147821],[107.589231,29.150026],[107.585057,29.158357],[107.590164,29.165299],[107.583437,29.16828],[107.580147,29.183591],[107.575237,29.189062],[107.575139,29.20784],[107.565711,29.220982],[107.553387,29.218697],[107.549557,29.210085],[107.532224,29.195471],[107.514891,29.194206],[107.486707,29.174242],[107.473106,29.170975],[107.462353,29.176855],[107.463973,29.195431],[107.441435,29.203962],[107.428473,29.191144],[107.405444,29.188613],[107.401565,29.184694]]]]}},{"type":"Feature","properties":{"adcode":500229,"name":"城口县","center":[108.6649,31.946293],"centroid":[108.735105,31.881846],"childrenNum":0,"level":"district","subFeatureIndex":26,"acroutes":[100000,500000]},"geometry":{"type":"MultiPolygon","coordinates":[[[[109.281611,31.716876],[109.266734,31.714927],[109.225145,31.724951],[109.227403,31.717035],[109.222542,31.701242],[109.228533,31.690817],[109.224261,31.688629],[109.209187,31.69412],[109.178253,31.69587],[109.16696,31.700207],[109.158514,31.69396],[109.148154,31.703669],[109.133325,31.705936],[109.122965,31.700167],[109.092473,31.699531],[109.06149,31.704743],[109.052013,31.696507],[109.038117,31.690777],[109.007036,31.691135],[109.0008,31.686758],[109.007331,31.673188],[109.00134,31.671039],[109.000407,31.657029],[108.992649,31.652969],[108.955529,31.654601],[108.954792,31.66288],[108.937607,31.652969],[108.918113,31.652929],[108.91448,31.660731],[108.906182,31.661248],[108.898227,31.65484],[108.888407,31.654999],[108.879421,31.663835],[108.865378,31.671079],[108.860517,31.681068],[108.840533,31.684371],[108.809894,31.685764],[108.794525,31.684251],[108.782888,31.688828],[108.770612,31.682142],[108.758141,31.664313],[108.755342,31.647077],[108.742281,31.640906],[108.736192,31.633302],[108.728974,31.634457],[108.714686,31.627648],[108.701183,31.634098],[108.69151,31.625259],[108.683899,31.627449],[108.67673,31.62275],[108.65542,31.626095],[108.649381,31.621715],[108.64123,31.625179],[108.640101,31.637005],[108.624388,31.651655],[108.608725,31.650421],[108.576809,31.664114],[108.574501,31.67088],[108.561833,31.669726],[108.542831,31.673626],[108.532225,31.677168],[108.514794,31.69412],[108.524761,31.69973],[108.518673,31.726184],[108.506103,31.734815],[108.535269,31.757681],[108.515727,31.7611],[108.489261,31.774737],[108.488574,31.780302],[108.478213,31.777917],[108.456314,31.783999],[108.454399,31.791075],[108.464072,31.803674],[108.462501,31.812814],[108.455135,31.813927],[108.441436,31.807608],[108.394741,31.826523],[108.384135,31.848611],[108.386197,31.853894],[108.370779,31.852742],[108.353741,31.856396],[108.340974,31.863546],[108.33523,31.876452],[108.326244,31.881615],[108.30842,31.905953],[108.299484,31.911272],[108.289516,31.910955],[108.282691,31.917742],[108.28603,31.938856],[108.275817,31.957625],[108.259368,31.966869],[108.267175,31.973097],[108.265849,31.983728],[108.282151,31.979206],[108.283919,31.986068],[108.297176,31.988527],[108.307094,31.997252],[108.3259,31.984957],[108.337488,31.981705],[108.3505,31.971947],[108.367146,31.984521],[108.369502,31.989876],[108.361401,31.998085],[108.33847,32.009506],[108.32919,32.01926],[108.340091,32.023106],[108.362874,32.036783],[108.364298,32.047248],[108.35978,32.053748],[108.344804,32.060526],[108.344608,32.068253],[108.362825,32.070037],[108.373774,32.077169],[108.395183,32.066311],[108.412712,32.070116],[108.429995,32.061358],[108.44944,32.072969],[108.452091,32.091036],[108.439276,32.094721],[108.431616,32.101693],[108.423465,32.117339],[108.414872,32.126369],[108.406623,32.141337],[108.390862,32.151315],[108.38821,32.157531],[108.369404,32.173325],[108.379175,32.177521],[108.39916,32.194064],[108.406378,32.196201],[108.425282,32.187416],[108.434022,32.192085],[108.457296,32.181479],[108.479342,32.182073],[108.492944,32.194935],[108.509736,32.201187],[108.551031,32.176096],[108.583978,32.172217],[108.592178,32.160223],[108.606024,32.155155],[108.646975,32.128666],[108.654045,32.117418],[108.66691,32.111913],[108.674717,32.103396],[108.714833,32.103713],[108.726421,32.106803],[108.747731,32.099831],[108.752543,32.08759],[108.751708,32.074158],[108.767961,32.065519],[108.776259,32.055096],[108.788682,32.048318],[108.810581,32.047169],[108.837881,32.038805],[108.873529,32.000227],[108.902401,31.984918],[108.91831,31.988249],[108.937116,31.988924],[108.95273,31.979682],[108.968295,31.982538],[108.978213,31.978135],[108.988427,31.979404],[109.020883,31.963219],[109.035122,31.958061],[109.039345,31.96072],[109.05982,31.941356],[109.069935,31.938936],[109.114225,31.905556],[109.124585,31.892137],[109.131901,31.891343],[109.167009,31.87534],[109.190921,31.855681],[109.199563,31.842494],[109.191854,31.827953],[109.196224,31.817543],[109.213606,31.817503],[109.232363,31.809436],[109.239875,31.811304],[109.255293,31.803038],[109.274835,31.800455],[109.274786,31.791075],[109.281268,31.777917],[109.263689,31.773544],[109.254655,31.766905],[109.256177,31.758635],[109.2713,31.756607],[109.27076,31.749291],[109.283085,31.739627],[109.2795,31.723479],[109.281611,31.716876]]]]}},{"type":"Feature","properties":{"adcode":500230,"name":"丰都县","center":[107.73248,29.866424],"centroid":[107.830885,29.884755],"childrenNum":0,"level":"district","subFeatureIndex":27,"acroutes":[100000,500000]},"geometry":{"type":"MultiPolygon","coordinates":[[[[107.701575,29.615443],[107.698482,29.618614],[107.713752,29.642555],[107.718073,29.65682],[107.696616,29.660315],[107.684733,29.666532],[107.674176,29.663362],[107.670101,29.675064],[107.6565,29.686156],[107.64447,29.687821],[107.630427,29.701714],[107.632784,29.719016],[107.640345,29.740701],[107.625075,29.753896],[107.64226,29.76303],[107.638529,29.772976],[107.638627,29.813274],[107.622669,29.802562],[107.605336,29.808161],[107.605238,29.832423],[107.595369,29.835222],[107.604256,29.852014],[107.613585,29.856111],[107.616973,29.865884],[107.626892,29.874522],[107.613094,29.876955],[107.598707,29.888632],[107.602979,29.897389],[107.59473,29.917657],[107.579361,29.923939],[107.573126,29.933827],[107.57946,29.943877],[107.571898,29.951049],[107.56193,29.946146],[107.546807,29.958585],[107.546905,29.965675],[107.53355,29.968551],[107.523779,29.978678],[107.515186,29.959436],[107.500554,29.960611],[107.498197,29.972481],[107.487443,29.972076],[107.471338,29.989453],[107.483908,29.992693],[107.491322,30.004964],[107.491372,30.013306],[107.5308,30.059699],[107.539295,30.064192],[107.53954,30.072407],[107.528296,30.082888],[107.535268,30.088512],[107.55756,30.098344],[107.55815,30.114566],[107.570425,30.122252],[107.579361,30.119582],[107.582897,30.131595],[107.568706,30.139077],[107.572978,30.144374],[107.569983,30.166937],[107.581227,30.174941],[107.597922,30.179631],[107.604501,30.187392],[107.595909,30.198063],[107.605729,30.198628],[107.61005,30.209136],[107.626548,30.20655],[107.632882,30.213097],[107.642801,30.239562],[107.651884,30.241622],[107.656402,30.259598],[107.662588,30.261052],[107.675944,30.252812],[107.673145,30.238754],[107.666762,30.234754],[107.668088,30.22631],[107.675502,30.22336],[107.691264,30.234916],[107.709284,30.237946],[107.705945,30.230876],[107.714685,30.221421],[107.705356,30.224209],[107.704963,30.216491],[107.721216,30.21835],[107.721314,30.230189],[107.728728,30.23132],[107.734129,30.221098],[107.742084,30.225502],[107.745128,30.236774],[107.762019,30.240936],[107.769924,30.236572],[107.769139,30.224573],[107.758336,30.217016],[107.757502,30.21047],[107.765898,30.198224],[107.788436,30.190747],[107.794377,30.185816],[107.808567,30.184239],[107.811759,30.178337],[107.838617,30.168675],[107.845688,30.162974],[107.842103,30.155009],[107.819026,30.13394],[107.812937,30.118935],[107.81878,30.112058],[107.831939,30.108782],[107.84446,30.119865],[107.862186,30.113879],[107.87451,30.09976],[107.88109,30.103199],[107.895919,30.120067],[107.906525,30.112544],[107.908243,30.105748],[107.936378,30.069008],[107.948457,30.066458],[107.967558,30.055611],[107.987297,30.047921],[107.998492,30.053871],[108.007575,30.043508],[108.01661,30.042132],[108.02702,30.029056],[108.018476,30.014804],[108.024859,30.010957],[108.03247,29.990222],[108.018034,29.971589],[108.009687,29.978476],[108.002027,29.977544],[107.993336,29.96689],[108.014695,29.9472],[108.024908,29.934962],[108.036005,29.912225],[108.046316,29.912387],[108.049999,29.906226],[108.035907,29.90197],[108.042536,29.893456],[108.059869,29.889726],[108.071456,29.877157],[108.072488,29.870953],[108.058936,29.857246],[108.084125,29.838873],[108.099199,29.840657],[108.108823,29.848851],[108.122915,29.851771],[108.145992,29.846377],[108.14997,29.83011],[108.167008,29.838305],[108.172998,29.837656],[108.177859,29.822443],[108.190626,29.819441],[108.194014,29.812665],[108.18547,29.801628],[108.194112,29.790712],[108.217484,29.777887],[108.208204,29.764938],[108.204129,29.765182],[108.187925,29.743909],[108.178252,29.749877],[108.172213,29.745533],[108.17457,29.735463],[108.181051,29.734286],[108.169168,29.7087],[108.179529,29.699602],[108.174962,29.686075],[108.156157,29.676121],[108.156304,29.669579],[108.143587,29.659218],[108.149921,29.647636],[108.156107,29.644872],[108.168186,29.648083],[108.17894,29.647839],[108.182033,29.625972],[108.178547,29.619183],[108.167499,29.617679],[108.163374,29.603612],[108.153652,29.599749],[108.132391,29.603815],[108.117366,29.603449],[108.114175,29.599302],[108.098757,29.600684],[108.082161,29.611377],[108.078773,29.618817],[108.067872,29.614223],[108.056039,29.621581],[108.046513,29.622679],[108.024368,29.619467],[108.000259,29.626256],[107.979784,29.627435],[107.969129,29.620321],[107.961715,29.608978],[107.949881,29.601701],[107.948703,29.623126],[107.934218,29.655723],[107.922974,29.655235],[107.905543,29.662428],[107.897146,29.661493],[107.87073,29.667995],[107.857472,29.667629],[107.845786,29.660233],[107.842938,29.653569],[107.845246,29.628695],[107.839943,29.607393],[107.831743,29.59243],[107.832283,29.581247],[107.83847,29.573926],[107.836309,29.560179],[107.828551,29.556192],[107.825851,29.545005],[107.818928,29.554647],[107.80729,29.554606],[107.80351,29.563433],[107.791774,29.560952],[107.795801,29.567744],[107.7685,29.579254],[107.781267,29.582142],[107.772576,29.585883],[107.767862,29.597635],[107.757403,29.602636],[107.732263,29.585598],[107.716404,29.596659],[107.709431,29.60906],[107.701575,29.615443]]]]}},{"type":"Feature","properties":{"adcode":500231,"name":"垫江县","center":[107.348692,30.330012],"centroid":[107.437814,30.253308],"childrenNum":0,"level":"district","subFeatureIndex":28,"acroutes":[100000,500000]},"geometry":{"type":"MultiPolygon","coordinates":[[[[107.453171,30.001441],[107.451501,30.008203],[107.46029,30.01533],[107.436329,30.033833],[107.374068,29.973372],[107.362824,29.979853],[107.347995,29.980501],[107.335573,29.97398],[107.325556,29.973007],[107.307094,29.992328],[107.29418,29.997917],[107.294818,30.002696],[107.31112,30.008203],[107.304688,30.0161],[107.31166,30.02023],[107.307879,30.035493],[107.294867,30.044359],[107.27724,30.043144],[107.279204,30.04873],[107.266045,30.055045],[107.26521,30.062006],[107.247534,30.07528],[107.259072,30.075887],[107.269089,30.081148],[107.271741,30.09446],[107.28328,30.091021],[107.29089,30.097939],[107.286766,30.107892],[107.295555,30.122454],[107.291381,30.136327],[107.274098,30.135841],[107.269482,30.145992],[107.288484,30.171303],[107.277044,30.181086],[107.256568,30.205903],[107.228335,30.223805],[107.239432,30.237582],[107.255979,30.263799],[107.264866,30.289766],[107.277535,30.311246],[107.288779,30.337564],[107.304197,30.354594],[107.31878,30.364278],[107.33901,30.387072],[107.34284,30.401674],[107.341367,30.41212],[107.34554,30.425508],[107.360025,30.45627],[107.381237,30.485329],[107.388848,30.49089],[107.404855,30.516112],[107.425527,30.510835],[107.446837,30.49766],[107.463629,30.481984],[107.480029,30.478599],[107.496036,30.494638],[107.509097,30.495363],[107.516266,30.489198],[107.527559,30.490487],[107.533452,30.500843],[107.544352,30.498869],[107.55157,30.50322],[107.553436,30.491092],[107.562225,30.487949],[107.570523,30.47731],[107.593994,30.475174],[107.610197,30.48009],[107.611719,30.47211],[107.629298,30.485611],[107.637743,30.483032],[107.636957,30.470498],[107.660772,30.470136],[107.670346,30.464493],[107.673538,30.453851],[107.656205,30.431193],[107.661803,30.420387],[107.650362,30.406917],[107.631262,30.398568],[107.622767,30.384652],[107.602488,30.367869],[107.595025,30.351083],[107.583093,30.341801],[107.569836,30.326868],[107.572242,30.321257],[107.597283,30.313224],[107.597824,30.29445],[107.581767,30.287586],[107.587119,30.275188],[107.573322,30.274784],[107.567282,30.268201],[107.57342,30.256367],[107.573862,30.244693],[107.558395,30.244046],[107.554271,30.229583],[107.545825,30.227643],[107.544794,30.221057],[107.553583,30.213177],[107.54828,30.208651],[107.550097,30.19681],[107.563649,30.19875],[107.571505,30.208166],[107.56851,30.219198],[107.577299,30.221461],[107.584861,30.202185],[107.595909,30.198063],[107.604501,30.187392],[107.597922,30.179631],[107.581227,30.174941],[107.569983,30.166937],[107.572978,30.144374],[107.568706,30.139077],[107.582897,30.131595],[107.579361,30.119582],[107.570425,30.122252],[107.55815,30.114566],[107.55756,30.098344],[107.535268,30.088512],[107.528296,30.082888],[107.53954,30.072407],[107.539295,30.064192],[107.5308,30.059699],[107.491372,30.013306],[107.491322,30.004964],[107.483908,29.992693],[107.471338,29.989453],[107.466968,29.998606],[107.453171,30.001441]]]]}},{"type":"Feature","properties":{"adcode":500233,"name":"忠县","center":[108.037518,30.291537],"centroid":[107.914786,30.335722],"childrenNum":0,"level":"district","subFeatureIndex":29,"acroutes":[100000,500000]},"geometry":{"type":"MultiPolygon","coordinates":[[[[108.223622,30.421274],[108.208351,30.408611],[108.186403,30.413854],[108.174619,30.410144],[108.152965,30.395019],[108.133128,30.362624],[108.12262,30.359799],[108.096449,30.358831],[108.084665,30.350115],[108.084419,30.343093],[108.094731,30.344667],[108.117072,30.329169],[108.127874,30.333487],[108.145894,30.334254],[108.163031,30.325294],[108.163473,30.321055],[108.147466,30.302606],[108.147318,30.297115],[108.127334,30.299982],[108.131606,30.288918],[108.129003,30.281125],[108.142212,30.273654],[108.141475,30.265495],[108.126303,30.255357],[108.129494,30.244531],[108.125861,30.235845],[108.121933,30.245824],[108.114273,30.251399],[108.103716,30.246995],[108.093994,30.253459],[108.097038,30.237259],[108.105533,30.232653],[108.101948,30.223482],[108.10843,30.219198],[108.124879,30.227199],[108.127383,30.223684],[108.119379,30.211803],[108.129887,30.210268],[108.120705,30.200568],[108.107595,30.207439],[108.085549,30.17862],[108.072438,30.175144],[108.070965,30.163702],[108.061587,30.157071],[108.075777,30.153917],[108.092374,30.129532],[108.083928,30.111209],[108.0554,30.072043],[108.037233,30.067591],[108.031144,30.072326],[108.034974,30.084183],[108.029622,30.089119],[108.021569,30.078032],[108.010571,30.071355],[108.00733,30.057028],[107.998492,30.053871],[107.987297,30.047921],[107.967558,30.055611],[107.948457,30.066458],[107.936378,30.069008],[107.908243,30.105748],[107.906525,30.112544],[107.895919,30.120067],[107.88109,30.103199],[107.87451,30.09976],[107.862186,30.113879],[107.84446,30.119865],[107.831939,30.108782],[107.81878,30.112058],[107.812937,30.118935],[107.819026,30.13394],[107.842103,30.155009],[107.845688,30.162974],[107.838617,30.168675],[107.811759,30.178337],[107.808567,30.184239],[107.794377,30.185816],[107.788436,30.190747],[107.765898,30.198224],[107.757502,30.21047],[107.758336,30.217016],[107.769139,30.224573],[107.769924,30.236572],[107.762019,30.240936],[107.745128,30.236774],[107.742084,30.225502],[107.734129,30.221098],[107.728728,30.23132],[107.721314,30.230189],[107.721216,30.21835],[107.704963,30.216491],[107.705356,30.224209],[107.714685,30.221421],[107.705945,30.230876],[107.709284,30.237946],[107.691264,30.234916],[107.675502,30.22336],[107.668088,30.22631],[107.666762,30.234754],[107.673145,30.238754],[107.675944,30.252812],[107.662588,30.261052],[107.656402,30.259598],[107.651884,30.241622],[107.642801,30.239562],[107.632882,30.213097],[107.626548,30.20655],[107.61005,30.209136],[107.605729,30.198628],[107.595909,30.198063],[107.584861,30.202185],[107.577299,30.221461],[107.56851,30.219198],[107.571505,30.208166],[107.563649,30.19875],[107.550097,30.19681],[107.54828,30.208651],[107.553583,30.213177],[107.544794,30.221057],[107.545825,30.227643],[107.554271,30.229583],[107.558395,30.244046],[107.573862,30.244693],[107.57342,30.256367],[107.567282,30.268201],[107.573322,30.274784],[107.587119,30.275188],[107.581767,30.287586],[107.597824,30.29445],[107.597283,30.313224],[107.572242,30.321257],[107.569836,30.326868],[107.583093,30.341801],[107.595025,30.351083],[107.602488,30.367869],[107.622767,30.384652],[107.631262,30.398568],[107.650362,30.406917],[107.661803,30.420387],[107.679479,30.438612],[107.695241,30.460986],[107.715716,30.482589],[107.741347,30.517885],[107.748123,30.521269],[107.757894,30.514058],[107.767911,30.513736],[107.777535,30.506121],[107.77783,30.497821],[107.796488,30.484805],[107.796488,30.479204],[107.80621,30.470861],[107.817455,30.471466],[107.810629,30.482428],[107.818142,30.497539],[107.819173,30.50882],[107.814017,30.521631],[107.829239,30.544671],[107.826145,30.554417],[107.860713,30.559088],[107.870386,30.547248],[107.885411,30.549544],[107.891352,30.54608],[107.886884,30.539556],[107.88546,30.512124],[107.897883,30.502938],[107.909422,30.502938],[107.916001,30.495323],[107.924839,30.494074],[107.939864,30.485893],[107.942025,30.498828],[107.953711,30.51434],[107.958621,30.531017],[107.972615,30.521913],[107.985676,30.531017],[107.990243,30.538871],[108.003795,30.542174],[108.029622,30.561544],[108.034778,30.574187],[108.052847,30.572094],[108.062667,30.574429],[108.072537,30.582159],[108.083339,30.579582],[108.088593,30.572617],[108.103863,30.573382],[108.105631,30.591458],[108.111621,30.59343],[108.127187,30.586104],[108.126647,30.577972],[108.120067,30.576965],[108.12645,30.564],[108.143587,30.566215],[108.153063,30.545879],[108.152523,30.535931],[108.163374,30.540805],[108.171378,30.539314],[108.165633,30.524411],[108.175552,30.510633],[108.184537,30.518167],[108.195045,30.514501],[108.207811,30.49766],[108.230496,30.476705],[108.232755,30.45502],[108.241937,30.443773],[108.223622,30.421274]]]]}},{"type":"Feature","properties":{"adcode":500235,"name":"云阳县","center":[108.697698,30.930529],"centroid":[108.856912,31.036349],"childrenNum":0,"level":"district","subFeatureIndex":30,"acroutes":[100000,500000]},"geometry":{"type":"MultiPolygon","coordinates":[[[[108.90952,30.581273],[108.869896,30.610979],[108.871565,30.618103],[108.901713,30.646792],[108.899946,30.676438],[108.896312,30.684039],[108.884331,30.687337],[108.883546,30.695661],[108.872007,30.690112],[108.836016,30.678449],[108.828699,30.679414],[108.823347,30.69168],[108.818094,30.693771],[108.785883,30.683516],[108.779254,30.685125],[108.781022,30.697028],[108.79261,30.706558],[108.789762,30.714277],[108.763444,30.713031],[108.766586,30.720548],[108.762609,30.728106],[108.76639,30.74141],[108.754998,30.740044],[108.749842,30.74555],[108.740169,30.775527],[108.74724,30.782116],[108.740808,30.787259],[108.738549,30.808026],[108.733393,30.81405],[108.715177,30.815094],[108.699955,30.811841],[108.698482,30.822885],[108.685127,30.835976],[108.685078,30.845773],[108.671968,30.852116],[108.665977,30.867972],[108.653014,30.89105],[108.634798,30.885271],[108.625419,30.875358],[108.621589,30.888561],[108.623013,30.912837],[108.628169,30.918253],[108.619233,30.926999],[108.61884,30.934741],[108.608578,30.93807],[108.593307,30.920259],[108.566448,30.912396],[108.552602,30.915405],[108.537577,30.958123],[108.523632,30.973159],[108.531243,30.978051],[108.533894,30.996251],[108.51666,30.990559],[108.506643,30.992604],[108.501094,30.98651],[108.50409,30.977289],[108.496626,30.972839],[108.486413,30.977008],[108.460537,30.967426],[108.454743,30.970232],[108.45327,30.988755],[108.455626,30.994728],[108.440356,31.002545],[108.426509,30.998216],[108.41497,30.998897],[108.418015,31.006072],[108.432156,31.012725],[108.451256,31.013527],[108.474334,31.022544],[108.48003,31.037811],[108.476691,31.052795],[108.486217,31.057322],[108.488181,31.064733],[108.511995,31.074145],[108.510964,31.07791],[108.53031,31.083838],[108.539934,31.082957],[108.537921,31.095491],[108.558887,31.089404],[108.547544,31.105261],[108.562619,31.115791],[108.562717,31.130443],[108.567823,31.140529],[108.576956,31.142851],[108.601851,31.160099],[108.598414,31.170943],[108.583585,31.174864],[108.578036,31.180065],[108.587759,31.185066],[108.588741,31.201587],[108.596646,31.230622],[108.618643,31.252212],[108.622768,31.259488],[108.631262,31.257249],[108.643489,31.268721],[108.63632,31.283509],[108.654586,31.289184],[108.659054,31.298535],[108.639806,31.31955],[108.63578,31.329896],[108.644176,31.339482],[108.683261,31.34084],[108.698237,31.343956],[108.701527,31.348988],[108.696567,31.359011],[108.709186,31.374983],[108.693474,31.377418],[108.694554,31.387199],[108.712525,31.394584],[108.729956,31.390752],[108.736389,31.395742],[108.731528,31.403285],[108.740022,31.407676],[108.742084,31.420087],[108.757797,31.430941],[108.759908,31.438602],[108.779205,31.435251],[108.800221,31.425155],[108.809894,31.417414],[108.795752,31.403086],[108.798748,31.396859],[108.816866,31.390233],[108.83248,31.375302],[108.822071,31.370271],[108.823053,31.356815],[108.834739,31.35382],[108.837096,31.346432],[108.865035,31.343716],[108.869896,31.339562],[108.887572,31.336007],[108.893268,31.342358],[108.89042,31.354738],[108.892826,31.364641],[108.886394,31.372148],[108.88988,31.383566],[108.900142,31.387558],[108.908146,31.383566],[108.916837,31.387399],[108.927197,31.386001],[108.936035,31.390991],[108.948409,31.382728],[108.962452,31.385722],[108.971487,31.380812],[108.983418,31.385762],[108.992207,31.380812],[109.020146,31.375781],[109.029181,31.370032],[109.05162,31.367117],[109.055352,31.357054],[109.050294,31.340721],[109.055057,31.326301],[109.033305,31.290862],[109.042978,31.283349],[109.062717,31.276355],[109.068069,31.27008],[109.072685,31.247015],[109.087464,31.225703],[109.092571,31.211986],[109.092816,31.192387],[109.074305,31.189467],[109.067431,31.179465],[109.048969,31.186787],[109.048576,31.164341],[109.055008,31.155537],[109.056187,31.132604],[109.080246,31.128641],[109.100231,31.121636],[109.100034,31.102579],[109.093946,31.09437],[109.096646,31.078391],[109.095271,31.061007],[109.119528,31.058123],[109.131557,31.054077],[109.145748,31.056921],[109.165045,31.068057],[109.190774,31.066335],[109.197648,31.053276],[109.214637,31.047907],[109.225243,31.053837],[109.228778,31.046866],[109.239875,31.04314],[109.244884,31.032201],[109.251021,31.029276],[109.238009,31.006432],[109.217583,30.982421],[109.211642,30.96935],[109.218221,30.963857],[109.220333,30.945369],[109.218762,30.926317],[109.215472,30.920781],[109.201822,30.927962],[109.200545,30.932936],[109.186306,30.936907],[109.157581,30.940637],[109.150609,30.936265],[109.151934,30.924151],[109.160969,30.916809],[109.162197,30.905776],[109.15547,30.907622],[109.144029,30.902165],[109.150118,30.878247],[109.130477,30.879732],[109.135485,30.866688],[109.108283,30.860145],[109.086531,30.858178],[109.0773,30.869096],[109.054615,30.860908],[109.051767,30.843524],[109.043224,30.831278],[109.05054,30.824773],[109.050785,30.814171],[109.044059,30.809873],[109.048821,30.777215],[109.059575,30.764598],[109.056579,30.754834],[109.047839,30.745309],[109.047348,30.730277],[109.018575,30.718297],[109.019655,30.711784],[109.030801,30.706598],[109.018919,30.696706],[109.024565,30.683154],[109.017544,30.675232],[109.022945,30.663567],[109.01558,30.648884],[109.021766,30.642366],[109.009737,30.627238],[108.999229,30.632066],[108.987494,30.623294],[108.978017,30.629813],[108.967509,30.624823],[108.943842,30.601843],[108.919488,30.589365],[108.90952,30.581273]]]]}},{"type":"Feature","properties":{"adcode":500236,"name":"奉节县","center":[109.465774,31.019967],"centroid":[109.349749,30.95233],"childrenNum":0,"level":"district","subFeatureIndex":31,"acroutes":[100000,500000]},"geometry":{"type":"MultiPolygon","coordinates":[[[[109.103668,30.565812],[109.106123,30.570765],[109.101114,30.579542],[109.102686,30.580146],[109.105534,30.585661],[109.105926,30.610738],[109.112506,30.61271],[109.121737,30.628726],[109.120951,30.635768],[109.111917,30.646108],[109.096646,30.638745],[109.088053,30.646631],[109.070181,30.640274],[109.049165,30.645545],[109.045728,30.653189],[109.021766,30.642366],[109.01558,30.648884],[109.022945,30.663567],[109.017544,30.675232],[109.024565,30.683154],[109.018919,30.696706],[109.030801,30.706598],[109.019655,30.711784],[109.018575,30.718297],[109.047348,30.730277],[109.047839,30.745309],[109.056579,30.754834],[109.059575,30.764598],[109.048821,30.777215],[109.044059,30.809873],[109.050785,30.814171],[109.05054,30.824773],[109.043224,30.831278],[109.051767,30.843524],[109.054615,30.860908],[109.0773,30.869096],[109.086531,30.858178],[109.108283,30.860145],[109.135485,30.866688],[109.130477,30.879732],[109.150118,30.878247],[109.144029,30.902165],[109.15547,30.907622],[109.162197,30.905776],[109.160969,30.916809],[109.151934,30.924151],[109.150609,30.936265],[109.157581,30.940637],[109.186306,30.936907],[109.200545,30.932936],[109.201822,30.927962],[109.215472,30.920781],[109.218762,30.926317],[109.220333,30.945369],[109.218221,30.963857],[109.211642,30.96935],[109.217583,30.982421],[109.238009,31.006432],[109.251021,31.029276],[109.244884,31.032201],[109.239875,31.04314],[109.228778,31.046866],[109.225243,31.053837],[109.214637,31.047907],[109.197648,31.053276],[109.190774,31.066335],[109.165045,31.068057],[109.145748,31.056921],[109.131557,31.054077],[109.119528,31.058123],[109.095271,31.061007],[109.096646,31.078391],[109.093946,31.09437],[109.100034,31.102579],[109.100231,31.121636],[109.080246,31.128641],[109.056187,31.132604],[109.055008,31.155537],[109.048576,31.164341],[109.048969,31.186787],[109.067431,31.179465],[109.074305,31.189467],[109.092816,31.192387],[109.092571,31.211986],[109.087464,31.225703],[109.072685,31.247015],[109.068069,31.27008],[109.062717,31.276355],[109.042978,31.283349],[109.033305,31.290862],[109.055057,31.326301],[109.050294,31.340721],[109.055352,31.357054],[109.05162,31.367117],[109.065712,31.364681],[109.079117,31.370112],[109.102735,31.364162],[109.123357,31.37083],[109.138137,31.366279],[109.176534,31.361527],[109.197206,31.362126],[109.213606,31.358332],[109.224114,31.362206],[109.235014,31.356975],[109.242085,31.362126],[109.266292,31.35985],[109.272577,31.355657],[109.322415,31.34779],[109.326392,31.324064],[109.334396,31.306925],[109.355853,31.295578],[109.354134,31.286826],[109.374757,31.286427],[109.376623,31.276236],[109.39042,31.262326],[109.387867,31.248654],[109.393857,31.242897],[109.415511,31.245496],[109.431617,31.240058],[109.435741,31.231981],[109.45003,31.238979],[109.450766,31.246535],[109.462698,31.250693],[109.479638,31.251772],[109.493533,31.249454],[109.497069,31.244816],[109.512487,31.243217],[109.518526,31.250333],[109.530409,31.253891],[109.55712,31.251053],[109.561883,31.243976],[109.569346,31.244456],[109.581572,31.225743],[109.588201,31.223384],[109.61668,31.229662],[109.629545,31.225703],[109.631951,31.217505],[109.622523,31.204747],[109.624389,31.190027],[109.63033,31.189147],[109.64511,31.177905],[109.668629,31.185466],[109.692493,31.172584],[109.703688,31.169903],[109.727944,31.171743],[109.742773,31.178185],[109.760646,31.175144],[109.770564,31.16166],[109.769533,31.143771],[109.758289,31.129242],[109.764819,31.11495],[109.753428,31.113389],[109.744442,31.100616],[109.727306,31.09473],[109.720431,31.070581],[109.712182,31.063691],[109.691462,31.054037],[109.679333,31.052835],[109.662737,31.042338],[109.605829,31.017655],[109.598611,31.010841],[109.612555,30.995971],[109.61177,30.986911],[109.60082,30.977129],[109.601999,30.962814],[109.596941,30.95327],[109.601557,30.941639],[109.59812,30.936465],[109.603079,30.922345],[109.609904,30.91693],[109.612752,30.90389],[109.594879,30.905415],[109.594584,30.902044],[109.574207,30.900961],[109.561392,30.893698],[109.569543,30.873712],[109.585648,30.871384],[109.588839,30.865885],[109.61506,30.861951],[109.615256,30.848222],[109.608087,30.846214],[109.607203,30.838225],[109.628661,30.820998],[109.636517,30.821922],[109.646435,30.803929],[109.644226,30.794128],[109.649725,30.778782],[109.659153,30.761987],[109.656698,30.76046],[109.660773,30.73727],[109.649038,30.71894],[109.62542,30.702657],[109.602244,30.698838],[109.590656,30.693409],[109.581622,30.670847],[109.588005,30.664693],[109.577104,30.655321],[109.574109,30.646872],[109.562865,30.646752],[109.538756,30.638424],[109.533698,30.641562],[109.541407,30.65166],[109.537921,30.663969],[109.528739,30.663929],[109.514696,30.655401],[109.493337,30.637176],[109.48278,30.623173],[109.465889,30.619511],[109.456511,30.613797],[109.449342,30.603735],[109.437852,30.598059],[109.428032,30.57616],[109.418114,30.560014],[109.393808,30.531138],[109.380846,30.518288],[109.368668,30.500279],[109.352072,30.487183],[109.342841,30.494718],[109.341564,30.512728],[109.337145,30.520826],[109.342252,30.529567],[109.361058,30.550994],[109.361156,30.554739],[109.344265,30.577126],[109.314509,30.59979],[109.323299,30.604137],[109.32816,30.616091],[109.313577,30.610174],[109.299534,30.630577],[109.278813,30.610174],[109.251169,30.592907],[109.227551,30.585661],[109.227845,30.58087],[109.247731,30.583205],[109.222788,30.569597],[109.192787,30.546282],[109.17133,30.547007],[109.164799,30.538187],[109.150609,30.527392],[109.141181,30.525096],[109.139463,30.534562],[109.124389,30.531702],[109.12483,30.538912],[109.113488,30.548658],[109.103668,30.565812]]],[[[109.101114,30.579542],[109.098659,30.579099],[109.092865,30.578737],[109.083585,30.598261],[109.09316,30.609007],[109.105926,30.610738],[109.105534,30.585661],[109.102686,30.580146],[109.101114,30.579542]]],[[[109.098659,30.579099],[109.106123,30.570765],[109.103668,30.565812],[109.092865,30.578737],[109.098659,30.579099]]]]}},{"type":"Feature","properties":{"adcode":500237,"name":"巫山县","center":[109.878928,31.074843],"centroid":[109.901336,31.115213],"childrenNum":0,"level":"district","subFeatureIndex":32,"acroutes":[100000,500000]},"geometry":{"type":"MultiPolygon","coordinates":[[[[109.659153,30.761987],[109.649725,30.778782],[109.644226,30.794128],[109.646435,30.803929],[109.636517,30.821922],[109.628661,30.820998],[109.607203,30.838225],[109.608087,30.846214],[109.615256,30.848222],[109.61506,30.861951],[109.588839,30.865885],[109.585648,30.871384],[109.569543,30.873712],[109.561392,30.893698],[109.574207,30.900961],[109.594584,30.902044],[109.594879,30.905415],[109.612752,30.90389],[109.609904,30.91693],[109.603079,30.922345],[109.59812,30.936465],[109.601557,30.941639],[109.596941,30.95327],[109.601999,30.962814],[109.60082,30.977129],[109.61177,30.986911],[109.612555,30.995971],[109.598611,31.010841],[109.605829,31.017655],[109.662737,31.042338],[109.679333,31.052835],[109.691462,31.054037],[109.712182,31.063691],[109.720431,31.070581],[109.727306,31.09473],[109.744442,31.100616],[109.753428,31.113389],[109.764819,31.11495],[109.758289,31.129242],[109.769533,31.143771],[109.770564,31.16166],[109.760646,31.175144],[109.742773,31.178185],[109.727944,31.171743],[109.703688,31.169903],[109.692493,31.172584],[109.668629,31.185466],[109.64511,31.177905],[109.63033,31.189147],[109.624389,31.190027],[109.622523,31.204747],[109.631951,31.217505],[109.629545,31.225703],[109.61668,31.229662],[109.588201,31.223384],[109.581572,31.225743],[109.569346,31.244456],[109.587366,31.260967],[109.602833,31.262686],[109.597776,31.268442],[109.61285,31.295018],[109.626893,31.295937],[109.644373,31.310641],[109.662443,31.294499],[109.690676,31.296577],[109.698679,31.302171],[109.713803,31.299094],[109.711446,31.31959],[109.716945,31.332013],[109.71503,31.338644],[109.720972,31.349746],[109.730006,31.356176],[109.749892,31.35362],[109.761431,31.346951],[109.775032,31.354179],[109.775425,31.361527],[109.785638,31.361088],[109.789223,31.377857],[109.803315,31.378336],[109.821384,31.387638],[109.830468,31.388317],[109.853496,31.382209],[109.890126,31.392069],[109.911878,31.392149],[109.922828,31.394664],[109.935005,31.414381],[109.940553,31.427869],[109.937804,31.440836],[109.94183,31.448456],[109.938049,31.458748],[109.94291,31.475341],[109.954744,31.468401],[109.967903,31.474304],[109.987789,31.474663],[109.996382,31.469359],[110.003649,31.453642],[110.020687,31.442073],[110.033502,31.439679],[110.034484,31.430822],[110.049411,31.41877],[110.053978,31.410909],[110.089773,31.408674],[110.100084,31.411268],[110.108824,31.408314],[110.115158,31.412265],[110.11889,31.400651],[110.127384,31.393386],[110.140004,31.390472],[110.145307,31.381331],[110.140053,31.368315],[110.14948,31.354299],[110.14732,31.34783],[110.157975,31.333491],[110.151739,31.317872],[110.159644,31.315355],[110.163965,31.30321],[110.156158,31.277315],[110.162443,31.251932],[110.171428,31.250573],[110.174866,31.243497],[110.169612,31.227943],[110.178008,31.204867],[110.176535,31.198067],[110.180218,31.179585],[110.186404,31.169583],[110.196912,31.163581],[110.198876,31.156538],[110.186895,31.145332],[110.1894,31.129482],[110.180218,31.121676],[110.161264,31.116111],[110.146927,31.116912],[110.145847,31.108144],[110.135437,31.106262],[110.12871,31.095131],[110.120117,31.088844],[110.122131,31.072904],[110.13308,31.059806],[110.126648,31.054678],[110.120854,31.032001],[110.140151,31.030638],[110.140986,31.00503],[110.136075,30.986751],[110.163572,30.991641],[110.172165,30.98659],[110.173245,30.979895],[110.161657,30.968308],[110.163769,30.961371],[110.153899,30.953832],[110.145601,30.922145],[110.151837,30.912316],[110.144324,30.897229],[110.124095,30.868133],[110.115306,30.845492],[110.095812,30.829873],[110.095861,30.82156],[110.089527,30.816058],[110.082309,30.799591],[110.052996,30.799591],[110.042488,30.80666],[110.039198,30.820516],[110.03198,30.820476],[110.019607,30.829592],[110.017937,30.855328],[110.005024,30.870381],[110.008215,30.883585],[109.995056,30.887839],[109.975956,30.888682],[109.958377,30.877445],[109.943696,30.87897],[109.940897,30.889685],[109.932304,30.887679],[109.905642,30.899797],[109.894545,30.899797],[109.878244,30.889163],[109.856099,30.880254],[109.81942,30.860225],[109.797619,30.855609],[109.780777,30.848583],[109.759074,30.832804],[109.729613,30.815376],[109.716601,30.80168],[109.718124,30.778661],[109.702657,30.770264],[109.702117,30.783643],[109.692149,30.778902],[109.685373,30.768657],[109.659153,30.761987]]]]}},{"type":"Feature","properties":{"adcode":500238,"name":"巫溪县","center":[109.628912,31.3966],"centroid":[109.35337,31.503107],"childrenNum":0,"level":"district","subFeatureIndex":33,"acroutes":[100000,500000]},"geometry":{"type":"MultiPolygon","coordinates":[[[[109.94291,31.475341],[109.938049,31.458748],[109.94183,31.448456],[109.937804,31.440836],[109.940553,31.427869],[109.935005,31.414381],[109.922828,31.394664],[109.911878,31.392149],[109.890126,31.392069],[109.853496,31.382209],[109.830468,31.388317],[109.821384,31.387638],[109.803315,31.378336],[109.789223,31.377857],[109.785638,31.361088],[109.775425,31.361527],[109.775032,31.354179],[109.761431,31.346951],[109.749892,31.35362],[109.730006,31.356176],[109.720972,31.349746],[109.71503,31.338644],[109.716945,31.332013],[109.711446,31.31959],[109.713803,31.299094],[109.698679,31.302171],[109.690676,31.296577],[109.662443,31.294499],[109.644373,31.310641],[109.626893,31.295937],[109.61285,31.295018],[109.597776,31.268442],[109.602833,31.262686],[109.587366,31.260967],[109.569346,31.244456],[109.561883,31.243976],[109.55712,31.251053],[109.530409,31.253891],[109.518526,31.250333],[109.512487,31.243217],[109.497069,31.244816],[109.493533,31.249454],[109.479638,31.251772],[109.462698,31.250693],[109.450766,31.246535],[109.45003,31.238979],[109.435741,31.231981],[109.431617,31.240058],[109.415511,31.245496],[109.393857,31.242897],[109.387867,31.248654],[109.39042,31.262326],[109.376623,31.276236],[109.374757,31.286427],[109.354134,31.286826],[109.355853,31.295578],[109.334396,31.306925],[109.326392,31.324064],[109.322415,31.34779],[109.272577,31.355657],[109.266292,31.35985],[109.242085,31.362126],[109.235014,31.356975],[109.224114,31.362206],[109.213606,31.358332],[109.197206,31.362126],[109.176534,31.361527],[109.138137,31.366279],[109.123357,31.37083],[109.102735,31.364162],[109.079117,31.370112],[109.065712,31.364681],[109.05162,31.367117],[109.029181,31.370032],[109.020146,31.375781],[108.992207,31.380812],[108.983418,31.385762],[108.971487,31.380812],[108.962452,31.385722],[108.948409,31.382728],[108.936035,31.390991],[108.927197,31.386001],[108.916837,31.387399],[108.908146,31.383566],[108.900142,31.387558],[108.88988,31.383566],[108.886394,31.372148],[108.892826,31.364641],[108.89042,31.354738],[108.893268,31.342358],[108.887572,31.336007],[108.869896,31.339562],[108.865035,31.343716],[108.837096,31.346432],[108.834739,31.35382],[108.823053,31.356815],[108.822071,31.370271],[108.83248,31.375302],[108.816866,31.390233],[108.798748,31.396859],[108.795752,31.403086],[108.809894,31.417414],[108.800221,31.425155],[108.779205,31.435251],[108.759908,31.438602],[108.752298,31.443749],[108.740071,31.441834],[108.726617,31.455118],[108.703098,31.463814],[108.697255,31.476737],[108.69971,31.491652],[108.694554,31.499347],[108.703982,31.503972],[108.721707,31.503255],[108.730055,31.499746],[108.748026,31.505208],[108.761087,31.503893],[108.766881,31.513621],[108.769483,31.529845],[108.777094,31.543635],[108.794034,31.551366],[108.801399,31.574078],[108.820303,31.574596],[108.824133,31.578899],[108.837096,31.574237],[108.853398,31.578939],[108.865133,31.592801],[108.877997,31.602799],[108.894888,31.606025],[108.895821,31.614587],[108.887719,31.625657],[108.893268,31.632187],[108.892728,31.642578],[108.898227,31.65484],[108.906182,31.661248],[108.91448,31.660731],[108.918113,31.652929],[108.937607,31.652969],[108.954792,31.66288],[108.955529,31.654601],[108.992649,31.652969],[109.000407,31.657029],[109.00134,31.671039],[109.007331,31.673188],[109.0008,31.686758],[109.007036,31.691135],[109.038117,31.690777],[109.052013,31.696507],[109.06149,31.704743],[109.092473,31.699531],[109.122965,31.700167],[109.133325,31.705936],[109.148154,31.703669],[109.158514,31.69396],[109.16696,31.700207],[109.178253,31.69587],[109.209187,31.69412],[109.224261,31.688629],[109.228533,31.690817],[109.222542,31.701242],[109.227403,31.717035],[109.225145,31.724951],[109.266734,31.714927],[109.281611,31.716876],[109.302038,31.71067],[109.3232,31.70888],[109.361254,31.708642],[109.389487,31.705101],[109.411632,31.708244],[109.420274,31.720655],[109.425872,31.718786],[109.4462,31.722883],[109.45656,31.722008],[109.459703,31.715205],[109.472714,31.714649],[109.477134,31.720218],[109.491029,31.720973],[109.501095,31.717155],[109.549755,31.730002],[109.572096,31.726343],[109.580394,31.72869],[109.606172,31.714688],[109.617024,31.711585],[109.644913,31.720854],[109.659005,31.716956],[109.683016,31.71978],[109.693376,31.716558],[109.696028,31.70709],[109.709531,31.701122],[109.731086,31.700446],[109.728091,31.688828],[109.731872,31.673148],[109.740612,31.663636],[109.740416,31.635173],[109.737421,31.628683],[109.76423,31.602998],[109.745326,31.596426],[109.746406,31.577982],[109.727502,31.570731],[109.718909,31.556985],[109.735309,31.546106],[109.760204,31.547182],[109.765457,31.549653],[109.788584,31.55045],[109.801007,31.541443],[109.822071,31.553757],[109.83798,31.555272],[109.860174,31.543555],[109.869209,31.530124],[109.878194,31.528848],[109.894594,31.519162],[109.923859,31.521474],[109.934907,31.517727],[109.945267,31.506684],[109.965595,31.50788],[109.98229,31.512504],[109.961323,31.499268],[109.957248,31.490774],[109.942174,31.483238],[109.94291,31.475341]]]]}},{"type":"Feature","properties":{"adcode":500240,"name":"石柱土家族自治县","center":[108.112448,29.99853],"centroid":[108.298494,30.093676],"childrenNum":0,"level":"district","subFeatureIndex":34,"acroutes":[100000,500000]},"geometry":{"type":"MultiPolygon","coordinates":[[[[108.424054,30.488956],[108.414332,30.475818],[108.421206,30.464372],[108.421796,30.448852],[108.411779,30.436919],[108.421206,30.4295],[108.430486,30.415628],[108.421697,30.410547],[108.425331,30.399052],[108.420912,30.394131],[108.399454,30.389412],[108.403284,30.374728],[108.421943,30.366457],[108.432696,30.35411],[108.451011,30.355603],[108.459898,30.359799],[108.46908,30.343819],[108.48273,30.33603],[108.498394,30.316332],[108.51499,30.315162],[108.526382,30.305271],[108.52486,30.294733],[108.533305,30.292108],[108.537921,30.278581],[108.54617,30.276279],[108.545237,30.269978],[108.562029,30.26287],[108.567332,30.254872],[108.58167,30.255882],[108.573519,30.237178],[108.56743,30.23435],[108.568904,30.225623],[108.553829,30.174537],[108.552258,30.163338],[108.56748,30.155697],[108.561489,30.144132],[108.546071,30.104372],[108.533207,30.084183],[108.532323,30.073702],[108.525252,30.073824],[108.516267,30.064232],[108.516414,30.05298],[108.524221,30.058647],[108.531783,30.055085],[108.526185,30.04954],[108.530703,30.043104],[108.528886,30.00545],[108.542634,29.99735],[108.534238,29.971833],[108.519458,29.943512],[108.515874,29.930383],[108.524074,29.911658],[108.524221,29.896821],[108.516169,29.885631],[108.517052,29.865479],[108.509049,29.878617],[108.495693,29.876914],[108.489163,29.867466],[108.468049,29.864181],[108.457394,29.865438],[108.453122,29.871683],[108.433776,29.880077],[108.402793,29.855908],[108.392777,29.863492],[108.386933,29.860004],[108.391598,29.853231],[108.371466,29.84159],[108.372841,29.834127],[108.368177,29.818913],[108.3942,29.816479],[108.383987,29.795501],[108.36091,29.756819],[108.365918,29.748537],[108.368078,29.726042],[108.373922,29.712803],[108.358013,29.720763],[108.350156,29.721047],[108.326391,29.711747],[108.315785,29.722793],[108.30513,29.72588],[108.298895,29.734773],[108.295752,29.729007],[108.27071,29.733149],[108.245669,29.750892],[108.239384,29.745289],[108.227992,29.747076],[108.22097,29.732499],[108.225193,29.725514],[108.217975,29.716336],[108.22156,29.712153],[108.205847,29.69948],[108.208891,29.685343],[108.195143,29.666979],[108.169267,29.658445],[108.168186,29.648083],[108.156107,29.644872],[108.149921,29.647636],[108.143587,29.659218],[108.156304,29.669579],[108.156157,29.676121],[108.174962,29.686075],[108.179529,29.699602],[108.169168,29.7087],[108.181051,29.734286],[108.17457,29.735463],[108.172213,29.745533],[108.178252,29.749877],[108.187925,29.743909],[108.204129,29.765182],[108.208204,29.764938],[108.217484,29.777887],[108.194112,29.790712],[108.18547,29.801628],[108.194014,29.812665],[108.190626,29.819441],[108.177859,29.822443],[108.172998,29.837656],[108.167008,29.838305],[108.14997,29.83011],[108.145992,29.846377],[108.122915,29.851771],[108.108823,29.848851],[108.099199,29.840657],[108.084125,29.838873],[108.058936,29.857246],[108.072488,29.870953],[108.071456,29.877157],[108.059869,29.889726],[108.042536,29.893456],[108.035907,29.90197],[108.049999,29.906226],[108.046316,29.912387],[108.036005,29.912225],[108.024908,29.934962],[108.014695,29.9472],[107.993336,29.96689],[108.002027,29.977544],[108.009687,29.978476],[108.018034,29.971589],[108.03247,29.990222],[108.024859,30.010957],[108.018476,30.014804],[108.02702,30.029056],[108.01661,30.042132],[108.007575,30.043508],[107.998492,30.053871],[108.00733,30.057028],[108.010571,30.071355],[108.021569,30.078032],[108.029622,30.089119],[108.034974,30.084183],[108.031144,30.072326],[108.037233,30.067591],[108.0554,30.072043],[108.083928,30.111209],[108.092374,30.129532],[108.075777,30.153917],[108.061587,30.157071],[108.070965,30.163702],[108.072438,30.175144],[108.085549,30.17862],[108.107595,30.207439],[108.120705,30.200568],[108.129887,30.210268],[108.119379,30.211803],[108.127383,30.223684],[108.124879,30.227199],[108.10843,30.219198],[108.101948,30.223482],[108.105533,30.232653],[108.097038,30.237259],[108.093994,30.253459],[108.103716,30.246995],[108.114273,30.251399],[108.121933,30.245824],[108.125861,30.235845],[108.129494,30.244531],[108.126303,30.255357],[108.141475,30.265495],[108.142212,30.273654],[108.129003,30.281125],[108.131606,30.288918],[108.127334,30.299982],[108.147318,30.297115],[108.147466,30.302606],[108.163473,30.321055],[108.163031,30.325294],[108.145894,30.334254],[108.127874,30.333487],[108.117072,30.329169],[108.094731,30.344667],[108.084419,30.343093],[108.084665,30.350115],[108.096449,30.358831],[108.12262,30.359799],[108.133128,30.362624],[108.152965,30.395019],[108.174619,30.410144],[108.186403,30.413854],[108.208351,30.408611],[108.223622,30.421274],[108.236732,30.409216],[108.254261,30.403529],[108.261479,30.388605],[108.275031,30.405546],[108.296538,30.401109],[108.298944,30.407562],[108.315835,30.425387],[108.317062,30.433129],[108.33248,30.449336],[108.338814,30.470337],[108.344657,30.476987],[108.378734,30.534884],[108.394593,30.536737],[108.404315,30.548295],[108.410404,30.543261],[108.409717,30.532749],[108.402253,30.529688],[108.399553,30.520504],[108.409962,30.517563],[108.412368,30.503059],[108.427786,30.512567],[108.42101,30.497176],[108.424054,30.488956]]]]}},{"type":"Feature","properties":{"adcode":500241,"name":"秀山土家族苗族自治县","center":[108.996043,28.444772],"centroid":[109.018121,28.491722],"childrenNum":0,"level":"district","subFeatureIndex":35,"acroutes":[100000,500000]},"geometry":{"type":"MultiPolygon","coordinates":[[[[108.723377,28.491963],[108.730889,28.517853],[108.753329,28.532972],[108.763984,28.545707],[108.775964,28.544968],[108.785294,28.54924],[108.785981,28.562096],[108.799877,28.583657],[108.815295,28.593471],[108.819174,28.60082],[108.839256,28.604146],[108.854821,28.613136],[108.881484,28.621716],[108.895379,28.614737],[108.915314,28.621962],[108.936723,28.616913],[108.954252,28.610016],[108.961126,28.630213],[108.982633,28.682327],[108.990636,28.67884],[108.999622,28.699228],[109.01941,28.690696],[109.044991,28.719325],[109.05653,28.741879],[109.062128,28.759385],[109.05982,28.768198],[109.094338,28.79234],[109.105681,28.805699],[109.106712,28.816311],[109.092718,28.809305],[109.093455,28.819261],[109.104502,28.826595],[109.111622,28.824669],[109.117465,28.83106],[109.130919,28.832453],[109.147908,28.84552],[109.157188,28.844824],[109.166223,28.852402],[109.175896,28.8515],[109.197599,28.870217],[109.197943,28.875131],[109.211004,28.882788],[109.235505,28.880372],[109.234032,28.863828],[109.242674,28.85105],[109.239679,28.827168],[109.245817,28.812992],[109.246406,28.801683],[109.241888,28.794266],[109.241299,28.776519],[109.261333,28.774962],[109.256177,28.765616],[109.273019,28.760902],[109.278469,28.751514],[109.297668,28.748152],[109.300663,28.739665],[109.28824,28.727322],[109.294672,28.71912],[109.28495,28.713871],[109.271497,28.698941],[109.265015,28.699474],[109.252936,28.691558],[109.266194,28.680194],[109.270907,28.671783],[109.251758,28.660828],[109.221069,28.649133],[109.202902,28.63797],[109.193131,28.636205],[109.181395,28.621716],[109.186355,28.610632],[109.201478,28.598439],[109.236144,28.619417],[109.249401,28.608662],[109.258878,28.605583],[109.278469,28.612439],[109.287013,28.626806],[109.300172,28.626436],[109.306604,28.62069],[109.309354,28.598808],[109.3205,28.579797],[109.304738,28.579017],[109.29482,28.566286],[109.288928,28.546324],[109.27459,28.539217],[109.274688,28.524837],[109.280384,28.5204],[109.271988,28.51399],[109.274344,28.494676],[109.229613,28.474906],[109.215521,28.48214],[109.191756,28.470877],[109.192394,28.464423],[109.176583,28.446169],[109.180708,28.439466],[109.176731,28.43153],[109.168383,28.432064],[109.164946,28.414997],[109.154291,28.417588],[109.157139,28.403398],[109.153653,28.39731],[109.153113,28.38106],[109.144766,28.36382],[109.138579,28.358635],[109.151689,28.350528],[109.150805,28.344684],[109.137744,28.33423],[109.14123,28.320564],[109.126844,28.296932],[109.11614,28.288614],[109.117563,28.278607],[109.095959,28.261804],[109.088004,28.261392],[109.081523,28.24854],[109.085353,28.232803],[109.096106,28.22106],[109.101409,28.201404],[109.089477,28.196252],[109.086384,28.184712],[109.070033,28.191471],[109.06144,28.200126],[109.041603,28.20536],[109.038215,28.217434],[109.026186,28.220154],[109.013812,28.199591],[109.014647,28.17923],[109.009786,28.167893],[109.001537,28.16138],[108.985775,28.161339],[108.979539,28.171274],[108.956609,28.182321],[108.929407,28.190565],[108.927884,28.20025],[108.933187,28.207874],[108.919488,28.217764],[108.91227,28.21558],[108.897245,28.219536],[108.864445,28.206143],[108.855116,28.199879],[108.836212,28.20738],[108.826539,28.22551],[108.821776,28.245121],[108.807389,28.242855],[108.796636,28.22378],[108.773313,28.213478],[108.765309,28.192131],[108.758533,28.196046],[108.758681,28.220236],[108.749548,28.22757],[108.739678,28.226252],[108.737567,28.251424],[108.7276,28.259827],[108.725783,28.280296],[108.741053,28.294914],[108.763738,28.305619],[108.770072,28.314965],[108.76143,28.324557],[108.777929,28.347236],[108.777732,28.367441],[108.783084,28.380402],[108.762805,28.385791],[108.763296,28.398585],[108.779303,28.427418],[108.773509,28.438315],[108.746749,28.450239],[108.749106,28.461052],[108.729416,28.470918],[108.723377,28.491963]]]]}},{"type":"Feature","properties":{"adcode":500242,"name":"酉阳土家族苗族自治县","center":[108.767201,28.839828],"centroid":[108.800286,28.899839],"childrenNum":0,"level":"district","subFeatureIndex":36,"acroutes":[100000,500000]},"geometry":{"type":"MultiPolygon","coordinates":[[[[109.235505,28.880372],[109.211004,28.882788],[109.197943,28.875131],[109.197599,28.870217],[109.175896,28.8515],[109.166223,28.852402],[109.157188,28.844824],[109.147908,28.84552],[109.130919,28.832453],[109.117465,28.83106],[109.111622,28.824669],[109.104502,28.826595],[109.093455,28.819261],[109.092718,28.809305],[109.106712,28.816311],[109.105681,28.805699],[109.094338,28.79234],[109.05982,28.768198],[109.062128,28.759385],[109.05653,28.741879],[109.044991,28.719325],[109.01941,28.690696],[108.999622,28.699228],[108.990636,28.67884],[108.982633,28.682327],[108.961126,28.630213],[108.954252,28.610016],[108.936723,28.616913],[108.915314,28.621962],[108.895379,28.614737],[108.881484,28.621716],[108.854821,28.613136],[108.839256,28.604146],[108.819174,28.60082],[108.815295,28.593471],[108.799877,28.583657],[108.785981,28.562096],[108.785294,28.54924],[108.775964,28.544968],[108.763984,28.545707],[108.753329,28.532972],[108.730889,28.517853],[108.723377,28.491963],[108.709727,28.501087],[108.701428,28.482469],[108.688613,28.482469],[108.671133,28.475276],[108.658661,28.47803],[108.645256,28.468616],[108.641476,28.455707],[108.663915,28.444318],[108.669856,28.431489],[108.688318,28.422318],[108.690921,28.410555],[108.696813,28.404591],[108.693523,28.395171],[108.664701,28.38287],[108.657041,28.362215],[108.659103,28.350322],[108.670102,28.354396],[108.677418,28.345795],[108.667352,28.334436],[108.647466,28.331101],[108.639855,28.333201],[108.630771,28.328014],[108.611573,28.324557],[108.606466,28.336576],[108.598021,28.34205],[108.580099,28.343285],[108.576367,28.364314],[108.577545,28.390193],[108.587415,28.404961],[108.608823,28.407306],[108.609952,28.435683],[108.602833,28.438849],[108.597235,28.456817],[108.586776,28.463066],[108.589182,28.473837],[108.574943,28.497676],[108.578036,28.509018],[108.573224,28.528124],[108.576858,28.533794],[108.58933,28.538601],[108.610934,28.539381],[108.604453,28.589529],[108.618889,28.606527],[108.636025,28.621757],[108.632343,28.638914],[108.623259,28.641418],[108.609019,28.633619],[108.596155,28.64035],[108.585303,28.639653],[108.586482,28.64704],[108.574796,28.660336],[108.564828,28.661156],[108.561146,28.649174],[108.548723,28.64782],[108.53851,28.652703],[108.522208,28.641951],[108.505415,28.635795],[108.500996,28.626642],[108.491274,28.630582],[108.471142,28.627791],[108.461371,28.634153],[108.43903,28.633989],[108.421697,28.643346],[108.39096,28.651759],[108.35217,28.676091],[108.344019,28.673425],[108.332529,28.679579],[108.340238,28.689671],[108.347898,28.710262],[108.347259,28.736302],[108.372498,28.760164],[108.375051,28.767092],[108.385264,28.772216],[108.388996,28.785823],[108.386492,28.801642],[108.382416,28.805781],[108.354232,28.814263],[108.355165,28.831634],[108.346425,28.856333],[108.355312,28.870831],[108.357423,28.893393],[108.350353,28.907107],[108.350549,28.930316],[108.346916,28.941488],[108.339943,28.947872],[108.322954,28.953969],[108.312103,28.997497],[108.326686,29.000932],[108.331989,29.010911],[108.348143,29.027228],[108.373627,29.044849],[108.394446,29.053107],[108.415756,29.051268],[108.424987,29.057277],[108.434906,29.070643],[108.447279,29.066187],[108.456314,29.071951],[108.464858,29.087521],[108.473008,29.08462],[108.492109,29.095245],[108.505464,29.095326],[108.518329,29.100148],[108.527167,29.117798],[108.528198,29.128338],[108.534631,29.133975],[108.55869,29.13953],[108.570769,29.124416],[108.598266,29.105705],[108.587169,29.095081],[108.599396,29.086908],[108.60789,29.109014],[108.615206,29.109709],[108.614568,29.095408],[108.625665,29.08699],[108.622179,29.073422],[108.628906,29.072891],[108.646533,29.081841],[108.661313,29.071624],[108.667205,29.078776],[108.662835,29.090382],[108.669856,29.095939],[108.66416,29.103744],[108.668678,29.108156],[108.681984,29.105623],[108.686698,29.109341],[108.698777,29.101619],[108.700397,29.094427],[108.726912,29.080492],[108.747584,29.092384],[108.749008,29.10881],[108.774295,29.110485],[108.775768,29.124008],[108.784852,29.123272],[108.803756,29.129195],[108.812054,29.122047],[108.832087,29.117267],[108.833266,29.109995],[108.847702,29.105214],[108.855656,29.122659],[108.854625,29.133484],[108.882416,29.1791],[108.896607,29.209024],[108.915265,29.215513],[108.925135,29.222615],[108.925871,29.23347],[108.937607,29.244283],[108.954252,29.272066],[108.93903,29.274065],[108.919783,29.283732],[108.915462,29.293561],[108.903432,29.296416],[108.908784,29.312972],[108.919734,29.326305],[108.956069,29.330953],[108.97237,29.32924],[108.986168,29.336742],[108.985088,29.350479],[108.994761,29.355085],[108.999425,29.363929],[109.009786,29.36022],[109.034729,29.360261],[109.033453,29.378233],[109.039934,29.389805],[109.053191,29.40272],[109.06419,29.401743],[109.080786,29.390661],[109.090361,29.378681],[109.101704,29.373506],[109.112506,29.360995],[109.110002,29.342693],[109.114568,29.332787],[109.108725,29.319333],[109.113881,29.314196],[109.10465,29.293154],[109.106467,29.288545],[109.129986,29.282468],[109.141967,29.270475],[109.118545,29.232409],[109.110395,29.215105],[109.122965,29.199268],[109.123014,29.191267],[109.138824,29.169505],[109.154488,29.172363],[109.16254,29.180693],[109.18007,29.171955],[109.203098,29.151823],[109.215521,29.145289],[109.228533,29.129972],[109.232559,29.120086],[109.22593,29.113508],[109.237273,29.086704],[109.257748,29.086745],[109.266194,29.079552],[109.287847,29.07101],[109.301154,29.070643],[109.312251,29.066351],[109.319616,29.04256],[109.304836,29.020808],[109.295458,29.016391],[109.292365,29.004695],[109.292463,28.987639],[109.284165,28.972299],[109.272331,28.970949],[109.261038,28.950532],[109.25544,28.926141],[109.256864,28.907721],[109.239924,28.892042],[109.235505,28.880372]]]]}},{"type":"Feature","properties":{"adcode":500243,"name":"彭水苗族土家族自治县","center":[108.166551,29.293856],"centroid":[108.266309,29.353956],"childrenNum":0,"level":"district","subFeatureIndex":37,"acroutes":[100000,500000]},"geometry":{"type":"MultiPolygon","coordinates":[[[[108.312103,28.997497],[108.308715,29.003386],[108.309795,29.018436],[108.297863,29.047179],[108.307193,29.077509],[108.301939,29.083067],[108.28657,29.089197],[108.270612,29.090913],[108.268648,29.077795],[108.260203,29.063735],[108.256962,29.041987],[108.24228,29.028372],[108.224653,29.031562],[108.230398,29.046975],[108.215029,29.056132],[108.204718,29.056786],[108.197745,29.070643],[108.171427,29.06537],[108.150068,29.053311],[108.132686,29.054088],[108.130624,29.063326],[108.109854,29.076078],[108.070474,29.086418],[108.035956,29.054047],[108.034532,29.046771],[108.02427,29.038676],[107.993925,29.033851],[107.949292,29.033729],[107.931124,29.035241],[107.908783,29.007353],[107.885215,29.008417],[107.887571,29.000114],[107.883054,28.986535],[107.872006,28.983058],[107.867538,28.960475],[107.842005,28.964648],[107.82811,28.976144],[107.810433,28.984285],[107.821186,29.005758],[107.823543,29.034219],[107.838421,29.040597],[107.849567,29.039289],[107.874707,29.057031],[107.873086,29.074852],[107.883938,29.078163],[107.889486,29.085151],[107.883889,29.106195],[107.895133,29.117185],[107.892727,29.134138],[107.899896,29.166361],[107.903775,29.172282],[107.898865,29.184245],[107.911975,29.190328],[107.934905,29.185102],[107.94286,29.178243],[107.960143,29.188695],[107.970111,29.198492],[107.973057,29.210166],[107.986756,29.217799],[107.997804,29.236857],[108.006446,29.229267],[108.010325,29.247792],[107.99697,29.26248],[107.998983,29.273943],[107.996282,29.288545],[108.003304,29.315174],[107.992059,29.325408],[107.984301,29.339188],[107.983319,29.350397],[107.976641,29.36344],[107.988426,29.38027],[107.992796,29.397383],[107.989653,29.416856],[108.004286,29.428424],[108.002763,29.442108],[108.013075,29.448786],[108.013959,29.469674],[108.017347,29.483719],[108.015432,29.504559],[108.055793,29.531783],[108.074059,29.549073],[108.075826,29.557982],[108.066988,29.566687],[108.066153,29.575472],[108.075876,29.577627],[108.084026,29.588892],[108.076563,29.605726],[108.067872,29.614223],[108.078773,29.618817],[108.082161,29.611377],[108.098757,29.600684],[108.114175,29.599302],[108.117366,29.603449],[108.132391,29.603815],[108.153652,29.599749],[108.163374,29.603612],[108.167499,29.617679],[108.178547,29.619183],[108.182033,29.625972],[108.17894,29.647839],[108.168186,29.648083],[108.169267,29.658445],[108.195143,29.666979],[108.208891,29.685343],[108.205847,29.69948],[108.22156,29.712153],[108.217975,29.716336],[108.225193,29.725514],[108.22097,29.732499],[108.227992,29.747076],[108.239384,29.745289],[108.245669,29.750892],[108.27071,29.733149],[108.295752,29.729007],[108.298895,29.734773],[108.30513,29.72588],[108.315785,29.722793],[108.326391,29.711747],[108.350156,29.721047],[108.358013,29.720763],[108.373922,29.712803],[108.368078,29.726042],[108.365918,29.748537],[108.36091,29.756819],[108.383987,29.795501],[108.3942,29.816479],[108.393169,29.83583],[108.404561,29.834451],[108.408882,29.820658],[108.424496,29.815302],[108.425478,29.804185],[108.416984,29.787344],[108.421304,29.774153],[108.444235,29.776913],[108.445462,29.76437],[108.438588,29.75617],[108.437115,29.740782],[108.460487,29.740904],[108.467656,29.729697],[108.489506,29.723199],[108.506446,29.708172],[108.526676,29.696759],[108.52373,29.683109],[108.503549,29.67669],[108.504139,29.666288],[108.489997,29.642515],[108.487199,29.624102],[108.499965,29.622069],[108.507036,29.611093],[108.512633,29.614467],[108.516709,29.602148],[108.534974,29.588851],[108.534532,29.572177],[108.548379,29.557575],[108.547643,29.547406],[108.536251,29.540001],[108.515334,29.543948],[108.506054,29.536868],[108.494711,29.515099],[108.501242,29.49996],[108.50954,29.50285],[108.539688,29.491697],[108.561686,29.491657],[108.585549,29.477328],[108.581228,29.464911],[108.59257,29.442963],[108.576367,29.41706],[108.555843,29.412701],[108.552995,29.390539],[108.547201,29.381697],[108.550196,29.371754],[108.561538,29.352598],[108.549705,29.328303],[108.549459,29.315378],[108.560409,29.306081],[108.573568,29.302411],[108.584272,29.285812],[108.583192,29.278063],[108.571948,29.265703],[108.575778,29.252362],[108.568314,29.236245],[108.569247,29.224941],[108.555597,29.218738],[108.548919,29.205064],[108.556775,29.184857],[108.574403,29.164115],[108.570671,29.152313],[108.55869,29.13953],[108.534631,29.133975],[108.528198,29.128338],[108.527167,29.117798],[108.518329,29.100148],[108.505464,29.095326],[108.492109,29.095245],[108.473008,29.08462],[108.464858,29.087521],[108.456314,29.071951],[108.447279,29.066187],[108.434906,29.070643],[108.424987,29.057277],[108.415756,29.051268],[108.394446,29.053107],[108.373627,29.044849],[108.348143,29.027228],[108.331989,29.010911],[108.326686,29.000932],[108.312103,28.997497]]]]}}]} + + ); +})); \ No newline at end of file diff --git a/src/assets/chartstheme/echarts-skin.js b/src/assets/chartstheme/echarts-skin.js new file mode 100644 index 0000000..8ffb3fa --- /dev/null +++ b/src/assets/chartstheme/echarts-skin.js @@ -0,0 +1,675 @@ +(function (root, factory) { + if (typeof define === 'function' && define.amd) { + // AMD. Register as an anonymous module. + define(['exports', 'echarts'], factory); + } else if (typeof exports === 'object' && typeof exports.nodeName !== 'string') { + // CommonJS + factory(exports, require('echarts')); + } else { + // Browser globals + factory({}, root.echarts); + } +}(this, function (exports, echarts) { + var log = function (msg) { + if (typeof console !== 'undefined') { + console && console.error && console.error(msg); + } + }; + if (!echarts) { + log('ECharts is not Loaded'); + return; + } + + //color + var color = ['#00C2FF', '#FF2D55', '#C6C600', '#DA8E1E', '#B9302D', '#9E5DFF']; + //颜色 + var backgroundColor = "rgba(0,0,0,0)";//背景色 + var fontSize = 12;//文字大小,label + //grid + var leftGrid = 60; //距离左侧距离 + var rightGrid = 30; //距离右侧距离 + var topGrid = 60; //距离顶部距离 + var bottomGrid = 30; //距离底部距离 + var containLabel = false; //grid区域是否包含坐标轴的刻度标签 + + //标题 + var colorTitle = "#fff"; //主标题颜色 + var fontSizeTitle = 18; //主标题大小 + var colorSubTitle = "#fff"; //主标题颜色 + var fontSizeSubTitle = 12; //主标题大小 + var leftTitle = 15;//主标题距离左侧距离,标题自带5px留白 + var topTitle = 10;//主标题距离顶部距离,标题自带5px留白 + + //图例 + var colorLegend = "#fff"; //图例文字颜色 + var leftLegend = "auto"; + var rightLegend = 0; + var topLegend = 10; + var itemGapLegend = 5;//图例每项之间的间隔。横向布局时为水平间隔,纵向布局时为纵向间隔。 + var itemWidthLegend = 12;//图例标记的图形宽度。 + var itemHeightLegend = 8;//图例标记的图形高度。 + var fontSizeLegend = 12; //图例字号 + var iconLegend = 'rect'; //图例形状 + + //轴线-类目轴 + var showAxisLineLine = true; //是否显示轴线 + var colorAxisLineLine = "#fff"; //轴线颜色 + + var showAxisLineLable = true; //是否显示标签 + var colorAxisLineLable = "rgba(255,255,255,1)"; //标签颜色 + var fontSizeAxisLineLable = 12; //标签文字字号 + + var showAxisLineTick = false; //是否显示刻度 + var colorAxisLineTick = "rgba(255,255,255,.3)"; //刻度颜色 + + var showAxisLineSplitLine = false; //是否显示分割线 + var colorAxisLineSplitLine = ['rgba(255,255,255,.3)']; //分割线颜色 + var colorAxisLineSplitLineType = "dashed"; //分割线类型 + + var showAxisLineSplitArea = false; //是否显示分割区域 + var colorAxisLineSplitArea = ["rgba(250,250,250,0.05)", "rgba(200,200,200,0.02)"]; //分割区域颜色 + + + //轴线-数值轴 + var showValueLineLine = true; //是否显示轴线 + var colorValueLineLine = "#fff"; //轴线颜色 + + var showValueLineLable = true; //是否显示标签 + var colorValueLineLable = "rgba(255,255,255,1)"; //标签颜色 + var fontSizeValueLineLable = 12; //标签文字字号 + + var showValueLineTick = false; //是否显示刻度 + var colorValueLineTick = "rgba(255,255,255,.3)"; //刻度颜色 + + var showValueLineSplitLine = false; //是否显示分割线 + var colorValueLineSplitLine = ["rgba(255,255,255,.2)"]; //分割线颜色 + var colorValueLineSplitLineType = "dashed"; //分割线类型 + + var showValueLineSplitArea = false; //是否显示分割区域 + var colorValueLineSplitArea = ["rgba(250,250,250,0.05)", "rgba(200,200,200,0.02)"]; //分割区域颜色 + + //折线图 + var symbolSizeLine = 6;//标记的图形大小 + var symbolTypeLine = "circle";//标记的图形类型 + var smoothLine = false;//是否平滑显示 + + //雷达图 + var startAngleRadar = 90;//坐标系起始角度,也就是第一个指示器轴的角度。 + var splitNumberRadar = 4;//指示器轴的分割段数 + var symbolSizeRadar = 5;//标记的图形大小 + var symbolTypeRadar = "circle";//标记的图形类型 + var shapeRadar = "polygon";//雷达图绘制类型,支持 多边形'polygon' 和 圆形'circle'。 + var colorNameRadar = "#fff";//name颜色 + var colorAxisLineRadar = "#4496FF";//坐标轴线线的颜色。//rgba(0,120,255,.2) + var colorsplitLineRadar = "#4496FF"; //分隔线颜色//rgba(0,111,255,.2) + var colorsplitAreaRadar = ["rgba(0,0,0,0)", "rgba(0,0,0,.02)"]; //分隔区域颜色 + + + echarts.registerTheme('skinUpp', { + //色卡 + "color": color, + //背景色 + "backgroundColor": backgroundColor, + //文字 + "textStyle": { + 'fontSize' : fontSize, + }, + //网格grid + "grid": { + "left": leftGrid, + "right": rightGrid, + "bottom": bottomGrid, + "top": topGrid, + "containLabel": containLabel, + }, + //标题 + "title": { + // 主标题 + "textStyle": { + "color": colorTitle, + "fontSize": fontSizeTitle, + }, + // 副标题 + "subtextStyle": { + "color": colorSubTitle, + "fontSize": fontSizeSubTitle, + }, + "left": leftTitle, + "top": topTitle, + }, + //折线 + "line": { + "itemStyle": { + "normal": { + "borderWidth": "2" + } + }, + "lineStyle": { + "normal": { + "width": "2" + } + }, + "symbolSize": symbolSizeLine, + "symbol": symbolTypeLine, + "smooth": smoothLine, + }, + //雷达图 + "radar": { + "itemStyle": { + "normal": { + "borderWidth": "5" + } + }, + "lineStyle": { + "normal": { + "width": "2" + } + }, + "smooth": true, + //以上的好像无用 + "startAngle": startAngleRadar, + "splitNumber": splitNumberRadar, + "symbolSize": symbolSizeRadar, + "symbol": symbolTypeRadar, + "shape": shapeRadar, + "name":{ + "textStyle": { + "color": colorNameRadar + } + }, + "axisLine": { + "lineStyle": { + "color": colorAxisLineRadar + } + }, + "splitLine": { + "lineStyle": { + "color": colorsplitLineRadar + } + }, + "splitArea": { + "areaStyle": { + "color": colorsplitAreaRadar + } + }, + }, + //柱状图 + "bar": { + "itemStyle": { + "normal": { + "barBorderWidth": 0, + "barBorderColor": "#ccc", + }, + "emphasis": { + "barBorderWidth": 0, + "barBorderColor": "#ccc" + } + }, + "barMaxWidth": "60%",//最大宽度 + "barWidth": 18, + + }, + //饼图 + "pie": { + "itemStyle": { + "normal": { + "borderWidth": 0, + "borderColor": "#ccc" + }, + "emphasis": { + "borderWidth": 0, + "borderColor": "#ccc" + } + } + }, + //散点(气泡)图 + "scatter": { + "itemStyle": { + "normal": { + "borderWidth": 0, + "borderColor": "#ccc" + }, + "emphasis": { + "borderWidth": 0, + "borderColor": "#ccc" + } + } + }, + //箱形图 + "boxplot": { + "itemStyle": { + "normal": { + "borderWidth": 0, + "borderColor": "#ccc" + }, + "emphasis": { + "borderWidth": 0, + "borderColor": "#ccc" + } + } + }, + //平行坐标系的系列 + "parallel": { + "itemStyle": { + "normal": { + "borderWidth": 0, + "borderColor": "#ccc" + }, + "emphasis": { + "borderWidth": 0, + "borderColor": "#ccc" + } + } + }, + //桑基图 + "sankey": { + "itemStyle": { + "normal": { + "borderWidth": 0, + "borderColor": "#ccc" + }, + "emphasis": { + "borderWidth": 0, + "borderColor": "#ccc" + } + } + }, + //漏斗图 + "funnel": { + "itemStyle": { + "normal": { + "borderWidth": 0, + "borderColor": "#ccc" + }, + "emphasis": { + "borderWidth": 0, + "borderColor": "#ccc" + } + } + }, + //仪表盘 + "gauge": { + "itemStyle": { + "normal": { + "borderWidth": 0, + "borderColor": "#ccc" + }, + "emphasis": { + "borderWidth": 0, + "borderColor": "#ccc" + } + } + }, + //K线图 + "candlestick": { + "itemStyle": { + "normal": { + "color": "#edafda", + "color0": "transparent", + "borderColor": "#d680bc", + "borderColor0": "#8fd3e8", + "borderWidth": "2" + } + } + }, + //关系图 + "graph": { + "itemStyle": { + "normal": { + "borderWidth": 0, + "borderColor": "#ccc" + } + }, + "lineStyle": { + "normal": { + "width": 1, + "color": "#aaaaaa" + } + }, + "symbolSize": "6", + "symbol": "emptyCircle", + "smooth": true, + "color": [ + "#516b91", + "#59c4e6", + "#edafda", + "#93b7e3", + "#a5e7f0", + "#cbb0e3" + ], + "label": { + "normal": { + "textStyle": { + "color": "#eeeeee" + } + } + } + }, + //地图 + "map": { + "itemStyle": { + "normal": { + "areaColor": "#f3f3f3", + "borderColor": "#516b91", + "borderWidth": 0.5 + }, + "emphasis": { + "areaColor": "rgba(165,231,240,1)", + "borderColor": "#516b91", + "borderWidth": 1 + } + }, + "label": { + "normal": { + "textStyle": { + "color": "#000000" + } + }, + "emphasis": { + "textStyle": { + "color": "rgb(81,107,145)" + } + } + } + }, + //地理坐标系组件 + "geo": { + "itemStyle": { + "normal": { + "areaColor": "#f3f3f3", + "borderColor": "#516b91", + "borderWidth": 0.5 + }, + "emphasis": { + "areaColor": "rgba(165,231,240,1)", + "borderColor": "#516b91", + "borderWidth": 1 + } + }, + "label": { + "normal": { + "textStyle": { + "color": "#000000" + } + }, + "emphasis": { + "textStyle": { + "color": "rgb(81,107,145)" + } + } + } + }, + //类目轴 + "categoryAxis": { + //轴线 + "axisLine": { + "show": showAxisLineLine, + "lineStyle": { + "color": colorAxisLineLine, + } + }, + //刻度 + "axisTick": { + "show": showAxisLineTick, + "lineStyle": { + "color": colorAxisLineTick, + } + }, + //标签 + "axisLabel": { + "show": showAxisLineLable, + "textStyle": { + "color": colorAxisLineLable, + "fontSize": fontSizeAxisLineLable, + } + }, + //分割线 + "splitLine": { + "show": showAxisLineSplitLine, + "lineStyle": { + "color": colorAxisLineSplitLine, + "type": colorAxisLineSplitLineType, + } + }, + //分割区域 + "splitArea": { + "show": showAxisLineSplitArea, + "areaStyle": { + "color": colorAxisLineSplitArea, + } + } + }, + //数值轴 + "valueAxis": { + //轴线 + "axisLine": { + "show": showValueLineLine, + "lineStyle": { + "color": colorValueLineLine, + } + }, + //刻度 + "axisTick": { + "show": showValueLineTick, + "lineStyle": { + "color": colorValueLineTick, + } + }, + //标签 + "axisLabel": { + "show": showValueLineLable, + "textStyle": { + "color": colorValueLineLable, + "fontSize": fontSizeValueLineLable, + } + }, + //分割线 + "splitLine": { + "show": showValueLineSplitLine, + "lineStyle": { + "color": colorValueLineSplitLine, + "type": colorValueLineSplitLineType, + } + }, + //分割区域 + "splitArea": { + "show": showValueLineSplitArea, + "areaStyle": { + "color": colorValueLineSplitArea, + } + } + }, + "logAxis": { + "axisLine": { + "show": true, + "lineStyle": { + "color": "#cccccc" + } + }, + "axisTick": { + "show": false, + "lineStyle": { + "color": "#333" + } + }, + "axisLabel": { + "show": true, + "textStyle": { + "color": "#999999" + } + }, + "splitLine": { + "show": true, + "lineStyle": { + "color": [ + "#eeeeee" + ] + } + }, + "splitArea": { + "show": false, + "areaStyle": { + "color": [ + "rgba(250,250,250,0.05)", + "rgba(200,200,200,0.02)" + ] + } + } + }, + "timeAxis": { + "axisLine": { + "show": true, + "lineStyle": { + "color": "#cccccc" + } + }, + "axisTick": { + "show": false, + "lineStyle": { + "color": "#333" + } + }, + "axisLabel": { + "show": true, + "textStyle": { + "color": "#999999" + } + }, + "splitLine": { + "show": true, + "lineStyle": { + "color": [ + "#eeeeee" + ] + } + }, + "splitArea": { + "show": false, + "areaStyle": { + "color": [ + "rgba(250,250,250,0.05)", + "rgba(200,200,200,0.02)" + ] + } + } + }, + //工具栏 + "toolbox": { + "iconStyle": { + "normal": { + "borderColor": "#999999" + }, + "emphasis": { + "borderColor": "#666666" + } + } + }, + //图例 + "legend": { + //靠右侧,默认5px留白 + "left": leftLegend, + "right": rightLegend, + "top": topLegend, + "itemGap": itemGapLegend, + "itemWidth": itemWidthLegend, + "itemHeight": itemHeightLegend, + "icon": iconLegend, + //文字样式 + "textStyle": { + "color": colorLegend, + "fontSize":fontSizeLegend, + }, + }, + //弹窗 + "tooltip": { + "axisPointer": { + "lineStyle": { + "color": "#cccccc", + "width": 1 + }, + "crossStyle": { + "color": "#cccccc", + "width": 1 + } + } + }, + + "timeline": { + "lineStyle": { + "color": "#8fd3e8", + "width": 1 + }, + "itemStyle": { + "normal": { + "color": "#8fd3e8", + "borderWidth": 1 + }, + "emphasis": { + "color": "#8fd3e8" + } + }, + "controlStyle": { + "normal": { + "color": "#8fd3e8", + "borderColor": "#8fd3e8", + "borderWidth": 0.5 + }, + "emphasis": { + "color": "#8fd3e8", + "borderColor": "#8fd3e8", + "borderWidth": 0.5 + } + }, + "checkpointStyle": { + "color": "#8fd3e8", + "borderColor": "rgba(138,124,168,0.37)" + }, + "label": { + "normal": { + "textStyle": { + "color": "#8fd3e8" + } + }, + "emphasis": { + "textStyle": { + "color": "#8fd3e8" + } + } + } + }, + //视觉映射组件 + "visualMap": { + "color": [ + "#516b91", + "#59c4e6", + "#a5e7f0" + ] + }, + //区域缩放 + "dataZoom": { + "backgroundColor": "rgba(0,0,0,0)", + "dataBackgroundColor": "rgba(255,255,255,0.3)", + "fillerColor": "rgba(167,183,204,0.4)", + "handleColor": "#a7b7cc", + "handleSize": "100%", + "textStyle": { + "color": "#333333" + } + }, + //标注 + "markPoint": { + "label": { + "normal": { + "textStyle": { + "color": "#eeeeee" + } + }, + "emphasis": { + "textStyle": { + "color": "#eeeeee" + } + } + } + } + }); +})); diff --git a/src/assets/chartstheme/westeros.js b/src/assets/chartstheme/westeros.js new file mode 100644 index 0000000..2c1b2c4 --- /dev/null +++ b/src/assets/chartstheme/westeros.js @@ -0,0 +1,513 @@ + +(function (root, factory) { + if (typeof define === 'function' && define.amd) { + // AMD. Register as an anonymous module. + define(['exports', 'echarts'], factory); + } else if (typeof exports === 'object' && typeof exports.nodeName !== 'string') { + // CommonJS + factory(exports, require('echarts')); + } else { + // Browser globals + factory({}, root.echarts); + } +}(this, function (exports, echarts) { + var log = function (msg) { + if (typeof console !== 'undefined') { + console && console.error && console.error(msg); + } + }; + if (!echarts) { + log('ECharts is not Loaded'); + return; + } + echarts.registerTheme('westeros', { + "color": [ + "#516b91", + "#59c4e6", + "#edafda", + "#93b7e3", + "#a5e7f0", + "#cbb0e3" + ], + "backgroundColor": "rgba(0,0,0,0)", + "textStyle": {}, + "title": { + "textStyle": { + "color": "#516b91" + }, + "subtextStyle": { + "color": "#93b7e3" + } + }, + "line": { + "itemStyle": { + "normal": { + "borderWidth": "2" + } + }, + "lineStyle": { + "normal": { + "width": "2" + } + }, + "symbolSize": "6", + "symbol": "emptyCircle", + "smooth": true + }, + "radar": { + "itemStyle": { + "normal": { + "borderWidth": "2" + } + }, + "lineStyle": { + "normal": { + "width": "2" + } + }, + "symbolSize": "6", + "symbol": "emptyCircle", + "smooth": true + }, + "bar": { + "itemStyle": { + "normal": { + "barBorderWidth": 0, + "barBorderColor": "#ccc" + }, + "emphasis": { + "barBorderWidth": 0, + "barBorderColor": "#ccc" + } + } + }, + "pie": { + "itemStyle": { + "normal": { + "borderWidth": 0, + "borderColor": "#ccc" + }, + "emphasis": { + "borderWidth": 0, + "borderColor": "#ccc" + } + } + }, + "scatter": { + "itemStyle": { + "normal": { + "borderWidth": 0, + "borderColor": "#ccc" + }, + "emphasis": { + "borderWidth": 0, + "borderColor": "#ccc" + } + } + }, + "boxplot": { + "itemStyle": { + "normal": { + "borderWidth": 0, + "borderColor": "#ccc" + }, + "emphasis": { + "borderWidth": 0, + "borderColor": "#ccc" + } + } + }, + "parallel": { + "itemStyle": { + "normal": { + "borderWidth": 0, + "borderColor": "#ccc" + }, + "emphasis": { + "borderWidth": 0, + "borderColor": "#ccc" + } + } + }, + "sankey": { + "itemStyle": { + "normal": { + "borderWidth": 0, + "borderColor": "#ccc" + }, + "emphasis": { + "borderWidth": 0, + "borderColor": "#ccc" + } + } + }, + "funnel": { + "itemStyle": { + "normal": { + "borderWidth": 0, + "borderColor": "#ccc" + }, + "emphasis": { + "borderWidth": 0, + "borderColor": "#ccc" + } + } + }, + "gauge": { + "itemStyle": { + "normal": { + "borderWidth": 0, + "borderColor": "#ccc" + }, + "emphasis": { + "borderWidth": 0, + "borderColor": "#ccc" + } + } + }, + "candlestick": { + "itemStyle": { + "normal": { + "color": "#edafda", + "color0": "transparent", + "borderColor": "#d680bc", + "borderColor0": "#8fd3e8", + "borderWidth": "2" + } + } + }, + "graph": { + "itemStyle": { + "normal": { + "borderWidth": 0, + "borderColor": "#ccc" + } + }, + "lineStyle": { + "normal": { + "width": 1, + "color": "#aaa" + } + }, + "symbolSize": "6", + "symbol": "emptyCircle", + "smooth": true, + "color": [ + "#516b91", + "#59c4e6", + "#edafda", + "#93b7e3", + "#a5e7f0", + "#cbb0e3" + ], + "label": { + "normal": { + "textStyle": { + "color": "#eee" + } + } + } + }, + "map": { + "itemStyle": { + "normal": { + "areaColor": "#f3f3f3", + "borderColor": "#516b91", + "borderWidth": 0.5 + }, + "emphasis": { + "areaColor": "#a5e7f0", + "borderColor": "#516b91", + "borderWidth": 1 + } + }, + "label": { + "normal": { + "textStyle": { + "color": "#000" + } + }, + "emphasis": { + "textStyle": { + "color": "#516b91" + } + } + } + }, + "geo": { + "itemStyle": { + "normal": { + "areaColor": "#f3f3f3", + "borderColor": "#516b91", + "borderWidth": 0.5 + }, + "emphasis": { + "areaColor": "#a5e7f0", + "borderColor": "#516b91", + "borderWidth": 1 + } + }, + "label": { + "normal": { + "textStyle": { + "color": "#000" + } + }, + "emphasis": { + "textStyle": { + "color": "#516b91" + } + } + } + }, + "categoryAxis": { + "axisLine": { + "show": true, + "lineStyle": { + "color": "#cccccc" + } + }, + "axisTick": { + "show": false, + "lineStyle": { + "color": "#333" + } + }, + "axisLabel": { + "show": true, + "textStyle": { + "color": "#999999" + } + }, + "splitLine": { + "show": true, + "lineStyle": { + "color": [ + "#eeeeee" + ] + } + }, + "splitArea": { + "show": false, + "areaStyle": { + "color": [ + "rgba(250,250,250,0.05)", + "rgba(200,200,200,0.02)" + ] + } + } + }, + "valueAxis": { + "axisLine": { + "show": true, + "lineStyle": { + "color": "#cccccc" + } + }, + "axisTick": { + "show": false, + "lineStyle": { + "color": "#333" + } + }, + "axisLabel": { + "show": true, + "textStyle": { + "color": "#999999" + } + }, + "splitLine": { + "show": true, + "lineStyle": { + "color": [ + "#eeeeee" + ] + } + }, + "splitArea": { + "show": false, + "areaStyle": { + "color": [ + "rgba(250,250,250,0.05)", + "rgba(200,200,200,0.02)" + ] + } + } + }, + "logAxis": { + "axisLine": { + "show": true, + "lineStyle": { + "color": "#cccccc" + } + }, + "axisTick": { + "show": false, + "lineStyle": { + "color": "#333" + } + }, + "axisLabel": { + "show": true, + "textStyle": { + "color": "#999999" + } + }, + "splitLine": { + "show": true, + "lineStyle": { + "color": [ + "#eeeeee" + ] + } + }, + "splitArea": { + "show": false, + "areaStyle": { + "color": [ + "rgba(250,250,250,0.05)", + "rgba(200,200,200,0.02)" + ] + } + } + }, + "timeAxis": { + "axisLine": { + "show": true, + "lineStyle": { + "color": "#cccccc" + } + }, + "axisTick": { + "show": false, + "lineStyle": { + "color": "#333" + } + }, + "axisLabel": { + "show": true, + "textStyle": { + "color": "#999999" + } + }, + "splitLine": { + "show": true, + "lineStyle": { + "color": [ + "#eeeeee" + ] + } + }, + "splitArea": { + "show": false, + "areaStyle": { + "color": [ + "rgba(250,250,250,0.05)", + "rgba(200,200,200,0.02)" + ] + } + } + }, + "toolbox": { + "iconStyle": { + "normal": { + "borderColor": "#999999" + }, + "emphasis": { + "borderColor": "#666666" + } + } + }, + "legend": { + "textStyle": { + "color": "#999999" + } + }, + "tooltip": { + "axisPointer": { + "lineStyle": { + "color": "#cccccc", + "width": 1 + }, + "crossStyle": { + "color": "#cccccc", + "width": 1 + } + } + }, + "timeline": { + "lineStyle": { + "color": "#8fd3e8", + "width": 1 + }, + "itemStyle": { + "normal": { + "color": "#8fd3e8", + "borderWidth": 1 + }, + "emphasis": { + "color": "#8fd3e8" + } + }, + "controlStyle": { + "normal": { + "color": "#8fd3e8", + "borderColor": "#8fd3e8", + "borderWidth": 0.5 + }, + "emphasis": { + "color": "#8fd3e8", + "borderColor": "#8fd3e8", + "borderWidth": 0.5 + } + }, + "checkpointStyle": { + "color": "#8fd3e8", + "borderColor": "rgba(138,124,168,0.37)" + }, + "label": { + "normal": { + "textStyle": { + "color": "#8fd3e8" + } + }, + "emphasis": { + "textStyle": { + "color": "#8fd3e8" + } + } + } + }, + "visualMap": { + "color": [ + "#516b91", + "#59c4e6", + "#a5e7f0" + ] + }, + "dataZoom": { + "backgroundColor": "rgba(0,0,0,0)", + "dataBackgroundColor": "rgba(255,255,255,0.3)", + "fillerColor": "rgba(167,183,204,0.4)", + "handleColor": "#a7b7cc", + "handleSize": "100%", + "textStyle": { + "color": "#333333" + } + }, + "markPoint": { + "label": { + "normal": { + "textStyle": { + "color": "#eee" + } + }, + "emphasis": { + "textStyle": { + "color": "#eee" + } + } + } + } + }); +})); diff --git a/src/assets/css/newStyle.css b/src/assets/css/newStyle.css new file mode 100644 index 0000000..843324d --- /dev/null +++ b/src/assets/css/newStyle.css @@ -0,0 +1,533 @@ +@charset "UTF-8"; +body, div, dl, dt, dd, ul, ol, li, h1, h2, h3, h4, h5, h6, pre, code, form, fieldset, legend, input, textarea, p, blockquote, th, td, hr, button, article, aside, details, figcaption, figure, footer, header, hgroup, menu, nav, section { margin: 0; padding: 0; } + +h1, h2, h3, h4, h5, h6 { font-size: 100%; font-weight: 400; } + +address, caption, cite, code, dfn, em, th, var { font-style: normal; font-weight: 400; } + +ol, ul, li { list-style: none; } + +a { text-decoration: none; color: #fff; background-color: transparent; -webkit-text-decoration-skip: objects; } + +a:hover { text-decoration: none; color: #93FCFF; } + +a:active, a:focus, a:hover { outline-width: 0; text-decoration: none; outline: none; } + +label { font-weight: 400; } + +fieldset, img { border: 0; } + +html, body { color: #fff; background: #000D12; -webkit-text-size-adjust: 100%; -ms-text-size-adjust: 100%; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; -webkit-tap-highlight-color: transparent; height: 100%; } + +article, aside, details, figcaption, figure, footer, header, hgroup, menu, nav, section { display: block; } + +audio, canvas, video { display: inline-block; *display: inline; *zoom: 1; } + +body, button, input, select, textarea { font-family: Helvetica Neue, Helvetica, Arial, PingFang SC, Hiragino Sans GB, Heiti SC, Microsoft YaHei, WenQuanYi Micro Hei, sans-serif; font-size: 12px; line-height: 1.428571; } + +::-ms-clear, ::-ms-reveal { display: none; } + +button, input, select, textarea { font-size: 100%; } + +button, input[type=button], input[type=reset], input[type=submit] { cursor: pointer; -webkit-appearance: button; } + +button::-moz-focus-inner, [type="button"]::-moz-focus-inner, [type="reset"]::-moz-focus-inner, [type="submit"]::-moz-focus-inner { border-style: none; padding: 0; } + +button:-moz-focusring, [type="button"]:-moz-focusring, [type="reset"]:-moz-focusring, [type="submit"]:-moz-focusring { outline: 1px dotted ButtonText; } + +abbr[title] { border-bottom: none; text-decoration: underline; text-decoration: underline dotted; } + +b, strong { font-weight: bolder; } + +del { text-decoration: line-through; } + +mark { background: #ff0; color: #000; } + +small { font-size: 80%; } + +audio, video { display: inline-block; } + +img { border-style: none; } + +svg:not(:root) { overflow: hidden; } + +table { border-collapse: collapse; border-spacing: 0; } + +th { text-align: inherit; } + +td { word-break: break-all; word-wrap: break-word; } + +textarea { resize: none; } + +iframe { display: block; } + +/*float*/ +.clearfix { *zoom: 1; } +.clearfix:before, .clearfix:after { content: ""; display: table; } +.clearfix:after { clear: both; overflow: hidden; } + +.clear { clear: both; } + +/*盒模型*/ +*, *:before, *:after { -wekbit-box-sizing: border-box; -moz-box-sizing: border-box; -o-box-sizing: border-box; -ms-box-sizing: border-box; box-sizing: border-box; } + +/*被选中的文本背景颜色*/ +::-webkit-selection { color: #fff; background: #93FCFF; } + +::-moz-selection { color: #fff; background: #93FCFF; } + +::selection { color: #fff; background: #93FCFF; } + +/*placeholder颜色*/ +::-webkit-input-placeholder { color: #999; font-weight: 400; } + +:-moz-placeholder { color: #999; font-weight: 400; } + +::-moz-placeholder { color: #999; font-weight: 400; } + +:-ms-input-placeholder { color: #999 !important; font-weight: 400 !important; } + +[class*=" icon-"], [class^=icon-] { font-family: icom !important; speak: none; font-style: normal; font-weight: 400; font-variant: normal; text-transform: none; line-height: 1; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; } + +/*删格系统*/ +.col-1, .col-2, .col-3, .col-4, .col-5, .col-6, .col-7, .col-8, .col-9, .col-10, .col-11, .col-12, .col-13, .col-14, .col-15, .col-16, .col-17, .col-18, .col-19, .col-20, .col-21, .col-22, .col-23, .col-24 { flex: 1; } + +.container { padding-right: 10px; padding-left: 10px; margin-right: auto; margin-left: auto; } +.container .container-pt { padding-top: 20px; } +.container .container-padding { padding: 20px; } + +.row { display: flex; } + +.col-1 { width: 4.1666666667%; } + +.col-2 { width: 8.3333333333%; } + +.col-3 { width: 12.5%; } + +.col-4 { width: 16.6666666667%; } + +.col-5 { width: 20.8333333333%; } + +.col-6 { width: 25%; } + +.col-7 { width: 29.1666666667%; } + +.col-8 { width: 33.3333333333%; } + +.col-9 { width: 37.5%; } + +.col-10 { width: 41.6666666667%; } + +.col-11 { width: 45.8333333333%; } + +.col-12 { width: 50%; } + +.col-13 { width: 54.1666666667%; } + +.col-14 { width: 58.3333333333%; } + +.col-15 { width: 62.5%; } + +.col-16 { width: 66.6666666667%; } + +.col-17 { width: 70.8333333333%; } + +.col-18 { width: 75%; } + +.col-19 { width: 79.1666666667%; } + +.col-20 { width: 83.3333333333%; } + +.col-21 { width: 87.5%; } + +.col-22 { width: 91.6666666667%; } + +.col-23 { width: 95.8333333333%; } + +.col-24 { width: 100%; } + +.row-gap { margin-left: 10px; margin-right: 10px; } +.row-gap .col-1 { padding-left: 0; padding-right: 0; } +.row-gap .col-2 { padding-left: 0; padding-right: 0; } +.row-gap .col-3 { padding-left: 0; padding-right: 0; } +.row-gap .col-4 { padding-left: 0; padding-right: 0; } +.row-gap .col-5 { padding-left: 0; padding-right: 0; } +.row-gap .col-6 { padding-left: 0; padding-right: 0; } +.row-gap .col-7 { padding-left: 0; padding-right: 0; } +.row-gap .col-8 { padding-left: 0; padding-right: 0; } +.row-gap .col-9 { padding-left: 0; padding-right: 0; } +.row-gap .col-10 { padding-left: 0; padding-right: 0; } +.row-gap .col-11 { padding-left: 0; padding-right: 0; } +.row-gap .col-12 { padding-left: 0; padding-right: 0; } +.row-gap .col-13 { padding-left: 0; padding-right: 0; } +.row-gap .col-14 { padding-left: 0; padding-right: 0; } +.row-gap .col-15 { padding-left: 0; padding-right: 0; } +.row-gap .col-16 { padding-left: 0; padding-right: 0; } +.row-gap .col-17 { padding-left: 0; padding-right: 0; } +.row-gap .col-18 { padding-left: 0; padding-right: 0; } +.row-gap .col-19 { padding-left: 0; padding-right: 0; } +.row-gap .col-20 { padding-left: 0; padding-right: 0; } +.row-gap .col-21 { padding-left: 0; padding-right: 0; } +.row-gap .col-22 { padding-left: 0; padding-right: 0; } +.row-gap .col-23 { padding-left: 0; padding-right: 0; } +.row-gap .col-24 { padding-left: 0; padding-right: 0; } + +.header { position: absolute; top: 0; left: 0; width: 100%; height: 0px; background: url(../images/header-bg.png) center center no-repeat; background-size: auto 100%; } +.header:before { content: ""; position: absolute; top: 116px; left: 50%; margin-left: -100px; width: 200px; height: 8px; background-color: #93FCFF; } + +.logo { margin-top: 30px; height: 50px; line-height: 46px; text-align: center; font-size: 40px; letter-spacing: 2.2px; text-indent: 2.2px; font-weight: 500; user-select: none; position: relative; z-index: 10; } +.logo img { width: 118px; height: 50px; vertical-align: top; margin-right: 20px; } + +.notice-box { width: 460px; margin: 8px auto; line-height: 22px; height: 22px; display: flex; position: relative; overflow: hidden; } +.notice-box .notice-icon { width: 28px; } +.notice-box .notice-icon svg { vertical-align: middle; } +.notice-box .notice-txt { position: relative; width: 432px; overflow: hidden; white-space: nowrap; font-size: 16px; } +.notice-box .notice-txt .str_move { white-space: nowrap; position: absolute; left: 0px; } + +.str_move { white-space: nowrap; position: absolute; top: 0; left: 0; cursor: move; } + +.str_move_clone { display: inline-block; vertical-align: top; position: absolute; left: 100%; top: 0; } + +.str_vertical .str_move_clone { left: 0; top: 100%; } + +.str_down .str_move_clone { left: 0; bottom: 100%; } + +.str_vertical .str_move, .str_down .str_move { white-space: normal; width: 100%; } + +.str_static .str_move, .no_drag .str_move, .noStop .str_move { cursor: inherit; } + +.str_wrap img { max-width: none !important; } + +/*网站通用样式及组件*/ +.mt { margin-top: 10px; } + +.mt-lg { margin-top: 20px !important; } + +.mt-sm { margin-top: 5px; } + +.mt-lg { margin-top: 20px; } + +.mt-mlg { margin-top: 30px; } + +.mt-mlger { margin-top: 50px; } + +.show { display: block; } + +.hide { display: none; } + +.vs-show { visibility: visible; } + +.vs-hide { visibility: hidden; } + +.pull-left { float: left; } + +.pull-right { float: right; } + +.text-center { text-align: center; } + +.text-left { text-align: left; } + +.text-right { text-align: right; } + +.text-justify { text-align: justify; } + +.text-default { color: #fff; } + +.text-primary { color: #93FCFF; } + +.text-light, .text-tips { color: #666; } + +.text-lighter { color: #999; } + +.text-lightest { color: #d3d3d3; } + +.text-success { color: #5eb95e; } + +.text-error { color: #f00; } + +.text-warning { color: #f37b1d; } + +.text-danger { color: #B9302D; } + +.text-disabled { color: #eaeded; } + +.text-price { color: #f10214; } + +.text-white { color: #fff; } + +.text-lg { font-size: 16px; } + +.text-mlg { font-size: 18px; } + +.text-blg { font-size: 20px; } + +.text-sm { font-size: 12px; } + +.text-md { font-size: 12px; } + +.text-bold, .text-700 { font-weight: 700; } + +.text-normal, .text-400 { font-weight: 400; } + +.text-underline { text-decoration: underline; } +.text-underline:hover { text-decoration: underline; } + +.text-indent { text-indent: 2em; } + +.text-required { color: #f00; font-weight: 400; } + +.small-size { transform: scale(0.8); margin: 0px 0 0 -1px; display: inline-block; vertical-align: sub; } + +.text-linear { background: linear-gradient(to bottom, #fff, #C0C2C2); -webkit-background-clip: text; color: transparent; } + +.panel, .box-wrap { max-height: 270px; max-width: 590px; background-image: url(../images/panel-bg.png); background-size: 100% 100%; display: flex; flex-direction: column; width: 100%; } +.panel.panel-lg, .box-wrap.panel-lg { width: 120%; } +.panel.panel02, .box-wrap.panel02 { background-image: url(../images/panel-bg02.png); } +.panel.panel03, .box-wrap.panel03 { background-image: url(../images/panel-bg03.png); max-height: 226px; } +.panel.panel04, .box-wrap.panel04 { background-image: url(../images/panel-bg04.png); } +.panel.panel05, .box-wrap.panel05 { background-image: url(../images/panel-bg05.png); max-width: 100%; background-size: 100% 100%; } +.panel.panel06, .box-wrap.panel06 { background-image: url(../images/panel-bg06.png); max-width: none; max-height: 339px; background-size: 100% 100%; } +.panel .panel-hd, .box-wrap .panel-hd { padding: 5px 30px 15px; position: relative; } +.panel .panel-hd .panel-tit, .box-wrap .panel-hd .panel-tit { padding-top: 15px; font-size: 18px; line-height: 26px; } +.panel .panel-hd .panel-more, .box-wrap .panel-hd .panel-more { position: absolute; right: 30px; top: 20px; z-index: 100; transition: .3s opactiy; } +.panel .panel-hd .panel-more:hover, .box-wrap .panel-hd .panel-more:hover { opacity: 0.9; } +.panel .panel-hd + .panel-bd, .box-wrap .panel-hd + .panel-bd { margin-top: -20px; } +.panel .panel-bd, .box-wrap .panel-bd { flex: 1; padding: 20px 30px 20px; display: flex; justify-content: center; align-items: center; } +.panel .panel-bd > div, .box-wrap .panel-bd > div { flex: 1; } + +.box-wrap { margin-left: auto; margin-right: auto; min-width: 300px; max-width: 470px; border: 1px solid #1F6F9B; position: relative; background-image: none; } + +.box-wrap:before { position: absolute; left: 0; right: 0; top: 0; bottom: 0; content: ""; background: linear-gradient(#93FCFF, #93FCFF) left top, linear-gradient(#93FCFF, #93FCFF) left top, linear-gradient(#93FCFF, #93FCFF) right top, linear-gradient(#93FCFF, #93FCFF) right top, linear-gradient(#93FCFF, #93FCFF) left bottom, linear-gradient(#93FCFF, #93FCFF) left bottom, linear-gradient(#93FCFF, #93FCFF) right bottom, linear-gradient(#93FCFF, #93FCFF) right bottom; background-repeat: no-repeat; background-size: 18px 2px, 2px 18px; } + +.chart-item { height: 100%; } + +.table { width: 100%; text-align: center; color: rgba(255, 255, 255, 0.8); } +.table th { background-color: rgba(18, 148, 184, 0.9); line-height: 22px; padding: 7px 5px; font-size: 16px; } +.table td { background-color: rgba(20, 72, 93, 0.7); line-height: 16px; padding: 10px 5px; font-size: 12px; border-top: 1px solid rgba(0, 0, 0, 0.6); } +.table tbody tr { transition: .3s color; } +.table tbody tr:hover { color: #93FCFF; } + +.progress { height: 36px; line-height: 36px; padding: 0 3px; } +.progress .progress-bar { position: relative; margin-top: 2px; margin-bottom: 2px; height: 30px; background-color: transparent; } +.progress .progress-bar-inner { width: 0; max-width: 100%; height: 30px; background-color: #93FCFF; animation: animate-positive 2s; position: relative; } +.progress .progress-bar-inner:before { content: ""; width: 100%; position: absolute; left: 0; top: 0; bottom: 0; background-image: url(../images/barbg.png); background-size: auto 30px; } +.progress .progress-bar-inner.progress-bar-success { background: #5eb95e; } +.progress .progress-bar-inner.progress-bar-error { background: #f00; } +.progress .progress-bar-inner.progress-bar-gradient { background: linear-gradient(to right, #019CFE, #FEFC01); } + +.progress-list .progress-item { height: 44px; line-height: 36px; padding-top: 4px; display: flex; } +.progress-list .progress-name { width: 120px; padding-right: 10px; overflow: hidden; white-space: nowrap; font-size: 16px; color: rgba(255, 255, 255, 0.5); } +.progress-list .progress-num { position: absolute; width: 0px; overflow: hidden; left: 5px; top: 0; width: 42px; white-space: nowrap; z-index: 100; font-weight: 500; font-size: 18px; line-height: 34px; } +.progress-list .progress { border: 1px solid #fff; border-radius: 2px; position: relative; flex: 1; } +.progress-list .progress:before { content: ""; width: 4px; height: 34px; border-radius: 100px; border: 1px solid #fff; position: absolute; left: -8px; top: 0; } + +@font-face { font-family: 'digiface'; src: url("../font/digiface.ttf") format("truetype"); } +.page { position: relative; min-width: 1000px; background: url(../images/bg.png) center center repeat; background-size: 158px 159px; min-height: 100%; } + +.page-side { position: absolute; top: 100px; bottom: 10px; padding: 30px 0px; z-index: 99; display: flex; flex-direction: column; justify-content: space-between; width: 30%; max-width: 678px; } + +.page-left { padding-left: 30px; } +.page-left .num-item { flex: 1; height: auto; } +.page-left .panel { flex: 2; } +.page-left .common-list { flex: 2; margin-bottom: 10px; } + +.page-right { padding-right: 30px; left: auto; right: 0; display: flex; flex-direction: column; align-items: flex-end; justify-content: space-between; } +.page-right div { flex: 1; margin-bottom: 10px; } +.page-right div:last-child { margin-bottom: 0; } +.page-right > .chart-item { margin-bottom: 0px; width: 100%; max-height: 270px; min-height: 190px; } + +.page-center { left: 32%; right: 32%; position: absolute; top: 106px; bottom: 20px; z-index: 100; } + +.page01 .page-center { top: 230px; } +.page01 .page-left { top: 262px; } + +.page-bottom { padding: 0 150px 0 350px; } + +.page-top { position: relative; z-index: 100; left: 0; padding: 160px 30% 0 30px; } +.page-top .num-list { display: flex; padding-top: 0; } +.page-top .num-list .num-item { flex: 1; } +.page-top .num-item { margin-right: 20px; margin-bottom: 0; } + +.page-bd { padding: 40px 30px 10px; display: flex; } +.page-bd .page-map { flex: 1; margin: 0 90px; height: 677px; background-image: url(../images/panel-bg07.png); background-size: 100% 100%; display: flex; align-items: center; padding-right: 60px; } +.page-bd .page-map .chart-item { width: 62%; } +.page-bd .page-map .table-box { overflow: hidden; padding: 20px 0; width: 38%; max-height: 90%; display: flex; flex-direction: column; } +.page-bd .page-map .table-box .table-body { flex: 1; overflow: auto; } +.page-bd .page-map .table-box .table-body::-webkit-scrollbar { display: none; } + +.common-list { padding: 10px 0 0 44px; margin-left: -44px; background-image: url(../images/common-bg.png); background-repeat: no-repeat; background-size: 44px 280px; display: flex; flex-direction: column; justify-content: space-between; max-height: 326px; } +.common-list .list-item { display: block; line-height: 62px; height: 60px; overflow: hidden; width: 200px; background-image: url(../images/common01.png); background-size: cover; text-align: center; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; transition: .3s all; } +.common-list .list-item.is-active, .common-list .list-item:hover { background-image: url(../images/common-active.png); } +.common-list .list-item .list-tit { font-size: 18px; } + +.num-list { padding: 30px 0 0 0px; } + +.num-item { display: block; padding: 12px 22px; height: auto; overflow: hidden; max-width: 346px; background-image: url(../images/numbg.png); background-size: contain; background-repeat: no-repeat; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; transition: .3s color; margin-bottom: 10px; } +.num-item .num-tit { font-size: 20px; line-height: 30px; } +.num-item .num-text { color: #93FCFF; font-weight: 500; font-family: 'digiface'; font-size: 50px; line-height: 62px; letter-spacing: 0.1em; } +.num-item .num-text .unit { font-size: 34px; margin-left: 10px; } + +.main { display: flex; flex-direction: column; padding: 0 30px 10px; height: 93%; } + +.main-top { flex: 2; display: flex; padding: 30px 0 0; max-height: 699px; } + +.main-left { flex: 0.7; display: flex; flex-direction: column; justify-content: space-between; } +.main-left > div { flex: 1; } + +.main-right { flex: 0.8; display: flex; flex-direction: column; justify-content: space-between; } +.main-right > div { flex: 1; } + +.main-bottom { flex: 1; overflow: hidden; margin-top: 10px; display: flex; align-items: center; } +.main-bottom > div { height: 100%; max-height: none; } + +.main-center { padding: 0 50px; flex: 1; display: flex; flex-direction: column; justify-content: space-between; } +.main-center .number-area { flex: 0.5; display: flex; justify-content: space-between; } +.main-center .number-area .number-box { flex: 1; padding-right: 10px; } +.main-center .number-area .number-item { flex: 0.5; } +.main-center > div { flex: 1; } + +.number-area { display: flex; align-items: flex-end; height: 150px; } +.number-area .number-tit { font-size: 22px; line-height: 30px; margin-bottom: 22px; } +.number-area .number-item { margin-left: 5px; } +.number-area .number-item .item-tit { font-size: 18px; line-height: 24px; margin-bottom: 10px; color: rgba(255, 255, 255, 0.8); } +.number-area .number-item .item-txt { font-size: 22px; line-height: 30px; color: #93FCFF; } + +.count-number { display: flex; } +.count-number > li { flex: 1; min-width: 24px; max-width: 50px; line-height: 50px; padding: 10px 0; background: rgba(173, 219, 252, 0.3); background-size: 100% 100%; margin-right: 10px; text-align: center; font-size: 48px; color: #fff; font-style: normal; user-select: none; overflow: hidden; } +.count-number > li:last-child { margin-right: 0; } +.count-number span { display: block; } +.count-number .is-active span { animation: numMove .3s forwards; } + +@keyframes numMove { 100% { transform: translateY(-100%); } } +.total-box { display: flex; flex-direction: column; justify-content: space-between; } +.total-box .total-item { display: flex; padding: 3px 0; text-align: center;color: #fff; } +.total-box .total-item > div { height: 36px; line-height: 36px; font-size: 16px; flex: 1; background-color: rgba(88, 206, 208, 0.16); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; padding: 0 10px; } +.total-box .total-item .total-name { margin-right: 10px; } + +.total-list { margin: 0 0 30px; display: flex; justify-content: space-between; } +.total-list .total-tit { margin-bottom: 10px; color: rgba(255, 255, 255, 0.8); } +.total-list .total-item { margin: 0 5px; } +.total-list .total-num { display: flex; padding: 5px 0 5px 10px; position: relative; background: linear-gradient(to bottom, rgba(11, 68, 138, 0.3), rgba(6, 10, 34, 0.38), rgba(11, 68, 138, 0.3)); } +.total-list .total-num:before { position: absolute; left: 0; right: 0; top: 0; bottom: 0; content: ""; background: linear-gradient(#164C6C, #164C6C) left top, linear-gradient(#164C6C, #164C6C) left top, linear-gradient(#164C6C, #164C6C) right top, linear-gradient(#164C6C, #164C6C) right top, linear-gradient(#164C6C, #164C6C) left bottom, linear-gradient(#164C6C, #164C6C) left bottom, linear-gradient(#164C6C, #164C6C) right bottom, linear-gradient(#164C6C, #164C6C) right bottom; background-repeat: no-repeat; background-size: 50% 1px, 1px 15px, 50% 1px, 1px 15px; } +.total-list .total-num li { margin-right: 10px; height: 32px; line-height: 32px; } +.total-list .total-num li b { vertical-align: middle; display: inline-block; font-weight: 400; width: 3px; height: 3px; border-radius: 50%; background-color: rgba(255, 255, 255, 0.8); } +.total-list .total-num .num-item { width: 20px; background: linear-gradient(to bottom, rgba(214, 239, 254, 0.3), rgba(173, 219, 252, 0.3)); background-size: 100% 100%; margin-right: 10px; text-align: center; font-size: 18px; color: #fff; font-style: normal; user-select: none; overflow: hidden; } +.total-list .total-num .num { display: block; width: 20px; height: 32px; line-height: 32px; } +.total-list .total-num .is-active span { animation: numMove .3s forwards; } + +.login-main { display: flex; flex-direction: column; height: 100%; align-items: center; padding-top: 3%; position: relative; background: url(../images/loginbg.jpg) no-repeat center bottom; background-size: 100% auto; background-repeat: no-repeat; } +.login-main .login-header { width: 100%; background: url(../images/login-header.png) no-repeat center center; height: 320px; background-size: auto 320px; } +.login-main .login-header .logo { margin-top: 66px; font-size: 58px; height: 80px; line-height: 80px; } +.login-main .login-header .logo img { width: 188px; height: 80px; } +.login-main .login-error { margin-top: -50px; margin-bottom: 50px; display: none; } + +.login-item { width: 753px; height: 104px; background-image: url(../images/login-inputbg.png); background-size: auto 100%; background-position: center center; padding: 20px 0 0 236px; margin-bottom: 40px; font-size: 16px; transition: .3s background; } +.login-item .login-icon { display: inline-block; vertical-align: top; width: 60px; line-height: 54px; height: 54px; text-align: center; } +.login-item .login-icon svg { vertical-align: top; margin-top: 15px; } +.login-item:hover, .login-item.is-active { background-image: url(../images/login-inputbg01.png); } +.login-item .login-input { vertical-align: middle; background-color: transparent; border-color: transparent; outline: none; color: #fff; line-height: 54px; height: 54px; width: 350px; } +.login-item.login-btn { background-image: url(../images/loginbtn-bg.png); width: 100%; text-align: center; letter-spacing: 10px; text-indent: 10px; font-size: 20px; padding: 0; font-weight: 500; } +.login-item.login-btn .login-txt { width: 700px; margin: 0 auto; display: block; padding-top: 32px; height: 100%; transition: .3s color; } + +@media all and (max-width: 1100px) { .header { height: 0px; } + .header:before { top: 86px; } + .page-top { padding-top: 98px; padding-right: 35%; } + .page-top .num-item { margin-right: 10px; padding-top: 20px; } + .common-list { background-image: none; } + .logo { margin-top: 10px; font-size: 30px; } + .notice-box { margin-top: 0; } + .page-side { padding-top: 0; padding-bottom: 10px; } + .page-side .num-list { padding-top: 0; } + .page-left { padding-left: 10px; } + .page-right { padding-right: 10px; } + .main { padding-left: 10px; padding-right: 10px; } + .main .panel .panel-bd, .main .box-wrap .panel-bd { padding: 10px; } + .main .main-center { padding-left: 10px; padding-right: 10px; } + .main .main-top { margin-top: 10px; } + .main .count-number li { font-size: 30px; padding: 0; } + .main .number-area .number-tit { font-size: 18px; } + .box-wrap .panel-bd { padding-top: 0; } + .box-wrap .panel-hd { padding-bottom: 0; padding-top: 0; } + .box-wrap .panel-hd .panel-tit { padding-top: 10px; } + .progress-list .progress-item { height: 36px; line-height: 28px; } + .progress-list .progress { line-height: 28px; height: 28px; } + .progress-list .progress:before { height: 28px; } + .progress-list .progress-num { line-height: 26px; } + .progress-list .progress-bar { height: 22px; } + .progress-list .progress-bar .progress-bar-inner { height: 22px; } } +@media all and (max-width: 1440px) { .page-top { padding-left: 10px; } + .page-top .num-item { background-size: 100% 100%; padding-bottom: 0; display: flex; flex-direction: column; justify-content: baseline; } + .page-top .num-item .num-text { font-size: 32px; line-height: 46px; } + .page-top .num-item .num-text .unit { font-size: 26px; } } +@media all and (min-width: 1630px) { .main-bottom { margin-top: 30px; } } +@media all and (max-width: 1630px) { .panel .panel-bd, .panel .panel-hd, .box-wrap .panel-bd, .box-wrap .panel-hd { padding-left: 10px; padding-right: 10px; } } +@media all and (max-height: 620px) { .page-top { padding-top: 105px; } } +@media all and (min-height: 768px) { .main-bottom { flex: 1.2; } } +@media all and (min-height: 820px) { .box-wrap.mt { margin-top: 30px; } + .main-bottom { margin-top: 30px; } } +@media all and (max-height: 768px) { .page01 .page-left { top: 190px; } + .num-item .num-text { font-size: 32px; } + .num-item .num-text .unit { font-size: 26px; } + .logo { font-size: 30px; } + .notice-box { margin-top: 0; } + .panel .panel-bd { padding: 10px; } } +@keyframes fadeIn { from { opacity: 0; } + to { opacity: 1; } } +@keyframes fadeInUp { from { opacity: 0; -webkit-transform: translate3d(0, 100%, 0); transform: translate3d(0, 100%, 0); } + to { opacity: 1; -webkit-transform: translate3d(0, 0, 0); transform: translate3d(0, 0, 0); } } +@keyframes fadeInUpBig { from { opacity: 0; -webkit-transform: translate3d(0, 2000px, 0); transform: translate3d(0, 2000px, 0); } + to { opacity: 1; -webkit-transform: translate3d(0, 0, 0); transform: translate3d(0, 0, 0); } } +@keyframes fadeInDown { from { opacity: 0; -webkit-transform: translate3d(0, -100%, 0); transform: translate3d(0, -100%, 0); } + to { opacity: 1; -webkit-transform: translate3d(0, 0, 0); transform: translate3d(0, 0, 0); } } +@-webkit-keyframes fadeInDownBig { from { opacity: 0; -webkit-transform: translate3d(0, -2000px, 0); transform: translate3d(0, -2000px, 0); } + to { opacity: 1; -webkit-transform: translate3d(0, 0, 0); transform: translate3d(0, 0, 0); } } +@keyframes fadeInLeft { from { opacity: 0; -webkit-transform: translate3d(-100%, 0, 0); transform: translate3d(-100%, 0, 0); } + to { opacity: 1; -webkit-transform: translate3d(0, 0, 0); transform: translate3d(0, 0, 0); } } +@keyframes fadeInLeftBig { from { opacity: 0; -webkit-transform: translate3d(-2000px, 0, 0); transform: translate3d(-2000px, 0, 0); } + to { opacity: 1; -webkit-transform: translate3d(0, 0, 0); transform: translate3d(0, 0, 0); } } +@keyframes fadeInRight { from { opacity: 0; -webkit-transform: translate3d(100%, 0, 0); transform: translate3d(100%, 0, 0); } + to { opacity: 1; -webkit-transform: translate3d(0, 0, 0); transform: translate3d(0, 0, 0); } } +@keyframes fadeInRightBig { from { opacity: 0; -webkit-transform: translate3d(2000px, 0, 0); transform: translate3d(2000px, 0, 0); } + to { opacity: 1; -webkit-transform: translate3d(0, 0, 0); transform: translate3d(0, 0, 0); } } +@keyframes fadeOut { from { opacity: 1; } + to { opacity: 0; } } +@keyframes fadeOutDown { from { opacity: 1; } + to { opacity: 0; -webkit-transform: translate3d(0, 100%, 0); transform: translate3d(0, 100%, 0); } } +@keyframes fadeOutDownBig { from { opacity: 1; } + to { opacity: 0; -webkit-transform: translate3d(0, 2000px, 0); transform: translate3d(0, 2000px, 0); } } +@keyframes fadeOutUp { from { opacity: 1; } + to { opacity: 0; -webkit-transform: translate3d(0, -100%, 0); transform: translate3d(0, -100%, 0); } } +@keyframes fadeOutUpBig { from { opacity: 1; } + to { opacity: 0; -webkit-transform: translate3d(0, -2000px, 0); transform: translate3d(0, -2000px, 0); } } +@keyframes fadeOutLeft { from { opacity: 1; } + to { opacity: 0; -webkit-transform: translate3d(-100%, 0, 0); transform: translate3d(-100%, 0, 0); } } +@keyframes fadeOutLeftBig { from { opacity: 1; } + to { opacity: 0; -webkit-transform: translate3d(-2000px, 0, 0); transform: translate3d(-2000px, 0, 0); } } +@keyframes fadeOutRight { from { opacity: 1; } + to { opacity: 0; -webkit-transform: translate3d(100%, 0, 0); transform: translate3d(100%, 0, 0); } } +@keyframes fadeOutRightBig { from { opacity: 1; } + to { opacity: 0; -webkit-transform: translate3d(2000px, 0, 0); transform: translate3d(2000px, 0, 0); } } +@keyframes zoomIn { from { opacity: 0; -webkit-transform: scale3d(0.3, 0.3, 0.3); transform: scale3d(0.3, 0.3, 0.3); } + 50% { opacity: 1; } } +@keyframes zoomOut { from { opacity: 1; } + 50% { opacity: 0; -webkit-transform: scale3d(0.3, 0.3, 0.3); transform: scale3d(0.3, 0.3, 0.3); } + to { opacity: 0; } } +@keyframes rotateIn { from { -webkit-transform-origin: center; transform-origin: center; -webkit-transform: rotate3d(0, 0, 1, -200deg); transform: rotate3d(0, 0, 1, -200deg); opacity: 0; } + to { -webkit-transform-origin: center; transform-origin: center; -webkit-transform: translate3d(0, 0, 0); transform: translate3d(0, 0, 0); opacity: 1; } } +@keyframes rotateOut { from { -webkit-transform-origin: center; transform-origin: center; opacity: 1; } + to { -webkit-transform-origin: center; transform-origin: center; -webkit-transform: rotate3d(0, 0, 1, 200deg); transform: rotate3d(0, 0, 1, 200deg); opacity: 0; } } +@keyframes up-small { 0% { transform: translate3d(0, 30px, 0); opacity: 0.3; } + 100% { transform: translate3d(0, 0, 0); opacity: 1; } } +@keyframes animate-positive { 0% { width: 0%; } } +@keyframes rotate { 100% { transform: rotate(360deg); } } +@keyframes rotate-everse { 100% { transform: rotate(-360deg); } } +@keyframes scale-spring { 0% { opacity: 0.5; -ms-transform: scale(0.5); transform: scale(0.5); } + 80% { opacity: 0.8; -ms-transform: scale(1.1); transform: scale(1.1); } + 100% { opacity: 1; -ms-transform: scale(1); transform: scale(1); } } +@keyframes light-move { 0% { transform: translate(0); } } +/* +z-index: + +*/ + +/*# sourceMappingURL=style.css.map */ diff --git a/src/assets/css/style.css b/src/assets/css/style.css new file mode 100644 index 0000000..81c66cc --- /dev/null +++ b/src/assets/css/style.css @@ -0,0 +1,505 @@ +@charset "UTF-8"; +body, div, dl, dt, dd, ul, ol, li, h1, h2, h3, h4, h5, h6, pre, code, form, fieldset, legend, input, textarea, p, blockquote, th, td, hr, button, article, aside, details, figcaption, figure, footer, header, hgroup, menu, nav, section { margin: 0; padding: 0; } + +h1, h2, h3, h4, h5, h6 { font-size: 100%; font-weight: 400; } + +address, caption, cite, code, dfn, em, th, var { font-style: normal; font-weight: 400; } + +ol, ul, li { list-style: none; } + +a { text-decoration: none; color: #fff; background-color: transparent; -webkit-text-decoration-skip: objects; } + +a:hover { text-decoration: none; color: #93FCFF; } + +a:active, a:focus, a:hover { outline-width: 0; text-decoration: none; outline: none; } + +label { font-weight: 400; } + +fieldset, img { border: 0; } + +html, body { color: #fff; background: #000D12; -webkit-text-size-adjust: 100%; -ms-text-size-adjust: 100%; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; -webkit-tap-highlight-color: transparent; height: 100%; } + +article, aside, details, figcaption, figure, footer, header, hgroup, menu, nav, section { display: block; } + +audio, canvas, video { display: inline-block; *display: inline; *zoom: 1; } + +body, button, input, select, textarea { font-family: Helvetica Neue, Helvetica, Arial, PingFang SC, Hiragino Sans GB, Heiti SC, Microsoft YaHei, WenQuanYi Micro Hei, sans-serif; font-size: 12px; line-height: 1.428571; } + +::-ms-clear, ::-ms-reveal { display: none; } + +button, input, select, textarea { font-size: 100%; } + +button, input[type=button], input[type=reset], input[type=submit] { cursor: pointer; -webkit-appearance: button; } + +button::-moz-focus-inner, [type="button"]::-moz-focus-inner, [type="reset"]::-moz-focus-inner, [type="submit"]::-moz-focus-inner { border-style: none; padding: 0; } + +button:-moz-focusring, [type="button"]:-moz-focusring, [type="reset"]:-moz-focusring, [type="submit"]:-moz-focusring { outline: 1px dotted ButtonText; } + +abbr[title] { border-bottom: none; text-decoration: underline; text-decoration: underline dotted; } + +b, strong { font-weight: bolder; } + +del { text-decoration: line-through; } + +mark { background: #ff0; color: #000; } + +small { font-size: 80%; } + +audio, video { display: inline-block; } + +img { border-style: none; } + +svg:not(:root) { overflow: hidden; } + +table { border-collapse: collapse; border-spacing: 0; } + +th { text-align: inherit; } + +td { word-break: break-all; word-wrap: break-word; } + +textarea { resize: none; } + +iframe { display: block; } + +/*float*/ +.clearfix { *zoom: 1; } +.clearfix:before, .clearfix:after { content: ""; display: table; } +.clearfix:after { clear: both; overflow: hidden; } + +.clear { clear: both; } + +/*盒模型*/ +*, *:before, *:after { -wekbit-box-sizing: border-box; -moz-box-sizing: border-box; -o-box-sizing: border-box; -ms-box-sizing: border-box; box-sizing: border-box; } + +/*被选中的文本背景颜色*/ +::-webkit-selection { color: #fff; background: #93FCFF; } + +::-moz-selection { color: #fff; background: #93FCFF; } + +::selection { color: #fff; background: #93FCFF; } + +/*placeholder颜色*/ +::-webkit-input-placeholder { color: #999; font-weight: 400; } + +:-moz-placeholder { color: #999; font-weight: 400; } + +::-moz-placeholder { color: #999; font-weight: 400; } + +:-ms-input-placeholder { color: #999 !important; font-weight: 400 !important; } + +[class*=" icon-"], [class^=icon-] { font-family: icom !important; speak: none; font-style: normal; font-weight: 400; font-variant: normal; text-transform: none; line-height: 1; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; } + +/*删格系统*/ +.col-1, .col-2, .col-3, .col-4, .col-5, .col-6, .col-7, .col-8, .col-9, .col-10, .col-11, .col-12, .col-13, .col-14, .col-15, .col-16, .col-17, .col-18, .col-19, .col-20, .col-21, .col-22, .col-23, .col-24 { flex: 1; } + +.container { padding-right: 10px; padding-left: 10px; margin-right: auto; margin-left: auto; } +.container .container-pt { padding-top: 20px; } +.container .container-padding { padding: 20px; } + +.row { display: flex; } + +.col-1 { width: 4.1666666667%; } + +.col-2 { width: 8.3333333333%; } + +.col-3 { width: 12.5%; } + +.col-4 { width: 16.6666666667%; } + +.col-5 { width: 20.8333333333%; } + +.col-6 { width: 25%; } + +.col-7 { width: 29.1666666667%; } + +.col-8 { width: 33.3333333333%; } + +.col-9 { width: 37.5%; } + +.col-10 { width: 41.6666666667%; } + +.col-11 { width: 45.8333333333%; } + +.col-12 { width: 50%; } + +.col-13 { width: 54.1666666667%; } + +.col-14 { width: 58.3333333333%; } + +.col-15 { width: 62.5%; } + +.col-16 { width: 66.6666666667%; } + +.col-17 { width: 70.8333333333%; } + +.col-18 { width: 75%; } + +.col-19 { width: 79.1666666667%; } + +.col-20 { width: 83.3333333333%; } + +.col-21 { width: 87.5%; } + +.col-22 { width: 91.6666666667%; } + +.col-23 { width: 95.8333333333%; } + +.col-24 { width: 100%; } + +.row-gap { margin-left: 10px; margin-right: 10px; } +.row-gap .col-1 { padding-left: 0; padding-right: 0; } +.row-gap .col-2 { padding-left: 0; padding-right: 0; } +.row-gap .col-3 { padding-left: 0; padding-right: 0; } +.row-gap .col-4 { padding-left: 0; padding-right: 0; } +.row-gap .col-5 { padding-left: 0; padding-right: 0; } +.row-gap .col-6 { padding-left: 0; padding-right: 0; } +.row-gap .col-7 { padding-left: 0; padding-right: 0; } +.row-gap .col-8 { padding-left: 0; padding-right: 0; } +.row-gap .col-9 { padding-left: 0; padding-right: 0; } +.row-gap .col-10 { padding-left: 0; padding-right: 0; } +.row-gap .col-11 { padding-left: 0; padding-right: 0; } +.row-gap .col-12 { padding-left: 0; padding-right: 0; } +.row-gap .col-13 { padding-left: 0; padding-right: 0; } +.row-gap .col-14 { padding-left: 0; padding-right: 0; } +.row-gap .col-15 { padding-left: 0; padding-right: 0; } +.row-gap .col-16 { padding-left: 0; padding-right: 0; } +.row-gap .col-17 { padding-left: 0; padding-right: 0; } +.row-gap .col-18 { padding-left: 0; padding-right: 0; } +.row-gap .col-19 { padding-left: 0; padding-right: 0; } +.row-gap .col-20 { padding-left: 0; padding-right: 0; } +.row-gap .col-21 { padding-left: 0; padding-right: 0; } +.row-gap .col-22 { padding-left: 0; padding-right: 0; } +.row-gap .col-23 { padding-left: 0; padding-right: 0; } +.row-gap .col-24 { padding-left: 0; padding-right: 0; } + +.header { position: absolute; top: 0; left: 0; width: 100%; height: 160px; background: url(../../assets/images/header-bg.png) center center no-repeat; background-size: auto 100%; } +.header:before { content: ""; position: absolute; top: 116px; left: 50%; margin-left: -100px; width: 200px; height: 8px; background-color: #93FCFF; } + +.logo { margin-top: 30px; height: 50px; line-height: 46px; text-align: center; font-size: 40px; letter-spacing: 2.2px; text-indent: 2.2px; font-weight: 500; user-select: none; position: relative; z-index: 10; } +.logo img { width: 118px; height: 50px; vertical-align: top; margin-right: 20px; } + +.notice-box { width: 460px; margin: 8px auto; line-height: 22px; height: 22px; display: flex; position: relative; overflow: hidden; } +.notice-box .notice-icon { width: 28px; } +.notice-box .notice-icon svg { vertical-align: middle; } +.notice-box .notice-txt { position: relative; width: 432px; overflow: hidden; white-space: nowrap; font-size: 16px; } +.notice-box .notice-txt .str_move { white-space: nowrap; position: absolute; left: 0px; } + +.str_move { white-space: nowrap; position: absolute; top: 0; left: 0; cursor: move; } + +.str_move_clone { display: inline-block; vertical-align: top; position: absolute; left: 100%; top: 0; } + +.str_vertical .str_move_clone { left: 0; top: 100%; } + +.str_down .str_move_clone { left: 0; bottom: 100%; } + +.str_vertical .str_move, .str_down .str_move { white-space: normal; width: 100%; } + +.str_static .str_move, .no_drag .str_move, .noStop .str_move { cursor: inherit; } + +.str_wrap img { max-width: none !important; } + +/*网站通用样式及组件*/ +.mt { margin-top: 10px; } + +.mt-lg { margin-top: 20px !important; } + +.mt-sm { margin-top: 5px; } + +.mt-lg { margin-top: 20px; } + +.mt-mlg { margin-top: 30px; } + +.mt-mlger { margin-top: 50px; } + +.show { display: block; } + +.hide { display: none; } + +.vs-show { visibility: visible; } + +.vs-hide { visibility: hidden; } + +.pull-left { float: left; } + +.pull-right { float: right; } + +.text-center { text-align: center; } + +.text-left { text-align: left; } + +.text-right { text-align: right; } + +.text-justify { text-align: justify; } + +.text-default { color: #fff; } + +.text-primary { color: #93FCFF; } + +.text-light, .text-tips { color: #666; } + +.text-lighter { color: #999; } + +.text-lightest { color: #d3d3d3; } + +.text-success { color: #5eb95e; } + +.text-error { color: #f00; } + +.text-warning { color: #f37b1d; } + +.text-danger { color: #B9302D; } + +.text-disabled { color: #eaeded; } + +.text-price { color: #f10214; } + +.text-white { color: #fff; } + +.text-lg { font-size: 16px; } + +.text-mlg { font-size: 18px; } + +.text-blg { font-size: 20px; } + +.text-sm { font-size: 12px; } + +.text-md { font-size: 12px; } + +.text-bold, .text-700 { font-weight: 700; } + +.text-normal, .text-400 { font-weight: 400; } + +.text-underline { text-decoration: underline; } +.text-underline:hover { text-decoration: underline; } + +.text-indent { text-indent: 2em; } + +.text-required { color: #f00; font-weight: 400; } + +.small-size { transform: scale(0.8); margin: 0px 0 0 -1px; display: inline-block; vertical-align: sub; } + +.text-linear { background: linear-gradient(to bottom, #fff, #C0C2C2); -webkit-background-clip: text; color: transparent; } + +.panel, .box-wrap { max-height: 270px; max-width: 800px; background-image: url(../../assets/images/panel-bg.png); background-size: 100% 100%; display: flex; flex-direction: column; width: 100%; } +.panel.panel-lg, .box-wrap.panel-lg { width: 163%; } +.panel.panel02, .box-wrap.panel02 { background-image: url(../../assets/images/panel-bg02.png); } +.panel.panel03, .box-wrap.panel03 { background-image: url(../../assets/images/panel-bg03.png); max-height: 226px; } +.panel.panel04, .box-wrap.panel04 { background-image: url(../../assets/images/panel-bg04.png); } +.panel.panel05, .box-wrap.panel05 { background-image: url(../../assets/images/panel-bg05.png); max-width: 100%; background-size: 100% 100%; } +.panel.panel06, .box-wrap.panel06 { background-image: url(../../assets/images/panel-bg06.png); max-width: 784px; max-height: 339px; background-size: 100% 100%; } +.panel .panel-hd, .box-wrap .panel-hd { padding: 5px 30px 15px; position: relative; } +.panel .panel-hd .panel-tit, .box-wrap .panel-hd .panel-tit { padding-top: 15px; font-size: 18px; line-height: 26px; } +.panel .panel-hd .panel-more, .box-wrap .panel-hd .panel-more { position: absolute; right: 30px; top: 20px; z-index: 100; transition: .3s opactiy; } +.panel .panel-hd .panel-more:hover, .box-wrap .panel-hd .panel-more:hover { opacity: 0.9; } +.panel .panel-hd + .panel-bd, .box-wrap .panel-hd + .panel-bd { margin-top: -20px; } +.panel .panel-bd, .box-wrap .panel-bd { flex: 1; padding: 20px 30px 20px; } + +.box-wrap { margin-left: auto; margin-right: auto; width: 470px; height: 244px; border: 1px solid #1F6F9B; position: relative; background-image: none; } + +.box-wrap:before { position: absolute; left: 0; right: 0; top: 0; bottom: 0; content: ""; background: linear-gradient(#93FCFF, #93FCFF) left top, linear-gradient(#93FCFF, #93FCFF) left top, linear-gradient(#93FCFF, #93FCFF) right top, linear-gradient(#93FCFF, #93FCFF) right top, linear-gradient(#93FCFF, #93FCFF) left bottom, linear-gradient(#93FCFF, #93FCFF) left bottom, linear-gradient(#93FCFF, #93FCFF) right bottom, linear-gradient(#93FCFF, #93FCFF) right bottom; background-repeat: no-repeat; background-size: 18px 2px, 2px 18px; } + +.chart-item { height: 100%; } + +.table { width: 100%; text-align: center; color: rgba(255, 255, 255, 0.8); } +.table th { background-color: rgba(18, 148, 184, 0.9); line-height: 22px; padding: 7px 5px; font-size: 16px; } +.table td { background-color: rgba(20, 72, 93, 0.7); line-height: 16px; padding: 10px 5px; font-size: 12px; border-top: 1px solid rgba(0, 0, 0, 0.6); } +.table tbody tr { transition: .3s color; } +.table tbody tr:hover { color: #93FCFF; } + +.progress { height: 36px; line-height: 36px; padding: 0 3px; } +.progress .progress-bar { position: relative; margin-top: 2px; margin-bottom: 2px; height: 30px; background-color: transparent; } +.progress .progress-bar-inner { width: 0; max-width: 100%; height: 30px; background-color: #93FCFF; animation: animate-positive 2s; position: relative; } +.progress .progress-bar-inner:before { content: ""; width: 100%; position: absolute; left: 0; top: 0; bottom: 0; background-image: url(../../assets/images/barbg.png); background-size: auto 30px; } +.progress .progress-bar-inner.progress-bar-success { background: #5eb95e; } +.progress .progress-bar-inner.progress-bar-error { background: #f00; } +.progress .progress-bar-inner.progress-bar-gradient { background: linear-gradient(to right, #019CFE, #FEFC01); } + +.progress-list .progress-item { height: 44px; line-height: 36px; padding-top: 4px; display: flex; } +.progress-list .progress-name { width: 150px; padding-right: 10px; overflow: hidden; white-space: nowrap; font-size: 20px; color: rgba(255, 255, 255, 0.5); } +.progress-list .progress-num { position: absolute; width: 0px; overflow: hidden; left: 5px; top: 0; width: 42px; white-space: nowrap; z-index: 100; font-weight: 500; font-size: 18px; line-height: 34px; } +.progress-list .progress { border: 1px solid #fff; border-radius: 2px; position: relative; flex: 1; } +.progress-list .progress:before { content: ""; width: 4px; height: 34px; border-radius: 100px; border: 1px solid #fff; position: absolute; left: -8px; top: 0; } + +@font-face { font-family: 'digiface'; src: url("../../assets/font/digiface.ttf") format("truetype"); } +.page { position: relative; min-width: 1000px; background: url(../../assets/images/bg.png) center center repeat; background-size: 158px 159px; min-height: 100%; } + +.page-side { position: absolute; top: 28px; bottom: 74px; padding: 30px 0px; z-index: 99; display: flex; flex-direction: column; justify-content: space-between; width: 30%; max-width: 678px; } + +.page-left { padding-left: 30px; } +.page-left .num-item { flex: 1; height: auto; } +.page-left .panel { flex: 2; } +.page-left .common-list { flex: 2; margin-bottom: 10px; } + +.page-right { padding-right: 30px; left: auto; right: 0; display: flex; flex-direction: column; align-items: flex-end; justify-content: space-between; } +.page-right div { flex: 1; margin-bottom: 10px; } +.page-right div:last-child { margin-bottom: 0; } +.page-right > .chart-item { margin-bottom: 0px; width: 100%; max-height: 270px; min-height: 190px; } + +.page-center { left: 21%; right: 32%; position: absolute; top: 54px; bottom: 20px; z-index: 100; } + +.page01 .page-center { top: 230px; } +.page01 .page-left { top: 262px; } + +.page-bottom { padding: 0 150px 0 350px; } + +.page-top { position: relative; z-index: 100; left: 0; padding: 160px 30% 0 30px; } +.page-top .num-list { display: flex; padding-top: 0; } +.page-top .num-list .num-item { flex: 1; } +.page-top .num-item { margin-right: 20px; margin-bottom: 0; } + +.page-bd { padding: 40px 30px 10px; display: flex; } +.page-bd .page-map { flex: 1; margin: 0 90px; height: 677px; background-image: url(../../assets/images/panel-bg07.png); background-size: 100% 100%; display: flex; align-items: center; padding-right: 60px; } +.page-bd .page-map .chart-item { width: 62%; } +.page-bd .page-map .table-box { overflow: hidden; padding: 20px 0; width: 38%; max-height: 90%; display: flex; flex-direction: column; } +.page-bd .page-map .table-box .table-body { flex: 1; overflow: auto; } +.page-bd .page-map .table-box .table-body::-webkit-scrollbar { display: none; } + +.common-list { padding: 10px 0 0 44px; margin-left: -44px; background-image: url(../../assets/images/common-bg.png); background-repeat: no-repeat; background-size: 44px 280px; display: flex; flex-direction: column; justify-content: space-between; max-height: 326px; } +.common-list .list-item { display: block; line-height: 62px; height: 60px; overflow: hidden; width: 200px; background-image: url(../../assets/images/common01.png); background-size: cover; text-align: center; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; transition: .3s all; } +.common-list .list-item.is-active, .common-list .list-item:hover { background-image: url(../../assets/images/common-active.png); } +.common-list .list-item .list-tit { font-size: 18px; } + +.num-list { padding: 30px 0 0 0px; } + +.num-item { display: block; padding: 12px 22px; height: auto; overflow: hidden; max-width: 295px;max-height: 120px; background-image: url(../../assets/images/numbg.png); background-size: 100% 100%; background-repeat: no-repeat; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; transition: .3s color; margin-bottom: 10px; } +.num-item .num-tit { font-size: 20px; line-height: 30px; } +.num-item .num-text { color: #93FCFF; font-weight: 500; font-family: 'digiface'; font-size: 50px; line-height: 62px; letter-spacing: 0.1em; } +.num-item .num-text .unit { font-size: 34px; margin-left: 10px; } + +.main { display: flex; flex-direction: column; justify-content: space-between; } + +.main-top { display: flex; padding: 160px 30px 0; } + +.main-left { min-width: 508px; flex: 0.26; margin-top: -50px; } + +.main-right { min-width: 470px; flex: 0.26; margin-top: -50px; } + +.main-bottom { flex: 1; padding: 0 30px; display: flex; } + +.main-center { padding: 0 50px; flex: 1; } + +.number-area { display: flex; align-items: flex-end; height: 150px; } +.number-area .number-tit { font-size: 22px; line-height: 30px; margin-bottom: 22px; } +.number-area .number-item { margin-left: 30px; } +.number-area .number-item .item-tit { font-size: 18px; line-height: 24px; margin-bottom: 10px; color: rgba(255, 255, 255, 0.8); } +.number-area .number-item .item-txt { font-size: 22px; line-height: 30px; color: #93FCFF; } + +.count-number { height: 70px; display: flex; } +.count-number > li { width: 40px; height: 70px; line-height: 70px; background: rgba(173, 219, 252, 0.3); background-size: 100% 100%; margin-right: 10px; text-align: center; font-size: 48px; color: #fff; font-style: normal; user-select: none; overflow: hidden; } +.count-number span { display: block; width: 40px; height: 70px; line-height: 70px; } +.count-number .is-active span { animation: numMove .3s forwards; } + +@keyframes numMove { 100% { transform: translateY(-100%); } } +.total-box { display: flex; flex-direction: column; } +.total-box .total-item { display: flex; padding: 3px 0; text-align: center; } +.total-box .total-item > div { height: 36px; line-height: 36px; font-size: 16px; flex: 1; background-color: rgba(88, 206, 208, 0.16); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; padding: 0 10px; } +.total-box .total-item .total-name { margin-right: 10px; } + +.total-list { margin: 0 0 30px; display: flex; justify-content: space-between; } +.total-list .total-tit { margin-bottom: 10px; color: rgba(255, 255, 255, 0.8); } +.total-list .total-item { margin: 0 5px; } +.total-list .total-num { display: flex; padding: 5px 0 5px 10px; position: relative; background: linear-gradient(to bottom, rgba(11, 68, 138, 0.3), rgba(6, 10, 34, 0.38), rgba(11, 68, 138, 0.3)); } +.total-list .total-num:before { position: absolute; left: 0; right: 0; top: 0; bottom: 0; content: ""; background: linear-gradient(#164C6C, #164C6C) left top, linear-gradient(#164C6C, #164C6C) left top, linear-gradient(#164C6C, #164C6C) right top, linear-gradient(#164C6C, #164C6C) right top, linear-gradient(#164C6C, #164C6C) left bottom, linear-gradient(#164C6C, #164C6C) left bottom, linear-gradient(#164C6C, #164C6C) right bottom, linear-gradient(#164C6C, #164C6C) right bottom; background-repeat: no-repeat; background-size: 50% 1px, 1px 15px, 50% 1px, 1px 15px; } +.total-list .total-num li { margin-right: 10px; height: 32px; line-height: 32px; } +.total-list .total-num li b { vertical-align: middle; display: inline-block; font-weight: 400; width: 3px; height: 3px; border-radius: 50%; background-color: rgba(255, 255, 255, 0.8); } +.total-list .total-num .num-item { width: 20px; background: linear-gradient(to bottom, rgba(214, 239, 254, 0.3), rgba(173, 219, 252, 0.3)); background-size: 100% 100%; margin-right: 10px; text-align: center; font-size: 18px; color: #fff; font-style: normal; user-select: none; overflow: hidden; } +.total-list .total-num .num { display: block; width: 20px; height: 32px; line-height: 32px; } +.total-list .total-num .is-active span { animation: numMove .3s forwards; } + +.login-main { display: flex; flex-direction: column; height: 100%; align-items: center; padding-top: 3%; position: relative; background: url(../../assets/images/loginbg.jpg) no-repeat center bottom; background-size: 100% auto; background-repeat: no-repeat; } +.login-main .login-header { width: 100%; background: url(../../assets/images/login-header.png) no-repeat center center; height: 320px; background-size: auto 320px; } +.login-main .login-header .logo { margin-top: 66px; font-size: 58px; height: 80px; line-height: 80px; } +.login-main .login-header .logo img { width: 188px; height: 80px; } +.login-main .login-error { margin-top: -50px; margin-bottom: 50px; display: none; } + +.login-item { width: 753px; height: 104px; background-image: url(../../assets/images/login-inputbg.png); background-size: auto 100%; background-position: center center; padding: 20px 0 0 236px; margin-bottom: 40px; font-size: 16px; transition: .3s background; } +.login-item .login-icon { display: inline-block; vertical-align: top; width: 60px; line-height: 54px; height: 54px; text-align: center; } +.login-item .login-icon svg { vertical-align: top; margin-top: 15px; } +.login-item:hover, .login-item.is-active { background-image: url(../../assets/images/login-inputbg01.png); } +.login-item .login-input { vertical-align: middle; background-color: transparent; border-color: transparent; outline: none; color: #fff; line-height: 54px; height: 54px; width: 350px; } +.login-item.login-btn { background-image: url(../../assets/images/loginbtn-bg.png); width: 100%; text-align: center; letter-spacing: 10px; text-indent: 10px; font-size: 20px; padding: 0; font-weight: 500; } +.login-item.login-btn .login-txt { width: 700px; margin: 0 auto; display: block; padding-top: 32px; height: 100%; transition: .3s color; } + +@media all and (max-width: 1100px) { .header { height: 120px; } + .header:before { top: 86px; } + .page-top { padding-top: 98px; padding-right: 35%; } + .page-top .num-item { margin-right: 10px; padding-top: 20px; } + .common-list { background-image: none; } + .logo { margin-top: 10px; font-size: 30px; } + .notice-box { margin-top: 0; } + .page-side { padding-top: 0; padding-bottom: 10px; } + .page-side .num-list { padding-top: 0; } + .page-left { padding-left: 10px; } + .page-right { padding-right: 10px; } } +@media all and (max-width: 1440px) { .page-top { padding-left: 10px; } + .page-top .num-item { background-size: 100% 100%; padding-bottom: 0; display: flex; flex-direction: column; justify-content: baseline; } + .page-top .num-item .num-text { font-size: 32px; line-height: 46px; } + .page-top .num-item .num-text .unit { font-size: 26px; } } +@media all and (max-width: 1500px) { .panel .panel-bd { padding-left: 10px; padding-right: 10px; } } +@media all and (max-height: 620px) { .page-top { padding-top: 105px; } } +@media all and (max-height: 768px) { .page01 .page-left { top: 190px; } + .num-item .num-text { font-size: 32px; } + .num-item .num-text .unit { font-size: 26px; } + .logo { font-size: 30px; } + .notice-box { margin-top: 0; } + .panel .panel-bd { padding: 10px; } } +@keyframes fadeIn { from { opacity: 0; } + to { opacity: 1; } } +@keyframes fadeInUp { from { opacity: 0; -webkit-transform: translate3d(0, 100%, 0); transform: translate3d(0, 100%, 0); } + to { opacity: 1; -webkit-transform: translate3d(0, 0, 0); transform: translate3d(0, 0, 0); } } +@keyframes fadeInUpBig { from { opacity: 0; -webkit-transform: translate3d(0, 2000px, 0); transform: translate3d(0, 2000px, 0); } + to { opacity: 1; -webkit-transform: translate3d(0, 0, 0); transform: translate3d(0, 0, 0); } } +@keyframes fadeInDown { from { opacity: 0; -webkit-transform: translate3d(0, -100%, 0); transform: translate3d(0, -100%, 0); } + to { opacity: 1; -webkit-transform: translate3d(0, 0, 0); transform: translate3d(0, 0, 0); } } +@-webkit-keyframes fadeInDownBig { from { opacity: 0; -webkit-transform: translate3d(0, -2000px, 0); transform: translate3d(0, -2000px, 0); } + to { opacity: 1; -webkit-transform: translate3d(0, 0, 0); transform: translate3d(0, 0, 0); } } +@keyframes fadeInLeft { from { opacity: 0; -webkit-transform: translate3d(-100%, 0, 0); transform: translate3d(-100%, 0, 0); } + to { opacity: 1; -webkit-transform: translate3d(0, 0, 0); transform: translate3d(0, 0, 0); } } +@keyframes fadeInLeftBig { from { opacity: 0; -webkit-transform: translate3d(-2000px, 0, 0); transform: translate3d(-2000px, 0, 0); } + to { opacity: 1; -webkit-transform: translate3d(0, 0, 0); transform: translate3d(0, 0, 0); } } +@keyframes fadeInRight { from { opacity: 0; -webkit-transform: translate3d(100%, 0, 0); transform: translate3d(100%, 0, 0); } + to { opacity: 1; -webkit-transform: translate3d(0, 0, 0); transform: translate3d(0, 0, 0); } } +@keyframes fadeInRightBig { from { opacity: 0; -webkit-transform: translate3d(2000px, 0, 0); transform: translate3d(2000px, 0, 0); } + to { opacity: 1; -webkit-transform: translate3d(0, 0, 0); transform: translate3d(0, 0, 0); } } +@keyframes fadeOut { from { opacity: 1; } + to { opacity: 0; } } +@keyframes fadeOutDown { from { opacity: 1; } + to { opacity: 0; -webkit-transform: translate3d(0, 100%, 0); transform: translate3d(0, 100%, 0); } } +@keyframes fadeOutDownBig { from { opacity: 1; } + to { opacity: 0; -webkit-transform: translate3d(0, 2000px, 0); transform: translate3d(0, 2000px, 0); } } +@keyframes fadeOutUp { from { opacity: 1; } + to { opacity: 0; -webkit-transform: translate3d(0, -100%, 0); transform: translate3d(0, -100%, 0); } } +@keyframes fadeOutUpBig { from { opacity: 1; } + to { opacity: 0; -webkit-transform: translate3d(0, -2000px, 0); transform: translate3d(0, -2000px, 0); } } +@keyframes fadeOutLeft { from { opacity: 1; } + to { opacity: 0; -webkit-transform: translate3d(-100%, 0, 0); transform: translate3d(-100%, 0, 0); } } +@keyframes fadeOutLeftBig { from { opacity: 1; } + to { opacity: 0; -webkit-transform: translate3d(-2000px, 0, 0); transform: translate3d(-2000px, 0, 0); } } +@keyframes fadeOutRight { from { opacity: 1; } + to { opacity: 0; -webkit-transform: translate3d(100%, 0, 0); transform: translate3d(100%, 0, 0); } } +@keyframes fadeOutRightBig { from { opacity: 1; } + to { opacity: 0; -webkit-transform: translate3d(2000px, 0, 0); transform: translate3d(2000px, 0, 0); } } +@keyframes zoomIn { from { opacity: 0; -webkit-transform: scale3d(0.3, 0.3, 0.3); transform: scale3d(0.3, 0.3, 0.3); } + 50% { opacity: 1; } } +@keyframes zoomOut { from { opacity: 1; } + 50% { opacity: 0; -webkit-transform: scale3d(0.3, 0.3, 0.3); transform: scale3d(0.3, 0.3, 0.3); } + to { opacity: 0; } } +@keyframes rotateIn { from { -webkit-transform-origin: center; transform-origin: center; -webkit-transform: rotate3d(0, 0, 1, -200deg); transform: rotate3d(0, 0, 1, -200deg); opacity: 0; } + to { -webkit-transform-origin: center; transform-origin: center; -webkit-transform: translate3d(0, 0, 0); transform: translate3d(0, 0, 0); opacity: 1; } } +@keyframes rotateOut { from { -webkit-transform-origin: center; transform-origin: center; opacity: 1; } + to { -webkit-transform-origin: center; transform-origin: center; -webkit-transform: rotate3d(0, 0, 1, 200deg); transform: rotate3d(0, 0, 1, 200deg); opacity: 0; } } +@keyframes up-small { 0% { transform: translate3d(0, 30px, 0); opacity: 0.3; } + 100% { transform: translate3d(0, 0, 0); opacity: 1; } } +@keyframes animate-positive { 0% { width: 0%; } } +@keyframes rotate { 100% { transform: rotate(360deg); } } +@keyframes rotate-everse { 100% { transform: rotate(-360deg); } } +@keyframes scale-spring { 0% { opacity: 0.5; -ms-transform: scale(0.5); transform: scale(0.5); } + 80% { opacity: 0.8; -ms-transform: scale(1.1); transform: scale(1.1); } + 100% { opacity: 1; -ms-transform: scale(1); transform: scale(1); } } +@keyframes light-move { 0% { transform: translate(0); } } +/* +z-index: + +*/ + +/*# sourceMappingURL=style.css.map */ diff --git a/src/assets/echarts/echarts.common.min.js b/src/assets/echarts/echarts.common.min.js new file mode 100644 index 0000000..0d97001 --- /dev/null +++ b/src/assets/echarts/echarts.common.min.js @@ -0,0 +1,22 @@ + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + + +!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports):"function"==typeof define&&define.amd?define(["exports"],e):e(t.echarts={})}(this,function(t){"use strict";var e=2311,i=function(){return e++},v="object"==typeof wx&&"function"==typeof wx.getSystemInfoSync?{browser:{},os:{},node:!1,wxa:!0,canvasSupported:!0,svgSupported:!1,touchEventsSupported:!0,domSupported:!1}:"undefined"==typeof document&&"undefined"!=typeof self?{browser:{},os:{},node:!1,worker:!0,canvasSupported:!0,domSupported:!1}:"undefined"==typeof navigator?{browser:{},os:{},node:!0,worker:!1,canvasSupported:!0,svgSupported:!0,domSupported:!1}:function(t){var e={},n=t.match(/Firefox\/([\d.]+)/),i=t.match(/MSIE\s([\d.]+)/)||t.match(/Trident\/.+?rv:(([\d.]+))/),r=t.match(/Edge\/([\d.]+)/),o=/micromessenger/i.test(t);n&&(e.firefox=!0,e.version=n[1]);i&&(e.ie=!0,e.version=i[1]);r&&(e.edge=!0,e.version=r[1]);o&&(e.weChat=!0);return{browser:e,os:{},node:!1,canvasSupported:!!document.createElement("canvas").getContext,svgSupported:"undefined"!=typeof SVGRect,touchEventsSupported:"ontouchstart"in window&&!e.ie&&!e.edge,pointerEventsSupported:"onpointerdown"in window&&(e.edge||e.ie&&11<=e.version),domSupported:"undefined"!=typeof document}}(navigator.userAgent);var s={"[object Function]":1,"[object RegExp]":1,"[object Date]":1,"[object Error]":1,"[object CanvasGradient]":1,"[object CanvasPattern]":1,"[object Image]":1,"[object Canvas]":1},l={"[object Int8Array]":1,"[object Uint8Array]":1,"[object Uint8ClampedArray]":1,"[object Int16Array]":1,"[object Uint16Array]":1,"[object Int32Array]":1,"[object Uint32Array]":1,"[object Float32Array]":1,"[object Float64Array]":1},u=Object.prototype.toString,n=Array.prototype,a=n.forEach,h=n.filter,r=n.slice,c=n.map,d=n.reduce,o={};function f(t,e){"createCanvas"===t&&(y=null),o[t]=e}function b(t){if(null==t||"object"!=typeof t)return t;var e=t,n=u.call(t);if("[object Array]"===n){if(!$(t)){e=[];for(var i=0,r=t.length;i>1)%2;s.cssText=["position: absolute","visibility: hidden","padding: 0","margin: 0","border-width: 0","user-select: none","width:0","height:0",i[l]+":0",r[u]+":0",i[1-l]+":auto",r[1-u]+":auto",""].join("!important;"),t.appendChild(a),n.push(a)}return n}(e,o),o,r);if(a)return a(t,n,i),!0}return!1}function Ot(t){return"CANVAS"===t.nodeName.toUpperCase()}var Et="undefined"!=typeof window&&!!window.addEventListener,zt=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,Nt=[];function Bt(t,e,n,i){return n=n||{},i||!v.canvasSupported?Rt(t,e,n):v.browser.firefox&&null!=e.layerX&&e.layerX!==e.offsetX?(n.zrX=e.layerX,n.zrY=e.layerY):null!=e.offsetX?(n.zrX=e.offsetX,n.zrY=e.offsetY):Rt(t,e,n),n}function Rt(t,e,n){if(v.domSupported&&t.getBoundingClientRect){var i=e.clientX,r=e.clientY;if(Ot(t)){var o=t.getBoundingClientRect();return n.zrX=i-o.left,void(n.zrY=r-o.top)}if(Lt(Nt,t,i,r))return n.zrX=Nt[0],void(n.zrY=Nt[1])}n.zrX=n.zrY=0}function Vt(t){return t||window.event}function Ft(t,e,n){if(null!=(e=Vt(e)).zrX)return e;var i=e.type;if(i&&0<=i.indexOf("touch")){var r="touchend"!==i?e.targetTouches[0]:e.changedTouches[0];r&&Bt(t,r,e,n)}else Bt(t,e,e,n),e.zrDelta=e.wheelDelta?e.wheelDelta/120:-(e.detail||0)/3;var o=e.button;return null==e.which&&void 0!==o&&zt.test(e.type)&&(e.which=1&o?1:2&o?3:4&o?2:0),e}function Ht(t,e,n,i){Et?t.addEventListener(e,n,i):t.attachEvent("on"+e,n)}var Wt=Et?function(t){t.preventDefault(),t.stopPropagation(),t.cancelBubble=!0}:function(t){t.returnValue=!1,t.cancelBubble=!0};function Gt(t){return 2===t.which||3===t.which}function Zt(){this._track=[]}function Ut(t){var e=t[1][0]-t[0][0],n=t[1][1]-t[0][1];return Math.sqrt(e*e+n*n)}Zt.prototype={constructor:Zt,recognize:function(t,e,n){return this._doTrack(t,e,n),this._recognize(t)},clear:function(){return this._track.length=0,this},_doTrack:function(t,e,n){var i=t.touches;if(i){for(var r={points:[],touches:[],target:e,event:t},o=0,a=i.length;oi.getWidth()||n<0||n>i.getHeight()}$t.prototype={constructor:$t,setHandlerProxy:function(e){this.proxy&&this.proxy.dispose(),e&&(D(Kt,function(t){e.on&&e.on(t,this[t],this)},this),e.handler=this),this.proxy=e},mousemove:function(t){var e=t.zrX,n=t.zrY,i=Jt(this,e,n),r=this._hovered,o=r.target;o&&!o.__zr&&(o=(r=this.findHover(r.x,r.y)).target);var a=this._hovered=i?{x:e,y:n}:this.findHover(e,n),s=a.target,l=this.proxy;l.setCursor&&l.setCursor(s?s.cursor:"default"),o&&s!==o&&this.dispatchToElement(r,"mouseout",t),this.dispatchToElement(a,"mousemove",t),s&&s!==o&&this.dispatchToElement(a,"mouseover",t)},mouseout:function(t){var e=t.zrEventControl,n=t.zrIsToLocalDOM;"only_globalout"!==e&&this.dispatchToElement(this._hovered,"mouseout",t),"no_globalout"!==e&&(n||this.trigger("globalout",{type:"globalout",event:t}))},resize:function(t){this._hovered={}},dispatch:function(t,e){var n=this[t];n&&n.call(this,e)},dispose:function(){this.proxy.dispose(),this.storage=this.proxy=this.painter=null},setCursorStyle:function(t){var e=this.proxy;e.setCursor&&e.setCursor(t)},dispatchToElement:function(t,e,n){var i=(t=t||{}).target;if(!i||!i.silent){for(var r="on"+e,o=function(t,e,n){return{type:t,event:n,target:e.target,topTarget:e.topTarget,cancelBubble:!1,offsetX:n.zrX,offsetY:n.zrY,gestureEvent:n.gestureEvent,pinchX:n.pinchX,pinchY:n.pinchY,pinchScale:n.pinchScale,wheelDelta:n.zrDelta,zrByTouch:n.zrByTouch,which:n.which,stop:jt}}(e,t,n);i&&(i[r]&&(o.cancelBubble=i[r].call(i,o)),i.trigger(e,o),i=i.parent,!o.cancelBubble););o.cancelBubble||(this.trigger(e,o),this.painter&&this.painter.eachOtherLayer(function(t){"function"==typeof t[r]&&t[r].call(t,o),t.trigger&&t.trigger(e,o)}))}},findHover:function(t,e,n){for(var i=this.storage.getDisplayList(),r={x:t,y:e},o=i.length-1;0<=o;o--){var a;if(i[o]!==n&&!i[o].ignore&&(a=Qt(i[o],t,e))&&(r.topTarget||(r.topTarget=i[o]),a!==Yt)){r.target=i[o];break}}return r},processGesture:function(t,e){this._gestureMgr||(this._gestureMgr=new Zt);var n=this._gestureMgr;"start"===e&&n.clear();var i=n.recognize(t,this.findHover(t.zrX,t.zrY,null).target,this.proxy.dom);if("end"===e&&n.clear(),i){var r=i.type;t.gestureEvent=r,this.dispatchToElement({target:i.target},r,i.event)}}},D(["click","mousedown","mouseup","mousewheel","dblclick","contextmenu"],function(a){$t.prototype[a]=function(t){var e,n,i=t.zrX,r=t.zrY,o=Jt(this,i,r);if("mouseup"===a&&o||(n=(e=this.findHover(i,r)).target),"mousedown"===a)this._downEl=n,this._downPoint=[t.zrX,t.zrY],this._upEl=n;else if("mouseup"===a)this._upEl=n;else if("click"===a){if(this._downEl!==this._upEl||!this._downPoint||4=this._maxSize&&0>4|(3840&i)>>8,240&i|(240&i)>>4,15&i|(15&i)<<4,1),ze(t,e),e):void Pe(e,0,0,0,1):7===r.length?0<=(i=parseInt(r.substr(1),16))&&i<=16777215?(Pe(e,(16711680&i)>>16,(65280&i)>>8,255&i,1),ze(t,e),e):void Pe(e,0,0,0,1):void 0;var o=r.indexOf("("),a=r.indexOf(")");if(-1!==o&&a+1===r.length){var s=r.substr(0,o),l=r.substr(o+1,a-(o+1)).split(","),u=1;switch(s){case"rgba":if(4!==l.length)return void Pe(e,0,0,0,1);u=Ae(l.pop());case"rgb":return 3!==l.length?void Pe(e,0,0,0,1):(Pe(e,Te(l[0]),Te(l[1]),Te(l[2]),u),ze(t,e),e);case"hsla":return 4!==l.length?void Pe(e,0,0,0,1):(l[3]=Ae(l[3]),Be(l,e),ze(t,e),e);case"hsl":return 3!==l.length?void Pe(e,0,0,0,1):(Be(l,e),ze(t,e),e);default:return}}Pe(e,0,0,0,1)}}function Be(t,e){var n=(parseFloat(t[0])%360+360)%360/360,i=Ae(t[1]),r=Ae(t[2]),o=r<=.5?r*(i+1):r+i-r*i,a=2*r-o;return Pe(e=e||[],Ie(255*De(a,o,n+1/3)),Ie(255*De(a,o,n)),Ie(255*De(a,o,n-1/3)),1),4===t.length&&(e[3]=t[3]),e}function Re(t,e){var n=Ne(t);if(n){for(var i=0;i<3;i++)n[i]=e<0?n[i]*(1-e)|0:(255-n[i])*e+n[i]|0,255e);n++);n=Math.min(n-1,u-2)}D=e;var i=g[(A=n)+1]-g[n];if(0!=i)if(S=(e-g[n])/i,l)if(I=m[n],M=m[0===n?n:n-1],C=m[u-2=n.x&&t<=n.x+n.width&&e>=n.y&&e<=n.y+n.height},clone:function(){return new Sn(this.x,this.y,this.width,this.height)},copy:function(t){this.x=t.x,this.y=t.y,this.width=t.width,this.height=t.height},plain:function(){return{x:this.x,y:this.y,width:this.width,height:this.height}}},Sn.create=function(t){return new Sn(t.x,t.y,t.width,t.height)};var Mn=function(t){for(var e in t=t||{},gn.call(this,t),t)t.hasOwnProperty(e)&&(this[e]=t[e]);this._children=[],this.__storage=null,this.__dirty=!0};Mn.prototype={constructor:Mn,isGroup:!0,type:"group",silent:!1,children:function(){return this._children.slice()},childAt:function(t){return this._children[t]},childOfName:function(t){for(var e=this._children,n=0;n>>1])<0?l=o:s=1+o;var u=i-s;switch(u){case 3:t[s+3]=t[s+2];case 2:t[s+2]=t[s+1];case 1:t[s+1]=t[s];break;default:for(;0>>1);0>>1);o(t,e[n+h])<0?l=h:a=h+1}return l}function Pn(p,g){var a,s,m=Cn,l=0,v=[];function e(t){var e=a[t],n=s[t],i=a[t+1],r=s[t+1];s[t]=n+r,t===l-3&&(a[t+1]=a[t+2],s[t+1]=s[t+2]),l--;var o=kn(p[i],p,e,n,0,g);e+=o,0!==(n-=o)&&0!==(r=Dn(p[e+n-1],p,i,r,r-1,g))&&(n<=r?function(t,e,n,i){var r=0;for(r=0;rs[t+1])break;e(t)}},this.forceMergeRuns=function(){for(;1>=1;return t+e}(r);do{if((o=Tn(t,n,i,e))=e.maxIterations){t+=e.ellipsis;break}var s=0===a?mi(t,r,e.ascCharWidth,e.cnCharWidth):0f)return{lines:[],width:0,height:0};D.textWidth=li(D.text,w);var S=_.textWidth,M=null==S||"auto"===S;if("string"==typeof S&&"%"===S.charAt(S.length-1))D.percentWidth=S,u.push(D),S=0;else{if(M){S=D.textWidth;var I=_.textBackgroundColor,C=I&&I.image;C&&ei(C=Qn(C))&&(S=Math.max(S,C.width*b/C.height))}var T=x?x[1]+x[3]:0;S+=T;var A=null!=d?d-v:null;null!=A&&Ai[0]){for(a=0;at);a++);o=n[i[a]]}if(i.splice(a+1,0,t),!(n[t]=e).virtual)if(o){var l=o.dom;l.nextSibling?s.insertBefore(e.dom,l.nextSibling):s.appendChild(e.dom)}else s.firstChild?s.insertBefore(e.dom,s.firstChild):s.appendChild(e.dom)}else dn("Layer of zlevel "+t+" is not valid")},eachLayer:function(t,e){var n,i,r=this._zlevelList;for(i=0;i=o.length&&o.push({option:t})}}),o}function Br(t){var a=Q();Ar(t,function(t,e){var n=t.exist;n&&a.set(n.id,t)}),Ar(t,function(t,e){var n=t.option;X(!n||null==n.id||!a.get(n.id)||a.get(n.id)===t,"id duplicates: "+(n&&n.id)),n&&null!=n.id&&a.set(n.id,t),t.keyInfo||(t.keyInfo={})}),Ar(t,function(t,e){var n=t.exist,i=t.option,r=t.keyInfo;if(Dr(i)){if(r.name=null!=i.name?i.name+"":n?n.name:Pr+e,n)r.id=n.id;else if(null!=i.id)r.id=i.id+"";else for(var o=0;r.id="\0"+r.name+"\0"+o++,a.get(r.id););a.set(r.id,t)}})}function Rr(t){var e=t.name;return!(!e||!e.indexOf(Pr))}function Vr(t){return Dr(t)&&t.id&&0===(t.id+"").indexOf("\0_ec_\0")}function Fr(e,t){return null!=t.dataIndexInside?t.dataIndexInside:null!=t.dataIndex?O(t.dataIndex)?P(t.dataIndex,function(t){return e.indexOfRawIndex(t)}):e.indexOfRawIndex(t.dataIndex):null!=t.name?O(t.name)?P(t.name,function(t){return e.indexOfName(t)}):e.indexOfName(t.name):void 0}function Hr(){var e="__\0ec_inner_"+Wr+++"_"+Math.random().toFixed(5);return function(t){return t[e]||(t[e]={})}}var Wr=0;function Gr(s,l,u){if(z(l)){var t={};t[l+"Index"]=0,l=t}var e=u&&u.defaultMainType;!e||Zr(l,e+"Index")||Zr(l,e+"Id")||Zr(l,e+"Name")||(l[e+"Index"]=0);var h={};return Ar(l,function(t,e){t=l[e];if("dataIndex"!==e&&"dataIndexInside"!==e){var n=e.match(/^(\w+)(Index|Id|Name)$/)||[],i=n[1],r=(n[2]||"").toLowerCase();if(!(!i||!r||null==t||"index"===r&&"none"===t||u&&u.includeMainTypes&&x(u.includeMainTypes,i)<0)){var o={mainType:i};"index"===r&&"all"===t||(o[r]=t);var a=s.queryComponents(o);h[i+"Models"]=a,h[i+"Model"]=a[0]}}else h[e]=t}),h}function Zr(t,e){return t&&t.hasOwnProperty(e)}function Ur(t,e,n){t.setAttribute?t.setAttribute(e,n):t[e]=n}function Xr(t){return"auto"===t?v.domSupported?"html":"richText":t||"html"}var Yr=".",jr="___EC__COMPONENT__CONTAINER___";function qr(t){var e={main:"",sub:""};return t&&(t=t.split(Yr),e.main=t[0]||"",e.sub=t[1]||""),e}function $r(t){(t.$constructor=t).extend=function(t){function e(){t.$constructor?t.$constructor.apply(this,arguments):n.apply(this,arguments)}var n=this;return k(e.prototype,t),e.extend=this.extend,e.superCall=Jr,e.superApply=to,w(e,this),e.superClass=n,e}}var Kr=0;function Qr(t){var e=["__\0is_clz",Kr++,Math.random().toFixed(3)].join("_");t.prototype[e]=!0,t.isInstance=function(t){return!(!t||!t[e])}}function Jr(t,e){var n=Z(arguments,2);return this.superClass.prototype[e].apply(t,n)}function to(t,e,n){return this.superClass.prototype[e].apply(t,n)}function eo(n,t){t=t||{};var r={};if(n.registerClass=function(t,e){if(e)if(function(t){X(/^[a-zA-Z0-9_]+([.][a-zA-Z0-9_]+)?$/.test(t),'componentType "'+t+'" illegal')}(e),(e=qr(e)).sub){if(e.sub!==jr){(function(t){var e=r[t.main];e&&e[jr]||((e=r[t.main]={})[jr]=!0);return e})(e)[e.sub]=t}}else r[e.main]=t;return t},n.getClass=function(t,e,n){var i=r[t];if(i&&i[jr]&&(i=e?i[e]:null),n&&!i)throw new Error(e?"Component "+t+"."+(e||"")+" not exists. Load it first.":t+".type should be specified.");return i},n.getClassesByMainType=function(t){t=qr(t);var n=[],e=r[t.main];return e&&e[jr]?D(e,function(t,e){e!==jr&&n.push(t)}):n.push(e),n},n.hasClass=function(t){return t=qr(t),!!r[t.main]},n.getAllClassMainTypes=function(){var n=[];return D(r,function(t,e){n.push(e)}),n},n.hasSubTypes=function(t){t=qr(t);var e=r[t.main];return e&&e[jr]},n.parseClassType=qr,t.registerWhenExtend){var i=n.extend;i&&(n.extend=function(t){var e=i.call(this,t);return n.registerClass(e,t.type)})}return n}function no(s){for(var t=0;tthis._ux||Ko(e-this._yi)>this._uy||this._len<5;return this.addData(Ho.L,t,e),this._ctx&&n&&(this._needsDash()?this._dashedLineTo(t,e):this._ctx.lineTo(t,e)),n&&(this._xi=t,this._yi=e),this},bezierCurveTo:function(t,e,n,i,r,o){return this.addData(Ho.C,t,e,n,i,r,o),this._ctx&&(this._needsDash()?this._dashedBezierTo(t,e,n,i,r,o):this._ctx.bezierCurveTo(t,e,n,i,r,o)),this._xi=r,this._yi=o,this},quadraticCurveTo:function(t,e,n,i){return this.addData(Ho.Q,t,e,n,i),this._ctx&&(this._needsDash()?this._dashedQuadraticTo(t,e,n,i):this._ctx.quadraticCurveTo(t,e,n,i)),this._xi=n,this._yi=i,this},arc:function(t,e,n,i,r,o){return this.addData(Ho.A,t,e,n,n,i,r-i,0,o?0:1),this._ctx&&this._ctx.arc(t,e,n,i,r,o),this._xi=jo(r)*n+t,this._yi=qo(r)*n+e,this},arcTo:function(t,e,n,i,r){return this._ctx&&this._ctx.arcTo(t,e,n,i,r),this},rect:function(t,e,n,i){return this._ctx&&this._ctx.rect(t,e,n,i),this.addData(Ho.R,t,e,n,i),this},closePath:function(){this.addData(Ho.Z);var t=this._ctx,e=this._x0,n=this._y0;return t&&(this._needsDash()&&this._dashedLineTo(e,n),t.closePath()),this._xi=e,this._yi=n,this},fill:function(t){t&&t.fill(),this.toStatic()},stroke:function(t){t&&t.stroke(),this.toStatic()},setLineDash:function(t){if(t instanceof Array){this._lineDash=t;for(var e=this._dashIdx=0,n=0;ne.length&&(this._expandData(),e=this.data);for(var n=0;nl||Ko(a-r)>u||c===h-1)&&(t.lineTo(o,a),i=o,r=a);break;case Ho.C:t.bezierCurveTo(s[c++],s[c++],s[c++],s[c++],s[c++],s[c++]),i=s[c-2],r=s[c-1];break;case Ho.Q:t.quadraticCurveTo(s[c++],s[c++],s[c++],s[c++]),i=s[c-2],r=s[c-1];break;case Ho.A:var f=s[c++],p=s[c++],g=s[c++],m=s[c++],v=s[c++],y=s[c++],_=s[c++],x=s[c++],w=m=ca[i=0]+t&&a<=ca[1]+t?h:0}if(o){l=i;i=ra(r),r=ra(l)}else i=ra(i),r=ra(r);rMath.PI/2&&p<1.5*Math.PI&&(h=-h),c+=h)}}return c}function ma(t,e,n,i,r){for(var o=0,a=0,s=0,l=0,u=0,h=0;hMath.abs(o[1])?0=e[1])return n[1]}else{if(t>=e[0])return n[0];if(t<=e[1])return n[1]}else{if(t===e[0])return n[0];if(t===e[1])return n[1]}return(t-e[0])/r*o+n[0]}function Cl(t,e){switch(t){case"center":case"middle":t="50%";break;case"left":case"top":t="0%";break;case"right":case"bottom":t="100%"}return"string"==typeof t?function(t){return t.replace(/^\s+|\s+$/g,"")}(t).match(/%$/)?parseFloat(t)/100*e:parseFloat(t):null==t?NaN:+t}function Tl(t,e,n){return null==e&&(e=10),e=Math.min(Math.max(0,e),20),t=(+t).toFixed(e),n?t:+t}function Al(t){return t.sort(function(t,e){return t-e}),t}function Dl(t){if(t=+t,isNaN(t))return 0;for(var e=1,n=0;Math.round(t*e)/e!==t;)e*=10,n++;return n}function kl(t){var e=t.toString(),n=e.indexOf("e");if(0h&&(h=u[d],c=d);++s[c],u[c]=0,++l}return s[e]/r}function Ol(t){var e=2*Math.PI;return(t%e+e)%e}function El(t){return-Ml"'])/g,Ul={"&":"&","<":"<",">":">",'"':""","'":"'"};function Xl(t){return null==t?"":(t+"").replace(Zl,function(t,e){return Ul[e]})}function Yl(t,e){return"{"+t+(null==e?"":e)+"}"}var jl=["a","b","c","d","e","f","g"];function ql(t,e,n){O(e)||(e=[e]);var i=e.length;if(!i)return"";for(var r=e[0].$vars||[],o=0;o':'':{renderMode:r,content:"{marker"+o+"|} ",style:{color:n}}:""}function Kl(t,e){return"0000".substr(0,e-(t+="").length)+t}function Ql(t,e,n){"week"!==t&&"month"!==t&&"quarter"!==t&&"half-year"!==t&&"year"!==t||(t="MM-dd\nyyyy");var i=Nl(e),r=n?"UTC":"",o=i["get"+r+"FullYear"](),a=i["get"+r+"Month"]()+1,s=i["get"+r+"Date"](),l=i["get"+r+"Hours"](),u=i["get"+r+"Minutes"](),h=i["get"+r+"Seconds"](),c=i["get"+r+"Milliseconds"]();return t=t.replace("MM",Kl(a,2)).replace("M",a).replace("yyyy",o).replace("yy",o%100).replace("dd",Kl(s,2)).replace("d",s).replace("hh",Kl(l,2)).replace("h",l).replace("mm",Kl(u,2)).replace("m",u).replace("ss",Kl(h,2)).replace("s",h).replace("SSS",Kl(c,3))}function Jl(t){return t?t.charAt(0).toUpperCase()+t.substr(1):t}var tu=fi;var eu=(Object.freeze||Object)({addCommas:Hl,toCamelCase:Wl,normalizeCssArray:Gl,encodeHTML:Xl,formatTpl:ql,formatTplSimple:function(n,t,i){return D(t,function(t,e){n=n.replace("{"+e+"}",i?Xl(t):t)}),n},getTooltipMarker:$l,formatTime:Ql,capitalFirst:Jl,truncateText:tu,getTextBoundingRect:function(t){return ui(t.text,t.font,t.textAlign,t.textVerticalAlign,t.textPadding,t.textLineHeight,t.rich,t.truncate)},getTextRect:function(t,e,n,i,r,o,a,s){return ui(t,e,n,i,r,s,o,a)}}),nu=D,iu=["left","right","top","bottom","width","height"],ru=[["width","left","right"],["height","top","bottom"]];function ou(h,c,d,f,p){var g=0,m=0;null==f&&(f=1/0),null==p&&(p=1/0);var v=0;c.eachChild(function(t,e){var n,i,r=t.position,o=t.getBoundingRect(),a=c.childAt(e+1),s=a&&a.getBoundingRect();if("horizontal"===h){var l=o.width+(s?-s.x+o.x:0);v=f<(n=g+l)||t.newline?(g=0,n=l,m+=v+d,o.height):Math.max(v,o.height)}else{var u=o.height+(s?-s.y+o.y:0);v=p<(i=m+u)||t.newline?(g+=v+d,m=0,i=u,o.width):Math.max(v,o.width)}t.newline||(r[0]=g,r[1]=m,"horizontal"===h?g=n+d:m=i+d)})}var au=ou;T(ou,"vertical"),T(ou,"horizontal");function su(t,e,n){n=Gl(n||0);var i=e.width,r=e.height,o=Cl(t.left,i),a=Cl(t.top,r),s=Cl(t.right,i),l=Cl(t.bottom,r),u=Cl(t.width,i),h=Cl(t.height,r),c=n[2]+n[0],d=n[1]+n[3],f=t.aspect;switch(isNaN(u)&&(u=i-s-d-o),isNaN(h)&&(h=r-l-c-a),null!=f&&(isNaN(u)&&isNaN(h)&&(i/re)return t[i];return t[n-1]}(s,n):a;if((l=l||a)&&l.length){var u=l[r];return t&&(o[t]=u),i.colorIdx=(r+1)%l.length,u}}},bu="original",Su="arrayRows",Mu="objectRows",Iu="keyedColumns",Cu="unknown",Tu="typedArray",Au="column",Du="row";function ku(t){this.fromDataset=t.fromDataset,this.data=t.data||(t.sourceFormat===Iu?{}:[]),this.sourceFormat=t.sourceFormat||Cu,this.seriesLayoutBy=t.seriesLayoutBy||Au,this.dimensionsDefine=t.dimensionsDefine,this.encodeDefine=t.encodeDefine&&Q(t.encodeDefine),this.startIndex=t.startIndex||0,this.dimensionsDetectCount=t.dimensionsDetectCount}ku.seriesDataToSource=function(t){return new ku({data:t,sourceFormat:R(t)?Tu:bu,fromDataset:!1})},Qr(ku);var Pu={Must:1,Might:2,Not:3},Lu=Hr();function Ou(t){var e=t.option,n=e.data,i=R(n)?Tu:bu,r=!1,o=e.seriesLayoutBy,a=e.sourceHeader,s=e.dimensions,l=Ru(t);if(l){var u=l.option;n=u.source,i=Lu(l).sourceFormat,r=!0,o=o||u.seriesLayoutBy,null==a&&(a=u.sourceHeader),s=s||u.dimensions}var h=function(t,e,n,i,r){if(!t)return{dimensionsDefine:Eu(r)};var o,a;if(e===Su)"auto"===i||null==i?zu(function(t){null!=t&&"-"!==t&&(z(t)?null==a&&(a=1):a=0)},n,t,10):a=i?1:0,r||1!==a||(r=[],zu(function(t,e){r[e]=null!=t?t:""},n,t)),o=r?r.length:n===Du?t.length:t[0]?t[0].length:null;else if(e===Mu)r=r||function(t){var e,n=0;for(;n":"\n",f="richText"===c,p={},g=0;function n(t){return{renderMode:c,content:Xl(Hl(t)),style:p}}var m=this.getData(),o=m.mapDimension("defaultedTooltip",!0),i=o.length,a=this.getRawValue(r),s=O(a),v=m.getItemVisual(r,"color");N(v)&&v.colorStops&&(v=(v.colorStops[0]||{}).color),v=v||"transparent";var l=(1":"",i=n+u.join(n||", ");return{renderMode:c,content:i,style:p}}(a):n(i?Ah(m,r,o[0]):s?a[0]:a)).content,u=d.seriesIndex+"at"+g,y=$l({color:v,type:"item",renderMode:c,markerId:u});p[u]=v,++g;var _=m.getName(r),x=this.name;Rr(this)||(x=""),x=x?Xl(x)+(h?": ":e):"";var w="string"==typeof y?y:y.content;return{html:h?w+x+l:x+w+(_?Xl(_)+": "+l:l),markers:p}},isAnimationEnabled:function(){if(v.node)return!1;var t=this.getShallow("animation");return t&&this.getData().count()>this.getShallow("animationThreshold")&&(t=!1),t},restoreData:function(){this.dataTask.dirty()},getColorFromPalette:function(t,e,n){var i=this.ecModel,r=wu.getColorFromPalette.call(this,t,e,n);return r=r||i.getColorFromPalette(t,e,n)},coordDimToDataDim:function(t){return this.getRawData().mapDimension(t,!0)},getProgressive:function(){return this.get("progressive")},getProgressiveThreshold:function(){return this.get("progressiveThreshold")},getAxisTooltipData:null,getTooltipPosition:null,pipeTask:null,preventIncremental:null,pipelineContext:null});function Yh(t){var e=t.name;Rr(t)||(t.name=function(t){var n=t.getRawData(),e=n.mapDimension("seriesName",!0),i=[];return D(e,function(t){var e=n.getDimensionInfo(t);e.displayName&&i.push(e.displayName)}),i.join(" ")}(t)||e)}function jh(t){return t.model.getRawData().count()}function qh(t){var e=t.model;return e.setData(e.getRawData().cloneShallow()),$h}function $h(t,e){t.end>e.outputData.count()&&e.model.getRawData().cloneShallow(e.outputData)}function Kh(e,n){D(e.CHANGABLE_METHODS,function(t){e.wrapMethod(t,T(Qh,n))})}function Qh(t){var e=Jh(t);e&&e.setOutputEnd(this.count())}function Jh(t){var e=(t.ecModel||{}).scheduler,n=e&&e.getPipeline(t.uid);if(n){var i=n.currentTask;if(i){var r=i.agentStubMap;r&&(i=r.get(t.uid))}return i}}S(Xh,Ph),S(Xh,wu);var tc=function(){this.group=new Mn,this.uid=Sl("viewComponent")};tc.prototype={constructor:tc,init:function(t,e){},render:function(t,e,n,i){},dispose:function(){},filterForExposedEvent:null};var ec=tc.prototype;ec.updateView=ec.updateLayout=ec.updateVisual=function(t,e,n,i){},$r(tc),eo(tc,{registerWhenExtend:!0});function nc(){var s=Hr();return function(t){var e=s(t),n=t.pipelineContext,i=e.large,r=e.progressiveRender,o=e.large=n&&n.large,a=e.progressiveRender=n&&n.progressiveRender;return!!(i^o||r^a)&&"reset"}}var ic=Hr(),rc=nc();function oc(){this.group=new Mn,this.uid=Sl("viewChart"),this.renderTask=Lh({plan:uc,reset:hc}),this.renderTask.context={view:this}}var ac=oc.prototype={type:"chart",init:function(t,e){},render:function(t,e,n,i){},highlight:function(t,e,n,i){lc(t.getData(),i,"emphasis")},downplay:function(t,e,n,i){lc(t.getData(),i,"normal")},remove:function(t,e){this.group.removeAll()},dispose:function(){},incrementalPrepareRender:null,incrementalRender:null,updateTransform:null,filterForExposedEvent:null};function sc(t,e,n){if(t&&(t.trigger(e,n),t.isGroup&&!Us(t)))for(var i=0,r=t.childCount();ic?n+=p(g("data.partialData"),{displayCnt:c}):n+=g("data.allData");for(var a=[],s=0;sn.blockIndex?n.step:null,o=i&&i.modDataCount;return{step:r,modBy:null!=o?Math.ceil(o/r):null,modDataCount:o}}},Sc.getPipeline=function(t){return this._pipelineMap.get(t)},Sc.updateStreamModes=function(t,e){var n=this._pipelineMap.get(t.uid),i=t.getData().count(),r=n.progressiveEnabled&&e.incrementalPrepareRender&&i>=n.threshold,o=t.get("large")&&i>=t.get("largeThreshold"),a="mod"===t.get("progressiveChunkMode")?i:null;t.pipelineContext=n.context={progressiveRender:r,modDataCount:a,large:o}},Sc.restorePipelines=function(t){var i=this,r=i._pipelineMap=Q();t.eachSeries(function(t){var e=t.getProgressive(),n=t.uid;r.set(n,{id:n,head:null,tail:null,threshold:t.getProgressiveThreshold(),progressiveEnabled:e&&!(t.preventIncremental&&t.preventIncremental()),blockIndex:-1,step:Math.round(e||700),count:0}),zc(i,t,t.dataTask)})},Sc.prepareStageTasks=function(){var n=this._stageTaskMap,i=this.ecInstance.getModel(),r=this.api;D(this._allHandlers,function(t){var e=n.get(t.uid)||n.set(t.uid,[]);t.reset&&function(i,r,t,o,a){var s=t.seriesTaskMap||(t.seriesTaskMap=Q()),e=r.seriesType,n=r.getTargetSeries;r.createOnAllSeries?o.eachRawSeries(l):e?o.eachRawSeriesByType(e,l):n&&n(o,a).each(l);function l(t){var e=t.uid,n=s.get(e)||s.set(e,Lh({plan:kc,reset:Pc,count:Ec}));n.context={model:t,ecModel:o,api:a,useClearVisual:r.isVisual&&!r.isLayout,plan:r.plan,reset:r.reset,scheduler:i},zc(i,t,n)}var u=i._pipelineMap;s.each(function(t,e){u.get(e)||(t.dispose(),s.removeKey(e))})}(this,t,e,i,r),t.overallReset&&function(i,t,e,n,r){var o=e.overallTask=e.overallTask||Lh({reset:Cc});o.context={ecModel:n,api:r,overallReset:t.overallReset,scheduler:i};var a=o.agentStubMap=o.agentStubMap||Q(),s=t.seriesType,l=t.getTargetSeries,u=!0,h=t.modifyOutputEnd;s?n.eachRawSeriesByType(s,c):l?l(n,r).each(c):(u=!1,D(n.getSeries(),c));function c(t){var e=t.uid,n=a.get(e);n||(n=a.set(e,Lh({reset:Tc,onDirty:Dc})),o.dirty()),n.context={model:t,overallProgress:u,modifyOutputEnd:h},n.agent=o,n.__block=u,zc(i,t,n)}var d=i._pipelineMap;a.each(function(t,e){d.get(e)||(t.dispose(),o.dirty(),a.removeKey(e))})}(this,t,e,i,r)},this)},Sc.prepareView=function(t,e,n,i){var r=t.renderTask,o=r.context;o.model=e,o.ecModel=n,o.api=i,r.__block=!t.incrementalPrepareRender,zc(this,e,r)},Sc.performDataProcessorTasks=function(t,e){Mc(this,this._dataProcessorHandlers,t,e,{block:!0})},Sc.performVisualTasks=function(t,e,n){Mc(this,this._visualHandlers,t,e,n)},Sc.performSeriesTasks=function(t){var e;t.eachSeries(function(t){e|=t.dataTask.perform()}),this.unfinished|=e},Sc.plan=function(){this._pipelineMap.each(function(t){var e=t.tail;do{if(e.__block){t.blockIndex=e.__idxInPipeline;break}e=e.getUpstream()}while(e)})};var Ic=Sc.updatePayload=function(t,e){"remain"!==e&&(t.context.payload=e)};function Cc(t){t.overallReset(t.ecModel,t.api,t.payload)}function Tc(t,e){return t.overallProgress&&Ac}function Ac(){this.agent.dirty(),this.getDownstream().dirty()}function Dc(){this.agent&&this.agent.dirty()}function kc(t){return t.plan&&t.plan(t.model,t.ecModel,t.api,t.payload)}function Pc(t){t.useClearVisual&&t.data.clearAllVisual();var e=t.resetDefines=Lr(t.reset(t.model,t.ecModel,t.api,t.payload));return 1t.get("hoverLayerThreshold")&&!v.node&&t.eachSeries(function(t){if(!t.preventUsingHoverLayer){var e=n._chartsMap[t.__viewId];e.__alive&&e.group.traverse(function(t){t.useHoverLayer=!0})}})}(i,t),xc(i._zr.dom,t)}function Ed(e,n){hd(Wd,function(t){t(e,n)})}wd.resize=function(t){if(!this._disposed){this._zr.resize(t);var e=this._model;if(this._loadingFX&&this._loadingFX.resize(),e){var n=e.resetOption("media"),i=t&&t.silent;this[gd]=!0,n&&Md(this),Sd.update.call(this),this[gd]=!1,Ad.call(this,i),Dd.call(this,i)}}},wd.showLoading=function(t,e){if(!this._disposed&&(dd(t)&&(e=t,t=""),t=t||"default",this.hideLoading(),Ud[t])){var n=Ud[t](this._api,e),i=this._zr;this._loadingFX=n,i.add(n)}},wd.hideLoading=function(){this._disposed||(this._loadingFX&&this._zr.remove(this._loadingFX),this._loadingFX=null)},wd.makeActionFromEvent=function(t){var e=k({},t);return e.type=Vd[t.type],e},wd.dispatchAction=function(t,e){this._disposed||(dd(e)||(e={silent:!!e}),Rd[t.type]&&this._model&&(this[gd]?this._pendingActions.push(t):(Td.call(this,t,e.silent),e.flush?this._zr.flush(!0):!1!==e.flush&&v.browser.weChat&&this._throttledZrFlush(),Ad.call(this,e.silent),Dd.call(this,e.silent))))},wd.appendData=function(t){if(!this._disposed){var e=t.seriesIndex;this.getModel().getSeriesByIndex(e).appendData(t),this._scheduler.unfinished=!0}},wd.on=yd("on",!1),wd.off=yd("off",!1),wd.one=yd("one",!1);var zd=["click","dblclick","mouseover","mouseout","mousemove","mousedown","mouseup","globalout","contextmenu"];function Nd(t,e){var n=t.get("z"),i=t.get("zlevel");e.group.traverse(function(t){"group"!==t.type&&(null!=n&&(t.z=n),null!=i&&(t.zlevel=i))})}function Bd(){this.eventInfo}wd._initEvents=function(){hd(zd,function(u){function t(t){var e,n=this.getModel(),i=t.target;if("globalout"===u)e={};else if(i&&null!=i.dataIndex){var r=i.dataModel||n.getSeriesByIndex(i.seriesIndex);e=r&&r.getDataParams(i.dataIndex,i.dataType,i)||{}}else i&&i.eventData&&(e=k({},i.eventData));if(e){var o=e.componentType,a=e.componentIndex;"markLine"!==o&&"markPoint"!==o&&"markArea"!==o||(o="series",a=e.seriesIndex);var s=o&&null!=a&&n.getComponent(o,a),l=s&&this["series"===s.mainType?"_chartsMap":"_componentsMap"][s.__viewId];e.event=t,e.type=u,this._ecEventProcessor.eventInfo={targetEl:i,packedEvent:e,model:s,view:l},this.trigger(u,e)}}t.zrEventfulCallAtLast=!0,this._zr.on(u,t,this)},this),hd(Vd,function(t,e){this._messageCenter.on(e,function(t){this.trigger(e,t)},this)},this)},wd.isDisposed=function(){return this._disposed},wd.clear=function(){this._disposed||this.setOption({series:[]},!0)},wd.dispose=function(){if(!this._disposed){this._disposed=!0,Ur(this.getDom(),$d,"");var e=this._api,n=this._model;hd(this._componentsViews,function(t){t.dispose(n,e)}),hd(this._chartsViews,function(t){t.dispose(n,e)}),this._zr.dispose(),delete Xd[this.id]}},S(xd,It),Bd.prototype={constructor:Bd,normalizeQuery:function(t){var s={},l={},u={};if(z(t)){var e=fd(t);s.mainType=e.main||null,s.subType=e.sub||null}else{var h=["Index","Name","Id"],c={name:1,dataIndex:1,dataType:1};D(t,function(t,e){for(var n=!1,i=0;i_[1]&&(_[1]=y)}e&&(this._nameList[d]=e[f])}this._rawCount=this._count=l,this._extent={},Lf(this)},kf._initDataFromProvider=function(t,e){if(!(e<=t)){for(var n,i=this._chunkSize,r=this._rawData,o=this._storage,a=this.dimensions,s=a.length,l=this._dimensionInfos,u=this._nameList,h=this._idList,c=this._rawExtent,d=this._nameRepeatCount={},f=this._chunkCount,p=0;pM[1]&&(M[1]=S)}if(!r.pure){var I=u[v];if(m&&null==I)if(null!=m.name)u[v]=I=m.name;else if(null!=n){var C=a[n],T=o[C][y];if(T){I=T[_];var A=l[C].ordinalMeta;A&&A.categories.length&&(I=A.categories[I])}}var D=null==m?null:m.id;null==D&&null!=I&&(d[I]=d[I]||0,0=this._rawCount||t<0)return-1;if(!this._indices)return t;var e=this._indices,n=e[t];if(null!=n&&nt))return o;r=o-1}}return-1},kf.indicesOfNearest=function(t,e,n){var i=[];if(!this._storage[t])return i;null==n&&(n=1/0);for(var r=1/0,o=-1,a=0,s=0,l=this.count();st[I][1])&&(M=!1)}M&&(o[a++]=this.getRawIndex(m))}return aw[1]&&(w[1]=x)}}}return r},kf.downSample=function(t,e,n,i){for(var r=Rf(this,[t]),o=r._storage,a=[],s=Math.floor(1/e),l=o[t],u=this.count(),h=this._chunkSize,c=r._rawExtent[t],d=new(If(this))(u),f=0,p=0;pc[1]&&(c[1]=_),d[f++]=x}return r._count=f,r._indices=d,r.getRawIndex=zf,r},kf.getItemModel=function(t){var e=this.hostModel;return new _l(this.getRawDataItem(t),e,e&&e.ecModel)},kf.diff=function(e){var n=this;return new pf(e?e.getIndices():[],this.getIndices(),function(t){return Nf(e,t)},function(t){return Nf(n,t)})},kf.getVisual=function(t){var e=this._visual;return e&&e[t]},kf.setVisual=function(t,e){if(_f(t))for(var n in t)t.hasOwnProperty(n)&&this.setVisual(n,t[n]);else this._visual=this._visual||{},this._visual[t]=e},kf.setLayout=function(t,e){if(_f(t))for(var n in t)t.hasOwnProperty(n)&&this.setLayout(n,t[n]);else this._layout[t]=e},kf.getLayout=function(t){return this._layout[t]},kf.getItemLayout=function(t){return this._itemLayouts[t]},kf.setItemLayout=function(t,e,n){this._itemLayouts[t]=n?k(this._itemLayouts[t]||{},e):e},kf.clearItemLayouts=function(){this._itemLayouts.length=0},kf.getItemVisual=function(t,e,n){var i=this._itemVisuals[t],r=i&&i[e];return null!=r||n?r:this.getVisual(e)},kf.setItemVisual=function(t,e,n){var i=this._itemVisuals[t]||{},r=this.hasItemVisual;if(this._itemVisuals[t]=i,_f(e))for(var o in e)e.hasOwnProperty(o)&&(i[o]=e[o],r[o]=!0);else i[e]=n,r[e]=!0},kf.clearAllVisual=function(){this._visual={},this._itemVisuals=[],this.hasItemVisual={}};function Hf(t){t.seriesIndex=this.seriesIndex,t.dataIndex=this.dataIndex,t.dataType=this.dataType}function Wf(t,e,n){ku.isInstance(e)||(e=ku.seriesDataToSource(e)),n=n||{},t=(t||[]).slice();for(var i=(n.dimsDef||[]).slice(),r=Q(),o=Q(),l=[],a=function(t,e,n,i){var r=Math.max(t.dimensionsDetectCount||1,e.length,n.length,i||0);return D(e,function(t){var e=t.dimsDef;e&&(r=Math.max(r,e.length))}),r}(e,t,i,n.dimCount),s=0;s=e[0]&&t<=e[1]},Qf.prototype.normalize=function(t){var e=this._extent;return e[1]===e[0]?.5:(t-e[0])/(e[1]-e[0])},Qf.prototype.scale=function(t){var e=this._extent;return t*(e[1]-e[0])+e[0]},Qf.prototype.unionExtent=function(t){var e=this._extent;t[0]e[1]&&(e[1]=t[1])},Qf.prototype.unionExtentFromData=function(t,e){this.unionExtent(t.getApproximateExtent(e))},Qf.prototype.getExtent=function(){return this._extent.slice()},Qf.prototype.setExtent=function(t,e){var n=this._extent;isNaN(t)||(n[0]=t),isNaN(e)||(n[1]=e)},Qf.prototype.isBlank=function(){return this._isBlank},Qf.prototype.setBlank=function(t){this._isBlank=t},Qf.prototype.getLabel=null,$r(Qf),eo(Qf,{registerWhenExtend:!0}),Jf.createByAxisModel=function(t){var e=t.option,n=e.data,i=n&&P(n,np);return new Jf({categories:i,needCollect:!i,deduplication:!1!==e.dedplication})};var tp=Jf.prototype;function ep(t){return t._map||(t._map=Q(t.categories))}function np(t){return N(t)&&null!=t.value?t.value:t+""}tp.getOrdinal=function(t){return ep(this).get(t)},tp.parseAndCollect=function(t){var e,n=this._needCollect;if("string"!=typeof t&&!n)return t;if(n&&!this._deduplication)return e=this.categories.length,this.categories[e]=t,e;var i=ep(this);return null==(e=i.get(t))&&(n?(e=this.categories.length,this.categories[e]=t,i.set(t,e)):e=NaN),e};var ip=Qf.prototype,rp=Qf.extend({type:"ordinal",init:function(t,e){t&&!O(t)||(t=new Jf({categories:t})),this._ordinalMeta=t,this._extent=e||[0,t.categories.length-1]},parse:function(t){return"string"==typeof t?this._ordinalMeta.getOrdinal(t):Math.round(t)},contain:function(t){return t=this.parse(t),ip.contain.call(this,t)&&null!=this._ordinalMeta.categories[t]},normalize:function(t){return ip.normalize.call(this,this.parse(t))},scale:function(t){return Math.round(ip.scale.call(this,t))},getTicks:function(){for(var t=[],e=this._extent,n=e[0];n<=e[1];)t.push(n),n++;return t},getLabel:function(t){if(!this.isBlank())return this._ordinalMeta.categories[t]},count:function(){return this._extent[1]-this._extent[0]+1},unionExtentFromData:function(t,e){this.unionExtent(t.getApproximateExtent(e))},getOrdinalMeta:function(){return this._ordinalMeta},niceTicks:J,niceExtent:J});rp.create=function(){return new rp};var op=Tl;function ap(t){return kl(t)+2}function sp(t,e,n){t[e]=Math.max(Math.min(t[e],n[1]),n[0])}function lp(t,e){isFinite(t[0])||(t[0]=e[0]),isFinite(t[1])||(t[1]=e[1]),sp(t,0,e),sp(t,1,e),t[0]>t[1]&&(t[0]=t[1])}var up=Tl,hp=Qf.extend({type:"interval",_interval:0,_intervalPrecision:2,setExtent:function(t,e){var n=this._extent;isNaN(t)||(n[0]=parseFloat(t)),isNaN(e)||(n[1]=parseFloat(e))},unionExtent:function(t){var e=this._extent;t[0]e[1]&&(e[1]=t[1]),hp.prototype.setExtent.call(this,e[0],e[1])},getInterval:function(){return this._interval},setInterval:function(t){this._interval=t,this._niceExtent=this._extent.slice(),this._intervalPrecision=ap(t)},getTicks:function(t){var e=this._interval,n=this._extent,i=this._niceExtent,r=this._intervalPrecision,o=[];if(!e)return o;n[0]s&&(t?o.push(up(s+e,r)):o.push(n[1])),o},getMinorTicks:function(t){for(var e=this.getTicks(!0),n=[],i=this.getExtent(),r=1;ri[0]&&h>>1;t[r][1]>1^-(1&s),l=l>>1^-(1&l),r=s+=r,o=l+=o,i.push([s/n,l/n])}return i}sg.prototype={constructor:sg,properties:null,getBoundingRect:function(){var t=this._rect;if(t)return t;for(var e=Number.MAX_VALUE,n=[e,e],i=[-e,-e],r=[],o=[],a=this.geometries,s=0;ss[1];d(e[0].coord,s[0])&&(i?e[0].coord=s[0]:e.shift());i&&d(s[0],e[0].coord)&&e.unshift({coord:s[0]});d(s[1],o.coord)&&(i?o.coord=s[1]:e.pop());i&&d(o.coord,s[1])&&e.push({coord:s[1]});function d(t,e){return t=Tl(t),e=Tl(e),c?ei[0]&&(i[0]=o[0]),o[1]>i[1]&&(i[1]=o[1])}return{min:e?n:i,max:e?i:n}}var Jg=xa.extend({type:"ec-polyline",shape:{points:[],smooth:0,smoothConstraint:!0,smoothMonotone:null,connectNulls:!1},style:{fill:null,stroke:"#000"},brush:Va(xa.prototype.brush),buildPath:function(t,e){var n=e.points,i=0,r=n.length,o=Qg(n,e.smoothConstraint);if(e.connectNulls){for(;0i)return!1;return!0}(o,e))){var a=e.mapDimension(o.dim),s={};return D(o.getViewLabels(),function(t){s[t.tickValue]=1}),function(t){return!s.hasOwnProperty(e.get(a,t))}}}}function sm(t,e,n){if("cartesian2d"!==t.type)return nm(t,e,n);var i=t.getBaseAxis().isHorizontal(),r=em(t,e,n);if(!n.get("clip",!0)){var o=r.shape,a=Math.max(o.width,o.height);i?(o.y-=a,o.height+=2*a):(o.x-=a,o.width+=2*a)}return r}oc.extend({type:"line",init:function(){var t=new Mn,e=new Ng;this.group.add(e.group),this._symbolDraw=e,this._lineGroup=t},render:function(t,e,n){var i=t.coordinateSystem,r=this.group,o=t.getData(),a=t.getModel("lineStyle"),s=t.getModel("areaStyle"),l=o.mapArray(o.getItemLayout),u="polar"===i.type,h=this._coordSys,c=this._symbolDraw,d=this._polyline,f=this._polygon,p=this._lineGroup,g=t.get("animation"),m=!s.isEmpty(),v=s.get("origin"),y=function(t,e,n){if(!n.valueDim)return[];for(var i=[],r=0,o=e.count();rh[c-1].coord&&(h.reverse(),d.reverse());var f=h[0].coord-10,p=h[c-1].coord+10,g=p-f;if(g<.001)return"transparent";D(h,function(t){t.offset=(t.coord-f)/g}),h.push({offset:c?h[c-1].offset:.5,color:d[1]||"transparent"}),h.unshift({offset:c?h[0].offset:.5,color:d[0]||"transparent"});var m=new ls(0,0,0,0,h,!0);return m[i]=f,m[i+"2"]=p,m}}}(o,i)||o.getVisual("color");d.useStyle(A(a.getLineStyle(),{fill:"none",stroke:M,lineJoin:"bevel"}));var I=t.get("smooth");if(I=rm(t.get("smooth")),d.setShape({smooth:I,smoothMonotone:t.get("smoothMonotone"),connectNulls:t.get("connectNulls")}),f){var C=o.getCalculationInfo("stackedOnSeries"),T=0;f.useStyle(A(s.getAreaStyle(),{fill:M,opacity:.7,lineJoin:"bevel"})),C&&(T=rm(C.get("smooth"))),f.setShape({smooth:I,stackedOnSmooth:T,smoothMonotone:t.get("smoothMonotone"),connectNulls:t.get("connectNulls")})}this._data=o,this._coordSys=i,this._stackedOnPoints=y,this._points=l,this._step=S,this._valueOrigin=v},dispose:function(){},highlight:function(t,e,n,i){var r=t.getData(),o=Fr(r,i);if(!(o instanceof Array)&&null!=o&&0<=o){var a=r.getItemGraphicEl(o);if(!a){var s=r.getItemLayout(o);if(!s)return;if(this._clipShapeForSymbol&&!this._clipShapeForSymbol.contain(s[0],s[1]))return;(a=new Cg(r,o)).position=s,a.setZ(t.get("zlevel"),t.get("z")),a.ignore=isNaN(s[0])||isNaN(s[1]),a.__temp=!0,r.setItemGraphicEl(o,a),a.stopSymbolAnimation(!0),this.group.add(a)}a.highlight()}else oc.prototype.highlight.call(this,t,e,n,i)},downplay:function(t,e,n,i){var r=t.getData(),o=Fr(r,i);if(null!=o&&0<=o){var a=r.getItemGraphicEl(o);a&&(a.__temp?(r.setItemGraphicEl(o,null),this.group.remove(a)):a.downplay())}else oc.prototype.downplay.call(this,t,e,n,i)},_newPolyline:function(t){var e=this._polyline;return e&&this._lineGroup.remove(e),e=new Jg({shape:{points:t},silent:!0,z2:10}),this._lineGroup.add(e),this._polyline=e},_newPolygon:function(t,e){var n=this._polygon;return n&&this._lineGroup.remove(n),n=new tm({shape:{points:t,stackedOnPoints:e},silent:!0}),this._lineGroup.add(n),this._polygon=n},_updateAnimation:function(t,e,n,i,r,o){var a=this._polyline,s=this._polygon,l=t.hostModel,u=function(t,e,n,i,r,o,a,s){for(var l=function(t,e){var n=[];return e.diff(t).add(function(t){n.push({cmd:"+",idx:t})}).update(function(t,e){n.push({cmd:"=",idx:e,idx1:t})}).remove(function(t){n.push({cmd:"-",idx:t})}).execute(),n}(t,e),u=[],h=[],c=[],d=[],f=[],p=[],g=[],m=Hg(r,e,a),v=Hg(o,t,s),y=0;ye&&(e=t[n]);return isFinite(e)?e:NaN},min:function(t){for(var e=1/0,n=0;ne[1]&&e.reverse(),e},getOtherAxis:function(){this.grid.getOtherAxis()},pointToData:function(t,e){return this.coordToData(this.toLocalCoord(t["x"===this.dim?0:1]),e)},toLocalCoord:null,toGlobalCoord:null},w(gm,_g);var mm={show:!0,zlevel:0,z:0,inverse:!1,name:"",nameLocation:"end",nameRotate:null,nameTruncate:{maxWidth:null,ellipsis:"...",placeholder:"."},nameTextStyle:{},nameGap:15,silent:!1,triggerEvent:!1,tooltip:{show:!1},axisPointer:{},axisLine:{show:!0,onZero:!0,onZeroAxisIndex:null,lineStyle:{color:"#333",width:1,type:"solid"},symbol:["none","none"],symbolSize:[10,15]},axisTick:{show:!0,inside:!1,length:5,lineStyle:{width:1}},axisLabel:{show:!0,inside:!1,rotate:0,showMinLabel:null,showMaxLabel:null,margin:8,fontSize:12},splitLine:{show:!0,lineStyle:{color:["#ccc"],width:1,type:"solid"}},splitArea:{show:!1,areaStyle:{color:["rgba(250,250,250,0.3)","rgba(200,200,200,0.3)"]}}},vm={};vm.categoryAxis=m({boundaryGap:!0,deduplication:null,splitLine:{show:!1},axisTick:{alignWithLabel:!1,interval:"auto"},axisLabel:{interval:"auto"}},mm),vm.valueAxis=m({boundaryGap:[0,0],splitNumber:5,minorTick:{show:!1,splitNumber:5,length:3,lineStyle:{}},minorSplitLine:{show:!1,lineStyle:{color:"#eee",width:1}}},mm),vm.timeAxis=A({scale:!0,min:"dataMin",max:"dataMax"},vm.valueAxis),vm.logAxis=A({scale:!0,logBase:10},vm.valueAxis);function ym(o,t,a,e){D(_m,function(r){t.extend({type:o+"Axis."+r,mergeDefaultAndTheme:function(t,e){var n=this.layoutMode,i=n?hu(t):{};m(t,e.getTheme().get(r+"Axis")),m(t,this.getDefaultOption()),t.type=a(o,t),n&&uu(t,i,n)},optionUpdated:function(){"category"===this.option.type&&(this.__ordinalMeta=Jf.createByAxisModel(this))},getCategories:function(t){var e=this.option;if("category"===e.type)return t?e.data:this.__ordinalMeta.categories},getOrdinalMeta:function(){return this.__ordinalMeta},defaultOption:p([{},vm[r+"Axis"],e],!0)})}),mu.registerSubTypeDefaulter(o+"Axis",T(a,o))}var _m=["value","category","time","log"],xm=mu.extend({type:"cartesian2dAxis",axis:null,init:function(){xm.superApply(this,"init",arguments),this.resetRange()},mergeOption:function(){xm.superApply(this,"mergeOption",arguments),this.resetRange()},restoreData:function(){xm.superApply(this,"restoreData",arguments),this.resetRange()},getCoordSysModel:function(){return this.ecModel.queryComponents({mainType:"grid",index:this.option.gridIndex,id:this.option.gridId})[0]}});function wm(t,e){return e.type||(e.data?"category":"value")}m(xm.prototype,Xp);var bm={offset:0};function Sm(t,e){return t.getCoordSysModel()===e}function Mm(t,e,n){this._coordsMap={},this._coordsList=[],this._axesMap={},this._axesList=[],this._initCartesian(t,e,n),this.model=t}ym("x",xm,wm,bm),ym("y",xm,wm,bm),mu.extend({type:"grid",dependencies:["xAxis","yAxis"],layoutMode:"box",coordinateSystem:null,defaultOption:{show:!1,zlevel:0,z:0,left:"10%",top:60,right:"10%",bottom:60,containLabel:!1,backgroundColor:"rgba(0,0,0,0)",borderWidth:1,borderColor:"#ccc"}});var Im=Mm.prototype;function Cm(t,e,n,i){n.getAxesOnZeroOf=function(){return r?[r]:[]};var r,o=t[e],a=n.model,s=a.get("axisLine.onZero"),l=a.get("axisLine.onZeroAxisIndex");if(s){if(null!=l)Tm(o[l])&&(r=o[l]);else for(var u in o)if(o.hasOwnProperty(u)&&Tm(o[u])&&!i[h(o[u])]){r=o[u];break}r&&(i[h(r)]=!0)}function h(t){return t.dim+"_"+t.index}}function Tm(t){return t&&"category"!==t.type&&"time"!==t.type&&function(t){var e=t.scale.getExtent(),n=e[0],i=e[1];return!(0u[1]?-1:1,c=["start"===o?u[0]-h*l:"end"===o?u[1]+h*l:(u[0]+u[1])/2,Vm(o)?t.labelOffset+a*l:0],d=e.get("nameRotate");null!=d&&(d=d*Lm/180),Vm(o)?i=zm(t.rotation,null!=d?d:t.rotation,a):(i=function(t,e,n,i){var r,o,a=Ol(n-t.rotation),s=i[0]>i[1],l="start"===e&&!s||"start"!==e&&s;r=El(a-Lm/2)?(o=l?"bottom":"top","center"):El(a-1.5*Lm)?(o=l?"top":"bottom","center"):(o="middle",a<1.5*Lm&&Lm/2l[1]&&l.reverse(),(null==a||a>l[1])&&(a=l[1]),a=n.r0}}});var Av=Math.PI/180;function Dv(r,t,e,n,i,o,a,s,l,u){function h(t,e,n){for(var i=t;il+a);i++)if(r[i].y+=n,tr[i].y+r[i].height)return void c(i,n/2);c(e-1,n/2)}function c(t,e){for(var n=t;0<=n&&!(r[n].y-er[n-1].y+r[n-1].height));n--);}function d(t,e,n,i,r,o){for(var a=e?Number.MAX_VALUE:0,s=0,l=t.length;s=e?v.push(r[y]):m.push(r[y]);d(m,!1,t,e,n,i),d(v,!0,t,e,n,i)}function kv(t){return"center"===t.position}function Pv(k,P,L,t,O,e){var E,z,N=k.getData(),B=[],R=!1,V=(k.get("minShowLabelAngle")||0)*Av;N.each(function(t){var e=N.getItemLayout(t),n=N.getItemModel(t),i=n.getModel("label"),r=i.get("position")||n.get("emphasis.label.position"),o=i.get("distanceToLabelLine"),a=i.get("alignTo"),s=Cl(i.get("margin"),L),l=i.get("bleedMargin"),u=i.getFont(),h=n.getModel("labelLine"),c=h.get("length");c=Cl(c,L);var d=h.get("length2");if(d=Cl(d,L),!(e.anglea)return!0;if(o){var s=Um(t).seriesDataCount,l=i.getExtent();return Math.abs(l[0]-l[1])/s>a}return!1},makeElOption:function(t,e,n,i,r){},createPointerEl:function(t,e,n,i){var r=e.pointer;if(r){var o=ay(t).pointerEl=new dl[r.type](sy(e.pointer));t.add(o)}},createLabelEl:function(t,e,n,i){if(e.label){var r=ay(t).labelEl=new Ja(sy(e.label));t.add(r),cy(r,i)}},updatePointerEl:function(t,e,n){var i=ay(t).pointerEl;i&&e.pointer&&(i.setStyle(e.pointer.style),n(i,{shape:e.pointer.shape}))},updateLabelEl:function(t,e,n,i){var r=ay(t).labelEl;r&&(r.setStyle(e.label.style),n(r,{shape:e.label.shape,position:e.label.position}),cy(r,i))},_renderHandle:function(t){if(!this._dragging&&this.updateHandleTransform){var e,n=this._axisPointerModel,i=this._api.getZr(),r=this._handle,o=n.getModel("handle"),a=n.get("status");if(!o.get("show")||!a||"hide"===a)return r&&i.remove(r),void(this._handle=null);this._handle||(e=!0,r=this._handle=ul(o.get("icon"),{cursor:"move",draggable:!0,onmousemove:function(t){Wt(t.event)},onmousedown:ly(this._onHandleDragMove,this,0,0),drift:ly(this._onHandleDragMove,this),ondragend:ly(this._onHandleDragEnd,this)}),i.add(r)),fy(r,n,!1);r.setStyle(o.getItemStyle(null,["color","borderColor","borderWidth","opacity","shadowColor","shadowBlur","shadowOffsetX","shadowOffsetY"]));var s=o.get("size");O(s)||(s=[s,s]),r.attr("scale",[s[0]/2,s[1]/2]),mc(this,"_doDispatchAxisPointer",o.get("throttle")||0,"fixRate"),this._moveHandleToValue(t,e)}},_moveHandleToValue:function(t,e){hy(this._axisPointerModel,!e&&this._moveAnimation,this._handle,dy(this.getHandleTransform(t,this._axisModel,this._axisPointerModel)))},_onHandleDragMove:function(t,e){var n=this._handle;if(n){this._dragging=!0;var i=this.updateHandleTransform(dy(n),[t,e],this._axisModel,this._axisPointerModel);this._payloadInfo=i,n.stopAnimation(),n.attr(dy(i)),ay(n).lastProp=null,this._doDispatchAxisPointer()}},_doDispatchAxisPointer:function(){if(this._handle){var t=this._payloadInfo,e=this._axisModel;this._api.dispatchAction({type:"updateAxisPointer",x:t.cursorPoint[0],y:t.cursorPoint[1],tooltipOption:t.tooltipOption,axesInfo:[{axisDim:e.axis.dim,axisIndex:e.componentIndex}]})}},_onHandleDragEnd:function(t){if(this._dragging=!1,this._handle){var e=this._axisPointerModel.get("value");this._moveHandleToValue(e),this._api.dispatchAction({type:"hideTip"})}},getHandleTransform:null,updateHandleTransform:null,clear:function(t){this._lastValue=null,this._lastStatus=null;var e=t.getZr(),n=this._group,i=this._handle;e&&n&&(this._lastGraphicKey=null,n&&e.remove(n),i&&e.remove(i),this._group=null,this._handle=null,this._payloadInfo=null)},doClear:function(){},buildLabel:function(t,e,n){return{x:t[n=n||0],y:t[1-n],width:e[n],height:e[1-n]}}}).constructor=uy);var vy=uy.extend({makeElOption:function(t,e,n,i,r){var o=n.axis,a=o.grid,s=i.get("type"),l=yy(a,o).getOtherAxis(o).getGlobalExtent(),u=o.toGlobalCoord(o.dataToCoord(e,!0));if(s&&"none"!==s){var h=function(t){var e,n=t.get("type"),i=t.getModel(n+"Style");return"line"===n?(e=i.getLineStyle()).fill=null:"shadow"===n&&((e=i.getAreaStyle()).stroke=null),e}(i),c=_y[s](o,u,l);c.style=h,t.graphicKey=c.type,t.pointer=c}!function(t,e,n,i,r,o){var a=Pm.innerTextLayout(n.rotation,0,n.labelDirection);n.labelMargin=r.get("label.margin"),py(e,i,r,o,{position:my(i.axis,t,n),align:a.textAlign,verticalAlign:a.textVerticalAlign})}(e,t,Qm(a.model,n),n,i,r)},getHandleTransform:function(t,e,n){var i=Qm(e.axis.grid.model,e,{labelInside:!1});return i.labelMargin=n.get("handle.margin"),{position:my(e.axis,t,i),rotation:i.rotation+(i.labelDirection<0?Math.PI:0)}},updateHandleTransform:function(t,e,n,i){var r=n.axis,o=r.grid,a=r.getGlobalExtent(!0),s=yy(o,r).getOtherAxis(r).getGlobalExtent(),l="x"===r.dim?0:1,u=t.position;u[l]+=e[l],u[l]=Math.min(a[1],u[l]),u[l]=Math.max(a[0],u[l]);var h=(s[1]+s[0])/2,c=[h,h];c[l]=u[l];return{position:u,rotation:t.rotation,cursorPoint:c,tooltipOption:[{verticalAlign:"middle"},{align:"center"}][l]}}});function yy(t,e){var n={};return n[e.dim+"AxisIndex"]=e.index,t.getCartesian(n)}var _y={line:function(t,e,n){return{type:"Line",subPixelOptimize:!0,shape:function(t,e,n){return{x1:t[n=n||0],y1:t[1-n],x2:e[n],y2:e[1-n]}}([e,n[0]],[e,n[1]],xy(t))}},shadow:function(t,e,n){var i=Math.max(1,t.getBandWidth()),r=n[1]-n[0];return{type:"Rect",shape:function(t,e,n){return{x:t[n=n||0],y:t[1-n],width:e[n],height:e[1-n]}}([e-i/2,n[0]],[i,r],xy(t))}}};function xy(t){return"x"===t.dim?0:1}jm.registerAxisPointerClass("CartesianAxisPointer",vy),ef(function(t){if(t){t.axisPointer&&0!==t.axisPointer.length||(t.axisPointer={});var e=t.axisPointer.link;e&&!O(e)&&(t.axisPointer.link=[e])}}),nf(pd.PROCESSOR.STATISTIC,function(t,e){t.getComponent("axisPointer").coordSysAxesInfo=Gm(t,e)}),rf({type:"updateAxisPointer",event:"updateAxisPointer",update:":updateAxisPointer"},function(t,e,n){var i=t.currTrigger,a=[t.x,t.y],r=t,o=t.dispatchAction||C(n.dispatchAction,n),s=e.getComponent("axisPointer").coordSysAxesInfo;if(s){Qv(a)&&(a=Zv({seriesIndex:r.seriesIndex,dataIndex:r.dataIndex},e).point);var l=Qv(a),u=r.axesInfo,h=s.axesInfo,c="leave"===i||Qv(a),d={},f={},p={list:[],map:{}},g={showPointer:Xv(qv,f),showTooltip:Xv($v,p)};Uv(s.coordSysMap,function(t,e){var o=l||t.containPoint(a);Uv(s.coordSysAxesInfo[e],function(t,e){var n=t.axis,i=function(t,e){for(var n=0;n<(t||[]).length;n++){var i=t[n];if(e.axis.dim===i.axisDim&&e.axis.model.componentIndex===i.axisIndex)return i}}(u,t);if(!c&&o&&(!u||i)){var r=i&&i.value;null!=r||l||(r=n.pointToData(a)),null!=r&&jv(t,r,g,!1,d)}})});var m={};return Uv(h,function(r,t){var o=r.linkGroup;o&&!f[t]&&Uv(o.axesInfo,function(t,e){var n=f[e];if(t!==r&&n){var i=n.value;o.mapper&&(i=r.axis.scale.parse(o.mapper(i,Kv(t),Kv(r)))),m[r.key]=i}})}),Uv(m,function(t,e){jv(h[e],t,g,!0,d)}),function(r,t,e){var o=e.axesInfo=[];Uv(t,function(t,e){var n=t.axisPointerModel.option,i=r[e];i?(t.useHandle||(n.status="show"),n.value=i.value,n.seriesDataIndices=(i.payloadBatch||[]).slice()):t.useHandle||(n.status="hide"),"show"===n.status&&o.push({axisDim:t.axis.dim,axisIndex:t.axis.model.componentIndex,value:n.value})})}(f,h,d),function(t,e,n,i){if(Qv(e)||!t.list.length)return i({type:"hideTip"});var r=((t.list[0].dataByAxis[0]||{}).seriesDataIndices||[])[0]||{};i({type:"showTip",escapeConnect:!0,x:e[0],y:e[1],tooltipOption:n.tooltipOption,position:n.position,dataIndexInside:r.dataIndexInside,dataIndex:r.dataIndex,seriesIndex:r.seriesIndex,dataByCoordSys:t.list})}(p,a,t,o),function(t,e,n){var i=n.getZr(),r="axisPointerLastHighlights",o=Yv(i)[r]||{},a=Yv(i)[r]={};Uv(t,function(t,e){var n=t.axisPointerModel.option;"show"===n.status&&Uv(n.seriesDataIndices,function(t){var e=t.seriesIndex+" | "+t.dataIndex;a[e]=t})});var s=[],l=[];D(o,function(t,e){a[e]||l.push(t)}),D(a,function(t,e){o[e]||s.push(t)}),l.length&&n.dispatchAction({type:"downplay",escapeConnect:!0,batch:l}),s.length&&n.dispatchAction({type:"highlight",escapeConnect:!0,batch:s})}(h,0,n),d}}),uf({type:"tooltip",dependencies:["axisPointer"],defaultOption:{zlevel:0,z:60,show:!0,showContent:!0,trigger:"item",triggerOn:"mousemove|click",alwaysShowContent:!1,displayMode:"single",renderMode:"auto",confine:!1,showDelay:0,hideDelay:100,transitionDuration:.4,enterable:!1,backgroundColor:"rgba(50,50,50,0.7)",borderColor:"#333",borderRadius:4,borderWidth:0,padding:5,extraCssText:"",axisPointer:{type:"line",axis:"auto",animation:"auto",animationDurationUpdate:200,animationEasingUpdate:"exponentialOut",crossStyle:{color:"#999",width:1,type:"dashed",textStyle:{}}},textStyle:{color:"#fff",fontSize:14}}});var wy=D,by=Wl,Sy=["","-webkit-","-moz-","-o-"];function My(r){var o=[],t=r.get("transitionDuration"),e=r.get("backgroundColor"),n=r.getModel("textStyle"),i=r.get("padding");return t&&o.push(function(t){var e="cubic-bezier(0.23, 1, 0.32, 1)",n="left "+t+"s "+e+",top "+t+"s "+e;return P(Sy,function(t){return t+"transition:"+n}).join(";")}(t)),e&&(v.canvasSupported?o.push("background-Color:"+e):(o.push("background-Color:#"+Ve(e)),o.push("filter:alpha(opacity=70)"))),wy(["width","color","radius"],function(t){var e="border-"+t,n=by(e),i=r.get(n);null!=i&&o.push(e+":"+i+("color"===t?"":"px"))}),o.push(function(n){var i=[],t=n.get("fontSize"),e=n.getTextColor();return e&&i.push("color:"+e),i.push("font:"+n.getFont()),t&&i.push("line-height:"+Math.round(3*t/2)+"px"),wy(["decoration","align"],function(t){var e=n.get(t);e&&i.push("text-"+t+":"+e)}),i.join(";")}(n)),null!=i&&o.push("padding:"+Gl(i).join("px ")+"px"),o.join(";")+";"}function Iy(t,e,n,i,r){var o=e&&e.painter;if(n){var a=o&&o.getViewportRoot();a&&function(t,e,n,i,r){Lt(Pt,e,i,r,!0)&&Lt(t,n,Pt[0],Pt[1])}(t,a,document.body,i,r)}else{t[0]=i,t[1]=r;var s=o&&o.getViewportRootOffset();s&&(t[0]+=s.offsetLeft,t[1]+=s.offsetTop)}}function Cy(t,e,n){if(v.wxa)return null;var i=document.createElement("div");i.domBelongToZr=!0,this.el=i;var r=this._zr=e.getZr(),o=this._appendToBody=n&&n.appendToBody;this._styleCoord=[0,0],Iy(this._styleCoord,r,o,e.getWidth()/2,e.getHeight()/2),o?document.body.appendChild(i):t.appendChild(i),this._container=t,this._show=!1,this._hideTimeout;var a=this;i.onmouseenter=function(){a._enterable&&(clearTimeout(a._hideTimeout),a._show=!0),a._inContent=!0},i.onmousemove=function(t){if(t=t||window.event,!a._enterable){var e=r.handler;Ft(r.painter.getViewportRoot(),t,!0),e.dispatch("mousemove",t)}},i.onmouseleave=function(){a._enterable&&a._show&&a.hideLater(a._hideDelay),a._inContent=!1}}function Ty(t){this._zr=t.getZr(),this._show=!1,this._hideTimeout}Cy.prototype={constructor:Cy,_enterable:!0,update:function(){var t=this._container,e=t.currentStyle||document.defaultView.getComputedStyle(t),n=t.style;"absolute"!==n.position&&"absolute"!==e.position&&(n.position="relative")},show:function(t){clearTimeout(this._hideTimeout);var e=this.el,n=this._styleCoord;e.style.cssText="position:absolute;display:block;border-style:solid;white-space:nowrap;z-index:9999999;"+My(t)+";left:"+n[0]+"px;top:"+n[1]+"px;"+(t.get("extraCssText")||""),e.style.display=e.innerHTML?"block":"none",e.style.pointerEvents=this._enterable?"auto":"none",this._show=!0},setContent:function(t){this.el.innerHTML=null==t?"":t},setEnterable:function(t){this._enterable=t},getSize:function(){var t=this.el;return[t.clientWidth,t.clientHeight]},moveTo:function(t,e){var n=this._styleCoord;Iy(n,this._zr,this._appendToBody,t,e);var i=this.el.style;i.left=n[0]+"px",i.top=n[1]+"px"},hide:function(){this.el.style.display="none",this._show=!1},hideLater:function(t){!this._show||this._inContent&&this._enterable||(t?(this._hideDelay=t,this._show=!1,this._hideTimeout=setTimeout(C(this.hide,this),t)):this.hide())},isShow:function(){return this._show},dispose:function(){this.el.parentNode.removeChild(this.el)},getOuterSize:function(){var t=this.el.clientWidth,e=this.el.clientHeight;if(document.defaultView&&document.defaultView.getComputedStyle){var n=document.defaultView.getComputedStyle(this.el);n&&(t+=parseInt(n.borderLeftWidth,10)+parseInt(n.borderRightWidth,10),e+=parseInt(n.borderTopWidth,10)+parseInt(n.borderBottomWidth,10))}return{width:t,height:e}}},Ty.prototype={constructor:Ty,_enterable:!0,update:function(){},show:function(t){this._hideTimeout&&clearTimeout(this._hideTimeout),this.el.attr("show",!0),this._show=!0},setContent:function(t,e,n){this.el&&this._zr.remove(this.el);for(var i={},r=t,o="{marker",a=r.indexOf(o);0<=a;){var s=r.indexOf("|}"),l=r.substr(a+o.length,s-a-o.length);-1n[r],f=[-h.x,-h.y];e||(f[i]=s.position[i]);var p=[0,0],g=[-c.x,-c.y],m=W(t.get("pageButtonGap",!0),t.get("itemGap",!0));d&&("end"===t.get("pageButtonPosition",!0)?g[i]+=n[r]-c[r]:p[i]+=c[r]+m);g[1-i]+=h[o]/2-c[o]/2,s.attr("position",f),l.attr("position",p),u.attr("position",g);var v={x:0,y:0};if(v[r]=d?n[r]:h[r],v[o]=Math.max(h[o],c[o]),v[a]=Math.min(0,c[a]+g[1-i]),l.__rectSize=n[r],d){var y={x:0,y:0};y[r]=Math.max(n[r]-c[r]-m,0),y[o]=v[o],l.setClipPath(new Ja({shape:y})),l.__rectSize=y[r]}else u.eachChild(function(t){t.attr({invisible:!0,silent:!0})});var _=this._getPageInfo(t);return null!=_.pageIndex&&nl(s,{position:_.contentPosition},d&&t),this._updatePageInfoView(t,_),v},_pageGo:function(t,e,n){var i=this._getPageInfo(e)[t];null!=i&&n.dispatchAction({type:"legendScroll",scrollDataIndex:i,legendId:e.id})},_updatePageInfoView:function(i,r){var o=this._controllerGroup;D(["pagePrev","pageNext"],function(t){var e=null!=r[t+"DataIndex"],n=o.childOfName(t);n&&(n.setStyle("fill",e?i.get("pageIconColor",!0):i.get("pageIconInactiveColor",!0)),n.cursor=e?"pointer":"default")});var t=o.childOfName("pageText"),e=i.get("pageFormatter"),n=r.pageIndex,a=null!=n?n+1:0,s=r.pageCount;t&&e&&t.setStyle("text",z(e)?e.replace("{current}",a).replace("{total}",s):e({current:a,total:s}))},_getPageInfo:function(t){var e=t.get("scrollDataIndex",!0),n=this.getContentGroup(),i=this._containerGroup.__rectSize,r=t.getOrient().index,o=Ky[r],a=Qy[r],s=this._findTargetItemIndex(e),l=n.children(),u=l[s],h=l.length,c=h?1:0,d={contentPosition:n.position.slice(),pageCount:c,pageIndex:c-1,pagePrevDataIndex:null,pageNextDataIndex:null};if(!u)return d;var f=y(u);d.contentPosition[r]=-f.s;for(var p=s+1,g=f,m=f,v=null;p<=h;++p)(!(v=y(l[p]))&&m.e>g.s+i||v&&!_(v,g.s))&&(g=m.i>g.i?m:v)&&(null==d.pageNextDataIndex&&(d.pageNextDataIndex=g.i),++d.pageCount),m=v;for(p=s-1,g=f,m=f,v=null;-1<=p;--p)(v=y(l[p]))&&_(m,v.s)||!(g.i=e&&t.s<=e+i}},_findTargetItemIndex:function(i){return this._showController?(this.getContentGroup().eachChild(function(t,e){var n=t.__legendDataIndex;null==o&&null!=n&&(o=e),n===i&&(r=e)}),null!=r?r:o):0;var r,o}});rf("legendScroll","legendscroll",function(t,e){var n=t.scrollDataIndex;null!=n&&e.eachComponent({mainType:"legend",subType:"scroll",query:t},function(t){t.setScrollDataIndex(n)})}),uf({type:"title",layoutMode:{type:"box",ignoreSize:!0},defaultOption:{zlevel:0,z:6,show:!0,text:"",target:"blank",subtext:"",subtarget:"blank",left:0,top:0,backgroundColor:"rgba(0,0,0,0)",borderColor:"#ccc",borderWidth:0,padding:5,itemGap:10,textStyle:{fontSize:18,fontWeight:"bolder",color:"#333"},subtextStyle:{color:"#aaa"}}}),hf({type:"title",render:function(t,e,n){if(this.group.removeAll(),t.get("show")){var i=this.group,r=t.getModel("textStyle"),o=t.getModel("subtextStyle"),a=t.get("textAlign"),s=W(t.get("textBaseline"),t.get("textVerticalAlign")),l=new Ra({style:js({},r,{text:t.get("text"),textFill:r.getTextColor()},{disableBox:!0}),z2:10}),u=l.getBoundingRect(),h=t.get("subtext"),c=new Ra({style:js({},o,{text:h,textFill:o.getTextColor(),y:u.height+t.get("itemGap"),textVerticalAlign:"top"},{disableBox:!0}),z2:10}),d=t.get("link"),f=t.get("sublink"),p=t.get("triggerEvent",!0);l.silent=!d&&!p,c.silent=!f&&!p,d&&l.on("click",function(){window.open(d,"_"+t.get("target"))}),f&&c.on("click",function(){window.open(f,"_"+t.get("subtarget"))}),l.eventData=c.eventData=p?{componentType:"title",componentIndex:t.componentIndex}:null,i.add(l),h&&i.add(c);var g=i.getBoundingRect(),m=t.getBoxLayoutParams();m.width=g.width,m.height=g.height;var v=su(m,{width:n.getWidth(),height:n.getHeight()},t.get("padding"));a||("middle"===(a=t.get("left")||t.get("right"))&&(a="center"),"right"===a?v.x+=v.width:"center"===a&&(v.x+=v.width/2)),s||("center"===(s=t.get("top")||t.get("bottom"))&&(s="middle"),"bottom"===s?v.y+=v.height:"middle"===s&&(v.y+=v.height/2),s=s||"top"),i.attr("position",[v.x,v.y]);var y={textAlign:a,textVerticalAlign:s};l.setStyle(y),c.setStyle(y),g=i.getBoundingRect();var _=v.margin,x=t.getItemStyle(["color","opacity"]);x.fill=t.get("backgroundColor");var w=new Ja({shape:{x:g.x-_[3],y:g.y-_[0],width:g.width+_[1]+_[3],height:g.height+_[0]+_[2],r:t.get("borderRadius")},style:x,subPixelOptimize:!0,silent:!0});i.add(w)}}});var t_=Hl,e_=Xl;function n_(t){Or(t,"label",["show"])}var i_=uf({type:"marker",dependencies:["series","grid","polar","geo"],init:function(t,e,n){this.mergeDefaultAndTheme(t,n),this._mergeOption(t,n,!1,!0)},isAnimationEnabled:function(){if(v.node)return!1;var t=this.__hostSeries;return this.getShallow("animation")&&t&&t.isAnimationEnabled()},mergeOption:function(t,e){this._mergeOption(t,e,!1,!1)},_mergeOption:function(t,i,e,r){var o=this.constructor,a=this.mainType+"Model";e||i.eachSeries(function(t){var e=t.get(this.mainType,!0),n=t[a];e&&e.data?(n?n._mergeOption(e,i,!0):(r&&n_(e),D(e.data,function(t){t instanceof Array?(n_(t[0]),n_(t[1])):n_(t)}),k(n=new o(e,this,i),{mainType:this.mainType,seriesIndex:t.seriesIndex,name:t.name,createdBySelf:!0}),n.__hostSeries=t),t[a]=n):t[a]=null},this)},formatTooltip:function(t){var e=this.getData(),n=this.getRawValue(t),i=O(n)?P(n,t_).join(", "):t_(n),r=e.getName(t),o=e_(this.name);return null==n&&!r||(o+="
    "),r&&(o+=e_(r),null!=n&&(o+=" : ")),null!=n&&(o+=e_(i)),o},getData:function(){return this._data},setData:function(t){this._data=t}});S(i_,Ph),i_.extend({type:"markPoint",defaultOption:{zlevel:0,z:5,symbol:"pin",symbolSize:50,tooltip:{trigger:"item"},label:{show:!0,position:"inside"},itemStyle:{borderWidth:2},emphasis:{label:{show:!0}}}});var r_=x;function o_(t,e,n,i,r,o){var a=[],s=qf(e,i)?e.getCalculationInfo("stackResultDimension"):i,l=d_(e,s,t),u=e.indicesOfNearest(s,l)[0];a[r]=e.get(n,u),a[o]=e.get(s,u);var h=e.get(i,u),c=Dl(e.get(i,u));return 0<=(c=Math.min(c,20))&&(a[o]=+a[o].toFixed(c)),[a,h]}var a_=T,s_={min:a_(o_,"min"),max:a_(o_,"max"),average:a_(o_,"average")};function l_(t,e){var n=t.getData(),i=t.coordinateSystem;if(e&&!function(t){return!isNaN(parseFloat(t.x))&&!isNaN(parseFloat(t.y))}(e)&&!O(e.coord)&&i){var r=i.dimensions,o=u_(e,n,i,t);if((e=b(e)).type&&s_[e.type]&&o.baseAxis&&o.valueAxis){var a=r_(r,o.baseAxis.dim),s=r_(r,o.valueAxis.dim),l=s_[e.type](n,o.baseDataDim,o.valueDataDim,a,s);e.coord=l[0],e.value=l[1]}else{for(var u=[null!=e.xAxis?e.xAxis:e.radiusAxis,null!=e.yAxis?e.yAxis:e.angleAxis],h=0;h<2;h++)s_[u[h]]&&(u[h]=d_(n,n.mapDimension(r[h]),u[h]));e.coord=u}}return e}function u_(t,e,n,i){var r={};return null!=t.valueIndex||null!=t.valueDim?(r.valueDataDim=null!=t.valueIndex?e.getDimension(t.valueIndex):t.valueDim,r.valueAxis=n.getAxis(function(t,e){var n=t.getData(),i=n.dimensions;e=n.getDimension(e);for(var r=0;ro&&(e[1-i]=e[i]+c.sign*o),e}function q_(t,e){var n=t[e]-t[1-e];return{span:Math.abs(n),sign:0i[1]&&(i[1]=e[1])})}),i[1]c[1];if(a&&!s&&!l)return!0;a&&(i=!0),s&&(e=!0),l&&(n=!0)}return i&&e&&n}):Q_(h,function(t){if("empty"===r)n.setData(u=u.map(t,function(t){return function(t){return t>=c[0]&&t<=c[1]}(t)?t:NaN}));else{var e={};e[t]=c,u.selectRange(e)}}),Q_(h,function(t){u.setApproximateExtent(c,t)}))})}}};var ex=D,nx=X_,ix=uf({type:"dataZoom",dependencies:["xAxis","yAxis","zAxis","radiusAxis","angleAxis","singleAxis","series"],defaultOption:{zlevel:0,z:4,orient:null,xAxisIndex:null,yAxisIndex:null,filterMode:"filter",throttle:null,start:0,end:100,startValue:null,endValue:null,minSpan:null,maxSpan:null,minValueSpan:null,maxValueSpan:null,rangeMode:null},init:function(t,e,n){this._dataIntervalByAxis={},this._dataInfo={},this._axisProxies={},this.textStyleModel,this._autoThrottle=!0,this._rangePropMode=["percent","percent"];var i=rx(t);this.settledOption=i,this.mergeDefaultAndTheme(t,n),this.doInit(i)},mergeOption:function(t){var e=rx(t);m(this.option,t,!0),m(this.settledOption,e,!0),this.doInit(e)},doInit:function(t){var n=this.option;v.canvasSupported||(n.realtime=!1),this._setDefaultThrottle(t),ox(this,t);var i=this.settledOption;ex([["start","startValue"],["end","endValue"]],function(t,e){"value"===this._rangePropMode[e]&&(n[t[0]]=i[t[0]]=null)},this),this.textStyleModel=this.getModel("textStyle"),this._resetTarget(),this._giveAxisProxies()},_giveAxisProxies:function(){var a=this._axisProxies;this.eachTargetAxis(function(t,e,n,i){var r=this.dependentModels[t.axis][e],o=r.__dzAxisProxy||(r.__dzAxisProxy=new K_(t.name,e,this,i));a[t.name+"_"+e]=o},this)},_resetTarget:function(){var n=this.option,t=this._judgeAutoMode();nx(function(t){var e=t.axisIndex;n[e]=Lr(n[e])},this),"axisIndex"===t?this._autoSetAxisIndex():"orient"===t&&this._autoSetOrient()},_judgeAutoMode:function(){var e=this.option,n=!1;nx(function(t){null!=e[t.axisIndex]&&(n=!0)},this);var t=e.orient;return null==t&&n?"orient":n?void 0:(null==t&&(e.orient="horizontal"),"axisIndex")},_autoSetAxisIndex:function(){var o=!0,e=this.get("orient",!0),a=this.option,t=this.dependentModels;if(o){var n="vertical"===e?"y":"x";t[n+"Axis"].length?(a[n+"AxisIndex"]=[0],o=!1):ex(t.singleAxis,function(t){o&&t.get("orient",!0)===e&&(a.singleAxisIndex=[t.componentIndex],o=!1)})}o&&nx(function(t){if(o){var e=[],n=this.dependentModels[t.axis];if(n.length&&!e.length)for(var i=0,r=n.length;ie[0]||n[1]<0||n[1]>e[1])){var i=this._handleEnds,r=(i[0]+i[1])/2,o=this._updateInterval("all",n[0]-r);this._updateView(),o&&this._dispatchZoomAction()}},_dispatchZoomAction:function(){var t=this._range;this.api.dispatchAction({type:"dataZoom",from:this.uid,dataZoomId:this.dataZoomModel.id,start:t[0],end:t[1]})},_findCoordRect:function(){var n;if(cx(this.getTargetCoordInfo(),function(t){if(!n&&t.length){var e=t[0].model.coordinateSystem;n=e.getRect&&e.getRect()}}),!n){var t=this.api.getWidth(),e=this.api.getHeight();n={x:.2*t,y:.2*e,width:.6*t,height:.6*e}}return n}});function mx(t){return"vertical"===t?"ns-resize":"ew-resize"}nf({getTargetSeries:function(t){var i=Q();return t.eachComponent("dataZoom",function(t){t.eachTargetAxis(function(t,e,n){D(n.getAxisProxy(t.name,e).getTargetSeriesModels(),function(t){i.set(t.uid,t)})})}),i},modifyOutputEnd:!0,overallReset:function(t,i){t.eachComponent("dataZoom",function(t){t.eachTargetAxis(function(t,e,n){n.getAxisProxy(t.name,e).reset(n,i)}),t.eachTargetAxis(function(t,e,n){n.getAxisProxy(t.name,e).filterData(n,i)})}),t.eachComponent("dataZoom",function(t){var e=t.findRepresentativeAxisProxy(),n=e.getDataPercentWindow(),i=e.getDataValueWindow();t.setCalculatedRange({start:n[0],end:n[1],startValue:i[0],endValue:i[1]})})}}),rf("dataZoom",function(n,t){var i=Y_(C(t.eachComponent,t,"dataZoom"),X_,function(t,e){return t.get(e.axisIndex)}),r=[];t.eachComponent({mainType:"dataZoom",query:n},function(t,e){r.push.apply(r,i(t).nodes)}),D(r,function(t,e){t.setRawRange({start:n.start,end:n.end,startValue:n.startValue,endValue:n.endValue})})}),ix.extend({type:"dataZoom.inside",defaultOption:{disabled:!1,zoomLock:!1,zoomOnMouseWheel:!0,moveOnMouseMove:!0,moveOnMouseWheel:!1,preventDefaultMouseMove:!0}});var vx="\0_ec_interaction_mutex";function yx(t,e){return!!_x(t)[e]}function _x(t){return t[vx]||(t[vx]={})}function xx(n){this.pointerChecker,this._zr=n,this._opt={};var t=C,i=t(bx,this),r=t(Sx,this),o=t(Mx,this),a=t(Ix,this),s=t(Cx,this);It.call(this),this.setPointerChecker=function(t){this.pointerChecker=t},this.enable=function(t,e){this.disable(),this._opt=A(b(e)||{},{zoomOnMouseWheel:!0,moveOnMouseMove:!0,moveOnMouseWheel:!1,preventDefaultMouseMove:!0}),null==t&&(t=!0),!0!==t&&"move"!==t&&"pan"!==t||(n.on("mousedown",i),n.on("mousemove",r),n.on("mouseup",o)),!0!==t&&"scale"!==t&&"zoom"!==t||(n.on("mousewheel",a),n.on("pinch",s))},this.disable=function(){n.off("mousedown",i),n.off("mousemove",r),n.off("mouseup",o),n.off("mousewheel",a),n.off("pinch",s)},this.dispose=this.disable,this.isDragging=function(){return this._dragging},this.isPinching=function(){return this._pinching}}function bx(t){if(!(Gt(t)||t.target&&t.target.draggable)){var e=t.offsetX,n=t.offsetY;this.pointerChecker&&this.pointerChecker(t,e,n)&&(this._x=e,this._y=n,this._dragging=!0)}}function Sx(t){if(this._dragging&&Dx("moveOnMouseMove",t,this._opt)&&"pinch"!==t.gestureEvent&&!yx(this._zr,"globalPan")){var e=t.offsetX,n=t.offsetY,i=this._x,r=this._y,o=e-i,a=n-r;this._x=e,this._y=n,this._opt.preventDefaultMouseMove&&Wt(t.event),Ax(this,"pan","moveOnMouseMove",t,{dx:o,dy:a,oldX:i,oldY:r,newX:e,newY:n})}}function Mx(t){Gt(t)||(this._dragging=!1)}function Ix(t){var e=Dx("zoomOnMouseWheel",t,this._opt),n=Dx("moveOnMouseWheel",t,this._opt),i=t.wheelDelta,r=Math.abs(i),o=t.offsetX,a=t.offsetY;if(0!==i&&(e||n)){if(e){var s=3d.getHeight()&&(n.textPosition="top",o=!0);var a=o?-5-i.height:p+8;r+i.width/2>d.getWidth()?(n.textPosition=["100%",a],n.textAlign="right"):r-i.width/2<0&&(n.textPosition=[0,a],n.textAlign="left")}})}function t(t,e){var n,i=m[t],r=m[e],o=u[i],a=new _l(o,h,h.ecModel);if(l&&null!=l.newTitle&&(o.title=l.newTitle),i&&!r){if(function(t){return 0===t.indexOf("my")}(i))n={model:a,onclick:a.option.onclick,featureName:i};else{var s=Gx(i);if(!s)return;n=new s(a,c,d)}g[i]=n}else{if(!(n=g[r]))return;n.model=a,n.ecModel=c,n.api=d}i||!r?a.get("show")&&!n.unusable?(function(r,o,t){var a=r.getModel("iconStyle"),s=r.getModel("emphasis.iconStyle"),e=o.getIcons?o.getIcons():r.get("icon"),l=r.get("title")||{};if("string"==typeof e){var n=e,i=l;l={},(e={})[t]=n,l[t]=i}var u=r.iconPaths={};D(e,function(t,e){var n=ul(t,{},{x:-p/2,y:-p/2,width:p,height:p});n.setStyle(a.getItemStyle()),n.hoverStyle=s.getItemStyle(),n.setStyle({text:l[e],textAlign:s.get("textAlign"),textBorderRadius:s.get("textBorderRadius"),textPadding:s.get("textPadding"),textFill:null});var i=h.getModel("tooltip");i&&i.get("show")&&n.attr("tooltip",k({content:l[e],formatter:i.get("formatter",!0)||function(){return l[e]},formatterParams:{componentType:"toolbox",name:e,title:l[e],$vars:["name","title"]},position:i.get("position",!0)||"bottom"},i.option)),Gs(n),h.get("showTitle")&&(n.__title=l[e],n.on("mouseover",function(){var t=s.getItemStyle(),e="vertical"===h.get("orient")?null==h.get("right")?"right":"left":null==h.get("bottom")?"bottom":"top";n.setStyle({textFill:s.get("textFill")||t.fill||t.stroke||"#000",textBackgroundColor:s.get("textBackgroundColor"),textPosition:s.get("textPosition")||e})}).on("mouseout",function(){n.setStyle({textFill:null,textBackgroundColor:null})})),n.trigger(r.get("iconStatus."+e)||"normal"),f.add(n),n.on("click",C(o.onclick,o,c,d,e)),u[e]=n})}(a,n,i),a.setIconStatus=function(t,e){var n=this.option,i=this.iconPaths;n.iconStatus=n.iconStatus||{},n.iconStatus[t]=e,i[t]&&i[t].trigger(e)},n.render&&n.render(a,c,d,l)):n.remove&&n.remove(c,d):n.dispose&&n.dispose(c,d)}},updateView:function(t,e,n,i){D(this._features,function(t){t.updateView&&t.updateView(t.model,e,n,i)})},remove:function(e,n){D(this._features,function(t){t.remove&&t.remove(e,n)}),this.group.removeAll()},dispose:function(e,n){D(this._features,function(t){t.dispose&&t.dispose(e,n)})}});var Ux=_c.toolbox.saveAsImage;function Xx(t){this.model=t}Xx.defaultOption={show:!0,icon:"M4.7,22.9L29.3,45.5L54.7,23.4M4.6,43.6L4.6,58L53.8,58L53.8,43.6M29.2,45.1L29.2,0",title:Ux.title,type:"png",connectedBackgroundColor:"#fff",name:"",excludeComponents:["toolbox"],pixelRatio:1,lang:Ux.lang.slice()},Xx.prototype.unusable=!v.canvasSupported,Xx.prototype.onclick=function(t,e){var n=this.model,i=n.get("name")||t.get("title.0.text")||"echarts",r=n.get("type",!0)||"png",o=e.getConnectedDataURL({type:r,backgroundColor:n.get("backgroundColor",!0)||t.get("backgroundColor")||"#fff",connectedBackgroundColor:n.get("connectedBackgroundColor"),excludeComponents:n.get("excludeComponents"),pixelRatio:n.get("pixelRatio")});if("function"!=typeof MouseEvent||v.browser.ie||v.browser.edge)if(window.navigator.msSaveOrOpenBlob){for(var a=atob(o.split(",")[1]),s=a.length,l=new Uint8Array(s);s--;)l[s]=a.charCodeAt(s);var u=new Blob([l]);window.navigator.msSaveOrOpenBlob(u,i+"."+r)}else{var h=n.get("lang"),c='';window.open().document.write(c)}else{var d=document.createElement("a");d.download=i+"."+r,d.target="_blank",d.href=o;var f=new MouseEvent("click",{view:window,bubbles:!0,cancelable:!1});d.dispatchEvent(f)}},Wx("saveAsImage",Xx);var Yx=_c.toolbox.magicType,jx="__ec_magicType_stack__";function qx(t){this.model=t}qx.defaultOption={show:!0,type:[],icon:{line:"M4.1,28.9h7.1l9.3-22l7.4,38l9.7-19.7l3,12.8h14.9M4.1,58h51.4",bar:"M6.7,22.9h10V48h-10V22.9zM24.9,13h10v35h-10V13zM43.2,2h10v46h-10V2zM3.1,58h53.7",stack:"M8.2,38.4l-8.4,4.1l30.6,15.3L60,42.5l-8.1-4.1l-21.5,11L8.2,38.4z M51.9,30l-8.1,4.2l-13.4,6.9l-13.9-6.9L8.2,30l-8.4,4.2l8.4,4.2l22.2,11l21.5-11l8.1-4.2L51.9,30z M51.9,21.7l-8.1,4.2L35.7,30l-5.3,2.8L24.9,30l-8.4-4.1l-8.3-4.2l-8.4,4.2L8.2,30l8.3,4.2l13.9,6.9l13.4-6.9l8.1-4.2l8.1-4.1L51.9,21.7zM30.4,2.2L-0.2,17.5l8.4,4.1l8.3,4.2l8.4,4.2l5.5,2.7l5.3-2.7l8.1-4.2l8.1-4.2l8.1-4.1L30.4,2.2z"},title:b(Yx.title),option:{},seriesIndex:{}};var $x=qx.prototype;$x.getIcons=function(){var t=this.model,e=t.get("icon"),n={};return D(t.get("type"),function(t){e[t]&&(n[t]=e[t])}),n};var Kx={line:function(t,e,n,i){if("bar"===t)return m({id:e,type:"line",data:n.get("data"),stack:n.get("stack"),markPoint:n.get("markPoint"),markLine:n.get("markLine")},i.get("option.line")||{},!0)},bar:function(t,e,n,i){if("line"===t)return m({id:e,type:"bar",data:n.get("data"),stack:n.get("stack"),markPoint:n.get("markPoint"),markLine:n.get("markLine")},i.get("option.bar")||{},!0)},stack:function(t,e,n,i){var r=n.get("stack")===jx;if("line"===t||"bar"===t)return i.setIconStatus("stack",r?"normal":"emphasis"),m({id:e,stack:r?"":jx},i.get("option.stack")||{},!0)}},Qx=[["line","bar"],["stack"]];$x.onclick=function(u,t,h){var c=this.model,e=c.get("seriesIndex."+h);if(Kx[h]){var n,d={series:[]};if(D(Qx,function(t){0<=x(t,h)&&D(t,function(t){c.setIconStatus(t,"normal")})}),c.setIconStatus(h,"emphasis"),u.eachComponent({mainType:"series",query:null==e?null:{seriesIndex:e}},function(t){var e=t.subType,n=t.id,i=Kx[h](e,n,t,c);i&&(A(i,t.option),d.series.push(i));var r=t.coordinateSystem;if(r&&"cartesian2d"===r.type&&("line"===h||"bar"===h)){var o=r.getAxesByScale("ordinal")[0];if(o){var a=o.dim+"Axis",s=u.queryComponents({mainType:a,index:t.get(name+"Index"),id:t.get(name+"Id")})[0].componentIndex;d[a]=d[a]||[];for(var l=0;l<=s;l++)d[a][s]=d[a][s]||{};d[a][s].boundaryGap="bar"===h}}}),"stack"===h)n=d.series&&d.series[0]&&d.series[0].stack===jx?m({stack:Yx.title.tiled},Yx.title):b(Yx.title);t.dispatchAction({type:"changeMagicType",currentType:h,newOption:d,newTitle:n})}},rf({type:"changeMagicType",event:"magicTypeChanged",update:"prepareAndUpdate"},function(t,e){e.mergeOption(t.newOption)}),Wx("magicType",qx);var Jx=_c.toolbox.dataView,tw=new Array(60).join("-"),ew="\t";function nw(t){var e=function(t){var r={},o=[],a=[];return t.eachRawSeries(function(t){var e=t.coordinateSystem;if(!e||"cartesian2d"!==e.type&&"polar"!==e.type)o.push(t);else{var n=e.getBaseAxis();if("category"===n.type){var i=n.dim+"_"+n.index;r[i]||(r[i]={categoryAxis:n,valueAxis:e.getOtherAxis(n),series:[]},a.push({axisDim:n.dim,axisIndex:n.index})),r[i].series.push(t)}else o.push(t)}}),{seriesGroupByCategoryAxis:r,other:o,meta:a}}(t);return{value:I([function(t){var h=[];return D(t,function(t,e){var n=t.categoryAxis,i=t.valueAxis.dim,r=[" "].concat(P(t.series,function(t){return t.name})),o=[n.model.getCategories()];D(t.series,function(t){o.push(t.getRawData().mapArray(i,function(t){return t}))});for(var a=[r.join(ew)],s=0;si.getWidth()||n<0||n>i.getHeight()}(t,e)){var i=t._zr,r=t._covers,o=Aw(t,e,n);if(!t._dragging)for(var a=0;at[1]&&t.reverse(),t}function lb(t,e){return Gr(t,e,{includeMainTypes:rb})}ab.setOutputRanges=function(t,e){this.matchOutputRanges(t,e,function(t,e,n){if((t.coordRanges||(t.coordRanges=[])).push(e),!t.coordRange){t.coordRange=e;var i=db[t.brushType](0,n,e);t.__rangeOffset={offset:pb[t.brushType](i.values,t.range,[1,1]),xyMinMax:i.xyMinMax}}})},ab.matchOutputRanges=function(t,i,r){tb(t,function(n){var t=this.findTargetInfo(n,i);t&&!0!==t&&D(t.coordSyses,function(t){var e=db[n.brushType](1,t,n.range);r(n,e.values,t,i)})},this)},ab.setInputRanges=function(t,r){tb(t,function(t){var e=this.findTargetInfo(t,r);if(t.range=t.range||[],e&&!0!==e){t.panelId=e.panelId;var n=db[t.brushType](0,e.coordSys,t.coordRange),i=t.__rangeOffset;t.range=i?pb[t.brushType](n.values,i.offset,function(t,e){var n=mb(t),i=mb(e),r=[n[0]/i[0],n[1]/i[1]];return isNaN(r[0])&&(r[0]=1),isNaN(r[1])&&(r[1]=1),r}(n.xyMinMax,i.xyMinMax)):n.values}},this)},ab.makePanelOpts=function(n,i){return P(this._targetInfoList,function(t){var e=t.getPanelRect();return{panelId:t.panelId,defaultBrushType:i&&i(t),clipPath:function(n){return n=Jw(n),function(t,e){return ll(t,n)}}(e),isTargetByCursor:Qw(e,n,t.coordSysModel),getLinearBrushOtherExtent:function(r,o){return r=Jw(r),function(t){var e=null!=o?o:t,n=e?r.width:r.height,i=e?r.x:r.y;return[i,i+(n||0)]}}(e)}})},ab.controlSeries=function(t,e,n){var i=this.findTargetInfo(t,n);return!0===i||i&&0<=eb(i.coordSyses,e.coordinateSystem)},ab.findTargetInfo=function(t,e){for(var n=this._targetInfoList,i=lb(e,t),r=0;r')}}catch(t){Ab=function(t){return Lb.createElement("<"+t+' xmlns="'+Db+'" class="zrvml">')}}var Eb,zb=Jo.CMD,Nb=Math.round,Bb=Math.sqrt,Rb=Math.abs,Vb=Math.cos,Fb=Math.sin,Hb=Math.max;if(!v.canvasSupported){var Wb=",",Gb="progid:DXImageTransform.Microsoft",Zb=21600,Ub=Zb/2,Xb=function(t){t.style.cssText="position:absolute;left:0;top:0;width:1px;height:1px;",t.coordsize=Zb+","+Zb,t.coordorigin="0,0"},Yb=function(t,e,n){return"rgb("+[t,e,n].join(",")+")"},jb=function(t,e){e&&t&&e.parentNode!==t&&t.appendChild(e)},qb=function(t,e){e&&t&&e.parentNode===t&&t.removeChild(e)},$b=function(t,e,n){return 1e5*(parseFloat(t)||0)+1e3*(parseFloat(e)||0)+n},Kb=Hi,Qb=function(t,e,n){var i=Ne(e);n=+n,isNaN(n)&&(n=1),i&&(t.color=Yb(i[0],i[1],i[2]),t.opacity=n*i[3])},Jb=function(t,e,n,i){var r="fill"===e,o=t.getElementsByTagName(e)[0];null!=n[e]&&"none"!==n[e]&&(r||!r&&n.lineWidth)?(t[r?"filled":"stroked"]="true",n[e]instanceof rs&&qb(t,o),o=o||Ob(e),r?function(t,e,n){var i,r,o=e.fill;if(null!=o)if(o instanceof rs){var a,s=0,l=[0,0],u=0,h=1,c=n.getBoundingRect(),d=c.width,f=c.height;if("linear"===o.type){a="gradient";var p=n.transform,g=[o.x*d,o.y*f],m=[o.x2*d,o.y2*f];p&&(yt(g,g,p),yt(m,m,p));var v=m[0]-g[0],y=m[1]-g[1];(s=180*Math.atan2(v,y)/Math.PI)<0&&(s+=360),s<1e-6&&(s=0)}else{a="gradientradial";g=[o.x*d,o.y*f],p=n.transform;var _=n.scale,x=d,w=f;l=[(g[0]-c.x)/x,(g[1]-c.y)/w],p&&yt(g,g,p),x/=_[0]*Zb,w/=_[1]*Zb;var b=Hb(x,w);u=0/b,h=2*o.r/b-u}var S=o.colorStops.slice();S.sort(function(t,e){return t.offset-e.offset});for(var M=S.length,I=[],C=[],T=0;T=c&&d<=n+1){for(var i=[],r=0;r=c&&d<=r+1)return WS(h,e.components,u,l);p[t]=e}else p[t]=void 0}var s;f++}for(;f<=e;){var a=o();if(a)return a}},pushComponent:function(t,e,n){var i=t[t.length-1];i&&i.added===e&&i.removed===n?t[t.length-1]={count:i.count+1,added:e,removed:n}:t.push({count:1,added:e,removed:n})},extractCommon:function(t,e,n,i){for(var r=e.length,o=n.length,a=t.newPos,s=a-i,l=0;a+1= 2) { + var fakeBody = document.createElement("body"); + var testElement = document.createElement("div"); + testElement.style.border = ".5px solid transparent"; + fakeBody.appendChild(testElement); + docEl.appendChild(fakeBody); + if (testElement.offsetHeight === 1) { + docEl.classList.add("hairlines"); + } + docEl.removeChild(fakeBody); + } +})(window, document); diff --git a/src/assets/font/DS-DIGIT.TTF b/src/assets/font/DS-DIGIT.TTF new file mode 100644 index 0000000..65642f9 Binary files /dev/null and b/src/assets/font/DS-DIGIT.TTF differ diff --git a/src/assets/font/digiface.ttf b/src/assets/font/digiface.ttf new file mode 100644 index 0000000..a026080 Binary files /dev/null and b/src/assets/font/digiface.ttf differ diff --git a/src/assets/images/background.jpg b/src/assets/images/background.jpg new file mode 100644 index 0000000..0185b7d Binary files /dev/null and b/src/assets/images/background.jpg differ diff --git a/src/assets/images/barbg.png b/src/assets/images/barbg.png new file mode 100644 index 0000000..4d0a76a Binary files /dev/null and b/src/assets/images/barbg.png differ diff --git a/src/assets/images/bg.jpg b/src/assets/images/bg.jpg new file mode 100644 index 0000000..80b13bb Binary files /dev/null and b/src/assets/images/bg.jpg differ diff --git a/src/assets/images/bg.png b/src/assets/images/bg.png new file mode 100644 index 0000000..ffc546f Binary files /dev/null and b/src/assets/images/bg.png differ diff --git a/src/assets/images/biglogo.png b/src/assets/images/biglogo.png new file mode 100644 index 0000000..fe1ec6b Binary files /dev/null and b/src/assets/images/biglogo.png differ diff --git a/src/assets/images/common-active.png b/src/assets/images/common-active.png new file mode 100644 index 0000000..3c87d59 Binary files /dev/null and b/src/assets/images/common-active.png differ diff --git a/src/assets/images/common-bg.png b/src/assets/images/common-bg.png new file mode 100644 index 0000000..93ae3a4 Binary files /dev/null and b/src/assets/images/common-bg.png differ diff --git a/src/assets/images/common01.png b/src/assets/images/common01.png new file mode 100644 index 0000000..31c258b Binary files /dev/null and b/src/assets/images/common01.png differ diff --git a/src/assets/images/filelogo.png b/src/assets/images/filelogo.png new file mode 100644 index 0000000..4446bc9 Binary files /dev/null and b/src/assets/images/filelogo.png differ diff --git a/src/assets/images/head_bg.png b/src/assets/images/head_bg.png new file mode 100644 index 0000000..a2e45f6 Binary files /dev/null and b/src/assets/images/head_bg.png differ diff --git a/src/assets/images/header-bg.png b/src/assets/images/header-bg.png new file mode 100644 index 0000000..128be40 Binary files /dev/null and b/src/assets/images/header-bg.png differ diff --git a/src/assets/images/homeBGC.jpg b/src/assets/images/homeBGC.jpg new file mode 100644 index 0000000..80b13bb Binary files /dev/null and b/src/assets/images/homeBGC.jpg differ diff --git a/src/assets/images/homeHeader.png b/src/assets/images/homeHeader.png new file mode 100644 index 0000000..a2e45f6 Binary files /dev/null and b/src/assets/images/homeHeader.png differ diff --git a/src/assets/images/homeLine.png b/src/assets/images/homeLine.png new file mode 100644 index 0000000..05db7f8 Binary files /dev/null and b/src/assets/images/homeLine.png differ diff --git a/src/assets/images/jt.png b/src/assets/images/jt.png new file mode 100644 index 0000000..1eb5cb0 Binary files /dev/null and b/src/assets/images/jt.png differ diff --git a/src/assets/images/lbx.png b/src/assets/images/lbx.png new file mode 100644 index 0000000..cefb215 Binary files /dev/null and b/src/assets/images/lbx.png differ diff --git a/src/assets/images/line.png b/src/assets/images/line.png new file mode 100644 index 0000000..05db7f8 Binary files /dev/null and b/src/assets/images/line.png differ diff --git a/src/assets/images/login-header.png b/src/assets/images/login-header.png new file mode 100644 index 0000000..07a7a39 Binary files /dev/null and b/src/assets/images/login-header.png differ diff --git a/src/assets/images/login-inputbg.png b/src/assets/images/login-inputbg.png new file mode 100644 index 0000000..8d0bbba Binary files /dev/null and b/src/assets/images/login-inputbg.png differ diff --git a/src/assets/images/login-inputbg01.png b/src/assets/images/login-inputbg01.png new file mode 100644 index 0000000..9242f9c Binary files /dev/null and b/src/assets/images/login-inputbg01.png differ diff --git a/src/assets/images/loginbg.jpg b/src/assets/images/loginbg.jpg new file mode 100644 index 0000000..4a1cb9f Binary files /dev/null and b/src/assets/images/loginbg.jpg differ diff --git a/src/assets/images/loginbtn-bg.png b/src/assets/images/loginbtn-bg.png new file mode 100644 index 0000000..4ef494c Binary files /dev/null and b/src/assets/images/loginbtn-bg.png differ diff --git a/src/assets/images/loginlogo.png b/src/assets/images/loginlogo.png new file mode 100644 index 0000000..7455dec Binary files /dev/null and b/src/assets/images/loginlogo.png differ diff --git a/src/assets/images/logo.png b/src/assets/images/logo.png new file mode 100644 index 0000000..e24a7ae Binary files /dev/null and b/src/assets/images/logo.png differ diff --git a/src/assets/images/map.png b/src/assets/images/map.png new file mode 100644 index 0000000..2138288 Binary files /dev/null and b/src/assets/images/map.png differ diff --git a/src/assets/images/noImg.png b/src/assets/images/noImg.png new file mode 100644 index 0000000..f9e4db7 Binary files /dev/null and b/src/assets/images/noImg.png differ diff --git a/src/assets/images/numbg.png b/src/assets/images/numbg.png new file mode 100644 index 0000000..8433c61 Binary files /dev/null and b/src/assets/images/numbg.png differ diff --git a/src/assets/images/panel-bg.png b/src/assets/images/panel-bg.png new file mode 100644 index 0000000..b43bcb8 Binary files /dev/null and b/src/assets/images/panel-bg.png differ diff --git a/src/assets/images/panel-bg02.png b/src/assets/images/panel-bg02.png new file mode 100644 index 0000000..ea7305e Binary files /dev/null and b/src/assets/images/panel-bg02.png differ diff --git a/src/assets/images/panel-bg03.png b/src/assets/images/panel-bg03.png new file mode 100644 index 0000000..403ec77 Binary files /dev/null and b/src/assets/images/panel-bg03.png differ diff --git a/src/assets/images/panel-bg04.png b/src/assets/images/panel-bg04.png new file mode 100644 index 0000000..bc229df Binary files /dev/null and b/src/assets/images/panel-bg04.png differ diff --git a/src/assets/images/panel-bg05.png b/src/assets/images/panel-bg05.png new file mode 100644 index 0000000..4de633a Binary files /dev/null and b/src/assets/images/panel-bg05.png differ diff --git a/src/assets/images/panel-bg06.png b/src/assets/images/panel-bg06.png new file mode 100644 index 0000000..592ff83 Binary files /dev/null and b/src/assets/images/panel-bg06.png differ diff --git a/src/assets/images/panel-bg07.png b/src/assets/images/panel-bg07.png new file mode 100644 index 0000000..4e3600b Binary files /dev/null and b/src/assets/images/panel-bg07.png differ diff --git a/src/assets/images/upload.jpg b/src/assets/images/upload.jpg new file mode 100644 index 0000000..99442bd Binary files /dev/null and b/src/assets/images/upload.jpg differ diff --git a/src/assets/images/upload.png b/src/assets/images/upload.png new file mode 100644 index 0000000..b331d99 Binary files /dev/null and b/src/assets/images/upload.png differ diff --git a/src/assets/images/upload2.png b/src/assets/images/upload2.png new file mode 100644 index 0000000..ccd74f5 Binary files /dev/null and b/src/assets/images/upload2.png differ diff --git a/src/assets/images/weather.png b/src/assets/images/weather.png new file mode 100644 index 0000000..6c0e0ee Binary files /dev/null and b/src/assets/images/weather.png differ diff --git a/src/assets/mTokenK1/mToken_K1.js b/src/assets/mTokenK1/mToken_K1.js new file mode 100644 index 0000000..694836b --- /dev/null +++ b/src/assets/mTokenK1/mToken_K1.js @@ -0,0 +1,646 @@ + +function isIe() +{ + return ("ActiveXObject" in window); +} + +function mToken(obj){ + this.obj = obj; + + + var g_mTokenPlugin = null; + + + this.LoadLibrary = function() + { + g_mTokenPlugin = new K1ClientPlugin();//新 + + if(g_mTokenPlugin == null) + { + return -1; + } + + return 0; + }; + + this.K1_mTokenGetVersion = function() + { + if(g_mTokenPlugin == null) + { + return null; + } + + return g_mTokenPlugin.mTokenGetVersion(); + }; + + this.K1_mTokenFindDevice = function() + { + if(g_mTokenPlugin == null) + { + return -1; + } + + return g_mTokenPlugin.mTokenFindDevice(); + }; + + this.K1_mTokenGetLastError = function() + { + if(g_mTokenPlugin == null) + { + return -1; + } + + return g_mTokenPlugin.mTokenGetLastError(); + }; + + this.K1_mTokenGetUID = function(keyIndex) + { + if(g_mTokenPlugin == null) + { + return null; + } + + return g_mTokenPlugin.mTokenGetUID(keyIndex); + }; + + this.K1_mTokenOpen = function(keyUID, keyPassword) + { + if(g_mTokenPlugin == null) + { + return -1; + } + + return g_mTokenPlugin.mTokenOpen(keyUID, keyPassword, 1); + }; + + this.K1_mTokenClose = function() + { + if(g_mTokenPlugin == null) + { + return -1; + } + + return g_mTokenPlugin.mTokenClose(); + }; + + this.K1_mTokenChangePwd = function(keyUID,oldPassword, newPassword) + { + if(g_mTokenPlugin == null) + { + return -1; + } + + return g_mTokenPlugin.mTokenChangePwd(keyUID, 1, oldPassword, newPassword); + }; + + this.K1_mTokenSHA1WithSeed = function(keyUID, randomStr) + { + if(g_mTokenPlugin == null) + { + return null; + } + + return g_mTokenPlugin.mTokenSHA1WithSeed(keyUID, randomStr); + }; + + this.K1_mTokenSHA1WithSeedMac = function(keyUID, randomStr) + { + if(g_mTokenPlugin == null) + { + return null; + } + + return g_mTokenPlugin.mTokenSHA1WithSeedMac(keyUID, randomStr); + }; + + + this.K1_mTokenGenResetPwdRequest = function(keyUID, userInfo) + { + if(g_mTokenPlugin == null) + { + return -1; + } + + return g_mTokenPlugin.mTokenGenResetPwdRequest(keyUID, userInfo); + }; + + this.K1_mTokenResetPassword = function(keyUID, serverResponse) + { + if(g_mTokenPlugin == null) + { + return -1; + } + + return g_mTokenPlugin.mTokenResetPassword(keyUID, serverResponse); + }; + + this.K1_mTokenGenRandom = function(keyUID, randomLength) + { + if(g_mTokenPlugin == null) + { + return null; + } + + return g_mTokenPlugin.mTokenGenRandom(keyUID, randomLength); + }; + + this.K1_mTokenReadSecureStorage = function(keyUID, offset, dataLength) + { + if(g_mTokenPlugin == null) + { + return null; + } + + return g_mTokenPlugin.mTokenReadSecureStorage(keyUID, offset, dataLength); + }; + + this.K1_mTokenWriteSecureStorag = function(keyUID, offset, writeData) + { + if(g_mTokenPlugin == null) + { + return -1; + } + + return g_mTokenPlugin.mTokenWriteSecureStorage(keyUID, offset, writeData); + }; + + this.K1_mTokenReadUserStorage = function(keyUID, offset, dataLength) + { + if(g_mTokenPlugin == null) + { + return null; + } + + return g_mTokenPlugin.mTokenReadUserStorage(keyUID, offset, dataLength); + }; + + this.K1_mTokenWriteUserStorage = function(keyUID, offset, writeData) + { + if(g_mTokenPlugin == null) + { + return -1; + } + + return g_mTokenPlugin.mTokenWriteUserStorage(keyUID, offset, writeData); + }; + + this.K1_mTokenGetURL = function(keyUID) + { + if(g_mTokenPlugin == null) + { + return null; + } + + return g_mTokenPlugin.mTokenGetURL(keyUID); + }; + + this.K1_mTokenGetLabel = function(keyUID) + { + if(g_mTokenPlugin == null) + { + return null; + } + + return g_mTokenPlugin.mTokenGetLabel(keyUID); + }; + + this.K1_mTokenGetCompanyName = function(keyUID) + { + if(g_mTokenPlugin == null) + { + return null; + } + + return g_mTokenPlugin.mTokenGetCompanyName(keyUID); + }; + + this.K1_mTokenGetRemark = function(keyUID) + { + if(g_mTokenPlugin == null) + { + return null; + } + + return g_mTokenPlugin.mTokenGetRemarks(keyUID); + }; + this.K1_mTokenGetOpenType = function(keyUID) + { + if(g_mTokenPlugin == null) + { + return null; + } + + return g_mTokenPlugin.mTokenGetOpenType(keyUID); + }; + + this.K1_mTokenPwdRetryCount = function(keyUID) + { + if(g_mTokenPlugin == null) + { + return null; + } + + return g_mTokenPlugin.mTokenPwdRetryCount(keyUID, 1); + }; + this.K1_mTokenEncrypt = function(keyUID, method, data) + { + if(g_mTokenPlugin == null) + { + return null; + } + + return g_mTokenPlugin.mTokenEncrypt(keyUID, method, 1, data); + }; + this.K1_mTokenDecrypt = function(keyUID, method, data) + { + if(g_mTokenPlugin == null) + { + return null; + } + + return g_mTokenPlugin.mTokenDecrypt(keyUID, method, 1, data); + }; + + this.K1_GetMacAddr = function() + { + if(g_mTokenPlugin == null) + { + return null; + } + + return g_mTokenPlugin.mTokenGetMacAddr(); + }; + + var _TimerErrorMessage; + var _ExpireUrl; + /******************************************************* + * + * 函数名称:K1_CheckExist() + * 功 能:检查USB Key是否存在 + * 说 明:此方法结合K1_StartCheckTimer方法可用来定时 + * 检测USB Key是否存在,不存在即返回到指定页面( + * _ExpireUrl) + * + **********************************************************/ + function K1_CheckExist() + { + var rtn =g_mTokenPlugin.mTokenFindDevice(); + if(rtn < 1) + { + if(_TimerErrorMessage != null) + { + alert(_TimerErrorMessage + " Error Code: " +g_mTokenPlugin.mTokenGetLastError()); + } + if(_ExpireUrl != null) + { + window.location = _ExpireUrl; + } + } + return rtn; + }; + /******************************************************* + * + * 函数名称:K1_StartCheckTimer() + * 功 能:定时操作方法 + * 输 入:interval:时间1000/秒;errMsg:输出的错误信息 + * logonUrl:跳转地址 + * 说 明:此方法结合CheckExist方法可用来定时检测加 + * 密Key是否存在,不存在即返回到指定页面(_ExpireUrl) + * + **********************************************************/ + this.K1_StartCheckTimer = function(interval, errMsg, logonUrl) + { + _TimerErrorMessage = errMsg; + _ExpireUrl = logonUrl; + //定时检测 + window.setInterval(K1_CheckExist, interval); + }; + +} + + + +function K1ClientPlugin() +{ + var url = "http://127.0.0.1:51111/K1_Client"; + + var xmlhttp ; + function AjaxIO(json) { + if(xmlhttp == null) { + if (window.XMLHttpRequest) {// code for IE7+, Firefox, Chrome, Opera, Safari + xmlhttp = new XMLHttpRequest(); + } else {// code for IE6, IE5 + xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); + } + } + if("https:" == document.location.protocol) + { + url = "https://127.0.0.1:51121/K1_Client"; + } + xmlhttp.open("POST", url, false); + xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); + xmlhttp.send("json=" + json); + } + + this.mTokenGetVersion = function() + { + var json = '{"function":"mTokenGetVersion"}'; + AjaxIO(json); + if(xmlhttp.readyState == 4 && xmlhttp.status == 200) { + var obj = eval("(" + xmlhttp.responseText + ")"); + return obj.outData; + }else{ + return ""; + } + }; + + this.mTokenFindDevice = function() + { + var json = '{"function":"mTokenFindDevice"}'; + AjaxIO(json); + if(xmlhttp.readyState == 4 && xmlhttp.status == 200) { + var obj = eval("(" + xmlhttp.responseText + ")"); + return obj.devCount; + }else{ + return -2; + } + }; + + this.mTokenGetLastError = function() + { + var json = '{"function":"mTokenGetLastError"}'; + AjaxIO(json); + if(xmlhttp.readyState == 4 && xmlhttp.status == 200) { + var obj = eval("(" + xmlhttp.responseText + ")"); + return obj.errorCode; + }else{ + return -2; + } + }; + + this.mTokenGetUID = function(keyIndex) + { + var json = '{"function":"mTokenGetUID", "keyIndex":' + keyIndex + '}'; + AjaxIO(json); + if(xmlhttp.readyState == 4 && xmlhttp.status == 200) { + var obj = eval("(" + xmlhttp.responseText + ")"); + return obj.outData; + }else{ + return ""; + } + }; + + this.mTokenOpen = function(keyUID, keyPassword, type) + { + var json = '{"function":"mTokenOpen", "keyUID":"' + keyUID + '", "passWd":"' + keyPassword + '", "passWdType":' + type + '}'; + AjaxIO(json); + if(xmlhttp.readyState == 4 && xmlhttp.status == 200) { + var obj = eval("(" + xmlhttp.responseText + ")"); + return obj.rtn; + }else{ + return 1; + } + }; + + this.mTokenClose = function() + { + var json = '{"function":"mTokenClose"}'; + AjaxIO(json); + if(xmlhttp.readyState == 4 && xmlhttp.status == 200) { + var obj = eval("(" + xmlhttp.responseText + ")"); + return obj.rtn; + }else{ + return 1; + } + }; + + this.mTokenChangePwd = function(keyUID, type, oldPassword, newPassword) + { + var json = '{"function":"mTokenChangePwd", "keyUID":"' + keyUID + '", "oldUpin":"' + oldPassword + '", "newUpin":"' + newPassword + '", "passWdType":' + type + '}'; + AjaxIO(json); + if(xmlhttp.readyState == 4 && xmlhttp.status == 200) { + var obj = eval("(" + xmlhttp.responseText + ")"); + return obj.rtn; + }else{ + return 1; + } + }; + + this.mTokenSHA1WithSeed = function(keyUID, randomStr) + { + var json = '{"function":"mTokenSHA1WithSeed", "keyUID":"' + keyUID + '", "random":"' + randomStr + '"}'; + AjaxIO(json); + if(xmlhttp.readyState == 4 && xmlhttp.status == 200) { + var obj = eval("(" + xmlhttp.responseText + ")"); + return obj.outData; + }else{ + return ""; + } + }; + + this.mTokenSHA1WithSeedMac = function(keyUID, randomStr) + { + var json = '{"function":"mTokenSHA1WithSeed", "keyUID":"' + keyUID + '", "random":"' + randomStr + '", "useMac":1}'; + AjaxIO(json); + if(xmlhttp.readyState == 4 && xmlhttp.status == 200) { + var obj = eval("(" + xmlhttp.responseText + ")"); + return obj.outData; + }else{ + return ""; + } + }; + + this.mTokenGenResetPwdRequest = function(keyUID, userInfo) + { + var json = '{"function":"mTokenGenResetPwdRequest", "keyUID":"' + keyUID + '", "userInfo":"' + userInfo + '"}'; + AjaxIO(json); + if(xmlhttp.readyState == 4 && xmlhttp.status == 200) { + var obj = eval("(" + xmlhttp.responseText + ")"); + return obj.outData; + }else{ + return ""; + } + }; + + this.mTokenResetPassword = function(keyUID, serverResponse) + { + var json = '{"function":"mTokenResetPassword", "keyUID":"' + keyUID + '", "response":"' + serverResponse + '"}'; + AjaxIO(json); + if(xmlhttp.readyState == 4 && xmlhttp.status == 200) { + var obj = eval("(" + xmlhttp.responseText + ")"); + return obj.rtn; + }else{ + return 1; + } + }; + + this.mTokenGenRandom = function(keyUID, randomLength) + { + var json = '{"function":"mTokenGenRandom", "keyUID":"' + keyUID + '", "inDataLen":' + randomLength + '}'; + AjaxIO(json); + if(xmlhttp.readyState == 4 && xmlhttp.status == 200) { + var obj = eval("(" + xmlhttp.responseText + ")"); + return obj.outData; + }else{ + return ""; + } + }; + + this.mTokenReadSecureStorage = function(keyUID, offset, dataLength) + { + var json = '{"function":"mTokenReadSecureStorage", "keyUID":"' + keyUID + '", "offset":' + offset + ', "inDataLen":' + dataLength + '}'; + AjaxIO(json); + if(xmlhttp.readyState == 4 && xmlhttp.status == 200) { + var obj = eval("(" + xmlhttp.responseText + ")"); + return obj.outData; + }else{ + return ""; + } + }; + + this.mTokenWriteSecureStorage = function(keyUID, offset, writeData) + { + var json = '{"function":"mTokenWriteSecureStorage", "keyUID":"' + keyUID + '", "offset":' + offset + ', "inData":"' + writeData + '"}'; + AjaxIO(json); + if(xmlhttp.readyState == 4 && xmlhttp.status == 200) { + var obj = eval("(" + xmlhttp.responseText + ")"); + return obj.rtn; + }else{ + return 1; + } + }; + + this.mTokenReadUserStorage = function(keyUID, offset, dataLength) + { + var json = '{"function":"mTokenReadUserStorage", "keyUID":"' + keyUID + '", "offset":' + offset + ', "inDataLen":' + dataLength + '}'; + AjaxIO(json); + if(xmlhttp.readyState == 4 && xmlhttp.status == 200) { + var obj = eval("(" + xmlhttp.responseText + ")"); + return obj.outData; + }else{ + return ""; + } + }; + + this.mTokenWriteUserStorage = function(keyUID, offset, writeData) + { + var json = '{"function":"mTokenWriteUserStorage", "keyUID":"' + keyUID + '", "offset":' + offset + ', "inData":"' + writeData + '"}'; + AjaxIO(json); + if(xmlhttp.readyState == 4 && xmlhttp.status == 200) { + var obj = eval("(" + xmlhttp.responseText + ")"); + return obj.rtn; + }else{ + return 1; + } + }; + + this.mTokenGetURL = function(keyUID) + { + var json = '{"function":"mTokenGetURL", "keyUID":"' + keyUID + '"}'; + AjaxIO(json); + if(xmlhttp.readyState == 4 && xmlhttp.status == 200) { + var obj = eval("(" + xmlhttp.responseText + ")"); + return obj.outData; + }else{ + return ""; + } + }; + + this.mTokenGetLabel = function(keyUID) + { + var json = '{"function":"mTokenGetLabel", "keyUID":"' + keyUID + '"}'; + AjaxIO(json); + if(xmlhttp.readyState == 4 && xmlhttp.status == 200) { + var obj = eval("(" + xmlhttp.responseText + ")"); + return obj.outData; + }else{ + return ""; + } + }; + + this.mTokenGetCompanyName = function(keyUID) + { + var json = '{"function":"mTokenGetCompanyName", "keyUID":"' + keyUID + '"}'; + AjaxIO(json); + if(xmlhttp.readyState == 4 && xmlhttp.status == 200) { + var obj = eval("(" + xmlhttp.responseText + ")"); + return obj.outData; + }else{ + return ""; + } + }; + + this.mTokenGetRemarks = function(keyUID) + { + var json = '{"function":"mTokenGetRemarks", "keyUID":"' + keyUID + '"}'; + AjaxIO(json); + if(xmlhttp.readyState == 4 && xmlhttp.status == 200) { + var obj = eval("(" + xmlhttp.responseText + ")"); + return obj.outData; + }else{ + return ""; + } + }; + + this.mTokenGetOpenType = function(keyUID) + { + var json = '{"function":"mTokenGetOpenType", "keyUID":"' + keyUID + '"}'; + AjaxIO(json); + if(xmlhttp.readyState == 4 && xmlhttp.status == 200) { + var obj = eval("(" + xmlhttp.responseText + ")"); + return obj.openType; + }else{ + return -1; + } + }; + + this.mTokenPwdRetryCount = function(keyUID, passwdType) + { + var json = '{"function":"mTokenPwdRetryCount", "keyUID":"' + keyUID + '", "passWdType":' + passwdType + '}'; + AjaxIO(json); + if(xmlhttp.readyState == 4 && xmlhttp.status == 200) { + var obj = eval("(" + xmlhttp.responseText + ")"); + return obj.pwdRetryCount; + }else{ + return -1; + } + }; + + this.mTokenEncrypt = function(keyUID, method, paddingType, data) + { + var json = '{"function":"mTokenEncrypt", "keyUID":"' + keyUID + '", "method":' + method + ', "paddingType":' + paddingType + ', "inData":"' + data + '"}'; + AjaxIO(json); + if(xmlhttp.readyState == 4 && xmlhttp.status == 200) { + var obj = eval("(" + xmlhttp.responseText + ")"); + return obj.outData; + }else{ + return ""; + } + }; + + this.mTokenDecrypt = function(keyUID, method, paddingType, data) + { + var json = '{"function":"mTokenDecrypt", "keyUID":"' + keyUID + '", "method":' + method + ', "paddingType":' + paddingType + ', "inData":"' + data + '"}'; + AjaxIO(json); + if(xmlhttp.readyState == 4 && xmlhttp.status == 200) { + var obj = eval("(" + xmlhttp.responseText + ")"); + return obj.outData; + }else{ + return ""; + } + }; + + this.mTokenGetMacAddr = function() + { + var json = '{"function":"mTokenGetMacAddr"}'; + AjaxIO(json); + if(xmlhttp.readyState == 4 && xmlhttp.status == 200) { + var obj = eval("(" + xmlhttp.responseText + ")"); + return obj.outData; + }else{ + return ""; + } + } + +} + diff --git a/src/environments/environment.prod.ts b/src/environments/environment.prod.ts new file mode 100644 index 0000000..3612073 --- /dev/null +++ b/src/environments/environment.prod.ts @@ -0,0 +1,3 @@ +export const environment = { + production: true +}; diff --git a/src/environments/environment.ts b/src/environments/environment.ts new file mode 100644 index 0000000..7b4f817 --- /dev/null +++ b/src/environments/environment.ts @@ -0,0 +1,16 @@ +// This file can be replaced during build by using the `fileReplacements` array. +// `ng build --prod` replaces `environment.ts` with `environment.prod.ts`. +// The list of file replacements can be found in `angular.json`. + +export const environment = { + production: false +}; + +/* + * For easier debugging in development mode, you can import the following file + * to ignore zone related error stack frames such as `zone.run`, `zoneDelegate.invokeTask`. + * + * This import should be commented out in production mode because it will have a negative impact + * on performance if an error is thrown. + */ +// import 'zone.js/dist/zone-error'; // Included with Angular CLI. diff --git a/src/favicon.ico b/src/favicon.ico new file mode 100644 index 0000000..997406a Binary files /dev/null and b/src/favicon.ico differ diff --git a/src/index.html b/src/index.html new file mode 100644 index 0000000..6def6ab --- /dev/null +++ b/src/index.html @@ -0,0 +1,19 @@ + + + + + 数字化预案编制管理平台 + + + + + + + + + + + + + + diff --git a/src/main.ts b/src/main.ts new file mode 100644 index 0000000..611c343 --- /dev/null +++ b/src/main.ts @@ -0,0 +1,13 @@ +import { enableProdMode } from '@angular/core'; +import { platformBrowserDynamic } from '@angular/platform-browser-dynamic'; + +import { AppModule } from './app/app.module'; +import { environment } from './environments/environment'; + +if (environment.production) { + enableProdMode(); +} + +// window['CESIUM_BASE_URL'] = 'src/assets/cesium'; +platformBrowserDynamic().bootstrapModule(AppModule) + .catch(err => console.error(err)); diff --git a/src/polyfills.ts b/src/polyfills.ts new file mode 100644 index 0000000..aa665d6 --- /dev/null +++ b/src/polyfills.ts @@ -0,0 +1,63 @@ +/** + * This file includes polyfills needed by Angular and is loaded before the app. + * You can add your own extra polyfills to this file. + * + * This file is divided into 2 sections: + * 1. Browser polyfills. These are applied before loading ZoneJS and are sorted by browsers. + * 2. Application imports. Files imported after ZoneJS that should be loaded before your main + * file. + * + * The current setup is for so-called "evergreen" browsers; the last versions of browsers that + * automatically update themselves. This includes Safari >= 10, Chrome >= 55 (including Opera), + * Edge >= 13 on the desktop, and iOS 10 and Chrome on mobile. + * + * Learn more in https://angular.io/guide/browser-support + */ + +/*************************************************************************************************** + * BROWSER POLYFILLS + */ + +/** IE10 and IE11 requires the following for NgClass support on SVG elements */ +// import 'classlist.js'; // Run `npm install --save classlist.js`. + +/** + * Web Animations `@angular/platform-browser/animations` + * Only required if AnimationBuilder is used within the application and using IE/Edge or Safari. + * Standard animation support in Angular DOES NOT require any polyfills (as of Angular 6.0). + */ +// import 'web-animations-js'; // Run `npm install --save web-animations-js`. + +/** + * By default, zone.js will patch all possible macroTask and DomEvents + * user can disable parts of macroTask/DomEvents patch by setting following flags + * because those flags need to be set before `zone.js` being loaded, and webpack + * will put import in the top of bundle, so user need to create a separate file + * in this directory (for example: zone-flags.ts), and put the following flags + * into that file, and then add the following code before importing zone.js. + * import './zone-flags.ts'; + * + * The flags allowed in zone-flags.ts are listed here. + * + * The following flags will work for all browsers. + * + * (window as any).__Zone_disable_requestAnimationFrame = true; // disable patch requestAnimationFrame + * (window as any).__Zone_disable_on_property = true; // disable patch onProperty such as onclick + * (window as any).__zone_symbol__UNPATCHED_EVENTS = ['scroll', 'mousemove']; // disable patch specified eventNames + * + * in IE/Edge developer tools, the addEventListener will also be wrapped by zone.js + * with the following flag, it will bypass `zone.js` patch for IE/Edge + * + * (window as any).__Zone_enable_cross_context_check = true; + * + */ + +/*************************************************************************************************** + * Zone JS is required by default for Angular itself. + */ +import 'zone.js/dist/zone'; // Included with Angular CLI. + + +/*************************************************************************************************** + * APPLICATION IMPORTS + */ diff --git a/src/styles.scss b/src/styles.scss new file mode 100644 index 0000000..a38cdca --- /dev/null +++ b/src/styles.scss @@ -0,0 +1,79 @@ + +@import './app/theme.scss'; +html,body{ + width: 100%; + height: 100%; + margin:0 auto; + padding:0; +} +ul,ol,dl,li,dt,dd,p,form,input,h1,h2,h3,h4,h5,h6,section,article,aside,header,footer,nav,figure,time,mark,main,canvas{ + margin:0; + padding:0; +} +b,strong,i,em,h1,h2,h3,h4,h5,h6{ + font-weight:500; + font-style:normal; +} +img{ + border:none; +} +a{ + text-decoration: none; + color:#000; +} +ul,ol,li{ + list-style:none; + overflow-x: hidden; +} +.clearfn:after{ + content:""; + clear:both; + display: block; + overflow:hidden; + height:0; + visibility: hidden; +} + +//root标签 +app-root{ + height: 100%; +} +h1{ + font-size: 16px; +} +.mat-expansion-panel-body { + padding: 0px !important; +} +.mat-expansion-indicator::after { + color: white; +} +.example-sidenav .mat-drawer-inner-container { + overflow: hidden; +} +table th.mat-header-cell:last-of-type,table td.mat-cell:last-of-type, +table td.mat-footer-cell:last-of-type{ + padding-right: 0px; +} +.mat-tab-body{ + height: 100%; + overflow-y: auto; +} +.mat-content { //可展开面板垂直居中 + align-items: center; +} + + + +//x轴滚动条隐藏 +.example-sidenav-content { + overflow-x: hidden; overflow-y: auto; + } + + + +.mat-tab-body-wrapper{ + height: 100%; +} +.mat-tab-body-content{ + overflow: hidden!important; +} \ No newline at end of file diff --git a/src/test.ts b/src/test.ts new file mode 100644 index 0000000..1631789 --- /dev/null +++ b/src/test.ts @@ -0,0 +1,20 @@ +// This file is required by karma.conf.js and loads recursively all the .spec and framework files + +import 'zone.js/dist/zone-testing'; +import { getTestBed } from '@angular/core/testing'; +import { + BrowserDynamicTestingModule, + platformBrowserDynamicTesting +} from '@angular/platform-browser-dynamic/testing'; + +declare const require: any; + +// First, initialize the Angular testing environment. +getTestBed().initTestEnvironment( + BrowserDynamicTestingModule, + platformBrowserDynamicTesting() +); +// Then we find all the tests. +const context = require.context('./', true, /\.spec\.ts$/); +// And load the modules. +context.keys().map(context); diff --git a/tsconfig.app.json b/tsconfig.app.json new file mode 100644 index 0000000..d1ca95a --- /dev/null +++ b/tsconfig.app.json @@ -0,0 +1,18 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "./out-tsc/app", + "types": ["swiper"] + }, + "files": [ + "src/main.ts", + "src/polyfills.ts" + ], + "include": [ + "src/**/*.d.ts" + ], + "exclude": [ + "src/test.ts", + "src/**/*.spec.ts" + ] +} diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 0000000..a7aa874 --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,27 @@ +{ + "compileOnSave": false, + "compilerOptions": { + "baseUrl": "./", + "outDir": "./dist/out-tsc", + "sourceMap": true, + "declaration": false, + "downlevelIteration": true, + "experimentalDecorators": true, + "module": "esnext", + "moduleResolution": "node", + "importHelpers": true, + "target": "es2015", + "allowJs": true, + "typeRoots": [ + "node_modules/@types" + ], + "lib": [ + "es2018", + "dom" + ] + }, + "angularCompilerOptions": { + "fullTemplateTypeCheck": true, + "strictInjectionParameters": true + } +} diff --git a/tsconfig.spec.json b/tsconfig.spec.json new file mode 100644 index 0000000..6400fde --- /dev/null +++ b/tsconfig.spec.json @@ -0,0 +1,18 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "./out-tsc/spec", + "types": [ + "jasmine", + "node" + ] + }, + "files": [ + "src/test.ts", + "src/polyfills.ts" + ], + "include": [ + "src/**/*.spec.ts", + "src/**/*.d.ts" + ] +} diff --git a/tslint.json b/tslint.json new file mode 100644 index 0000000..c8d70f1 --- /dev/null +++ b/tslint.json @@ -0,0 +1,91 @@ +{ + "extends": "tslint:recommended", + "rules": { + "array-type": false, + "arrow-parens": false, + "deprecation": { + "severity": "warning" + }, + "component-class-suffix": true, + "contextual-lifecycle": true, + "directive-class-suffix": true, + "directive-selector": [ + true, + "attribute", + "app", + "camelCase" + ], + "component-selector": [ + true, + "element", + "app", + "kebab-case" + ], + "import-blacklist": [ + true, + "rxjs/Rx" + ], + "interface-name": false, + "max-classes-per-file": false, + "max-line-length": [ + true, + 140 + ], + "member-access": false, + "member-ordering": [ + true, + { + "order": [ + "static-field", + "instance-field", + "static-method", + "instance-method" + ] + } + ], + "no-consecutive-blank-lines": false, + "no-console": [ + true, + "debug", + "info", + "time", + "timeEnd", + "trace" + ], + "no-empty": false, + "no-inferrable-types": [ + true, + "ignore-params" + ], + "no-non-null-assertion": true, + "no-redundant-jsdoc": true, + "no-switch-case-fall-through": true, + "no-var-requires": false, + "object-literal-key-quotes": [ + true, + "as-needed" + ], + "object-literal-sort-keys": false, + "ordered-imports": false, + "quotemark": [ + true, + "single" + ], + "trailing-comma": false, + "no-conflicting-lifecycle": true, + "no-host-metadata-property": true, + "no-input-rename": true, + "no-inputs-metadata-property": true, + "no-output-native": true, + "no-output-on-prefix": true, + "no-output-rename": true, + "no-outputs-metadata-property": true, + "template-banana-in-box": true, + "template-no-negated-async": true, + "use-lifecycle-interface": true, + "use-pipe-transform-interface": true + }, + "rulesDirectory": [ + "codelyzer" + ] +} \ No newline at end of file diff --git a/yarn.lock b/yarn.lock new file mode 100644 index 0000000..20aebaa --- /dev/null +++ b/yarn.lock @@ -0,0 +1,7996 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@angular-devkit/architect@0.803.21": + version "0.803.21" + resolved "https://registry.npm.taobao.org/@angular-devkit/architect/download/@angular-devkit/architect-0.803.21.tgz#0e76b6f646ebdbd9bb88d3972b2ca66fed950f7d" + integrity sha1-Dna29kbr29m7iNOXKyymb+2VD30= + dependencies: + "@angular-devkit/core" "8.3.21" + rxjs "6.4.0" + +"@angular-devkit/build-angular@~0.803.21": + version "0.803.21" + resolved "https://registry.npm.taobao.org/@angular-devkit/build-angular/download/@angular-devkit/build-angular-0.803.21.tgz#f3d12ea09748b05eb2d835a7de7997599fb6b752" + integrity sha1-89EuoJdIsF6y2DWn3nmXWZ+2t1I= + dependencies: + "@angular-devkit/architect" "0.803.21" + "@angular-devkit/build-optimizer" "0.803.21" + "@angular-devkit/build-webpack" "0.803.21" + "@angular-devkit/core" "8.3.21" + "@babel/core" "7.7.5" + "@babel/preset-env" "7.7.6" + "@ngtools/webpack" "8.3.21" + ajv "6.10.2" + autoprefixer "9.6.1" + browserslist "4.6.6" + cacache "12.0.2" + caniuse-lite "1.0.30000989" + circular-dependency-plugin "5.2.0" + clean-css "4.2.1" + copy-webpack-plugin "5.1.1" + core-js "3.2.1" + file-loader "4.2.0" + find-cache-dir "3.0.0" + glob "7.1.4" + istanbul-instrumenter-loader "3.0.1" + jest-worker "24.9.0" + karma-source-map-support "1.4.0" + less "3.9.0" + less-loader "5.0.0" + license-webpack-plugin "2.1.2" + loader-utils "1.2.3" + mini-css-extract-plugin "0.8.0" + minimatch "3.0.4" + open "6.4.0" + parse5 "4.0.0" + postcss "7.0.17" + postcss-import "12.0.1" + postcss-loader "3.0.0" + raw-loader "3.1.0" + regenerator-runtime "0.13.3" + rxjs "6.4.0" + sass "1.22.9" + sass-loader "7.2.0" + semver "6.3.0" + source-map "0.7.3" + source-map-loader "0.2.4" + source-map-support "0.5.13" + speed-measure-webpack-plugin "1.3.1" + style-loader "1.0.0" + stylus "0.54.5" + stylus-loader "3.0.2" + terser "4.3.9" + terser-webpack-plugin "1.4.3" + tree-kill "1.2.1" + webpack "4.39.2" + webpack-dev-middleware "3.7.2" + webpack-dev-server "3.9.0" + webpack-merge "4.2.1" + webpack-sources "1.4.3" + webpack-subresource-integrity "1.1.0-rc.6" + worker-plugin "3.2.0" + +"@angular-devkit/build-optimizer@0.803.21": + version "0.803.21" + resolved "https://registry.npm.taobao.org/@angular-devkit/build-optimizer/download/@angular-devkit/build-optimizer-0.803.21.tgz#ecb3b6bba4b13ffbfbdbefb5997f690aa3635203" + integrity sha1-7LO2u6SxP/v72++1mX9pCqNjUgM= + dependencies: + loader-utils "1.2.3" + source-map "0.7.3" + tslib "1.10.0" + typescript "3.5.3" + webpack-sources "1.4.3" + +"@angular-devkit/build-webpack@0.803.21": + version "0.803.21" + resolved "https://registry.npm.taobao.org/@angular-devkit/build-webpack/download/@angular-devkit/build-webpack-0.803.21.tgz#fd45754c0123f44fcde8fa6411ebea52d98054f0" + integrity sha1-/UV1TAEj9E/N6PpkEevqUtmAVPA= + dependencies: + "@angular-devkit/architect" "0.803.21" + "@angular-devkit/core" "8.3.21" + rxjs "6.4.0" + +"@angular-devkit/core@8.3.21": + version "8.3.21" + resolved "https://registry.npm.taobao.org/@angular-devkit/core/download/@angular-devkit/core-8.3.21.tgz#447022813e46333e930816c287722d06b9c4dd3a" + integrity sha1-RHAigT5GMz6TCBbCh3ItBrnE3To= + dependencies: + ajv "6.10.2" + fast-json-stable-stringify "2.0.0" + magic-string "0.25.3" + rxjs "6.4.0" + source-map "0.7.3" + +"@angular-devkit/schematics@8.3.21": + version "8.3.21" + resolved "https://registry.npm.taobao.org/@angular-devkit/schematics/download/@angular-devkit/schematics-8.3.21.tgz#80d515f480180be18a4130ea691f90153bcab3ea" + integrity sha1-gNUV9IAYC+GKQTDqaR+QFTvKs+o= + dependencies: + "@angular-devkit/core" "8.3.21" + rxjs "6.4.0" + +"@angular/animations@^8.2.14": + version "8.2.14" + resolved "https://registry.npm.taobao.org/@angular/animations/download/@angular/animations-8.2.14.tgz?cache=0&sync_timestamp=1576712912708&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40angular%2Fanimations%2Fdownload%2F%40angular%2Fanimations-8.2.14.tgz#76736b21e56165e6ca4925fb69605bdcc56aba7d" + integrity sha1-dnNrIeVhZebKSSX7aWBb3MVqun0= + dependencies: + tslib "^1.9.0" + +"@angular/cdk@^8.2.3": + version "8.2.3" + resolved "https://registry.npm.taobao.org/@angular/cdk/download/@angular/cdk-8.2.3.tgz#16b96ffa935cbf5a646757ecaf2b19c434678f72" + integrity sha1-Frlv+pNcv1pkZ1fsrysZxDRnj3I= + dependencies: + tslib "^1.7.1" + optionalDependencies: + parse5 "^5.0.0" + +"@angular/cli@~8.3.21": + version "8.3.21" + resolved "https://registry.npm.taobao.org/@angular/cli/download/@angular/cli-8.3.21.tgz#cbb05b86b7f34ecd81d52ccad922359e66a16a15" + integrity sha1-y7BbhrfzTs2B1SzK2SI1nmahahU= + dependencies: + "@angular-devkit/architect" "0.803.21" + "@angular-devkit/core" "8.3.21" + "@angular-devkit/schematics" "8.3.21" + "@schematics/angular" "8.3.21" + "@schematics/update" "0.803.21" + "@yarnpkg/lockfile" "1.1.0" + ansi-colors "4.1.1" + debug "^4.1.1" + ini "1.3.5" + inquirer "6.5.1" + npm-package-arg "6.1.0" + npm-pick-manifest "3.0.2" + open "6.4.0" + pacote "9.5.5" + read-package-tree "5.3.1" + rimraf "3.0.0" + semver "6.3.0" + symbol-observable "1.2.0" + universal-analytics "^0.4.20" + uuid "^3.3.2" + +"@angular/common@~8.2.14": + version "8.2.14" + resolved "https://registry.npm.taobao.org/@angular/common/download/@angular/common-8.2.14.tgz#027e52b2951c14082d6e3af1a4ffa1356220e439" + integrity sha1-An5SspUcFAgtbjrxpP+hNWIg5Dk= + dependencies: + tslib "^1.9.0" + +"@angular/compiler-cli@~8.2.14": + version "8.2.14" + resolved "https://registry.npm.taobao.org/@angular/compiler-cli/download/@angular/compiler-cli-8.2.14.tgz#1997bec04a6b9d022954e5747505fe8906994594" + integrity sha1-GZe+wEprnQIpVOV0dQX+iQaZRZQ= + dependencies: + canonical-path "1.0.0" + chokidar "^2.1.1" + convert-source-map "^1.5.1" + dependency-graph "^0.7.2" + magic-string "^0.25.0" + minimist "^1.2.0" + reflect-metadata "^0.1.2" + source-map "^0.6.1" + tslib "^1.9.0" + yargs "13.1.0" + +"@angular/compiler@~8.2.14": + version "8.2.14" + resolved "https://registry.npm.taobao.org/@angular/compiler/download/@angular/compiler-8.2.14.tgz#46db7a9d1c17f236126518ff26480c160d5a6183" + integrity sha1-Rtt6nRwX8jYSZRj/JkgMFg1aYYM= + dependencies: + tslib "^1.9.0" + +"@angular/core@~8.2.14": + version "8.2.14" + resolved "https://registry.npm.taobao.org/@angular/core/download/@angular/core-8.2.14.tgz#35566f5b19480369229477e7e0e0fde740bd5204" + integrity sha1-NVZvWxlIA2kilHfn4OD950C9UgQ= + dependencies: + tslib "^1.9.0" + +"@angular/forms@~8.2.14": + version "8.2.14" + resolved "https://registry.npm.taobao.org/@angular/forms/download/@angular/forms-8.2.14.tgz#7d357c346a3884881beb044c50ec4a09d3d7ee8e" + integrity sha1-fTV8NGo4hIgb6wRMUOxKCdPX7o4= + dependencies: + tslib "^1.9.0" + +"@angular/language-service@~8.2.14": + version "8.2.14" + resolved "https://registry.npm.taobao.org/@angular/language-service/download/@angular/language-service-8.2.14.tgz#e18b27a6841577ce489ad31540150da5a444ca37" + integrity sha1-4YsnpoQVd85ImtMVQBUNpaREyjc= + +"@angular/material@^8.2.3": + version "8.2.3" + resolved "https://registry.npm.taobao.org/@angular/material/download/@angular/material-8.2.3.tgz#16543e4e06a3fde2651a25cfe126e88e714ae105" + integrity sha1-FlQ+Tgaj/eJlGiXP4SbojnFK4QU= + dependencies: + tslib "^1.7.1" + +"@angular/platform-browser-dynamic@~8.2.14": + version "8.2.14" + resolved "https://registry.npm.taobao.org/@angular/platform-browser-dynamic/download/@angular/platform-browser-dynamic-8.2.14.tgz#4439a79fe10ec45170e6940a28835e9ff0918950" + integrity sha1-RDmnn+EOxFFw5pQKKINen/CRiVA= + dependencies: + tslib "^1.9.0" + +"@angular/platform-browser@~8.2.14": + version "8.2.14" + resolved "https://registry.npm.taobao.org/@angular/platform-browser/download/@angular/platform-browser-8.2.14.tgz#31f082e8ba977f9b89964d721c38cbc32ce0e433" + integrity sha1-MfCC6LqXf5uJlk1yHDjLwyzg5DM= + dependencies: + tslib "^1.9.0" + +"@angular/router@~8.2.14": + version "8.2.14" + resolved "https://registry.npm.taobao.org/@angular/router/download/@angular/router-8.2.14.tgz?cache=0&sync_timestamp=1576712899499&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40angular%2Frouter%2Fdownload%2F%40angular%2Frouter-8.2.14.tgz#5f9f9707710983c2143aead79dcd2da520ae3eb8" + integrity sha1-X5+XB3EJg8IUOurXnc0tpSCuPrg= + dependencies: + tslib "^1.9.0" + +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.5.5": + version "7.5.5" + resolved "https://registry.npm.taobao.org/@babel/code-frame/download/@babel/code-frame-7.5.5.tgz#bc0782f6d69f7b7d49531219699b988f669a8f9d" + integrity sha1-vAeC9tafe31JUxIZaZuYj2aaj50= + dependencies: + "@babel/highlight" "^7.0.0" + +"@babel/core@7.7.5": + version "7.7.5" + resolved "https://registry.npm.taobao.org/@babel/core/download/@babel/core-7.7.5.tgz?cache=0&sync_timestamp=1576716905281&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fcore%2Fdownload%2F%40babel%2Fcore-7.7.5.tgz#ae1323cd035b5160293307f50647e83f8ba62f7e" + integrity sha1-rhMjzQNbUWApMwf1BkfoP4umL34= + dependencies: + "@babel/code-frame" "^7.5.5" + "@babel/generator" "^7.7.4" + "@babel/helpers" "^7.7.4" + "@babel/parser" "^7.7.5" + "@babel/template" "^7.7.4" + "@babel/traverse" "^7.7.4" + "@babel/types" "^7.7.4" + convert-source-map "^1.7.0" + debug "^4.1.0" + json5 "^2.1.0" + lodash "^4.17.13" + resolve "^1.3.2" + semver "^5.4.1" + source-map "^0.5.0" + +"@babel/generator@^7.4.0", "@babel/generator@^7.7.4": + version "7.7.7" + resolved "https://registry.npm.taobao.org/@babel/generator/download/@babel/generator-7.7.7.tgz?cache=0&sync_timestamp=1576716816462&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fgenerator%2Fdownload%2F%40babel%2Fgenerator-7.7.7.tgz#859ac733c44c74148e1a72980a64ec84b85f4f45" + integrity sha1-hZrHM8RMdBSOGnKYCmTshLhfT0U= + dependencies: + "@babel/types" "^7.7.4" + jsesc "^2.5.1" + lodash "^4.17.13" + source-map "^0.5.0" + +"@babel/helper-annotate-as-pure@^7.7.4": + version "7.7.4" + resolved "https://registry.npm.taobao.org/@babel/helper-annotate-as-pure/download/@babel/helper-annotate-as-pure-7.7.4.tgz?cache=0&sync_timestamp=1574466437284&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fhelper-annotate-as-pure%2Fdownload%2F%40babel%2Fhelper-annotate-as-pure-7.7.4.tgz#bb3faf1e74b74bd547e867e48f551fa6b098b6ce" + integrity sha1-uz+vHnS3S9VH6Gfkj1UfprCYts4= + dependencies: + "@babel/types" "^7.7.4" + +"@babel/helper-builder-binary-assignment-operator-visitor@^7.7.4": + version "7.7.4" + resolved "https://registry.npm.taobao.org/@babel/helper-builder-binary-assignment-operator-visitor/download/@babel/helper-builder-binary-assignment-operator-visitor-7.7.4.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fhelper-builder-binary-assignment-operator-visitor%2Fdownload%2F%40babel%2Fhelper-builder-binary-assignment-operator-visitor-7.7.4.tgz#5f73f2b28580e224b5b9bd03146a4015d6217f5f" + integrity sha1-X3PysoWA4iS1ub0DFGpAFdYhf18= + dependencies: + "@babel/helper-explode-assignable-expression" "^7.7.4" + "@babel/types" "^7.7.4" + +"@babel/helper-call-delegate@^7.7.4": + version "7.7.4" + resolved "https://registry.npm.taobao.org/@babel/helper-call-delegate/download/@babel/helper-call-delegate-7.7.4.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fhelper-call-delegate%2Fdownload%2F%40babel%2Fhelper-call-delegate-7.7.4.tgz#621b83e596722b50c0066f9dc37d3232e461b801" + integrity sha1-YhuD5ZZyK1DABm+dw30yMuRhuAE= + dependencies: + "@babel/helper-hoist-variables" "^7.7.4" + "@babel/traverse" "^7.7.4" + "@babel/types" "^7.7.4" + +"@babel/helper-create-regexp-features-plugin@^7.7.4": + version "7.7.4" + resolved "https://registry.npm.taobao.org/@babel/helper-create-regexp-features-plugin/download/@babel/helper-create-regexp-features-plugin-7.7.4.tgz?cache=0&sync_timestamp=1574466720467&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fhelper-create-regexp-features-plugin%2Fdownload%2F%40babel%2Fhelper-create-regexp-features-plugin-7.7.4.tgz#6d5762359fd34f4da1500e4cff9955b5299aaf59" + integrity sha1-bVdiNZ/TT02hUA5M/5lVtSmar1k= + dependencies: + "@babel/helper-regex" "^7.4.4" + regexpu-core "^4.6.0" + +"@babel/helper-define-map@^7.7.4": + version "7.7.4" + resolved "https://registry.npm.taobao.org/@babel/helper-define-map/download/@babel/helper-define-map-7.7.4.tgz#2841bf92eb8bd9c906851546fe6b9d45e162f176" + integrity sha1-KEG/kuuL2ckGhRVG/mudReFi8XY= + dependencies: + "@babel/helper-function-name" "^7.7.4" + "@babel/types" "^7.7.4" + lodash "^4.17.13" + +"@babel/helper-explode-assignable-expression@^7.7.4": + version "7.7.4" + resolved "https://registry.npm.taobao.org/@babel/helper-explode-assignable-expression/download/@babel/helper-explode-assignable-expression-7.7.4.tgz#fa700878e008d85dc51ba43e9fb835cddfe05c84" + integrity sha1-+nAIeOAI2F3FG6Q+n7g1zd/gXIQ= + dependencies: + "@babel/traverse" "^7.7.4" + "@babel/types" "^7.7.4" + +"@babel/helper-function-name@^7.7.4": + version "7.7.4" + resolved "https://registry.npm.taobao.org/@babel/helper-function-name/download/@babel/helper-function-name-7.7.4.tgz#ab6e041e7135d436d8f0a3eca15de5b67a341a2e" + integrity sha1-q24EHnE11DbY8KPsoV3ltno0Gi4= + dependencies: + "@babel/helper-get-function-arity" "^7.7.4" + "@babel/template" "^7.7.4" + "@babel/types" "^7.7.4" + +"@babel/helper-get-function-arity@^7.7.4": + version "7.7.4" + resolved "https://registry.npm.taobao.org/@babel/helper-get-function-arity/download/@babel/helper-get-function-arity-7.7.4.tgz?cache=0&sync_timestamp=1574465620780&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fhelper-get-function-arity%2Fdownload%2F%40babel%2Fhelper-get-function-arity-7.7.4.tgz#cb46348d2f8808e632f0ab048172130e636005f0" + integrity sha1-y0Y0jS+ICOYy8KsEgXITDmNgBfA= + dependencies: + "@babel/types" "^7.7.4" + +"@babel/helper-hoist-variables@^7.7.4": + version "7.7.4" + resolved "https://registry.npm.taobao.org/@babel/helper-hoist-variables/download/@babel/helper-hoist-variables-7.7.4.tgz?cache=0&sync_timestamp=1574466436965&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fhelper-hoist-variables%2Fdownload%2F%40babel%2Fhelper-hoist-variables-7.7.4.tgz#612384e3d823fdfaaf9fce31550fe5d4db0f3d12" + integrity sha1-YSOE49gj/fqvn84xVQ/l1NsPPRI= + dependencies: + "@babel/types" "^7.7.4" + +"@babel/helper-member-expression-to-functions@^7.7.4": + version "7.7.4" + resolved "https://registry.npm.taobao.org/@babel/helper-member-expression-to-functions/download/@babel/helper-member-expression-to-functions-7.7.4.tgz#356438e2569df7321a8326644d4b790d2122cb74" + integrity sha1-NWQ44lad9zIagyZkTUt5DSEiy3Q= + dependencies: + "@babel/types" "^7.7.4" + +"@babel/helper-module-imports@^7.7.4": + version "7.7.4" + resolved "https://registry.npm.taobao.org/@babel/helper-module-imports/download/@babel/helper-module-imports-7.7.4.tgz?cache=0&sync_timestamp=1574466791934&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fhelper-module-imports%2Fdownload%2F%40babel%2Fhelper-module-imports-7.7.4.tgz#e5a92529f8888bf319a6376abfbd1cebc491ad91" + integrity sha1-5aklKfiIi/MZpjdqv70c68SRrZE= + dependencies: + "@babel/types" "^7.7.4" + +"@babel/helper-module-transforms@^7.7.4", "@babel/helper-module-transforms@^7.7.5": + version "7.7.5" + resolved "https://registry.npm.taobao.org/@babel/helper-module-transforms/download/@babel/helper-module-transforms-7.7.5.tgz#d044da7ffd91ec967db25cd6748f704b6b244835" + integrity sha1-0ETaf/2R7JZ9slzWdI9wS2skSDU= + dependencies: + "@babel/helper-module-imports" "^7.7.4" + "@babel/helper-simple-access" "^7.7.4" + "@babel/helper-split-export-declaration" "^7.7.4" + "@babel/template" "^7.7.4" + "@babel/types" "^7.7.4" + lodash "^4.17.13" + +"@babel/helper-optimise-call-expression@^7.7.4": + version "7.7.4" + resolved "https://registry.npm.taobao.org/@babel/helper-optimise-call-expression/download/@babel/helper-optimise-call-expression-7.7.4.tgz#034af31370d2995242aa4df402c3b7794b2dcdf2" + integrity sha1-A0rzE3DSmVJCqk30AsO3eUstzfI= + dependencies: + "@babel/types" "^7.7.4" + +"@babel/helper-plugin-utils@^7.0.0": + version "7.0.0" + resolved "https://registry.npm.taobao.org/@babel/helper-plugin-utils/download/@babel/helper-plugin-utils-7.0.0.tgz#bbb3fbee98661c569034237cc03967ba99b4f250" + integrity sha1-u7P77phmHFaQNCN8wDlnupm08lA= + +"@babel/helper-regex@^7.0.0", "@babel/helper-regex@^7.4.4": + version "7.5.5" + resolved "https://registry.npm.taobao.org/@babel/helper-regex/download/@babel/helper-regex-7.5.5.tgz#0aa6824f7100a2e0e89c1527c23936c152cab351" + integrity sha1-CqaCT3EAouDonBUnwjk2wVLKs1E= + dependencies: + lodash "^4.17.13" + +"@babel/helper-remap-async-to-generator@^7.7.4": + version "7.7.4" + resolved "https://registry.npm.taobao.org/@babel/helper-remap-async-to-generator/download/@babel/helper-remap-async-to-generator-7.7.4.tgz?cache=0&sync_timestamp=1574466799754&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fhelper-remap-async-to-generator%2Fdownload%2F%40babel%2Fhelper-remap-async-to-generator-7.7.4.tgz#c68c2407350d9af0e061ed6726afb4fff16d0234" + integrity sha1-xowkBzUNmvDgYe1nJq+0//FtAjQ= + dependencies: + "@babel/helper-annotate-as-pure" "^7.7.4" + "@babel/helper-wrap-function" "^7.7.4" + "@babel/template" "^7.7.4" + "@babel/traverse" "^7.7.4" + "@babel/types" "^7.7.4" + +"@babel/helper-replace-supers@^7.7.4": + version "7.7.4" + resolved "https://registry.npm.taobao.org/@babel/helper-replace-supers/download/@babel/helper-replace-supers-7.7.4.tgz#3c881a6a6a7571275a72d82e6107126ec9e2cdd2" + integrity sha1-PIgaamp1cSdactguYQcSbsnizdI= + dependencies: + "@babel/helper-member-expression-to-functions" "^7.7.4" + "@babel/helper-optimise-call-expression" "^7.7.4" + "@babel/traverse" "^7.7.4" + "@babel/types" "^7.7.4" + +"@babel/helper-simple-access@^7.7.4": + version "7.7.4" + resolved "https://registry.npm.taobao.org/@babel/helper-simple-access/download/@babel/helper-simple-access-7.7.4.tgz#a169a0adb1b5f418cfc19f22586b2ebf58a9a294" + integrity sha1-oWmgrbG19BjPwZ8iWGsuv1ipopQ= + dependencies: + "@babel/template" "^7.7.4" + "@babel/types" "^7.7.4" + +"@babel/helper-split-export-declaration@^7.7.4": + version "7.7.4" + resolved "https://registry.npm.taobao.org/@babel/helper-split-export-declaration/download/@babel/helper-split-export-declaration-7.7.4.tgz#57292af60443c4a3622cf74040ddc28e68336fd8" + integrity sha1-Vykq9gRDxKNiLPdAQN3Cjmgzb9g= + dependencies: + "@babel/types" "^7.7.4" + +"@babel/helper-wrap-function@^7.7.4": + version "7.7.4" + resolved "https://registry.npm.taobao.org/@babel/helper-wrap-function/download/@babel/helper-wrap-function-7.7.4.tgz?cache=0&sync_timestamp=1574466796638&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fhelper-wrap-function%2Fdownload%2F%40babel%2Fhelper-wrap-function-7.7.4.tgz#37ab7fed5150e22d9d7266e830072c0cdd8baace" + integrity sha1-N6t/7VFQ4i2dcmboMAcsDN2Lqs4= + dependencies: + "@babel/helper-function-name" "^7.7.4" + "@babel/template" "^7.7.4" + "@babel/traverse" "^7.7.4" + "@babel/types" "^7.7.4" + +"@babel/helpers@^7.7.4": + version "7.7.4" + resolved "https://registry.npm.taobao.org/@babel/helpers/download/@babel/helpers-7.7.4.tgz?cache=0&sync_timestamp=1574466423809&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fhelpers%2Fdownload%2F%40babel%2Fhelpers-7.7.4.tgz#62c215b9e6c712dadc15a9a0dcab76c92a940302" + integrity sha1-YsIVuebHEtrcFamg3Kt2ySqUAwI= + dependencies: + "@babel/template" "^7.7.4" + "@babel/traverse" "^7.7.4" + "@babel/types" "^7.7.4" + +"@babel/highlight@^7.0.0": + version "7.5.0" + resolved "https://registry.npm.taobao.org/@babel/highlight/download/@babel/highlight-7.5.0.tgz#56d11312bd9248fa619591d02472be6e8cb32540" + integrity sha1-VtETEr2SSPphlZHQJHK+boyzJUA= + dependencies: + chalk "^2.0.0" + esutils "^2.0.2" + js-tokens "^4.0.0" + +"@babel/parser@^7.4.3", "@babel/parser@^7.7.4", "@babel/parser@^7.7.5": + version "7.7.7" + resolved "https://registry.npm.taobao.org/@babel/parser/download/@babel/parser-7.7.7.tgz?cache=0&sync_timestamp=1576716816884&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fparser%2Fdownload%2F%40babel%2Fparser-7.7.7.tgz#1b886595419cf92d811316d5b715a53ff38b4937" + integrity sha1-G4hllUGc+S2BExbVtxWlP/OLSTc= + +"@babel/plugin-proposal-async-generator-functions@^7.7.4": + version "7.7.4" + resolved "https://registry.npm.taobao.org/@babel/plugin-proposal-async-generator-functions/download/@babel/plugin-proposal-async-generator-functions-7.7.4.tgz?cache=0&sync_timestamp=1574466801807&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-proposal-async-generator-functions%2Fdownload%2F%40babel%2Fplugin-proposal-async-generator-functions-7.7.4.tgz#0351c5ac0a9e927845fffd5b82af476947b7ce6d" + integrity sha1-A1HFrAqeknhF//1bgq9HaUe3zm0= + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-remap-async-to-generator" "^7.7.4" + "@babel/plugin-syntax-async-generators" "^7.7.4" + +"@babel/plugin-proposal-dynamic-import@^7.7.4": + version "7.7.4" + resolved "https://registry.npm.taobao.org/@babel/plugin-proposal-dynamic-import/download/@babel/plugin-proposal-dynamic-import-7.7.4.tgz#dde64a7f127691758cbfed6cf70de0fa5879d52d" + integrity sha1-3eZKfxJ2kXWMv+1s9w3g+lh51S0= + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/plugin-syntax-dynamic-import" "^7.7.4" + +"@babel/plugin-proposal-json-strings@^7.7.4": + version "7.7.4" + resolved "https://registry.npm.taobao.org/@babel/plugin-proposal-json-strings/download/@babel/plugin-proposal-json-strings-7.7.4.tgz?cache=0&sync_timestamp=1574466787739&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-proposal-json-strings%2Fdownload%2F%40babel%2Fplugin-proposal-json-strings-7.7.4.tgz#7700a6bfda771d8dc81973249eac416c6b4c697d" + integrity sha1-dwCmv9p3HY3IGXMknqxBbGtMaX0= + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/plugin-syntax-json-strings" "^7.7.4" + +"@babel/plugin-proposal-object-rest-spread@^7.7.4": + version "7.7.7" + resolved "https://registry.npm.taobao.org/@babel/plugin-proposal-object-rest-spread/download/@babel/plugin-proposal-object-rest-spread-7.7.7.tgz#9f27075004ab99be08c5c1bd653a2985813cb370" + integrity sha1-nycHUASrmb4IxcG9ZTophYE8s3A= + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/plugin-syntax-object-rest-spread" "^7.7.4" + +"@babel/plugin-proposal-optional-catch-binding@^7.7.4": + version "7.7.4" + resolved "https://registry.npm.taobao.org/@babel/plugin-proposal-optional-catch-binding/download/@babel/plugin-proposal-optional-catch-binding-7.7.4.tgz#ec21e8aeb09ec6711bc0a39ca49520abee1de379" + integrity sha1-7CHorrCexnEbwKOcpJUgq+4d43k= + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/plugin-syntax-optional-catch-binding" "^7.7.4" + +"@babel/plugin-proposal-unicode-property-regex@^7.7.4": + version "7.7.7" + resolved "https://registry.npm.taobao.org/@babel/plugin-proposal-unicode-property-regex/download/@babel/plugin-proposal-unicode-property-regex-7.7.7.tgz#433fa9dac64f953c12578b29633f456b68831c4e" + integrity sha1-Qz+p2sZPlTwSV4spYz9Fa2iDHE4= + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.7.4" + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-syntax-async-generators@^7.7.4": + version "7.7.4" + resolved "https://registry.npm.taobao.org/@babel/plugin-syntax-async-generators/download/@babel/plugin-syntax-async-generators-7.7.4.tgz?cache=0&sync_timestamp=1574466720107&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-syntax-async-generators%2Fdownload%2F%40babel%2Fplugin-syntax-async-generators-7.7.4.tgz#331aaf310a10c80c44a66b238b6e49132bd3c889" + integrity sha1-MxqvMQoQyAxEpmsji25JEyvTyIk= + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-syntax-dynamic-import@^7.7.4": + version "7.7.4" + resolved "https://registry.npm.taobao.org/@babel/plugin-syntax-dynamic-import/download/@babel/plugin-syntax-dynamic-import-7.7.4.tgz#29ca3b4415abfe4a5ec381e903862ad1a54c3aec" + integrity sha1-Kco7RBWr/kpew4HpA4Yq0aVMOuw= + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-syntax-json-strings@^7.7.4": + version "7.7.4" + resolved "https://registry.npm.taobao.org/@babel/plugin-syntax-json-strings/download/@babel/plugin-syntax-json-strings-7.7.4.tgz#86e63f7d2e22f9e27129ac4e83ea989a382e86cc" + integrity sha1-huY/fS4i+eJxKaxOg+qYmjguhsw= + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-syntax-object-rest-spread@^7.7.4": + version "7.7.4" + resolved "https://registry.npm.taobao.org/@babel/plugin-syntax-object-rest-spread/download/@babel/plugin-syntax-object-rest-spread-7.7.4.tgz?cache=0&sync_timestamp=1574465586766&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-syntax-object-rest-spread%2Fdownload%2F%40babel%2Fplugin-syntax-object-rest-spread-7.7.4.tgz#47cf220d19d6d0d7b154304701f468fc1cc6ff46" + integrity sha1-R88iDRnW0NexVDBHAfRo/BzG/0Y= + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-syntax-optional-catch-binding@^7.7.4": + version "7.7.4" + resolved "https://registry.npm.taobao.org/@babel/plugin-syntax-optional-catch-binding/download/@babel/plugin-syntax-optional-catch-binding-7.7.4.tgz#a3e38f59f4b6233867b4a92dcb0ee05b2c334aa6" + integrity sha1-o+OPWfS2IzhntKktyw7gWywzSqY= + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-syntax-top-level-await@^7.7.4": + version "7.7.4" + resolved "https://registry.npm.taobao.org/@babel/plugin-syntax-top-level-await/download/@babel/plugin-syntax-top-level-await-7.7.4.tgz?cache=0&sync_timestamp=1574466726312&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-syntax-top-level-await%2Fdownload%2F%40babel%2Fplugin-syntax-top-level-await-7.7.4.tgz#bd7d8fa7b9fee793a36e4027fd6dd1aa32f946da" + integrity sha1-vX2Pp7n+55OjbkAn/W3RqjL5Rto= + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-transform-arrow-functions@^7.7.4": + version "7.7.4" + resolved "https://registry.npm.taobao.org/@babel/plugin-transform-arrow-functions/download/@babel/plugin-transform-arrow-functions-7.7.4.tgz#76309bd578addd8aee3b379d809c802305a98a12" + integrity sha1-djCb1Xit3YruOzedgJyAIwWpihI= + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-transform-async-to-generator@^7.7.4": + version "7.7.4" + resolved "https://registry.npm.taobao.org/@babel/plugin-transform-async-to-generator/download/@babel/plugin-transform-async-to-generator-7.7.4.tgz?cache=0&sync_timestamp=1574466801013&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-transform-async-to-generator%2Fdownload%2F%40babel%2Fplugin-transform-async-to-generator-7.7.4.tgz#694cbeae6d613a34ef0292713fa42fb45c4470ba" + integrity sha1-aUy+rm1hOjTvApJxP6QvtFxEcLo= + dependencies: + "@babel/helper-module-imports" "^7.7.4" + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-remap-async-to-generator" "^7.7.4" + +"@babel/plugin-transform-block-scoped-functions@^7.7.4": + version "7.7.4" + resolved "https://registry.npm.taobao.org/@babel/plugin-transform-block-scoped-functions/download/@babel/plugin-transform-block-scoped-functions-7.7.4.tgz#d0d9d5c269c78eaea76227ace214b8d01e4d837b" + integrity sha1-0NnVwmnHjq6nYies4hS40B5Ng3s= + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-transform-block-scoping@^7.7.4": + version "7.7.4" + resolved "https://registry.npm.taobao.org/@babel/plugin-transform-block-scoping/download/@babel/plugin-transform-block-scoping-7.7.4.tgz#200aad0dcd6bb80372f94d9e628ea062c58bf224" + integrity sha1-IAqtDc1ruANy+U2eYo6gYsWL8iQ= + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + lodash "^4.17.13" + +"@babel/plugin-transform-classes@^7.7.4": + version "7.7.4" + resolved "https://registry.npm.taobao.org/@babel/plugin-transform-classes/download/@babel/plugin-transform-classes-7.7.4.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-transform-classes%2Fdownload%2F%40babel%2Fplugin-transform-classes-7.7.4.tgz#c92c14be0a1399e15df72667067a8f510c9400ec" + integrity sha1-ySwUvgoTmeFd9yZnBnqPUQyUAOw= + dependencies: + "@babel/helper-annotate-as-pure" "^7.7.4" + "@babel/helper-define-map" "^7.7.4" + "@babel/helper-function-name" "^7.7.4" + "@babel/helper-optimise-call-expression" "^7.7.4" + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-replace-supers" "^7.7.4" + "@babel/helper-split-export-declaration" "^7.7.4" + globals "^11.1.0" + +"@babel/plugin-transform-computed-properties@^7.7.4": + version "7.7.4" + resolved "https://registry.npm.taobao.org/@babel/plugin-transform-computed-properties/download/@babel/plugin-transform-computed-properties-7.7.4.tgz#e856c1628d3238ffe12d668eb42559f79a81910d" + integrity sha1-6FbBYo0yOP/hLWaOtCVZ95qBkQ0= + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-transform-destructuring@^7.7.4": + version "7.7.4" + resolved "https://registry.npm.taobao.org/@babel/plugin-transform-destructuring/download/@babel/plugin-transform-destructuring-7.7.4.tgz?cache=0&sync_timestamp=1574466725567&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-transform-destructuring%2Fdownload%2F%40babel%2Fplugin-transform-destructuring-7.7.4.tgz#2b713729e5054a1135097b6a67da1b6fe8789267" + integrity sha1-K3E3KeUFShE1CXtqZ9obb+h4kmc= + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-transform-dotall-regex@^7.7.4": + version "7.7.7" + resolved "https://registry.npm.taobao.org/@babel/plugin-transform-dotall-regex/download/@babel/plugin-transform-dotall-regex-7.7.7.tgz#3e9713f1b69f339e87fa796b097d73ded16b937b" + integrity sha1-PpcT8bafM56H+nlrCX1z3tFrk3s= + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.7.4" + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-transform-duplicate-keys@^7.7.4": + version "7.7.4" + resolved "https://registry.npm.taobao.org/@babel/plugin-transform-duplicate-keys/download/@babel/plugin-transform-duplicate-keys-7.7.4.tgz#3d21731a42e3f598a73835299dd0169c3b90ac91" + integrity sha1-PSFzGkLj9ZinODUpndAWnDuQrJE= + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-transform-exponentiation-operator@^7.7.4": + version "7.7.4" + resolved "https://registry.npm.taobao.org/@babel/plugin-transform-exponentiation-operator/download/@babel/plugin-transform-exponentiation-operator-7.7.4.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-transform-exponentiation-operator%2Fdownload%2F%40babel%2Fplugin-transform-exponentiation-operator-7.7.4.tgz#dd30c0191e3a1ba19bcc7e389bdfddc0729d5db9" + integrity sha1-3TDAGR46G6GbzH44m9/dwHKdXbk= + dependencies: + "@babel/helper-builder-binary-assignment-operator-visitor" "^7.7.4" + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-transform-for-of@^7.7.4": + version "7.7.4" + resolved "https://registry.npm.taobao.org/@babel/plugin-transform-for-of/download/@babel/plugin-transform-for-of-7.7.4.tgz?cache=0&sync_timestamp=1574466725758&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-transform-for-of%2Fdownload%2F%40babel%2Fplugin-transform-for-of-7.7.4.tgz#248800e3a5e507b1f103d8b4ca998e77c63932bc" + integrity sha1-JIgA46XlB7HxA9i0ypmOd8Y5Mrw= + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-transform-function-name@^7.7.4": + version "7.7.4" + resolved "https://registry.npm.taobao.org/@babel/plugin-transform-function-name/download/@babel/plugin-transform-function-name-7.7.4.tgz#75a6d3303d50db638ff8b5385d12451c865025b1" + integrity sha1-dabTMD1Q22OP+LU4XRJFHIZQJbE= + dependencies: + "@babel/helper-function-name" "^7.7.4" + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-transform-literals@^7.7.4": + version "7.7.4" + resolved "https://registry.npm.taobao.org/@babel/plugin-transform-literals/download/@babel/plugin-transform-literals-7.7.4.tgz#27fe87d2b5017a2a5a34d1c41a6b9f6a6262643e" + integrity sha1-J/6H0rUBeipaNNHEGmufamJiZD4= + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-transform-member-expression-literals@^7.7.4": + version "7.7.4" + resolved "https://registry.npm.taobao.org/@babel/plugin-transform-member-expression-literals/download/@babel/plugin-transform-member-expression-literals-7.7.4.tgz?cache=0&sync_timestamp=1574466727087&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-transform-member-expression-literals%2Fdownload%2F%40babel%2Fplugin-transform-member-expression-literals-7.7.4.tgz#aee127f2f3339fc34ce5e3055d7ffbf7aa26f19a" + integrity sha1-ruEn8vMzn8NM5eMFXX/796om8Zo= + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-transform-modules-amd@^7.7.5": + version "7.7.5" + resolved "https://registry.npm.taobao.org/@babel/plugin-transform-modules-amd/download/@babel/plugin-transform-modules-amd-7.7.5.tgz#39e0fb717224b59475b306402bb8eedab01e729c" + integrity sha1-OeD7cXIktZR1swZAK7ju2rAecpw= + dependencies: + "@babel/helper-module-transforms" "^7.7.5" + "@babel/helper-plugin-utils" "^7.0.0" + babel-plugin-dynamic-import-node "^2.3.0" + +"@babel/plugin-transform-modules-commonjs@^7.7.5": + version "7.7.5" + resolved "https://registry.npm.taobao.org/@babel/plugin-transform-modules-commonjs/download/@babel/plugin-transform-modules-commonjs-7.7.5.tgz#1d27f5eb0bcf7543e774950e5b2fa782e637b345" + integrity sha1-HSf16wvPdUPndJUOWy+nguY3s0U= + dependencies: + "@babel/helper-module-transforms" "^7.7.5" + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-simple-access" "^7.7.4" + babel-plugin-dynamic-import-node "^2.3.0" + +"@babel/plugin-transform-modules-systemjs@^7.7.4": + version "7.7.4" + resolved "https://registry.npm.taobao.org/@babel/plugin-transform-modules-systemjs/download/@babel/plugin-transform-modules-systemjs-7.7.4.tgz?cache=0&sync_timestamp=1574466794336&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-transform-modules-systemjs%2Fdownload%2F%40babel%2Fplugin-transform-modules-systemjs-7.7.4.tgz#cd98152339d3e763dfe838b7d4273edaf520bb30" + integrity sha1-zZgVIznT52Pf6Di31Cc+2vUguzA= + dependencies: + "@babel/helper-hoist-variables" "^7.7.4" + "@babel/helper-plugin-utils" "^7.0.0" + babel-plugin-dynamic-import-node "^2.3.0" + +"@babel/plugin-transform-modules-umd@^7.7.4": + version "7.7.4" + resolved "https://registry.npm.taobao.org/@babel/plugin-transform-modules-umd/download/@babel/plugin-transform-modules-umd-7.7.4.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-transform-modules-umd%2Fdownload%2F%40babel%2Fplugin-transform-modules-umd-7.7.4.tgz#1027c355a118de0aae9fee00ad7813c584d9061f" + integrity sha1-ECfDVaEY3gqun+4ArXgTxYTZBh8= + dependencies: + "@babel/helper-module-transforms" "^7.7.4" + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-transform-named-capturing-groups-regex@^7.7.4": + version "7.7.4" + resolved "https://registry.npm.taobao.org/@babel/plugin-transform-named-capturing-groups-regex/download/@babel/plugin-transform-named-capturing-groups-regex-7.7.4.tgz#fb3bcc4ee4198e7385805007373d6b6f42c98220" + integrity sha1-+zvMTuQZjnOFgFAHNz1rb0LJgiA= + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.7.4" + +"@babel/plugin-transform-new-target@^7.7.4": + version "7.7.4" + resolved "https://registry.npm.taobao.org/@babel/plugin-transform-new-target/download/@babel/plugin-transform-new-target-7.7.4.tgz#4a0753d2d60639437be07b592a9e58ee00720167" + integrity sha1-SgdT0tYGOUN74HtZKp5Y7gByAWc= + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-transform-object-super@^7.7.4": + version "7.7.4" + resolved "https://registry.npm.taobao.org/@babel/plugin-transform-object-super/download/@babel/plugin-transform-object-super-7.7.4.tgz?cache=0&sync_timestamp=1574466799479&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-transform-object-super%2Fdownload%2F%40babel%2Fplugin-transform-object-super-7.7.4.tgz#48488937a2d586c0148451bf51af9d7dda567262" + integrity sha1-SEiJN6LVhsAUhFG/Ua+dfdpWcmI= + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-replace-supers" "^7.7.4" + +"@babel/plugin-transform-parameters@^7.7.4": + version "7.7.7" + resolved "https://registry.npm.taobao.org/@babel/plugin-transform-parameters/download/@babel/plugin-transform-parameters-7.7.7.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-transform-parameters%2Fdownload%2F%40babel%2Fplugin-transform-parameters-7.7.7.tgz#7a884b2460164dc5f194f668332736584c760007" + integrity sha1-eohLJGAWTcXxlPZoMyc2WEx2AAc= + dependencies: + "@babel/helper-call-delegate" "^7.7.4" + "@babel/helper-get-function-arity" "^7.7.4" + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-transform-property-literals@^7.7.4": + version "7.7.4" + resolved "https://registry.npm.taobao.org/@babel/plugin-transform-property-literals/download/@babel/plugin-transform-property-literals-7.7.4.tgz#2388d6505ef89b266103f450f9167e6bd73f98c2" + integrity sha1-I4jWUF74myZhA/RQ+RZ+a9c/mMI= + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-transform-regenerator@^7.7.5": + version "7.7.5" + resolved "https://registry.npm.taobao.org/@babel/plugin-transform-regenerator/download/@babel/plugin-transform-regenerator-7.7.5.tgz#3a8757ee1a2780f390e89f246065ecf59c26fce9" + integrity sha1-OodX7hongPOQ6J8kYGXs9Zwm/Ok= + dependencies: + regenerator-transform "^0.14.0" + +"@babel/plugin-transform-reserved-words@^7.7.4": + version "7.7.4" + resolved "https://registry.npm.taobao.org/@babel/plugin-transform-reserved-words/download/@babel/plugin-transform-reserved-words-7.7.4.tgz#6a7cf123ad175bb5c69aec8f6f0770387ed3f1eb" + integrity sha1-anzxI60XW7XGmuyPbwdwOH7T8es= + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-transform-shorthand-properties@^7.7.4": + version "7.7.4" + resolved "https://registry.npm.taobao.org/@babel/plugin-transform-shorthand-properties/download/@babel/plugin-transform-shorthand-properties-7.7.4.tgz?cache=0&sync_timestamp=1574466426443&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-transform-shorthand-properties%2Fdownload%2F%40babel%2Fplugin-transform-shorthand-properties-7.7.4.tgz#74a0a9b2f6d67a684c6fbfd5f0458eb7ba99891e" + integrity sha1-dKCpsvbWemhMb7/V8EWOt7qZiR4= + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-transform-spread@^7.7.4": + version "7.7.4" + resolved "https://registry.npm.taobao.org/@babel/plugin-transform-spread/download/@babel/plugin-transform-spread-7.7.4.tgz#aa673b356fe6b7e70d69b6e33a17fef641008578" + integrity sha1-qmc7NW/mt+cNabbjOhf+9kEAhXg= + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-transform-sticky-regex@^7.7.4": + version "7.7.4" + resolved "https://registry.npm.taobao.org/@babel/plugin-transform-sticky-regex/download/@babel/plugin-transform-sticky-regex-7.7.4.tgz#ffb68c05090c30732076b1285dc1401b404a123c" + integrity sha1-/7aMBQkMMHMgdrEoXcFAG0BKEjw= + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-regex" "^7.0.0" + +"@babel/plugin-transform-template-literals@^7.7.4": + version "7.7.4" + resolved "https://registry.npm.taobao.org/@babel/plugin-transform-template-literals/download/@babel/plugin-transform-template-literals-7.7.4.tgz#1eb6411736dd3fe87dbd20cc6668e5121c17d604" + integrity sha1-HrZBFzbdP+h9vSDMZmjlEhwX1gQ= + dependencies: + "@babel/helper-annotate-as-pure" "^7.7.4" + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-transform-typeof-symbol@^7.7.4": + version "7.7.4" + resolved "https://registry.npm.taobao.org/@babel/plugin-transform-typeof-symbol/download/@babel/plugin-transform-typeof-symbol-7.7.4.tgz?cache=0&sync_timestamp=1574466426935&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-transform-typeof-symbol%2Fdownload%2F%40babel%2Fplugin-transform-typeof-symbol-7.7.4.tgz#3174626214f2d6de322882e498a38e8371b2140e" + integrity sha1-MXRiYhTy1t4yKILkmKOOg3GyFA4= + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-transform-unicode-regex@^7.7.4": + version "7.7.4" + resolved "https://registry.npm.taobao.org/@babel/plugin-transform-unicode-regex/download/@babel/plugin-transform-unicode-regex-7.7.4.tgz#a3c0f65b117c4c81c5b6484f2a5e7b95346b83ae" + integrity sha1-o8D2WxF8TIHFtkhPKl57lTRrg64= + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.7.4" + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/preset-env@7.7.6": + version "7.7.6" + resolved "https://registry.npm.taobao.org/@babel/preset-env/download/@babel/preset-env-7.7.6.tgz#39ac600427bbb94eec6b27953f1dfa1d64d457b2" + integrity sha1-OaxgBCe7uU7sayeVPx36HWTUV7I= + dependencies: + "@babel/helper-module-imports" "^7.7.4" + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/plugin-proposal-async-generator-functions" "^7.7.4" + "@babel/plugin-proposal-dynamic-import" "^7.7.4" + "@babel/plugin-proposal-json-strings" "^7.7.4" + "@babel/plugin-proposal-object-rest-spread" "^7.7.4" + "@babel/plugin-proposal-optional-catch-binding" "^7.7.4" + "@babel/plugin-proposal-unicode-property-regex" "^7.7.4" + "@babel/plugin-syntax-async-generators" "^7.7.4" + "@babel/plugin-syntax-dynamic-import" "^7.7.4" + "@babel/plugin-syntax-json-strings" "^7.7.4" + "@babel/plugin-syntax-object-rest-spread" "^7.7.4" + "@babel/plugin-syntax-optional-catch-binding" "^7.7.4" + "@babel/plugin-syntax-top-level-await" "^7.7.4" + "@babel/plugin-transform-arrow-functions" "^7.7.4" + "@babel/plugin-transform-async-to-generator" "^7.7.4" + "@babel/plugin-transform-block-scoped-functions" "^7.7.4" + "@babel/plugin-transform-block-scoping" "^7.7.4" + "@babel/plugin-transform-classes" "^7.7.4" + "@babel/plugin-transform-computed-properties" "^7.7.4" + "@babel/plugin-transform-destructuring" "^7.7.4" + "@babel/plugin-transform-dotall-regex" "^7.7.4" + "@babel/plugin-transform-duplicate-keys" "^7.7.4" + "@babel/plugin-transform-exponentiation-operator" "^7.7.4" + "@babel/plugin-transform-for-of" "^7.7.4" + "@babel/plugin-transform-function-name" "^7.7.4" + "@babel/plugin-transform-literals" "^7.7.4" + "@babel/plugin-transform-member-expression-literals" "^7.7.4" + "@babel/plugin-transform-modules-amd" "^7.7.5" + "@babel/plugin-transform-modules-commonjs" "^7.7.5" + "@babel/plugin-transform-modules-systemjs" "^7.7.4" + "@babel/plugin-transform-modules-umd" "^7.7.4" + "@babel/plugin-transform-named-capturing-groups-regex" "^7.7.4" + "@babel/plugin-transform-new-target" "^7.7.4" + "@babel/plugin-transform-object-super" "^7.7.4" + "@babel/plugin-transform-parameters" "^7.7.4" + "@babel/plugin-transform-property-literals" "^7.7.4" + "@babel/plugin-transform-regenerator" "^7.7.5" + "@babel/plugin-transform-reserved-words" "^7.7.4" + "@babel/plugin-transform-shorthand-properties" "^7.7.4" + "@babel/plugin-transform-spread" "^7.7.4" + "@babel/plugin-transform-sticky-regex" "^7.7.4" + "@babel/plugin-transform-template-literals" "^7.7.4" + "@babel/plugin-transform-typeof-symbol" "^7.7.4" + "@babel/plugin-transform-unicode-regex" "^7.7.4" + "@babel/types" "^7.7.4" + browserslist "^4.6.0" + core-js-compat "^3.4.7" + invariant "^2.2.2" + js-levenshtein "^1.1.3" + semver "^5.5.0" + +"@babel/template@^7.4.0", "@babel/template@^7.7.4": + version "7.7.4" + resolved "https://registry.npm.taobao.org/@babel/template/download/@babel/template-7.7.4.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Ftemplate%2Fdownload%2F%40babel%2Ftemplate-7.7.4.tgz#428a7d9eecffe27deac0a98e23bf8e3675d2a77b" + integrity sha1-Qop9nuz/4n3qwKmOI7+ONnXSp3s= + dependencies: + "@babel/code-frame" "^7.0.0" + "@babel/parser" "^7.7.4" + "@babel/types" "^7.7.4" + +"@babel/traverse@^7.4.3", "@babel/traverse@^7.7.4": + version "7.7.4" + resolved "https://registry.npm.taobao.org/@babel/traverse/download/@babel/traverse-7.7.4.tgz?cache=0&sync_timestamp=1574465744239&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Ftraverse%2Fdownload%2F%40babel%2Ftraverse-7.7.4.tgz#9c1e7c60fb679fe4fcfaa42500833333c2058558" + integrity sha1-nB58YPtnn+T8+qQlAIMzM8IFhVg= + dependencies: + "@babel/code-frame" "^7.5.5" + "@babel/generator" "^7.7.4" + "@babel/helper-function-name" "^7.7.4" + "@babel/helper-split-export-declaration" "^7.7.4" + "@babel/parser" "^7.7.4" + "@babel/types" "^7.7.4" + debug "^4.1.0" + globals "^11.1.0" + lodash "^4.17.13" + +"@babel/types@^7.4.0", "@babel/types@^7.7.4": + version "7.7.4" + resolved "https://registry.npm.taobao.org/@babel/types/download/@babel/types-7.7.4.tgz#516570d539e44ddf308c07569c258ff94fde9193" + integrity sha1-UWVw1TnkTd8wjAdWnCWP+U/ekZM= + dependencies: + esutils "^2.0.2" + lodash "^4.17.13" + to-fast-properties "^2.0.0" + +"@ngtools/webpack@8.3.21": + version "8.3.21" + resolved "https://registry.npm.taobao.org/@ngtools/webpack/download/@ngtools/webpack-8.3.21.tgz#d28f2b66a8aeced5260c42ae722192ec5d5e4e56" + integrity sha1-0o8rZqiuztUmDEKuciGS7F1eTlY= + dependencies: + "@angular-devkit/core" "8.3.21" + enhanced-resolve "4.1.0" + rxjs "6.4.0" + tree-kill "1.2.1" + webpack-sources "1.4.3" + +"@schematics/angular@8.3.21": + version "8.3.21" + resolved "https://registry.npm.taobao.org/@schematics/angular/download/@schematics/angular-8.3.21.tgz#4902e0b6e8be47006859009bf96a026e3d39dd27" + integrity sha1-SQLgtui+RwBoWQCb+WoCbj053Sc= + dependencies: + "@angular-devkit/core" "8.3.21" + "@angular-devkit/schematics" "8.3.21" + +"@schematics/update@0.803.21": + version "0.803.21" + resolved "https://registry.npm.taobao.org/@schematics/update/download/@schematics/update-0.803.21.tgz#572c955bb132348bca03a128491ae264b0068a0a" + integrity sha1-VyyVW7EyNIvKA6EoSRriZLAGigo= + dependencies: + "@angular-devkit/core" "8.3.21" + "@angular-devkit/schematics" "8.3.21" + "@yarnpkg/lockfile" "1.1.0" + ini "1.3.5" + pacote "9.5.5" + rxjs "6.4.0" + semver "6.3.0" + semver-intersect "1.4.0" + +"@types/events@*": + version "3.0.0" + resolved "https://registry.npm.taobao.org/@types/events/download/@types/events-3.0.0.tgz?cache=0&sync_timestamp=1572461527196&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Fevents%2Fdownload%2F%40types%2Fevents-3.0.0.tgz#2862f3f58a9a7f7c3e78d79f130dd4d71c25c2a7" + integrity sha1-KGLz9Yqaf3w+eNefEw3U1xwlwqc= + +"@types/glob@^7.1.1": + version "7.1.1" + resolved "https://registry.npm.taobao.org/@types/glob/download/@types/glob-7.1.1.tgz#aa59a1c6e3fbc421e07ccd31a944c30eba521575" + integrity sha1-qlmhxuP7xCHgfM0xqUTDDrpSFXU= + dependencies: + "@types/events" "*" + "@types/minimatch" "*" + "@types/node" "*" + +"@types/jasmine@*": + version "3.5.0" + resolved "https://registry.npm.taobao.org/@types/jasmine/download/@types/jasmine-3.5.0.tgz#2ad2006c8a937d20df20a8fee86071d0f730ef99" + integrity sha1-KtIAbIqTfSDfIKj+6GBx0Pcw75k= + +"@types/jasmine@~3.3.8": + version "3.3.16" + resolved "https://registry.npm.taobao.org/@types/jasmine/download/@types/jasmine-3.3.16.tgz#7c84074f5d7f84da9a14f816ccfb9aeb4da13f27" + integrity sha1-fIQHT11/hNqaFPgWzPua602hPyc= + +"@types/jasminewd2@~2.0.3": + version "2.0.8" + resolved "https://registry.npm.taobao.org/@types/jasminewd2/download/@types/jasminewd2-2.0.8.tgz#67afe5098d5ef2386073a7b7384b69a840dfe93b" + integrity sha1-Z6/lCY1e8jhgc6e3OEtpqEDf6Ts= + dependencies: + "@types/jasmine" "*" + +"@types/minimatch@*": + version "3.0.3" + resolved "https://registry.npm.taobao.org/@types/minimatch/download/@types/minimatch-3.0.3.tgz?cache=0&sync_timestamp=1572464707542&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Fminimatch%2Fdownload%2F%40types%2Fminimatch-3.0.3.tgz#3dca0e3f33b200fc7d1139c0cd96c1268cadfd9d" + integrity sha1-PcoOPzOyAPx9ETnAzZbBJoyt/Z0= + +"@types/node@*": + version "13.1.4" + resolved "https://registry.npm.taobao.org/@types/node/download/@types/node-13.1.4.tgz#4cfd90175a200ee9b02bd6b1cd19bc349741607e" + integrity sha1-TP2QF1ogDumwK9axzRm8NJdBYH4= + +"@types/node@~8.9.4": + version "8.9.5" + resolved "https://registry.npm.taobao.org/@types/node/download/@types/node-8.9.5.tgz#162b864bc70be077e6db212b322754917929e976" + integrity sha1-FiuGS8cL4Hfm2yErMidUkXkp6XY= + +"@types/q@^0.0.32": + version "0.0.32" + resolved "https://registry.npm.taobao.org/@types/q/download/@types/q-0.0.32.tgz#bd284e57c84f1325da702babfc82a5328190c0c5" + integrity sha1-vShOV8hPEyXacCur/IKlMoGQwMU= + +"@types/selenium-webdriver@^3.0.0": + version "3.0.16" + resolved "https://registry.npm.taobao.org/@types/selenium-webdriver/download/@types/selenium-webdriver-3.0.16.tgz#50a4755f8e33edacd9c406729e9b930d2451902a" + integrity sha1-UKR1X44z7azZxAZynpuTDSRRkCo= + +"@types/source-list-map@*": + version "0.1.2" + resolved "https://registry.npm.taobao.org/@types/source-list-map/download/@types/source-list-map-0.1.2.tgz#0078836063ffaf17412349bba364087e0ac02ec9" + integrity sha1-AHiDYGP/rxdBI0m7o2QIfgrALsk= + +"@types/webpack-sources@^0.1.5": + version "0.1.5" + resolved "https://registry.npm.taobao.org/@types/webpack-sources/download/@types/webpack-sources-0.1.5.tgz#be47c10f783d3d6efe1471ff7f042611bd464a92" + integrity sha1-vkfBD3g9PW7+FHH/fwQmEb1GSpI= + dependencies: + "@types/node" "*" + "@types/source-list-map" "*" + source-map "^0.6.1" + +"@webassemblyjs/ast@1.8.5": + version "1.8.5" + resolved "https://registry.npm.taobao.org/@webassemblyjs/ast/download/@webassemblyjs/ast-1.8.5.tgz#51b1c5fe6576a34953bf4b253df9f0d490d9e359" + integrity sha1-UbHF/mV2o0lTv0slPfnw1JDZ41k= + dependencies: + "@webassemblyjs/helper-module-context" "1.8.5" + "@webassemblyjs/helper-wasm-bytecode" "1.8.5" + "@webassemblyjs/wast-parser" "1.8.5" + +"@webassemblyjs/floating-point-hex-parser@1.8.5": + version "1.8.5" + resolved "https://registry.npm.taobao.org/@webassemblyjs/floating-point-hex-parser/download/@webassemblyjs/floating-point-hex-parser-1.8.5.tgz#1ba926a2923613edce496fd5b02e8ce8a5f49721" + integrity sha1-G6kmopI2E+3OSW/VsC6M6KX0lyE= + +"@webassemblyjs/helper-api-error@1.8.5": + version "1.8.5" + resolved "https://registry.npm.taobao.org/@webassemblyjs/helper-api-error/download/@webassemblyjs/helper-api-error-1.8.5.tgz#c49dad22f645227c5edb610bdb9697f1aab721f7" + integrity sha1-xJ2tIvZFInxe22EL25aX8aq3Ifc= + +"@webassemblyjs/helper-buffer@1.8.5": + version "1.8.5" + resolved "https://registry.npm.taobao.org/@webassemblyjs/helper-buffer/download/@webassemblyjs/helper-buffer-1.8.5.tgz#fea93e429863dd5e4338555f42292385a653f204" + integrity sha1-/qk+Qphj3V5DOFVfQikjhaZT8gQ= + +"@webassemblyjs/helper-code-frame@1.8.5": + version "1.8.5" + resolved "https://registry.npm.taobao.org/@webassemblyjs/helper-code-frame/download/@webassemblyjs/helper-code-frame-1.8.5.tgz#9a740ff48e3faa3022b1dff54423df9aa293c25e" + integrity sha1-mnQP9I4/qjAisd/1RCPfmqKTwl4= + dependencies: + "@webassemblyjs/wast-printer" "1.8.5" + +"@webassemblyjs/helper-fsm@1.8.5": + version "1.8.5" + resolved "https://registry.npm.taobao.org/@webassemblyjs/helper-fsm/download/@webassemblyjs/helper-fsm-1.8.5.tgz#ba0b7d3b3f7e4733da6059c9332275d860702452" + integrity sha1-ugt9Oz9+RzPaYFnJMyJ12GBwJFI= + +"@webassemblyjs/helper-module-context@1.8.5": + version "1.8.5" + resolved "https://registry.npm.taobao.org/@webassemblyjs/helper-module-context/download/@webassemblyjs/helper-module-context-1.8.5.tgz#def4b9927b0101dc8cbbd8d1edb5b7b9c82eb245" + integrity sha1-3vS5knsBAdyMu9jR7bW3ucguskU= + dependencies: + "@webassemblyjs/ast" "1.8.5" + mamacro "^0.0.3" + +"@webassemblyjs/helper-wasm-bytecode@1.8.5": + version "1.8.5" + resolved "https://registry.npm.taobao.org/@webassemblyjs/helper-wasm-bytecode/download/@webassemblyjs/helper-wasm-bytecode-1.8.5.tgz#537a750eddf5c1e932f3744206551c91c1b93e61" + integrity sha1-U3p1Dt31weky83RCBlUckcG5PmE= + +"@webassemblyjs/helper-wasm-section@1.8.5": + version "1.8.5" + resolved "https://registry.npm.taobao.org/@webassemblyjs/helper-wasm-section/download/@webassemblyjs/helper-wasm-section-1.8.5.tgz#74ca6a6bcbe19e50a3b6b462847e69503e6bfcbf" + integrity sha1-dMpqa8vhnlCjtrRihH5pUD5r/L8= + dependencies: + "@webassemblyjs/ast" "1.8.5" + "@webassemblyjs/helper-buffer" "1.8.5" + "@webassemblyjs/helper-wasm-bytecode" "1.8.5" + "@webassemblyjs/wasm-gen" "1.8.5" + +"@webassemblyjs/ieee754@1.8.5": + version "1.8.5" + resolved "https://registry.npm.taobao.org/@webassemblyjs/ieee754/download/@webassemblyjs/ieee754-1.8.5.tgz#712329dbef240f36bf57bd2f7b8fb9bf4154421e" + integrity sha1-cSMp2+8kDza/V70ve4+5v0FUQh4= + dependencies: + "@xtuc/ieee754" "^1.2.0" + +"@webassemblyjs/leb128@1.8.5": + version "1.8.5" + resolved "https://registry.npm.taobao.org/@webassemblyjs/leb128/download/@webassemblyjs/leb128-1.8.5.tgz#044edeb34ea679f3e04cd4fd9824d5e35767ae10" + integrity sha1-BE7es06mefPgTNT9mCTV41dnrhA= + dependencies: + "@xtuc/long" "4.2.2" + +"@webassemblyjs/utf8@1.8.5": + version "1.8.5" + resolved "https://registry.npm.taobao.org/@webassemblyjs/utf8/download/@webassemblyjs/utf8-1.8.5.tgz#a8bf3b5d8ffe986c7c1e373ccbdc2a0915f0cedc" + integrity sha1-qL87XY/+mGx8Hjc8y9wqCRXwztw= + +"@webassemblyjs/wasm-edit@1.8.5": + version "1.8.5" + resolved "https://registry.npm.taobao.org/@webassemblyjs/wasm-edit/download/@webassemblyjs/wasm-edit-1.8.5.tgz#962da12aa5acc1c131c81c4232991c82ce56e01a" + integrity sha1-li2hKqWswcExyBxCMpkcgs5W4Bo= + dependencies: + "@webassemblyjs/ast" "1.8.5" + "@webassemblyjs/helper-buffer" "1.8.5" + "@webassemblyjs/helper-wasm-bytecode" "1.8.5" + "@webassemblyjs/helper-wasm-section" "1.8.5" + "@webassemblyjs/wasm-gen" "1.8.5" + "@webassemblyjs/wasm-opt" "1.8.5" + "@webassemblyjs/wasm-parser" "1.8.5" + "@webassemblyjs/wast-printer" "1.8.5" + +"@webassemblyjs/wasm-gen@1.8.5": + version "1.8.5" + resolved "https://registry.npm.taobao.org/@webassemblyjs/wasm-gen/download/@webassemblyjs/wasm-gen-1.8.5.tgz#54840766c2c1002eb64ed1abe720aded714f98bc" + integrity sha1-VIQHZsLBAC62TtGr5yCt7XFPmLw= + dependencies: + "@webassemblyjs/ast" "1.8.5" + "@webassemblyjs/helper-wasm-bytecode" "1.8.5" + "@webassemblyjs/ieee754" "1.8.5" + "@webassemblyjs/leb128" "1.8.5" + "@webassemblyjs/utf8" "1.8.5" + +"@webassemblyjs/wasm-opt@1.8.5": + version "1.8.5" + resolved "https://registry.npm.taobao.org/@webassemblyjs/wasm-opt/download/@webassemblyjs/wasm-opt-1.8.5.tgz#b24d9f6ba50394af1349f510afa8ffcb8a63d264" + integrity sha1-sk2fa6UDlK8TSfUQr6j/y4pj0mQ= + dependencies: + "@webassemblyjs/ast" "1.8.5" + "@webassemblyjs/helper-buffer" "1.8.5" + "@webassemblyjs/wasm-gen" "1.8.5" + "@webassemblyjs/wasm-parser" "1.8.5" + +"@webassemblyjs/wasm-parser@1.8.5": + version "1.8.5" + resolved "https://registry.npm.taobao.org/@webassemblyjs/wasm-parser/download/@webassemblyjs/wasm-parser-1.8.5.tgz#21576f0ec88b91427357b8536383668ef7c66b8d" + integrity sha1-IVdvDsiLkUJzV7hTY4NmjvfGa40= + dependencies: + "@webassemblyjs/ast" "1.8.5" + "@webassemblyjs/helper-api-error" "1.8.5" + "@webassemblyjs/helper-wasm-bytecode" "1.8.5" + "@webassemblyjs/ieee754" "1.8.5" + "@webassemblyjs/leb128" "1.8.5" + "@webassemblyjs/utf8" "1.8.5" + +"@webassemblyjs/wast-parser@1.8.5": + version "1.8.5" + resolved "https://registry.npm.taobao.org/@webassemblyjs/wast-parser/download/@webassemblyjs/wast-parser-1.8.5.tgz#e10eecd542d0e7bd394f6827c49f3df6d4eefb8c" + integrity sha1-4Q7s1ULQ5705T2gnxJ899tTu+4w= + dependencies: + "@webassemblyjs/ast" "1.8.5" + "@webassemblyjs/floating-point-hex-parser" "1.8.5" + "@webassemblyjs/helper-api-error" "1.8.5" + "@webassemblyjs/helper-code-frame" "1.8.5" + "@webassemblyjs/helper-fsm" "1.8.5" + "@xtuc/long" "4.2.2" + +"@webassemblyjs/wast-printer@1.8.5": + version "1.8.5" + resolved "https://registry.npm.taobao.org/@webassemblyjs/wast-printer/download/@webassemblyjs/wast-printer-1.8.5.tgz#114bbc481fd10ca0e23b3560fa812748b0bae5bc" + integrity sha1-EUu8SB/RDKDiOzVg+oEnSLC65bw= + dependencies: + "@webassemblyjs/ast" "1.8.5" + "@webassemblyjs/wast-parser" "1.8.5" + "@xtuc/long" "4.2.2" + +"@xtuc/ieee754@^1.2.0": + version "1.2.0" + resolved "https://registry.npm.taobao.org/@xtuc/ieee754/download/@xtuc/ieee754-1.2.0.tgz#eef014a3145ae477a1cbc00cd1e552336dceb790" + integrity sha1-7vAUoxRa5Hehy8AM0eVSM23Ot5A= + +"@xtuc/long@4.2.2": + version "4.2.2" + resolved "https://registry.npm.taobao.org/@xtuc/long/download/@xtuc/long-4.2.2.tgz#d291c6a4e97989b5c61d9acf396ae4fe133a718d" + integrity sha1-0pHGpOl5ibXGHZrPOWrk/hM6cY0= + +"@yarnpkg/lockfile@1.1.0": + version "1.1.0" + resolved "https://registry.npm.taobao.org/@yarnpkg/lockfile/download/@yarnpkg/lockfile-1.1.0.tgz#e77a97fbd345b76d83245edcd17d393b1b41fb31" + integrity sha1-53qX+9NFt22DJF7c0X05OxtB+zE= + +JSONStream@^1.3.4: + version "1.3.5" + resolved "https://registry.npm.taobao.org/JSONStream/download/JSONStream-1.3.5.tgz#3208c1f08d3a4d99261ab64f92302bc15e111ca0" + integrity sha1-MgjB8I06TZkmGrZPkjArwV4RHKA= + dependencies: + jsonparse "^1.2.0" + through ">=2.2.7 <3" + +abbrev@1: + version "1.1.1" + resolved "https://registry.npm.taobao.org/abbrev/download/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" + integrity sha1-+PLIh60Qv2f2NPAFtph/7TF5qsg= + +accepts@~1.3.4, accepts@~1.3.5, accepts@~1.3.7: + version "1.3.7" + resolved "https://registry.npm.taobao.org/accepts/download/accepts-1.3.7.tgz#531bc726517a3b2b41f850021c6cc15eaab507cd" + integrity sha1-UxvHJlF6OytB+FACHGzBXqq1B80= + dependencies: + mime-types "~2.1.24" + negotiator "0.6.2" + +acorn@^6.2.1: + version "6.4.0" + resolved "https://registry.npm.taobao.org/acorn/download/acorn-6.4.0.tgz#b659d2ffbafa24baf5db1cdbb2c94a983ecd2784" + integrity sha1-tlnS/7r6JLr12xzbsslKmD7NJ4Q= + +adm-zip@^0.4.9: + version "0.4.13" + resolved "https://registry.npm.taobao.org/adm-zip/download/adm-zip-0.4.13.tgz#597e2f8cc3672151e1307d3e95cddbc75672314a" + integrity sha1-WX4vjMNnIVHhMH0+lc3bx1ZyMUo= + +after@0.8.2: + version "0.8.2" + resolved "https://registry.npm.taobao.org/after/download/after-0.8.2.tgz#fedb394f9f0e02aa9768e702bda23b505fae7e1f" + integrity sha1-/ts5T58OAqqXaOcCvaI7UF+ufh8= + +agent-base@4, agent-base@^4.3.0: + version "4.3.0" + resolved "https://registry.npm.taobao.org/agent-base/download/agent-base-4.3.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fagent-base%2Fdownload%2Fagent-base-4.3.0.tgz#8165f01c436009bccad0b1d122f05ed770efc6ee" + integrity sha1-gWXwHENgCbzK0LHRIvBe13Dvxu4= + dependencies: + es6-promisify "^5.0.0" + +agent-base@~4.2.1: + version "4.2.1" + resolved "https://registry.npm.taobao.org/agent-base/download/agent-base-4.2.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fagent-base%2Fdownload%2Fagent-base-4.2.1.tgz#d89e5999f797875674c07d87f260fc41e83e8ca9" + integrity sha1-2J5ZmfeXh1Z0wH2H8mD8Qeg+jKk= + dependencies: + es6-promisify "^5.0.0" + +agentkeepalive@^3.4.1: + version "3.5.2" + resolved "https://registry.npm.taobao.org/agentkeepalive/download/agentkeepalive-3.5.2.tgz?cache=0&sync_timestamp=1570869777482&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fagentkeepalive%2Fdownload%2Fagentkeepalive-3.5.2.tgz#a113924dd3fa24a0bc3b78108c450c2abee00f67" + integrity sha1-oROSTdP6JKC8O3gQjEUMKr7gD2c= + dependencies: + humanize-ms "^1.2.1" + +ajv-errors@^1.0.0: + version "1.0.1" + resolved "https://registry.npm.taobao.org/ajv-errors/download/ajv-errors-1.0.1.tgz#f35986aceb91afadec4102fbd85014950cefa64d" + integrity sha1-81mGrOuRr63sQQL72FAUlQzvpk0= + +ajv-keywords@^3.1.0, ajv-keywords@^3.4.1: + version "3.4.1" + resolved "https://registry.npm.taobao.org/ajv-keywords/download/ajv-keywords-3.4.1.tgz#ef916e271c64ac12171fd8384eaae6b2345854da" + integrity sha1-75FuJxxkrBIXH9g4TqrmsjRYVNo= + +ajv@6.10.2, ajv@^6.1.0, ajv@^6.10.2, ajv@^6.5.5: + version "6.10.2" + resolved "https://registry.npm.taobao.org/ajv/download/ajv-6.10.2.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fajv%2Fdownload%2Fajv-6.10.2.tgz#d3cea04d6b017b2894ad69040fec8b623eb4bd52" + integrity sha1-086gTWsBeyiUrWkED+yLYj60vVI= + dependencies: + fast-deep-equal "^2.0.1" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.4.1" + uri-js "^4.2.2" + +ajv@^5.0.0: + version "5.5.2" + resolved "https://registry.npm.taobao.org/ajv/download/ajv-5.5.2.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fajv%2Fdownload%2Fajv-5.5.2.tgz#73b5eeca3fab653e3d3f9422b341ad42205dc965" + integrity sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU= + dependencies: + co "^4.6.0" + fast-deep-equal "^1.0.0" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.3.0" + +amdefine@>=0.0.4: + version "1.0.1" + resolved "https://registry.npm.taobao.org/amdefine/download/amdefine-1.0.1.tgz#4a5282ac164729e93619bcfd3ad151f817ce91f5" + integrity sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU= + +ansi-colors@4.1.1: + version "4.1.1" + resolved "https://registry.npm.taobao.org/ansi-colors/download/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348" + integrity sha1-y7muJWv3UK8eqzRPIpqif+lLo0g= + +ansi-colors@^3.0.0: + version "3.2.4" + resolved "https://registry.npm.taobao.org/ansi-colors/download/ansi-colors-3.2.4.tgz#e3a3da4bfbae6c86a9c285625de124a234026fbf" + integrity sha1-46PaS/uubIapwoViXeEkojQCb78= + +ansi-escapes@^4.2.1: + version "4.3.0" + resolved "https://registry.npm.taobao.org/ansi-escapes/download/ansi-escapes-4.3.0.tgz#a4ce2b33d6b214b7950d8595c212f12ac9cc569d" + integrity sha1-pM4rM9ayFLeVDYWVwhLxKsnMVp0= + dependencies: + type-fest "^0.8.1" + +ansi-html@0.0.7: + version "0.0.7" + resolved "https://registry.npm.taobao.org/ansi-html/download/ansi-html-0.0.7.tgz#813584021962a9e9e6fd039f940d12f56ca7859e" + integrity sha1-gTWEAhliqenm/QOflA0S9WynhZ4= + +ansi-regex@^2.0.0: + version "2.1.1" + resolved "https://registry.npm.taobao.org/ansi-regex/download/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" + integrity sha1-w7M6te42DYbg5ijwRorn7yfWVN8= + +ansi-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.npm.taobao.org/ansi-regex/download/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" + integrity sha1-7QMXwyIGT3lGbAKWa922Bas32Zg= + +ansi-regex@^4.1.0: + version "4.1.0" + resolved "https://registry.npm.taobao.org/ansi-regex/download/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997" + integrity sha1-i5+PCM8ay4Q3Vqg5yox+MWjFGZc= + +ansi-regex@^5.0.0: + version "5.0.0" + resolved "https://registry.npm.taobao.org/ansi-regex/download/ansi-regex-5.0.0.tgz#388539f55179bf39339c81af30a654d69f87cb75" + integrity sha1-OIU59VF5vzkznIGvMKZU1p+Hy3U= + +ansi-styles@^2.2.1: + version "2.2.1" + resolved "https://registry.npm.taobao.org/ansi-styles/download/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" + integrity sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4= + +ansi-styles@^3.2.1: + version "3.2.1" + resolved "https://registry.npm.taobao.org/ansi-styles/download/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" + integrity sha1-QfuyAkPlCxK+DwS43tvwdSDOhB0= + dependencies: + color-convert "^1.9.0" + +anymatch@^2.0.0: + version "2.0.0" + resolved "https://registry.npm.taobao.org/anymatch/download/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb" + integrity sha1-vLJLTzeTTZqnrBe0ra+J58du8us= + dependencies: + micromatch "^3.1.4" + normalize-path "^2.1.1" + +anymatch@~3.1.1: + version "3.1.1" + resolved "https://registry.npm.taobao.org/anymatch/download/anymatch-3.1.1.tgz#c55ecf02185e2469259399310c173ce31233b142" + integrity sha1-xV7PAhheJGklk5kxDBc84xIzsUI= + dependencies: + normalize-path "^3.0.0" + picomatch "^2.0.4" + +app-root-path@^2.2.1: + version "2.2.1" + resolved "https://registry.npm.taobao.org/app-root-path/download/app-root-path-2.2.1.tgz#d0df4a682ee408273583d43f6f79e9892624bc9a" + integrity sha1-0N9KaC7kCCc1g9Q/b3npiSYkvJo= + +append-transform@^1.0.0: + version "1.0.0" + resolved "https://registry.npm.taobao.org/append-transform/download/append-transform-1.0.0.tgz?cache=0&sync_timestamp=1568135538355&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fappend-transform%2Fdownload%2Fappend-transform-1.0.0.tgz#046a52ae582a228bd72f58acfbe2967c678759ab" + integrity sha1-BGpSrlgqIovXL1is++KWfGeHWas= + dependencies: + default-require-extensions "^2.0.0" + +aproba@^1.0.3, aproba@^1.1.1: + version "1.2.0" + resolved "https://registry.npm.taobao.org/aproba/download/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" + integrity sha1-aALmJk79GMeQobDVF/DyYnvyyUo= + +are-we-there-yet@~1.1.2: + version "1.1.5" + resolved "https://registry.npm.taobao.org/are-we-there-yet/download/are-we-there-yet-1.1.5.tgz#4b35c2944f062a8bfcda66410760350fe9ddfc21" + integrity sha1-SzXClE8GKov82mZBB2A1D+nd/CE= + dependencies: + delegates "^1.0.0" + readable-stream "^2.0.6" + +argparse@^1.0.7: + version "1.0.10" + resolved "https://registry.npm.taobao.org/argparse/download/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" + integrity sha1-vNZ5HqWuCXJeF+WtmIE0zUCz2RE= + dependencies: + sprintf-js "~1.0.2" + +aria-query@^3.0.0: + version "3.0.0" + resolved "https://registry.npm.taobao.org/aria-query/download/aria-query-3.0.0.tgz#65b3fcc1ca1155a8c9ae64d6eee297f15d5133cc" + integrity sha1-ZbP8wcoRVajJrmTW7uKX8V1RM8w= + dependencies: + ast-types-flow "0.0.7" + commander "^2.11.0" + +arr-diff@^4.0.0: + version "4.0.0" + resolved "https://registry.npm.taobao.org/arr-diff/download/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520" + integrity sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA= + +arr-flatten@^1.1.0: + version "1.1.0" + resolved "https://registry.npm.taobao.org/arr-flatten/download/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1" + integrity sha1-NgSLv/TntH4TZkQxbJlmnqWukfE= + +arr-union@^3.1.0: + version "3.1.0" + resolved "https://registry.npm.taobao.org/arr-union/download/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4" + integrity sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ= + +array-flatten@1.1.1: + version "1.1.1" + resolved "https://registry.npm.taobao.org/array-flatten/download/array-flatten-1.1.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Farray-flatten%2Fdownload%2Farray-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" + integrity sha1-ml9pkFGx5wczKPKgCJaLZOopVdI= + +array-flatten@^2.1.0: + version "2.1.2" + resolved "https://registry.npm.taobao.org/array-flatten/download/array-flatten-2.1.2.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Farray-flatten%2Fdownload%2Farray-flatten-2.1.2.tgz#24ef80a28c1a893617e2149b0c6d0d788293b099" + integrity sha1-JO+AoowaiTYX4hSbDG0NeIKTsJk= + +array-union@^1.0.1: + version "1.0.2" + resolved "https://registry.npm.taobao.org/array-union/download/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39" + integrity sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk= + dependencies: + array-uniq "^1.0.1" + +array-uniq@^1.0.1: + version "1.0.3" + resolved "https://registry.npm.taobao.org/array-uniq/download/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6" + integrity sha1-r2rId6Jcx/dOBYiUdThY39sk/bY= + +array-unique@^0.3.2: + version "0.3.2" + resolved "https://registry.npm.taobao.org/array-unique/download/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" + integrity sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg= + +arraybuffer.slice@~0.0.7: + version "0.0.7" + resolved "https://registry.npm.taobao.org/arraybuffer.slice/download/arraybuffer.slice-0.0.7.tgz#3bbc4275dd584cc1b10809b89d4e8b63a69e7675" + integrity sha1-O7xCdd1YTMGxCAm4nU6LY6aednU= + +arrify@^1.0.0: + version "1.0.1" + resolved "https://registry.npm.taobao.org/arrify/download/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" + integrity sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0= + +asap@^2.0.0, asap@~2.0.3: + version "2.0.6" + resolved "https://registry.npm.taobao.org/asap/download/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" + integrity sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY= + +asn1.js@^4.0.0: + version "4.10.1" + resolved "https://registry.npm.taobao.org/asn1.js/download/asn1.js-4.10.1.tgz#b9c2bf5805f1e64aadeed6df3a2bfafb5a73f5a0" + integrity sha1-ucK/WAXx5kqt7tbfOiv6+1pz9aA= + dependencies: + bn.js "^4.0.0" + inherits "^2.0.1" + minimalistic-assert "^1.0.0" + +asn1@~0.2.3: + version "0.2.4" + resolved "https://registry.npm.taobao.org/asn1/download/asn1-0.2.4.tgz#8d2475dfab553bb33e77b54e59e880bb8ce23136" + integrity sha1-jSR136tVO7M+d7VOWeiAu4ziMTY= + dependencies: + safer-buffer "~2.1.0" + +assert-plus@1.0.0, assert-plus@^1.0.0: + version "1.0.0" + resolved "https://registry.npm.taobao.org/assert-plus/download/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" + integrity sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU= + +assert@^1.1.1: + version "1.5.0" + resolved "https://registry.npm.taobao.org/assert/download/assert-1.5.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fassert%2Fdownload%2Fassert-1.5.0.tgz#55c109aaf6e0aefdb3dc4b71240c70bf574b18eb" + integrity sha1-VcEJqvbgrv2z3EtxJAxwv1dLGOs= + dependencies: + object-assign "^4.1.1" + util "0.10.3" + +assign-symbols@^1.0.0: + version "1.0.0" + resolved "https://registry.npm.taobao.org/assign-symbols/download/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" + integrity sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c= + +ast-types-flow@0.0.7: + version "0.0.7" + resolved "https://registry.npm.taobao.org/ast-types-flow/download/ast-types-flow-0.0.7.tgz#f70b735c6bca1a5c9c22d982c3e39e7feba3bdad" + integrity sha1-9wtzXGvKGlycItmCw+Oef+ujva0= + +async-each@^1.0.1: + version "1.0.3" + resolved "https://registry.npm.taobao.org/async-each/download/async-each-1.0.3.tgz#b727dbf87d7651602f06f4d4ac387f47d91b0cbf" + integrity sha1-tyfb+H12UWAvBvTUrDh/R9kbDL8= + +async-limiter@~1.0.0: + version "1.0.1" + resolved "https://registry.npm.taobao.org/async-limiter/download/async-limiter-1.0.1.tgz?cache=0&sync_timestamp=1574271635932&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fasync-limiter%2Fdownload%2Fasync-limiter-1.0.1.tgz#dd379e94f0db8310b08291f9d64c3209766617fd" + integrity sha1-3TeelPDbgxCwgpH51kwyCXZmF/0= + +async@^2.5.0, async@^2.6.2: + version "2.6.3" + resolved "https://registry.npm.taobao.org/async/download/async-2.6.3.tgz#d72625e2344a3656e3a3ad4fa749fa83299d82ff" + integrity sha1-1yYl4jRKNlbjo61Pp0n6gymdgv8= + dependencies: + lodash "^4.17.14" + +asynckit@^0.4.0: + version "0.4.0" + resolved "https://registry.npm.taobao.org/asynckit/download/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" + integrity sha1-x57Zf380y48robyXkLzDZkdLS3k= + +atob@^2.1.2: + version "2.1.2" + resolved "https://registry.npm.taobao.org/atob/download/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" + integrity sha1-bZUX654DDSQ2ZmZR6GvZ9vE1M8k= + +autoprefixer@9.6.1: + version "9.6.1" + resolved "https://registry.npm.taobao.org/autoprefixer/download/autoprefixer-9.6.1.tgz#51967a02d2d2300bb01866c1611ec8348d355a47" + integrity sha1-UZZ6AtLSMAuwGGbBYR7INI01Wkc= + dependencies: + browserslist "^4.6.3" + caniuse-lite "^1.0.30000980" + chalk "^2.4.2" + normalize-range "^0.1.2" + num2fraction "^1.2.2" + postcss "^7.0.17" + postcss-value-parser "^4.0.0" + +aws-sign2@~0.7.0: + version "0.7.0" + resolved "https://registry.npm.taobao.org/aws-sign2/download/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" + integrity sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg= + +aws4@^1.8.0: + version "1.9.0" + resolved "https://registry.npm.taobao.org/aws4/download/aws4-1.9.0.tgz#24390e6ad61386b0a747265754d2a17219de862c" + integrity sha1-JDkOatYThrCnRyZXVNKhchnehiw= + +axobject-query@2.0.2: + version "2.0.2" + resolved "https://registry.npm.taobao.org/axobject-query/download/axobject-query-2.0.2.tgz#ea187abe5b9002b377f925d8bf7d1c561adf38f9" + integrity sha1-6hh6vluQArN3+SXYv30cVhrfOPk= + dependencies: + ast-types-flow "0.0.7" + +babel-code-frame@^6.22.0, babel-code-frame@^6.26.0: + version "6.26.0" + resolved "https://registry.npm.taobao.org/babel-code-frame/download/babel-code-frame-6.26.0.tgz#63fd43f7dc1e3bb7ce35947db8fe369a3f58c74b" + integrity sha1-Y/1D99weO7fONZR9uP42mj9Yx0s= + dependencies: + chalk "^1.1.3" + esutils "^2.0.2" + js-tokens "^3.0.2" + +babel-generator@^6.18.0: + version "6.26.1" + resolved "https://registry.npm.taobao.org/babel-generator/download/babel-generator-6.26.1.tgz#1844408d3b8f0d35a404ea7ac180f087a601bd90" + integrity sha1-GERAjTuPDTWkBOp6wYDwh6YBvZA= + dependencies: + babel-messages "^6.23.0" + babel-runtime "^6.26.0" + babel-types "^6.26.0" + detect-indent "^4.0.0" + jsesc "^1.3.0" + lodash "^4.17.4" + source-map "^0.5.7" + trim-right "^1.0.1" + +babel-messages@^6.23.0: + version "6.23.0" + resolved "https://registry.npm.taobao.org/babel-messages/download/babel-messages-6.23.0.tgz#f3cdf4703858035b2a2951c6ec5edf6c62f2630e" + integrity sha1-8830cDhYA1sqKVHG7F7fbGLyYw4= + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-dynamic-import-node@^2.3.0: + version "2.3.0" + resolved "https://registry.npm.taobao.org/babel-plugin-dynamic-import-node/download/babel-plugin-dynamic-import-node-2.3.0.tgz#f00f507bdaa3c3e3ff6e7e5e98d90a7acab96f7f" + integrity sha1-8A9Qe9qjw+P/bn5emNkKesq5b38= + dependencies: + object.assign "^4.1.0" + +babel-runtime@^6.22.0, babel-runtime@^6.26.0: + version "6.26.0" + resolved "https://registry.npm.taobao.org/babel-runtime/download/babel-runtime-6.26.0.tgz#965c7058668e82b55d7bfe04ff2337bc8b5647fe" + integrity sha1-llxwWGaOgrVde/4E/yM3vItWR/4= + dependencies: + core-js "^2.4.0" + regenerator-runtime "^0.11.0" + +babel-template@^6.16.0: + version "6.26.0" + resolved "https://registry.npm.taobao.org/babel-template/download/babel-template-6.26.0.tgz#de03e2d16396b069f46dd9fff8521fb1a0e35e02" + integrity sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI= + dependencies: + babel-runtime "^6.26.0" + babel-traverse "^6.26.0" + babel-types "^6.26.0" + babylon "^6.18.0" + lodash "^4.17.4" + +babel-traverse@^6.18.0, babel-traverse@^6.26.0: + version "6.26.0" + resolved "https://registry.npm.taobao.org/babel-traverse/download/babel-traverse-6.26.0.tgz#46a9cbd7edcc62c8e5c064e2d2d8d0f4035766ee" + integrity sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4= + dependencies: + babel-code-frame "^6.26.0" + babel-messages "^6.23.0" + babel-runtime "^6.26.0" + babel-types "^6.26.0" + babylon "^6.18.0" + debug "^2.6.8" + globals "^9.18.0" + invariant "^2.2.2" + lodash "^4.17.4" + +babel-types@^6.18.0, babel-types@^6.26.0: + version "6.26.0" + resolved "https://registry.npm.taobao.org/babel-types/download/babel-types-6.26.0.tgz#a3b073f94ab49eb6fa55cd65227a334380632497" + integrity sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc= + dependencies: + babel-runtime "^6.26.0" + esutils "^2.0.2" + lodash "^4.17.4" + to-fast-properties "^1.0.3" + +babylon@^6.18.0: + version "6.18.0" + resolved "https://registry.npm.taobao.org/babylon/download/babylon-6.18.0.tgz#af2f3b88fa6f5c1e4c634d1a0f8eac4f55b395e3" + integrity sha1-ry87iPpvXB5MY00aD46sT1WzleM= + +backo2@1.0.2: + version "1.0.2" + resolved "https://registry.npm.taobao.org/backo2/download/backo2-1.0.2.tgz#31ab1ac8b129363463e35b3ebb69f4dfcfba7947" + integrity sha1-MasayLEpNjRj41s+u2n038+6eUc= + +balanced-match@^1.0.0: + version "1.0.0" + resolved "https://registry.npm.taobao.org/balanced-match/download/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" + integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= + +base64-arraybuffer@0.1.5: + version "0.1.5" + resolved "https://registry.npm.taobao.org/base64-arraybuffer/download/base64-arraybuffer-0.1.5.tgz#73926771923b5a19747ad666aa5cd4bf9c6e9ce8" + integrity sha1-c5JncZI7Whl0etZmqlzUv5xunOg= + +base64-js@^1.0.2: + version "1.3.1" + resolved "https://registry.npm.taobao.org/base64-js/download/base64-js-1.3.1.tgz#58ece8cb75dd07e71ed08c736abc5fac4dbf8df1" + integrity sha1-WOzoy3XdB+ce0IxzarxfrE2/jfE= + +base64id@1.0.0: + version "1.0.0" + resolved "https://registry.npm.taobao.org/base64id/download/base64id-1.0.0.tgz#47688cb99bb6804f0e06d3e763b1c32e57d8e6b6" + integrity sha1-R2iMuZu2gE8OBtPnY7HDLlfY5rY= + +base@^0.11.1: + version "0.11.2" + resolved "https://registry.npm.taobao.org/base/download/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f" + integrity sha1-e95c7RRbbVUakNuH+DxVi060io8= + dependencies: + cache-base "^1.0.1" + class-utils "^0.3.5" + component-emitter "^1.2.1" + define-property "^1.0.0" + isobject "^3.0.1" + mixin-deep "^1.2.0" + pascalcase "^0.1.1" + +batch@0.6.1: + version "0.6.1" + resolved "https://registry.npm.taobao.org/batch/download/batch-0.6.1.tgz#dc34314f4e679318093fc760272525f94bf25c16" + integrity sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY= + +bcrypt-pbkdf@^1.0.0: + version "1.0.2" + resolved "https://registry.npm.taobao.org/bcrypt-pbkdf/download/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e" + integrity sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4= + dependencies: + tweetnacl "^0.14.3" + +better-assert@~1.0.0: + version "1.0.2" + resolved "https://registry.npm.taobao.org/better-assert/download/better-assert-1.0.2.tgz#40866b9e1b9e0b55b481894311e68faffaebc522" + integrity sha1-QIZrnhueC1W0gYlDEeaPr/rrxSI= + dependencies: + callsite "1.0.0" + +big.js@^5.2.2: + version "5.2.2" + resolved "https://registry.npm.taobao.org/big.js/download/big.js-5.2.2.tgz#65f0af382f578bcdc742bd9c281e9cb2d7768328" + integrity sha1-ZfCvOC9Xi83HQr2cKB6cstd2gyg= + +binary-extensions@^1.0.0: + version "1.13.1" + resolved "https://registry.npm.taobao.org/binary-extensions/download/binary-extensions-1.13.1.tgz#598afe54755b2868a5330d2aff9d4ebb53209b65" + integrity sha1-WYr+VHVbKGilMw0q/51Ou1Mgm2U= + +binary-extensions@^2.0.0: + version "2.0.0" + resolved "https://registry.npm.taobao.org/binary-extensions/download/binary-extensions-2.0.0.tgz#23c0df14f6a88077f5f986c0d167ec03c3d5537c" + integrity sha1-I8DfFPaogHf1+YbA0WfsA8PVU3w= + +bindings@^1.5.0: + version "1.5.0" + resolved "https://registry.npm.taobao.org/bindings/download/bindings-1.5.0.tgz#10353c9e945334bc0511a6d90b38fbc7c9c504df" + integrity sha1-EDU8npRTNLwFEabZCzj7x8nFBN8= + dependencies: + file-uri-to-path "1.0.0" + +blob@0.0.5: + version "0.0.5" + resolved "https://registry.npm.taobao.org/blob/download/blob-0.0.5.tgz#d680eeef25f8cd91ad533f5b01eed48e64caf683" + integrity sha1-1oDu7yX4zZGtUz9bAe7UjmTK9oM= + +blocking-proxy@^1.0.0: + version "1.0.1" + resolved "https://registry.npm.taobao.org/blocking-proxy/download/blocking-proxy-1.0.1.tgz#81d6fd1fe13a4c0d6957df7f91b75e98dac40cb2" + integrity sha1-gdb9H+E6TA1pV99/kbdemNrEDLI= + dependencies: + minimist "^1.2.0" + +bluebird@^3.3.0, bluebird@^3.5.1, bluebird@^3.5.3, bluebird@^3.5.5: + version "3.7.2" + resolved "https://registry.npm.taobao.org/bluebird/download/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f" + integrity sha1-nyKcFb4nJFT/qXOs4NvueaGww28= + +bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.1.1, bn.js@^4.4.0: + version "4.11.8" + resolved "https://registry.npm.taobao.org/bn.js/download/bn.js-4.11.8.tgz#2cde09eb5ee341f484746bb0309b3253b1b1442f" + integrity sha1-LN4J617jQfSEdGuwMJsyU7GxRC8= + +body-parser@1.19.0, body-parser@^1.16.1: + version "1.19.0" + resolved "https://registry.npm.taobao.org/body-parser/download/body-parser-1.19.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fbody-parser%2Fdownload%2Fbody-parser-1.19.0.tgz#96b2709e57c9c4e09a6fd66a8fd979844f69f08a" + integrity sha1-lrJwnlfJxOCab9Zqj9l5hE9p8Io= + dependencies: + bytes "3.1.0" + content-type "~1.0.4" + debug "2.6.9" + depd "~1.1.2" + http-errors "1.7.2" + iconv-lite "0.4.24" + on-finished "~2.3.0" + qs "6.7.0" + raw-body "2.4.0" + type-is "~1.6.17" + +bonjour@^3.5.0: + version "3.5.0" + resolved "https://registry.npm.taobao.org/bonjour/download/bonjour-3.5.0.tgz#8e890a183d8ee9a2393b3844c691a42bcf7bc9f5" + integrity sha1-jokKGD2O6aI5OzhExpGkK897yfU= + dependencies: + array-flatten "^2.1.0" + deep-equal "^1.0.1" + dns-equal "^1.0.0" + dns-txt "^2.0.2" + multicast-dns "^6.0.1" + multicast-dns-service-types "^1.1.0" + +brace-expansion@^1.1.7: + version "1.1.11" + resolved "https://registry.npm.taobao.org/brace-expansion/download/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" + integrity sha1-PH/L9SnYcibz0vUrlm/1Jx60Qd0= + dependencies: + balanced-match "^1.0.0" + concat-map "0.0.1" + +braces@^2.3.1, braces@^2.3.2: + version "2.3.2" + resolved "https://registry.npm.taobao.org/braces/download/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729" + integrity sha1-WXn9PxTNUxVl5fot8av/8d+u5yk= + dependencies: + arr-flatten "^1.1.0" + array-unique "^0.3.2" + extend-shallow "^2.0.1" + fill-range "^4.0.0" + isobject "^3.0.1" + repeat-element "^1.1.2" + snapdragon "^0.8.1" + snapdragon-node "^2.0.1" + split-string "^3.0.2" + to-regex "^3.0.1" + +braces@~3.0.2: + version "3.0.2" + resolved "https://registry.npm.taobao.org/braces/download/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" + integrity sha1-NFThpGLujVmeI23zNs2epPiv4Qc= + dependencies: + fill-range "^7.0.1" + +brorand@^1.0.1: + version "1.1.0" + resolved "https://registry.npm.taobao.org/brorand/download/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" + integrity sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8= + +browserify-aes@^1.0.0, browserify-aes@^1.0.4: + version "1.2.0" + resolved "https://registry.npm.taobao.org/browserify-aes/download/browserify-aes-1.2.0.tgz#326734642f403dabc3003209853bb70ad428ef48" + integrity sha1-Mmc0ZC9APavDADIJhTu3CtQo70g= + dependencies: + buffer-xor "^1.0.3" + cipher-base "^1.0.0" + create-hash "^1.1.0" + evp_bytestokey "^1.0.3" + inherits "^2.0.1" + safe-buffer "^5.0.1" + +browserify-cipher@^1.0.0: + version "1.0.1" + resolved "https://registry.npm.taobao.org/browserify-cipher/download/browserify-cipher-1.0.1.tgz#8d6474c1b870bfdabcd3bcfcc1934a10e94f15f0" + integrity sha1-jWR0wbhwv9q807z8wZNKEOlPFfA= + dependencies: + browserify-aes "^1.0.4" + browserify-des "^1.0.0" + evp_bytestokey "^1.0.0" + +browserify-des@^1.0.0: + version "1.0.2" + resolved "https://registry.npm.taobao.org/browserify-des/download/browserify-des-1.0.2.tgz#3af4f1f59839403572f1c66204375f7a7f703e9c" + integrity sha1-OvTx9Zg5QDVy8cZiBDdfen9wPpw= + dependencies: + cipher-base "^1.0.1" + des.js "^1.0.0" + inherits "^2.0.1" + safe-buffer "^5.1.2" + +browserify-rsa@^4.0.0: + version "4.0.1" + resolved "https://registry.npm.taobao.org/browserify-rsa/download/browserify-rsa-4.0.1.tgz#21e0abfaf6f2029cf2fafb133567a701d4135524" + integrity sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ= + dependencies: + bn.js "^4.1.0" + randombytes "^2.0.1" + +browserify-sign@^4.0.0: + version "4.0.4" + resolved "https://registry.npm.taobao.org/browserify-sign/download/browserify-sign-4.0.4.tgz#aa4eb68e5d7b658baa6bf6a57e630cbd7a93d298" + integrity sha1-qk62jl17ZYuqa/alfmMMvXqT0pg= + dependencies: + bn.js "^4.1.1" + browserify-rsa "^4.0.0" + create-hash "^1.1.0" + create-hmac "^1.1.2" + elliptic "^6.0.0" + inherits "^2.0.1" + parse-asn1 "^5.0.0" + +browserify-zlib@^0.2.0: + version "0.2.0" + resolved "https://registry.npm.taobao.org/browserify-zlib/download/browserify-zlib-0.2.0.tgz#2869459d9aa3be245fe8fe2ca1f46e2e7f54d73f" + integrity sha1-KGlFnZqjviRf6P4sofRuLn9U1z8= + dependencies: + pako "~1.0.5" + +browserslist@4.6.6: + version "4.6.6" + resolved "https://registry.npm.taobao.org/browserslist/download/browserslist-4.6.6.tgz?cache=0&sync_timestamp=1578024984944&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fbrowserslist%2Fdownload%2Fbrowserslist-4.6.6.tgz#6e4bf467cde520bc9dbdf3747dafa03531cec453" + integrity sha1-bkv0Z83lILydvfN0fa+gNTHOxFM= + dependencies: + caniuse-lite "^1.0.30000984" + electron-to-chromium "^1.3.191" + node-releases "^1.1.25" + +browserslist@^4.6.0, browserslist@^4.6.3, browserslist@^4.8.2: + version "4.8.3" + resolved "https://registry.npm.taobao.org/browserslist/download/browserslist-4.8.3.tgz?cache=0&sync_timestamp=1578024984944&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fbrowserslist%2Fdownload%2Fbrowserslist-4.8.3.tgz#65802fcd77177c878e015f0e3189f2c4f627ba44" + integrity sha1-ZYAvzXcXfIeOAV8OMYnyxPYnukQ= + dependencies: + caniuse-lite "^1.0.30001017" + electron-to-chromium "^1.3.322" + node-releases "^1.1.44" + +browserstack@^1.5.1: + version "1.5.3" + resolved "https://registry.npm.taobao.org/browserstack/download/browserstack-1.5.3.tgz#93ab48799a12ef99dbd074dd595410ddb196a7ac" + integrity sha1-k6tIeZoS75nb0HTdWVQQ3bGWp6w= + dependencies: + https-proxy-agent "^2.2.1" + +buffer-alloc-unsafe@^1.1.0: + version "1.1.0" + resolved "https://registry.npm.taobao.org/buffer-alloc-unsafe/download/buffer-alloc-unsafe-1.1.0.tgz#bd7dc26ae2972d0eda253be061dba992349c19f0" + integrity sha1-vX3CauKXLQ7aJTvgYdupkjScGfA= + +buffer-alloc@^1.2.0: + version "1.2.0" + resolved "https://registry.npm.taobao.org/buffer-alloc/download/buffer-alloc-1.2.0.tgz#890dd90d923a873e08e10e5fd51a57e5b7cce0ec" + integrity sha1-iQ3ZDZI6hz4I4Q5f1RpX5bfM4Ow= + dependencies: + buffer-alloc-unsafe "^1.1.0" + buffer-fill "^1.0.0" + +buffer-fill@^1.0.0: + version "1.0.0" + resolved "https://registry.npm.taobao.org/buffer-fill/download/buffer-fill-1.0.0.tgz#f8f78b76789888ef39f205cd637f68e702122b2c" + integrity sha1-+PeLdniYiO858gXNY39o5wISKyw= + +buffer-from@^1.0.0, buffer-from@^1.1.0: + version "1.1.1" + resolved "https://registry.npm.taobao.org/buffer-from/download/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" + integrity sha1-MnE7wCj3XAL9txDXx7zsHyxgcO8= + +buffer-indexof@^1.0.0: + version "1.1.1" + resolved "https://registry.npm.taobao.org/buffer-indexof/download/buffer-indexof-1.1.1.tgz#52fabcc6a606d1a00302802648ef68f639da268c" + integrity sha1-Uvq8xqYG0aADAoAmSO9o9jnaJow= + +buffer-xor@^1.0.3: + version "1.0.3" + resolved "https://registry.npm.taobao.org/buffer-xor/download/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9" + integrity sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk= + +buffer@^4.3.0: + version "4.9.2" + resolved "https://registry.npm.taobao.org/buffer/download/buffer-4.9.2.tgz#230ead344002988644841ab0244af8c44bbe3ef8" + integrity sha1-Iw6tNEACmIZEhBqwJEr4xEu+Pvg= + dependencies: + base64-js "^1.0.2" + ieee754 "^1.1.4" + isarray "^1.0.0" + +builtin-modules@^1.1.1: + version "1.1.1" + resolved "https://registry.npm.taobao.org/builtin-modules/download/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f" + integrity sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8= + +builtin-status-codes@^3.0.0: + version "3.0.0" + resolved "https://registry.npm.taobao.org/builtin-status-codes/download/builtin-status-codes-3.0.0.tgz#85982878e21b98e1c66425e03d0174788f569ee8" + integrity sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug= + +builtins@^1.0.3: + version "1.0.3" + resolved "https://registry.npm.taobao.org/builtins/download/builtins-1.0.3.tgz?cache=0&sync_timestamp=1576512797634&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fbuiltins%2Fdownload%2Fbuiltins-1.0.3.tgz#cb94faeb61c8696451db36534e1422f94f0aee88" + integrity sha1-y5T662HIaWRR2zZTThQi+U8K7og= + +bytes@3.0.0: + version "3.0.0" + resolved "https://registry.npm.taobao.org/bytes/download/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048" + integrity sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg= + +bytes@3.1.0: + version "3.1.0" + resolved "https://registry.npm.taobao.org/bytes/download/bytes-3.1.0.tgz#f6cf7933a360e0588fa9fde85651cdc7f805d1f6" + integrity sha1-9s95M6Ng4FiPqf3oVlHNx/gF0fY= + +cacache@12.0.2: + version "12.0.2" + resolved "https://registry.npm.taobao.org/cacache/download/cacache-12.0.2.tgz?cache=0&sync_timestamp=1569877543868&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcacache%2Fdownload%2Fcacache-12.0.2.tgz#8db03205e36089a3df6954c66ce92541441ac46c" + integrity sha1-jbAyBeNgiaPfaVTGbOklQUQaxGw= + dependencies: + bluebird "^3.5.5" + chownr "^1.1.1" + figgy-pudding "^3.5.1" + glob "^7.1.4" + graceful-fs "^4.1.15" + infer-owner "^1.0.3" + lru-cache "^5.1.1" + mississippi "^3.0.0" + mkdirp "^0.5.1" + move-concurrently "^1.0.1" + promise-inflight "^1.0.1" + rimraf "^2.6.3" + ssri "^6.0.1" + unique-filename "^1.1.1" + y18n "^4.0.0" + +cacache@^12.0.0, cacache@^12.0.2, cacache@^12.0.3: + version "12.0.3" + resolved "https://registry.npm.taobao.org/cacache/download/cacache-12.0.3.tgz?cache=0&sync_timestamp=1569877543868&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcacache%2Fdownload%2Fcacache-12.0.3.tgz#be99abba4e1bf5df461cd5a2c1071fc432573390" + integrity sha1-vpmruk4b9d9GHNWiwQcfxDJXM5A= + dependencies: + bluebird "^3.5.5" + chownr "^1.1.1" + figgy-pudding "^3.5.1" + glob "^7.1.4" + graceful-fs "^4.1.15" + infer-owner "^1.0.3" + lru-cache "^5.1.1" + mississippi "^3.0.0" + mkdirp "^0.5.1" + move-concurrently "^1.0.1" + promise-inflight "^1.0.1" + rimraf "^2.6.3" + ssri "^6.0.1" + unique-filename "^1.1.1" + y18n "^4.0.0" + +cache-base@^1.0.1: + version "1.0.1" + resolved "https://registry.npm.taobao.org/cache-base/download/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2" + integrity sha1-Cn9GQWgxyLZi7jb+TnxZ129marI= + dependencies: + collection-visit "^1.0.0" + component-emitter "^1.2.1" + get-value "^2.0.6" + has-value "^1.0.0" + isobject "^3.0.1" + set-value "^2.0.0" + to-object-path "^0.3.0" + union-value "^1.0.0" + unset-value "^1.0.0" + +caller-callsite@^2.0.0: + version "2.0.0" + resolved "https://registry.npm.taobao.org/caller-callsite/download/caller-callsite-2.0.0.tgz#847e0fce0a223750a9a027c54b33731ad3154134" + integrity sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ= + dependencies: + callsites "^2.0.0" + +caller-path@^2.0.0: + version "2.0.0" + resolved "https://registry.npm.taobao.org/caller-path/download/caller-path-2.0.0.tgz#468f83044e369ab2010fac5f06ceee15bb2cb1f4" + integrity sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ= + dependencies: + caller-callsite "^2.0.0" + +callsite@1.0.0: + version "1.0.0" + resolved "https://registry.npm.taobao.org/callsite/download/callsite-1.0.0.tgz#280398e5d664bd74038b6f0905153e6e8af1bc20" + integrity sha1-KAOY5dZkvXQDi28JBRU+borxvCA= + +callsites@^2.0.0: + version "2.0.0" + resolved "https://registry.npm.taobao.org/callsites/download/callsites-2.0.0.tgz#06eb84f00eea413da86affefacbffb36093b3c50" + integrity sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA= + +camelcase@^5.0.0: + version "5.3.1" + resolved "https://registry.npm.taobao.org/camelcase/download/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" + integrity sha1-48mzFWnhBoEd8kL3FXJaH0xJQyA= + +caniuse-lite@1.0.30000989: + version "1.0.30000989" + resolved "https://registry.npm.taobao.org/caniuse-lite/download/caniuse-lite-1.0.30000989.tgz?cache=0&sync_timestamp=1578188987801&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcaniuse-lite%2Fdownload%2Fcaniuse-lite-1.0.30000989.tgz#b9193e293ccf7e4426c5245134b8f2a56c0ac4b9" + integrity sha1-uRk+KTzPfkQmxSRRNLjypWwKxLk= + +caniuse-lite@^1.0.30000980, caniuse-lite@^1.0.30000984, caniuse-lite@^1.0.30001017: + version "1.0.30001019" + resolved "https://registry.npm.taobao.org/caniuse-lite/download/caniuse-lite-1.0.30001019.tgz?cache=0&sync_timestamp=1578188987801&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcaniuse-lite%2Fdownload%2Fcaniuse-lite-1.0.30001019.tgz#857e3fccaad2b2feb3f1f6d8a8f62d747ea648e1" + integrity sha1-hX4/zKrSsv6z8fbYqPYtdH6mSOE= + +canonical-path@1.0.0: + version "1.0.0" + resolved "https://registry.npm.taobao.org/canonical-path/download/canonical-path-1.0.0.tgz#fcb470c23958def85081856be7a86e904f180d1d" + integrity sha1-/LRwwjlY3vhQgYVr56hukE8YDR0= + +caseless@~0.12.0: + version "0.12.0" + resolved "https://registry.npm.taobao.org/caseless/download/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" + integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw= + +chalk@^1.1.1, chalk@^1.1.3: + version "1.1.3" + resolved "https://registry.npm.taobao.org/chalk/download/chalk-1.1.3.tgz?cache=0&sync_timestamp=1573282918610&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fchalk%2Fdownload%2Fchalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" + integrity sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg= + dependencies: + ansi-styles "^2.2.1" + escape-string-regexp "^1.0.2" + has-ansi "^2.0.0" + strip-ansi "^3.0.0" + supports-color "^2.0.0" + +chalk@^2.0.0, chalk@^2.0.1, chalk@^2.3.0, chalk@^2.4.2: + version "2.4.2" + resolved "https://registry.npm.taobao.org/chalk/download/chalk-2.4.2.tgz?cache=0&sync_timestamp=1573282918610&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fchalk%2Fdownload%2Fchalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" + integrity sha1-zUJUFnelQzPPVBpJEIwUMrRMlCQ= + dependencies: + ansi-styles "^3.2.1" + escape-string-regexp "^1.0.5" + supports-color "^5.3.0" + +chardet@^0.7.0: + version "0.7.0" + resolved "https://registry.npm.taobao.org/chardet/download/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" + integrity sha1-kAlISfCTfy7twkJdDSip5fDLrZ4= + +"chokidar@>=2.0.0 <4.0.0": + version "3.3.1" + resolved "https://registry.npm.taobao.org/chokidar/download/chokidar-3.3.1.tgz#c84e5b3d18d9a4d77558fef466b1bf16bbeb3450" + integrity sha1-yE5bPRjZpNd1WP70ZrG/FrvrNFA= + dependencies: + anymatch "~3.1.1" + braces "~3.0.2" + glob-parent "~5.1.0" + is-binary-path "~2.1.0" + is-glob "~4.0.1" + normalize-path "~3.0.0" + readdirp "~3.3.0" + optionalDependencies: + fsevents "~2.1.2" + +chokidar@^2.0.2, chokidar@^2.0.3, chokidar@^2.1.1, chokidar@^2.1.8: + version "2.1.8" + resolved "https://registry.npm.taobao.org/chokidar/download/chokidar-2.1.8.tgz#804b3a7b6a99358c3c5c61e71d8728f041cff917" + integrity sha1-gEs6e2qZNYw8XGHnHYco8EHP+Rc= + dependencies: + anymatch "^2.0.0" + async-each "^1.0.1" + braces "^2.3.2" + glob-parent "^3.1.0" + inherits "^2.0.3" + is-binary-path "^1.0.0" + is-glob "^4.0.0" + normalize-path "^3.0.0" + path-is-absolute "^1.0.0" + readdirp "^2.2.1" + upath "^1.1.1" + optionalDependencies: + fsevents "^1.2.7" + +chownr@^1.1.1: + version "1.1.3" + resolved "https://registry.npm.taobao.org/chownr/download/chownr-1.1.3.tgz#42d837d5239688d55f303003a508230fa6727142" + integrity sha1-Qtg31SOWiNVfMDADpQgjD6ZycUI= + +chrome-trace-event@^1.0.2: + version "1.0.2" + resolved "https://registry.npm.taobao.org/chrome-trace-event/download/chrome-trace-event-1.0.2.tgz#234090ee97c7d4ad1a2c4beae27505deffc608a4" + integrity sha1-I0CQ7pfH1K0aLEvq4nUF3v/GCKQ= + dependencies: + tslib "^1.9.0" + +cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: + version "1.0.4" + resolved "https://registry.npm.taobao.org/cipher-base/download/cipher-base-1.0.4.tgz#8760e4ecc272f4c363532f926d874aae2c1397de" + integrity sha1-h2Dk7MJy9MNjUy+SbYdKriwTl94= + dependencies: + inherits "^2.0.1" + safe-buffer "^5.0.1" + +circular-dependency-plugin@5.2.0: + version "5.2.0" + resolved "https://registry.npm.taobao.org/circular-dependency-plugin/download/circular-dependency-plugin-5.2.0.tgz#e09dbc2dd3e2928442403e2d45b41cea06bc0a93" + integrity sha1-4J28LdPikoRCQD4tRbQc6ga8CpM= + +class-utils@^0.3.5: + version "0.3.6" + resolved "https://registry.npm.taobao.org/class-utils/download/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463" + integrity sha1-+TNprouafOAv1B+q0MqDAzGQxGM= + dependencies: + arr-union "^3.1.0" + define-property "^0.2.5" + isobject "^3.0.0" + static-extend "^0.1.1" + +clean-css@4.2.1: + version "4.2.1" + resolved "https://registry.npm.taobao.org/clean-css/download/clean-css-4.2.1.tgz#2d411ef76b8569b6d0c84068dabe85b0aa5e5c17" + integrity sha1-LUEe92uFabbQyEBo2r6FsKpeXBc= + dependencies: + source-map "~0.6.0" + +cli-cursor@^3.1.0: + version "3.1.0" + resolved "https://registry.npm.taobao.org/cli-cursor/download/cli-cursor-3.1.0.tgz#264305a7ae490d1d03bf0c9ba7c925d1753af307" + integrity sha1-JkMFp65JDR0Dvwybp8kl0XU68wc= + dependencies: + restore-cursor "^3.1.0" + +cli-width@^2.0.0: + version "2.2.0" + resolved "https://registry.npm.taobao.org/cli-width/download/cli-width-2.2.0.tgz#ff19ede8a9a5e579324147b0c11f0fbcbabed639" + integrity sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk= + +cliui@^4.0.0: + version "4.1.0" + resolved "https://registry.npm.taobao.org/cliui/download/cliui-4.1.0.tgz?cache=0&sync_timestamp=1573943106490&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcliui%2Fdownload%2Fcliui-4.1.0.tgz#348422dbe82d800b3022eef4f6ac10bf2e4d1b49" + integrity sha1-NIQi2+gtgAswIu709qwQvy5NG0k= + dependencies: + string-width "^2.1.1" + strip-ansi "^4.0.0" + wrap-ansi "^2.0.0" + +clone-deep@^4.0.1: + version "4.0.1" + resolved "https://registry.npm.taobao.org/clone-deep/download/clone-deep-4.0.1.tgz#c19fd9bdbbf85942b4fd979c84dcf7d5f07c2387" + integrity sha1-wZ/Zvbv4WUK0/ZechNz31fB8I4c= + dependencies: + is-plain-object "^2.0.4" + kind-of "^6.0.2" + shallow-clone "^3.0.0" + +clone@^2.1.1, clone@^2.1.2: + version "2.1.2" + resolved "https://registry.npm.taobao.org/clone/download/clone-2.1.2.tgz#1b7f4b9f591f1e8f83670401600345a02887435f" + integrity sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18= + +co@^4.6.0: + version "4.6.0" + resolved "https://registry.npm.taobao.org/co/download/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" + integrity sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ= + +code-point-at@^1.0.0: + version "1.1.0" + resolved "https://registry.npm.taobao.org/code-point-at/download/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" + integrity sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c= + +codelyzer@^5.0.0: + version "5.2.1" + resolved "https://registry.npm.taobao.org/codelyzer/download/codelyzer-5.2.1.tgz#44fd431e128009f38c761828c33ebacba9549d32" + integrity sha1-RP1DHhKACfOMdhgowz66y6lUnTI= + dependencies: + app-root-path "^2.2.1" + aria-query "^3.0.0" + axobject-query "2.0.2" + css-selector-tokenizer "^0.7.1" + cssauron "^1.4.0" + damerau-levenshtein "^1.0.4" + semver-dsl "^1.0.1" + source-map "^0.5.7" + sprintf-js "^1.1.2" + +collection-visit@^1.0.0: + version "1.0.0" + resolved "https://registry.npm.taobao.org/collection-visit/download/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0" + integrity sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA= + dependencies: + map-visit "^1.0.0" + object-visit "^1.0.0" + +color-convert@^1.9.0: + version "1.9.3" + resolved "https://registry.npm.taobao.org/color-convert/download/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" + integrity sha1-u3GFBpDh8TZWfeYp0tVHHe2kweg= + dependencies: + color-name "1.1.3" + +color-name@1.1.3: + version "1.1.3" + resolved "https://registry.npm.taobao.org/color-name/download/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" + integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= + +colors@1.1.2: + version "1.1.2" + resolved "https://registry.npm.taobao.org/colors/download/colors-1.1.2.tgz#168a4701756b6a7f51a12ce0c97bfa28c084ed63" + integrity sha1-FopHAXVran9RoSzgyXv6KMCE7WM= + +colors@^1.1.0: + version "1.4.0" + resolved "https://registry.npm.taobao.org/colors/download/colors-1.4.0.tgz#c50491479d4c1bdaed2c9ced32cf7c7dc2360f78" + integrity sha1-xQSRR51MG9rtLJztMs98fcI2D3g= + +combined-stream@^1.0.6, combined-stream@~1.0.6: + version "1.0.8" + resolved "https://registry.npm.taobao.org/combined-stream/download/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" + integrity sha1-w9RaizT9cwYxoRCoolIGgrMdWn8= + dependencies: + delayed-stream "~1.0.0" + +commander@^2.11.0, commander@^2.12.1, commander@^2.20.0, commander@~2.20.3: + version "2.20.3" + resolved "https://registry.npm.taobao.org/commander/download/commander-2.20.3.tgz?cache=0&sync_timestamp=1573464098030&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcommander%2Fdownload%2Fcommander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" + integrity sha1-/UhehMA+tIgcIHIrpIA16FMa6zM= + +commondir@^1.0.1: + version "1.0.1" + resolved "https://registry.npm.taobao.org/commondir/download/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" + integrity sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs= + +compare-versions@^3.4.0: + version "3.5.1" + resolved "https://registry.npm.taobao.org/compare-versions/download/compare-versions-3.5.1.tgz#26e1f5cf0d48a77eced5046b9f67b6b61075a393" + integrity sha1-JuH1zw1Ip37O1QRrn2e2thB1o5M= + +component-bind@1.0.0: + version "1.0.0" + resolved "https://registry.npm.taobao.org/component-bind/download/component-bind-1.0.0.tgz#00c608ab7dcd93897c0009651b1d3a8e1e73bbd1" + integrity sha1-AMYIq33Nk4l8AAllGx06jh5zu9E= + +component-emitter@1.2.1: + version "1.2.1" + resolved "https://registry.npm.taobao.org/component-emitter/download/component-emitter-1.2.1.tgz#137918d6d78283f7df7a6b7c5a63e140e69425e6" + integrity sha1-E3kY1teCg/ffemt8WmPhQOaUJeY= + +component-emitter@^1.2.1: + version "1.3.0" + resolved "https://registry.npm.taobao.org/component-emitter/download/component-emitter-1.3.0.tgz#16e4070fba8ae29b679f2215853ee181ab2eabc0" + integrity sha1-FuQHD7qK4ptnnyIVhT7hgasuq8A= + +component-inherit@0.0.3: + version "0.0.3" + resolved "https://registry.npm.taobao.org/component-inherit/download/component-inherit-0.0.3.tgz#645fc4adf58b72b649d5cae65135619db26ff143" + integrity sha1-ZF/ErfWLcrZJ1crmUTVhnbJv8UM= + +compressible@~2.0.16: + version "2.0.17" + resolved "https://registry.npm.taobao.org/compressible/download/compressible-2.0.17.tgz#6e8c108a16ad58384a977f3a482ca20bff2f38c1" + integrity sha1-bowQihatWDhKl386SCyiC/8vOME= + dependencies: + mime-db ">= 1.40.0 < 2" + +compression@^1.7.4: + version "1.7.4" + resolved "https://registry.npm.taobao.org/compression/download/compression-1.7.4.tgz#95523eff170ca57c29a0ca41e6fe131f41e5bb8f" + integrity sha1-lVI+/xcMpXwpoMpB5v4TH0Hlu48= + dependencies: + accepts "~1.3.5" + bytes "3.0.0" + compressible "~2.0.16" + debug "2.6.9" + on-headers "~1.0.2" + safe-buffer "5.1.2" + vary "~1.1.2" + +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.npm.taobao.org/concat-map/download/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= + +concat-stream@^1.5.0: + version "1.6.2" + resolved "https://registry.npm.taobao.org/concat-stream/download/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34" + integrity sha1-kEvfGUzTEi/Gdcd/xKw9T/D9GjQ= + dependencies: + buffer-from "^1.0.0" + inherits "^2.0.3" + readable-stream "^2.2.2" + typedarray "^0.0.6" + +connect-history-api-fallback@^1.6.0: + version "1.6.0" + resolved "https://registry.npm.taobao.org/connect-history-api-fallback/download/connect-history-api-fallback-1.6.0.tgz#8b32089359308d111115d81cad3fceab888f97bc" + integrity sha1-izIIk1kwjRERFdgcrT/Oq4iPl7w= + +connect@^3.6.0: + version "3.7.0" + resolved "https://registry.npm.taobao.org/connect/download/connect-3.7.0.tgz#5d49348910caa5e07a01800b030d0c35f20484f8" + integrity sha1-XUk0iRDKpeB6AYALAw0MNfIEhPg= + dependencies: + debug "2.6.9" + finalhandler "1.1.2" + parseurl "~1.3.3" + utils-merge "1.0.1" + +console-browserify@^1.1.0: + version "1.2.0" + resolved "https://registry.npm.taobao.org/console-browserify/download/console-browserify-1.2.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fconsole-browserify%2Fdownload%2Fconsole-browserify-1.2.0.tgz#67063cef57ceb6cf4993a2ab3a55840ae8c49336" + integrity sha1-ZwY871fOts9Jk6KrOlWECujEkzY= + +console-control-strings@^1.0.0, console-control-strings@~1.1.0: + version "1.1.0" + resolved "https://registry.npm.taobao.org/console-control-strings/download/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" + integrity sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4= + +constants-browserify@^1.0.0: + version "1.0.0" + resolved "https://registry.npm.taobao.org/constants-browserify/download/constants-browserify-1.0.0.tgz#c20b96d8c617748aaf1c16021760cd27fcb8cb75" + integrity sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U= + +content-disposition@0.5.3: + version "0.5.3" + resolved "https://registry.npm.taobao.org/content-disposition/download/content-disposition-0.5.3.tgz#e130caf7e7279087c5616c2007d0485698984fbd" + integrity sha1-4TDK9+cnkIfFYWwgB9BIVpiYT70= + dependencies: + safe-buffer "5.1.2" + +content-type@~1.0.4: + version "1.0.4" + resolved "https://registry.npm.taobao.org/content-type/download/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b" + integrity sha1-4TjMdeBAxyexlm/l5fjJruJW/js= + +convert-source-map@^1.5.0, convert-source-map@^1.5.1, convert-source-map@^1.7.0: + version "1.7.0" + resolved "https://registry.npm.taobao.org/convert-source-map/download/convert-source-map-1.7.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fconvert-source-map%2Fdownload%2Fconvert-source-map-1.7.0.tgz#17a2cb882d7f77d3490585e2ce6c524424a3a442" + integrity sha1-F6LLiC1/d9NJBYXizmxSRCSjpEI= + dependencies: + safe-buffer "~5.1.1" + +cookie-signature@1.0.6: + version "1.0.6" + resolved "https://registry.npm.taobao.org/cookie-signature/download/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" + integrity sha1-4wOogrNCzD7oylE6eZmXNNqzriw= + +cookie@0.3.1: + version "0.3.1" + resolved "https://registry.npm.taobao.org/cookie/download/cookie-0.3.1.tgz#e7e0a1f9ef43b4c8ba925c5c5a96e806d16873bb" + integrity sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s= + +cookie@0.4.0: + version "0.4.0" + resolved "https://registry.npm.taobao.org/cookie/download/cookie-0.4.0.tgz#beb437e7022b3b6d49019d088665303ebe9c14ba" + integrity sha1-vrQ35wIrO21JAZ0IhmUwPr6cFLo= + +copy-concurrently@^1.0.0: + version "1.0.5" + resolved "https://registry.npm.taobao.org/copy-concurrently/download/copy-concurrently-1.0.5.tgz#92297398cae34937fcafd6ec8139c18051f0b5e0" + integrity sha1-kilzmMrjSTf8r9bsgTnBgFHwteA= + dependencies: + aproba "^1.1.1" + fs-write-stream-atomic "^1.0.8" + iferr "^0.1.5" + mkdirp "^0.5.1" + rimraf "^2.5.4" + run-queue "^1.0.0" + +copy-descriptor@^0.1.0: + version "0.1.1" + resolved "https://registry.npm.taobao.org/copy-descriptor/download/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" + integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40= + +copy-webpack-plugin@5.1.1: + version "5.1.1" + resolved "https://registry.npm.taobao.org/copy-webpack-plugin/download/copy-webpack-plugin-5.1.1.tgz#5481a03dea1123d88a988c6ff8b78247214f0b88" + integrity sha1-VIGgPeoRI9iKmIxv+LeCRyFPC4g= + dependencies: + cacache "^12.0.3" + find-cache-dir "^2.1.0" + glob-parent "^3.1.0" + globby "^7.1.1" + is-glob "^4.0.1" + loader-utils "^1.2.3" + minimatch "^3.0.4" + normalize-path "^3.0.0" + p-limit "^2.2.1" + schema-utils "^1.0.0" + serialize-javascript "^2.1.2" + webpack-log "^2.0.0" + +core-js-compat@^3.4.7: + version "3.6.1" + resolved "https://registry.npm.taobao.org/core-js-compat/download/core-js-compat-3.6.1.tgz#39638c935c83c93a793abb628b252ec43e85783a" + integrity sha1-OWOMk1yDyTp5OrtiiyUuxD6FeDo= + dependencies: + browserslist "^4.8.2" + semver "7.0.0" + +core-js@3.2.1: + version "3.2.1" + resolved "https://registry.npm.taobao.org/core-js/download/core-js-3.2.1.tgz#cd41f38534da6cc59f7db050fe67307de9868b09" + integrity sha1-zUHzhTTabMWffbBQ/mcwfemGiwk= + +core-js@^2.2.0, core-js@^2.4.0: + version "2.6.11" + resolved "https://registry.npm.taobao.org/core-js/download/core-js-2.6.11.tgz#38831469f9922bded8ee21c9dc46985e0399308c" + integrity sha1-OIMUafmSK97Y7iHJ3EaYXgOZMIw= + +core-util-is@1.0.2, core-util-is@~1.0.0: + version "1.0.2" + resolved "https://registry.npm.taobao.org/core-util-is/download/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" + integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= + +cosmiconfig@^5.0.0: + version "5.2.1" + resolved "https://registry.npm.taobao.org/cosmiconfig/download/cosmiconfig-5.2.1.tgz#040f726809c591e77a17c0a3626ca45b4f168b1a" + integrity sha1-BA9yaAnFked6F8CjYmykW08Wixo= + dependencies: + import-fresh "^2.0.0" + is-directory "^0.3.1" + js-yaml "^3.13.1" + parse-json "^4.0.0" + +create-ecdh@^4.0.0: + version "4.0.3" + resolved "https://registry.npm.taobao.org/create-ecdh/download/create-ecdh-4.0.3.tgz#c9111b6f33045c4697f144787f9254cdc77c45ff" + integrity sha1-yREbbzMEXEaX8UR4f5JUzcd8Rf8= + dependencies: + bn.js "^4.1.0" + elliptic "^6.0.0" + +create-hash@^1.1.0, create-hash@^1.1.2: + version "1.2.0" + resolved "https://registry.npm.taobao.org/create-hash/download/create-hash-1.2.0.tgz#889078af11a63756bcfb59bd221996be3a9ef196" + integrity sha1-iJB4rxGmN1a8+1m9IhmWvjqe8ZY= + dependencies: + cipher-base "^1.0.1" + inherits "^2.0.1" + md5.js "^1.3.4" + ripemd160 "^2.0.1" + sha.js "^2.4.0" + +create-hmac@^1.1.0, create-hmac@^1.1.2, create-hmac@^1.1.4: + version "1.1.7" + resolved "https://registry.npm.taobao.org/create-hmac/download/create-hmac-1.1.7.tgz#69170c78b3ab957147b2b8b04572e47ead2243ff" + integrity sha1-aRcMeLOrlXFHsriwRXLkfq0iQ/8= + dependencies: + cipher-base "^1.0.3" + create-hash "^1.1.0" + inherits "^2.0.1" + ripemd160 "^2.0.0" + safe-buffer "^5.0.1" + sha.js "^2.4.8" + +cross-spawn@^6.0.0: + version "6.0.5" + resolved "https://registry.npm.taobao.org/cross-spawn/download/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" + integrity sha1-Sl7Hxk364iw6FBJNus3uhG2Ay8Q= + dependencies: + nice-try "^1.0.4" + path-key "^2.0.1" + semver "^5.5.0" + shebang-command "^1.2.0" + which "^1.2.9" + +crypto-browserify@^3.11.0: + version "3.12.0" + resolved "https://registry.npm.taobao.org/crypto-browserify/download/crypto-browserify-3.12.0.tgz#396cf9f3137f03e4b8e532c58f698254e00f80ec" + integrity sha1-OWz58xN/A+S45TLFj2mCVOAPgOw= + dependencies: + browserify-cipher "^1.0.0" + browserify-sign "^4.0.0" + create-ecdh "^4.0.0" + create-hash "^1.1.0" + create-hmac "^1.1.0" + diffie-hellman "^5.0.0" + inherits "^2.0.1" + pbkdf2 "^3.0.3" + public-encrypt "^4.0.0" + randombytes "^2.0.0" + randomfill "^1.0.3" + +css-parse@1.7.x: + version "1.7.0" + resolved "https://registry.npm.taobao.org/css-parse/download/css-parse-1.7.0.tgz#321f6cf73782a6ff751111390fc05e2c657d8c9b" + integrity sha1-Mh9s9zeCpv91ERE5D8BeLGV9jJs= + +css-selector-tokenizer@^0.7.1: + version "0.7.1" + resolved "https://registry.npm.taobao.org/css-selector-tokenizer/download/css-selector-tokenizer-0.7.1.tgz#a177271a8bca5019172f4f891fc6eed9cbf68d5d" + integrity sha1-oXcnGovKUBkXL0+JH8bu2cv2jV0= + dependencies: + cssesc "^0.1.0" + fastparse "^1.1.1" + regexpu-core "^1.0.0" + +cssauron@^1.4.0: + version "1.4.0" + resolved "https://registry.npm.taobao.org/cssauron/download/cssauron-1.4.0.tgz#a6602dff7e04a8306dc0db9a551e92e8b5662ad8" + integrity sha1-pmAt/34EqDBtwNuaVR6S6LVmKtg= + dependencies: + through X.X.X + +cssesc@^0.1.0: + version "0.1.0" + resolved "https://registry.npm.taobao.org/cssesc/download/cssesc-0.1.0.tgz#c814903e45623371a0477b40109aaafbeeaddbb4" + integrity sha1-yBSQPkViM3GgR3tAEJqq++6t27Q= + +custom-event@~1.0.0: + version "1.0.1" + resolved "https://registry.npm.taobao.org/custom-event/download/custom-event-1.0.1.tgz#5d02a46850adf1b4a317946a3928fccb5bfd0425" + integrity sha1-XQKkaFCt8bSjF5RqOSj8y1v9BCU= + +cyclist@^1.0.1: + version "1.0.1" + resolved "https://registry.npm.taobao.org/cyclist/download/cyclist-1.0.1.tgz#596e9698fd0c80e12038c2b82d6eb1b35b6224d9" + integrity sha1-WW6WmP0MgOEgOMK4LW6xs1tiJNk= + +damerau-levenshtein@^1.0.4: + version "1.0.5" + resolved "https://registry.npm.taobao.org/damerau-levenshtein/download/damerau-levenshtein-1.0.5.tgz#780cf7144eb2e8dbd1c3bb83ae31100ccc31a414" + integrity sha1-eAz3FE6y6NvRw7uDrjEQDMwxpBQ= + +dashdash@^1.12.0: + version "1.14.1" + resolved "https://registry.npm.taobao.org/dashdash/download/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" + integrity sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA= + dependencies: + assert-plus "^1.0.0" + +date-format@^2.0.0: + version "2.1.0" + resolved "https://registry.npm.taobao.org/date-format/download/date-format-2.1.0.tgz#31d5b5ea211cf5fd764cd38baf9d033df7e125cf" + integrity sha1-MdW16iEc9f12TNOLr50DPffhJc8= + +debug@*, debug@^4.1.0, debug@^4.1.1: + version "4.1.1" + resolved "https://registry.npm.taobao.org/debug/download/debug-4.1.1.tgz#3b72260255109c6b589cee050f1d516139664791" + integrity sha1-O3ImAlUQnGtYnO4FDx1RYTlmR5E= + dependencies: + ms "^2.1.1" + +debug@2.6.9, debug@^2.2.0, debug@^2.3.3, debug@^2.6.8: + version "2.6.9" + resolved "https://registry.npm.taobao.org/debug/download/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" + integrity sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8= + dependencies: + ms "2.0.0" + +debug@3.1.0, debug@~3.1.0: + version "3.1.0" + resolved "https://registry.npm.taobao.org/debug/download/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261" + integrity sha1-W7WgZyYotkFJVmuhaBnmFRjGcmE= + dependencies: + ms "2.0.0" + +debug@^3.0.0, debug@^3.1.0, debug@^3.1.1, debug@^3.2.5, debug@^3.2.6: + version "3.2.6" + resolved "https://registry.npm.taobao.org/debug/download/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b" + integrity sha1-6D0X3hbYp++3cX7b5fsQE17uYps= + dependencies: + ms "^2.1.1" + +debuglog@^1.0.1: + version "1.0.1" + resolved "https://registry.npm.taobao.org/debuglog/download/debuglog-1.0.1.tgz?cache=0&sync_timestamp=1571696609964&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdebuglog%2Fdownload%2Fdebuglog-1.0.1.tgz#aa24ffb9ac3df9a2351837cfb2d279360cd78492" + integrity sha1-qiT/uaw9+aI1GDfPstJ5NgzXhJI= + +decamelize@^1.2.0: + version "1.2.0" + resolved "https://registry.npm.taobao.org/decamelize/download/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" + integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= + +decode-uri-component@^0.2.0: + version "0.2.0" + resolved "https://registry.npm.taobao.org/decode-uri-component/download/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" + integrity sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU= + +deep-equal@^1.0.1: + version "1.1.1" + resolved "https://registry.npm.taobao.org/deep-equal/download/deep-equal-1.1.1.tgz#b5c98c942ceffaf7cb051e24e1434a25a2e6076a" + integrity sha1-tcmMlCzv+vfLBR4k4UNKJaLmB2o= + dependencies: + is-arguments "^1.0.4" + is-date-object "^1.0.1" + is-regex "^1.0.4" + object-is "^1.0.1" + object-keys "^1.1.1" + regexp.prototype.flags "^1.2.0" + +deep-extend@^0.6.0: + version "0.6.0" + resolved "https://registry.npm.taobao.org/deep-extend/download/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" + integrity sha1-xPp8lUBKF6nD6Mp+FTcxK3NjMKw= + +default-gateway@^4.2.0: + version "4.2.0" + resolved "https://registry.npm.taobao.org/default-gateway/download/default-gateway-4.2.0.tgz#167104c7500c2115f6dd69b0a536bb8ed720552b" + integrity sha1-FnEEx1AMIRX23WmwpTa7jtcgVSs= + dependencies: + execa "^1.0.0" + ip-regex "^2.1.0" + +default-require-extensions@^2.0.0: + version "2.0.0" + resolved "https://registry.npm.taobao.org/default-require-extensions/download/default-require-extensions-2.0.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdefault-require-extensions%2Fdownload%2Fdefault-require-extensions-2.0.0.tgz#f5f8fbb18a7d6d50b21f641f649ebb522cfe24f7" + integrity sha1-9fj7sYp9bVCyH2QfZJ67Uiz+JPc= + dependencies: + strip-bom "^3.0.0" + +define-properties@^1.1.2, define-properties@^1.1.3: + version "1.1.3" + resolved "https://registry.npm.taobao.org/define-properties/download/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" + integrity sha1-z4jabL7ib+bbcJT2HYcMvYTO6fE= + dependencies: + object-keys "^1.0.12" + +define-property@^0.2.5: + version "0.2.5" + resolved "https://registry.npm.taobao.org/define-property/download/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116" + integrity sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY= + dependencies: + is-descriptor "^0.1.0" + +define-property@^1.0.0: + version "1.0.0" + resolved "https://registry.npm.taobao.org/define-property/download/define-property-1.0.0.tgz#769ebaaf3f4a63aad3af9e8d304c9bbe79bfb0e6" + integrity sha1-dp66rz9KY6rTr56NMEybvnm/sOY= + dependencies: + is-descriptor "^1.0.0" + +define-property@^2.0.2: + version "2.0.2" + resolved "https://registry.npm.taobao.org/define-property/download/define-property-2.0.2.tgz#d459689e8d654ba77e02a817f8710d702cb16e9d" + integrity sha1-1Flono1lS6d+AqgX+HENcCyxbp0= + dependencies: + is-descriptor "^1.0.2" + isobject "^3.0.1" + +del@^2.2.0: + version "2.2.2" + resolved "https://registry.npm.taobao.org/del/download/del-2.2.2.tgz#c12c981d067846c84bcaf862cff930d907ffd1a8" + integrity sha1-wSyYHQZ4RshLyvhiz/kw2Qf/0ag= + dependencies: + globby "^5.0.0" + is-path-cwd "^1.0.0" + is-path-in-cwd "^1.0.0" + object-assign "^4.0.1" + pify "^2.0.0" + pinkie-promise "^2.0.0" + rimraf "^2.2.8" + +del@^4.1.1: + version "4.1.1" + resolved "https://registry.npm.taobao.org/del/download/del-4.1.1.tgz#9e8f117222ea44a31ff3a156c049b99052a9f0b4" + integrity sha1-no8RciLqRKMf86FWwEm5kFKp8LQ= + dependencies: + "@types/glob" "^7.1.1" + globby "^6.1.0" + is-path-cwd "^2.0.0" + is-path-in-cwd "^2.0.0" + p-map "^2.0.0" + pify "^4.0.1" + rimraf "^2.6.3" + +delayed-stream@~1.0.0: + version "1.0.0" + resolved "https://registry.npm.taobao.org/delayed-stream/download/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" + integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk= + +delegates@^1.0.0: + version "1.0.0" + resolved "https://registry.npm.taobao.org/delegates/download/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" + integrity sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o= + +depd@~1.1.2: + version "1.1.2" + resolved "https://registry.npm.taobao.org/depd/download/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" + integrity sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak= + +dependency-graph@^0.7.2: + version "0.7.2" + resolved "https://registry.npm.taobao.org/dependency-graph/download/dependency-graph-0.7.2.tgz#91db9de6eb72699209d88aea4c1fd5221cac1c49" + integrity sha1-kdud5utyaZIJ2IrqTB/VIhysHEk= + +des.js@^1.0.0: + version "1.0.1" + resolved "https://registry.npm.taobao.org/des.js/download/des.js-1.0.1.tgz#5382142e1bdc53f85d86d53e5f4aa7deb91e0843" + integrity sha1-U4IULhvcU/hdhtU+X0qn3rkeCEM= + dependencies: + inherits "^2.0.1" + minimalistic-assert "^1.0.0" + +destroy@~1.0.4: + version "1.0.4" + resolved "https://registry.npm.taobao.org/destroy/download/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80" + integrity sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA= + +detect-indent@^4.0.0: + version "4.0.0" + resolved "https://registry.npm.taobao.org/detect-indent/download/detect-indent-4.0.0.tgz#f76d064352cdf43a1cb6ce619c4ee3a9475de208" + integrity sha1-920GQ1LN9Docts5hnE7jqUdd4gg= + dependencies: + repeating "^2.0.0" + +detect-libc@^1.0.2: + version "1.0.3" + resolved "https://registry.npm.taobao.org/detect-libc/download/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b" + integrity sha1-+hN8S9aY7fVc1c0CrFWfkaTEups= + +detect-node@^2.0.4: + version "2.0.4" + resolved "https://registry.npm.taobao.org/detect-node/download/detect-node-2.0.4.tgz#014ee8f8f669c5c58023da64b8179c083a28c46c" + integrity sha1-AU7o+PZpxcWAI9pkuBecCDooxGw= + +dezalgo@^1.0.0: + version "1.0.3" + resolved "https://registry.npm.taobao.org/dezalgo/download/dezalgo-1.0.3.tgz#7f742de066fc748bc8db820569dddce49bf0d456" + integrity sha1-f3Qt4Gb8dIvI24IFad3c5Jvw1FY= + dependencies: + asap "^2.0.0" + wrappy "1" + +di@^0.0.1: + version "0.0.1" + resolved "https://registry.npm.taobao.org/di/download/di-0.0.1.tgz#806649326ceaa7caa3306d75d985ea2748ba913c" + integrity sha1-gGZJMmzqp8qjMG112YXqJ0i6kTw= + +diff@^3.1.0, diff@^3.2.0: + version "3.5.0" + resolved "https://registry.npm.taobao.org/diff/download/diff-3.5.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdiff%2Fdownload%2Fdiff-3.5.0.tgz#800c0dd1e0a8bfbc95835c202ad220fe317e5a12" + integrity sha1-gAwN0eCov7yVg1wgKtIg/jF+WhI= + +diffie-hellman@^5.0.0: + version "5.0.3" + resolved "https://registry.npm.taobao.org/diffie-hellman/download/diffie-hellman-5.0.3.tgz#40e8ee98f55a2149607146921c63e1ae5f3d2875" + integrity sha1-QOjumPVaIUlgcUaSHGPhrl89KHU= + dependencies: + bn.js "^4.1.0" + miller-rabin "^4.0.0" + randombytes "^2.0.0" + +dir-glob@^2.0.0: + version "2.2.2" + resolved "https://registry.npm.taobao.org/dir-glob/download/dir-glob-2.2.2.tgz#fa09f0694153c8918b18ba0deafae94769fc50c4" + integrity sha1-+gnwaUFTyJGLGLoN6vrpR2n8UMQ= + dependencies: + path-type "^3.0.0" + +dns-equal@^1.0.0: + version "1.0.0" + resolved "https://registry.npm.taobao.org/dns-equal/download/dns-equal-1.0.0.tgz#b39e7f1da6eb0a75ba9c17324b34753c47e0654d" + integrity sha1-s55/HabrCnW6nBcySzR1PEfgZU0= + +dns-packet@^1.3.1: + version "1.3.1" + resolved "https://registry.npm.taobao.org/dns-packet/download/dns-packet-1.3.1.tgz#12aa426981075be500b910eedcd0b47dd7deda5a" + integrity sha1-EqpCaYEHW+UAuRDu3NC0fdfe2lo= + dependencies: + ip "^1.1.0" + safe-buffer "^5.0.1" + +dns-txt@^2.0.2: + version "2.0.2" + resolved "https://registry.npm.taobao.org/dns-txt/download/dns-txt-2.0.2.tgz#b91d806f5d27188e4ab3e7d107d881a1cc4642b6" + integrity sha1-uR2Ab10nGI5Ks+fRB9iBocxGQrY= + dependencies: + buffer-indexof "^1.0.0" + +dom-serialize@^2.2.0: + version "2.2.1" + resolved "https://registry.npm.taobao.org/dom-serialize/download/dom-serialize-2.2.1.tgz#562ae8999f44be5ea3076f5419dcd59eb43ac95b" + integrity sha1-ViromZ9Evl6jB29UGdzVnrQ6yVs= + dependencies: + custom-event "~1.0.0" + ent "~2.2.0" + extend "^3.0.0" + void-elements "^2.0.0" + +domain-browser@^1.1.1: + version "1.2.0" + resolved "https://registry.npm.taobao.org/domain-browser/download/domain-browser-1.2.0.tgz#3d31f50191a6749dd1375a7f522e823d42e54eda" + integrity sha1-PTH1AZGmdJ3RN1p/Ui6CPULlTto= + +duplexify@^3.4.2, duplexify@^3.6.0: + version "3.7.1" + resolved "https://registry.npm.taobao.org/duplexify/download/duplexify-3.7.1.tgz#2a4df5317f6ccfd91f86d6fd25d8d8a103b88309" + integrity sha1-Kk31MX9sz9kfhtb9JdjYoQO4gwk= + dependencies: + end-of-stream "^1.0.0" + inherits "^2.0.1" + readable-stream "^2.0.0" + stream-shift "^1.0.0" + +ecc-jsbn@~0.1.1: + version "0.1.2" + resolved "https://registry.npm.taobao.org/ecc-jsbn/download/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9" + integrity sha1-OoOpBOVDUyh4dMVkt1SThoSamMk= + dependencies: + jsbn "~0.1.0" + safer-buffer "^2.1.0" + +ee-first@1.1.1: + version "1.1.1" + resolved "https://registry.npm.taobao.org/ee-first/download/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" + integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0= + +electron-to-chromium@^1.3.191, electron-to-chromium@^1.3.322: + version "1.3.326" + resolved "https://registry.npm.taobao.org/electron-to-chromium/download/electron-to-chromium-1.3.326.tgz#71715aca9afd328ea208a3bc4651c15b869f0d1b" + integrity sha1-cXFaypr9Mo6iCKO8RlHBW4afDRs= + +elliptic@^6.0.0: + version "6.5.2" + resolved "https://registry.npm.taobao.org/elliptic/download/elliptic-6.5.2.tgz#05c5678d7173c049d8ca433552224a495d0e3762" + integrity sha1-BcVnjXFzwEnYykM1UiJKSV0ON2I= + dependencies: + bn.js "^4.4.0" + brorand "^1.0.1" + hash.js "^1.0.0" + hmac-drbg "^1.0.0" + inherits "^2.0.1" + minimalistic-assert "^1.0.0" + minimalistic-crypto-utils "^1.0.0" + +emoji-regex@^7.0.1: + version "7.0.3" + resolved "https://registry.npm.taobao.org/emoji-regex/download/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156" + integrity sha1-kzoEBShgyF6DwSJHnEdIqOTHIVY= + +emoji-regex@^8.0.0: + version "8.0.0" + resolved "https://registry.npm.taobao.org/emoji-regex/download/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" + integrity sha1-6Bj9ac5cz8tARZT4QpY79TFkzDc= + +emojis-list@^2.0.0: + version "2.1.0" + resolved "https://registry.npm.taobao.org/emojis-list/download/emojis-list-2.1.0.tgz#4daa4d9db00f9819880c79fa457ae5b09a1fd389" + integrity sha1-TapNnbAPmBmIDHn6RXrlsJof04k= + +encodeurl@~1.0.2: + version "1.0.2" + resolved "https://registry.npm.taobao.org/encodeurl/download/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" + integrity sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k= + +encoding@^0.1.11: + version "0.1.12" + resolved "https://registry.npm.taobao.org/encoding/download/encoding-0.1.12.tgz#538b66f3ee62cd1ab51ec323829d1f9480c74beb" + integrity sha1-U4tm8+5izRq1HsMjgp0flIDHS+s= + dependencies: + iconv-lite "~0.4.13" + +end-of-stream@^1.0.0, end-of-stream@^1.1.0: + version "1.4.4" + resolved "https://registry.npm.taobao.org/end-of-stream/download/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" + integrity sha1-WuZKX0UFe682JuwU2gyl5LJDHrA= + dependencies: + once "^1.4.0" + +engine.io-client@~3.2.0: + version "3.2.1" + resolved "https://registry.npm.taobao.org/engine.io-client/download/engine.io-client-3.2.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fengine.io-client%2Fdownload%2Fengine.io-client-3.2.1.tgz#6f54c0475de487158a1a7c77d10178708b6add36" + integrity sha1-b1TAR13khxWKGnx30QF4cItq3TY= + dependencies: + component-emitter "1.2.1" + component-inherit "0.0.3" + debug "~3.1.0" + engine.io-parser "~2.1.1" + has-cors "1.1.0" + indexof "0.0.1" + parseqs "0.0.5" + parseuri "0.0.5" + ws "~3.3.1" + xmlhttprequest-ssl "~1.5.4" + yeast "0.1.2" + +engine.io-parser@~2.1.0, engine.io-parser@~2.1.1: + version "2.1.3" + resolved "https://registry.npm.taobao.org/engine.io-parser/download/engine.io-parser-2.1.3.tgz#757ab970fbf2dfb32c7b74b033216d5739ef79a6" + integrity sha1-dXq5cPvy37Mse3SwMyFtVznveaY= + dependencies: + after "0.8.2" + arraybuffer.slice "~0.0.7" + base64-arraybuffer "0.1.5" + blob "0.0.5" + has-binary2 "~1.0.2" + +engine.io@~3.2.0: + version "3.2.1" + resolved "https://registry.npm.taobao.org/engine.io/download/engine.io-3.2.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fengine.io%2Fdownload%2Fengine.io-3.2.1.tgz#b60281c35484a70ee0351ea0ebff83ec8c9522a2" + integrity sha1-tgKBw1SEpw7gNR6g6/+D7IyVIqI= + dependencies: + accepts "~1.3.4" + base64id "1.0.0" + cookie "0.3.1" + debug "~3.1.0" + engine.io-parser "~2.1.0" + ws "~3.3.1" + +enhanced-resolve@4.1.0: + version "4.1.0" + resolved "https://registry.npm.taobao.org/enhanced-resolve/download/enhanced-resolve-4.1.0.tgz?cache=0&sync_timestamp=1572991863401&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fenhanced-resolve%2Fdownload%2Fenhanced-resolve-4.1.0.tgz#41c7e0bfdfe74ac1ffe1e57ad6a5c6c9f3742a7f" + integrity sha1-Qcfgv9/nSsH/4eV61qXGyfN0Kn8= + dependencies: + graceful-fs "^4.1.2" + memory-fs "^0.4.0" + tapable "^1.0.0" + +enhanced-resolve@^4.1.0: + version "4.1.1" + resolved "https://registry.npm.taobao.org/enhanced-resolve/download/enhanced-resolve-4.1.1.tgz?cache=0&sync_timestamp=1572991863401&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fenhanced-resolve%2Fdownload%2Fenhanced-resolve-4.1.1.tgz#2937e2b8066cd0fe7ce0990a98f0d71a35189f66" + integrity sha1-KTfiuAZs0P584JkKmPDXGjUYn2Y= + dependencies: + graceful-fs "^4.1.2" + memory-fs "^0.5.0" + tapable "^1.0.0" + +ent@~2.2.0: + version "2.2.0" + resolved "https://registry.npm.taobao.org/ent/download/ent-2.2.0.tgz#e964219325a21d05f44466a2f686ed6ce5f5dd1d" + integrity sha1-6WQhkyWiHQX0RGai9obtbOX13R0= + +err-code@^1.0.0: + version "1.1.2" + resolved "https://registry.npm.taobao.org/err-code/download/err-code-1.1.2.tgz#06e0116d3028f6aef4806849eb0ea6a748ae6960" + integrity sha1-BuARbTAo9q70gGhJ6w6mp0iuaWA= + +errno@^0.1.1, errno@^0.1.3, errno@~0.1.7: + version "0.1.7" + resolved "https://registry.npm.taobao.org/errno/download/errno-0.1.7.tgz#4684d71779ad39af177e3f007996f7c67c852618" + integrity sha1-RoTXF3mtOa8Xfj8AeZb3xnyFJhg= + dependencies: + prr "~1.0.1" + +error-ex@^1.3.1: + version "1.3.2" + resolved "https://registry.npm.taobao.org/error-ex/download/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" + integrity sha1-tKxAZIEH/c3PriQvQovqihTU8b8= + dependencies: + is-arrayish "^0.2.1" + +es-abstract@^1.17.0-next.1: + version "1.17.0" + resolved "https://registry.npm.taobao.org/es-abstract/download/es-abstract-1.17.0.tgz#f42a517d0036a5591dbb2c463591dc8bb50309b1" + integrity sha1-9CpRfQA2pVkduyxGNZHci7UDCbE= + dependencies: + es-to-primitive "^1.2.1" + function-bind "^1.1.1" + has "^1.0.3" + has-symbols "^1.0.1" + is-callable "^1.1.5" + is-regex "^1.0.5" + object-inspect "^1.7.0" + object-keys "^1.1.1" + object.assign "^4.1.0" + string.prototype.trimleft "^2.1.1" + string.prototype.trimright "^2.1.1" + +es-to-primitive@^1.2.1: + version "1.2.1" + resolved "https://registry.npm.taobao.org/es-to-primitive/download/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a" + integrity sha1-5VzUyc3BiLzvsDs2bHNjI/xciYo= + dependencies: + is-callable "^1.1.4" + is-date-object "^1.0.1" + is-symbol "^1.0.2" + +es6-promise@^4.0.3: + version "4.2.8" + resolved "https://registry.npm.taobao.org/es6-promise/download/es6-promise-4.2.8.tgz#4eb21594c972bc40553d276e510539143db53e0a" + integrity sha1-TrIVlMlyvEBVPSduUQU5FD21Pgo= + +es6-promisify@^5.0.0: + version "5.0.0" + resolved "https://registry.npm.taobao.org/es6-promisify/download/es6-promisify-5.0.0.tgz#5109d62f3e56ea967c4b63505aef08291c8a5203" + integrity sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM= + dependencies: + es6-promise "^4.0.3" + +escape-html@~1.0.3: + version "1.0.3" + resolved "https://registry.npm.taobao.org/escape-html/download/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" + integrity sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg= + +escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: + version "1.0.5" + resolved "https://registry.npm.taobao.org/escape-string-regexp/download/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" + integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= + +eslint-scope@^4.0.3: + version "4.0.3" + resolved "https://registry.npm.taobao.org/eslint-scope/download/eslint-scope-4.0.3.tgz#ca03833310f6889a3264781aa82e63eb9cfe7848" + integrity sha1-ygODMxD2iJoyZHgaqC5j65z+eEg= + dependencies: + esrecurse "^4.1.0" + estraverse "^4.1.1" + +esprima@^4.0.0: + version "4.0.1" + resolved "https://registry.npm.taobao.org/esprima/download/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" + integrity sha1-E7BM2z5sXRnfkatph6hpVhmwqnE= + +esrecurse@^4.1.0: + version "4.2.1" + resolved "https://registry.npm.taobao.org/esrecurse/download/esrecurse-4.2.1.tgz#007a3b9fdbc2b3bb87e4879ea19c92fdbd3942cf" + integrity sha1-AHo7n9vCs7uH5IeeoZyS/b05Qs8= + dependencies: + estraverse "^4.1.0" + +estraverse@^4.1.0, estraverse@^4.1.1: + version "4.3.0" + resolved "https://registry.npm.taobao.org/estraverse/download/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" + integrity sha1-OYrT88WiSUi+dyXoPRGn3ijNvR0= + +esutils@^2.0.2: + version "2.0.3" + resolved "https://registry.npm.taobao.org/esutils/download/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" + integrity sha1-dNLrTeC42hKTcRkQ1Qd1ubcQ72Q= + +etag@~1.8.1: + version "1.8.1" + resolved "https://registry.npm.taobao.org/etag/download/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" + integrity sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc= + +eventemitter3@^4.0.0: + version "4.0.0" + resolved "https://registry.npm.taobao.org/eventemitter3/download/eventemitter3-4.0.0.tgz#d65176163887ee59f386d64c82610b696a4a74eb" + integrity sha1-1lF2FjiH7lnzhtZMgmELaWpKdOs= + +events@^3.0.0: + version "3.0.0" + resolved "https://registry.npm.taobao.org/events/download/events-3.0.0.tgz#9a0a0dfaf62893d92b875b8f2698ca4114973e88" + integrity sha1-mgoN+vYok9krh1uPJpjKQRSXPog= + +eventsource@^1.0.7: + version "1.0.7" + resolved "https://registry.npm.taobao.org/eventsource/download/eventsource-1.0.7.tgz#8fbc72c93fcd34088090bc0a4e64f4b5cee6d8d0" + integrity sha1-j7xyyT/NNAiAkLwKTmT0tc7m2NA= + dependencies: + original "^1.0.0" + +evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3: + version "1.0.3" + resolved "https://registry.npm.taobao.org/evp_bytestokey/download/evp_bytestokey-1.0.3.tgz#7fcbdb198dc71959432efe13842684e0525acb02" + integrity sha1-f8vbGY3HGVlDLv4ThCaE4FJaywI= + dependencies: + md5.js "^1.3.4" + safe-buffer "^5.1.1" + +execa@^1.0.0: + version "1.0.0" + resolved "https://registry.npm.taobao.org/execa/download/execa-1.0.0.tgz#c6236a5bb4df6d6f15e88e7f017798216749ddd8" + integrity sha1-xiNqW7TfbW8V6I5/AXeYIWdJ3dg= + dependencies: + cross-spawn "^6.0.0" + get-stream "^4.0.0" + is-stream "^1.1.0" + npm-run-path "^2.0.0" + p-finally "^1.0.0" + signal-exit "^3.0.0" + strip-eof "^1.0.0" + +exit@^0.1.2: + version "0.1.2" + resolved "https://registry.npm.taobao.org/exit/download/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c" + integrity sha1-BjJjj42HfMghB9MKD/8aF8uhzQw= + +expand-brackets@^2.1.4: + version "2.1.4" + resolved "https://registry.npm.taobao.org/expand-brackets/download/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622" + integrity sha1-t3c14xXOMPa27/D4OwQVGiJEliI= + dependencies: + debug "^2.3.3" + define-property "^0.2.5" + extend-shallow "^2.0.1" + posix-character-classes "^0.1.0" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.1" + +express@^4.17.1: + version "4.17.1" + resolved "https://registry.npm.taobao.org/express/download/express-4.17.1.tgz#4491fc38605cf51f8629d39c2b5d026f98a4c134" + integrity sha1-RJH8OGBc9R+GKdOcK10Cb5ikwTQ= + dependencies: + accepts "~1.3.7" + array-flatten "1.1.1" + body-parser "1.19.0" + content-disposition "0.5.3" + content-type "~1.0.4" + cookie "0.4.0" + cookie-signature "1.0.6" + debug "2.6.9" + depd "~1.1.2" + encodeurl "~1.0.2" + escape-html "~1.0.3" + etag "~1.8.1" + finalhandler "~1.1.2" + fresh "0.5.2" + merge-descriptors "1.0.1" + methods "~1.1.2" + on-finished "~2.3.0" + parseurl "~1.3.3" + path-to-regexp "0.1.7" + proxy-addr "~2.0.5" + qs "6.7.0" + range-parser "~1.2.1" + safe-buffer "5.1.2" + send "0.17.1" + serve-static "1.14.1" + setprototypeof "1.1.1" + statuses "~1.5.0" + type-is "~1.6.18" + utils-merge "1.0.1" + vary "~1.1.2" + +extend-shallow@^2.0.1: + version "2.0.1" + resolved "https://registry.npm.taobao.org/extend-shallow/download/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" + integrity sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8= + dependencies: + is-extendable "^0.1.0" + +extend-shallow@^3.0.0, extend-shallow@^3.0.2: + version "3.0.2" + resolved "https://registry.npm.taobao.org/extend-shallow/download/extend-shallow-3.0.2.tgz#26a71aaf073b39fb2127172746131c2704028db8" + integrity sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg= + dependencies: + assign-symbols "^1.0.0" + is-extendable "^1.0.1" + +extend@^3.0.0, extend@~3.0.2: + version "3.0.2" + resolved "https://registry.npm.taobao.org/extend/download/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" + integrity sha1-+LETa0Bx+9jrFAr/hYsQGewpFfo= + +external-editor@^3.0.3: + version "3.1.0" + resolved "https://registry.npm.taobao.org/external-editor/download/external-editor-3.1.0.tgz#cb03f740befae03ea4d283caed2741a83f335495" + integrity sha1-ywP3QL764D6k0oPK7SdBqD8zVJU= + dependencies: + chardet "^0.7.0" + iconv-lite "^0.4.24" + tmp "^0.0.33" + +extglob@^2.0.4: + version "2.0.4" + resolved "https://registry.npm.taobao.org/extglob/download/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543" + integrity sha1-rQD+TcYSqSMuhxhxHcXLWrAoVUM= + dependencies: + array-unique "^0.3.2" + define-property "^1.0.0" + expand-brackets "^2.1.4" + extend-shallow "^2.0.1" + fragment-cache "^0.2.1" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.1" + +extsprintf@1.3.0: + version "1.3.0" + resolved "https://registry.npm.taobao.org/extsprintf/download/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" + integrity sha1-lpGEQOMEGnpBT4xS48V06zw+HgU= + +extsprintf@^1.2.0: + version "1.4.0" + resolved "https://registry.npm.taobao.org/extsprintf/download/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f" + integrity sha1-4mifjzVvrWLMplo6kcXfX5VRaS8= + +fast-deep-equal@^1.0.0: + version "1.1.0" + resolved "https://registry.npm.taobao.org/fast-deep-equal/download/fast-deep-equal-1.1.0.tgz?cache=0&sync_timestamp=1575383522243&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffast-deep-equal%2Fdownload%2Ffast-deep-equal-1.1.0.tgz#c053477817c86b51daa853c81e059b733d023614" + integrity sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ= + +fast-deep-equal@^2.0.1: + version "2.0.1" + resolved "https://registry.npm.taobao.org/fast-deep-equal/download/fast-deep-equal-2.0.1.tgz?cache=0&sync_timestamp=1575383522243&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffast-deep-equal%2Fdownload%2Ffast-deep-equal-2.0.1.tgz#7b05218ddf9667bf7f370bf7fdb2cb15fdd0aa49" + integrity sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk= + +fast-json-stable-stringify@2.0.0: + version "2.0.0" + resolved "https://registry.npm.taobao.org/fast-json-stable-stringify/download/fast-json-stable-stringify-2.0.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffast-json-stable-stringify%2Fdownload%2Ffast-json-stable-stringify-2.0.0.tgz#d5142c0caee6b1189f87d3a76111064f86c8bbf2" + integrity sha1-1RQsDK7msRifh9OnYREGT4bIu/I= + +fast-json-stable-stringify@^2.0.0: + version "2.1.0" + resolved "https://registry.npm.taobao.org/fast-json-stable-stringify/download/fast-json-stable-stringify-2.1.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffast-json-stable-stringify%2Fdownload%2Ffast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" + integrity sha1-h0v2nG9ATCtdmcSBNBOZ/VWJJjM= + +fastparse@^1.1.1: + version "1.1.2" + resolved "https://registry.npm.taobao.org/fastparse/download/fastparse-1.1.2.tgz#91728c5a5942eced8531283c79441ee4122c35a9" + integrity sha1-kXKMWllC7O2FMSg8eUQe5BIsNak= + +faye-websocket@^0.10.0: + version "0.10.0" + resolved "https://registry.npm.taobao.org/faye-websocket/download/faye-websocket-0.10.0.tgz#4e492f8d04dfb6f89003507f6edbf2d501e7c6f4" + integrity sha1-TkkvjQTftviQA1B/btvy1QHnxvQ= + dependencies: + websocket-driver ">=0.5.1" + +faye-websocket@~0.11.1: + version "0.11.3" + resolved "https://registry.npm.taobao.org/faye-websocket/download/faye-websocket-0.11.3.tgz#5c0e9a8968e8912c286639fde977a8b209f2508e" + integrity sha1-XA6aiWjokSwoZjn96XeosgnyUI4= + dependencies: + websocket-driver ">=0.5.1" + +figgy-pudding@^3.4.1, figgy-pudding@^3.5.1: + version "3.5.1" + resolved "https://registry.npm.taobao.org/figgy-pudding/download/figgy-pudding-3.5.1.tgz#862470112901c727a0e495a80744bd5baa1d6790" + integrity sha1-hiRwESkBxyeg5JWoB0S9W6odZ5A= + +figures@^3.0.0: + version "3.1.0" + resolved "https://registry.npm.taobao.org/figures/download/figures-3.1.0.tgz?cache=0&sync_timestamp=1571715625804&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffigures%2Fdownload%2Ffigures-3.1.0.tgz#4b198dd07d8d71530642864af2d45dd9e459c4ec" + integrity sha1-SxmN0H2NcVMGQoZK8tRd2eRZxOw= + dependencies: + escape-string-regexp "^1.0.5" + +file-loader@4.2.0: + version "4.2.0" + resolved "https://registry.npm.taobao.org/file-loader/download/file-loader-4.2.0.tgz#5fb124d2369d7075d70a9a5abecd12e60a95215e" + integrity sha1-X7Ek0jadcHXXCppavs0S5gqVIV4= + dependencies: + loader-utils "^1.2.3" + schema-utils "^2.0.0" + +file-uri-to-path@1.0.0: + version "1.0.0" + resolved "https://registry.npm.taobao.org/file-uri-to-path/download/file-uri-to-path-1.0.0.tgz?cache=0&sync_timestamp=1570825475173&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffile-uri-to-path%2Fdownload%2Ffile-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd" + integrity sha1-VTp7hEb/b2hDWcRF8eN6BdrMM90= + +fileset@^2.0.3: + version "2.0.3" + resolved "https://registry.npm.taobao.org/fileset/download/fileset-2.0.3.tgz#8e7548a96d3cc2327ee5e674168723a333bba2a0" + integrity sha1-jnVIqW08wjJ+5eZ0FocjozO7oqA= + dependencies: + glob "^7.0.3" + minimatch "^3.0.3" + +fill-range@^4.0.0: + version "4.0.0" + resolved "https://registry.npm.taobao.org/fill-range/download/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7" + integrity sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc= + dependencies: + extend-shallow "^2.0.1" + is-number "^3.0.0" + repeat-string "^1.6.1" + to-regex-range "^2.1.0" + +fill-range@^7.0.1: + version "7.0.1" + resolved "https://registry.npm.taobao.org/fill-range/download/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" + integrity sha1-GRmmp8df44ssfHflGYU12prN2kA= + dependencies: + to-regex-range "^5.0.1" + +finalhandler@1.1.2, finalhandler@~1.1.2: + version "1.1.2" + resolved "https://registry.npm.taobao.org/finalhandler/download/finalhandler-1.1.2.tgz#b7e7d000ffd11938d0fdb053506f6ebabe9f587d" + integrity sha1-t+fQAP/RGTjQ/bBTUG9uur6fWH0= + dependencies: + debug "2.6.9" + encodeurl "~1.0.2" + escape-html "~1.0.3" + on-finished "~2.3.0" + parseurl "~1.3.3" + statuses "~1.5.0" + unpipe "~1.0.0" + +find-cache-dir@3.0.0: + version "3.0.0" + resolved "https://registry.npm.taobao.org/find-cache-dir/download/find-cache-dir-3.0.0.tgz#cd4b7dd97b7185b7e17dbfe2d6e4115ee3eeb8fc" + integrity sha1-zUt92Xtxhbfhfb/i1uQRXuPuuPw= + dependencies: + commondir "^1.0.1" + make-dir "^3.0.0" + pkg-dir "^4.1.0" + +find-cache-dir@^2.1.0: + version "2.1.0" + resolved "https://registry.npm.taobao.org/find-cache-dir/download/find-cache-dir-2.1.0.tgz#8d0f94cd13fe43c6c7c261a0d86115ca918c05f7" + integrity sha1-jQ+UzRP+Q8bHwmGg2GEVypGMBfc= + dependencies: + commondir "^1.0.1" + make-dir "^2.0.0" + pkg-dir "^3.0.0" + +find-up@^3.0.0: + version "3.0.0" + resolved "https://registry.npm.taobao.org/find-up/download/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73" + integrity sha1-SRafHXmTQwZG2mHsxa41XCHJe3M= + dependencies: + locate-path "^3.0.0" + +find-up@^4.0.0: + version "4.1.0" + resolved "https://registry.npm.taobao.org/find-up/download/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" + integrity sha1-l6/n1s3AvFkoWEt8jXsW6KmqXRk= + dependencies: + locate-path "^5.0.0" + path-exists "^4.0.0" + +flatted@^2.0.0: + version "2.0.1" + resolved "https://registry.npm.taobao.org/flatted/download/flatted-2.0.1.tgz#69e57caa8f0eacbc281d2e2cb458d46fdb449e08" + integrity sha1-aeV8qo8OrLwoHS4stFjUb9tEngg= + +flush-write-stream@^1.0.0: + version "1.1.1" + resolved "https://registry.npm.taobao.org/flush-write-stream/download/flush-write-stream-1.1.1.tgz#8dd7d873a1babc207d94ead0c2e0e44276ebf2e8" + integrity sha1-jdfYc6G6vCB9lOrQwuDkQnbr8ug= + dependencies: + inherits "^2.0.3" + readable-stream "^2.3.6" + +follow-redirects@^1.0.0: + version "1.9.0" + resolved "https://registry.npm.taobao.org/follow-redirects/download/follow-redirects-1.9.0.tgz#8d5bcdc65b7108fe1508649c79c12d732dcedb4f" + integrity sha1-jVvNxltxCP4VCGScecEtcy3O208= + dependencies: + debug "^3.0.0" + +for-in@^1.0.2: + version "1.0.2" + resolved "https://registry.npm.taobao.org/for-in/download/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" + integrity sha1-gQaNKVqBQuwKxybG4iAMMPttXoA= + +forever-agent@~0.6.1: + version "0.6.1" + resolved "https://registry.npm.taobao.org/forever-agent/download/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" + integrity sha1-+8cfDEGt6zf5bFd60e1C2P2sypE= + +form-data@~2.3.2: + version "2.3.3" + resolved "https://registry.npm.taobao.org/form-data/download/form-data-2.3.3.tgz?cache=0&sync_timestamp=1573027040291&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fform-data%2Fdownload%2Fform-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6" + integrity sha1-3M5SwF9kTymManq5Nr1yTO/786Y= + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.6" + mime-types "^2.1.12" + +forwarded@~0.1.2: + version "0.1.2" + resolved "https://registry.npm.taobao.org/forwarded/download/forwarded-0.1.2.tgz#98c23dab1175657b8c0573e8ceccd91b0ff18c84" + integrity sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ= + +fragment-cache@^0.2.1: + version "0.2.1" + resolved "https://registry.npm.taobao.org/fragment-cache/download/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19" + integrity sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk= + dependencies: + map-cache "^0.2.2" + +fresh@0.5.2: + version "0.5.2" + resolved "https://registry.npm.taobao.org/fresh/download/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" + integrity sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac= + +from2@^2.1.0: + version "2.3.0" + resolved "https://registry.npm.taobao.org/from2/download/from2-2.3.0.tgz#8bfb5502bde4a4d36cfdeea007fcca21d7e382af" + integrity sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8= + dependencies: + inherits "^2.0.1" + readable-stream "^2.0.0" + +fs-access@^1.0.0: + version "1.0.1" + resolved "https://registry.npm.taobao.org/fs-access/download/fs-access-1.0.1.tgz#d6a87f262271cefebec30c553407fb995da8777a" + integrity sha1-1qh/JiJxzv6+wwxVNAf7mV2od3o= + dependencies: + null-check "^1.0.0" + +fs-extra@^7.0.1: + version "7.0.1" + resolved "https://registry.npm.taobao.org/fs-extra/download/fs-extra-7.0.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffs-extra%2Fdownload%2Ffs-extra-7.0.1.tgz#4f189c44aa123b895f722804f55ea23eadc348e9" + integrity sha1-TxicRKoSO4lfcigE9V6iPq3DSOk= + dependencies: + graceful-fs "^4.1.2" + jsonfile "^4.0.0" + universalify "^0.1.0" + +fs-minipass@^1.2.5: + version "1.2.7" + resolved "https://registry.npm.taobao.org/fs-minipass/download/fs-minipass-1.2.7.tgz?cache=0&sync_timestamp=1569875077546&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffs-minipass%2Fdownload%2Ffs-minipass-1.2.7.tgz#ccff8570841e7fe4265693da88936c55aed7f7c7" + integrity sha1-zP+FcIQef+QmVpPaiJNsVa7X98c= + dependencies: + minipass "^2.6.0" + +fs-write-stream-atomic@^1.0.8: + version "1.0.10" + resolved "https://registry.npm.taobao.org/fs-write-stream-atomic/download/fs-write-stream-atomic-1.0.10.tgz#b47df53493ef911df75731e70a9ded0189db40c9" + integrity sha1-tH31NJPvkR33VzHnCp3tAYnbQMk= + dependencies: + graceful-fs "^4.1.2" + iferr "^0.1.5" + imurmurhash "^0.1.4" + readable-stream "1 || 2" + +fs.realpath@^1.0.0: + version "1.0.0" + resolved "https://registry.npm.taobao.org/fs.realpath/download/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= + +fsevents@^1.2.7: + version "1.2.11" + resolved "https://registry.npm.taobao.org/fsevents/download/fsevents-1.2.11.tgz?cache=0&sync_timestamp=1576322957668&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffsevents%2Fdownload%2Ffsevents-1.2.11.tgz#67bf57f4758f02ede88fb2a1712fef4d15358be3" + integrity sha1-Z79X9HWPAu3oj7KhcS/vTRU1i+M= + dependencies: + bindings "^1.5.0" + nan "^2.12.1" + +fsevents@~2.1.2: + version "2.1.2" + resolved "https://registry.npm.taobao.org/fsevents/download/fsevents-2.1.2.tgz?cache=0&sync_timestamp=1576322957668&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffsevents%2Fdownload%2Ffsevents-2.1.2.tgz#4c0a1fb34bc68e543b4b82a9ec392bfbda840805" + integrity sha1-TAofs0vGjlQ7S4Kp7Dkr+9qECAU= + +function-bind@^1.1.1: + version "1.1.1" + resolved "https://registry.npm.taobao.org/function-bind/download/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" + integrity sha1-pWiZ0+o8m6uHS7l3O3xe3pL0iV0= + +gauge@~2.7.3: + version "2.7.4" + resolved "https://registry.npm.taobao.org/gauge/download/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7" + integrity sha1-LANAXHU4w51+s3sxcCLjJfsBi/c= + dependencies: + aproba "^1.0.3" + console-control-strings "^1.0.0" + has-unicode "^2.0.0" + object-assign "^4.1.0" + signal-exit "^3.0.0" + string-width "^1.0.1" + strip-ansi "^3.0.1" + wide-align "^1.1.0" + +genfun@^5.0.0: + version "5.0.0" + resolved "https://registry.npm.taobao.org/genfun/download/genfun-5.0.0.tgz#9dd9710a06900a5c4a5bf57aca5da4e52fe76537" + integrity sha1-ndlxCgaQClxKW/V6yl2k5S/nZTc= + +get-caller-file@^1.0.1: + version "1.0.3" + resolved "https://registry.npm.taobao.org/get-caller-file/download/get-caller-file-1.0.3.tgz#f978fa4c90d1dfe7ff2d6beda2a515e713bdcf4a" + integrity sha1-+Xj6TJDR3+f/LWvtoqUV5xO9z0o= + +get-caller-file@^2.0.1: + version "2.0.5" + resolved "https://registry.npm.taobao.org/get-caller-file/download/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" + integrity sha1-T5RBKoLbMvNuOwuXQfipf+sDH34= + +get-stream@^4.0.0, get-stream@^4.1.0: + version "4.1.0" + resolved "https://registry.npm.taobao.org/get-stream/download/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" + integrity sha1-wbJVV189wh1Zv8ec09K0axw6VLU= + dependencies: + pump "^3.0.0" + +get-value@^2.0.3, get-value@^2.0.6: + version "2.0.6" + resolved "https://registry.npm.taobao.org/get-value/download/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28" + integrity sha1-3BXKHGcjh8p2vTesCjlbogQqLCg= + +getpass@^0.1.1: + version "0.1.7" + resolved "https://registry.npm.taobao.org/getpass/download/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" + integrity sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo= + dependencies: + assert-plus "^1.0.0" + +glob-parent@^3.1.0: + version "3.1.0" + resolved "https://registry.npm.taobao.org/glob-parent/download/glob-parent-3.1.0.tgz?cache=0&sync_timestamp=1569136652060&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fglob-parent%2Fdownload%2Fglob-parent-3.1.0.tgz#9e6af6299d8d3bd2bd40430832bd113df906c5ae" + integrity sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4= + dependencies: + is-glob "^3.1.0" + path-dirname "^1.0.0" + +glob-parent@~5.1.0: + version "5.1.0" + resolved "https://registry.npm.taobao.org/glob-parent/download/glob-parent-5.1.0.tgz?cache=0&sync_timestamp=1569136652060&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fglob-parent%2Fdownload%2Fglob-parent-5.1.0.tgz#5f4c1d1e748d30cd73ad2944b3577a81b081e8c2" + integrity sha1-X0wdHnSNMM1zrSlEs1d6gbCB6MI= + dependencies: + is-glob "^4.0.1" + +glob@7.0.x: + version "7.0.6" + resolved "https://registry.npm.taobao.org/glob/download/glob-7.0.6.tgz#211bafaf49e525b8cd93260d14ab136152b3f57a" + integrity sha1-IRuvr0nlJbjNkyYNFKsTYVKz9Xo= + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.2" + once "^1.3.0" + path-is-absolute "^1.0.0" + +glob@7.1.4: + version "7.1.4" + resolved "https://registry.npm.taobao.org/glob/download/glob-7.1.4.tgz#aa608a2f6c577ad357e1ae5a5c26d9a8d1969255" + integrity sha1-qmCKL2xXetNX4a5aXCbZqNGWklU= + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.4" + once "^1.3.0" + path-is-absolute "^1.0.0" + +glob@^7.0.3, glob@^7.0.6, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4: + version "7.1.6" + resolved "https://registry.npm.taobao.org/glob/download/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" + integrity sha1-FB8zuBp8JJLhJVlDB0gMRmeSeKY= + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.4" + once "^1.3.0" + path-is-absolute "^1.0.0" + +globals@^11.1.0: + version "11.12.0" + resolved "https://registry.npm.taobao.org/globals/download/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" + integrity sha1-q4eVM4hooLq9hSV1gBjCp+uVxC4= + +globals@^9.18.0: + version "9.18.0" + resolved "https://registry.npm.taobao.org/globals/download/globals-9.18.0.tgz#aa3896b3e69b487f17e31ed2143d69a8e30c2d8a" + integrity sha1-qjiWs+abSH8X4x7SFD1pqOMMLYo= + +globby@^5.0.0: + version "5.0.0" + resolved "https://registry.npm.taobao.org/globby/download/globby-5.0.0.tgz#ebd84667ca0dbb330b99bcfc68eac2bc54370e0d" + integrity sha1-69hGZ8oNuzMLmbz8aOrCvFQ3Dg0= + dependencies: + array-union "^1.0.1" + arrify "^1.0.0" + glob "^7.0.3" + object-assign "^4.0.1" + pify "^2.0.0" + pinkie-promise "^2.0.0" + +globby@^6.1.0: + version "6.1.0" + resolved "https://registry.npm.taobao.org/globby/download/globby-6.1.0.tgz#f5a6d70e8395e21c858fb0489d64df02424d506c" + integrity sha1-9abXDoOV4hyFj7BInWTfAkJNUGw= + dependencies: + array-union "^1.0.1" + glob "^7.0.3" + object-assign "^4.0.1" + pify "^2.0.0" + pinkie-promise "^2.0.0" + +globby@^7.1.1: + version "7.1.1" + resolved "https://registry.npm.taobao.org/globby/download/globby-7.1.1.tgz#fb2ccff9401f8600945dfada97440cca972b8680" + integrity sha1-+yzP+UAfhgCUXfral0QMypcrhoA= + dependencies: + array-union "^1.0.1" + dir-glob "^2.0.0" + glob "^7.1.2" + ignore "^3.3.5" + pify "^3.0.0" + slash "^1.0.0" + +graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6: + version "4.2.3" + resolved "https://registry.npm.taobao.org/graceful-fs/download/graceful-fs-4.2.3.tgz#4a12ff1b60376ef09862c2093edd908328be8423" + integrity sha1-ShL/G2A3bvCYYsIJPt2Qgyi+hCM= + +handle-thing@^2.0.0: + version "2.0.0" + resolved "https://registry.npm.taobao.org/handle-thing/download/handle-thing-2.0.0.tgz#0e039695ff50c93fc288557d696f3c1dc6776754" + integrity sha1-DgOWlf9QyT/CiFV9aW88HcZ3Z1Q= + +handlebars@^4.1.2: + version "4.5.3" + resolved "https://registry.npm.taobao.org/handlebars/download/handlebars-4.5.3.tgz?cache=0&sync_timestamp=1574061065936&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fhandlebars%2Fdownload%2Fhandlebars-4.5.3.tgz#5cf75bd8714f7605713511a56be7c349becb0482" + integrity sha1-XPdb2HFPdgVxNRGla+fDSb7LBII= + dependencies: + neo-async "^2.6.0" + optimist "^0.6.1" + source-map "^0.6.1" + optionalDependencies: + uglify-js "^3.1.4" + +har-schema@^2.0.0: + version "2.0.0" + resolved "https://registry.npm.taobao.org/har-schema/download/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" + integrity sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI= + +har-validator@~5.1.0: + version "5.1.3" + resolved "https://registry.npm.taobao.org/har-validator/download/har-validator-5.1.3.tgz#1ef89ebd3e4996557675eed9893110dc350fa080" + integrity sha1-HvievT5JllV2de7ZiTEQ3DUPoIA= + dependencies: + ajv "^6.5.5" + har-schema "^2.0.0" + +has-ansi@^2.0.0: + version "2.0.0" + resolved "https://registry.npm.taobao.org/has-ansi/download/has-ansi-2.0.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fhas-ansi%2Fdownload%2Fhas-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" + integrity sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE= + dependencies: + ansi-regex "^2.0.0" + +has-binary2@~1.0.2: + version "1.0.3" + resolved "https://registry.npm.taobao.org/has-binary2/download/has-binary2-1.0.3.tgz#7776ac627f3ea77250cfc332dab7ddf5e4f5d11d" + integrity sha1-d3asYn8+p3JQz8My2rfd9eT10R0= + dependencies: + isarray "2.0.1" + +has-cors@1.1.0: + version "1.1.0" + resolved "https://registry.npm.taobao.org/has-cors/download/has-cors-1.1.0.tgz#5e474793f7ea9843d1bb99c23eef49ff126fff39" + integrity sha1-XkdHk/fqmEPRu5nCPu9J/xJv/zk= + +has-flag@^3.0.0: + version "3.0.0" + resolved "https://registry.npm.taobao.org/has-flag/download/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" + integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= + +has-symbols@^1.0.0, has-symbols@^1.0.1: + version "1.0.1" + resolved "https://registry.npm.taobao.org/has-symbols/download/has-symbols-1.0.1.tgz?cache=0&sync_timestamp=1573950719586&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fhas-symbols%2Fdownload%2Fhas-symbols-1.0.1.tgz#9f5214758a44196c406d9bd76cebf81ec2dd31e8" + integrity sha1-n1IUdYpEGWxAbZvXbOv4HsLdMeg= + +has-unicode@^2.0.0: + version "2.0.1" + resolved "https://registry.npm.taobao.org/has-unicode/download/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" + integrity sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk= + +has-value@^0.3.1: + version "0.3.1" + resolved "https://registry.npm.taobao.org/has-value/download/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f" + integrity sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8= + dependencies: + get-value "^2.0.3" + has-values "^0.1.4" + isobject "^2.0.0" + +has-value@^1.0.0: + version "1.0.0" + resolved "https://registry.npm.taobao.org/has-value/download/has-value-1.0.0.tgz#18b281da585b1c5c51def24c930ed29a0be6b177" + integrity sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc= + dependencies: + get-value "^2.0.6" + has-values "^1.0.0" + isobject "^3.0.0" + +has-values@^0.1.4: + version "0.1.4" + resolved "https://registry.npm.taobao.org/has-values/download/has-values-0.1.4.tgz#6d61de95d91dfca9b9a02089ad384bff8f62b771" + integrity sha1-bWHeldkd/Km5oCCJrThL/49it3E= + +has-values@^1.0.0: + version "1.0.0" + resolved "https://registry.npm.taobao.org/has-values/download/has-values-1.0.0.tgz#95b0b63fec2146619a6fe57fe75628d5a39efe4f" + integrity sha1-lbC2P+whRmGab+V/51Yo1aOe/k8= + dependencies: + is-number "^3.0.0" + kind-of "^4.0.0" + +has@^1.0.3: + version "1.0.3" + resolved "https://registry.npm.taobao.org/has/download/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" + integrity sha1-ci18v8H2qoJB8W3YFOAR4fQeh5Y= + dependencies: + function-bind "^1.1.1" + +hash-base@^3.0.0: + version "3.0.4" + resolved "https://registry.npm.taobao.org/hash-base/download/hash-base-3.0.4.tgz#5fc8686847ecd73499403319a6b0a3f3f6ae4918" + integrity sha1-X8hoaEfs1zSZQDMZprCj8/auSRg= + dependencies: + inherits "^2.0.1" + safe-buffer "^5.0.1" + +hash.js@^1.0.0, hash.js@^1.0.3: + version "1.1.7" + resolved "https://registry.npm.taobao.org/hash.js/download/hash.js-1.1.7.tgz#0babca538e8d4ee4a0f8988d68866537a003cf42" + integrity sha1-C6vKU46NTuSg+JiNaIZlN6ADz0I= + dependencies: + inherits "^2.0.3" + minimalistic-assert "^1.0.1" + +hmac-drbg@^1.0.0: + version "1.0.1" + resolved "https://registry.npm.taobao.org/hmac-drbg/download/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1" + integrity sha1-0nRXAQJabHdabFRXk+1QL8DGSaE= + dependencies: + hash.js "^1.0.3" + minimalistic-assert "^1.0.0" + minimalistic-crypto-utils "^1.0.1" + +hosted-git-info@^2.1.4, hosted-git-info@^2.6.0, hosted-git-info@^2.7.1: + version "2.8.5" + resolved "https://registry.npm.taobao.org/hosted-git-info/download/hosted-git-info-2.8.5.tgz#759cfcf2c4d156ade59b0b2dfabddc42a6b9c70c" + integrity sha1-dZz88sTRVq3lmwst+r3cQqa5xww= + +hpack.js@^2.1.6: + version "2.1.6" + resolved "https://registry.npm.taobao.org/hpack.js/download/hpack.js-2.1.6.tgz#87774c0949e513f42e84575b3c45681fade2a0b2" + integrity sha1-h3dMCUnlE/QuhFdbPEVoH63ioLI= + dependencies: + inherits "^2.0.1" + obuf "^1.0.0" + readable-stream "^2.0.1" + wbuf "^1.1.0" + +html-entities@^1.2.1: + version "1.2.1" + resolved "https://registry.npm.taobao.org/html-entities/download/html-entities-1.2.1.tgz#0df29351f0721163515dfb9e5543e5f6eed5162f" + integrity sha1-DfKTUfByEWNRXfueVUPl9u7VFi8= + +http-cache-semantics@^3.8.1: + version "3.8.1" + resolved "https://registry.npm.taobao.org/http-cache-semantics/download/http-cache-semantics-3.8.1.tgz#39b0e16add9b605bf0a9ef3d9daaf4843b4cacd2" + integrity sha1-ObDhat2bYFvwqe89nar0hDtMrNI= + +http-deceiver@^1.2.7: + version "1.2.7" + resolved "https://registry.npm.taobao.org/http-deceiver/download/http-deceiver-1.2.7.tgz#fa7168944ab9a519d337cb0bec7284dc3e723d87" + integrity sha1-+nFolEq5pRnTN8sL7HKE3D5yPYc= + +http-errors@1.7.2: + version "1.7.2" + resolved "https://registry.npm.taobao.org/http-errors/download/http-errors-1.7.2.tgz#4f5029cf13239f31036e5b2e55292bcfbcc85c8f" + integrity sha1-T1ApzxMjnzEDblsuVSkrz7zIXI8= + dependencies: + depd "~1.1.2" + inherits "2.0.3" + setprototypeof "1.1.1" + statuses ">= 1.5.0 < 2" + toidentifier "1.0.0" + +http-errors@~1.6.2: + version "1.6.3" + resolved "https://registry.npm.taobao.org/http-errors/download/http-errors-1.6.3.tgz#8b55680bb4be283a0b5bf4ea2e38580be1d9320d" + integrity sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0= + dependencies: + depd "~1.1.2" + inherits "2.0.3" + setprototypeof "1.1.0" + statuses ">= 1.4.0 < 2" + +http-errors@~1.7.2: + version "1.7.3" + resolved "https://registry.npm.taobao.org/http-errors/download/http-errors-1.7.3.tgz#6c619e4f9c60308c38519498c14fbb10aacebb06" + integrity sha1-bGGeT5xgMIw4UZSYwU+7EKrOuwY= + dependencies: + depd "~1.1.2" + inherits "2.0.4" + setprototypeof "1.1.1" + statuses ">= 1.5.0 < 2" + toidentifier "1.0.0" + +"http-parser-js@>=0.4.0 <0.4.11": + version "0.4.10" + resolved "https://registry.npm.taobao.org/http-parser-js/download/http-parser-js-0.4.10.tgz?cache=0&sync_timestamp=1572714277347&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fhttp-parser-js%2Fdownload%2Fhttp-parser-js-0.4.10.tgz#92c9c1374c35085f75db359ec56cc257cbb93fa4" + integrity sha1-ksnBN0w1CF912zWexWzCV8u5P6Q= + +http-proxy-agent@^2.1.0: + version "2.1.0" + resolved "https://registry.npm.taobao.org/http-proxy-agent/download/http-proxy-agent-2.1.0.tgz?cache=0&sync_timestamp=1576011099220&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fhttp-proxy-agent%2Fdownload%2Fhttp-proxy-agent-2.1.0.tgz#e4821beef5b2142a2026bd73926fe537631c5405" + integrity sha1-5IIb7vWyFCogJr1zkm/lN2McVAU= + dependencies: + agent-base "4" + debug "3.1.0" + +http-proxy-middleware@0.19.1: + version "0.19.1" + resolved "https://registry.npm.taobao.org/http-proxy-middleware/download/http-proxy-middleware-0.19.1.tgz#183c7dc4aa1479150306498c210cdaf96080a43a" + integrity sha1-GDx9xKoUeRUDBkmMIQza+WCApDo= + dependencies: + http-proxy "^1.17.0" + is-glob "^4.0.0" + lodash "^4.17.11" + micromatch "^3.1.10" + +http-proxy@^1.13.0, http-proxy@^1.17.0: + version "1.18.0" + resolved "https://registry.npm.taobao.org/http-proxy/download/http-proxy-1.18.0.tgz?cache=0&sync_timestamp=1568770896103&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fhttp-proxy%2Fdownload%2Fhttp-proxy-1.18.0.tgz#dbe55f63e75a347db7f3d99974f2692a314a6a3a" + integrity sha1-2+VfY+daNH2389mZdPJpKjFKajo= + dependencies: + eventemitter3 "^4.0.0" + follow-redirects "^1.0.0" + requires-port "^1.0.0" + +http-signature@~1.2.0: + version "1.2.0" + resolved "https://registry.npm.taobao.org/http-signature/download/http-signature-1.2.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fhttp-signature%2Fdownload%2Fhttp-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1" + integrity sha1-muzZJRFHcvPZW2WmCruPfBj7rOE= + dependencies: + assert-plus "^1.0.0" + jsprim "^1.2.2" + sshpk "^1.7.0" + +https-browserify@^1.0.0: + version "1.0.0" + resolved "https://registry.npm.taobao.org/https-browserify/download/https-browserify-1.0.0.tgz#ec06c10e0a34c0f2faf199f7fd7fc78fffd03c73" + integrity sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM= + +https-proxy-agent@^2.2.1, https-proxy-agent@^2.2.3: + version "2.2.4" + resolved "https://registry.npm.taobao.org/https-proxy-agent/download/https-proxy-agent-2.2.4.tgz?cache=0&sync_timestamp=1576013885663&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fhttps-proxy-agent%2Fdownload%2Fhttps-proxy-agent-2.2.4.tgz#4ee7a737abd92678a293d9b34a1af4d0d08c787b" + integrity sha1-TuenN6vZJniik9mzShr00NCMeHs= + dependencies: + agent-base "^4.3.0" + debug "^3.1.0" + +humanize-ms@^1.2.1: + version "1.2.1" + resolved "https://registry.npm.taobao.org/humanize-ms/download/humanize-ms-1.2.1.tgz#c46e3159a293f6b896da29316d8b6fe8bb79bbed" + integrity sha1-xG4xWaKT9riW2ikxbYtv6Lt5u+0= + dependencies: + ms "^2.0.0" + +iconv-lite@0.4.24, iconv-lite@^0.4.24, iconv-lite@^0.4.4, iconv-lite@~0.4.13: + version "0.4.24" + resolved "https://registry.npm.taobao.org/iconv-lite/download/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" + integrity sha1-ICK0sl+93CHS9SSXSkdKr+czkIs= + dependencies: + safer-buffer ">= 2.1.2 < 3" + +ieee754@^1.1.4: + version "1.1.13" + resolved "https://registry.npm.taobao.org/ieee754/download/ieee754-1.1.13.tgz#ec168558e95aa181fd87d37f55c32bbcb6708b84" + integrity sha1-7BaFWOlaoYH9h9N/VcMrvLZwi4Q= + +iferr@^0.1.5: + version "0.1.5" + resolved "https://registry.npm.taobao.org/iferr/download/iferr-0.1.5.tgz#c60eed69e6d8fdb6b3104a1fcbca1c192dc5b501" + integrity sha1-xg7taebY/bazEEofy8ocGS3FtQE= + +ignore-walk@^3.0.1: + version "3.0.3" + resolved "https://registry.npm.taobao.org/ignore-walk/download/ignore-walk-3.0.3.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fignore-walk%2Fdownload%2Fignore-walk-3.0.3.tgz#017e2447184bfeade7c238e4aefdd1e8f95b1e37" + integrity sha1-AX4kRxhL/q3nwjjkrv3R6PlbHjc= + dependencies: + minimatch "^3.0.4" + +ignore@^3.3.5: + version "3.3.10" + resolved "https://registry.npm.taobao.org/ignore/download/ignore-3.3.10.tgz#0a97fb876986e8081c631160f8f9f389157f0043" + integrity sha1-Cpf7h2mG6AgcYxFg+PnziRV/AEM= + +image-size@~0.5.0: + version "0.5.5" + resolved "https://registry.npm.taobao.org/image-size/download/image-size-0.5.5.tgz?cache=0&sync_timestamp=1569841504754&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fimage-size%2Fdownload%2Fimage-size-0.5.5.tgz#09dfd4ab9d20e29eb1c3e80b8990378df9e3cb9c" + integrity sha1-Cd/Uq50g4p6xw+gLiZA3jfnjy5w= + +immediate@~3.0.5: + version "3.0.6" + resolved "https://registry.npm.taobao.org/immediate/download/immediate-3.0.6.tgz#9db1dbd0faf8de6fbe0f5dd5e56bb606280de69b" + integrity sha1-nbHb0Pr43m++D13V5Wu2BigN5ps= + +import-cwd@^2.0.0: + version "2.1.0" + resolved "https://registry.npm.taobao.org/import-cwd/download/import-cwd-2.1.0.tgz#aa6cf36e722761285cb371ec6519f53e2435b0a9" + integrity sha1-qmzzbnInYShcs3HsZRn1PiQ1sKk= + dependencies: + import-from "^2.1.0" + +import-fresh@^2.0.0: + version "2.0.0" + resolved "https://registry.npm.taobao.org/import-fresh/download/import-fresh-2.0.0.tgz?cache=0&sync_timestamp=1573665028675&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fimport-fresh%2Fdownload%2Fimport-fresh-2.0.0.tgz#d81355c15612d386c61f9ddd3922d4304822a546" + integrity sha1-2BNVwVYS04bGH53dOSLUMEgipUY= + dependencies: + caller-path "^2.0.0" + resolve-from "^3.0.0" + +import-from@^2.1.0: + version "2.1.0" + resolved "https://registry.npm.taobao.org/import-from/download/import-from-2.1.0.tgz#335db7f2a7affd53aaa471d4b8021dee36b7f3b1" + integrity sha1-M1238qev/VOqpHHUuAId7ja387E= + dependencies: + resolve-from "^3.0.0" + +import-local@^2.0.0: + version "2.0.0" + resolved "https://registry.npm.taobao.org/import-local/download/import-local-2.0.0.tgz#55070be38a5993cf18ef6db7e961f5bee5c5a09d" + integrity sha1-VQcL44pZk88Y72236WH1vuXFoJ0= + dependencies: + pkg-dir "^3.0.0" + resolve-cwd "^2.0.0" + +imurmurhash@^0.1.4: + version "0.1.4" + resolved "https://registry.npm.taobao.org/imurmurhash/download/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" + integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= + +indexof@0.0.1: + version "0.0.1" + resolved "https://registry.npm.taobao.org/indexof/download/indexof-0.0.1.tgz#82dc336d232b9062179d05ab3293a66059fd435d" + integrity sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10= + +infer-owner@^1.0.3, infer-owner@^1.0.4: + version "1.0.4" + resolved "https://registry.npm.taobao.org/infer-owner/download/infer-owner-1.0.4.tgz#c4cefcaa8e51051c2a40ba2ce8a3d27295af9467" + integrity sha1-xM78qo5RBRwqQLos6KPScpWvlGc= + +inflight@^1.0.4: + version "1.0.6" + resolved "https://registry.npm.taobao.org/inflight/download/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= + dependencies: + once "^1.3.0" + wrappy "1" + +inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.1, inherits@~2.0.3: + version "2.0.4" + resolved "https://registry.npm.taobao.org/inherits/download/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" + integrity sha1-D6LGT5MpF8NDOg3tVTY6rjdBa3w= + +inherits@2.0.1: + version "2.0.1" + resolved "https://registry.npm.taobao.org/inherits/download/inherits-2.0.1.tgz#b17d08d326b4423e568eff719f91b0b1cbdf69f1" + integrity sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE= + +inherits@2.0.3: + version "2.0.3" + resolved "https://registry.npm.taobao.org/inherits/download/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" + integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4= + +ini@1.3.5, ini@^1.3.4, ini@~1.3.0: + version "1.3.5" + resolved "https://registry.npm.taobao.org/ini/download/ini-1.3.5.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fini%2Fdownload%2Fini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927" + integrity sha1-7uJfVtscnsYIXgwid4CD9Zar+Sc= + +inquirer@6.5.1: + version "6.5.1" + resolved "https://registry.npm.taobao.org/inquirer/download/inquirer-6.5.1.tgz#8bfb7a5ac02dac6ff641ac4c5ff17da112fcdb42" + integrity sha1-i/t6WsAtrG/2QaxMX/F9oRL820I= + dependencies: + ansi-escapes "^4.2.1" + chalk "^2.4.2" + cli-cursor "^3.1.0" + cli-width "^2.0.0" + external-editor "^3.0.3" + figures "^3.0.0" + lodash "^4.17.15" + mute-stream "0.0.8" + run-async "^2.2.0" + rxjs "^6.4.0" + string-width "^4.1.0" + strip-ansi "^5.1.0" + through "^2.3.6" + +internal-ip@^4.3.0: + version "4.3.0" + resolved "https://registry.npm.taobao.org/internal-ip/download/internal-ip-4.3.0.tgz#845452baad9d2ca3b69c635a137acb9a0dad0907" + integrity sha1-hFRSuq2dLKO2nGNaE3rLmg2tCQc= + dependencies: + default-gateway "^4.2.0" + ipaddr.js "^1.9.0" + +invariant@^2.2.2: + version "2.2.4" + resolved "https://registry.npm.taobao.org/invariant/download/invariant-2.2.4.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Finvariant%2Fdownload%2Finvariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6" + integrity sha1-YQ88ksk1nOHbYW5TgAjSP/NRWOY= + dependencies: + loose-envify "^1.0.0" + +invert-kv@^2.0.0: + version "2.0.0" + resolved "https://registry.npm.taobao.org/invert-kv/download/invert-kv-2.0.0.tgz#7393f5afa59ec9ff5f67a27620d11c226e3eec02" + integrity sha1-c5P1r6Weyf9fZ6J2INEcIm4+7AI= + +ip-regex@^2.1.0: + version "2.1.0" + resolved "https://registry.npm.taobao.org/ip-regex/download/ip-regex-2.1.0.tgz#fa78bf5d2e6913c911ce9f819ee5146bb6d844e9" + integrity sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk= + +ip@1.1.5, ip@^1.1.0, ip@^1.1.5: + version "1.1.5" + resolved "https://registry.npm.taobao.org/ip/download/ip-1.1.5.tgz#bdded70114290828c0a039e72ef25f5aaec4354a" + integrity sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo= + +ipaddr.js@1.9.0: + version "1.9.0" + resolved "https://registry.npm.taobao.org/ipaddr.js/download/ipaddr.js-1.9.0.tgz#37df74e430a0e47550fe54a2defe30d8acd95f65" + integrity sha1-N9905DCg5HVQ/lSi3v4w2KzZX2U= + +ipaddr.js@^1.9.0: + version "1.9.1" + resolved "https://registry.npm.taobao.org/ipaddr.js/download/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3" + integrity sha1-v/OFQ+64mEglB5/zoqjmy9RngbM= + +is-absolute-url@^3.0.3: + version "3.0.3" + resolved "https://registry.npm.taobao.org/is-absolute-url/download/is-absolute-url-3.0.3.tgz?cache=0&sync_timestamp=1569736493122&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-absolute-url%2Fdownload%2Fis-absolute-url-3.0.3.tgz#96c6a22b6a23929b11ea0afb1836c36ad4a5d698" + integrity sha1-lsaiK2ojkpsR6gr7GDbDatSl1pg= + +is-accessor-descriptor@^0.1.6: + version "0.1.6" + resolved "https://registry.npm.taobao.org/is-accessor-descriptor/download/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6" + integrity sha1-qeEss66Nh2cn7u84Q/igiXtcmNY= + dependencies: + kind-of "^3.0.2" + +is-accessor-descriptor@^1.0.0: + version "1.0.0" + resolved "https://registry.npm.taobao.org/is-accessor-descriptor/download/is-accessor-descriptor-1.0.0.tgz#169c2f6d3df1f992618072365c9b0ea1f6878656" + integrity sha1-FpwvbT3x+ZJhgHI2XJsOofaHhlY= + dependencies: + kind-of "^6.0.0" + +is-arguments@^1.0.4: + version "1.0.4" + resolved "https://registry.npm.taobao.org/is-arguments/download/is-arguments-1.0.4.tgz#3faf966c7cba0ff437fb31f6250082fcf0448cf3" + integrity sha1-P6+WbHy6D/Q3+zH2JQCC/PBEjPM= + +is-arrayish@^0.2.1: + version "0.2.1" + resolved "https://registry.npm.taobao.org/is-arrayish/download/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" + integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0= + +is-binary-path@^1.0.0: + version "1.0.1" + resolved "https://registry.npm.taobao.org/is-binary-path/download/is-binary-path-1.0.1.tgz#75f16642b480f187a711c814161fd3a4a7655898" + integrity sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg= + dependencies: + binary-extensions "^1.0.0" + +is-binary-path@~2.1.0: + version "2.1.0" + resolved "https://registry.npm.taobao.org/is-binary-path/download/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" + integrity sha1-6h9/O4DwZCNug0cPhsCcJU+0Wwk= + dependencies: + binary-extensions "^2.0.0" + +is-buffer@^1.1.5: + version "1.1.6" + resolved "https://registry.npm.taobao.org/is-buffer/download/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" + integrity sha1-76ouqdqg16suoTqXsritUf776L4= + +is-callable@^1.1.4, is-callable@^1.1.5: + version "1.1.5" + resolved "https://registry.npm.taobao.org/is-callable/download/is-callable-1.1.5.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-callable%2Fdownload%2Fis-callable-1.1.5.tgz#f7e46b596890456db74e7f6e976cb3273d06faab" + integrity sha1-9+RrWWiQRW23Tn9ul2yzJz0G+qs= + +is-data-descriptor@^0.1.4: + version "0.1.4" + resolved "https://registry.npm.taobao.org/is-data-descriptor/download/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56" + integrity sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y= + dependencies: + kind-of "^3.0.2" + +is-data-descriptor@^1.0.0: + version "1.0.0" + resolved "https://registry.npm.taobao.org/is-data-descriptor/download/is-data-descriptor-1.0.0.tgz#d84876321d0e7add03990406abbbbd36ba9268c7" + integrity sha1-2Eh2Mh0Oet0DmQQGq7u9NrqSaMc= + dependencies: + kind-of "^6.0.0" + +is-date-object@^1.0.1: + version "1.0.2" + resolved "https://registry.npm.taobao.org/is-date-object/download/is-date-object-1.0.2.tgz?cache=0&sync_timestamp=1576729293199&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-date-object%2Fdownload%2Fis-date-object-1.0.2.tgz#bda736f2cd8fd06d32844e7743bfa7494c3bfd7e" + integrity sha1-vac28s2P0G0yhE53Q7+nSUw7/X4= + +is-descriptor@^0.1.0: + version "0.1.6" + resolved "https://registry.npm.taobao.org/is-descriptor/download/is-descriptor-0.1.6.tgz#366d8240dde487ca51823b1ab9f07a10a78251ca" + integrity sha1-Nm2CQN3kh8pRgjsaufB6EKeCUco= + dependencies: + is-accessor-descriptor "^0.1.6" + is-data-descriptor "^0.1.4" + kind-of "^5.0.0" + +is-descriptor@^1.0.0, is-descriptor@^1.0.2: + version "1.0.2" + resolved "https://registry.npm.taobao.org/is-descriptor/download/is-descriptor-1.0.2.tgz#3b159746a66604b04f8c81524ba365c5f14d86ec" + integrity sha1-OxWXRqZmBLBPjIFSS6NlxfFNhuw= + dependencies: + is-accessor-descriptor "^1.0.0" + is-data-descriptor "^1.0.0" + kind-of "^6.0.2" + +is-directory@^0.3.1: + version "0.3.1" + resolved "https://registry.npm.taobao.org/is-directory/download/is-directory-0.3.1.tgz#61339b6f2475fc772fd9c9d83f5c8575dc154ae1" + integrity sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE= + +is-extendable@^0.1.0, is-extendable@^0.1.1: + version "0.1.1" + resolved "https://registry.npm.taobao.org/is-extendable/download/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" + integrity sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik= + +is-extendable@^1.0.1: + version "1.0.1" + resolved "https://registry.npm.taobao.org/is-extendable/download/is-extendable-1.0.1.tgz#a7470f9e426733d81bd81e1155264e3a3507cab4" + integrity sha1-p0cPnkJnM9gb2B4RVSZOOjUHyrQ= + dependencies: + is-plain-object "^2.0.4" + +is-extglob@^2.1.0, is-extglob@^2.1.1: + version "2.1.1" + resolved "https://registry.npm.taobao.org/is-extglob/download/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" + integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= + +is-finite@^1.0.0: + version "1.0.2" + resolved "https://registry.npm.taobao.org/is-finite/download/is-finite-1.0.2.tgz#cc6677695602be550ef11e8b4aa6305342b6d0aa" + integrity sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko= + dependencies: + number-is-nan "^1.0.0" + +is-fullwidth-code-point@^1.0.0: + version "1.0.0" + resolved "https://registry.npm.taobao.org/is-fullwidth-code-point/download/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" + integrity sha1-754xOG8DGn8NZDr4L95QxFfvAMs= + dependencies: + number-is-nan "^1.0.0" + +is-fullwidth-code-point@^2.0.0: + version "2.0.0" + resolved "https://registry.npm.taobao.org/is-fullwidth-code-point/download/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" + integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8= + +is-fullwidth-code-point@^3.0.0: + version "3.0.0" + resolved "https://registry.npm.taobao.org/is-fullwidth-code-point/download/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" + integrity sha1-8Rb4Bk/pCz94RKOJl8C3UFEmnx0= + +is-glob@^3.1.0: + version "3.1.0" + resolved "https://registry.npm.taobao.org/is-glob/download/is-glob-3.1.0.tgz#7ba5ae24217804ac70707b96922567486cc3e84a" + integrity sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo= + dependencies: + is-extglob "^2.1.0" + +is-glob@^4.0.0, is-glob@^4.0.1, is-glob@~4.0.1: + version "4.0.1" + resolved "https://registry.npm.taobao.org/is-glob/download/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc" + integrity sha1-dWfb6fL14kZ7x3q4PEopSCQHpdw= + dependencies: + is-extglob "^2.1.1" + +is-number@^3.0.0: + version "3.0.0" + resolved "https://registry.npm.taobao.org/is-number/download/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" + integrity sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU= + dependencies: + kind-of "^3.0.2" + +is-number@^7.0.0: + version "7.0.0" + resolved "https://registry.npm.taobao.org/is-number/download/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" + integrity sha1-dTU0W4lnNNX4DE0GxQlVUnoU8Ss= + +is-path-cwd@^1.0.0: + version "1.0.0" + resolved "https://registry.npm.taobao.org/is-path-cwd/download/is-path-cwd-1.0.0.tgz#d225ec23132e89edd38fda767472e62e65f1106d" + integrity sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0= + +is-path-cwd@^2.0.0: + version "2.2.0" + resolved "https://registry.npm.taobao.org/is-path-cwd/download/is-path-cwd-2.2.0.tgz#67d43b82664a7b5191fd9119127eb300048a9fdb" + integrity sha1-Z9Q7gmZKe1GR/ZEZEn6zAASKn9s= + +is-path-in-cwd@^1.0.0: + version "1.0.1" + resolved "https://registry.npm.taobao.org/is-path-in-cwd/download/is-path-in-cwd-1.0.1.tgz#5ac48b345ef675339bd6c7a48a912110b241cf52" + integrity sha1-WsSLNF72dTOb1sekipEhELJBz1I= + dependencies: + is-path-inside "^1.0.0" + +is-path-in-cwd@^2.0.0: + version "2.1.0" + resolved "https://registry.npm.taobao.org/is-path-in-cwd/download/is-path-in-cwd-2.1.0.tgz#bfe2dca26c69f397265a4009963602935a053acb" + integrity sha1-v+Lcomxp85cmWkAJljYCk1oFOss= + dependencies: + is-path-inside "^2.1.0" + +is-path-inside@^1.0.0: + version "1.0.1" + resolved "https://registry.npm.taobao.org/is-path-inside/download/is-path-inside-1.0.1.tgz#8ef5b7de50437a3fdca6b4e865ef7aa55cb48036" + integrity sha1-jvW33lBDej/cprToZe96pVy0gDY= + dependencies: + path-is-inside "^1.0.1" + +is-path-inside@^2.1.0: + version "2.1.0" + resolved "https://registry.npm.taobao.org/is-path-inside/download/is-path-inside-2.1.0.tgz#7c9810587d659a40d27bcdb4d5616eab059494b2" + integrity sha1-fJgQWH1lmkDSe8201WFuqwWUlLI= + dependencies: + path-is-inside "^1.0.2" + +is-plain-obj@^1.0.0: + version "1.1.0" + resolved "https://registry.npm.taobao.org/is-plain-obj/download/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e" + integrity sha1-caUMhCnfync8kqOQpKA7OfzVHT4= + +is-plain-object@^2.0.3, is-plain-object@^2.0.4: + version "2.0.4" + resolved "https://registry.npm.taobao.org/is-plain-object/download/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" + integrity sha1-LBY7P6+xtgbZ0Xko8FwqHDjgdnc= + dependencies: + isobject "^3.0.1" + +is-promise@^2.1.0: + version "2.1.0" + resolved "https://registry.npm.taobao.org/is-promise/download/is-promise-2.1.0.tgz#79a2a9ece7f096e80f36d2b2f3bc16c1ff4bf3fa" + integrity sha1-eaKp7OfwlugPNtKy87wWwf9L8/o= + +is-regex@^1.0.4, is-regex@^1.0.5: + version "1.0.5" + resolved "https://registry.npm.taobao.org/is-regex/download/is-regex-1.0.5.tgz#39d589a358bf18967f726967120b8fc1aed74eae" + integrity sha1-OdWJo1i/GJZ/cmlnEguPwa7XTq4= + dependencies: + has "^1.0.3" + +is-stream@^1.1.0: + version "1.1.0" + resolved "https://registry.npm.taobao.org/is-stream/download/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" + integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ= + +is-symbol@^1.0.2: + version "1.0.3" + resolved "https://registry.npm.taobao.org/is-symbol/download/is-symbol-1.0.3.tgz#38e1014b9e6329be0de9d24a414fd7441ec61937" + integrity sha1-OOEBS55jKb4N6dJKQU/XRB7GGTc= + dependencies: + has-symbols "^1.0.1" + +is-typedarray@~1.0.0: + version "1.0.0" + resolved "https://registry.npm.taobao.org/is-typedarray/download/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" + integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo= + +is-windows@^1.0.2: + version "1.0.2" + resolved "https://registry.npm.taobao.org/is-windows/download/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" + integrity sha1-0YUOuXkezRjmGCzhKjDzlmNLsZ0= + +is-wsl@^1.1.0: + version "1.1.0" + resolved "https://registry.npm.taobao.org/is-wsl/download/is-wsl-1.1.0.tgz?cache=0&sync_timestamp=1569219566107&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-wsl%2Fdownload%2Fis-wsl-1.1.0.tgz#1f16e4aa22b04d1336b66188a66af3c600c3a66d" + integrity sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0= + +isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0: + version "1.0.0" + resolved "https://registry.npm.taobao.org/isarray/download/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" + integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= + +isarray@2.0.1: + version "2.0.1" + resolved "https://registry.npm.taobao.org/isarray/download/isarray-2.0.1.tgz#a37d94ed9cda2d59865c9f76fe596ee1f338741e" + integrity sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4= + +isbinaryfile@^3.0.0: + version "3.0.3" + resolved "https://registry.npm.taobao.org/isbinaryfile/download/isbinaryfile-3.0.3.tgz#5d6def3edebf6e8ca8cae9c30183a804b5f8be80" + integrity sha1-XW3vPt6/boyoyunDAYOoBLX4voA= + dependencies: + buffer-alloc "^1.2.0" + +isexe@^2.0.0: + version "2.0.0" + resolved "https://registry.npm.taobao.org/isexe/download/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= + +isobject@^2.0.0: + version "2.1.0" + resolved "https://registry.npm.taobao.org/isobject/download/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" + integrity sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk= + dependencies: + isarray "1.0.0" + +isobject@^3.0.0, isobject@^3.0.1: + version "3.0.1" + resolved "https://registry.npm.taobao.org/isobject/download/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" + integrity sha1-TkMekrEalzFjaqH5yNHMvP2reN8= + +isstream@~0.1.2: + version "0.1.2" + resolved "https://registry.npm.taobao.org/isstream/download/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" + integrity sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo= + +istanbul-api@^2.1.6: + version "2.1.6" + resolved "https://registry.npm.taobao.org/istanbul-api/download/istanbul-api-2.1.6.tgz#d61702a9d1c66ad89d92e66d401e16b0bda4a35f" + integrity sha1-1hcCqdHGatidkuZtQB4WsL2ko18= + dependencies: + async "^2.6.2" + compare-versions "^3.4.0" + fileset "^2.0.3" + istanbul-lib-coverage "^2.0.5" + istanbul-lib-hook "^2.0.7" + istanbul-lib-instrument "^3.3.0" + istanbul-lib-report "^2.0.8" + istanbul-lib-source-maps "^3.0.6" + istanbul-reports "^2.2.4" + js-yaml "^3.13.1" + make-dir "^2.1.0" + minimatch "^3.0.4" + once "^1.4.0" + +istanbul-instrumenter-loader@3.0.1: + version "3.0.1" + resolved "https://registry.npm.taobao.org/istanbul-instrumenter-loader/download/istanbul-instrumenter-loader-3.0.1.tgz#9957bd59252b373fae5c52b7b5188e6fde2a0949" + integrity sha1-mVe9WSUrNz+uXFK3tRiOb94qCUk= + dependencies: + convert-source-map "^1.5.0" + istanbul-lib-instrument "^1.7.3" + loader-utils "^1.1.0" + schema-utils "^0.3.0" + +istanbul-lib-coverage@^1.2.1: + version "1.2.1" + resolved "https://registry.npm.taobao.org/istanbul-lib-coverage/download/istanbul-lib-coverage-1.2.1.tgz?cache=0&sync_timestamp=1577062400885&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fistanbul-lib-coverage%2Fdownload%2Fistanbul-lib-coverage-1.2.1.tgz#ccf7edcd0a0bb9b8f729feeb0930470f9af664f0" + integrity sha1-zPftzQoLubj3Kf7rCTBHD5r2ZPA= + +istanbul-lib-coverage@^2.0.5: + version "2.0.5" + resolved "https://registry.npm.taobao.org/istanbul-lib-coverage/download/istanbul-lib-coverage-2.0.5.tgz?cache=0&sync_timestamp=1577062400885&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fistanbul-lib-coverage%2Fdownload%2Fistanbul-lib-coverage-2.0.5.tgz#675f0ab69503fad4b1d849f736baaca803344f49" + integrity sha1-Z18KtpUD+tSx2En3NrqsqAM0T0k= + +istanbul-lib-hook@^2.0.7: + version "2.0.7" + resolved "https://registry.npm.taobao.org/istanbul-lib-hook/download/istanbul-lib-hook-2.0.7.tgz#c95695f383d4f8f60df1f04252a9550e15b5b133" + integrity sha1-yVaV84PU+PYN8fBCUqlVDhW1sTM= + dependencies: + append-transform "^1.0.0" + +istanbul-lib-instrument@^1.7.3: + version "1.10.2" + resolved "https://registry.npm.taobao.org/istanbul-lib-instrument/download/istanbul-lib-instrument-1.10.2.tgz#1f55ed10ac3c47f2bdddd5307935126754d0a9ca" + integrity sha1-H1XtEKw8R/K93dUweTUSZ1TQqco= + dependencies: + babel-generator "^6.18.0" + babel-template "^6.16.0" + babel-traverse "^6.18.0" + babel-types "^6.18.0" + babylon "^6.18.0" + istanbul-lib-coverage "^1.2.1" + semver "^5.3.0" + +istanbul-lib-instrument@^3.3.0: + version "3.3.0" + resolved "https://registry.npm.taobao.org/istanbul-lib-instrument/download/istanbul-lib-instrument-3.3.0.tgz#a5f63d91f0bbc0c3e479ef4c5de027335ec6d630" + integrity sha1-pfY9kfC7wMPkee9MXeAnM17G1jA= + dependencies: + "@babel/generator" "^7.4.0" + "@babel/parser" "^7.4.3" + "@babel/template" "^7.4.0" + "@babel/traverse" "^7.4.3" + "@babel/types" "^7.4.0" + istanbul-lib-coverage "^2.0.5" + semver "^6.0.0" + +istanbul-lib-report@^2.0.8: + version "2.0.8" + resolved "https://registry.npm.taobao.org/istanbul-lib-report/download/istanbul-lib-report-2.0.8.tgz?cache=0&sync_timestamp=1577062405578&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fistanbul-lib-report%2Fdownload%2Fistanbul-lib-report-2.0.8.tgz#5a8113cd746d43c4889eba36ab10e7d50c9b4f33" + integrity sha1-WoETzXRtQ8SInro2qxDn1QybTzM= + dependencies: + istanbul-lib-coverage "^2.0.5" + make-dir "^2.1.0" + supports-color "^6.1.0" + +istanbul-lib-source-maps@^3.0.6: + version "3.0.6" + resolved "https://registry.npm.taobao.org/istanbul-lib-source-maps/download/istanbul-lib-source-maps-3.0.6.tgz?cache=0&sync_timestamp=1577062405633&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fistanbul-lib-source-maps%2Fdownload%2Fistanbul-lib-source-maps-3.0.6.tgz#284997c48211752ec486253da97e3879defba8c8" + integrity sha1-KEmXxIIRdS7EhiU9qX44ed77qMg= + dependencies: + debug "^4.1.1" + istanbul-lib-coverage "^2.0.5" + make-dir "^2.1.0" + rimraf "^2.6.3" + source-map "^0.6.1" + +istanbul-reports@^2.2.4: + version "2.2.6" + resolved "https://registry.npm.taobao.org/istanbul-reports/download/istanbul-reports-2.2.6.tgz#7b4f2660d82b29303a8fe6091f8ca4bf058da1af" + integrity sha1-e08mYNgrKTA6j+YJH4ykvwWNoa8= + dependencies: + handlebars "^4.1.2" + +jasmine-core@^3.3: + version "3.5.0" + resolved "https://registry.npm.taobao.org/jasmine-core/download/jasmine-core-3.5.0.tgz#132c23e645af96d85c8bca13c8758b18429fc1e4" + integrity sha1-Eywj5kWvlthci8oTyHWLGEKfweQ= + +jasmine-core@~2.8.0: + version "2.8.0" + resolved "https://registry.npm.taobao.org/jasmine-core/download/jasmine-core-2.8.0.tgz#bcc979ae1f9fd05701e45e52e65d3a5d63f1a24e" + integrity sha1-vMl5rh+f0FcB5F5S5l06XWPxok4= + +jasmine-core@~3.4.0: + version "3.4.0" + resolved "https://registry.npm.taobao.org/jasmine-core/download/jasmine-core-3.4.0.tgz#2a74618e966026530c3518f03e9f845d26473ce3" + integrity sha1-KnRhjpZgJlMMNRjwPp+EXSZHPOM= + +jasmine-spec-reporter@~4.2.1: + version "4.2.1" + resolved "https://registry.npm.taobao.org/jasmine-spec-reporter/download/jasmine-spec-reporter-4.2.1.tgz#1d632aec0341670ad324f92ba84b4b32b35e9e22" + integrity sha1-HWMq7ANBZwrTJPkrqEtLMrNeniI= + dependencies: + colors "1.1.2" + +jasmine@2.8.0: + version "2.8.0" + resolved "https://registry.npm.taobao.org/jasmine/download/jasmine-2.8.0.tgz#6b089c0a11576b1f16df11b80146d91d4e8b8a3e" + integrity sha1-awicChFXax8W3xG4AUbZHU6Lij4= + dependencies: + exit "^0.1.2" + glob "^7.0.6" + jasmine-core "~2.8.0" + +jasminewd2@^2.1.0: + version "2.2.0" + resolved "https://registry.npm.taobao.org/jasminewd2/download/jasminewd2-2.2.0.tgz#e37cf0b17f199cce23bea71b2039395246b4ec4e" + integrity sha1-43zwsX8ZnM4jvqcbIDk5Uka07E4= + +jest-worker@24.9.0: + version "24.9.0" + resolved "https://registry.npm.taobao.org/jest-worker/download/jest-worker-24.9.0.tgz#5dbfdb5b2d322e98567898238a9697bcce67b3e5" + integrity sha1-Xb/bWy0yLphWeJgjipaXvM5ns+U= + dependencies: + merge-stream "^2.0.0" + supports-color "^6.1.0" + +js-levenshtein@^1.1.3: + version "1.1.6" + resolved "https://registry.npm.taobao.org/js-levenshtein/download/js-levenshtein-1.1.6.tgz#c6cee58eb3550372df8deb85fad5ce66ce01d59d" + integrity sha1-xs7ljrNVA3LfjeuF+tXOZs4B1Z0= + +"js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: + version "4.0.0" + resolved "https://registry.npm.taobao.org/js-tokens/download/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" + integrity sha1-GSA/tZmR35jjoocFDUZHzerzJJk= + +js-tokens@^3.0.2: + version "3.0.2" + resolved "https://registry.npm.taobao.org/js-tokens/download/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b" + integrity sha1-mGbfOVECEw449/mWvOtlRDIJwls= + +js-yaml@^3.13.0, js-yaml@^3.13.1: + version "3.13.1" + resolved "https://registry.npm.taobao.org/js-yaml/download/js-yaml-3.13.1.tgz#aff151b30bfdfa8e49e05da22e7415e9dfa37847" + integrity sha1-r/FRswv9+o5J4F2iLnQV6d+jeEc= + dependencies: + argparse "^1.0.7" + esprima "^4.0.0" + +jsbn@~0.1.0: + version "0.1.1" + resolved "https://registry.npm.taobao.org/jsbn/download/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" + integrity sha1-peZUwuWi3rXyAdls77yoDA7y9RM= + +jsesc@^1.3.0: + version "1.3.0" + resolved "https://registry.npm.taobao.org/jsesc/download/jsesc-1.3.0.tgz#46c3fec8c1892b12b0833db9bc7622176dbab34b" + integrity sha1-RsP+yMGJKxKwgz25vHYiF226s0s= + +jsesc@^2.5.1: + version "2.5.2" + resolved "https://registry.npm.taobao.org/jsesc/download/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" + integrity sha1-gFZNLkg9rPbo7yCWUKZ98/DCg6Q= + +jsesc@~0.5.0: + version "0.5.0" + resolved "https://registry.npm.taobao.org/jsesc/download/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" + integrity sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0= + +json-parse-better-errors@^1.0.0, json-parse-better-errors@^1.0.1, json-parse-better-errors@^1.0.2: + version "1.0.2" + resolved "https://registry.npm.taobao.org/json-parse-better-errors/download/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" + integrity sha1-u4Z8+zRQ5pEHwTHRxRS6s9yLyqk= + +json-schema-traverse@^0.3.0: + version "0.3.1" + resolved "https://registry.npm.taobao.org/json-schema-traverse/download/json-schema-traverse-0.3.1.tgz#349a6d44c53a51de89b40805c5d5e59b417d3340" + integrity sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A= + +json-schema-traverse@^0.4.1: + version "0.4.1" + resolved "https://registry.npm.taobao.org/json-schema-traverse/download/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" + integrity sha1-afaofZUTq4u4/mO9sJecRI5oRmA= + +json-schema@0.2.3: + version "0.2.3" + resolved "https://registry.npm.taobao.org/json-schema/download/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" + integrity sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM= + +json-stringify-safe@~5.0.1: + version "5.0.1" + resolved "https://registry.npm.taobao.org/json-stringify-safe/download/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" + integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus= + +json3@^3.3.2: + version "3.3.3" + resolved "https://registry.npm.taobao.org/json3/download/json3-3.3.3.tgz#7fc10e375fc5ae42c4705a5cc0aa6f62be305b81" + integrity sha1-f8EON1/FrkLEcFpcwKpvYr4wW4E= + +json5@^1.0.1: + version "1.0.1" + resolved "https://registry.npm.taobao.org/json5/download/json5-1.0.1.tgz#779fb0018604fa854eacbf6252180d83543e3dbe" + integrity sha1-d5+wAYYE+oVOrL9iUhgNg1Q+Pb4= + dependencies: + minimist "^1.2.0" + +json5@^2.1.0: + version "2.1.1" + resolved "https://registry.npm.taobao.org/json5/download/json5-2.1.1.tgz#81b6cb04e9ba496f1c7005d07b4368a2638f90b6" + integrity sha1-gbbLBOm6SW8ccAXQe0NoomOPkLY= + dependencies: + minimist "^1.2.0" + +jsonfile@^4.0.0: + version "4.0.0" + resolved "https://registry.npm.taobao.org/jsonfile/download/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" + integrity sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss= + optionalDependencies: + graceful-fs "^4.1.6" + +jsonparse@^1.2.0: + version "1.3.1" + resolved "https://registry.npm.taobao.org/jsonparse/download/jsonparse-1.3.1.tgz#3f4dae4a91fac315f71062f8521cc239f1366280" + integrity sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA= + +jsprim@^1.2.2: + version "1.4.1" + resolved "https://registry.npm.taobao.org/jsprim/download/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2" + integrity sha1-MT5mvB5cwG5Di8G3SZwuXFastqI= + dependencies: + assert-plus "1.0.0" + extsprintf "1.3.0" + json-schema "0.2.3" + verror "1.10.0" + +jszip@^3.1.3: + version "3.2.2" + resolved "https://registry.npm.taobao.org/jszip/download/jszip-3.2.2.tgz#b143816df7e106a9597a94c77493385adca5bd1d" + integrity sha1-sUOBbffhBqlZepTHdJM4WtylvR0= + dependencies: + lie "~3.3.0" + pako "~1.0.2" + readable-stream "~2.3.6" + set-immediate-shim "~1.0.1" + +karma-chrome-launcher@~2.2.0: + version "2.2.0" + resolved "https://registry.npm.taobao.org/karma-chrome-launcher/download/karma-chrome-launcher-2.2.0.tgz#cf1b9d07136cc18fe239327d24654c3dbc368acf" + integrity sha1-zxudBxNswY/iOTJ9JGVMPbw2is8= + dependencies: + fs-access "^1.0.0" + which "^1.2.1" + +karma-coverage-istanbul-reporter@~2.0.1: + version "2.0.6" + resolved "https://registry.npm.taobao.org/karma-coverage-istanbul-reporter/download/karma-coverage-istanbul-reporter-2.0.6.tgz#7b6e9c88781447bb87aa6ac24bf74b93e558adc3" + integrity sha1-e26ciHgUR7uHqmrCS/dLk+VYrcM= + dependencies: + istanbul-api "^2.1.6" + minimatch "^3.0.4" + +karma-jasmine-html-reporter@^1.4.0: + version "1.5.1" + resolved "https://registry.npm.taobao.org/karma-jasmine-html-reporter/download/karma-jasmine-html-reporter-1.5.1.tgz#0fad2d2ac416bc04724318aad29b89bd86f7bfbc" + integrity sha1-D60tKsQWvARyQxiq0puJvYb3v7w= + +karma-jasmine@~2.0.1: + version "2.0.1" + resolved "https://registry.npm.taobao.org/karma-jasmine/download/karma-jasmine-2.0.1.tgz#26e3e31f2faf272dd80ebb0e1898914cc3a19763" + integrity sha1-JuPjHy+vJy3YDrsOGJiRTMOhl2M= + dependencies: + jasmine-core "^3.3" + +karma-source-map-support@1.4.0: + version "1.4.0" + resolved "https://registry.npm.taobao.org/karma-source-map-support/download/karma-source-map-support-1.4.0.tgz#58526ceccf7e8730e56effd97a4de8d712ac0d6b" + integrity sha1-WFJs7M9+hzDlbv/Zek3o1xKsDWs= + dependencies: + source-map-support "^0.5.5" + +karma@~4.1.0: + version "4.1.0" + resolved "https://registry.npm.taobao.org/karma/download/karma-4.1.0.tgz#d07387c9743a575b40faf73e8a3eb5421c2193e1" + integrity sha1-0HOHyXQ6V1tA+vc+ij61Qhwhk+E= + dependencies: + bluebird "^3.3.0" + body-parser "^1.16.1" + braces "^2.3.2" + chokidar "^2.0.3" + colors "^1.1.0" + connect "^3.6.0" + core-js "^2.2.0" + di "^0.0.1" + dom-serialize "^2.2.0" + flatted "^2.0.0" + glob "^7.1.1" + graceful-fs "^4.1.2" + http-proxy "^1.13.0" + isbinaryfile "^3.0.0" + lodash "^4.17.11" + log4js "^4.0.0" + mime "^2.3.1" + minimatch "^3.0.2" + optimist "^0.6.1" + qjobs "^1.1.4" + range-parser "^1.2.0" + rimraf "^2.6.0" + safe-buffer "^5.0.1" + socket.io "2.1.1" + source-map "^0.6.1" + tmp "0.0.33" + useragent "2.3.0" + +killable@^1.0.1: + version "1.0.1" + resolved "https://registry.npm.taobao.org/killable/download/killable-1.0.1.tgz#4c8ce441187a061c7474fb87ca08e2a638194892" + integrity sha1-TIzkQRh6Bhx0dPuHygjipjgZSJI= + +kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0: + version "3.2.2" + resolved "https://registry.npm.taobao.org/kind-of/download/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" + integrity sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ= + dependencies: + is-buffer "^1.1.5" + +kind-of@^4.0.0: + version "4.0.0" + resolved "https://registry.npm.taobao.org/kind-of/download/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57" + integrity sha1-IIE989cSkosgc3hpGkUGb65y3Vc= + dependencies: + is-buffer "^1.1.5" + +kind-of@^5.0.0: + version "5.1.0" + resolved "https://registry.npm.taobao.org/kind-of/download/kind-of-5.1.0.tgz#729c91e2d857b7a419a1f9aa65685c4c33f5845d" + integrity sha1-cpyR4thXt6QZofmqZWhcTDP1hF0= + +kind-of@^6.0.0, kind-of@^6.0.2: + version "6.0.2" + resolved "https://registry.npm.taobao.org/kind-of/download/kind-of-6.0.2.tgz#01146b36a6218e64e58f3a8d66de5d7fc6f6d051" + integrity sha1-ARRrNqYhjmTljzqNZt5df8b20FE= + +lcid@^2.0.0: + version "2.0.0" + resolved "https://registry.npm.taobao.org/lcid/download/lcid-2.0.0.tgz#6ef5d2df60e52f82eb228a4c373e8d1f397253cf" + integrity sha1-bvXS32DlL4LrIopMNz6NHzlyU88= + dependencies: + invert-kv "^2.0.0" + +less-loader@5.0.0: + version "5.0.0" + resolved "https://registry.npm.taobao.org/less-loader/download/less-loader-5.0.0.tgz#498dde3a6c6c4f887458ee9ed3f086a12ad1b466" + integrity sha1-SY3eOmxsT4h0WO6e0/CGoSrRtGY= + dependencies: + clone "^2.1.1" + loader-utils "^1.1.0" + pify "^4.0.1" + +less@3.9.0: + version "3.9.0" + resolved "https://registry.npm.taobao.org/less/download/less-3.9.0.tgz#b7511c43f37cf57dc87dffd9883ec121289b1474" + integrity sha1-t1EcQ/N89X3Iff/ZiD7BISibFHQ= + dependencies: + clone "^2.1.2" + optionalDependencies: + errno "^0.1.1" + graceful-fs "^4.1.2" + image-size "~0.5.0" + mime "^1.4.1" + mkdirp "^0.5.0" + promise "^7.1.1" + request "^2.83.0" + source-map "~0.6.0" + +license-webpack-plugin@2.1.2: + version "2.1.2" + resolved "https://registry.npm.taobao.org/license-webpack-plugin/download/license-webpack-plugin-2.1.2.tgz?cache=0&sync_timestamp=1571015201302&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Flicense-webpack-plugin%2Fdownload%2Flicense-webpack-plugin-2.1.2.tgz#63f7c571537a450ec47dc98f5d5ffdbca7b3b14f" + integrity sha1-Y/fFcVN6RQ7EfcmPXV/9vKezsU8= + dependencies: + "@types/webpack-sources" "^0.1.5" + webpack-sources "^1.2.0" + +lie@~3.3.0: + version "3.3.0" + resolved "https://registry.npm.taobao.org/lie/download/lie-3.3.0.tgz#dcf82dee545f46074daf200c7c1c5a08e0f40f6a" + integrity sha1-3Pgt7lRfRgdNryAMfBxaCOD0D2o= + dependencies: + immediate "~3.0.5" + +loader-runner@^2.4.0: + version "2.4.0" + resolved "https://registry.npm.taobao.org/loader-runner/download/loader-runner-2.4.0.tgz#ed47066bfe534d7e84c4c7b9998c2a75607d9357" + integrity sha1-7UcGa/5TTX6ExMe5mYwqdWB9k1c= + +loader-utils@1.2.3, loader-utils@^1.0.1, loader-utils@^1.0.2, loader-utils@^1.1.0, loader-utils@^1.2.3: + version "1.2.3" + resolved "https://registry.npm.taobao.org/loader-utils/download/loader-utils-1.2.3.tgz#1ff5dc6911c9f0a062531a4c04b609406108c2c7" + integrity sha1-H/XcaRHJ8KBiUxpMBLYJQGEIwsc= + dependencies: + big.js "^5.2.2" + emojis-list "^2.0.0" + json5 "^1.0.1" + +locate-path@^3.0.0: + version "3.0.0" + resolved "https://registry.npm.taobao.org/locate-path/download/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e" + integrity sha1-2+w7OrdZdYBxtY/ln8QYca8hQA4= + dependencies: + p-locate "^3.0.0" + path-exists "^3.0.0" + +locate-path@^5.0.0: + version "5.0.0" + resolved "https://registry.npm.taobao.org/locate-path/download/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0" + integrity sha1-Gvujlq/WdqbUJQTQpno6frn2KqA= + dependencies: + p-locate "^4.1.0" + +lodash.clonedeep@^4.5.0: + version "4.5.0" + resolved "https://registry.npm.taobao.org/lodash.clonedeep/download/lodash.clonedeep-4.5.0.tgz#e23f3f9c4f8fbdde872529c1071857a086e5ccef" + integrity sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8= + +lodash@^4.17.11, lodash@^4.17.13, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.4, lodash@^4.17.5: + version "4.17.15" + resolved "https://registry.npm.taobao.org/lodash/download/lodash-4.17.15.tgz#b447f6670a0455bbfeedd11392eff330ea097548" + integrity sha1-tEf2ZwoEVbv+7dETku/zMOoJdUg= + +log4js@^4.0.0: + version "4.5.1" + resolved "https://registry.npm.taobao.org/log4js/download/log4js-4.5.1.tgz#e543625e97d9e6f3e6e7c9fc196dd6ab2cae30b5" + integrity sha1-5UNiXpfZ5vPm58n8GW3WqyyuMLU= + dependencies: + date-format "^2.0.0" + debug "^4.1.1" + flatted "^2.0.0" + rfdc "^1.1.4" + streamroller "^1.0.6" + +loglevel@^1.6.4: + version "1.6.6" + resolved "https://registry.npm.taobao.org/loglevel/download/loglevel-1.6.6.tgz?cache=0&sync_timestamp=1573148120654&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Floglevel%2Fdownload%2Floglevel-1.6.6.tgz#0ee6300cc058db6b3551fa1c4bf73b83bb771312" + integrity sha1-DuYwDMBY22s1UfocS/c7g7t3ExI= + +loose-envify@^1.0.0: + version "1.4.0" + resolved "https://registry.npm.taobao.org/loose-envify/download/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" + integrity sha1-ce5R+nvkyuwaY4OffmgtgTLTDK8= + dependencies: + js-tokens "^3.0.0 || ^4.0.0" + +lru-cache@4.1.x: + version "4.1.5" + resolved "https://registry.npm.taobao.org/lru-cache/download/lru-cache-4.1.5.tgz#8bbe50ea85bed59bc9e33dcab8235ee9bcf443cd" + integrity sha1-i75Q6oW+1ZvJ4z3KuCNe6bz0Q80= + dependencies: + pseudomap "^1.0.2" + yallist "^2.1.2" + +lru-cache@^5.1.1: + version "5.1.1" + resolved "https://registry.npm.taobao.org/lru-cache/download/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" + integrity sha1-HaJ+ZxAnGUdpXa9oSOhH8B2EuSA= + dependencies: + yallist "^3.0.2" + +magic-string@0.25.3: + version "0.25.3" + resolved "https://registry.npm.taobao.org/magic-string/download/magic-string-0.25.3.tgz#34b8d2a2c7fec9d9bdf9929a3fd81d271ef35be9" + integrity sha1-NLjSosf+ydm9+ZKaP9gdJx7zW+k= + dependencies: + sourcemap-codec "^1.4.4" + +magic-string@^0.25.0: + version "0.25.5" + resolved "https://registry.npm.taobao.org/magic-string/download/magic-string-0.25.5.tgz#694fa8c6b9a51d83cc4a72c5b6883a7cfa890e40" + integrity sha1-aU+oxrmlHYPMSnLFtog6fPqJDkA= + dependencies: + sourcemap-codec "^1.4.4" + +make-dir@^2.0.0, make-dir@^2.1.0: + version "2.1.0" + resolved "https://registry.npm.taobao.org/make-dir/download/make-dir-2.1.0.tgz#5f0310e18b8be898cc07009295a30ae41e91e6f5" + integrity sha1-XwMQ4YuL6JjMBwCSlaMK5B6R5vU= + dependencies: + pify "^4.0.1" + semver "^5.6.0" + +make-dir@^3.0.0: + version "3.0.0" + resolved "https://registry.npm.taobao.org/make-dir/download/make-dir-3.0.0.tgz#1b5f39f6b9270ed33f9f054c5c0f84304989f801" + integrity sha1-G1859rknDtM/nwVMXA+EMEmJ+AE= + dependencies: + semver "^6.0.0" + +make-error@^1.1.1: + version "1.3.5" + resolved "https://registry.npm.taobao.org/make-error/download/make-error-1.3.5.tgz#efe4e81f6db28cadd605c70f29c831b58ef776c8" + integrity sha1-7+ToH22yjK3WBccPKcgxtY73dsg= + +make-fetch-happen@^5.0.0: + version "5.0.2" + resolved "https://registry.npm.taobao.org/make-fetch-happen/download/make-fetch-happen-5.0.2.tgz?cache=0&sync_timestamp=1576544141539&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmake-fetch-happen%2Fdownload%2Fmake-fetch-happen-5.0.2.tgz#aa8387104f2687edca01c8687ee45013d02d19bd" + integrity sha1-qoOHEE8mh+3KAchofuRQE9AtGb0= + dependencies: + agentkeepalive "^3.4.1" + cacache "^12.0.0" + http-cache-semantics "^3.8.1" + http-proxy-agent "^2.1.0" + https-proxy-agent "^2.2.3" + lru-cache "^5.1.1" + mississippi "^3.0.0" + node-fetch-npm "^2.0.2" + promise-retry "^1.1.1" + socks-proxy-agent "^4.0.0" + ssri "^6.0.0" + +mamacro@^0.0.3: + version "0.0.3" + resolved "https://registry.npm.taobao.org/mamacro/download/mamacro-0.0.3.tgz#ad2c9576197c9f1abf308d0787865bd975a3f3e4" + integrity sha1-rSyVdhl8nxq/MI0Hh4Zb2XWj8+Q= + +map-age-cleaner@^0.1.1: + version "0.1.3" + resolved "https://registry.npm.taobao.org/map-age-cleaner/download/map-age-cleaner-0.1.3.tgz#7d583a7306434c055fe474b0f45078e6e1b4b92a" + integrity sha1-fVg6cwZDTAVf5HSw9FB45uG0uSo= + dependencies: + p-defer "^1.0.0" + +map-cache@^0.2.2: + version "0.2.2" + resolved "https://registry.npm.taobao.org/map-cache/download/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" + integrity sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8= + +map-visit@^1.0.0: + version "1.0.0" + resolved "https://registry.npm.taobao.org/map-visit/download/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f" + integrity sha1-7Nyo8TFE5mDxtb1B8S80edmN+48= + dependencies: + object-visit "^1.0.0" + +md5.js@^1.3.4: + version "1.3.5" + resolved "https://registry.npm.taobao.org/md5.js/download/md5.js-1.3.5.tgz#b5d07b8e3216e3e27cd728d72f70d1e6a342005f" + integrity sha1-tdB7jjIW4+J81yjXL3DR5qNCAF8= + dependencies: + hash-base "^3.0.0" + inherits "^2.0.1" + safe-buffer "^5.1.2" + +media-typer@0.3.0: + version "0.3.0" + resolved "https://registry.npm.taobao.org/media-typer/download/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" + integrity sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g= + +mem@^4.0.0: + version "4.3.0" + resolved "https://registry.npm.taobao.org/mem/download/mem-4.3.0.tgz#461af497bc4ae09608cdb2e60eefb69bff744178" + integrity sha1-Rhr0l7xK4JYIzbLmDu+2m/90QXg= + dependencies: + map-age-cleaner "^0.1.1" + mimic-fn "^2.0.0" + p-is-promise "^2.0.0" + +memory-fs@^0.4.0, memory-fs@^0.4.1: + version "0.4.1" + resolved "https://registry.npm.taobao.org/memory-fs/download/memory-fs-0.4.1.tgz?cache=0&sync_timestamp=1570537491040&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmemory-fs%2Fdownload%2Fmemory-fs-0.4.1.tgz#3a9a20b8462523e447cfbc7e8bb80ed667bfc552" + integrity sha1-OpoguEYlI+RHz7x+i7gO1me/xVI= + dependencies: + errno "^0.1.3" + readable-stream "^2.0.1" + +memory-fs@^0.5.0: + version "0.5.0" + resolved "https://registry.npm.taobao.org/memory-fs/download/memory-fs-0.5.0.tgz?cache=0&sync_timestamp=1570537491040&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmemory-fs%2Fdownload%2Fmemory-fs-0.5.0.tgz#324c01288b88652966d161db77838720845a8e3c" + integrity sha1-MkwBKIuIZSlm0WHbd4OHIIRajjw= + dependencies: + errno "^0.1.3" + readable-stream "^2.0.1" + +merge-descriptors@1.0.1: + version "1.0.1" + resolved "https://registry.npm.taobao.org/merge-descriptors/download/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" + integrity sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E= + +merge-stream@^2.0.0: + version "2.0.0" + resolved "https://registry.npm.taobao.org/merge-stream/download/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" + integrity sha1-UoI2KaFN0AyXcPtq1H3GMQ8sH2A= + +methods@~1.1.2: + version "1.1.2" + resolved "https://registry.npm.taobao.org/methods/download/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" + integrity sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4= + +micromatch@^3.1.10, micromatch@^3.1.4: + version "3.1.10" + resolved "https://registry.npm.taobao.org/micromatch/download/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23" + integrity sha1-cIWbyVyYQJUvNZoGij/En57PrCM= + dependencies: + arr-diff "^4.0.0" + array-unique "^0.3.2" + braces "^2.3.1" + define-property "^2.0.2" + extend-shallow "^3.0.2" + extglob "^2.0.4" + fragment-cache "^0.2.1" + kind-of "^6.0.2" + nanomatch "^1.2.9" + object.pick "^1.3.0" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.2" + +miller-rabin@^4.0.0: + version "4.0.1" + resolved "https://registry.npm.taobao.org/miller-rabin/download/miller-rabin-4.0.1.tgz#f080351c865b0dc562a8462966daa53543c78a4d" + integrity sha1-8IA1HIZbDcViqEYpZtqlNUPHik0= + dependencies: + bn.js "^4.0.0" + brorand "^1.0.1" + +mime-db@1.42.0, "mime-db@>= 1.40.0 < 2": + version "1.42.0" + resolved "https://registry.npm.taobao.org/mime-db/download/mime-db-1.42.0.tgz?cache=0&sync_timestamp=1569468742433&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmime-db%2Fdownload%2Fmime-db-1.42.0.tgz#3e252907b4c7adb906597b4b65636272cf9e7bac" + integrity sha1-PiUpB7THrbkGWXtLZWNics+ee6w= + +mime-types@^2.1.12, mime-types@~2.1.17, mime-types@~2.1.19, mime-types@~2.1.24: + version "2.1.25" + resolved "https://registry.npm.taobao.org/mime-types/download/mime-types-2.1.25.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmime-types%2Fdownload%2Fmime-types-2.1.25.tgz#39772d46621f93e2a80a856c53b86a62156a6437" + integrity sha1-OXctRmIfk+KoCoVsU7hqYhVqZDc= + dependencies: + mime-db "1.42.0" + +mime@1.6.0, mime@^1.4.1: + version "1.6.0" + resolved "https://registry.npm.taobao.org/mime/download/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" + integrity sha1-Ms2eXGRVO9WNGaVor0Uqz/BJgbE= + +mime@^2.3.1, mime@^2.4.4: + version "2.4.4" + resolved "https://registry.npm.taobao.org/mime/download/mime-2.4.4.tgz#bd7b91135fc6b01cde3e9bae33d659b63d8857e5" + integrity sha1-vXuRE1/GsBzePpuuM9ZZtj2IV+U= + +mimic-fn@^2.0.0, mimic-fn@^2.1.0: + version "2.1.0" + resolved "https://registry.npm.taobao.org/mimic-fn/download/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" + integrity sha1-ftLCzMyvhNP/y3pptXcR/CCDQBs= + +mini-css-extract-plugin@0.8.0: + version "0.8.0" + resolved "https://registry.npm.taobao.org/mini-css-extract-plugin/download/mini-css-extract-plugin-0.8.0.tgz?cache=0&sync_timestamp=1576856499989&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmini-css-extract-plugin%2Fdownload%2Fmini-css-extract-plugin-0.8.0.tgz#81d41ec4fe58c713a96ad7c723cdb2d0bd4d70e1" + integrity sha1-gdQexP5YxxOpatfHI82y0L1NcOE= + dependencies: + loader-utils "^1.1.0" + normalize-url "1.9.1" + schema-utils "^1.0.0" + webpack-sources "^1.1.0" + +minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1: + version "1.0.1" + resolved "https://registry.npm.taobao.org/minimalistic-assert/download/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7" + integrity sha1-LhlN4ERibUoQ5/f7wAznPoPk1cc= + +minimalistic-crypto-utils@^1.0.0, minimalistic-crypto-utils@^1.0.1: + version "1.0.1" + resolved "https://registry.npm.taobao.org/minimalistic-crypto-utils/download/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" + integrity sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo= + +minimatch@3.0.4, minimatch@^3.0.2, minimatch@^3.0.3, minimatch@^3.0.4: + version "3.0.4" + resolved "https://registry.npm.taobao.org/minimatch/download/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" + integrity sha1-UWbihkV/AzBgZL5Ul+jbsMPTIIM= + dependencies: + brace-expansion "^1.1.7" + +minimist@0.0.8: + version "0.0.8" + resolved "https://registry.npm.taobao.org/minimist/download/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" + integrity sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0= + +minimist@^1.2.0: + version "1.2.0" + resolved "https://registry.npm.taobao.org/minimist/download/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" + integrity sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ= + +minimist@~0.0.1: + version "0.0.10" + resolved "https://registry.npm.taobao.org/minimist/download/minimist-0.0.10.tgz#de3f98543dbf96082be48ad1a0c7cda836301dcf" + integrity sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8= + +minipass@^2.3.5, minipass@^2.6.0, minipass@^2.8.6, minipass@^2.9.0: + version "2.9.0" + resolved "https://registry.npm.taobao.org/minipass/download/minipass-2.9.0.tgz?cache=0&sync_timestamp=1571953917221&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fminipass%2Fdownload%2Fminipass-2.9.0.tgz#e713762e7d3e32fed803115cf93e04bca9fcc9a6" + integrity sha1-5xN2Ln0+Mv7YAxFc+T4EvKn8yaY= + dependencies: + safe-buffer "^5.1.2" + yallist "^3.0.0" + +minizlib@^1.2.1: + version "1.3.3" + resolved "https://registry.npm.taobao.org/minizlib/download/minizlib-1.3.3.tgz#2290de96818a34c29551c8a8d301216bd65a861d" + integrity sha1-IpDeloGKNMKVUcio0wEha9Zahh0= + dependencies: + minipass "^2.9.0" + +mississippi@^3.0.0: + version "3.0.0" + resolved "https://registry.npm.taobao.org/mississippi/download/mississippi-3.0.0.tgz#ea0a3291f97e0b5e8776b363d5f0a12d94c67022" + integrity sha1-6goykfl+C16HdrNj1fChLZTGcCI= + dependencies: + concat-stream "^1.5.0" + duplexify "^3.4.2" + end-of-stream "^1.1.0" + flush-write-stream "^1.0.0" + from2 "^2.1.0" + parallel-transform "^1.1.0" + pump "^3.0.0" + pumpify "^1.3.3" + stream-each "^1.1.0" + through2 "^2.0.0" + +mixin-deep@^1.2.0: + version "1.3.2" + resolved "https://registry.npm.taobao.org/mixin-deep/download/mixin-deep-1.3.2.tgz#1120b43dc359a785dce65b55b82e257ccf479566" + integrity sha1-ESC0PcNZp4Xc5ltVuC4lfM9HlWY= + dependencies: + for-in "^1.0.2" + is-extendable "^1.0.1" + +mkdirp@0.5.x, mkdirp@^0.5.0, mkdirp@^0.5.1: + version "0.5.1" + resolved "https://registry.npm.taobao.org/mkdirp/download/mkdirp-0.5.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmkdirp%2Fdownload%2Fmkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" + integrity sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM= + dependencies: + minimist "0.0.8" + +move-concurrently@^1.0.1: + version "1.0.1" + resolved "https://registry.npm.taobao.org/move-concurrently/download/move-concurrently-1.0.1.tgz#be2c005fda32e0b29af1f05d7c4b33214c701f92" + integrity sha1-viwAX9oy4LKa8fBdfEszIUxwH5I= + dependencies: + aproba "^1.1.1" + copy-concurrently "^1.0.0" + fs-write-stream-atomic "^1.0.8" + mkdirp "^0.5.1" + rimraf "^2.5.4" + run-queue "^1.0.3" + +ms@2.0.0: + version "2.0.0" + resolved "https://registry.npm.taobao.org/ms/download/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" + integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= + +ms@2.1.1: + version "2.1.1" + resolved "https://registry.npm.taobao.org/ms/download/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a" + integrity sha1-MKWGTrPrsKZvLr5tcnrwagnYbgo= + +ms@^2.0.0, ms@^2.1.1: + version "2.1.2" + resolved "https://registry.npm.taobao.org/ms/download/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" + integrity sha1-0J0fNXtEP0kzgqjrPM0YOHKuYAk= + +multicast-dns-service-types@^1.1.0: + version "1.1.0" + resolved "https://registry.npm.taobao.org/multicast-dns-service-types/download/multicast-dns-service-types-1.1.0.tgz#899f11d9686e5e05cb91b35d5f0e63b773cfc901" + integrity sha1-iZ8R2WhuXgXLkbNdXw5jt3PPyQE= + +multicast-dns@^6.0.1: + version "6.2.3" + resolved "https://registry.npm.taobao.org/multicast-dns/download/multicast-dns-6.2.3.tgz#a0ec7bd9055c4282f790c3c82f4e28db3b31b229" + integrity sha1-oOx72QVcQoL3kMPIL04o2zsxsik= + dependencies: + dns-packet "^1.3.1" + thunky "^1.0.2" + +mute-stream@0.0.8: + version "0.0.8" + resolved "https://registry.npm.taobao.org/mute-stream/download/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d" + integrity sha1-FjDEKyJR/4HiooPelqVJfqkuXg0= + +nan@^2.12.1: + version "2.14.0" + resolved "https://registry.npm.taobao.org/nan/download/nan-2.14.0.tgz#7818f722027b2459a86f0295d434d1fc2336c52c" + integrity sha1-eBj3IgJ7JFmobwKV1DTR/CM2xSw= + +nanomatch@^1.2.9: + version "1.2.13" + resolved "https://registry.npm.taobao.org/nanomatch/download/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119" + integrity sha1-uHqKpPwN6P5r6IiVs4mD/yZb0Rk= + dependencies: + arr-diff "^4.0.0" + array-unique "^0.3.2" + define-property "^2.0.2" + extend-shallow "^3.0.2" + fragment-cache "^0.2.1" + is-windows "^1.0.2" + kind-of "^6.0.2" + object.pick "^1.3.0" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.1" + +needle@^2.2.1: + version "2.4.0" + resolved "https://registry.npm.taobao.org/needle/download/needle-2.4.0.tgz#6833e74975c444642590e15a750288c5f939b57c" + integrity sha1-aDPnSXXERGQlkOFadQKIxfk5tXw= + dependencies: + debug "^3.2.6" + iconv-lite "^0.4.4" + sax "^1.2.4" + +negotiator@0.6.2: + version "0.6.2" + resolved "https://registry.npm.taobao.org/negotiator/download/negotiator-0.6.2.tgz#feacf7ccf525a77ae9634436a64883ffeca346fb" + integrity sha1-/qz3zPUlp3rpY0Q2pkiD/+yjRvs= + +neo-async@^2.5.0, neo-async@^2.6.0, neo-async@^2.6.1: + version "2.6.1" + resolved "https://registry.npm.taobao.org/neo-async/download/neo-async-2.6.1.tgz#ac27ada66167fa8849a6addd837f6b189ad2081c" + integrity sha1-rCetpmFn+ohJpq3dg39rGJrSCBw= + +nice-try@^1.0.4: + version "1.0.5" + resolved "https://registry.npm.taobao.org/nice-try/download/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" + integrity sha1-ozeKdpbOfSI+iPybdkvX7xCJ42Y= + +node-fetch-npm@^2.0.2: + version "2.0.2" + resolved "https://registry.npm.taobao.org/node-fetch-npm/download/node-fetch-npm-2.0.2.tgz#7258c9046182dca345b4208eda918daf33697ff7" + integrity sha1-cljJBGGC3KNFtCCO2pGNrzNpf/c= + dependencies: + encoding "^0.1.11" + json-parse-better-errors "^1.0.0" + safe-buffer "^5.1.1" + +node-forge@0.9.0: + version "0.9.0" + resolved "https://registry.npm.taobao.org/node-forge/download/node-forge-0.9.0.tgz?cache=0&sync_timestamp=1569524669712&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fnode-forge%2Fdownload%2Fnode-forge-0.9.0.tgz#d624050edbb44874adca12bb9a52ec63cb782579" + integrity sha1-1iQFDtu0SHStyhK7mlLsY8t4JXk= + +node-libs-browser@^2.2.1: + version "2.2.1" + resolved "https://registry.npm.taobao.org/node-libs-browser/download/node-libs-browser-2.2.1.tgz#b64f513d18338625f90346d27b0d235e631f6425" + integrity sha1-tk9RPRgzhiX5A0bSew0jXmMfZCU= + dependencies: + assert "^1.1.1" + browserify-zlib "^0.2.0" + buffer "^4.3.0" + console-browserify "^1.1.0" + constants-browserify "^1.0.0" + crypto-browserify "^3.11.0" + domain-browser "^1.1.1" + events "^3.0.0" + https-browserify "^1.0.0" + os-browserify "^0.3.0" + path-browserify "0.0.1" + process "^0.11.10" + punycode "^1.2.4" + querystring-es3 "^0.2.0" + readable-stream "^2.3.3" + stream-browserify "^2.0.1" + stream-http "^2.7.2" + string_decoder "^1.0.0" + timers-browserify "^2.0.4" + tty-browserify "0.0.0" + url "^0.11.0" + util "^0.11.0" + vm-browserify "^1.0.1" + +node-pre-gyp@*: + version "0.14.0" + resolved "https://registry.npm.taobao.org/node-pre-gyp/download/node-pre-gyp-0.14.0.tgz#9a0596533b877289bcad4e143982ca3d904ddc83" + integrity sha1-mgWWUzuHcom8rU4UOYLKPZBN3IM= + dependencies: + detect-libc "^1.0.2" + mkdirp "^0.5.1" + needle "^2.2.1" + nopt "^4.0.1" + npm-packlist "^1.1.6" + npmlog "^4.0.2" + rc "^1.2.7" + rimraf "^2.6.1" + semver "^5.3.0" + tar "^4.4.2" + +node-releases@^1.1.25, node-releases@^1.1.44: + version "1.1.44" + resolved "https://registry.npm.taobao.org/node-releases/download/node-releases-1.1.44.tgz#cd66438a6eb875e3eb012b6a12e48d9f4326ffd7" + integrity sha1-zWZDim64dePrAStqEuSNn0Mm/9c= + dependencies: + semver "^6.3.0" + +nopt@^4.0.1: + version "4.0.1" + resolved "https://registry.npm.taobao.org/nopt/download/nopt-4.0.1.tgz#d0d4685afd5415193c8c7505602d0d17cd64474d" + integrity sha1-0NRoWv1UFRk8jHUFYC0NF81kR00= + dependencies: + abbrev "1" + osenv "^0.1.4" + +normalize-package-data@^2.0.0, normalize-package-data@^2.4.0: + version "2.5.0" + resolved "https://registry.npm.taobao.org/normalize-package-data/download/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" + integrity sha1-5m2xg4sgDB38IzIl0SyzZSDiNKg= + dependencies: + hosted-git-info "^2.1.4" + resolve "^1.10.0" + semver "2 || 3 || 4 || 5" + validate-npm-package-license "^3.0.1" + +normalize-path@^2.1.1: + version "2.1.1" + resolved "https://registry.npm.taobao.org/normalize-path/download/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" + integrity sha1-GrKLVW4Zg2Oowab35vogE3/mrtk= + dependencies: + remove-trailing-separator "^1.0.1" + +normalize-path@^3.0.0, normalize-path@~3.0.0: + version "3.0.0" + resolved "https://registry.npm.taobao.org/normalize-path/download/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" + integrity sha1-Dc1p/yOhybEf0JeDFmRKA4ghamU= + +normalize-range@^0.1.2: + version "0.1.2" + resolved "https://registry.npm.taobao.org/normalize-range/download/normalize-range-0.1.2.tgz#2d10c06bdfd312ea9777695a4d28439456b75942" + integrity sha1-LRDAa9/TEuqXd2laTShDlFa3WUI= + +normalize-url@1.9.1: + version "1.9.1" + resolved "https://registry.npm.taobao.org/normalize-url/download/normalize-url-1.9.1.tgz#2cc0d66b31ea23036458436e3620d85954c66c3c" + integrity sha1-LMDWazHqIwNkWENuNiDYWVTGbDw= + dependencies: + object-assign "^4.0.1" + prepend-http "^1.0.0" + query-string "^4.1.0" + sort-keys "^1.0.0" + +npm-bundled@^1.0.1: + version "1.1.1" + resolved "https://registry.npm.taobao.org/npm-bundled/download/npm-bundled-1.1.1.tgz#1edd570865a94cdb1bc8220775e29466c9fb234b" + integrity sha1-Ht1XCGWpTNsbyCIHdeKUZsn7I0s= + dependencies: + npm-normalize-package-bin "^1.0.1" + +npm-normalize-package-bin@^1.0.0, npm-normalize-package-bin@^1.0.1: + version "1.0.1" + resolved "https://registry.npm.taobao.org/npm-normalize-package-bin/download/npm-normalize-package-bin-1.0.1.tgz#6e79a41f23fd235c0623218228da7d9c23b8f6e2" + integrity sha1-bnmkHyP9I1wGIyGCKNp9nCO49uI= + +npm-package-arg@6.1.0: + version "6.1.0" + resolved "https://registry.npm.taobao.org/npm-package-arg/download/npm-package-arg-6.1.0.tgz#15ae1e2758a5027efb4c250554b85a737db7fcc1" + integrity sha1-Fa4eJ1ilAn77TCUFVLhac323/ME= + dependencies: + hosted-git-info "^2.6.0" + osenv "^0.1.5" + semver "^5.5.0" + validate-npm-package-name "^3.0.0" + +npm-package-arg@^6.0.0, npm-package-arg@^6.1.0: + version "6.1.1" + resolved "https://registry.npm.taobao.org/npm-package-arg/download/npm-package-arg-6.1.1.tgz#02168cb0a49a2b75bf988a28698de7b529df5cb7" + integrity sha1-AhaMsKSaK3W/mIooaY3ntSnfXLc= + dependencies: + hosted-git-info "^2.7.1" + osenv "^0.1.5" + semver "^5.6.0" + validate-npm-package-name "^3.0.0" + +npm-packlist@^1.1.12, npm-packlist@^1.1.6: + version "1.4.7" + resolved "https://registry.npm.taobao.org/npm-packlist/download/npm-packlist-1.4.7.tgz#9e954365a06b80b18111ea900945af4f88ed4848" + integrity sha1-npVDZaBrgLGBEeqQCUWvT4jtSEg= + dependencies: + ignore-walk "^3.0.1" + npm-bundled "^1.0.1" + +npm-pick-manifest@3.0.2: + version "3.0.2" + resolved "https://registry.npm.taobao.org/npm-pick-manifest/download/npm-pick-manifest-3.0.2.tgz?cache=0&sync_timestamp=1576390636485&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fnpm-pick-manifest%2Fdownload%2Fnpm-pick-manifest-3.0.2.tgz#f4d9e5fd4be2153e5f4e5f9b7be8dc419a99abb7" + integrity sha1-9Nnl/UviFT5fTl+be+jcQZqZq7c= + dependencies: + figgy-pudding "^3.5.1" + npm-package-arg "^6.0.0" + semver "^5.4.1" + +npm-pick-manifest@^2.2.3: + version "2.2.3" + resolved "https://registry.npm.taobao.org/npm-pick-manifest/download/npm-pick-manifest-2.2.3.tgz?cache=0&sync_timestamp=1576390636485&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fnpm-pick-manifest%2Fdownload%2Fnpm-pick-manifest-2.2.3.tgz#32111d2a9562638bb2c8f2bf27f7f3092c8fae40" + integrity sha1-MhEdKpViY4uyyPK/J/fzCSyPrkA= + dependencies: + figgy-pudding "^3.5.1" + npm-package-arg "^6.0.0" + semver "^5.4.1" + +npm-registry-fetch@^4.0.0: + version "4.0.2" + resolved "https://registry.npm.taobao.org/npm-registry-fetch/download/npm-registry-fetch-4.0.2.tgz#2b1434f93ccbe6b6385f8e45f45db93e16921d7a" + integrity sha1-KxQ0+TzL5rY4X45F9F25PhaSHXo= + dependencies: + JSONStream "^1.3.4" + bluebird "^3.5.1" + figgy-pudding "^3.4.1" + lru-cache "^5.1.1" + make-fetch-happen "^5.0.0" + npm-package-arg "^6.1.0" + safe-buffer "^5.2.0" + +npm-run-path@^2.0.0: + version "2.0.2" + resolved "https://registry.npm.taobao.org/npm-run-path/download/npm-run-path-2.0.2.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fnpm-run-path%2Fdownload%2Fnpm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" + integrity sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8= + dependencies: + path-key "^2.0.0" + +npmlog@^4.0.2: + version "4.1.2" + resolved "https://registry.npm.taobao.org/npmlog/download/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b" + integrity sha1-CKfyqL9zRgR3mp76StXMcXq7lUs= + dependencies: + are-we-there-yet "~1.1.2" + console-control-strings "~1.1.0" + gauge "~2.7.3" + set-blocking "~2.0.0" + +null-check@^1.0.0: + version "1.0.0" + resolved "https://registry.npm.taobao.org/null-check/download/null-check-1.0.0.tgz#977dffd7176012b9ec30d2a39db5cf72a0439edd" + integrity sha1-l33/1xdgErnsMNKjnbXPcqBDnt0= + +num2fraction@^1.2.2: + version "1.2.2" + resolved "https://registry.npm.taobao.org/num2fraction/download/num2fraction-1.2.2.tgz#6f682b6a027a4e9ddfa4564cd2589d1d4e669ede" + integrity sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4= + +number-is-nan@^1.0.0: + version "1.0.1" + resolved "https://registry.npm.taobao.org/number-is-nan/download/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" + integrity sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0= + +oauth-sign@~0.9.0: + version "0.9.0" + resolved "https://registry.npm.taobao.org/oauth-sign/download/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455" + integrity sha1-R6ewFrqmi1+g7PPe4IqFxnmsZFU= + +object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1: + version "4.1.1" + resolved "https://registry.npm.taobao.org/object-assign/download/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" + integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= + +object-component@0.0.3: + version "0.0.3" + resolved "https://registry.npm.taobao.org/object-component/download/object-component-0.0.3.tgz#f0c69aa50efc95b866c186f400a33769cb2f1291" + integrity sha1-8MaapQ78lbhmwYb0AKM3acsvEpE= + +object-copy@^0.1.0: + version "0.1.0" + resolved "https://registry.npm.taobao.org/object-copy/download/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c" + integrity sha1-fn2Fi3gb18mRpBupde04EnVOmYw= + dependencies: + copy-descriptor "^0.1.0" + define-property "^0.2.5" + kind-of "^3.0.3" + +object-inspect@^1.7.0: + version "1.7.0" + resolved "https://registry.npm.taobao.org/object-inspect/download/object-inspect-1.7.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fobject-inspect%2Fdownload%2Fobject-inspect-1.7.0.tgz#f4f6bd181ad77f006b5ece60bd0b6f398ff74a67" + integrity sha1-9Pa9GBrXfwBrXs5gvQtvOY/3Smc= + +object-is@^1.0.1: + version "1.0.2" + resolved "https://registry.npm.taobao.org/object-is/download/object-is-1.0.2.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fobject-is%2Fdownload%2Fobject-is-1.0.2.tgz#6b80eb84fe451498f65007982f035a5b445edec4" + integrity sha1-a4DrhP5FFJj2UAeYLwNaW0Re3sQ= + +object-keys@^1.0.11, object-keys@^1.0.12, object-keys@^1.1.1: + version "1.1.1" + resolved "https://registry.npm.taobao.org/object-keys/download/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" + integrity sha1-HEfyct8nfzsdrwYWd9nILiMixg4= + +object-visit@^1.0.0: + version "1.0.1" + resolved "https://registry.npm.taobao.org/object-visit/download/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb" + integrity sha1-95xEk68MU3e1n+OdOV5BBC3QRbs= + dependencies: + isobject "^3.0.0" + +object.assign@^4.1.0: + version "4.1.0" + resolved "https://registry.npm.taobao.org/object.assign/download/object.assign-4.1.0.tgz#968bf1100d7956bb3ca086f006f846b3bc4008da" + integrity sha1-lovxEA15Vrs8oIbwBvhGs7xACNo= + dependencies: + define-properties "^1.1.2" + function-bind "^1.1.1" + has-symbols "^1.0.0" + object-keys "^1.0.11" + +object.getownpropertydescriptors@^2.0.3: + version "2.1.0" + resolved "https://registry.npm.taobao.org/object.getownpropertydescriptors/download/object.getownpropertydescriptors-2.1.0.tgz#369bf1f9592d8ab89d712dced5cb81c7c5352649" + integrity sha1-Npvx+VktiridcS3O1cuBx8U1Jkk= + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.0-next.1" + +object.pick@^1.3.0: + version "1.3.0" + resolved "https://registry.npm.taobao.org/object.pick/download/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747" + integrity sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c= + dependencies: + isobject "^3.0.1" + +obuf@^1.0.0, obuf@^1.1.2: + version "1.1.2" + resolved "https://registry.npm.taobao.org/obuf/download/obuf-1.1.2.tgz#09bea3343d41859ebd446292d11c9d4db619084e" + integrity sha1-Cb6jND1BhZ69RGKS0RydTbYZCE4= + +on-finished@~2.3.0: + version "2.3.0" + resolved "https://registry.npm.taobao.org/on-finished/download/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947" + integrity sha1-IPEzZIGwg811M3mSoWlxqi2QaUc= + dependencies: + ee-first "1.1.1" + +on-headers@~1.0.2: + version "1.0.2" + resolved "https://registry.npm.taobao.org/on-headers/download/on-headers-1.0.2.tgz#772b0ae6aaa525c399e489adfad90c403eb3c28f" + integrity sha1-dysK5qqlJcOZ5Imt+tkMQD6zwo8= + +once@^1.3.0, once@^1.3.1, once@^1.4.0: + version "1.4.0" + resolved "https://registry.npm.taobao.org/once/download/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= + dependencies: + wrappy "1" + +onetime@^5.1.0: + version "5.1.0" + resolved "https://registry.npm.taobao.org/onetime/download/onetime-5.1.0.tgz#fff0f3c91617fe62bb50189636e99ac8a6df7be5" + integrity sha1-//DzyRYX/mK7UBiWNumayKbfe+U= + dependencies: + mimic-fn "^2.1.0" + +open@6.4.0: + version "6.4.0" + resolved "https://registry.npm.taobao.org/open/download/open-6.4.0.tgz?cache=0&sync_timestamp=1571165370049&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fopen%2Fdownload%2Fopen-6.4.0.tgz#5c13e96d0dc894686164f18965ecfe889ecfc8a9" + integrity sha1-XBPpbQ3IlGhhZPGJZez+iJ7PyKk= + dependencies: + is-wsl "^1.1.0" + +opn@^5.5.0: + version "5.5.0" + resolved "https://registry.npm.taobao.org/opn/download/opn-5.5.0.tgz#fc7164fab56d235904c51c3b27da6758ca3b9bfc" + integrity sha1-/HFk+rVtI1kExRw7J9pnWMo7m/w= + dependencies: + is-wsl "^1.1.0" + +optimist@^0.6.1, optimist@~0.6.0: + version "0.6.1" + resolved "https://registry.npm.taobao.org/optimist/download/optimist-0.6.1.tgz#da3ea74686fa21a19a111c326e90eb15a0196686" + integrity sha1-2j6nRob6IaGaERwybpDrFaAZZoY= + dependencies: + minimist "~0.0.1" + wordwrap "~0.0.2" + +original@^1.0.0: + version "1.0.2" + resolved "https://registry.npm.taobao.org/original/download/original-1.0.2.tgz#e442a61cffe1c5fd20a65f3261c26663b303f25f" + integrity sha1-5EKmHP/hxf0gpl8yYcJmY7MD8l8= + dependencies: + url-parse "^1.4.3" + +os-browserify@^0.3.0: + version "0.3.0" + resolved "https://registry.npm.taobao.org/os-browserify/download/os-browserify-0.3.0.tgz#854373c7f5c2315914fc9bfc6bd8238fdda1ec27" + integrity sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc= + +os-homedir@^1.0.0: + version "1.0.2" + resolved "https://registry.npm.taobao.org/os-homedir/download/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" + integrity sha1-/7xJiDNuDoM94MFox+8VISGqf7M= + +os-locale@^3.0.0, os-locale@^3.1.0: + version "3.1.0" + resolved "https://registry.npm.taobao.org/os-locale/download/os-locale-3.1.0.tgz#a802a6ee17f24c10483ab9935719cef4ed16bf1a" + integrity sha1-qAKm7hfyTBBIOrmTVxnO9O0Wvxo= + dependencies: + execa "^1.0.0" + lcid "^2.0.0" + mem "^4.0.0" + +os-tmpdir@^1.0.0, os-tmpdir@~1.0.1, os-tmpdir@~1.0.2: + version "1.0.2" + resolved "https://registry.npm.taobao.org/os-tmpdir/download/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" + integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ= + +osenv@^0.1.4, osenv@^0.1.5: + version "0.1.5" + resolved "https://registry.npm.taobao.org/osenv/download/osenv-0.1.5.tgz#85cdfafaeb28e8677f416e287592b5f3f49ea410" + integrity sha1-hc36+uso6Gd/QW4odZK18/SepBA= + dependencies: + os-homedir "^1.0.0" + os-tmpdir "^1.0.0" + +p-defer@^1.0.0: + version "1.0.0" + resolved "https://registry.npm.taobao.org/p-defer/download/p-defer-1.0.0.tgz#9f6eb182f6c9aa8cd743004a7d4f96b196b0fb0c" + integrity sha1-n26xgvbJqozXQwBKfU+WsZaw+ww= + +p-finally@^1.0.0: + version "1.0.0" + resolved "https://registry.npm.taobao.org/p-finally/download/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" + integrity sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4= + +p-is-promise@^2.0.0: + version "2.1.0" + resolved "https://registry.npm.taobao.org/p-is-promise/download/p-is-promise-2.1.0.tgz#918cebaea248a62cf7ffab8e3bca8c5f882fc42e" + integrity sha1-kYzrrqJIpiz3/6uOO8qMX4gvxC4= + +p-limit@^2.0.0, p-limit@^2.2.0, p-limit@^2.2.1: + version "2.2.2" + resolved "https://registry.npm.taobao.org/p-limit/download/p-limit-2.2.2.tgz#61279b67721f5287aa1c13a9a7fbbc48c9291b1e" + integrity sha1-YSebZ3IfUoeqHBOpp/u8SMkpGx4= + dependencies: + p-try "^2.0.0" + +p-locate@^3.0.0: + version "3.0.0" + resolved "https://registry.npm.taobao.org/p-locate/download/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4" + integrity sha1-Mi1poFwCZLJZl9n0DNiokasAZKQ= + dependencies: + p-limit "^2.0.0" + +p-locate@^4.1.0: + version "4.1.0" + resolved "https://registry.npm.taobao.org/p-locate/download/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" + integrity sha1-o0KLtwiLOmApL2aRkni3wpetTwc= + dependencies: + p-limit "^2.2.0" + +p-map@^2.0.0: + version "2.1.0" + resolved "https://registry.npm.taobao.org/p-map/download/p-map-2.1.0.tgz#310928feef9c9ecc65b68b17693018a665cea175" + integrity sha1-MQko/u+cnsxltosXaTAYpmXOoXU= + +p-retry@^3.0.1: + version "3.0.1" + resolved "https://registry.npm.taobao.org/p-retry/download/p-retry-3.0.1.tgz?cache=0&sync_timestamp=1572521210242&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fp-retry%2Fdownload%2Fp-retry-3.0.1.tgz#316b4c8893e2c8dc1cfa891f406c4b422bebf328" + integrity sha1-MWtMiJPiyNwc+okfQGxLQivr8yg= + dependencies: + retry "^0.12.0" + +p-try@^2.0.0: + version "2.2.0" + resolved "https://registry.npm.taobao.org/p-try/download/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" + integrity sha1-yyhoVA4xPWHeWPr741zpAE1VQOY= + +pacote@9.5.5: + version "9.5.5" + resolved "https://registry.npm.taobao.org/pacote/download/pacote-9.5.5.tgz#63355a393614c3424e735820c3731e2cbbedaeeb" + integrity sha1-YzVaOTYUw0JOc1ggw3MeLLvtrus= + dependencies: + bluebird "^3.5.3" + cacache "^12.0.2" + figgy-pudding "^3.5.1" + get-stream "^4.1.0" + glob "^7.1.3" + infer-owner "^1.0.4" + lru-cache "^5.1.1" + make-fetch-happen "^5.0.0" + minimatch "^3.0.4" + minipass "^2.3.5" + mississippi "^3.0.0" + mkdirp "^0.5.1" + normalize-package-data "^2.4.0" + npm-package-arg "^6.1.0" + npm-packlist "^1.1.12" + npm-pick-manifest "^2.2.3" + npm-registry-fetch "^4.0.0" + osenv "^0.1.5" + promise-inflight "^1.0.1" + promise-retry "^1.1.1" + protoduck "^5.0.1" + rimraf "^2.6.2" + safe-buffer "^5.1.2" + semver "^5.6.0" + ssri "^6.0.1" + tar "^4.4.8" + unique-filename "^1.1.1" + which "^1.3.1" + +pako@~1.0.2, pako@~1.0.5: + version "1.0.10" + resolved "https://registry.npm.taobao.org/pako/download/pako-1.0.10.tgz#4328badb5086a426aa90f541977d4955da5c9732" + integrity sha1-Qyi621CGpCaqkPVBl31JVdpclzI= + +parallel-transform@^1.1.0: + version "1.2.0" + resolved "https://registry.npm.taobao.org/parallel-transform/download/parallel-transform-1.2.0.tgz#9049ca37d6cb2182c3b1d2c720be94d14a5814fc" + integrity sha1-kEnKN9bLIYLDsdLHIL6U0UpYFPw= + dependencies: + cyclist "^1.0.1" + inherits "^2.0.3" + readable-stream "^2.1.5" + +parse-asn1@^5.0.0: + version "5.1.5" + resolved "https://registry.npm.taobao.org/parse-asn1/download/parse-asn1-5.1.5.tgz#003271343da58dc94cace494faef3d2147ecea0e" + integrity sha1-ADJxND2ljclMrOSU+u89IUfs6g4= + dependencies: + asn1.js "^4.0.0" + browserify-aes "^1.0.0" + create-hash "^1.1.0" + evp_bytestokey "^1.0.0" + pbkdf2 "^3.0.3" + safe-buffer "^5.1.1" + +parse-json@^4.0.0: + version "4.0.0" + resolved "https://registry.npm.taobao.org/parse-json/download/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0" + integrity sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA= + dependencies: + error-ex "^1.3.1" + json-parse-better-errors "^1.0.1" + +parse5@4.0.0: + version "4.0.0" + resolved "https://registry.npm.taobao.org/parse5/download/parse5-4.0.0.tgz#6d78656e3da8d78b4ec0b906f7c08ef1dfe3f608" + integrity sha1-bXhlbj2o14tOwLkG98CO8d/j9gg= + +parse5@^5.0.0: + version "5.1.1" + resolved "https://registry.npm.taobao.org/parse5/download/parse5-5.1.1.tgz#f68e4e5ba1852ac2cadc00f4555fff6c2abb6178" + integrity sha1-9o5OW6GFKsLK3AD0VV//bCq7YXg= + +parseqs@0.0.5: + version "0.0.5" + resolved "https://registry.npm.taobao.org/parseqs/download/parseqs-0.0.5.tgz#d5208a3738e46766e291ba2ea173684921a8b89d" + integrity sha1-1SCKNzjkZ2bikbouoXNoSSGouJ0= + dependencies: + better-assert "~1.0.0" + +parseuri@0.0.5: + version "0.0.5" + resolved "https://registry.npm.taobao.org/parseuri/download/parseuri-0.0.5.tgz#80204a50d4dbb779bfdc6ebe2778d90e4bce320a" + integrity sha1-gCBKUNTbt3m/3G6+J3jZDkvOMgo= + dependencies: + better-assert "~1.0.0" + +parseurl@~1.3.2, parseurl@~1.3.3: + version "1.3.3" + resolved "https://registry.npm.taobao.org/parseurl/download/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" + integrity sha1-naGee+6NEt/wUT7Vt2lXeTvC6NQ= + +pascalcase@^0.1.1: + version "0.1.1" + resolved "https://registry.npm.taobao.org/pascalcase/download/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14" + integrity sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ= + +path-browserify@0.0.1: + version "0.0.1" + resolved "https://registry.npm.taobao.org/path-browserify/download/path-browserify-0.0.1.tgz#e6c4ddd7ed3aa27c68a20cc4e50e1a4ee83bbc4a" + integrity sha1-5sTd1+06onxoogzE5Q4aTug7vEo= + +path-dirname@^1.0.0: + version "1.0.2" + resolved "https://registry.npm.taobao.org/path-dirname/download/path-dirname-1.0.2.tgz#cc33d24d525e099a5388c0336c6e32b9160609e0" + integrity sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA= + +path-exists@^3.0.0: + version "3.0.0" + resolved "https://registry.npm.taobao.org/path-exists/download/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" + integrity sha1-zg6+ql94yxiSXqfYENe1mwEP1RU= + +path-exists@^4.0.0: + version "4.0.0" + resolved "https://registry.npm.taobao.org/path-exists/download/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" + integrity sha1-UTvb4tO5XXdi6METfvoZXGxhtbM= + +path-is-absolute@^1.0.0: + version "1.0.1" + resolved "https://registry.npm.taobao.org/path-is-absolute/download/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= + +path-is-inside@^1.0.1, path-is-inside@^1.0.2: + version "1.0.2" + resolved "https://registry.npm.taobao.org/path-is-inside/download/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" + integrity sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM= + +path-key@^2.0.0, path-key@^2.0.1: + version "2.0.1" + resolved "https://registry.npm.taobao.org/path-key/download/path-key-2.0.1.tgz?cache=0&sync_timestamp=1574441404712&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpath-key%2Fdownload%2Fpath-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" + integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A= + +path-parse@^1.0.6: + version "1.0.6" + resolved "https://registry.npm.taobao.org/path-parse/download/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c" + integrity sha1-1i27VnlAXXLEc37FhgDp3c8G0kw= + +path-to-regexp@0.1.7: + version "0.1.7" + resolved "https://registry.npm.taobao.org/path-to-regexp/download/path-to-regexp-0.1.7.tgz?cache=0&sync_timestamp=1574278831909&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpath-to-regexp%2Fdownload%2Fpath-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" + integrity sha1-32BBeABfUi8V60SQ5yR6G/qmf4w= + +path-type@^3.0.0: + version "3.0.0" + resolved "https://registry.npm.taobao.org/path-type/download/path-type-3.0.0.tgz#cef31dc8e0a1a3bb0d105c0cd97cf3bf47f4e36f" + integrity sha1-zvMdyOCho7sNEFwM2Xzzv0f0428= + dependencies: + pify "^3.0.0" + +pbkdf2@^3.0.3: + version "3.0.17" + resolved "https://registry.npm.taobao.org/pbkdf2/download/pbkdf2-3.0.17.tgz#976c206530617b14ebb32114239f7b09336e93a6" + integrity sha1-l2wgZTBhexTrsyEUI597CTNuk6Y= + dependencies: + create-hash "^1.1.2" + create-hmac "^1.1.4" + ripemd160 "^2.0.1" + safe-buffer "^5.0.1" + sha.js "^2.4.8" + +performance-now@^2.1.0: + version "2.1.0" + resolved "https://registry.npm.taobao.org/performance-now/download/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" + integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns= + +picomatch@^2.0.4, picomatch@^2.0.7: + version "2.2.1" + resolved "https://registry.npm.taobao.org/picomatch/download/picomatch-2.2.1.tgz?cache=0&sync_timestamp=1578174759917&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpicomatch%2Fdownload%2Fpicomatch-2.2.1.tgz#21bac888b6ed8601f831ce7816e335bc779f0a4a" + integrity sha1-IbrIiLbthgH4Mc54FuM1vHefCko= + +pify@^2.0.0, pify@^2.3.0: + version "2.3.0" + resolved "https://registry.npm.taobao.org/pify/download/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" + integrity sha1-7RQaasBDqEnqWISY59yosVMw6Qw= + +pify@^3.0.0: + version "3.0.0" + resolved "https://registry.npm.taobao.org/pify/download/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176" + integrity sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY= + +pify@^4.0.1: + version "4.0.1" + resolved "https://registry.npm.taobao.org/pify/download/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231" + integrity sha1-SyzSXFDVmHNcUCkiJP2MbfQeMjE= + +pinkie-promise@^2.0.0: + version "2.0.1" + resolved "https://registry.npm.taobao.org/pinkie-promise/download/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" + integrity sha1-ITXW36ejWMBprJsXh3YogihFD/o= + dependencies: + pinkie "^2.0.0" + +pinkie@^2.0.0: + version "2.0.4" + resolved "https://registry.npm.taobao.org/pinkie/download/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" + integrity sha1-clVrgM+g1IqXToDnckjoDtT3+HA= + +pkg-dir@^3.0.0: + version "3.0.0" + resolved "https://registry.npm.taobao.org/pkg-dir/download/pkg-dir-3.0.0.tgz#2749020f239ed990881b1f71210d51eb6523bea3" + integrity sha1-J0kCDyOe2ZCIGx9xIQ1R62UjvqM= + dependencies: + find-up "^3.0.0" + +pkg-dir@^4.1.0: + version "4.2.0" + resolved "https://registry.npm.taobao.org/pkg-dir/download/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3" + integrity sha1-8JkTPfft5CLoHR2ESCcO6z5CYfM= + dependencies: + find-up "^4.0.0" + +portfinder@^1.0.25: + version "1.0.25" + resolved "https://registry.npm.taobao.org/portfinder/download/portfinder-1.0.25.tgz#254fd337ffba869f4b9d37edc298059cb4d35eca" + integrity sha1-JU/TN/+6hp9LnTftwpgFnLTTXso= + dependencies: + async "^2.6.2" + debug "^3.1.1" + mkdirp "^0.5.1" + +posix-character-classes@^0.1.0: + version "0.1.1" + resolved "https://registry.npm.taobao.org/posix-character-classes/download/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" + integrity sha1-AerA/jta9xoqbAL+q7jB/vfgDqs= + +postcss-import@12.0.1: + version "12.0.1" + resolved "https://registry.npm.taobao.org/postcss-import/download/postcss-import-12.0.1.tgz#cf8c7ab0b5ccab5649024536e565f841928b7153" + integrity sha1-z4x6sLXMq1ZJAkU25WX4QZKLcVM= + dependencies: + postcss "^7.0.1" + postcss-value-parser "^3.2.3" + read-cache "^1.0.0" + resolve "^1.1.7" + +postcss-load-config@^2.0.0: + version "2.1.0" + resolved "https://registry.npm.taobao.org/postcss-load-config/download/postcss-load-config-2.1.0.tgz#c84d692b7bb7b41ddced94ee62e8ab31b417b003" + integrity sha1-yE1pK3u3tB3c7ZTuYuirMbQXsAM= + dependencies: + cosmiconfig "^5.0.0" + import-cwd "^2.0.0" + +postcss-loader@3.0.0: + version "3.0.0" + resolved "https://registry.npm.taobao.org/postcss-loader/download/postcss-loader-3.0.0.tgz#6b97943e47c72d845fa9e03f273773d4e8dd6c2d" + integrity sha1-a5eUPkfHLYRfqeA/Jzdz1OjdbC0= + dependencies: + loader-utils "^1.1.0" + postcss "^7.0.0" + postcss-load-config "^2.0.0" + schema-utils "^1.0.0" + +postcss-value-parser@^3.2.3: + version "3.3.1" + resolved "https://registry.npm.taobao.org/postcss-value-parser/download/postcss-value-parser-3.3.1.tgz#9ff822547e2893213cf1c30efa51ac5fd1ba8281" + integrity sha1-n/giVH4okyE88cMO+lGsX9G6goE= + +postcss-value-parser@^4.0.0: + version "4.0.2" + resolved "https://registry.npm.taobao.org/postcss-value-parser/download/postcss-value-parser-4.0.2.tgz#482282c09a42706d1fc9a069b73f44ec08391dc9" + integrity sha1-SCKCwJpCcG0fyaBptz9E7Ag5Hck= + +postcss@7.0.17: + version "7.0.17" + resolved "https://registry.npm.taobao.org/postcss/download/postcss-7.0.17.tgz?cache=0&sync_timestamp=1577778306542&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss%2Fdownload%2Fpostcss-7.0.17.tgz#4da1bdff5322d4a0acaab4d87f3e782436bad31f" + integrity sha1-TaG9/1Mi1KCsqrTYfz54JDa60x8= + dependencies: + chalk "^2.4.2" + source-map "^0.6.1" + supports-color "^6.1.0" + +postcss@^7.0.0, postcss@^7.0.1, postcss@^7.0.17: + version "7.0.26" + resolved "https://registry.npm.taobao.org/postcss/download/postcss-7.0.26.tgz?cache=0&sync_timestamp=1577778306542&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss%2Fdownload%2Fpostcss-7.0.26.tgz#5ed615cfcab35ba9bbb82414a4fa88ea10429587" + integrity sha1-XtYVz8qzW6m7uCQUpPqI6hBClYc= + dependencies: + chalk "^2.4.2" + source-map "^0.6.1" + supports-color "^6.1.0" + +prepend-http@^1.0.0: + version "1.0.4" + resolved "https://registry.npm.taobao.org/prepend-http/download/prepend-http-1.0.4.tgz#d4f4562b0ce3696e41ac52d0e002e57a635dc6dc" + integrity sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw= + +private@^0.1.6: + version "0.1.8" + resolved "https://registry.npm.taobao.org/private/download/private-0.1.8.tgz#2381edb3689f7a53d653190060fcf822d2f368ff" + integrity sha1-I4Hts2ifelPWUxkAYPz4ItLzaP8= + +process-nextick-args@~2.0.0: + version "2.0.1" + resolved "https://registry.npm.taobao.org/process-nextick-args/download/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" + integrity sha1-eCDZsWEgzFXKmud5JoCufbptf+I= + +process@^0.11.10: + version "0.11.10" + resolved "https://registry.npm.taobao.org/process/download/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" + integrity sha1-czIwDoQBYb2j5podHZGn1LwW8YI= + +promise-inflight@^1.0.1: + version "1.0.1" + resolved "https://registry.npm.taobao.org/promise-inflight/download/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3" + integrity sha1-mEcocL8igTL8vdhoEputEsPAKeM= + +promise-retry@^1.1.1: + version "1.1.1" + resolved "https://registry.npm.taobao.org/promise-retry/download/promise-retry-1.1.1.tgz#6739e968e3051da20ce6497fb2b50f6911df3d6d" + integrity sha1-ZznpaOMFHaIM5kl/srUPaRHfPW0= + dependencies: + err-code "^1.0.0" + retry "^0.10.0" + +promise@^7.1.1: + version "7.3.1" + resolved "https://registry.npm.taobao.org/promise/download/promise-7.3.1.tgz#064b72602b18f90f29192b8b1bc418ffd1ebd3bf" + integrity sha1-BktyYCsY+Q8pGSuLG8QY/9Hr078= + dependencies: + asap "~2.0.3" + +protoduck@^5.0.1: + version "5.0.1" + resolved "https://registry.npm.taobao.org/protoduck/download/protoduck-5.0.1.tgz#03c3659ca18007b69a50fd82a7ebcc516261151f" + integrity sha1-A8NlnKGAB7aaUP2Cp+vMUWJhFR8= + dependencies: + genfun "^5.0.0" + +protractor@~5.4.0: + version "5.4.2" + resolved "https://registry.npm.taobao.org/protractor/download/protractor-5.4.2.tgz#329efe37f48b2141ab9467799be2d4d12eb48c13" + integrity sha1-Mp7+N/SLIUGrlGd5m+LU0S60jBM= + dependencies: + "@types/q" "^0.0.32" + "@types/selenium-webdriver" "^3.0.0" + blocking-proxy "^1.0.0" + browserstack "^1.5.1" + chalk "^1.1.3" + glob "^7.0.3" + jasmine "2.8.0" + jasminewd2 "^2.1.0" + optimist "~0.6.0" + q "1.4.1" + saucelabs "^1.5.0" + selenium-webdriver "3.6.0" + source-map-support "~0.4.0" + webdriver-js-extender "2.1.0" + webdriver-manager "^12.0.6" + +proxy-addr@~2.0.5: + version "2.0.5" + resolved "https://registry.npm.taobao.org/proxy-addr/download/proxy-addr-2.0.5.tgz#34cbd64a2d81f4b1fd21e76f9f06c8a45299ee34" + integrity sha1-NMvWSi2B9LH9IedvnwbIpFKZ7jQ= + dependencies: + forwarded "~0.1.2" + ipaddr.js "1.9.0" + +prr@~1.0.1: + version "1.0.1" + resolved "https://registry.npm.taobao.org/prr/download/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476" + integrity sha1-0/wRS6BplaRexok/SEzrHXj19HY= + +pseudomap@^1.0.2: + version "1.0.2" + resolved "https://registry.npm.taobao.org/pseudomap/download/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" + integrity sha1-8FKijacOYYkX7wqKw0wa5aaChrM= + +psl@^1.1.24: + version "1.7.0" + resolved "https://registry.npm.taobao.org/psl/download/psl-1.7.0.tgz?cache=0&sync_timestamp=1577538583463&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpsl%2Fdownload%2Fpsl-1.7.0.tgz#f1c4c47a8ef97167dea5d6bbf4816d736e884a3c" + integrity sha1-8cTEeo75cWfepda79IFtc26ISjw= + +public-encrypt@^4.0.0: + version "4.0.3" + resolved "https://registry.npm.taobao.org/public-encrypt/download/public-encrypt-4.0.3.tgz#4fcc9d77a07e48ba7527e7cbe0de33d0701331e0" + integrity sha1-T8ydd6B+SLp1J+fL4N4z0HATMeA= + dependencies: + bn.js "^4.1.0" + browserify-rsa "^4.0.0" + create-hash "^1.1.0" + parse-asn1 "^5.0.0" + randombytes "^2.0.1" + safe-buffer "^5.1.2" + +pump@^2.0.0: + version "2.0.1" + resolved "https://registry.npm.taobao.org/pump/download/pump-2.0.1.tgz#12399add6e4cf7526d973cbc8b5ce2e2908b3909" + integrity sha1-Ejma3W5M91Jtlzy8i1zi4pCLOQk= + dependencies: + end-of-stream "^1.1.0" + once "^1.3.1" + +pump@^3.0.0: + version "3.0.0" + resolved "https://registry.npm.taobao.org/pump/download/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" + integrity sha1-tKIRaBW94vTh6mAjVOjHVWUQemQ= + dependencies: + end-of-stream "^1.1.0" + once "^1.3.1" + +pumpify@^1.3.3: + version "1.5.1" + resolved "https://registry.npm.taobao.org/pumpify/download/pumpify-1.5.1.tgz?cache=0&sync_timestamp=1569938200736&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpumpify%2Fdownload%2Fpumpify-1.5.1.tgz#36513be246ab27570b1a374a5ce278bfd74370ce" + integrity sha1-NlE74karJ1cLGjdKXOJ4v9dDcM4= + dependencies: + duplexify "^3.6.0" + inherits "^2.0.3" + pump "^2.0.0" + +punycode@1.3.2: + version "1.3.2" + resolved "https://registry.npm.taobao.org/punycode/download/punycode-1.3.2.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpunycode%2Fdownload%2Fpunycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d" + integrity sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0= + +punycode@^1.2.4, punycode@^1.4.1: + version "1.4.1" + resolved "https://registry.npm.taobao.org/punycode/download/punycode-1.4.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpunycode%2Fdownload%2Fpunycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" + integrity sha1-wNWmOycYgArY4esPpSachN1BhF4= + +punycode@^2.1.0: + version "2.1.1" + resolved "https://registry.npm.taobao.org/punycode/download/punycode-2.1.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpunycode%2Fdownload%2Fpunycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" + integrity sha1-tYsBCsQMIsVldhbI0sLALHv0eew= + +q@1.4.1: + version "1.4.1" + resolved "https://registry.npm.taobao.org/q/download/q-1.4.1.tgz#55705bcd93c5f3673530c2c2cbc0c2b3addc286e" + integrity sha1-VXBbzZPF82c1MMLCy8DCs63cKG4= + +q@^1.4.1: + version "1.5.1" + resolved "https://registry.npm.taobao.org/q/download/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7" + integrity sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc= + +qjobs@^1.1.4: + version "1.2.0" + resolved "https://registry.npm.taobao.org/qjobs/download/qjobs-1.2.0.tgz#c45e9c61800bd087ef88d7e256423bdd49e5d071" + integrity sha1-xF6cYYAL0IfviNfiVkI73Unl0HE= + +qs@6.7.0: + version "6.7.0" + resolved "https://registry.npm.taobao.org/qs/download/qs-6.7.0.tgz?cache=0&sync_timestamp=1573195631718&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fqs%2Fdownload%2Fqs-6.7.0.tgz#41dc1a015e3d581f1621776be31afb2876a9b1bc" + integrity sha1-QdwaAV49WB8WIXdr4xr7KHapsbw= + +qs@~6.5.2: + version "6.5.2" + resolved "https://registry.npm.taobao.org/qs/download/qs-6.5.2.tgz?cache=0&sync_timestamp=1573195631718&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fqs%2Fdownload%2Fqs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36" + integrity sha1-yzroBuh0BERYTvFUzo7pjUA/PjY= + +query-string@^4.1.0: + version "4.3.4" + resolved "https://registry.npm.taobao.org/query-string/download/query-string-4.3.4.tgz?cache=0&sync_timestamp=1573620418700&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fquery-string%2Fdownload%2Fquery-string-4.3.4.tgz#bbb693b9ca915c232515b228b1a02b609043dbeb" + integrity sha1-u7aTucqRXCMlFbIosaArYJBD2+s= + dependencies: + object-assign "^4.1.0" + strict-uri-encode "^1.0.0" + +querystring-es3@^0.2.0: + version "0.2.1" + resolved "https://registry.npm.taobao.org/querystring-es3/download/querystring-es3-0.2.1.tgz#9ec61f79049875707d69414596fd907a4d711e73" + integrity sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM= + +querystring@0.2.0: + version "0.2.0" + resolved "https://registry.npm.taobao.org/querystring/download/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620" + integrity sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA= + +querystringify@^2.1.1: + version "2.1.1" + resolved "https://registry.npm.taobao.org/querystringify/download/querystringify-2.1.1.tgz#60e5a5fd64a7f8bfa4d2ab2ed6fdf4c85bad154e" + integrity sha1-YOWl/WSn+L+k0qsu1v30yFutFU4= + +randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5: + version "2.1.0" + resolved "https://registry.npm.taobao.org/randombytes/download/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" + integrity sha1-32+ENy8CcNxlzfYpE0mrekc9Tyo= + dependencies: + safe-buffer "^5.1.0" + +randomfill@^1.0.3: + version "1.0.4" + resolved "https://registry.npm.taobao.org/randomfill/download/randomfill-1.0.4.tgz#c92196fc86ab42be983f1bf31778224931d61458" + integrity sha1-ySGW/IarQr6YPxvzF3giSTHWFFg= + dependencies: + randombytes "^2.0.5" + safe-buffer "^5.1.0" + +range-parser@^1.2.0, range-parser@^1.2.1, range-parser@~1.2.1: + version "1.2.1" + resolved "https://registry.npm.taobao.org/range-parser/download/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" + integrity sha1-PPNwI9GZ4cJNGlW4SADC8+ZGgDE= + +raw-body@2.4.0: + version "2.4.0" + resolved "https://registry.npm.taobao.org/raw-body/download/raw-body-2.4.0.tgz#a1ce6fb9c9bc356ca52e89256ab59059e13d0332" + integrity sha1-oc5vucm8NWylLoklarWQWeE9AzI= + dependencies: + bytes "3.1.0" + http-errors "1.7.2" + iconv-lite "0.4.24" + unpipe "1.0.0" + +raw-loader@3.1.0: + version "3.1.0" + resolved "https://registry.npm.taobao.org/raw-loader/download/raw-loader-3.1.0.tgz?cache=0&sync_timestamp=1574695176795&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fraw-loader%2Fdownload%2Fraw-loader-3.1.0.tgz#5e9d399a5a222cc0de18f42c3bc5e49677532b3f" + integrity sha1-Xp05mloiLMDeGPQsO8XklndTKz8= + dependencies: + loader-utils "^1.1.0" + schema-utils "^2.0.1" + +rc@^1.2.7: + version "1.2.8" + resolved "https://registry.npm.taobao.org/rc/download/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" + integrity sha1-zZJL9SAKB1uDwYjNa54hG3/A0+0= + dependencies: + deep-extend "^0.6.0" + ini "~1.3.0" + minimist "^1.2.0" + strip-json-comments "~2.0.1" + +read-cache@^1.0.0: + version "1.0.0" + resolved "https://registry.npm.taobao.org/read-cache/download/read-cache-1.0.0.tgz#e664ef31161166c9751cdbe8dbcf86b5fb58f774" + integrity sha1-5mTvMRYRZsl1HNvo28+GtftY93Q= + dependencies: + pify "^2.3.0" + +read-package-json@^2.0.0: + version "2.1.1" + resolved "https://registry.npm.taobao.org/read-package-json/download/read-package-json-2.1.1.tgz#16aa66c59e7d4dad6288f179dd9295fd59bb98f1" + integrity sha1-FqpmxZ59Ta1iiPF53ZKV/Vm7mPE= + dependencies: + glob "^7.1.1" + json-parse-better-errors "^1.0.1" + normalize-package-data "^2.0.0" + npm-normalize-package-bin "^1.0.0" + optionalDependencies: + graceful-fs "^4.1.2" + +read-package-tree@5.3.1: + version "5.3.1" + resolved "https://registry.npm.taobao.org/read-package-tree/download/read-package-tree-5.3.1.tgz#a32cb64c7f31eb8a6f31ef06f9cedf74068fe636" + integrity sha1-oyy2TH8x64pvMe8G+c7fdAaP5jY= + dependencies: + read-package-json "^2.0.0" + readdir-scoped-modules "^1.0.0" + util-promisify "^2.1.0" + +"readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.6, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.3, readable-stream@^2.3.6, readable-stream@~2.3.6: + version "2.3.7" + resolved "https://registry.npm.taobao.org/readable-stream/download/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" + integrity sha1-Hsoc9xGu+BTAT2IlKjamL2yyO1c= + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.3" + isarray "~1.0.0" + process-nextick-args "~2.0.0" + safe-buffer "~5.1.1" + string_decoder "~1.1.1" + util-deprecate "~1.0.1" + +readable-stream@^3.0.6: + version "3.4.0" + resolved "https://registry.npm.taobao.org/readable-stream/download/readable-stream-3.4.0.tgz#a51c26754658e0a3c21dbf59163bd45ba6f447fc" + integrity sha1-pRwmdUZY4KPCHb9ZFjvUW6b0R/w= + dependencies: + inherits "^2.0.3" + string_decoder "^1.1.1" + util-deprecate "^1.0.1" + +readdir-scoped-modules@^1.0.0: + version "1.1.0" + resolved "https://registry.npm.taobao.org/readdir-scoped-modules/download/readdir-scoped-modules-1.1.0.tgz#8d45407b4f870a0dcaebc0e28670d18e74514309" + integrity sha1-jUVAe0+HCg3K68DihnDRjnRRQwk= + dependencies: + debuglog "^1.0.1" + dezalgo "^1.0.0" + graceful-fs "^4.1.2" + once "^1.3.0" + +readdirp@^2.2.1: + version "2.2.1" + resolved "https://registry.npm.taobao.org/readdirp/download/readdirp-2.2.1.tgz#0e87622a3325aa33e892285caf8b4e846529a525" + integrity sha1-DodiKjMlqjPokihcr4tOhGUppSU= + dependencies: + graceful-fs "^4.1.11" + micromatch "^3.1.10" + readable-stream "^2.0.2" + +readdirp@~3.3.0: + version "3.3.0" + resolved "https://registry.npm.taobao.org/readdirp/download/readdirp-3.3.0.tgz#984458d13a1e42e2e9f5841b129e162f369aff17" + integrity sha1-mERY0ToeQuLp9YQbEp4WLzaa/xc= + dependencies: + picomatch "^2.0.7" + +reflect-metadata@^0.1.2: + version "0.1.13" + resolved "https://registry.npm.taobao.org/reflect-metadata/download/reflect-metadata-0.1.13.tgz#67ae3ca57c972a2aa1642b10fe363fe32d49dc08" + integrity sha1-Z648pXyXKiqhZCsQ/jY/4y1J3Ag= + +regenerate-unicode-properties@^8.1.0: + version "8.1.0" + resolved "https://registry.npm.taobao.org/regenerate-unicode-properties/download/regenerate-unicode-properties-8.1.0.tgz#ef51e0f0ea4ad424b77bf7cb41f3e015c70a3f0e" + integrity sha1-71Hg8OpK1CS3e/fLQfPgFccKPw4= + dependencies: + regenerate "^1.4.0" + +regenerate@^1.2.1, regenerate@^1.4.0: + version "1.4.0" + resolved "https://registry.npm.taobao.org/regenerate/download/regenerate-1.4.0.tgz#4a856ec4b56e4077c557589cae85e7a4c8869a11" + integrity sha1-SoVuxLVuQHfFV1icroXnpMiGmhE= + +regenerator-runtime@0.13.3: + version "0.13.3" + resolved "https://registry.npm.taobao.org/regenerator-runtime/download/regenerator-runtime-0.13.3.tgz#7cf6a77d8f5c6f60eb73c5fc1955b2ceb01e6bf5" + integrity sha1-fPanfY9cb2Drc8X8GVWyzrAea/U= + +regenerator-runtime@^0.11.0: + version "0.11.1" + resolved "https://registry.npm.taobao.org/regenerator-runtime/download/regenerator-runtime-0.11.1.tgz#be05ad7f9bf7d22e056f9726cee5017fbf19e2e9" + integrity sha1-vgWtf5v30i4Fb5cmzuUBf78Z4uk= + +regenerator-transform@^0.14.0: + version "0.14.1" + resolved "https://registry.npm.taobao.org/regenerator-transform/download/regenerator-transform-0.14.1.tgz#3b2fce4e1ab7732c08f665dfdb314749c7ddd2fb" + integrity sha1-Oy/OThq3cywI9mXf2zFHScfd0vs= + dependencies: + private "^0.1.6" + +regex-not@^1.0.0, regex-not@^1.0.2: + version "1.0.2" + resolved "https://registry.npm.taobao.org/regex-not/download/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c" + integrity sha1-H07OJ+ALC2XgJHpoEOaoXYOldSw= + dependencies: + extend-shallow "^3.0.2" + safe-regex "^1.1.0" + +regexp.prototype.flags@^1.2.0: + version "1.3.0" + resolved "https://registry.npm.taobao.org/regexp.prototype.flags/download/regexp.prototype.flags-1.3.0.tgz#7aba89b3c13a64509dabcf3ca8d9fbb9bdf5cb75" + integrity sha1-erqJs8E6ZFCdq888qNn7ub31y3U= + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.0-next.1" + +regexpu-core@^1.0.0: + version "1.0.0" + resolved "https://registry.npm.taobao.org/regexpu-core/download/regexpu-core-1.0.0.tgz?cache=0&sync_timestamp=1568376298517&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fregexpu-core%2Fdownload%2Fregexpu-core-1.0.0.tgz#86a763f58ee4d7c2f6b102e4764050de7ed90c6b" + integrity sha1-hqdj9Y7k18L2sQLkdkBQ3n7ZDGs= + dependencies: + regenerate "^1.2.1" + regjsgen "^0.2.0" + regjsparser "^0.1.4" + +regexpu-core@^4.6.0: + version "4.6.0" + resolved "https://registry.npm.taobao.org/regexpu-core/download/regexpu-core-4.6.0.tgz?cache=0&sync_timestamp=1568376298517&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fregexpu-core%2Fdownload%2Fregexpu-core-4.6.0.tgz#2037c18b327cfce8a6fea2a4ec441f2432afb8b6" + integrity sha1-IDfBizJ8/Oim/qKk7EQfJDKvuLY= + dependencies: + regenerate "^1.4.0" + regenerate-unicode-properties "^8.1.0" + regjsgen "^0.5.0" + regjsparser "^0.6.0" + unicode-match-property-ecmascript "^1.0.4" + unicode-match-property-value-ecmascript "^1.1.0" + +regjsgen@^0.2.0: + version "0.2.0" + resolved "https://registry.npm.taobao.org/regjsgen/download/regjsgen-0.2.0.tgz#6c016adeac554f75823fe37ac05b92d5a4edb1f7" + integrity sha1-bAFq3qxVT3WCP+N6wFuS1aTtsfc= + +regjsgen@^0.5.0: + version "0.5.1" + resolved "https://registry.npm.taobao.org/regjsgen/download/regjsgen-0.5.1.tgz#48f0bf1a5ea205196929c0d9798b42d1ed98443c" + integrity sha1-SPC/Gl6iBRlpKcDZeYtC0e2YRDw= + +regjsparser@^0.1.4: + version "0.1.5" + resolved "https://registry.npm.taobao.org/regjsparser/download/regjsparser-0.1.5.tgz#7ee8f84dc6fa792d3fd0ae228d24bd949ead205c" + integrity sha1-fuj4Tcb6eS0/0K4ijSS9lJ6tIFw= + dependencies: + jsesc "~0.5.0" + +regjsparser@^0.6.0: + version "0.6.2" + resolved "https://registry.npm.taobao.org/regjsparser/download/regjsparser-0.6.2.tgz#fd62c753991467d9d1ffe0a9f67f27a529024b96" + integrity sha1-/WLHU5kUZ9nR/+Cp9n8npSkCS5Y= + dependencies: + jsesc "~0.5.0" + +remove-trailing-separator@^1.0.1: + version "1.1.0" + resolved "https://registry.npm.taobao.org/remove-trailing-separator/download/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef" + integrity sha1-wkvOKig62tW8P1jg1IJJuSN52O8= + +repeat-element@^1.1.2: + version "1.1.3" + resolved "https://registry.npm.taobao.org/repeat-element/download/repeat-element-1.1.3.tgz#782e0d825c0c5a3bb39731f84efee6b742e6b1ce" + integrity sha1-eC4NglwMWjuzlzH4Tv7mt0Lmsc4= + +repeat-string@^1.6.1: + version "1.6.1" + resolved "https://registry.npm.taobao.org/repeat-string/download/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" + integrity sha1-jcrkcOHIirwtYA//Sndihtp15jc= + +repeating@^2.0.0: + version "2.0.1" + resolved "https://registry.npm.taobao.org/repeating/download/repeating-2.0.1.tgz#5214c53a926d3552707527fbab415dbc08d06dda" + integrity sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo= + dependencies: + is-finite "^1.0.0" + +request@^2.83.0, request@^2.87.0, request@^2.88.0: + version "2.88.0" + resolved "https://registry.npm.taobao.org/request/download/request-2.88.0.tgz#9c2fca4f7d35b592efe57c7f0a55e81052124fef" + integrity sha1-nC/KT301tZLv5Xx/ClXoEFIST+8= + dependencies: + aws-sign2 "~0.7.0" + aws4 "^1.8.0" + caseless "~0.12.0" + combined-stream "~1.0.6" + extend "~3.0.2" + forever-agent "~0.6.1" + form-data "~2.3.2" + har-validator "~5.1.0" + http-signature "~1.2.0" + is-typedarray "~1.0.0" + isstream "~0.1.2" + json-stringify-safe "~5.0.1" + mime-types "~2.1.19" + oauth-sign "~0.9.0" + performance-now "^2.1.0" + qs "~6.5.2" + safe-buffer "^5.1.2" + tough-cookie "~2.4.3" + tunnel-agent "^0.6.0" + uuid "^3.3.2" + +require-directory@^2.1.1: + version "2.1.1" + resolved "https://registry.npm.taobao.org/require-directory/download/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" + integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I= + +require-main-filename@^1.0.1: + version "1.0.1" + resolved "https://registry.npm.taobao.org/require-main-filename/download/require-main-filename-1.0.1.tgz#97f717b69d48784f5f526a6c5aa8ffdda055a4d1" + integrity sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE= + +require-main-filename@^2.0.0: + version "2.0.0" + resolved "https://registry.npm.taobao.org/require-main-filename/download/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b" + integrity sha1-0LMp7MfMD2Fkn2IhW+aa9UqomJs= + +requires-port@^1.0.0: + version "1.0.0" + resolved "https://registry.npm.taobao.org/requires-port/download/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" + integrity sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8= + +resolve-cwd@^2.0.0: + version "2.0.0" + resolved "https://registry.npm.taobao.org/resolve-cwd/download/resolve-cwd-2.0.0.tgz#00a9f7387556e27038eae232caa372a6a59b665a" + integrity sha1-AKn3OHVW4nA46uIyyqNypqWbZlo= + dependencies: + resolve-from "^3.0.0" + +resolve-from@^3.0.0: + version "3.0.0" + resolved "https://registry.npm.taobao.org/resolve-from/download/resolve-from-3.0.0.tgz#b22c7af7d9d6881bc8b6e653335eebcb0a188748" + integrity sha1-six699nWiBvItuZTM17rywoYh0g= + +resolve-url@^0.2.1: + version "0.2.1" + resolved "https://registry.npm.taobao.org/resolve-url/download/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" + integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo= + +resolve@^1.1.7, resolve@^1.10.0, resolve@^1.3.2: + version "1.14.1" + resolved "https://registry.npm.taobao.org/resolve/download/resolve-1.14.1.tgz#9e018c540fcf0c427d678b9931cbf45e984bcaff" + integrity sha1-ngGMVA/PDEJ9Z4uZMcv0XphLyv8= + dependencies: + path-parse "^1.0.6" + +restore-cursor@^3.1.0: + version "3.1.0" + resolved "https://registry.npm.taobao.org/restore-cursor/download/restore-cursor-3.1.0.tgz#39f67c54b3a7a58cea5236d95cf0034239631f7e" + integrity sha1-OfZ8VLOnpYzqUjbZXPADQjljH34= + dependencies: + onetime "^5.1.0" + signal-exit "^3.0.2" + +ret@~0.1.10: + version "0.1.15" + resolved "https://registry.npm.taobao.org/ret/download/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" + integrity sha1-uKSCXVvbH8P29Twrwz+BOIaBx7w= + +retry@^0.10.0: + version "0.10.1" + resolved "https://registry.npm.taobao.org/retry/download/retry-0.10.1.tgz#e76388d217992c252750241d3d3956fed98d8ff4" + integrity sha1-52OI0heZLCUnUCQdPTlW/tmNj/Q= + +retry@^0.12.0: + version "0.12.0" + resolved "https://registry.npm.taobao.org/retry/download/retry-0.12.0.tgz#1b42a6266a21f07421d1b0b54b7dc167b01c013b" + integrity sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs= + +rfdc@^1.1.4: + version "1.1.4" + resolved "https://registry.npm.taobao.org/rfdc/download/rfdc-1.1.4.tgz#ba72cc1367a0ccd9cf81a870b3b58bd3ad07f8c2" + integrity sha1-unLME2egzNnPgahws7WL060H+MI= + +rimraf@3.0.0: + version "3.0.0" + resolved "https://registry.npm.taobao.org/rimraf/download/rimraf-3.0.0.tgz#614176d4b3010b75e5c390eb0ee96f6dc0cebb9b" + integrity sha1-YUF21LMBC3Xlw5DrDulvbcDOu5s= + dependencies: + glob "^7.1.3" + +rimraf@^2.2.8, rimraf@^2.5.2, rimraf@^2.5.4, rimraf@^2.6.0, rimraf@^2.6.1, rimraf@^2.6.2, rimraf@^2.6.3: + version "2.7.1" + resolved "https://registry.npm.taobao.org/rimraf/download/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" + integrity sha1-NXl/E6f9rcVmFCwp1PB8ytSD4+w= + dependencies: + glob "^7.1.3" + +ripemd160@^2.0.0, ripemd160@^2.0.1: + version "2.0.2" + resolved "https://registry.npm.taobao.org/ripemd160/download/ripemd160-2.0.2.tgz#a1c1a6f624751577ba5d07914cbc92850585890c" + integrity sha1-ocGm9iR1FXe6XQeRTLyShQWFiQw= + dependencies: + hash-base "^3.0.0" + inherits "^2.0.1" + +run-async@^2.2.0: + version "2.3.0" + resolved "https://registry.npm.taobao.org/run-async/download/run-async-2.3.0.tgz#0371ab4ae0bdd720d4166d7dfda64ff7a445a6c0" + integrity sha1-A3GrSuC91yDUFm19/aZP96RFpsA= + dependencies: + is-promise "^2.1.0" + +run-queue@^1.0.0, run-queue@^1.0.3: + version "1.0.3" + resolved "https://registry.npm.taobao.org/run-queue/download/run-queue-1.0.3.tgz#e848396f057d223f24386924618e25694161ec47" + integrity sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec= + dependencies: + aproba "^1.1.1" + +rxjs@6.4.0, rxjs@~6.4.0: + version "6.4.0" + resolved "https://registry.npm.taobao.org/rxjs/download/rxjs-6.4.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Frxjs%2Fdownload%2Frxjs-6.4.0.tgz#f3bb0fe7bda7fb69deac0c16f17b50b0b8790504" + integrity sha1-87sP572n+2nerAwW8XtQsLh5BQQ= + dependencies: + tslib "^1.9.0" + +rxjs@^6.4.0: + version "6.5.4" + resolved "https://registry.npm.taobao.org/rxjs/download/rxjs-6.5.4.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Frxjs%2Fdownload%2Frxjs-6.5.4.tgz#e0777fe0d184cec7872df147f303572d414e211c" + integrity sha1-4Hd/4NGEzseHLfFH8wNXLUFOIRw= + dependencies: + tslib "^1.9.0" + +safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: + version "5.1.2" + resolved "https://registry.npm.taobao.org/safe-buffer/download/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" + integrity sha1-mR7GnSluAxN0fVm9/St0XDX4go0= + +safe-buffer@>=5.1.0, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@^5.2.0, safe-buffer@~5.2.0: + version "5.2.0" + resolved "https://registry.npm.taobao.org/safe-buffer/download/safe-buffer-5.2.0.tgz#b74daec49b1148f88c64b68d49b1e815c1f2f519" + integrity sha1-t02uxJsRSPiMZLaNSbHoFcHy9Rk= + +safe-regex@^1.1.0: + version "1.1.0" + resolved "https://registry.npm.taobao.org/safe-regex/download/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e" + integrity sha1-QKNmnzsHfR6UPURinhV91IAjvy4= + dependencies: + ret "~0.1.10" + +"safer-buffer@>= 2.1.2 < 3", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0: + version "2.1.2" + resolved "https://registry.npm.taobao.org/safer-buffer/download/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" + integrity sha1-RPoWGwGHuVSd2Eu5GAL5vYOFzWo= + +sass-loader@7.2.0: + version "7.2.0" + resolved "https://registry.npm.taobao.org/sass-loader/download/sass-loader-7.2.0.tgz#e34115239309d15b2527cb62b5dfefb62a96ff7f" + integrity sha1-40EVI5MJ0VslJ8titd/vtiqW/38= + dependencies: + clone-deep "^4.0.1" + loader-utils "^1.0.1" + neo-async "^2.5.0" + pify "^4.0.1" + semver "^5.5.0" + +sass@1.22.9: + version "1.22.9" + resolved "https://registry.npm.taobao.org/sass/download/sass-1.22.9.tgz#41a2ed6038027f58be2bd5041293452a29c2cb84" + integrity sha1-QaLtYDgCf1i+K9UEEpNFKinCy4Q= + dependencies: + chokidar ">=2.0.0 <4.0.0" + +saucelabs@^1.5.0: + version "1.5.0" + resolved "https://registry.npm.taobao.org/saucelabs/download/saucelabs-1.5.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsaucelabs%2Fdownload%2Fsaucelabs-1.5.0.tgz#9405a73c360d449b232839919a86c396d379fd9d" + integrity sha1-lAWnPDYNRJsjKDmRmobDltN5/Z0= + dependencies: + https-proxy-agent "^2.2.1" + +sax@0.5.x: + version "0.5.8" + resolved "https://registry.npm.taobao.org/sax/download/sax-0.5.8.tgz#d472db228eb331c2506b0e8c15524adb939d12c1" + integrity sha1-1HLbIo6zMcJQaw6MFVJK25OdEsE= + +sax@>=0.6.0, sax@^1.2.4: + version "1.2.4" + resolved "https://registry.npm.taobao.org/sax/download/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" + integrity sha1-KBYjTiN4vdxOU1T6tcqold9xANk= + +schema-utils@^0.3.0: + version "0.3.0" + resolved "https://registry.npm.taobao.org/schema-utils/download/schema-utils-0.3.0.tgz?cache=0&sync_timestamp=1574946791935&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fschema-utils%2Fdownload%2Fschema-utils-0.3.0.tgz#f5877222ce3e931edae039f17eb3716e7137f8cf" + integrity sha1-9YdyIs4+kx7a4DnxfrNxbnE3+M8= + dependencies: + ajv "^5.0.0" + +schema-utils@^1.0.0: + version "1.0.0" + resolved "https://registry.npm.taobao.org/schema-utils/download/schema-utils-1.0.0.tgz?cache=0&sync_timestamp=1574946791935&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fschema-utils%2Fdownload%2Fschema-utils-1.0.0.tgz#0b79a93204d7b600d4b2850d1f66c2a34951c770" + integrity sha1-C3mpMgTXtgDUsoUNH2bCo0lRx3A= + dependencies: + ajv "^6.1.0" + ajv-errors "^1.0.0" + ajv-keywords "^3.1.0" + +schema-utils@^2.0.0, schema-utils@^2.0.1: + version "2.6.1" + resolved "https://registry.npm.taobao.org/schema-utils/download/schema-utils-2.6.1.tgz?cache=0&sync_timestamp=1574946791935&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fschema-utils%2Fdownload%2Fschema-utils-2.6.1.tgz#eb78f0b945c7bcfa2082b3565e8db3548011dc4f" + integrity sha1-63jwuUXHvPoggrNWXo2zVIAR3E8= + dependencies: + ajv "^6.10.2" + ajv-keywords "^3.4.1" + +select-hose@^2.0.0: + version "2.0.0" + resolved "https://registry.npm.taobao.org/select-hose/download/select-hose-2.0.0.tgz#625d8658f865af43ec962bfc376a37359a4994ca" + integrity sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo= + +selenium-webdriver@3.6.0, selenium-webdriver@^3.0.1: + version "3.6.0" + resolved "https://registry.npm.taobao.org/selenium-webdriver/download/selenium-webdriver-3.6.0.tgz#2ba87a1662c020b8988c981ae62cb2a01298eafc" + integrity sha1-K6h6FmLAILiYjJga5iyyoBKY6vw= + dependencies: + jszip "^3.1.3" + rimraf "^2.5.4" + tmp "0.0.30" + xml2js "^0.4.17" + +selfsigned@^1.10.7: + version "1.10.7" + resolved "https://registry.npm.taobao.org/selfsigned/download/selfsigned-1.10.7.tgz?cache=0&sync_timestamp=1569952074772&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fselfsigned%2Fdownload%2Fselfsigned-1.10.7.tgz#da5819fd049d5574f28e88a9bcc6dbc6e6f3906b" + integrity sha1-2lgZ/QSdVXTyjoipvMbbxubzkGs= + dependencies: + node-forge "0.9.0" + +semver-dsl@^1.0.1: + version "1.0.1" + resolved "https://registry.npm.taobao.org/semver-dsl/download/semver-dsl-1.0.1.tgz#d3678de5555e8a61f629eed025366ae5f27340a0" + integrity sha1-02eN5VVeimH2Ke7QJTZq5fJzQKA= + dependencies: + semver "^5.3.0" + +semver-intersect@1.4.0: + version "1.4.0" + resolved "https://registry.npm.taobao.org/semver-intersect/download/semver-intersect-1.4.0.tgz#bdd9c06bedcdd2fedb8cd352c3c43ee8c61321f3" + integrity sha1-vdnAa+3N0v7bjNNSw8Q+6MYTIfM= + dependencies: + semver "^5.0.0" + +"semver@2 || 3 || 4 || 5", semver@^5.0.0, semver@^5.3.0, semver@^5.4.1, semver@^5.5.0, semver@^5.6.0: + version "5.7.1" + resolved "https://registry.npm.taobao.org/semver/download/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" + integrity sha1-qVT5Ma66UI0we78Gnv8MAclhFvc= + +semver@6.3.0, semver@^6.0.0, semver@^6.3.0: + version "6.3.0" + resolved "https://registry.npm.taobao.org/semver/download/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" + integrity sha1-7gpkyK9ejO6mdoexM3YeG+y9HT0= + +semver@7.0.0: + version "7.0.0" + resolved "https://registry.npm.taobao.org/semver/download/semver-7.0.0.tgz#5f3ca35761e47e05b206c6daff2cf814f0316b8e" + integrity sha1-XzyjV2HkfgWyBsba/yz4FPAxa44= + +send@0.17.1: + version "0.17.1" + resolved "https://registry.npm.taobao.org/send/download/send-0.17.1.tgz#c1d8b059f7900f7466dd4938bdc44e11ddb376c8" + integrity sha1-wdiwWfeQD3Rm3Uk4vcROEd2zdsg= + dependencies: + debug "2.6.9" + depd "~1.1.2" + destroy "~1.0.4" + encodeurl "~1.0.2" + escape-html "~1.0.3" + etag "~1.8.1" + fresh "0.5.2" + http-errors "~1.7.2" + mime "1.6.0" + ms "2.1.1" + on-finished "~2.3.0" + range-parser "~1.2.1" + statuses "~1.5.0" + +serialize-javascript@^2.1.2: + version "2.1.2" + resolved "https://registry.npm.taobao.org/serialize-javascript/download/serialize-javascript-2.1.2.tgz?cache=0&sync_timestamp=1575910505665&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fserialize-javascript%2Fdownload%2Fserialize-javascript-2.1.2.tgz#ecec53b0e0317bdc95ef76ab7074b7384785fa61" + integrity sha1-7OxTsOAxe9yV73arcHS3OEeF+mE= + +serve-index@^1.9.1: + version "1.9.1" + resolved "https://registry.npm.taobao.org/serve-index/download/serve-index-1.9.1.tgz#d3768d69b1e7d82e5ce050fff5b453bea12a9239" + integrity sha1-03aNabHn2C5c4FD/9bRTvqEqkjk= + dependencies: + accepts "~1.3.4" + batch "0.6.1" + debug "2.6.9" + escape-html "~1.0.3" + http-errors "~1.6.2" + mime-types "~2.1.17" + parseurl "~1.3.2" + +serve-static@1.14.1: + version "1.14.1" + resolved "https://registry.npm.taobao.org/serve-static/download/serve-static-1.14.1.tgz#666e636dc4f010f7ef29970a88a674320898b2f9" + integrity sha1-Zm5jbcTwEPfvKZcKiKZ0MgiYsvk= + dependencies: + encodeurl "~1.0.2" + escape-html "~1.0.3" + parseurl "~1.3.3" + send "0.17.1" + +set-blocking@^2.0.0, set-blocking@~2.0.0: + version "2.0.0" + resolved "https://registry.npm.taobao.org/set-blocking/download/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" + integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc= + +set-immediate-shim@~1.0.1: + version "1.0.1" + resolved "https://registry.npm.taobao.org/set-immediate-shim/download/set-immediate-shim-1.0.1.tgz#4b2b1b27eb808a9f8dcc481a58e5e56f599f3f61" + integrity sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E= + +set-value@^2.0.0, set-value@^2.0.1: + version "2.0.1" + resolved "https://registry.npm.taobao.org/set-value/download/set-value-2.0.1.tgz#a18d40530e6f07de4228c7defe4227af8cad005b" + integrity sha1-oY1AUw5vB95CKMfe/kInr4ytAFs= + dependencies: + extend-shallow "^2.0.1" + is-extendable "^0.1.1" + is-plain-object "^2.0.3" + split-string "^3.0.1" + +setimmediate@^1.0.4: + version "1.0.5" + resolved "https://registry.npm.taobao.org/setimmediate/download/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" + integrity sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU= + +setprototypeof@1.1.0: + version "1.1.0" + resolved "https://registry.npm.taobao.org/setprototypeof/download/setprototypeof-1.1.0.tgz#d0bd85536887b6fe7c0d818cb962d9d91c54e656" + integrity sha1-0L2FU2iHtv58DYGMuWLZ2RxU5lY= + +setprototypeof@1.1.1: + version "1.1.1" + resolved "https://registry.npm.taobao.org/setprototypeof/download/setprototypeof-1.1.1.tgz#7e95acb24aa92f5885e0abef5ba131330d4ae683" + integrity sha1-fpWsskqpL1iF4KvvW6ExMw1K5oM= + +sha.js@^2.4.0, sha.js@^2.4.8: + version "2.4.11" + resolved "https://registry.npm.taobao.org/sha.js/download/sha.js-2.4.11.tgz#37a5cf0b81ecbc6943de109ba2960d1b26584ae7" + integrity sha1-N6XPC4HsvGlD3hCbopYNGyZYSuc= + dependencies: + inherits "^2.0.1" + safe-buffer "^5.0.1" + +shallow-clone@^3.0.0: + version "3.0.1" + resolved "https://registry.npm.taobao.org/shallow-clone/download/shallow-clone-3.0.1.tgz#8f2981ad92531f55035b01fb230769a40e02efa3" + integrity sha1-jymBrZJTH1UDWwH7IwdppA4C76M= + dependencies: + kind-of "^6.0.2" + +shebang-command@^1.2.0: + version "1.2.0" + resolved "https://registry.npm.taobao.org/shebang-command/download/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" + integrity sha1-RKrGW2lbAzmJaMOfNj/uXer98eo= + dependencies: + shebang-regex "^1.0.0" + +shebang-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.npm.taobao.org/shebang-regex/download/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" + integrity sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM= + +signal-exit@^3.0.0, signal-exit@^3.0.2: + version "3.0.2" + resolved "https://registry.npm.taobao.org/signal-exit/download/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" + integrity sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0= + +slash@^1.0.0: + version "1.0.0" + resolved "https://registry.npm.taobao.org/slash/download/slash-1.0.0.tgz#c41f2f6c39fc16d1cd17ad4b5d896114ae470d55" + integrity sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU= + +smart-buffer@^4.1.0: + version "4.1.0" + resolved "https://registry.npm.taobao.org/smart-buffer/download/smart-buffer-4.1.0.tgz#91605c25d91652f4661ea69ccf45f1b331ca21ba" + integrity sha1-kWBcJdkWUvRmHqacz0XxszHKIbo= + +snapdragon-node@^2.0.1: + version "2.1.1" + resolved "https://registry.npm.taobao.org/snapdragon-node/download/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b" + integrity sha1-bBdfhv8UvbByRWPo88GwIaKGhTs= + dependencies: + define-property "^1.0.0" + isobject "^3.0.0" + snapdragon-util "^3.0.1" + +snapdragon-util@^3.0.1: + version "3.0.1" + resolved "https://registry.npm.taobao.org/snapdragon-util/download/snapdragon-util-3.0.1.tgz#f956479486f2acd79700693f6f7b805e45ab56e2" + integrity sha1-+VZHlIbyrNeXAGk/b3uAXkWrVuI= + dependencies: + kind-of "^3.2.0" + +snapdragon@^0.8.1: + version "0.8.2" + resolved "https://registry.npm.taobao.org/snapdragon/download/snapdragon-0.8.2.tgz#64922e7c565b0e14204ba1aa7d6964278d25182d" + integrity sha1-ZJIufFZbDhQgS6GqfWlkJ40lGC0= + dependencies: + base "^0.11.1" + debug "^2.2.0" + define-property "^0.2.5" + extend-shallow "^2.0.1" + map-cache "^0.2.2" + source-map "^0.5.6" + source-map-resolve "^0.5.0" + use "^3.1.0" + +socket.io-adapter@~1.1.0: + version "1.1.2" + resolved "https://registry.npm.taobao.org/socket.io-adapter/download/socket.io-adapter-1.1.2.tgz?cache=0&sync_timestamp=1574684498510&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsocket.io-adapter%2Fdownload%2Fsocket.io-adapter-1.1.2.tgz#ab3f0d6f66b8fc7fca3959ab5991f82221789be9" + integrity sha1-qz8Nb2a4/H/KOVmrWZH4IiF4m+k= + +socket.io-client@2.1.1: + version "2.1.1" + resolved "https://registry.npm.taobao.org/socket.io-client/download/socket.io-client-2.1.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsocket.io-client%2Fdownload%2Fsocket.io-client-2.1.1.tgz#dcb38103436ab4578ddb026638ae2f21b623671f" + integrity sha1-3LOBA0NqtFeN2wJmOK4vIbYjZx8= + dependencies: + backo2 "1.0.2" + base64-arraybuffer "0.1.5" + component-bind "1.0.0" + component-emitter "1.2.1" + debug "~3.1.0" + engine.io-client "~3.2.0" + has-binary2 "~1.0.2" + has-cors "1.1.0" + indexof "0.0.1" + object-component "0.0.3" + parseqs "0.0.5" + parseuri "0.0.5" + socket.io-parser "~3.2.0" + to-array "0.1.4" + +socket.io-parser@~3.2.0: + version "3.2.0" + resolved "https://registry.npm.taobao.org/socket.io-parser/download/socket.io-parser-3.2.0.tgz#e7c6228b6aa1f814e6148aea325b51aa9499e077" + integrity sha1-58Yii2qh+BTmFIrqMltRqpSZ4Hc= + dependencies: + component-emitter "1.2.1" + debug "~3.1.0" + isarray "2.0.1" + +socket.io@2.1.1: + version "2.1.1" + resolved "https://registry.npm.taobao.org/socket.io/download/socket.io-2.1.1.tgz?cache=0&sync_timestamp=1569002852515&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsocket.io%2Fdownload%2Fsocket.io-2.1.1.tgz#a069c5feabee3e6b214a75b40ce0652e1cfb9980" + integrity sha1-oGnF/qvuPmshSnW0DOBlLhz7mYA= + dependencies: + debug "~3.1.0" + engine.io "~3.2.0" + has-binary2 "~1.0.2" + socket.io-adapter "~1.1.0" + socket.io-client "2.1.1" + socket.io-parser "~3.2.0" + +sockjs-client@1.4.0: + version "1.4.0" + resolved "https://registry.npm.taobao.org/sockjs-client/download/sockjs-client-1.4.0.tgz#c9f2568e19c8fd8173b4997ea3420e0bb306c7d5" + integrity sha1-yfJWjhnI/YFztJl+o0IOC7MGx9U= + dependencies: + debug "^3.2.5" + eventsource "^1.0.7" + faye-websocket "~0.11.1" + inherits "^2.0.3" + json3 "^3.3.2" + url-parse "^1.4.3" + +sockjs@0.3.19: + version "0.3.19" + resolved "https://registry.npm.taobao.org/sockjs/download/sockjs-0.3.19.tgz#d976bbe800af7bd20ae08598d582393508993c0d" + integrity sha1-2Xa76ACve9IK4IWY1YI5NQiZPA0= + dependencies: + faye-websocket "^0.10.0" + uuid "^3.0.1" + +socks-proxy-agent@^4.0.0: + version "4.0.2" + resolved "https://registry.npm.taobao.org/socks-proxy-agent/download/socks-proxy-agent-4.0.2.tgz#3c8991f3145b2799e70e11bd5fbc8b1963116386" + integrity sha1-PImR8xRbJ5nnDhG9X7yLGWMRY4Y= + dependencies: + agent-base "~4.2.1" + socks "~2.3.2" + +socks@~2.3.2: + version "2.3.3" + resolved "https://registry.npm.taobao.org/socks/download/socks-2.3.3.tgz#01129f0a5d534d2b897712ed8aceab7ee65d78e3" + integrity sha1-ARKfCl1TTSuJdxLtis6rfuZdeOM= + dependencies: + ip "1.1.5" + smart-buffer "^4.1.0" + +sort-keys@^1.0.0: + version "1.1.2" + resolved "https://registry.npm.taobao.org/sort-keys/download/sort-keys-1.1.2.tgz#441b6d4d346798f1b4e49e8920adfba0e543f9ad" + integrity sha1-RBttTTRnmPG05J6JIK37oOVD+a0= + dependencies: + is-plain-obj "^1.0.0" + +source-list-map@^2.0.0: + version "2.0.1" + resolved "https://registry.npm.taobao.org/source-list-map/download/source-list-map-2.0.1.tgz#3993bd873bfc48479cca9ea3a547835c7c154b34" + integrity sha1-OZO9hzv8SEecyp6jpUeDXHwVSzQ= + +source-list-map@~0.1.7: + version "0.1.8" + resolved "https://registry.npm.taobao.org/source-list-map/download/source-list-map-0.1.8.tgz#c550b2ab5427f6b3f21f5afead88c4f5587b2106" + integrity sha1-xVCyq1Qn9rPyH1r+rYjE9Vh7IQY= + +source-map-loader@0.2.4: + version "0.2.4" + resolved "https://registry.npm.taobao.org/source-map-loader/download/source-map-loader-0.2.4.tgz#c18b0dc6e23bf66f6792437557c569a11e072271" + integrity sha1-wYsNxuI79m9nkkN1V8VpoR4HInE= + dependencies: + async "^2.5.0" + loader-utils "^1.1.0" + +source-map-resolve@^0.5.0: + version "0.5.3" + resolved "https://registry.npm.taobao.org/source-map-resolve/download/source-map-resolve-0.5.3.tgz#190866bece7553e1f8f267a2ee82c606b5509a1a" + integrity sha1-GQhmvs51U+H48mei7oLGBrVQmho= + dependencies: + atob "^2.1.2" + decode-uri-component "^0.2.0" + resolve-url "^0.2.1" + source-map-url "^0.4.0" + urix "^0.1.0" + +source-map-support@0.5.13: + version "0.5.13" + resolved "https://registry.npm.taobao.org/source-map-support/download/source-map-support-0.5.13.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsource-map-support%2Fdownload%2Fsource-map-support-0.5.13.tgz#31b24a9c2e73c2de85066c0feb7d44767ed52932" + integrity sha1-MbJKnC5zwt6FBmwP631Edn7VKTI= + dependencies: + buffer-from "^1.0.0" + source-map "^0.6.0" + +source-map-support@^0.5.5, source-map-support@^0.5.6, source-map-support@~0.5.12: + version "0.5.16" + resolved "https://registry.npm.taobao.org/source-map-support/download/source-map-support-0.5.16.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsource-map-support%2Fdownload%2Fsource-map-support-0.5.16.tgz#0ae069e7fe3ba7538c64c98515e35339eac5a042" + integrity sha1-CuBp5/47p1OMZMmFFeNTOerFoEI= + dependencies: + buffer-from "^1.0.0" + source-map "^0.6.0" + +source-map-support@~0.4.0: + version "0.4.18" + resolved "https://registry.npm.taobao.org/source-map-support/download/source-map-support-0.4.18.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsource-map-support%2Fdownload%2Fsource-map-support-0.4.18.tgz#0286a6de8be42641338594e97ccea75f0a2c585f" + integrity sha1-Aoam3ovkJkEzhZTpfM6nXwosWF8= + dependencies: + source-map "^0.5.6" + +source-map-url@^0.4.0: + version "0.4.0" + resolved "https://registry.npm.taobao.org/source-map-url/download/source-map-url-0.4.0.tgz#3e935d7ddd73631b97659956d55128e87b5084a3" + integrity sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM= + +source-map@0.1.x: + version "0.1.43" + resolved "https://registry.npm.taobao.org/source-map/download/source-map-0.1.43.tgz#c24bc146ca517c1471f5dacbe2571b2b7f9e3346" + integrity sha1-wkvBRspRfBRx9drL4lcbK3+eM0Y= + dependencies: + amdefine ">=0.0.4" + +source-map@0.7.3: + version "0.7.3" + resolved "https://registry.npm.taobao.org/source-map/download/source-map-0.7.3.tgz#5302f8169031735226544092e64981f751750383" + integrity sha1-UwL4FpAxc1ImVECS5kmB91F1A4M= + +source-map@^0.5.0, source-map@^0.5.6, source-map@^0.5.7: + version "0.5.7" + resolved "https://registry.npm.taobao.org/source-map/download/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" + integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= + +source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.0, source-map@~0.6.1: + version "0.6.1" + resolved "https://registry.npm.taobao.org/source-map/download/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" + integrity sha1-dHIq8y6WFOnCh6jQu95IteLxomM= + +source-map@~0.4.1: + version "0.4.4" + resolved "https://registry.npm.taobao.org/source-map/download/source-map-0.4.4.tgz#eba4f5da9c0dc999de68032d8b4f76173652036b" + integrity sha1-66T12pwNyZneaAMti092FzZSA2s= + dependencies: + amdefine ">=0.0.4" + +sourcemap-codec@^1.4.4: + version "1.4.7" + resolved "https://registry.npm.taobao.org/sourcemap-codec/download/sourcemap-codec-1.4.7.tgz#5b2cd184e3fe51fd30ba049f7f62bf499b4f73ae" + integrity sha1-WyzRhOP+Uf0wugSff2K/SZtPc64= + +spdx-correct@^3.0.0: + version "3.1.0" + resolved "https://registry.npm.taobao.org/spdx-correct/download/spdx-correct-3.1.0.tgz#fb83e504445268f154b074e218c87c003cd31df4" + integrity sha1-+4PlBERSaPFUsHTiGMh8ADzTHfQ= + dependencies: + spdx-expression-parse "^3.0.0" + spdx-license-ids "^3.0.0" + +spdx-exceptions@^2.1.0: + version "2.2.0" + resolved "https://registry.npm.taobao.org/spdx-exceptions/download/spdx-exceptions-2.2.0.tgz#2ea450aee74f2a89bfb94519c07fcd6f41322977" + integrity sha1-LqRQrudPKom/uUUZwH/Nb0EyKXc= + +spdx-expression-parse@^3.0.0: + version "3.0.0" + resolved "https://registry.npm.taobao.org/spdx-expression-parse/download/spdx-expression-parse-3.0.0.tgz#99e119b7a5da00e05491c9fa338b7904823b41d0" + integrity sha1-meEZt6XaAOBUkcn6M4t5BII7QdA= + dependencies: + spdx-exceptions "^2.1.0" + spdx-license-ids "^3.0.0" + +spdx-license-ids@^3.0.0: + version "3.0.5" + resolved "https://registry.npm.taobao.org/spdx-license-ids/download/spdx-license-ids-3.0.5.tgz#3694b5804567a458d3c8045842a6358632f62654" + integrity sha1-NpS1gEVnpFjTyARYQqY1hjL2JlQ= + +spdy-transport@^3.0.0: + version "3.0.0" + resolved "https://registry.npm.taobao.org/spdy-transport/download/spdy-transport-3.0.0.tgz#00d4863a6400ad75df93361a1608605e5dcdcf31" + integrity sha1-ANSGOmQArXXfkzYaFghgXl3NzzE= + dependencies: + debug "^4.1.0" + detect-node "^2.0.4" + hpack.js "^2.1.6" + obuf "^1.1.2" + readable-stream "^3.0.6" + wbuf "^1.7.3" + +spdy@^4.0.1: + version "4.0.1" + resolved "https://registry.npm.taobao.org/spdy/download/spdy-4.0.1.tgz#6f12ed1c5db7ea4f24ebb8b89ba58c87c08257f2" + integrity sha1-bxLtHF236k8k67i4m6WMh8CCV/I= + dependencies: + debug "^4.1.0" + handle-thing "^2.0.0" + http-deceiver "^1.2.7" + select-hose "^2.0.0" + spdy-transport "^3.0.0" + +speed-measure-webpack-plugin@1.3.1: + version "1.3.1" + resolved "https://registry.npm.taobao.org/speed-measure-webpack-plugin/download/speed-measure-webpack-plugin-1.3.1.tgz#69840a5cdc08b4638697dac7db037f595d7f36a0" + integrity sha1-aYQKXNwItGOGl9rH2wN/WV1/NqA= + dependencies: + chalk "^2.0.1" + +split-string@^3.0.1, split-string@^3.0.2: + version "3.1.0" + resolved "https://registry.npm.taobao.org/split-string/download/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2" + integrity sha1-fLCd2jqGWFcFxks5pkZgOGguj+I= + dependencies: + extend-shallow "^3.0.0" + +sprintf-js@^1.1.2: + version "1.1.2" + resolved "https://registry.npm.taobao.org/sprintf-js/download/sprintf-js-1.1.2.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsprintf-js%2Fdownload%2Fsprintf-js-1.1.2.tgz#da1765262bf8c0f571749f2ad6c26300207ae673" + integrity sha1-2hdlJiv4wPVxdJ8q1sJjACB65nM= + +sprintf-js@~1.0.2: + version "1.0.3" + resolved "https://registry.npm.taobao.org/sprintf-js/download/sprintf-js-1.0.3.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsprintf-js%2Fdownload%2Fsprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" + integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= + +sshpk@^1.7.0: + version "1.16.1" + resolved "https://registry.npm.taobao.org/sshpk/download/sshpk-1.16.1.tgz#fb661c0bef29b39db40769ee39fa70093d6f6877" + integrity sha1-+2YcC+8ps520B2nuOfpwCT1vaHc= + dependencies: + asn1 "~0.2.3" + assert-plus "^1.0.0" + bcrypt-pbkdf "^1.0.0" + dashdash "^1.12.0" + ecc-jsbn "~0.1.1" + getpass "^0.1.1" + jsbn "~0.1.0" + safer-buffer "^2.0.2" + tweetnacl "~0.14.0" + +ssri@^6.0.0, ssri@^6.0.1: + version "6.0.1" + resolved "https://registry.npm.taobao.org/ssri/download/ssri-6.0.1.tgz?cache=0&sync_timestamp=1571961736774&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fssri%2Fdownload%2Fssri-6.0.1.tgz#2a3c41b28dd45b62b63676ecb74001265ae9edd8" + integrity sha1-KjxBso3UW2K2Nnbst0ABJlrp7dg= + dependencies: + figgy-pudding "^3.5.1" + +static-extend@^0.1.1: + version "0.1.2" + resolved "https://registry.npm.taobao.org/static-extend/download/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6" + integrity sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY= + dependencies: + define-property "^0.2.5" + object-copy "^0.1.0" + +"statuses@>= 1.4.0 < 2", "statuses@>= 1.5.0 < 2", statuses@~1.5.0: + version "1.5.0" + resolved "https://registry.npm.taobao.org/statuses/download/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" + integrity sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow= + +stream-browserify@^2.0.1: + version "2.0.2" + resolved "https://registry.npm.taobao.org/stream-browserify/download/stream-browserify-2.0.2.tgz#87521d38a44aa7ee91ce1cd2a47df0cb49dd660b" + integrity sha1-h1IdOKRKp+6RzhzSpH3wy0ndZgs= + dependencies: + inherits "~2.0.1" + readable-stream "^2.0.2" + +stream-each@^1.1.0: + version "1.2.3" + resolved "https://registry.npm.taobao.org/stream-each/download/stream-each-1.2.3.tgz#ebe27a0c389b04fbcc233642952e10731afa9bae" + integrity sha1-6+J6DDibBPvMIzZClS4Qcxr6m64= + dependencies: + end-of-stream "^1.1.0" + stream-shift "^1.0.0" + +stream-http@^2.7.2: + version "2.8.3" + resolved "https://registry.npm.taobao.org/stream-http/download/stream-http-2.8.3.tgz#b2d242469288a5a27ec4fe8933acf623de6514fc" + integrity sha1-stJCRpKIpaJ+xP6JM6z2I95lFPw= + dependencies: + builtin-status-codes "^3.0.0" + inherits "^2.0.1" + readable-stream "^2.3.6" + to-arraybuffer "^1.0.0" + xtend "^4.0.0" + +stream-shift@^1.0.0: + version "1.0.1" + resolved "https://registry.npm.taobao.org/stream-shift/download/stream-shift-1.0.1.tgz?cache=0&sync_timestamp=1576147178936&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstream-shift%2Fdownload%2Fstream-shift-1.0.1.tgz#d7088281559ab2778424279b0877da3c392d5a3d" + integrity sha1-1wiCgVWasneEJCebCHfaPDktWj0= + +streamroller@^1.0.6: + version "1.0.6" + resolved "https://registry.npm.taobao.org/streamroller/download/streamroller-1.0.6.tgz#8167d8496ed9f19f05ee4b158d9611321b8cacd9" + integrity sha1-gWfYSW7Z8Z8F7ksVjZYRMhuMrNk= + dependencies: + async "^2.6.2" + date-format "^2.0.0" + debug "^3.2.6" + fs-extra "^7.0.1" + lodash "^4.17.14" + +strict-uri-encode@^1.0.0: + version "1.1.0" + resolved "https://registry.npm.taobao.org/strict-uri-encode/download/strict-uri-encode-1.1.0.tgz#279b225df1d582b1f54e65addd4352e18faa0713" + integrity sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM= + +string-width@^1.0.1: + version "1.0.2" + resolved "https://registry.npm.taobao.org/string-width/download/string-width-1.0.2.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstring-width%2Fdownload%2Fstring-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" + integrity sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M= + dependencies: + code-point-at "^1.0.0" + is-fullwidth-code-point "^1.0.0" + strip-ansi "^3.0.0" + +"string-width@^1.0.2 || 2", string-width@^2.0.0, string-width@^2.1.1: + version "2.1.1" + resolved "https://registry.npm.taobao.org/string-width/download/string-width-2.1.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstring-width%2Fdownload%2Fstring-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" + integrity sha1-q5Pyeo3BPSjKyBXEYhQ6bZASrp4= + dependencies: + is-fullwidth-code-point "^2.0.0" + strip-ansi "^4.0.0" + +string-width@^3.0.0: + version "3.1.0" + resolved "https://registry.npm.taobao.org/string-width/download/string-width-3.1.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstring-width%2Fdownload%2Fstring-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961" + integrity sha1-InZ74htirxCBV0MG9prFG2IgOWE= + dependencies: + emoji-regex "^7.0.1" + is-fullwidth-code-point "^2.0.0" + strip-ansi "^5.1.0" + +string-width@^4.1.0: + version "4.2.0" + resolved "https://registry.npm.taobao.org/string-width/download/string-width-4.2.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstring-width%2Fdownload%2Fstring-width-4.2.0.tgz#952182c46cc7b2c313d1596e623992bd163b72b5" + integrity sha1-lSGCxGzHssMT0VluYjmSvRY7crU= + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.0" + +string.prototype.trimleft@^2.1.1: + version "2.1.1" + resolved "https://registry.npm.taobao.org/string.prototype.trimleft/download/string.prototype.trimleft-2.1.1.tgz#9bdb8ac6abd6d602b17a4ed321870d2f8dcefc74" + integrity sha1-m9uKxqvW1gKxek7TIYcNL43O/HQ= + dependencies: + define-properties "^1.1.3" + function-bind "^1.1.1" + +string.prototype.trimright@^2.1.1: + version "2.1.1" + resolved "https://registry.npm.taobao.org/string.prototype.trimright/download/string.prototype.trimright-2.1.1.tgz#440314b15996c866ce8a0341894d45186200c5d9" + integrity sha1-RAMUsVmWyGbOigNBiU1FGGIAxdk= + dependencies: + define-properties "^1.1.3" + function-bind "^1.1.1" + +string_decoder@^1.0.0, string_decoder@^1.1.1: + version "1.3.0" + resolved "https://registry.npm.taobao.org/string_decoder/download/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" + integrity sha1-QvEUWUpGzxqOMLCoT1bHjD7awh4= + dependencies: + safe-buffer "~5.2.0" + +string_decoder@~1.1.1: + version "1.1.1" + resolved "https://registry.npm.taobao.org/string_decoder/download/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" + integrity sha1-nPFhG6YmhdcDCunkujQUnDrwP8g= + dependencies: + safe-buffer "~5.1.0" + +strip-ansi@^3.0.0, strip-ansi@^3.0.1: + version "3.0.1" + resolved "https://registry.npm.taobao.org/strip-ansi/download/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" + integrity sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8= + dependencies: + ansi-regex "^2.0.0" + +strip-ansi@^4.0.0: + version "4.0.0" + resolved "https://registry.npm.taobao.org/strip-ansi/download/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" + integrity sha1-qEeQIusaw2iocTibY1JixQXuNo8= + dependencies: + ansi-regex "^3.0.0" + +strip-ansi@^5.1.0: + version "5.2.0" + resolved "https://registry.npm.taobao.org/strip-ansi/download/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" + integrity sha1-jJpTb+tq/JYr36WxBKUJHBrZwK4= + dependencies: + ansi-regex "^4.1.0" + +strip-ansi@^6.0.0: + version "6.0.0" + resolved "https://registry.npm.taobao.org/strip-ansi/download/strip-ansi-6.0.0.tgz#0b1571dd7669ccd4f3e06e14ef1eed26225ae532" + integrity sha1-CxVx3XZpzNTz4G4U7x7tJiJa5TI= + dependencies: + ansi-regex "^5.0.0" + +strip-bom@^3.0.0: + version "3.0.0" + resolved "https://registry.npm.taobao.org/strip-bom/download/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" + integrity sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM= + +strip-eof@^1.0.0: + version "1.0.0" + resolved "https://registry.npm.taobao.org/strip-eof/download/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" + integrity sha1-u0P/VZim6wXYm1n80SnJgzE2Br8= + +strip-json-comments@~2.0.1: + version "2.0.1" + resolved "https://registry.npm.taobao.org/strip-json-comments/download/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" + integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo= + +style-loader@1.0.0: + version "1.0.0" + resolved "https://registry.npm.taobao.org/style-loader/download/style-loader-1.0.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstyle-loader%2Fdownload%2Fstyle-loader-1.0.0.tgz#1d5296f9165e8e2c85d24eee0b7caf9ec8ca1f82" + integrity sha1-HVKW+RZejiyF0k7uC3yvnsjKH4I= + dependencies: + loader-utils "^1.2.3" + schema-utils "^2.0.1" + +stylus-loader@3.0.2: + version "3.0.2" + resolved "https://registry.npm.taobao.org/stylus-loader/download/stylus-loader-3.0.2.tgz#27a706420b05a38e038e7cacb153578d450513c6" + integrity sha1-J6cGQgsFo44DjnyssVNXjUUFE8Y= + dependencies: + loader-utils "^1.0.2" + lodash.clonedeep "^4.5.0" + when "~3.6.x" + +stylus@0.54.5: + version "0.54.5" + resolved "https://registry.npm.taobao.org/stylus/download/stylus-0.54.5.tgz#42b9560931ca7090ce8515a798ba9e6aa3d6dc79" + integrity sha1-QrlWCTHKcJDOhRWnmLqeaqPW3Hk= + dependencies: + css-parse "1.7.x" + debug "*" + glob "7.0.x" + mkdirp "0.5.x" + sax "0.5.x" + source-map "0.1.x" + +supports-color@^2.0.0: + version "2.0.0" + resolved "https://registry.npm.taobao.org/supports-color/download/supports-color-2.0.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" + integrity sha1-U10EXOa2Nj+kARcIRimZXp3zJMc= + +supports-color@^5.3.0: + version "5.5.0" + resolved "https://registry.npm.taobao.org/supports-color/download/supports-color-5.5.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" + integrity sha1-4uaaRKyHcveKHsCzW2id9lMO/I8= + dependencies: + has-flag "^3.0.0" + +supports-color@^6.1.0: + version "6.1.0" + resolved "https://registry.npm.taobao.org/supports-color/download/supports-color-6.1.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-6.1.0.tgz#0764abc69c63d5ac842dd4867e8d025e880df8f3" + integrity sha1-B2Srxpxj1ayELdSGfo0CXogN+PM= + dependencies: + has-flag "^3.0.0" + +symbol-observable@1.2.0: + version "1.2.0" + resolved "https://registry.npm.taobao.org/symbol-observable/download/symbol-observable-1.2.0.tgz#c22688aed4eab3cdc2dfeacbb561660560a00804" + integrity sha1-wiaIrtTqs83C3+rLtWFmBWCgCAQ= + +tapable@^1.0.0, tapable@^1.1.3: + version "1.1.3" + resolved "https://registry.npm.taobao.org/tapable/download/tapable-1.1.3.tgz#a1fccc06b58db61fd7a45da2da44f5f3a3e67ba2" + integrity sha1-ofzMBrWNth/XpF2i2kT186Pme6I= + +tar@^4.4.2, tar@^4.4.8: + version "4.4.13" + resolved "https://registry.npm.taobao.org/tar/download/tar-4.4.13.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ftar%2Fdownload%2Ftar-4.4.13.tgz#43b364bc52888d555298637b10d60790254ab525" + integrity sha1-Q7NkvFKIjVVSmGN7ENYHkCVKtSU= + dependencies: + chownr "^1.1.1" + fs-minipass "^1.2.5" + minipass "^2.8.6" + minizlib "^1.2.1" + mkdirp "^0.5.0" + safe-buffer "^5.1.2" + yallist "^3.0.3" + +terser-webpack-plugin@1.4.3, terser-webpack-plugin@^1.4.1: + version "1.4.3" + resolved "https://registry.npm.taobao.org/terser-webpack-plugin/download/terser-webpack-plugin-1.4.3.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fterser-webpack-plugin%2Fdownload%2Fterser-webpack-plugin-1.4.3.tgz#5ecaf2dbdc5fb99745fd06791f46fc9ddb1c9a7c" + integrity sha1-Xsry29xfuZdF/QZ5H0b8ndscmnw= + dependencies: + cacache "^12.0.2" + find-cache-dir "^2.1.0" + is-wsl "^1.1.0" + schema-utils "^1.0.0" + serialize-javascript "^2.1.2" + source-map "^0.6.1" + terser "^4.1.2" + webpack-sources "^1.4.0" + worker-farm "^1.7.0" + +terser@4.3.9: + version "4.3.9" + resolved "https://registry.npm.taobao.org/terser/download/terser-4.3.9.tgz?cache=0&sync_timestamp=1578021305565&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fterser%2Fdownload%2Fterser-4.3.9.tgz#e4be37f80553d02645668727777687dad26bbca8" + integrity sha1-5L43+AVT0CZFZocnd3aH2tJrvKg= + dependencies: + commander "^2.20.0" + source-map "~0.6.1" + source-map-support "~0.5.12" + +terser@^4.1.2: + version "4.5.1" + resolved "https://registry.npm.taobao.org/terser/download/terser-4.5.1.tgz?cache=0&sync_timestamp=1578021305565&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fterser%2Fdownload%2Fterser-4.5.1.tgz#63b52d6b6ce344aa6fedcd0ee06a695799eb50bd" + integrity sha1-Y7Uta2zjRKpv7c0O4GppV5nrUL0= + dependencies: + commander "^2.20.0" + source-map "~0.6.1" + source-map-support "~0.5.12" + +through2@^2.0.0: + version "2.0.5" + resolved "https://registry.npm.taobao.org/through2/download/through2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd" + integrity sha1-AcHjnrMdB8t9A6lqcIIyYLIxMs0= + dependencies: + readable-stream "~2.3.6" + xtend "~4.0.1" + +"through@>=2.2.7 <3", through@X.X.X, through@^2.3.6: + version "2.3.8" + resolved "https://registry.npm.taobao.org/through/download/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" + integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= + +thunky@^1.0.2: + version "1.1.0" + resolved "https://registry.npm.taobao.org/thunky/download/thunky-1.1.0.tgz#5abaf714a9405db0504732bbccd2cedd9ef9537d" + integrity sha1-Wrr3FKlAXbBQRzK7zNLO3Z75U30= + +timers-browserify@^2.0.4: + version "2.0.11" + resolved "https://registry.npm.taobao.org/timers-browserify/download/timers-browserify-2.0.11.tgz#800b1f3eee272e5bc53ee465a04d0e804c31211f" + integrity sha1-gAsfPu4nLlvFPuRloE0OgEwxIR8= + dependencies: + setimmediate "^1.0.4" + +tmp@0.0.30: + version "0.0.30" + resolved "https://registry.npm.taobao.org/tmp/download/tmp-0.0.30.tgz#72419d4a8be7d6ce75148fd8b324e593a711c2ed" + integrity sha1-ckGdSovn1s51FI/YsyTlk6cRwu0= + dependencies: + os-tmpdir "~1.0.1" + +tmp@0.0.33, tmp@0.0.x, tmp@^0.0.33: + version "0.0.33" + resolved "https://registry.npm.taobao.org/tmp/download/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" + integrity sha1-bTQzWIl2jSGyvNoKonfO07G/rfk= + dependencies: + os-tmpdir "~1.0.2" + +to-array@0.1.4: + version "0.1.4" + resolved "https://registry.npm.taobao.org/to-array/download/to-array-0.1.4.tgz#17e6c11f73dd4f3d74cda7a4ff3238e9ad9bf890" + integrity sha1-F+bBH3PdTz10zaek/zI46a2b+JA= + +to-arraybuffer@^1.0.0: + version "1.0.1" + resolved "https://registry.npm.taobao.org/to-arraybuffer/download/to-arraybuffer-1.0.1.tgz#7d229b1fcc637e466ca081180836a7aabff83f43" + integrity sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M= + +to-fast-properties@^1.0.3: + version "1.0.3" + resolved "https://registry.npm.taobao.org/to-fast-properties/download/to-fast-properties-1.0.3.tgz#b83571fa4d8c25b82e231b06e3a3055de4ca1a47" + integrity sha1-uDVx+k2MJbguIxsG46MFXeTKGkc= + +to-fast-properties@^2.0.0: + version "2.0.0" + resolved "https://registry.npm.taobao.org/to-fast-properties/download/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" + integrity sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4= + +to-object-path@^0.3.0: + version "0.3.0" + resolved "https://registry.npm.taobao.org/to-object-path/download/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af" + integrity sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68= + dependencies: + kind-of "^3.0.2" + +to-regex-range@^2.1.0: + version "2.1.1" + resolved "https://registry.npm.taobao.org/to-regex-range/download/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38" + integrity sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg= + dependencies: + is-number "^3.0.0" + repeat-string "^1.6.1" + +to-regex-range@^5.0.1: + version "5.0.1" + resolved "https://registry.npm.taobao.org/to-regex-range/download/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" + integrity sha1-FkjESq58jZiKMmAY7XL1tN0DkuQ= + dependencies: + is-number "^7.0.0" + +to-regex@^3.0.1, to-regex@^3.0.2: + version "3.0.2" + resolved "https://registry.npm.taobao.org/to-regex/download/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce" + integrity sha1-E8/dmzNlUvMLUfM6iuG0Knp1mc4= + dependencies: + define-property "^2.0.2" + extend-shallow "^3.0.2" + regex-not "^1.0.2" + safe-regex "^1.1.0" + +toidentifier@1.0.0: + version "1.0.0" + resolved "https://registry.npm.taobao.org/toidentifier/download/toidentifier-1.0.0.tgz#7e1be3470f1e77948bc43d94a3c8f4d7752ba553" + integrity sha1-fhvjRw8ed5SLxD2Uo8j013UrpVM= + +tough-cookie@~2.4.3: + version "2.4.3" + resolved "https://registry.npm.taobao.org/tough-cookie/download/tough-cookie-2.4.3.tgz#53f36da3f47783b0925afa06ff9f3b165280f781" + integrity sha1-U/Nto/R3g7CSWvoG/587FlKA94E= + dependencies: + psl "^1.1.24" + punycode "^1.4.1" + +tree-kill@1.2.1: + version "1.2.1" + resolved "https://registry.npm.taobao.org/tree-kill/download/tree-kill-1.2.1.tgz?cache=0&sync_timestamp=1576105318345&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ftree-kill%2Fdownload%2Ftree-kill-1.2.1.tgz#5398f374e2f292b9dcc7b2e71e30a5c3bb6c743a" + integrity sha1-U5jzdOLykrncx7LnHjClw7tsdDo= + +trim-right@^1.0.1: + version "1.0.1" + resolved "https://registry.npm.taobao.org/trim-right/download/trim-right-1.0.1.tgz#cb2e1203067e0c8de1f614094b9fe45704ea6003" + integrity sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM= + +ts-node@~7.0.0: + version "7.0.1" + resolved "https://registry.npm.taobao.org/ts-node/download/ts-node-7.0.1.tgz#9562dc2d1e6d248d24bc55f773e3f614337d9baf" + integrity sha1-lWLcLR5tJI0kvFX3c+P2FDN9m68= + dependencies: + arrify "^1.0.0" + buffer-from "^1.1.0" + diff "^3.1.0" + make-error "^1.1.1" + minimist "^1.2.0" + mkdirp "^0.5.1" + source-map-support "^0.5.6" + yn "^2.0.0" + +tslib@1.10.0, tslib@^1.10.0, tslib@^1.7.1, tslib@^1.8.0, tslib@^1.8.1, tslib@^1.9.0: + version "1.10.0" + resolved "https://registry.npm.taobao.org/tslib/download/tslib-1.10.0.tgz#c3c19f95973fb0a62973fb09d90d961ee43e5c8a" + integrity sha1-w8GflZc/sKYpc/sJ2Q2WHuQ+XIo= + +tslint@~5.15.0: + version "5.15.0" + resolved "https://registry.npm.taobao.org/tslint/download/tslint-5.15.0.tgz#6ffb180986d63afa1e531feb2a134dbf961e27d3" + integrity sha1-b/sYCYbWOvoeUx/rKhNNv5YeJ9M= + dependencies: + babel-code-frame "^6.22.0" + builtin-modules "^1.1.1" + chalk "^2.3.0" + commander "^2.12.1" + diff "^3.2.0" + glob "^7.1.1" + js-yaml "^3.13.0" + minimatch "^3.0.4" + mkdirp "^0.5.1" + resolve "^1.3.2" + semver "^5.3.0" + tslib "^1.8.0" + tsutils "^2.29.0" + +tsutils@^2.29.0: + version "2.29.0" + resolved "https://registry.npm.taobao.org/tsutils/download/tsutils-2.29.0.tgz#32b488501467acbedd4b85498673a0812aca0b99" + integrity sha1-MrSIUBRnrL7dS4VJhnOggSrKC5k= + dependencies: + tslib "^1.8.1" + +tty-browserify@0.0.0: + version "0.0.0" + resolved "https://registry.npm.taobao.org/tty-browserify/download/tty-browserify-0.0.0.tgz#a157ba402da24e9bf957f9aa69d524eed42901a6" + integrity sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY= + +tunnel-agent@^0.6.0: + version "0.6.0" + resolved "https://registry.npm.taobao.org/tunnel-agent/download/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" + integrity sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0= + dependencies: + safe-buffer "^5.0.1" + +tweetnacl@^0.14.3, tweetnacl@~0.14.0: + version "0.14.5" + resolved "https://registry.npm.taobao.org/tweetnacl/download/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" + integrity sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q= + +type-fest@^0.8.1: + version "0.8.1" + resolved "https://registry.npm.taobao.org/type-fest/download/type-fest-0.8.1.tgz?cache=0&sync_timestamp=1569404138136&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ftype-fest%2Fdownload%2Ftype-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d" + integrity sha1-CeJJ696FHTseSNJ8EFREZn8XuD0= + +type-is@~1.6.17, type-is@~1.6.18: + version "1.6.18" + resolved "https://registry.npm.taobao.org/type-is/download/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" + integrity sha1-TlUs0F3wlGfcvE73Od6J8s83wTE= + dependencies: + media-typer "0.3.0" + mime-types "~2.1.24" + +typedarray@^0.0.6: + version "0.0.6" + resolved "https://registry.npm.taobao.org/typedarray/download/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" + integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c= + +typescript@3.5.3, typescript@~3.5.3: + version "3.5.3" + resolved "https://registry.npm.taobao.org/typescript/download/typescript-3.5.3.tgz#c830f657f93f1ea846819e929092f5fe5983e977" + integrity sha1-yDD2V/k/HqhGgZ6SkJL1/lmD6Xc= + +uglify-js@^3.1.4: + version "3.7.3" + resolved "https://registry.npm.taobao.org/uglify-js/download/uglify-js-3.7.3.tgz?cache=0&sync_timestamp=1577407829710&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fuglify-js%2Fdownload%2Fuglify-js-3.7.3.tgz#f918fce9182f466d5140f24bb0ff35c2d32dcc6a" + integrity sha1-+Rj86RgvRm1RQPJLsP81wtMtzGo= + dependencies: + commander "~2.20.3" + source-map "~0.6.1" + +ultron@~1.1.0: + version "1.1.1" + resolved "https://registry.npm.taobao.org/ultron/download/ultron-1.1.1.tgz#9fe1536a10a664a65266a1e3ccf85fd36302bc9c" + integrity sha1-n+FTahCmZKZSZqHjzPhf02MCvJw= + +unicode-canonical-property-names-ecmascript@^1.0.4: + version "1.0.4" + resolved "https://registry.npm.taobao.org/unicode-canonical-property-names-ecmascript/download/unicode-canonical-property-names-ecmascript-1.0.4.tgz#2619800c4c825800efdd8343af7dd9933cbe2818" + integrity sha1-JhmADEyCWADv3YNDr33Zkzy+KBg= + +unicode-match-property-ecmascript@^1.0.4: + version "1.0.4" + resolved "https://registry.npm.taobao.org/unicode-match-property-ecmascript/download/unicode-match-property-ecmascript-1.0.4.tgz#8ed2a32569961bce9227d09cd3ffbb8fed5f020c" + integrity sha1-jtKjJWmWG86SJ9Cc0/+7j+1fAgw= + dependencies: + unicode-canonical-property-names-ecmascript "^1.0.4" + unicode-property-aliases-ecmascript "^1.0.4" + +unicode-match-property-value-ecmascript@^1.1.0: + version "1.1.0" + resolved "https://registry.npm.taobao.org/unicode-match-property-value-ecmascript/download/unicode-match-property-value-ecmascript-1.1.0.tgz#5b4b426e08d13a80365e0d657ac7a6c1ec46a277" + integrity sha1-W0tCbgjROoA2Xg1lesemwexGonc= + +unicode-property-aliases-ecmascript@^1.0.4: + version "1.0.5" + resolved "https://registry.npm.taobao.org/unicode-property-aliases-ecmascript/download/unicode-property-aliases-ecmascript-1.0.5.tgz#a9cc6cc7ce63a0a3023fc99e341b94431d405a57" + integrity sha1-qcxsx85joKMCP8meNBuUQx1AWlc= + +union-value@^1.0.0: + version "1.0.1" + resolved "https://registry.npm.taobao.org/union-value/download/union-value-1.0.1.tgz#0b6fe7b835aecda61c6ea4d4f02c14221e109847" + integrity sha1-C2/nuDWuzaYcbqTU8CwUIh4QmEc= + dependencies: + arr-union "^3.1.0" + get-value "^2.0.6" + is-extendable "^0.1.1" + set-value "^2.0.1" + +unique-filename@^1.1.1: + version "1.1.1" + resolved "https://registry.npm.taobao.org/unique-filename/download/unique-filename-1.1.1.tgz#1d69769369ada0583103a1e6ae87681b56573230" + integrity sha1-HWl2k2mtoFgxA6HmrodoG1ZXMjA= + dependencies: + unique-slug "^2.0.0" + +unique-slug@^2.0.0: + version "2.0.2" + resolved "https://registry.npm.taobao.org/unique-slug/download/unique-slug-2.0.2.tgz#baabce91083fc64e945b0f3ad613e264f7cd4e6c" + integrity sha1-uqvOkQg/xk6UWw861hPiZPfNTmw= + dependencies: + imurmurhash "^0.1.4" + +universal-analytics@^0.4.20: + version "0.4.20" + resolved "https://registry.npm.taobao.org/universal-analytics/download/universal-analytics-0.4.20.tgz#d6b64e5312bf74f7c368e3024a922135dbf24b03" + integrity sha1-1rZOUxK/dPfDaOMCSpIhNdvySwM= + dependencies: + debug "^3.0.0" + request "^2.88.0" + uuid "^3.0.0" + +universalify@^0.1.0: + version "0.1.2" + resolved "https://registry.npm.taobao.org/universalify/download/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" + integrity sha1-tkb2m+OULavOzJ1mOcgNwQXvqmY= + +unpipe@1.0.0, unpipe@~1.0.0: + version "1.0.0" + resolved "https://registry.npm.taobao.org/unpipe/download/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" + integrity sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw= + +unset-value@^1.0.0: + version "1.0.0" + resolved "https://registry.npm.taobao.org/unset-value/download/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559" + integrity sha1-g3aHP30jNRef+x5vw6jtDfyKtVk= + dependencies: + has-value "^0.3.1" + isobject "^3.0.0" + +upath@^1.1.1: + version "1.2.0" + resolved "https://registry.npm.taobao.org/upath/download/upath-1.2.0.tgz?cache=0&sync_timestamp=1567458131109&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fupath%2Fdownload%2Fupath-1.2.0.tgz#8f66dbcd55a883acdae4408af8b035a5044c1894" + integrity sha1-j2bbzVWog6za5ECK+LA1pQRMGJQ= + +uri-js@^4.2.2: + version "4.2.2" + resolved "https://registry.npm.taobao.org/uri-js/download/uri-js-4.2.2.tgz#94c540e1ff772956e2299507c010aea6c8838eb0" + integrity sha1-lMVA4f93KVbiKZUHwBCupsiDjrA= + dependencies: + punycode "^2.1.0" + +urix@^0.1.0: + version "0.1.0" + resolved "https://registry.npm.taobao.org/urix/download/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72" + integrity sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI= + +url-parse@^1.4.3: + version "1.4.7" + resolved "https://registry.npm.taobao.org/url-parse/download/url-parse-1.4.7.tgz#a8a83535e8c00a316e403a5db4ac1b9b853ae278" + integrity sha1-qKg1NejACjFuQDpdtKwbm4U64ng= + dependencies: + querystringify "^2.1.1" + requires-port "^1.0.0" + +url@^0.11.0: + version "0.11.0" + resolved "https://registry.npm.taobao.org/url/download/url-0.11.0.tgz#3838e97cfc60521eb73c525a8e55bfdd9e2e28f1" + integrity sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE= + dependencies: + punycode "1.3.2" + querystring "0.2.0" + +use@^3.1.0: + version "3.1.1" + resolved "https://registry.npm.taobao.org/use/download/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f" + integrity sha1-1QyMrHmhn7wg8pEfVuuXP04QBw8= + +useragent@2.3.0: + version "2.3.0" + resolved "https://registry.npm.taobao.org/useragent/download/useragent-2.3.0.tgz#217f943ad540cb2128658ab23fc960f6a88c9972" + integrity sha1-IX+UOtVAyyEoZYqyP8lg9qiMmXI= + dependencies: + lru-cache "4.1.x" + tmp "0.0.x" + +util-deprecate@^1.0.1, util-deprecate@~1.0.1: + version "1.0.2" + resolved "https://registry.npm.taobao.org/util-deprecate/download/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" + integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= + +util-promisify@^2.1.0: + version "2.1.0" + resolved "https://registry.npm.taobao.org/util-promisify/download/util-promisify-2.1.0.tgz#3c2236476c4d32c5ff3c47002add7c13b9a82a53" + integrity sha1-PCI2R2xNMsX/PEcAKt18E7moKlM= + dependencies: + object.getownpropertydescriptors "^2.0.3" + +util@0.10.3: + version "0.10.3" + resolved "https://registry.npm.taobao.org/util/download/util-0.10.3.tgz#7afb1afe50805246489e3db7fe0ed379336ac0f9" + integrity sha1-evsa/lCAUkZInj23/g7TeTNqwPk= + dependencies: + inherits "2.0.1" + +util@^0.11.0: + version "0.11.1" + resolved "https://registry.npm.taobao.org/util/download/util-0.11.1.tgz#3236733720ec64bb27f6e26f421aaa2e1b588d61" + integrity sha1-MjZzNyDsZLsn9uJvQhqqLhtYjWE= + dependencies: + inherits "2.0.3" + +utils-merge@1.0.1: + version "1.0.1" + resolved "https://registry.npm.taobao.org/utils-merge/download/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" + integrity sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM= + +uuid@^3.0.0, uuid@^3.0.1, uuid@^3.3.2: + version "3.3.3" + resolved "https://registry.npm.taobao.org/uuid/download/uuid-3.3.3.tgz#4568f0216e78760ee1dbf3a4d2cf53e224112866" + integrity sha1-RWjwIW54dg7h2/Ok0s9T4iQRKGY= + +validate-npm-package-license@^3.0.1: + version "3.0.4" + resolved "https://registry.npm.taobao.org/validate-npm-package-license/download/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" + integrity sha1-/JH2uce6FchX9MssXe/uw51PQQo= + dependencies: + spdx-correct "^3.0.0" + spdx-expression-parse "^3.0.0" + +validate-npm-package-name@^3.0.0: + version "3.0.0" + resolved "https://registry.npm.taobao.org/validate-npm-package-name/download/validate-npm-package-name-3.0.0.tgz#5fa912d81eb7d0c74afc140de7317f0ca7df437e" + integrity sha1-X6kS2B630MdK/BQN5zF/DKffQ34= + dependencies: + builtins "^1.0.3" + +vary@~1.1.2: + version "1.1.2" + resolved "https://registry.npm.taobao.org/vary/download/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" + integrity sha1-IpnwLG3tMNSllhsLn3RSShj2NPw= + +verror@1.10.0: + version "1.10.0" + resolved "https://registry.npm.taobao.org/verror/download/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" + integrity sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA= + dependencies: + assert-plus "^1.0.0" + core-util-is "1.0.2" + extsprintf "^1.2.0" + +vm-browserify@^1.0.1: + version "1.1.2" + resolved "https://registry.npm.taobao.org/vm-browserify/download/vm-browserify-1.1.2.tgz?cache=0&sync_timestamp=1572870717730&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fvm-browserify%2Fdownload%2Fvm-browserify-1.1.2.tgz#78641c488b8e6ca91a75f511e7a3b32a86e5dda0" + integrity sha1-eGQcSIuObKkadfUR56OzKobl3aA= + +void-elements@^2.0.0: + version "2.0.1" + resolved "https://registry.npm.taobao.org/void-elements/download/void-elements-2.0.1.tgz#c066afb582bb1cb4128d60ea92392e94d5e9dbec" + integrity sha1-wGavtYK7HLQSjWDqkjkulNXp2+w= + +watchpack@^1.6.0: + version "1.6.0" + resolved "https://registry.npm.taobao.org/watchpack/download/watchpack-1.6.0.tgz?cache=0&sync_timestamp=1573060318538&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fwatchpack%2Fdownload%2Fwatchpack-1.6.0.tgz#4bc12c2ebe8aa277a71f1d3f14d685c7b446cd00" + integrity sha1-S8EsLr6KonenHx0/FNaFx7RGzQA= + dependencies: + chokidar "^2.0.2" + graceful-fs "^4.1.2" + neo-async "^2.5.0" + +wbuf@^1.1.0, wbuf@^1.7.3: + version "1.7.3" + resolved "https://registry.npm.taobao.org/wbuf/download/wbuf-1.7.3.tgz#c1d8d149316d3ea852848895cb6a0bfe887b87df" + integrity sha1-wdjRSTFtPqhShIiVy2oL/oh7h98= + dependencies: + minimalistic-assert "^1.0.0" + +webdriver-js-extender@2.1.0: + version "2.1.0" + resolved "https://registry.npm.taobao.org/webdriver-js-extender/download/webdriver-js-extender-2.1.0.tgz#57d7a93c00db4cc8d556e4d3db4b5db0a80c3bb7" + integrity sha1-V9epPADbTMjVVuTT20tdsKgMO7c= + dependencies: + "@types/selenium-webdriver" "^3.0.0" + selenium-webdriver "^3.0.1" + +webdriver-manager@^12.0.6: + version "12.1.7" + resolved "https://registry.npm.taobao.org/webdriver-manager/download/webdriver-manager-12.1.7.tgz#ed4eaee8f906b33c146e869b55e850553a1b1162" + integrity sha1-7U6u6PkGszwUboabVehQVTobEWI= + dependencies: + adm-zip "^0.4.9" + chalk "^1.1.1" + del "^2.2.0" + glob "^7.0.3" + ini "^1.3.4" + minimist "^1.2.0" + q "^1.4.1" + request "^2.87.0" + rimraf "^2.5.2" + semver "^5.3.0" + xml2js "^0.4.17" + +webpack-core@^0.6.8: + version "0.6.9" + resolved "https://registry.npm.taobao.org/webpack-core/download/webpack-core-0.6.9.tgz#fc571588c8558da77be9efb6debdc5a3b172bdc2" + integrity sha1-/FcViMhVjad76e+23r3Fo7FyvcI= + dependencies: + source-list-map "~0.1.7" + source-map "~0.4.1" + +webpack-dev-middleware@3.7.2, webpack-dev-middleware@^3.7.2: + version "3.7.2" + resolved "https://registry.npm.taobao.org/webpack-dev-middleware/download/webpack-dev-middleware-3.7.2.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fwebpack-dev-middleware%2Fdownload%2Fwebpack-dev-middleware-3.7.2.tgz#0019c3db716e3fa5cecbf64f2ab88a74bab331f3" + integrity sha1-ABnD23FuP6XOy/ZPKriKdLqzMfM= + dependencies: + memory-fs "^0.4.1" + mime "^2.4.4" + mkdirp "^0.5.1" + range-parser "^1.2.1" + webpack-log "^2.0.0" + +webpack-dev-server@3.9.0: + version "3.9.0" + resolved "https://registry.npm.taobao.org/webpack-dev-server/download/webpack-dev-server-3.9.0.tgz?cache=0&sync_timestamp=1576754577658&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fwebpack-dev-server%2Fdownload%2Fwebpack-dev-server-3.9.0.tgz#27c3b5d0f6b6677c4304465ac817623c8b27b89c" + integrity sha1-J8O10Pa2Z3xDBEZayBdiPIsnuJw= + dependencies: + ansi-html "0.0.7" + bonjour "^3.5.0" + chokidar "^2.1.8" + compression "^1.7.4" + connect-history-api-fallback "^1.6.0" + debug "^4.1.1" + del "^4.1.1" + express "^4.17.1" + html-entities "^1.2.1" + http-proxy-middleware "0.19.1" + import-local "^2.0.0" + internal-ip "^4.3.0" + ip "^1.1.5" + is-absolute-url "^3.0.3" + killable "^1.0.1" + loglevel "^1.6.4" + opn "^5.5.0" + p-retry "^3.0.1" + portfinder "^1.0.25" + schema-utils "^1.0.0" + selfsigned "^1.10.7" + semver "^6.3.0" + serve-index "^1.9.1" + sockjs "0.3.19" + sockjs-client "1.4.0" + spdy "^4.0.1" + strip-ansi "^3.0.1" + supports-color "^6.1.0" + url "^0.11.0" + webpack-dev-middleware "^3.7.2" + webpack-log "^2.0.0" + ws "^6.2.1" + yargs "12.0.5" + +webpack-log@^2.0.0: + version "2.0.0" + resolved "https://registry.npm.taobao.org/webpack-log/download/webpack-log-2.0.0.tgz#5b7928e0637593f119d32f6227c1e0ac31e1b47f" + integrity sha1-W3ko4GN1k/EZ0y9iJ8HgrDHhtH8= + dependencies: + ansi-colors "^3.0.0" + uuid "^3.3.2" + +webpack-merge@4.2.1: + version "4.2.1" + resolved "https://registry.npm.taobao.org/webpack-merge/download/webpack-merge-4.2.1.tgz#5e923cf802ea2ace4fd5af1d3247368a633489b4" + integrity sha1-XpI8+ALqKs5P1a8dMkc2imM0ibQ= + dependencies: + lodash "^4.17.5" + +webpack-sources@1.4.3, webpack-sources@^1.1.0, webpack-sources@^1.2.0, webpack-sources@^1.4.0, webpack-sources@^1.4.1: + version "1.4.3" + resolved "https://registry.npm.taobao.org/webpack-sources/download/webpack-sources-1.4.3.tgz?cache=0&sync_timestamp=1574264193174&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fwebpack-sources%2Fdownload%2Fwebpack-sources-1.4.3.tgz#eedd8ec0b928fbf1cbfe994e22d2d890f330a933" + integrity sha1-7t2OwLko+/HL/plOItLYkPMwqTM= + dependencies: + source-list-map "^2.0.0" + source-map "~0.6.1" + +webpack-subresource-integrity@1.1.0-rc.6: + version "1.1.0-rc.6" + resolved "https://registry.npm.taobao.org/webpack-subresource-integrity/download/webpack-subresource-integrity-1.1.0-rc.6.tgz?cache=0&sync_timestamp=1569916474449&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fwebpack-subresource-integrity%2Fdownload%2Fwebpack-subresource-integrity-1.1.0-rc.6.tgz#37f6f1264e1eb378e41465a98da80fad76ab8886" + integrity sha1-N/bxJk4es3jkFGWpjagPrXariIY= + dependencies: + webpack-core "^0.6.8" + +webpack@4.39.2: + version "4.39.2" + resolved "https://registry.npm.taobao.org/webpack/download/webpack-4.39.2.tgz#c9aa5c1776d7c309d1b3911764f0288c8c2816aa" + integrity sha1-yapcF3bXwwnRs5EXZPAojIwoFqo= + dependencies: + "@webassemblyjs/ast" "1.8.5" + "@webassemblyjs/helper-module-context" "1.8.5" + "@webassemblyjs/wasm-edit" "1.8.5" + "@webassemblyjs/wasm-parser" "1.8.5" + acorn "^6.2.1" + ajv "^6.10.2" + ajv-keywords "^3.4.1" + chrome-trace-event "^1.0.2" + enhanced-resolve "^4.1.0" + eslint-scope "^4.0.3" + json-parse-better-errors "^1.0.2" + loader-runner "^2.4.0" + loader-utils "^1.2.3" + memory-fs "^0.4.1" + micromatch "^3.1.10" + mkdirp "^0.5.1" + neo-async "^2.6.1" + node-libs-browser "^2.2.1" + schema-utils "^1.0.0" + tapable "^1.1.3" + terser-webpack-plugin "^1.4.1" + watchpack "^1.6.0" + webpack-sources "^1.4.1" + +websocket-driver@>=0.5.1: + version "0.7.3" + resolved "https://registry.npm.taobao.org/websocket-driver/download/websocket-driver-0.7.3.tgz#a2d4e0d4f4f116f1e6297eba58b05d430100e9f9" + integrity sha1-otTg1PTxFvHmKX66WLBdQwEA6fk= + dependencies: + http-parser-js ">=0.4.0 <0.4.11" + safe-buffer ">=5.1.0" + websocket-extensions ">=0.1.1" + +websocket-extensions@>=0.1.1: + version "0.1.3" + resolved "https://registry.npm.taobao.org/websocket-extensions/download/websocket-extensions-0.1.3.tgz#5d2ff22977003ec687a4b87073dfbbac146ccf29" + integrity sha1-XS/yKXcAPsaHpLhwc9+7rBRszyk= + +when@~3.6.x: + version "3.6.4" + resolved "https://registry.npm.taobao.org/when/download/when-3.6.4.tgz#473b517ec159e2b85005497a13983f095412e34e" + integrity sha1-RztRfsFZ4rhQBUl6E5g/CVQS404= + +which-module@^2.0.0: + version "2.0.0" + resolved "https://registry.npm.taobao.org/which-module/download/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" + integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho= + +which@^1.2.1, which@^1.2.9, which@^1.3.1: + version "1.3.1" + resolved "https://registry.npm.taobao.org/which/download/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" + integrity sha1-pFBD1U9YBTFtqNYvn1CRjT2nCwo= + dependencies: + isexe "^2.0.0" + +wide-align@^1.1.0: + version "1.1.3" + resolved "https://registry.npm.taobao.org/wide-align/download/wide-align-1.1.3.tgz#ae074e6bdc0c14a431e804e624549c633b000457" + integrity sha1-rgdOa9wMFKQx6ATmJFScYzsABFc= + dependencies: + string-width "^1.0.2 || 2" + +wordwrap@~0.0.2: + version "0.0.3" + resolved "https://registry.npm.taobao.org/wordwrap/download/wordwrap-0.0.3.tgz#a3d5da6cd5c0bc0008d37234bbaf1bed63059107" + integrity sha1-o9XabNXAvAAI03I0u68b7WMFkQc= + +worker-farm@^1.7.0: + version "1.7.0" + resolved "https://registry.npm.taobao.org/worker-farm/download/worker-farm-1.7.0.tgz#26a94c5391bbca926152002f69b84a4bf772e5a8" + integrity sha1-JqlMU5G7ypJhUgAvabhKS/dy5ag= + dependencies: + errno "~0.1.7" + +worker-plugin@3.2.0: + version "3.2.0" + resolved "https://registry.npm.taobao.org/worker-plugin/download/worker-plugin-3.2.0.tgz#ddae9f161b76fcbaacf8f54ecd037844584e43e7" + integrity sha1-3a6fFht2/Lqs+PVOzQN4RFhOQ+c= + dependencies: + loader-utils "^1.1.0" + +wrap-ansi@^2.0.0: + version "2.1.0" + resolved "https://registry.npm.taobao.org/wrap-ansi/download/wrap-ansi-2.1.0.tgz?cache=0&sync_timestamp=1573488536792&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fwrap-ansi%2Fdownload%2Fwrap-ansi-2.1.0.tgz#d8fc3d284dd05794fe84973caecdd1cf824fdd85" + integrity sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU= + dependencies: + string-width "^1.0.1" + strip-ansi "^3.0.1" + +wrappy@1: + version "1.0.2" + resolved "https://registry.npm.taobao.org/wrappy/download/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= + +ws@^6.2.1: + version "6.2.1" + resolved "https://registry.npm.taobao.org/ws/download/ws-6.2.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fws%2Fdownload%2Fws-6.2.1.tgz#442fdf0a47ed64f59b6a5d8ff130f4748ed524fb" + integrity sha1-RC/fCkftZPWbal2P8TD0dI7VJPs= + dependencies: + async-limiter "~1.0.0" + +ws@~3.3.1: + version "3.3.3" + resolved "https://registry.npm.taobao.org/ws/download/ws-3.3.3.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fws%2Fdownload%2Fws-3.3.3.tgz#f1cf84fe2d5e901ebce94efaece785f187a228f2" + integrity sha1-8c+E/i1ekB686U767OeF8YeiKPI= + dependencies: + async-limiter "~1.0.0" + safe-buffer "~5.1.0" + ultron "~1.1.0" + +xml2js@^0.4.17: + version "0.4.23" + resolved "https://registry.npm.taobao.org/xml2js/download/xml2js-0.4.23.tgz?cache=0&sync_timestamp=1576776888003&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fxml2js%2Fdownload%2Fxml2js-0.4.23.tgz#a0c69516752421eb2ac758ee4d4ccf58843eac66" + integrity sha1-oMaVFnUkIesqx1juTUzPWIQ+rGY= + dependencies: + sax ">=0.6.0" + xmlbuilder "~11.0.0" + +xmlbuilder@~11.0.0: + version "11.0.1" + resolved "https://registry.npm.taobao.org/xmlbuilder/download/xmlbuilder-11.0.1.tgz#be9bae1c8a046e76b31127726347d0ad7002beb3" + integrity sha1-vpuuHIoEbnazESdyY0fQrXACvrM= + +xmlhttprequest-ssl@~1.5.4: + version "1.5.5" + resolved "https://registry.npm.taobao.org/xmlhttprequest-ssl/download/xmlhttprequest-ssl-1.5.5.tgz#c2876b06168aadc40e57d97e81191ac8f4398b3e" + integrity sha1-wodrBhaKrcQOV9l+gRkayPQ5iz4= + +xtend@^4.0.0, xtend@~4.0.1: + version "4.0.2" + resolved "https://registry.npm.taobao.org/xtend/download/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" + integrity sha1-u3J3n1+kZRhrH0OPZ0+jR/2121Q= + +"y18n@^3.2.1 || ^4.0.0", y18n@^4.0.0: + version "4.0.0" + resolved "https://registry.npm.taobao.org/y18n/download/y18n-4.0.0.tgz#95ef94f85ecc81d007c264e190a120f0a3c8566b" + integrity sha1-le+U+F7MgdAHwmThkKEg8KPIVms= + +yallist@^2.1.2: + version "2.1.2" + resolved "https://registry.npm.taobao.org/yallist/download/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" + integrity sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI= + +yallist@^3.0.0, yallist@^3.0.2, yallist@^3.0.3: + version "3.1.1" + resolved "https://registry.npm.taobao.org/yallist/download/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" + integrity sha1-27fa+b/YusmrRev2ArjLrQ1dCP0= + +yargs-parser@^11.1.1: + version "11.1.1" + resolved "https://registry.npm.taobao.org/yargs-parser/download/yargs-parser-11.1.1.tgz#879a0865973bca9f6bab5cbdf3b1c67ec7d3bcf4" + integrity sha1-h5oIZZc7yp9rq1y987HGfsfTvPQ= + dependencies: + camelcase "^5.0.0" + decamelize "^1.2.0" + +yargs-parser@^13.0.0: + version "13.1.1" + resolved "https://registry.npm.taobao.org/yargs-parser/download/yargs-parser-13.1.1.tgz#d26058532aa06d365fe091f6a1fc06b2f7e5eca0" + integrity sha1-0mBYUyqgbTZf4JH2ofwGsvfl7KA= + dependencies: + camelcase "^5.0.0" + decamelize "^1.2.0" + +yargs@12.0.5: + version "12.0.5" + resolved "https://registry.npm.taobao.org/yargs/download/yargs-12.0.5.tgz?cache=0&sync_timestamp=1577940993299&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fyargs%2Fdownload%2Fyargs-12.0.5.tgz#05f5997b609647b64f66b81e3b4b10a368e7ad13" + integrity sha1-BfWZe2CWR7ZPZrgeO0sQo2jnrRM= + dependencies: + cliui "^4.0.0" + decamelize "^1.2.0" + find-up "^3.0.0" + get-caller-file "^1.0.1" + os-locale "^3.0.0" + require-directory "^2.1.1" + require-main-filename "^1.0.1" + set-blocking "^2.0.0" + string-width "^2.0.0" + which-module "^2.0.0" + y18n "^3.2.1 || ^4.0.0" + yargs-parser "^11.1.1" + +yargs@13.1.0: + version "13.1.0" + resolved "https://registry.npm.taobao.org/yargs/download/yargs-13.1.0.tgz?cache=0&sync_timestamp=1577940993299&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fyargs%2Fdownload%2Fyargs-13.1.0.tgz#b2729ce4bfc0c584939719514099d8a916ad2301" + integrity sha1-snKc5L/AxYSTlxlRQJnYqRatIwE= + dependencies: + cliui "^4.0.0" + find-up "^3.0.0" + get-caller-file "^2.0.1" + os-locale "^3.1.0" + require-directory "^2.1.1" + require-main-filename "^2.0.0" + set-blocking "^2.0.0" + string-width "^3.0.0" + which-module "^2.0.0" + y18n "^4.0.0" + yargs-parser "^13.0.0" + +yeast@0.1.2: + version "0.1.2" + resolved "https://registry.npm.taobao.org/yeast/download/yeast-0.1.2.tgz#008e06d8094320c372dbc2f8ed76a0ca6c8ac419" + integrity sha1-AI4G2AlDIMNy28L47XagymyKxBk= + +yn@^2.0.0: + version "2.0.0" + resolved "https://registry.npm.taobao.org/yn/download/yn-2.0.0.tgz#e5adabc8acf408f6385fc76495684c88e6af689a" + integrity sha1-5a2ryKz0CPY4X8dklWhMiOavaJo= + +zone.js@~0.9.1: + version "0.9.1" + resolved "https://registry.npm.taobao.org/zone.js/download/zone.js-0.9.1.tgz#e37c6e5c54c13fae4de26b5ffe8d8e9212da6d9b" + integrity sha1-43xuXFTBP65N4mtf/o2OkhLabZs=