commit b67883347c18a47b352bf3e8cfd08d36afb9643d Author: SHAOJIAHAO <55341701@qq.com> Date: Thu Nov 5 14:47:09 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/.gitignore b/.gitignore new file mode 100644 index 0000000..86d943a --- /dev/null +++ b/.gitignore @@ -0,0 +1,46 @@ +# See http://help.github.com/ignore-files/ for more about ignoring files. + +# compiled output +/dist +/tmp +/out-tsc +# Only exists if Bazel was run +/bazel-out + +# dependencies +/node_modules + +# profiling files +chrome-profiler-events*.json +speed-measure-plugin*.json + +# IDEs and editors +/.idea +.project +.classpath +.c9/ +*.launch +.settings/ +*.sublime-workspace + +# IDE - VSCode +.vscode/* +!.vscode/settings.json +!.vscode/tasks.json +!.vscode/launch.json +!.vscode/extensions.json +.history/* + +# misc +/.sass-cache +/connect.lock +/coverage +/libpeerconnection.log +npm-debug.log +yarn-error.log +testem.log +/typings + +# System Files +.DS_Store +Thumbs.db diff --git a/.vscode/launch.json b/.vscode/launch.json new file mode 100644 index 0000000..a6a8238 --- /dev/null +++ b/.vscode/launch.json @@ -0,0 +1,15 @@ +{ + // Use IntelliSense to learn about possible attributes. + // Hover to view descriptions of existing attributes. + // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 + "version": "0.2.0", + "configurations": [ + { + "type": "pwa-chrome", + "request": "launch", + "name": "Launch Chrome against localhost", + "url": "http://localhost:4200", + "webRoot": "${workspaceFolder}" + } + ] +} \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..8b2823d --- /dev/null +++ b/README.md @@ -0,0 +1,9 @@ + + +pad端六熟悉记录前端项目。此项目在 Angular 框架基础上编写。 + +后续开发都基于此。 + +项目初始化:npm install + +项目启动:npm start diff --git a/angular.json b/angular.json new file mode 100644 index 0000000..b435257 --- /dev/null +++ b/angular.json @@ -0,0 +1,143 @@ +{ + "$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", + "./node_modules/viewerjs/dist/viewer.css" + ], + "scripts": [ + "node_modules/echarts/dist/echarts.js", + "src/assets/mTokenK1/mToken_K1.js", + "./node_modules/swiper/js/swiper.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", + "cli": { + "analytics": "6210f5d0-2cd7-43dc-b245-2140372d1b89" + } +} \ 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..d6c4941 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,18466 @@ +{ + "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=" + }, + "@ant-design/colors": { + "version": "3.2.2", + "resolved": "https://registry.npm.taobao.org/@ant-design/colors/download/@ant-design/colors-3.2.2.tgz?cache=0&sync_timestamp=1596611396536&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40ant-design%2Fcolors%2Fdownload%2F%40ant-design%2Fcolors-3.2.2.tgz", + "integrity": "sha1-WtQ9YZ6RHzSI66wwPWBuZqhCOQM=", + "requires": { + "tinycolor2": "^1.4.1" + } + }, + "@ant-design/icons-angular": { + "version": "9.0.1", + "resolved": "https://registry.npm.taobao.org/@ant-design/icons-angular/download/@ant-design/icons-angular-9.0.1.tgz?cache=0&sync_timestamp=1601000889997&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40ant-design%2Ficons-angular%2Fdownload%2F%40ant-design%2Ficons-angular-9.0.1.tgz", + "integrity": "sha1-Wsi+xbw00jEgggyT+FEbWaoRe8U=", + "requires": { + "@ant-design/colors": "^3.1.0" + } + }, + "@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" + } + } + } + }, + "@pixi/accessibility": { + "version": "5.3.3", + "resolved": "https://registry.npm.taobao.org/@pixi/accessibility/download/@pixi/accessibility-5.3.3.tgz", + "integrity": "sha1-t7qxfjz1619RFHHflDFVpOrfDG4=", + "requires": { + "@pixi/core": "5.3.3", + "@pixi/display": "5.3.3", + "@pixi/utils": "5.3.3" + } + }, + "@pixi/app": { + "version": "5.3.3", + "resolved": "https://registry.npm.taobao.org/@pixi/app/download/@pixi/app-5.3.3.tgz", + "integrity": "sha1-Y1fi5azB7RGLf5TBF5zvVc5u1Zw=", + "requires": { + "@pixi/core": "5.3.3", + "@pixi/display": "5.3.3" + } + }, + "@pixi/constants": { + "version": "5.3.3", + "resolved": "https://registry.npm.taobao.org/@pixi/constants/download/@pixi/constants-5.3.3.tgz", + "integrity": "sha1-+q7S0M42TWf+Pmmsl+nbH2rWwEE=" + }, + "@pixi/core": { + "version": "5.3.3", + "resolved": "https://registry.npm.taobao.org/@pixi/core/download/@pixi/core-5.3.3.tgz", + "integrity": "sha1-S5c+49GPYyTWMxHooApo7LGZZTI=", + "requires": { + "@pixi/constants": "5.3.3", + "@pixi/math": "5.3.3", + "@pixi/runner": "5.3.3", + "@pixi/settings": "5.3.3", + "@pixi/ticker": "5.3.3", + "@pixi/utils": "5.3.3" + } + }, + "@pixi/display": { + "version": "5.3.3", + "resolved": "https://registry.npm.taobao.org/@pixi/display/download/@pixi/display-5.3.3.tgz", + "integrity": "sha1-FGRrNbgLhYYxa+NJXjwOf6YQ9Jk=", + "requires": { + "@pixi/math": "5.3.3", + "@pixi/settings": "5.3.3", + "@pixi/utils": "5.3.3" + } + }, + "@pixi/extract": { + "version": "5.3.3", + "resolved": "https://registry.npm.taobao.org/@pixi/extract/download/@pixi/extract-5.3.3.tgz", + "integrity": "sha1-Wrjil3gj0Op12wA+RdbG1yvCtkI=", + "requires": { + "@pixi/core": "5.3.3", + "@pixi/math": "5.3.3", + "@pixi/utils": "5.3.3" + } + }, + "@pixi/filter-adjustment": { + "version": "3.1.1", + "resolved": "https://registry.npm.taobao.org/@pixi/filter-adjustment/download/@pixi/filter-adjustment-3.1.1.tgz", + "integrity": "sha1-KqQQSBBvogBmSN6uWYE7+1XI/lQ=" + }, + "@pixi/filter-advanced-bloom": { + "version": "3.1.1", + "resolved": "https://registry.npm.taobao.org/@pixi/filter-advanced-bloom/download/@pixi/filter-advanced-bloom-3.1.1.tgz", + "integrity": "sha1-5FuPqL0XqY5iQvqKlsGZSEqCyiI=", + "requires": { + "@pixi/filter-kawase-blur": "3.1.1" + } + }, + "@pixi/filter-alpha": { + "version": "5.3.3", + "resolved": "https://registry.npm.taobao.org/@pixi/filter-alpha/download/@pixi/filter-alpha-5.3.3.tgz", + "integrity": "sha1-LT4Q6PQveHpRFegbEyZYObIWJ5c=", + "requires": { + "@pixi/core": "5.3.3" + } + }, + "@pixi/filter-ascii": { + "version": "3.1.1", + "resolved": "https://registry.npm.taobao.org/@pixi/filter-ascii/download/@pixi/filter-ascii-3.1.1.tgz", + "integrity": "sha1-7cyOX9CLcplvhI0Yr0dh9Km5J2c=" + }, + "@pixi/filter-bevel": { + "version": "3.1.1", + "resolved": "https://registry.npm.taobao.org/@pixi/filter-bevel/download/@pixi/filter-bevel-3.1.1.tgz", + "integrity": "sha1-3bc4oxh2hUtON8Pl2p1iLVegPas=" + }, + "@pixi/filter-bloom": { + "version": "3.1.1", + "resolved": "https://registry.npm.taobao.org/@pixi/filter-bloom/download/@pixi/filter-bloom-3.1.1.tgz", + "integrity": "sha1-TAdwHnk47xtDV3qhSsOkiYML6wo=", + "requires": { + "@pixi/filter-alpha": "^5.0.0", + "@pixi/filter-blur": "^5.0.0" + } + }, + "@pixi/filter-blur": { + "version": "5.3.3", + "resolved": "https://registry.npm.taobao.org/@pixi/filter-blur/download/@pixi/filter-blur-5.3.3.tgz", + "integrity": "sha1-xTDkADjewXJaOZdTrJf6o0GFWc8=", + "requires": { + "@pixi/core": "5.3.3", + "@pixi/settings": "5.3.3" + } + }, + "@pixi/filter-bulge-pinch": { + "version": "3.1.1", + "resolved": "https://registry.npm.taobao.org/@pixi/filter-bulge-pinch/download/@pixi/filter-bulge-pinch-3.1.1.tgz", + "integrity": "sha1-zSpE6YAOdBAcAcntnIhOiQ1Swi8=" + }, + "@pixi/filter-color-map": { + "version": "3.1.1", + "resolved": "https://registry.npm.taobao.org/@pixi/filter-color-map/download/@pixi/filter-color-map-3.1.1.tgz", + "integrity": "sha1-ZpHE3sDhQkXxpSkE5PRiLvC2j78=" + }, + "@pixi/filter-color-matrix": { + "version": "5.3.3", + "resolved": "https://registry.npm.taobao.org/@pixi/filter-color-matrix/download/@pixi/filter-color-matrix-5.3.3.tgz", + "integrity": "sha1-wez4OkT2jXi1Q2uSC0WcUiLzc6U=", + "requires": { + "@pixi/core": "5.3.3" + } + }, + "@pixi/filter-color-overlay": { + "version": "3.1.1", + "resolved": "https://registry.npm.taobao.org/@pixi/filter-color-overlay/download/@pixi/filter-color-overlay-3.1.1.tgz", + "integrity": "sha1-S/ss9Zq/jhkTohYhpc3juDmXLhs=" + }, + "@pixi/filter-color-replace": { + "version": "3.1.1", + "resolved": "https://registry.npm.taobao.org/@pixi/filter-color-replace/download/@pixi/filter-color-replace-3.1.1.tgz", + "integrity": "sha1-ZsDd/5/FSOJO9xo6UrqqIHQ0aVw=" + }, + "@pixi/filter-convolution": { + "version": "3.1.1", + "resolved": "https://registry.npm.taobao.org/@pixi/filter-convolution/download/@pixi/filter-convolution-3.1.1.tgz", + "integrity": "sha1-+AE3rtHgjisn0u9kHeaEfhVWQqk=" + }, + "@pixi/filter-cross-hatch": { + "version": "3.1.1", + "resolved": "https://registry.npm.taobao.org/@pixi/filter-cross-hatch/download/@pixi/filter-cross-hatch-3.1.1.tgz", + "integrity": "sha1-cuhH5t5pfGTh31uqquh53BAFRgk=" + }, + "@pixi/filter-crt": { + "version": "3.1.1", + "resolved": "https://registry.npm.taobao.org/@pixi/filter-crt/download/@pixi/filter-crt-3.1.1.tgz", + "integrity": "sha1-P9dpqFPUOrMi3KEiJdiF+dvCrN4=" + }, + "@pixi/filter-displacement": { + "version": "5.3.3", + "resolved": "https://registry.npm.taobao.org/@pixi/filter-displacement/download/@pixi/filter-displacement-5.3.3.tgz", + "integrity": "sha1-8lGT9zi5DMdc0Eu7zQrv6eoDevE=", + "requires": { + "@pixi/core": "5.3.3", + "@pixi/math": "5.3.3" + } + }, + "@pixi/filter-dot": { + "version": "3.1.1", + "resolved": "https://registry.npm.taobao.org/@pixi/filter-dot/download/@pixi/filter-dot-3.1.1.tgz", + "integrity": "sha1-hASRWOf8hhkrOi+9o1L45+Mfnqk=" + }, + "@pixi/filter-drop-shadow": { + "version": "3.1.1", + "resolved": "https://registry.npm.taobao.org/@pixi/filter-drop-shadow/download/@pixi/filter-drop-shadow-3.1.1.tgz", + "integrity": "sha1-r0MTuk8/msmXAsQ4gzPG+/XHSiw=", + "requires": { + "@pixi/filter-kawase-blur": "3.1.1" + } + }, + "@pixi/filter-emboss": { + "version": "3.1.1", + "resolved": "https://registry.npm.taobao.org/@pixi/filter-emboss/download/@pixi/filter-emboss-3.1.1.tgz", + "integrity": "sha1-NlfDoagFDcaT2RQDPt1VTvHFfZk=" + }, + "@pixi/filter-fxaa": { + "version": "5.3.3", + "resolved": "https://registry.npm.taobao.org/@pixi/filter-fxaa/download/@pixi/filter-fxaa-5.3.3.tgz", + "integrity": "sha1-x3AWMdYPSFtuwQUvca+wY3yl8Lg=", + "requires": { + "@pixi/core": "5.3.3" + } + }, + "@pixi/filter-glitch": { + "version": "3.1.1", + "resolved": "https://registry.npm.taobao.org/@pixi/filter-glitch/download/@pixi/filter-glitch-3.1.1.tgz", + "integrity": "sha1-ldlzQ56eQYFJpbF+/6+X1D/vLlQ=" + }, + "@pixi/filter-glow": { + "version": "3.1.1", + "resolved": "https://registry.npm.taobao.org/@pixi/filter-glow/download/@pixi/filter-glow-3.1.1.tgz", + "integrity": "sha1-yMQ0h8uoiW68JwhEpcag9PKV6H4=", + "requires": { + "@pixi/core": "^5.0.0", + "@pixi/utils": "^5.0.0" + } + }, + "@pixi/filter-godray": { + "version": "3.1.1", + "resolved": "https://registry.npm.taobao.org/@pixi/filter-godray/download/@pixi/filter-godray-3.1.1.tgz", + "integrity": "sha1-Tp9oysvEwzC3cn5h8dEIXVkz1Ig=" + }, + "@pixi/filter-kawase-blur": { + "version": "3.1.1", + "resolved": "https://registry.npm.taobao.org/@pixi/filter-kawase-blur/download/@pixi/filter-kawase-blur-3.1.1.tgz", + "integrity": "sha1-nkGfF78X9G3qMjC6v/mwRJQ17hE=" + }, + "@pixi/filter-motion-blur": { + "version": "3.1.1", + "resolved": "https://registry.npm.taobao.org/@pixi/filter-motion-blur/download/@pixi/filter-motion-blur-3.1.1.tgz", + "integrity": "sha1-VHJzisFo+Eui3G649LMpxP7o7JY=" + }, + "@pixi/filter-multi-color-replace": { + "version": "3.1.1", + "resolved": "https://registry.npm.taobao.org/@pixi/filter-multi-color-replace/download/@pixi/filter-multi-color-replace-3.1.1.tgz", + "integrity": "sha1-yBNruGZYUKErxAy3qk3sFdENnME=" + }, + "@pixi/filter-noise": { + "version": "5.3.3", + "resolved": "https://registry.npm.taobao.org/@pixi/filter-noise/download/@pixi/filter-noise-5.3.3.tgz", + "integrity": "sha1-XYIdn4P5fYPUvlLz7Mfi0G/xwIQ=", + "requires": { + "@pixi/core": "5.3.3" + } + }, + "@pixi/filter-old-film": { + "version": "3.1.1", + "resolved": "https://registry.npm.taobao.org/@pixi/filter-old-film/download/@pixi/filter-old-film-3.1.1.tgz", + "integrity": "sha1-iNa4o7pz9H7jit1cioTdRy0SE6A=" + }, + "@pixi/filter-outline": { + "version": "3.1.1", + "resolved": "https://registry.npm.taobao.org/@pixi/filter-outline/download/@pixi/filter-outline-3.1.1.tgz", + "integrity": "sha1-4UYUMT5SrhraLal87qMiXulCn0E=" + }, + "@pixi/filter-pixelate": { + "version": "3.1.1", + "resolved": "https://registry.npm.taobao.org/@pixi/filter-pixelate/download/@pixi/filter-pixelate-3.1.1.tgz", + "integrity": "sha1-iXYXH3mtRSY3ZRzVM0tKYIMj/fQ=" + }, + "@pixi/filter-radial-blur": { + "version": "3.1.1", + "resolved": "https://registry.npm.taobao.org/@pixi/filter-radial-blur/download/@pixi/filter-radial-blur-3.1.1.tgz", + "integrity": "sha1-08bXdYP9UA8QJ0rfelui+8l5Ko4=" + }, + "@pixi/filter-reflection": { + "version": "3.1.1", + "resolved": "https://registry.npm.taobao.org/@pixi/filter-reflection/download/@pixi/filter-reflection-3.1.1.tgz", + "integrity": "sha1-Nw/iR6iYEmvAjkKPaVRrhbF0qsQ=" + }, + "@pixi/filter-rgb-split": { + "version": "3.1.1", + "resolved": "https://registry.npm.taobao.org/@pixi/filter-rgb-split/download/@pixi/filter-rgb-split-3.1.1.tgz", + "integrity": "sha1-C50fvn4ea47CRzP5tUcaZ049hnk=" + }, + "@pixi/filter-shockwave": { + "version": "3.1.1", + "resolved": "https://registry.npm.taobao.org/@pixi/filter-shockwave/download/@pixi/filter-shockwave-3.1.1.tgz", + "integrity": "sha1-dX5/fVbd8bH2X/iy7uH6nMTHfsU=" + }, + "@pixi/filter-simple-lightmap": { + "version": "3.1.1", + "resolved": "https://registry.npm.taobao.org/@pixi/filter-simple-lightmap/download/@pixi/filter-simple-lightmap-3.1.1.tgz", + "integrity": "sha1-T+Rjxo3dptW4SrXKYPaGTXkTPVc=" + }, + "@pixi/filter-tilt-shift": { + "version": "3.1.1", + "resolved": "https://registry.npm.taobao.org/@pixi/filter-tilt-shift/download/@pixi/filter-tilt-shift-3.1.1.tgz", + "integrity": "sha1-J/0XVhjqzZWRgbOV1sRYFYYQIcg=" + }, + "@pixi/filter-twist": { + "version": "3.1.1", + "resolved": "https://registry.npm.taobao.org/@pixi/filter-twist/download/@pixi/filter-twist-3.1.1.tgz", + "integrity": "sha1-9ccHL4TstI+8h+yitDz7aUB0p6I=" + }, + "@pixi/filter-zoom-blur": { + "version": "3.1.1", + "resolved": "https://registry.npm.taobao.org/@pixi/filter-zoom-blur/download/@pixi/filter-zoom-blur-3.1.1.tgz", + "integrity": "sha1-D6tdHAVi698VJKRUx41/EpvMjmQ=" + }, + "@pixi/graphics": { + "version": "5.3.3", + "resolved": "https://registry.npm.taobao.org/@pixi/graphics/download/@pixi/graphics-5.3.3.tgz", + "integrity": "sha1-z69aCpSoEfc1nCCHVUfBQJXx7Ow=", + "requires": { + "@pixi/constants": "5.3.3", + "@pixi/core": "5.3.3", + "@pixi/display": "5.3.3", + "@pixi/math": "5.3.3", + "@pixi/sprite": "5.3.3", + "@pixi/utils": "5.3.3" + } + }, + "@pixi/interaction": { + "version": "5.3.3", + "resolved": "https://registry.npm.taobao.org/@pixi/interaction/download/@pixi/interaction-5.3.3.tgz", + "integrity": "sha1-BzSOfSW45nRz7VT2eevoSrnuBAA=", + "requires": { + "@pixi/core": "5.3.3", + "@pixi/display": "5.3.3", + "@pixi/math": "5.3.3", + "@pixi/ticker": "5.3.3", + "@pixi/utils": "5.3.3" + } + }, + "@pixi/loaders": { + "version": "5.3.3", + "resolved": "https://registry.npm.taobao.org/@pixi/loaders/download/@pixi/loaders-5.3.3.tgz", + "integrity": "sha1-1BXyX5r2TZeBDkWcqiwKyktqG3w=", + "requires": { + "@pixi/core": "5.3.3", + "@pixi/utils": "5.3.3", + "resource-loader": "^3.0.1" + } + }, + "@pixi/math": { + "version": "5.3.3", + "resolved": "https://registry.npm.taobao.org/@pixi/math/download/@pixi/math-5.3.3.tgz", + "integrity": "sha1-XUDTb6FwHhlQg624S93y9kIML0w=" + }, + "@pixi/mesh": { + "version": "5.3.3", + "resolved": "https://registry.npm.taobao.org/@pixi/mesh/download/@pixi/mesh-5.3.3.tgz", + "integrity": "sha1-8K3wNiwY5udka3q6zOxH0wTLtAU=", + "requires": { + "@pixi/constants": "5.3.3", + "@pixi/core": "5.3.3", + "@pixi/display": "5.3.3", + "@pixi/math": "5.3.3", + "@pixi/settings": "5.3.3", + "@pixi/utils": "5.3.3" + } + }, + "@pixi/mesh-extras": { + "version": "5.3.3", + "resolved": "https://registry.npm.taobao.org/@pixi/mesh-extras/download/@pixi/mesh-extras-5.3.3.tgz", + "integrity": "sha1-mccS/bGwqdtm/ZWnbeJjYacFWrQ=", + "requires": { + "@pixi/constants": "5.3.3", + "@pixi/core": "5.3.3", + "@pixi/math": "5.3.3", + "@pixi/mesh": "5.3.3", + "@pixi/utils": "5.3.3" + } + }, + "@pixi/mixin-cache-as-bitmap": { + "version": "5.3.3", + "resolved": "https://registry.npm.taobao.org/@pixi/mixin-cache-as-bitmap/download/@pixi/mixin-cache-as-bitmap-5.3.3.tgz", + "integrity": "sha1-ysai7PO3L7rlirNleZg2Ddvac4I=", + "requires": { + "@pixi/core": "5.3.3", + "@pixi/display": "5.3.3", + "@pixi/math": "5.3.3", + "@pixi/settings": "5.3.3", + "@pixi/sprite": "5.3.3", + "@pixi/utils": "5.3.3" + } + }, + "@pixi/mixin-get-child-by-name": { + "version": "5.3.3", + "resolved": "https://registry.npm.taobao.org/@pixi/mixin-get-child-by-name/download/@pixi/mixin-get-child-by-name-5.3.3.tgz", + "integrity": "sha1-go3Jp76uYDZI6+LMtnUXxxN7/xk=", + "requires": { + "@pixi/display": "5.3.3" + } + }, + "@pixi/mixin-get-global-position": { + "version": "5.3.3", + "resolved": "https://registry.npm.taobao.org/@pixi/mixin-get-global-position/download/@pixi/mixin-get-global-position-5.3.3.tgz", + "integrity": "sha1-VwCwN5Tlsh9hwBWu2nM8PLYl/HU=", + "requires": { + "@pixi/display": "5.3.3", + "@pixi/math": "5.3.3" + } + }, + "@pixi/particles": { + "version": "5.3.3", + "resolved": "https://registry.npm.taobao.org/@pixi/particles/download/@pixi/particles-5.3.3.tgz", + "integrity": "sha1-Pp0tMX1s0Ro3NoMN+9TMDDoQgsg=", + "requires": { + "@pixi/constants": "5.3.3", + "@pixi/core": "5.3.3", + "@pixi/display": "5.3.3", + "@pixi/math": "5.3.3", + "@pixi/utils": "5.3.3" + } + }, + "@pixi/polyfill": { + "version": "5.3.3", + "resolved": "https://registry.npm.taobao.org/@pixi/polyfill/download/@pixi/polyfill-5.3.3.tgz", + "integrity": "sha1-TQBQsLt1p7UYQfe/7EwpJDpgW+c=", + "requires": { + "es6-promise-polyfill": "^1.2.0", + "object-assign": "^4.1.1" + } + }, + "@pixi/prepare": { + "version": "5.3.3", + "resolved": "https://registry.npm.taobao.org/@pixi/prepare/download/@pixi/prepare-5.3.3.tgz", + "integrity": "sha1-o0Zuz1JWpcP7m4alVdsXzHLVTIc=", + "requires": { + "@pixi/core": "5.3.3", + "@pixi/display": "5.3.3", + "@pixi/graphics": "5.3.3", + "@pixi/settings": "5.3.3", + "@pixi/text": "5.3.3", + "@pixi/ticker": "5.3.3" + } + }, + "@pixi/runner": { + "version": "5.3.3", + "resolved": "https://registry.npm.taobao.org/@pixi/runner/download/@pixi/runner-5.3.3.tgz", + "integrity": "sha1-efs1sSYg13JMZfSnqlBxkOqCWsA=" + }, + "@pixi/settings": { + "version": "5.3.3", + "resolved": "https://registry.npm.taobao.org/@pixi/settings/download/@pixi/settings-5.3.3.tgz", + "integrity": "sha1-P/X4r8g3bRLHYnvgQ+wxfroTnc0=", + "requires": { + "ismobilejs": "^1.1.0" + } + }, + "@pixi/sprite": { + "version": "5.3.3", + "resolved": "https://registry.npm.taobao.org/@pixi/sprite/download/@pixi/sprite-5.3.3.tgz", + "integrity": "sha1-FoHV/QpyVYG/7jycLEkFN7+NIeo=", + "requires": { + "@pixi/constants": "5.3.3", + "@pixi/core": "5.3.3", + "@pixi/display": "5.3.3", + "@pixi/math": "5.3.3", + "@pixi/settings": "5.3.3", + "@pixi/utils": "5.3.3" + } + }, + "@pixi/sprite-animated": { + "version": "5.3.3", + "resolved": "https://registry.npm.taobao.org/@pixi/sprite-animated/download/@pixi/sprite-animated-5.3.3.tgz", + "integrity": "sha1-8klJrgSu/5/0TiJUS8i38zbVIJ4=", + "requires": { + "@pixi/core": "5.3.3", + "@pixi/sprite": "5.3.3", + "@pixi/ticker": "5.3.3" + } + }, + "@pixi/sprite-tiling": { + "version": "5.3.3", + "resolved": "https://registry.npm.taobao.org/@pixi/sprite-tiling/download/@pixi/sprite-tiling-5.3.3.tgz", + "integrity": "sha1-1zBiVre/bxPBgepKLZWQX1rmm50=", + "requires": { + "@pixi/constants": "5.3.3", + "@pixi/core": "5.3.3", + "@pixi/display": "5.3.3", + "@pixi/math": "5.3.3", + "@pixi/sprite": "5.3.3", + "@pixi/utils": "5.3.3" + } + }, + "@pixi/spritesheet": { + "version": "5.3.3", + "resolved": "https://registry.npm.taobao.org/@pixi/spritesheet/download/@pixi/spritesheet-5.3.3.tgz", + "integrity": "sha1-4wdADQr+Sqbh2NdWpRnjkXBrXzU=", + "requires": { + "@pixi/core": "5.3.3", + "@pixi/loaders": "5.3.3", + "@pixi/math": "5.3.3", + "@pixi/utils": "5.3.3" + } + }, + "@pixi/text": { + "version": "5.3.3", + "resolved": "https://registry.npm.taobao.org/@pixi/text/download/@pixi/text-5.3.3.tgz", + "integrity": "sha1-1vwAxSvAVEUK5D4tXG987c7p7NI=", + "requires": { + "@pixi/core": "5.3.3", + "@pixi/math": "5.3.3", + "@pixi/settings": "5.3.3", + "@pixi/sprite": "5.3.3", + "@pixi/utils": "5.3.3" + } + }, + "@pixi/text-bitmap": { + "version": "5.3.3", + "resolved": "https://registry.npm.taobao.org/@pixi/text-bitmap/download/@pixi/text-bitmap-5.3.3.tgz", + "integrity": "sha1-DWWEc9bgLOWY93nCB8QjM3QeFb0=", + "requires": { + "@pixi/core": "5.3.3", + "@pixi/display": "5.3.3", + "@pixi/loaders": "5.3.3", + "@pixi/math": "5.3.3", + "@pixi/mesh": "5.3.3", + "@pixi/settings": "5.3.3", + "@pixi/text": "5.3.3", + "@pixi/utils": "5.3.3" + } + }, + "@pixi/ticker": { + "version": "5.3.3", + "resolved": "https://registry.npm.taobao.org/@pixi/ticker/download/@pixi/ticker-5.3.3.tgz", + "integrity": "sha1-qHZthBeHn//XUHF13oaYBa7iXrI=", + "requires": { + "@pixi/settings": "5.3.3" + } + }, + "@pixi/utils": { + "version": "5.3.3", + "resolved": "https://registry.npm.taobao.org/@pixi/utils/download/@pixi/utils-5.3.3.tgz", + "integrity": "sha1-UlMh87sA4+AB40ECCj7e6UzA0Ao=", + "requires": { + "@pixi/constants": "5.3.3", + "@pixi/settings": "5.3.3", + "earcut": "^2.1.5", + "eventemitter3": "^3.1.0", + "url": "^0.11.0" + }, + "dependencies": { + "eventemitter3": { + "version": "3.1.2", + "resolved": "https://registry.npm.taobao.org/eventemitter3/download/eventemitter3-3.1.2.tgz?cache=0&sync_timestamp=1598517795415&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Feventemitter3%2Fdownload%2Feventemitter3-3.1.2.tgz", + "integrity": "sha1-LT1I+cNGaY/Og6hdfWZOmFNd9uc=" + } + } + }, + "@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" + } + }, + "bson-objectid": { + "version": "1.3.1", + "resolved": "https://registry.npm.taobao.org/bson-objectid/download/bson-objectid-1.3.1.tgz", + "integrity": "sha1-EeTOTDQZFh/TiBE3gbtiwd+840s=" + }, + "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-promise-polyfill": { + "version": "1.2.0", + "resolved": "https://registry.npm.taobao.org/es6-promise-polyfill/download/es6-promise-polyfill-1.2.0.tgz", + "integrity": "sha1-84kl8jyz4+jObNqP93T867sJDN4=" + }, + "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 + }, + "ismobilejs": { + "version": "1.1.1", + "resolved": "https://registry.npm.taobao.org/ismobilejs/download/ismobilejs-1.1.1.tgz", + "integrity": "sha1-xWygro5Sskyg8iul7zIVot27qg4=" + }, + "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" + } + } + } + }, + "mini-signals": { + "version": "1.2.0", + "resolved": "https://registry.npm.taobao.org/mini-signals/download/mini-signals-1.2.0.tgz", + "integrity": "sha1-RbCAE8X65RokqhqTXNMXye1yHXQ=" + }, + "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 + }, + "ng-zorro-antd": { + "version": "9.3.0", + "resolved": "https://registry.npm.taobao.org/ng-zorro-antd/download/ng-zorro-antd-9.3.0.tgz", + "integrity": "sha1-+A2+JxXleMR1codzRJRC8AmfFSw=", + "requires": { + "@angular/cdk": "^9.0.0", + "@ant-design/icons-angular": "^9.0.0", + "date-fns": "^2.10.0", + "resize-observer-polyfill": "^1.5.1", + "tslib": "^1.10.0" + }, + "dependencies": { + "date-fns": { + "version": "2.16.1", + "resolved": "https://registry.npm.taobao.org/date-fns/download/date-fns-2.16.1.tgz?cache=0&sync_timestamp=1598884189690&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdate-fns%2Fdownload%2Fdate-fns-2.16.1.tgz", + "integrity": "sha1-BXdXksPzMx2oEq8lPhqTWFHTg0s=" + } + } + }, + "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" + } + }, + "parse-uri": { + "version": "1.0.3", + "resolved": "https://registry.npm.taobao.org/parse-uri/download/parse-uri-1.0.3.tgz", + "integrity": "sha1-88JKdJB6TjV8F0HpbKn6rez9bbU=" + }, + "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" + } + }, + "pixi-filters": { + "version": "3.1.1", + "resolved": "https://registry.npm.taobao.org/pixi-filters/download/pixi-filters-3.1.1.tgz", + "integrity": "sha1-mvXDcCjze+MYLnyf65WZYLwBvj8=", + "requires": { + "@pixi/filter-adjustment": "3.1.1", + "@pixi/filter-advanced-bloom": "3.1.1", + "@pixi/filter-ascii": "3.1.1", + "@pixi/filter-bevel": "3.1.1", + "@pixi/filter-bloom": "3.1.1", + "@pixi/filter-bulge-pinch": "3.1.1", + "@pixi/filter-color-map": "3.1.1", + "@pixi/filter-color-overlay": "3.1.1", + "@pixi/filter-color-replace": "3.1.1", + "@pixi/filter-convolution": "3.1.1", + "@pixi/filter-cross-hatch": "3.1.1", + "@pixi/filter-crt": "3.1.1", + "@pixi/filter-dot": "3.1.1", + "@pixi/filter-drop-shadow": "3.1.1", + "@pixi/filter-emboss": "3.1.1", + "@pixi/filter-glitch": "3.1.1", + "@pixi/filter-glow": "3.1.1", + "@pixi/filter-godray": "3.1.1", + "@pixi/filter-kawase-blur": "3.1.1", + "@pixi/filter-motion-blur": "3.1.1", + "@pixi/filter-multi-color-replace": "3.1.1", + "@pixi/filter-old-film": "3.1.1", + "@pixi/filter-outline": "3.1.1", + "@pixi/filter-pixelate": "3.1.1", + "@pixi/filter-radial-blur": "3.1.1", + "@pixi/filter-reflection": "3.1.1", + "@pixi/filter-rgb-split": "3.1.1", + "@pixi/filter-shockwave": "3.1.1", + "@pixi/filter-simple-lightmap": "3.1.1", + "@pixi/filter-tilt-shift": "3.1.1", + "@pixi/filter-twist": "3.1.1", + "@pixi/filter-zoom-blur": "3.1.1" + } + }, + "pixi.js": { + "version": "5.3.3", + "resolved": "https://registry.npm.taobao.org/pixi.js/download/pixi.js-5.3.3.tgz", + "integrity": "sha1-bjJqUlQvSs2X6j+Fk8sK6uUC35o=", + "requires": { + "@pixi/accessibility": "5.3.3", + "@pixi/app": "5.3.3", + "@pixi/constants": "5.3.3", + "@pixi/core": "5.3.3", + "@pixi/display": "5.3.3", + "@pixi/extract": "5.3.3", + "@pixi/filter-alpha": "5.3.3", + "@pixi/filter-blur": "5.3.3", + "@pixi/filter-color-matrix": "5.3.3", + "@pixi/filter-displacement": "5.3.3", + "@pixi/filter-fxaa": "5.3.3", + "@pixi/filter-noise": "5.3.3", + "@pixi/graphics": "5.3.3", + "@pixi/interaction": "5.3.3", + "@pixi/loaders": "5.3.3", + "@pixi/math": "5.3.3", + "@pixi/mesh": "5.3.3", + "@pixi/mesh-extras": "5.3.3", + "@pixi/mixin-cache-as-bitmap": "5.3.3", + "@pixi/mixin-get-child-by-name": "5.3.3", + "@pixi/mixin-get-global-position": "5.3.3", + "@pixi/particles": "5.3.3", + "@pixi/polyfill": "5.3.3", + "@pixi/prepare": "5.3.3", + "@pixi/runner": "5.3.3", + "@pixi/settings": "5.3.3", + "@pixi/sprite": "5.3.3", + "@pixi/sprite-animated": "5.3.3", + "@pixi/sprite-tiling": "5.3.3", + "@pixi/spritesheet": "5.3.3", + "@pixi/text": "5.3.3", + "@pixi/text-bitmap": "5.3.3", + "@pixi/ticker": "5.3.3", + "@pixi/utils": "5.3.3" + } + }, + "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=" + }, + "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 + }, + "resource-loader": { + "version": "3.0.1", + "resolved": "https://registry.npm.taobao.org/resource-loader/download/resource-loader-3.0.1.tgz", + "integrity": "sha1-MzVbtUIeKZT1lFS7x/bb/43wbUc=", + "requires": { + "mini-signals": "^1.2.0", + "parse-uri": "^1.0.0" + } + }, + "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 + }, + "tinycolor2": { + "version": "1.4.1", + "resolved": "https://registry.npm.taobao.org/tinycolor2/download/tinycolor2-1.4.1.tgz", + "integrity": "sha1-9PrTM0R7wLB9TcjpIJ2POaisd+g=" + }, + "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=", + "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=" + } + } + }, + "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" + } + }, + "viewerjs": { + "version": "1.6.2", + "resolved": "https://registry.npm.taobao.org/viewerjs/download/viewerjs-1.6.2.tgz", + "integrity": "sha1-CCbqqbsUOHVpCwUGcSM1ci3L6qM=" + }, + "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..55d3aba --- /dev/null +++ b/package.json @@ -0,0 +1,68 @@ +{ + "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", + "bson-objectid": "^1.3.1", + "cesium": "^1.64.0", + "date-fns": "^2.9.0", + "e-ngx-cesium": "^6.3.2", + "echarts": "^4.6.0", + "firebase": "^7.6.2", + "ng-zorro-antd": "^9.3.0", + "ng2-file-upload": "^1.4.0", + "ngx-countdown": "^9.0.1", + "ngx-echarts": "^4.2.2", + "ngx-perfect-scrollbar": "^8.0.0", + "pixi-filters": "^3.1.1", + "pixi.js": "^5.3.2", + "rxjs": "~6.5.4", + "swiper": "^5.3.7", + "tslib": "^1.10.0", + "viewerjs": "^1.6.2", + "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..b28a11f --- /dev/null +++ b/proxy.config.json @@ -0,0 +1,7 @@ +{ + "/api": { + "target": "http://121.37.20.190: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..36785e4 --- /dev/null +++ b/src/app/app-routing.module.ts @@ -0,0 +1,46 @@ +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/canvas-share-data.service.ts b/src/app/canvas-share-data.service.ts new file mode 100644 index 0000000..6c915cf --- /dev/null +++ b/src/app/canvas-share-data.service.ts @@ -0,0 +1,732 @@ +import { Injectable } from '@angular/core'; +import {ReplaySubject} from 'rxjs'; +import { Observable } from 'rxjs'; +import { GameMode } from './working-area/model/gameMode'; +@Injectable({ + providedIn: 'root' +}) +export class CanvasShareDataService { + constructor() { } + private _sendMessage: ReplaySubject = new ReplaySubject(1); + GameMode: any; + + isChange = false; // 数据 是否改动 + + selectTemplateData: any; // 选择当前 模板数据 + + // 总平面图/建筑 楼层 + selectStorey: any = {area: '', details: ''}; // 选择当前 楼层 数据 + originalcompanyBuildingData: any; // 单位/建筑 数据 + originaleveryStoreyData: any; // 总平面图/楼层/区域 楼层数据 + // 总平面图/建筑 楼层 + + // 处置 节点 + allDisposalNode: any = []; // 所有 处置节点 + allNodeMarkers: any; // 灾情 标签信息 + selectPanelPoint: DisposalNodeData = new DisposalNodeData(); + selectPanelPointBaseData: any = {description: '', notes: '', weather: '', airTemperature: '', windDirection: '', windScale: ''}; // 当前 数据节点 所对应的 天气,详情 数据节点 + // 处置 节点 + /** + * 游戏模式 + */ + gameMode: GameMode = GameMode.BasicInformation; + + facilityAssetsName = new Map([ + [ '消防水池', '消防水池'], + [ '疏散楼梯', '疏散楼梯'], + [ '消防电梯', '消防电梯'], + [ '避难区域', '避难区域'], + [ '安全出口', '安全出口'], + [ '地上消火栓', '室外消火栓' ], + [ '地下消火栓', '室外消火栓' ], + [ '室内消火栓', '室内消火栓' ], + [ '供水管网', '供水管网'], + [ '湿式自动喷淋系统', '湿式自动喷淋系统'], + [ '水幕系统', '水幕系统' ], + [ '消防泵房', '消防泵房'], + [ '水泵接合器(地上)', '水泵接合器'], + [ '水泵接合器(地下)', '水泵接合器'], + [ '水泵接合器(墙壁)', '水泵接合器'], + [ '消防水泵房', '消防水泵房'], + [ '箱式消火栓', '箱式消火栓'], + [ '固定水炮', '消防水炮' ], + [ '消防水罐', '储水罐'], + [ '消防水罐2', '储水罐'], + [ '卧式水罐', '储水罐'], + [ '消防泵', '水泵' ], + [ '泡沫泵', '水泵' ], + [ '泡沫泵房', '泡沫站'], + [ '泡沫栓', '泡沫栓' ], + [ '泡沫枪', '泡沫枪'], + [ '泡沫发生器', '泡沫发生器' ], + [ '消防管网', '消防管网'], + [ 'DCS控制室', 'DCS控制室'] + ]); + + /** * 向其他组件发送信息 * + * @param message 需要发送的信息 * @returns {Observavle} */ + public sendMessage(message: any) { + this._sendMessage.next(message); + } + public getMessage(): Observable { + return this._sendMessage.asObservable(); + } + + // 处置节点 筛选出 匹配数据 匹配不到 return undefined + findDisposalNode(parentId: string= null, name: string= null) { + if (parentId && name) { // 匹配 父id, name + const returnData = this.allDisposalNode.find(item => item.parentId === parentId && item.name === name); + return returnData; + } else { // 匹配 id + const returnData = this.allDisposalNode.find(item => item.id === parentId); + return returnData; + } + } + /** + * 获取单位毗邻信息 + */ + public getCompanyAdjoinInfo(): CompanyAdjoinInfo[] { + const list: CompanyAdjoinInfo[] = []; + Object.keys(this.originalcompanyBuildingData.data).forEach((key) => { + const item = this.originalcompanyBuildingData.data[key]; + if (item.Name === '毗邻') { + const adjoin = new CompanyAdjoinInfo(); + adjoin.AssetId = item.Id; + adjoin.Id = ''; + adjoin.ImageUrls = []; + adjoin.CompanyId = sessionStorage.getItem('companyId'); + item.PropertyInfos.forEach(element => { + if (element.PropertyName === '方向') { + adjoin.Direction = Number(element.PropertyValue); + } else if (element.PropertyName === '名称/编号') { + adjoin.Name = element.PropertyValue; + } else if (element.PropertyType === PropertyType.Image) { + adjoin.ImageUrls.push(element.PropertyValue); + } + }); + list.push(adjoin); + } + }); + return list; + } + /** + * 获取建筑毗邻信息 + */ + public getBuildingAdjoinInfo(): BuildingAdjoinInfo[] { + const list: BuildingAdjoinInfo[] = []; + Object.keys(this.originalcompanyBuildingData.data).forEach((key) => { + const item = this.originalcompanyBuildingData.data[key]; + if (item.Name === '毗邻') { + const adjoin = new BuildingAdjoinInfo(); + adjoin.AssetId = item.Id; + adjoin.Id = ''; + adjoin.BuildingId = this.selectStorey.buildingId; + adjoin.ImageUrls = []; + item.PropertyInfos.forEach(element => { + if (element.PropertyName === '方向') { + adjoin.Direction = Number(element.PropertyValue); + } else if (element.PropertyName === '名称/编号') { + adjoin.Name = element.PropertyValue; + } else if (element.PropertyType === PropertyType.Image) { + adjoin.ImageUrls.push(element.PropertyValue); + } + }); + list.push(adjoin); + } + }); + return list; + } + /** + * 获取单位重点部位 + */ + public getCompanyImportantLocations(): CompanyImportantLocationInfo[] { + const list: CompanyImportantLocationInfo[] = []; + Object.keys(this.originalcompanyBuildingData.data).forEach((key) => { + const item = this.originalcompanyBuildingData.data[key]; + if (item.Name === '重点部位') { + const important = new CompanyImportantLocationInfo(); + important.AssetId = item.Id; + important.Id = ''; + important.ImageUrls = []; + important.CompanyId = sessionStorage.getItem('companyId'); + item.PropertyInfos.forEach(element => { + if (element.PropertyName === '名称/编号') { + important.Name = element.PropertyValue; + } else if (element.PropertyType === PropertyType.Image) { + important.ImageUrls.push(element.PropertyValue); + } else if (element.PropertyName === '主要危险性') { + important.Hazards = element.PropertyValue; + } else if (element.PropertyName === '使用性质') { + important.Nature = element.PropertyValue; + } else if (element.PropertyName === '所在位置') { + important.Position = element.PropertyValue; + } else if (element.PropertyName === '建筑结构') { + important.Structure = element.PropertyValue; + } + }); + list.push(important); + } + }); + return list; + } + /** + * 获取建筑重点部位 + */ + public getBuildingImportantLocations(): BuildingImportantLocationInfo[] { + const list: BuildingImportantLocationInfo[] = []; + Object.keys(this.originalcompanyBuildingData.data).forEach((key) => { + const item = this.originalcompanyBuildingData.data[key]; + if (item.Name === '重点部位') { + const important = new BuildingImportantLocationInfo(); + important.AssetId = item.Id; + important.Id = ''; + important.ImageUrls = []; + important.BuildingId = this.selectStorey.buildingId; + item.PropertyInfos.forEach(element => { + if (element.PropertyName === '名称/编号') { + important.Name = element.PropertyValue; + } else if (element.PropertyType === PropertyType.Image) { + important.ImageUrls.push(element.PropertyValue); + } else if (element.PropertyName === '主要危险性') { + important.Hazards = element.PropertyValue; + } else if (element.PropertyName === '使用性质') { + important.Nature = element.PropertyValue; + } else if (element.PropertyName === '所在位置') { + important.Position = element.PropertyValue; + } else if (element.PropertyName === '建筑结构') { + important.Structure = element.PropertyValue; + } + }); + list.push(important); + } + }); + return list; + } + /** + * 获取单位消防设施 + */ + public getAllCompanyFacilityAssetInfo(): CompanyFacilityAssetInfo[] { + const list: CompanyFacilityAssetInfo[] = []; + Object.keys(this.originalcompanyBuildingData.data).forEach((key) => { + const item = this.originalcompanyBuildingData.data[key]; + if (this.facilityAssetsName.has(item.Name)) { + const facility = new CompanyFacilityAssetInfo(); + facility.CompanyId = sessionStorage.getItem('companyId'); + facility.AssetId = item.Id; + facility.Id = ''; + facility.Name = this.facilityAssetsName.get(item.Name); + facility.AssetName = item.Name; + facility.PropertyInfos = item.PropertyInfos; + facility.SitePlanId = item.FloorId; + list.push(facility); + } + }); + return list; + } + /** + * 获取建筑消防设施 + */ + public getAllBuildingFacilityAssetInfo(): BuildingFacilityAssetInfo[] { + const list: BuildingFacilityAssetInfo[] = []; + Object.keys(this.originalcompanyBuildingData.data).forEach((key) => { + const item = this.originalcompanyBuildingData.data[key]; + if (this.facilityAssetsName.has(item.Name)) { + const facility = new BuildingFacilityAssetInfo(); + facility.BuildingId = this.selectStorey.buildingId; + facility.AssetId = item.Id; + facility.Id = ''; + facility.Name = this.facilityAssetsName.get(item.Name); + facility.AssetName = item.Name; + facility.PropertyInfos = item.PropertyInfos; + facility.BuildingAreaId = item.FloorId; + list.push(facility); + } + }); + return list; + } + /** + * 反序列化对象 + * @param json 字符串 + */ + public deserialize(json: any): T { + const obj: T = JSON.parse( + json, + (_, val) => { + if (val === null) { return null; } + if (Array.isArray(val) || typeof val !== 'object') { + return val; + } + return Object.entries(val).reduce((a, [key, val]) => { + const count = key.length; + if (count > 1) { + a[key[0].toUpperCase() + key.substring(1, count)] = val; + } else { + a[key] = val; + } + return a; + }, {}); + } + ); + return obj; + } +} + +/** + * 单位毗邻 + */ +export class CompanyAdjoinInfo { + public CompanyId: string; + public Id: string; + public Name: string; + public Direction: number; + public ImageUrls: string[] = []; + public AssetId: string; +} +/** + * 建筑毗邻 + */ +export class BuildingAdjoinInfo { + public BuildingId: string; + public Id: string; + public Name: string; + public Direction: number; + public ImageUrls: string[]; + public AssetId: string; +} +/** + * 建筑重点部位 + */ +export class BuildingImportantLocationInfo { + public BuildingId: string; + public Id: string; + public Name: string; + public Position: string; + public Structure: string; + public Nature: string; + public Hazards: string; + public ImageUrls: string[]; + public AssetId: string; +} +/** + * 单位重点部位 + */ +export class CompanyImportantLocationInfo { + public CompanyId: string; + public Id: string; + public Name: string; + public Position: string; + public Structure: string; + public Nature: string; + public Hazards: string; + public ImageUrls: string[]; + public AssetId: string; +} +/** + * 单位消防素材信息 + */ +export class CompanyFacilityAssetInfo { + public Id: string; + public Name: string; + public AssetName: string; + public PropertyInfos: string; + public AssetId: string; + public CompanyId: string; + public SitePlanId: string; +} +/** + * 建筑消防素材信息 + */ +export class BuildingFacilityAssetInfo { + public Id: string; + public Name: string; + public AssetName: string; + public PropertyInfos: string; + public AssetId: string; + public BuildingId: string; + public BuildingAreaId: string; +} +/** + * 属性 + */ +export class PropertyInfo { + // 标记位 + public Tag: string; + // 属性书序 + public Order: number; + // 是否启用 + public Enabled: boolean; + // 是否可见 + public Visible: boolean; + // 必填 + public Required: boolean; + // 验证规则名称 + public RuleName: string; + // 验证规则值 + public RuleValue: string; + // 物理单位 + public PhysicalUnit: string; + // 属性名称 + public PropertyName: string; + // 属性类型 + public PropertyType: PropertyType; + // 属性值 + public PropertyValue: string; +} +/** + * 属性类型。 + */ +export enum PropertyType { + // 单行文本。 + SingleText, + // 多行文本。 + MultipleText, + // 数值。 + Numeric, + // 图片。 + Image, + // 图片数值,专用于描述图片数量。 + ImageNumeric, + // 方向 + Direction, + // 布尔类型。 + Boolean, + // 供给区域 + SupplyArea, + // 供给类型 + SupplyType +} +/** + * 处置节点 + */ +export class DisposalNode { + /** + * 编号 + */ + public Id: string; + /** + * 名称 + */ + public Name: string; + /** + * 等级 + */ + public Level: number; + /** + * 排序 + */ + public Order: number; + /** + * 详情 + */ + public Description: string; + /** + * 注意事项 + */ + public Notes: string; + /** + * 天气 + */ + public Weather: string; + /** + * 气温 + */ + public AirTemperature?: number; + /** + * 风向 + */ + public WindDirection: Direction; + /** + * 风力等级 + */ + public WindScale: WindScale; + /** + * 图片名称 + */ + public ImageNames: string[]; + /** + * 图片地址 + */ + public ImageUrls: string[]; + /** + * 父节点编号 + */ + public ParentId: string; + /** + * 灾情编号 + */ + public DisasterId: string; + /** + * 预案组件编号 + */ + public PlanComponentId: string; + /** + * 单位编号 + */ + public CompanyId: string; + /** + * 总平面图编号 + */ + public SitePlanId: string; + /** + * 建筑编号 + */ + public BuildingId: string; + /** + * 建筑区域编号 + */ + public BuildingAreaId: string; +} +/** + * 方向。 + */ +export enum Direction { + /** + * 东 + */ + East, + /** + * 西 + */ + West, + /** + * 南 + */ + South, + /** + * 北 + */ + North, + /** + * 东南 + */ + Southeast, + /** + * 西南 + */ + Southwest, + /** + * 东北 + */ + Northeast, + /** + * 西北 + */ + Northwest +} +/** + * 风力等级 + */ +export enum WindScale { + WS0, + WS1, + WS2, + WS3, + WS4, + WS5, + WS6, + WS7, + WS8, + WS9, + WS10, + WS11, + WS12, + WS13, + WS14, + WS15, + WS16, + WS17, + WS18 +} +/** + * 处置节点数据 + */ +export class DisposalNodeData { + /** + * 编号 + */ + public Id: string; + /** + * 数据 + */ + public Data: any; + /** + * 版本号 + */ + public Version: string; + /** + * 处置节点编号 + */ + public DisposalNodeId: string; + /** + * 预案组件编号 + */ + public PlanComponentId: string; +} +/** + * 楼层节点数据 + */ +export class FloorNodeData { + /** + * 存量 + */ + public Stock: Map = new Map(); + /** + * 增量 + */ + public Increment: Map = new Map(); + /** + * 用户定义的增量。 + */ + public DefinedIncrement: Map = new Map(); +} +/** + * 素材数据 + */ +export class AssetData { + /// + /// 模板编号 + /// + public TemplateId: string; + /// + /// 编号 + /// + public Id: string; + /// + /// 名称 + /// + public Name: string; + /// + /// 角度 + /// + public Angle: number; + /// + /// 颜色 + /// + public Color: string; + /// + /// 坐标 + /// + public Point: PIXI.Point; + /// + /// 宽度 + /// + public Width: number; + /// + /// 高度 + /// + public Height: number; + /// + /// 是否启用 + /// + public Enabled: boolean; + /// + /// 填充方式 + /// + public FillMode: FillMode; + /// + /// 图片地址 + /// + public ImageUrl: string; + /// + /// 是否固定大小 + /// + public FixedSize: boolean; + /// + /// 点路径 + /// + public MultiPoint: PIXI.Point[]; + /// + /// 建筑ID + /// + public BuildingId: string; + /// + /// 单位ID + /// + public CompanyId: string; + /// + /// 楼层编号 + /// + public FloorId: string; + /// + /// 楼层名称 + /// + public FloorName: string; + /// + /// 消防要素编号 + /// + public FireElementId: string; + /// + /// 属性列表 + /// + public PropertyInfos: PropertyInfo[]; + /// + /// 交互方式 + /// + public InteractiveMode: InteractiveMode; + /// + /// 是否来自建筑 + /// + public IsFromBuilding: boolean; + /// + /// 渲染方式。 + /// + public DrawMode: ImageType; + /// + /// 9宫格边框数值。 + /// + public Border: Border; + /// + /// 厚度。 + /// + public Thickness: number; + /// + /// 素材类型 + /// + public GameMode: GameMode; +} +/** + * 填充模式 + */ +export enum FillMode { + Color, + Image +} +/** + * 交互方式 + */ +export enum InteractiveMode { + /** + * 单点。 + */ + Single, + /** + * 多点不闭合。 + */ + Multiple, + /** + * 多点闭合。 + */ + MultipleClosed +} +/** + * 图片显示类型 + */ +export enum ImageType { + Simple = 0, + Sliced = 1, + Tiled = 2, + Filled = 3 +} +/** + * 边框 + */ +export class Border { + + public x: number; + + public y: number; + + public z: number; + + public w: number; +} 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..203c4f3 --- /dev/null +++ b/src/app/home/home.component.html @@ -0,0 +1,114 @@ +
+
+ +
+
+
+ +
+
+
+
+
+
+
+
计划完成情况
+
+
+
+
+
本年时间进度
+
+
47%
+
+
+
+
+
+
+
年计划完成率
+
+
17%
+
+
+
+
+
+
+
日历进度差
+
+
63%
+
+
+
+
+
+
+
+
+
+ +
+ +
+
+
预案编制总量
+
    +
  • {{item}}
  • +
+
+
+
采集单位总量
+
{{keyUnitQuantity}}
+
+
+
重点关注单位总量
+
{{dataQuantity}}
+
+
+ +
+
+
+
+
+
+ +
+
+
+
+
+
三维预案总数
+
{{threeDimensional}}
+
+
+
二维预案总数
+
{{twoDimensional}}
+
+
+
卡片预案总数
+
{{cardDimensional}}
+
+
+
其他预案总数
+
{{otherDimensional}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ 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..d94f6df --- /dev/null +++ b/src/app/home/home.component.ts @@ -0,0 +1,483 @@ +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) { } + + visualizationData:any; //统计分析数据 + + planQuantity:any = ['0','0']; //预案编制总量 + keyUnitQuantity:any; //单位总量 + dataQuantity:any; //重点关注单位预案数量 + + threeDimensional:any; //三维预案总量 + twoDimensional:any; //三维预案总量 + cardDimensional:any; //卡片预案总量 + otherDimensional:any; //其他预案总量 + + ngOnInit() { + this.getVisualizationData() + } + + ngAfterViewInit(): void { + + } + + //获取统计分析数据 + getVisualizationData () { + this.http.get('/api/StatisticsAnalysis').subscribe((data:any)=>{ + this.visualizationData = data + + let numbers = (data.planStatistics.totalCount).toString(); + for (var i = 0; i < numbers.length; i++) { + this.planQuantity.push(numbers[i]); + } + this.keyUnitQuantity = data.companyStatistics.totalCount + this.dataQuantity = data.planStatistics.followedCount + + this.threeDimensional = data.planStatistics.planTypeStatistics.plan3DCount + this.twoDimensional = data.planStatistics.planTypeStatistics.plan2DCount + this.cardDimensional = data.planStatistics.planTypeStatistics.planCardCount + this.otherDimensional = data.planStatistics.planTypeStatistics.planOtherCount + + this.unitType() + this.unitData() + this.teamData() + this.keyUnit() + + }) + } + + //单位类型统计 + unitType () { + let data = [] + let color = ['#BE1B94', '#E29217', '#2AFF71', '#BE1B4D', '#D1E217', '#65F5F3','#BE1B94', '#E29217', '#2AFF71', '#BE1B4D', '#D1E217', '#65F5F3']; + //处理数据 + this.visualizationData.companyStatistics.buildingTypeStatistics.buildingTypes.forEach((element,index) => { + let msg = { + name: element.buildingTypeName, + value: element.count, + itemStyle: { + color: color[index], + } + } + data.push(msg) + }); + //处理数据 + var chartHynyxf = echarts.init(document.getElementById('chartHynyxf'), 'skinUpp'); + + var categoryData = []; + for (var i = 0; i < data.length; i++) { + categoryData.push(data[i].name); + } + var option = { + // 标题 + title: { + text: '采集单位类型统计', + top: 0 + }, + //图例 + legend: { + data: ['单位类型统计'], + show: false + }, + grid: { + left: 90, + top:40, + // right:8, + width: '70%' , + height: '70%' , + }, + //提示框 + tooltip: { + trigger: 'item', + }, + // x轴 + xAxis: { + type: 'value' + }, + // y轴 + yAxis: { + type: 'category', + data: categoryData, + axisLabel: { margin: 3,fontSize:11}, + }, + // 数据 + series: [ + { + name: '单位类型统计', + type: 'bar', + label: { + show: true, + position: 'right', + color:'#fff' + }, + data: data, + }, + ], + }; + chartHynyxf.setOption(option); + } + + //单位数据统计 + unitData () { + let data = [] + let unitData = [] + let planData = [] + //处理数据 + this.visualizationData.companyStatistics.organizationStatistics.organizations.forEach(element => { + data.push(element.organizationName) + unitData.push(element.count) + }); + this.visualizationData.planStatistics.organizationStatistics.organizations.forEach(element => { + planData.push(element.count) + }); + //处理数据 + 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: 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) { //如果类目项的文字大于1, + 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: unitData, + label: { + show: true, + 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: planData, + label: { + show: true, + 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 + }, + } + } + ], + }; + chartDwsjcj.setOption(option); + } + + //全队数据采集和预案编制数量统计 + teamData () { + let unitData = [] + let planData = [] + //处理数据 + this.visualizationData.companyStatistics.trendStatistics.added.forEach(element => { + unitData.push(element.count) + }); + this.visualizationData.planStatistics.trendStatistics.added.forEach(element => { + planData.push(element.count) + }); + //处理数据 + var chartQusj = echarts.init(document.getElementById('chartQusj'), 'skinUpp'); + var option = { + grid: { + top: 50, + left: 30, + 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: planData, + // 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: unitData, + }, + ], + }; + chartQusj.setOption(option); + } + + //重点关注企业预案完成情况 + keyUnit () { + let data = [] + var realEnd = []; + var shouldEnd = [500,300,300,300,300,300,300,150]; + //处理数据 + this.visualizationData.planStatistics.buildingTypeStatistics.buildingTypes.forEach(element => { + data.push(element.buildingTypeName) + realEnd.push(element.count) + }); + //处理数据 + var chartZdgzqy = echarts.init(document.getElementById('chartZdgzqy'), 'skinUpp'); + 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: data, + axisLabel: { + interval: 0, + + formatter:function(value){ + var ret = "";//拼接加\n返回的类目项 + var maxLength = 3;//每项显示文字个数 + var valLength = value.length;//X轴类目项的文字个数 + var rowN = Math.ceil(valLength / maxLength); //类目项需要换行的行数 + if (rowN > 1) { //如果类目项的文字大于1, + 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', + 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: shouldEnd, + }, + { + name: '完成预案数量', + type: 'bar', + barWidth: '16px', + yAxisIndex: 1, + itemStyle: { + color: '#79CBE8' + }, + label: { + show: false, + position: "insideTop", + formatter: '{c}', + color: "#fff", + }, + data: realEnd, + } + ], + }; + 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..e0d9853 --- /dev/null +++ b/src/app/key-unit/edit-unit-info/edit-unit-info.component.html @@ -0,0 +1,60 @@ + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 功能开发中~~ + + + + + 功能开发中~~ + + + + + + + + + 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..4a31d46 --- /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' //引入服务 +import { CollectionToolsComponent } from '../../../app/ui/collection-tools/collection-tools.component' + + +@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..63d7e88 --- /dev/null +++ b/src/app/key-unit/key-unit-management/key-unit-management.component.html @@ -0,0 +1,180 @@ + +
    + + +
    +
    + + + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + star + + 单位名称{{element.name}}信息完整度得分 +
    + + {{element.integrity.zong}}分 + +
    +
    +
    +
    + 分类名称 + 已得分 + 总分 +
    +
    +
      +
    • +
      {{item.name}}
      +
      +
      +
      +
      + {{item.score}}分 +
      +
      {{item.totalpoints}}分
      +
    • +
    +
    +
    + 仅供参考 +
    +
    +
    +
    辖区中队{{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..609991d --- /dev/null +++ b/src/app/key-unit/key-unit-management/key-unit-management.component.scss @@ -0,0 +1,257 @@ + + + +.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; + } +} + +//完整度 +.integrityDiv{ + width: 180px; + height: 30px; + background-color: #e2e7ee; + // background-image: linear-gradient(to right, #e2e7ee ,#FF4500, #FF8C00,#32cd32); + margin: 0 auto; + position: relative; + .integrityNum{ + position: absolute; + left: 50%; + top: 50%; + transform: translate(-50%, -50%); + color: black; + font-weight: 800; + font-size: 15px; + cursor: default; + } + .integrityColorDiv{ + height: 100%; + // background-color: #32cd32; + } + .integrityDetails{ + position: absolute; + display: none; + width: 350px; + height:280px; + border: 1px solid rgba(0, 0, 0, 0.22); + background-color: white; + .integrityDetailsTop{ + width: 100%; + height: 23px; + line-height:23px; + border-bottom: 1px solid rgba(0, 0, 0, 0.22); + margin-bottom: 1px; + font-size: 14px; + span{ + display: inline-block; + text-align: center; + font-weight: 800; + } + .span1{ + width: 25%; + } + .span2{ + width: 60%; + } + .span3{ + width: 15%; + } + } + .integrityDetailsBody{ + ul{ + li{ + width: 100%; + height: 23px; + line-height: 23px; + margin: 3px 0; + div{ + float: left; + font-size: 13px; + } + .name{ + width: 25%; + height: 100%; + } + .colorDiv{ + width: 60%; + height: 100%; + position: relative; + .colorDivBac{ + width: 90%; + height: 100%; + position: absolute; + left: 50%; + top: 50%; + transform: translate(-50%,-50%); + background-color: #dfe5ec; + border-radius: 5px; + .colorDivCon{ + border-radius: 5px; + height: 100%; + background-color: #2398f1; + } + } + span{ + position: absolute; + left: 50%; + top: 50%; + transform: translate(-50%,-50%); + // color: white; + font-weight: 600; + } + } + .number{ + width: 15%; + height: 100%; + } + } + } + + } + } + .bottomposition{ + top: 2px; + left: 188px; + } + .topposition{ + top: -252px; + left: 188px; + } +} +.integrityDiv:hover{ + .integrityDetails{ + display: block; + } +} +.fail{ + // background : #FF4500; + // background-image: linear-gradient(to right, #e2e7ee , #FF4500); +} +.pass{ + // background : #FF8C00; + // background-image: linear-gradient(to right, #e2e7ee , #FF8C00); +} +.excellent{ + // background : #32cd32; + // background-image: linear-gradient(to right, #e2e7ee ,#FF4500, #FF8C00,#32cd32); +} \ 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..5607526 --- /dev/null +++ b/src/app/key-unit/key-unit-management/key-unit-management.component.ts @@ -0,0 +1,688 @@ +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 { MatSort } from '@angular/material/sort'; +import { MatTableDataSource } from '@angular/material/table'; + +@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; + + @ViewChild(MatSort) sort: MatSort; + + allunittype:any //获取所有的单位类型 + + //分页 + @ViewChild(MatPaginator, {static: true}) + pageEvent: PageEvent; + paginator: MatPaginator; + length:any; //共多少条数据 + pageSize:any; //每页条数 + pageSizeOptions: number[] = [10] //设置每页条数 + PageNumber:any //第几页 + + displayedColumns: string[] = ['checked','Follow','unitname','integrity','jurisdictionsquadron', 'unittype','scc', 'time','operation']; + tabledataSource:any + allorganizations:any + oldDataSource:any; //原始表格数据 + //表头排序 + sortData (e) { + let data = this.tabledataSource.filteredData; + console.log(data.filteredData) + // data.filteredData.forEach(element => { + // if(element.key.indexOf(".") != -1){ + // let typeArr = element.key.split('.') + // element.type = typeArr[typeArr.length - 1] + // element.newTime = new Date(element.lastModified).getTime() + // } + + // }); + + if( e.direction=='asc' ) { //从小到大排序 + data.sort( function(a,b) { + return a.newTime - b.newTime + } ) + this.tabledataSource = new MatTableDataSource(data); + } else if ( e.direction=='desc' ) {//从大到小排序 + data.sort( function(a,b) { + return b.newTime - a.newTime + } ) + this.tabledataSource = new MatTableDataSource(data); + } else { //原始数据 + this.tabledataSource = new MatTableDataSource(this.oldDataSource); + } + } + + colorRgb(sColor){ + var reg = /^#([0-9a-fA-f]{3}|[0-9a-fA-f]{6})$/; + var sColor = sColor.toLowerCase(); + if (sColor && reg.test(sColor)) { + if (sColor.length === 4) { + var sColorNew = "#"; + for (var i = 1; i < 4; i += 1) { + sColorNew += sColor.slice(i, i + 1).concat(sColor.slice(i, i + 1)); + } + sColor = sColorNew; + } + //处理六位的颜色值 + var sColorChange = []; + for (var i = 1; i < 7; i += 2) { + sColorChange.push(parseInt("0x" + sColor.slice(i, i + 2))); + } + return sColorChange; + } else { + return sColor; + } + } + colorHex(rgb){ + var _this = rgb; + var reg = /^#([0-9a-fA-f]{3}|[0-9a-fA-f]{6})$/; + if (/^(rgb|RGB)/.test(_this)) { + var aColor = _this.replace(/(?:(|)|rgb|RGB)*/g, "").split(","); + var strHex = "#"; + for (var i = 0; i < aColor.length; i++) { + var hex:any = Number(aColor[i]).toString(16); + hex = hex < 10 ? 0 + '' + hex : hex;// 保证每个rgb的值为2位 + if (hex === "0") { + hex += hex; + } + strHex += hex; + } + if (strHex.length !== 7) { + strHex = _this; + } + return strHex; + } else if (reg.test(_this)) { + var aNum = _this.replace(/#/, "").split(""); + if (aNum.length === 6) { + return _this; + } else if (aNum.length === 3) { + var numHex = "#"; + for (var i = 0; i < aNum.length; i += 1) { + numHex += (aNum[i] + aNum[i]); + } + return numHex; + } + } else { + return _this; + } + } + gradientColor(startColor, endColor, step) { + let _this = this + let startRGB = _this.colorRgb(startColor);//转换为rgb数组模式 + let startR = startRGB[0]; + let startG = startRGB[1]; + let startB = startRGB[2]; + + let endRGB = _this.colorRgb(endColor); + let endR = endRGB[0]; + let endG = endRGB[1]; + let endB = endRGB[2]; + + let sR = (endR - startR) / step;//总差值 + let sG = (endG - startG) / step; + let sB = (endB - startB) / step; + + var colorArr = []; + for (var i = 0; i < step; i++) { + //计算每一步的hex值 + var hex = _this.colorHex('rgb('+ parseInt((sR * i + startR))+ ',' + parseInt((sG * i + startG))+ ',' + parseInt((sB * i + startB)) + ')'); + colorArr.push(hex); + } + return colorArr; +} + integrity(width){ + let _this = this + + let style:any = {} + style.width = width +'%'; + if(width < 30){ + let colorArr = this.gradientColor('#D50000', '#E53935', 30); + for(let i = 0; i < 30; i++){ + if( i == width){ + style.background = colorArr[i] + } + } + } + if(width >= 30 && width < 60){ + let colorArr = this.gradientColor('#FF9800', '#E65100', 30); + for(let i = 30; i < 60; i++){ + if( i == width){ + style.background = colorArr[i-30] + } + } + } + if(width >= 60){ + let colorArr = this.gradientColor('#81C784', '#2E7D32', 41); + for(let i = 60; i <= 100; i++){ + if( i == width){ + style.background = colorArr[i-60] + } + } + } + return style + } + integrityDetails(width,zong){ + let style:any = {} + style.width = (width/zong)*100 +'%'; + return style + } + //分页事件 + chagePage(e){ + this.PageNumber = e.pageIndex+1 + this.getAllKeyUnit(); + } + ngOnInit(): void { + this.getunitdata(); + this.getOrganizations(); + this.getUnittype(); + this.getAllKeyUnit(); + } + //获得所有重点单位 + + wanzhengduArr = [ + {id:0,zong:94,details:[ + {name:'单位信息',score:5,totalpoints:5}, + {name:'建筑信息',score:8,totalpoints:10}, + {name:'平面图',score:8,totalpoints:10}, + {name:'四周毗邻',score:25,totalpoints:25}, + {name:'消防设施',score:10,totalpoints:10}, + {name:'重点部位',score:10,totalpoints:10}, + {name:'功能分区',score:8,totalpoints:10}, + {name:'实景图',score:10,totalpoints:10}, + {name:'CAD上传',score:10,totalpoints:10}, + ]}, + {id:1,zong:82,details:[ + {name:'单位信息',score:5,totalpoints:5}, + {name:'建筑信息',score:8,totalpoints:10}, + {name:'平面图',score:8,totalpoints:10}, + {name:'四周毗邻',score:25,totalpoints:25}, + {name:'消防设施',score:8,totalpoints:10}, + {name:'重点部位',score:8,totalpoints:10}, + {name:'功能分区',score:6,totalpoints:10}, + {name:'实景图',score:8,totalpoints:10}, + {name:'CAD上传',score:6,totalpoints:10}, + ]}, + {id:2,zong:72,details:[ + {name:'单位信息',score:3,totalpoints:5}, + {name:'建筑信息',score:5,totalpoints:10}, + {name:'平面图',score:8,totalpoints:10}, + {name:'四周毗邻',score:22,totalpoints:25}, + {name:'消防设施',score:7,totalpoints:10}, + {name:'重点部位',score:7,totalpoints:10}, + {name:'功能分区',score:6,totalpoints:10}, + {name:'实景图',score:8,totalpoints:10}, + {name:'CAD上传',score:6,totalpoints:10}, + ]}, + {id:3,zong:61,details:[ + {name:'单位信息',score:3,totalpoints:5}, + {name:'建筑信息',score:5,totalpoints:10}, + {name:'平面图',score:7,totalpoints:10}, + {name:'四周毗邻',score:18,totalpoints:25}, + {name:'消防设施',score:5,totalpoints:10}, + {name:'重点部位',score:3,totalpoints:10}, + {name:'功能分区',score:5,totalpoints:10}, + {name:'实景图',score:8,totalpoints:10}, + {name:'CAD上传',score:6,totalpoints:10}, + ]}, + {id:4,zong:60,details:[ + {name:'单位信息',score:3,totalpoints:5}, + {name:'建筑信息',score:5,totalpoints:10}, + {name:'平面图',score:6,totalpoints:10}, + {name:'四周毗邻',score:18,totalpoints:25}, + {name:'消防设施',score:5,totalpoints:10}, + {name:'重点部位',score:3,totalpoints:10}, + {name:'功能分区',score:5,totalpoints:10}, + {name:'实景图',score:8,totalpoints:10}, + {name:'CAD上传',score:6,totalpoints:10}, + ]}, + {id:5,zong:53,details:[ + {name:'单位信息',score:5,totalpoints:5}, + {name:'建筑信息',score:5,totalpoints:10}, + {name:'平面图',score:5,totalpoints:10}, + {name:'四周毗邻',score:10,totalpoints:25}, + {name:'消防设施',score:5,totalpoints:10}, + {name:'重点部位',score:5,totalpoints:10}, + {name:'功能分区',score:5,totalpoints:10}, + {name:'实景图',score:7,totalpoints:10}, + {name:'CAD上传',score:6,totalpoints:10}, + ]}, + {id:6,zong:45,details:[ + {name:'单位信息',score:3,totalpoints:5}, + {name:'建筑信息',score:5,totalpoints:10}, + {name:'平面图',score:5,totalpoints:10}, + {name:'四周毗邻',score:15,totalpoints:25}, + {name:'消防设施',score:5,totalpoints:10}, + {name:'重点部位',score:5,totalpoints:10}, + {name:'功能分区',score:3,totalpoints:10}, + {name:'实景图',score:5,totalpoints:10}, + {name:'CAD上传',score:4,totalpoints:10}, + ]}, + {id:7,zong:30,details:[ + {name:'单位信息',score:3,totalpoints:5}, + {name:'建筑信息',score:0,totalpoints:10}, + {name:'平面图',score:4,totalpoints:10}, + {name:'四周毗邻',score:2,totalpoints:25}, + {name:'消防设施',score:5,totalpoints:10}, + {name:'重点部位',score:5,totalpoints:10}, + {name:'功能分区',score:2,totalpoints:10}, + {name:'实景图',score:6,totalpoints:10}, + {name:'CAD上传',score:3,totalpoints:10}, + ]}, + {id:8,zong:20,details:[ + {name:'单位信息',score:3,totalpoints:5}, + {name:'建筑信息',score:2,totalpoints:10}, + {name:'平面图',score:0,totalpoints:10}, + {name:'四周毗邻',score:3,totalpoints:25}, + {name:'消防设施',score:3,totalpoints:10}, + {name:'重点部位',score:3,totalpoints:10}, + {name:'功能分区',score:3,totalpoints:10}, + {name:'实景图',score:2,totalpoints:10}, + {name:'CAD上传',score:1,totalpoints:10}, + ]}, + {id:9,zong:13,details:[ + {name:'单位信息',score:5,totalpoints:5}, + {name:'建筑信息',score:3,totalpoints:10}, + {name:'平面图',score:0,totalpoints:10}, + {name:'四周毗邻',score:2,totalpoints:25}, + {name:'消防设施',score:0,totalpoints:10}, + {name:'重点部位',score:3,totalpoints:10}, + {name:'功能分区',score:0,totalpoints:10}, + {name:'实景图',score:0,totalpoints:10}, + {name:'CAD上传',score:0,totalpoints:10}, + ]} + ] + + 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 + } + + 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 + // data.items.sort( (a,b) => { + // return a.usci - b.usci + // }) + data.items.forEach( (item,index) => { + item.integrity = this.wanzhengduArr[index] + }) + console.log(789,data.items) + this.tabledataSource = new MatTableDataSource(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) + sessionStorage.setItem("editable","0") + sessionStorage.setItem("companyName",element.name) + sessionStorage.setItem("companyId",element.id) + sessionStorage.setItem(element.id,JSON.stringify(element.integrity)) + window.open(`/keyUnit/viewunitinfo?id=${element.id}`,'_blank'); + } + //提交查询表单 + 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..13c149e --- /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..6bc8ca4 --- /dev/null +++ b/src/app/key-unit/key-unit.module.ts @@ -0,0 +1,134 @@ +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'; +import { UiModule } from '../../app/ui/ui.module' + +@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, + UiModule + ] +}) +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/ngZorroTree.css b/src/app/ngZorroTree.css new file mode 100644 index 0000000..6bf52e5 --- /dev/null +++ b/src/app/ngZorroTree.css @@ -0,0 +1,477 @@ +.ant-tree-checkbox, +.ant-tree-checkbox-wrapper { + margin: 0; + padding: 0; + list-style: none; + font-feature-settings: 'tnum'; + font-size: 14px +} + +@keyframes antCheckboxEffect { + 0% { + transform: scale(1); + opacity: .5 + } + + 100% { + transform: scale(1.6); + opacity: 0 + } +} + +.ant-tree.ant-tree-directory .ant-tree-treenode { + position: relative +} + +.ant-tree.ant-tree-directory .ant-tree-treenode::before { + position: absolute; + top: 0; + right: 0; + bottom: 4px; + left: 0; + transition: background-color .3s; + content: ''; + pointer-events: none +} + +.ant-tree.ant-tree-directory .ant-tree-treenode:hover::before { + background: #f5f5f5 +} + +.ant-tree.ant-tree-directory .ant-tree-treenode>* { + z-index: 1 +} + +.ant-tree.ant-tree-directory .ant-tree-treenode .ant-tree-switcher { + transition: color .3s +} + +.ant-tree.ant-tree-directory .ant-tree-treenode .ant-tree-node-content-wrapper { + border-radius: 0; + user-select: none +} + +.ant-tree.ant-tree-directory .ant-tree-treenode .ant-tree-node-content-wrapper:hover { + background: 0 0 +} + +.ant-tree.ant-tree-directory .ant-tree-treenode .ant-tree-node-content-wrapper.ant-tree-node-selected { + color: #fff; + background: 0 0 +} + +.ant-tree.ant-tree-directory .ant-tree-treenode-selected::before, +.ant-tree.ant-tree-directory .ant-tree-treenode-selected:hover::before { + background: #1890ff +} + +.ant-tree.ant-tree-directory .ant-tree-treenode-selected .ant-tree-switcher { + color: #fff +} + +.ant-tree.ant-tree-directory .ant-tree-treenode-selected .ant-tree-node-content-wrapper { + color: #fff; + background: 0 0 +} + +.ant-tree-checkbox { + box-sizing: border-box; + color: rgba(0, 0, 0, .65); + font-variant: tabular-nums; + position: relative; + top: -.09em; + display: inline-block; + line-height: 1; + white-space: nowrap; + vertical-align: middle; + outline: 0; + cursor: pointer +} + +.ant-tree-checkbox-input:focus+.ant-tree-checkbox-inner, +.ant-tree-checkbox-wrapper:hover .ant-tree-checkbox-inner, +.ant-tree-checkbox:hover .ant-tree-checkbox-inner { + border-color: #1890ff +} + +.ant-tree-checkbox-checked::after { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + border: 1px solid #1890ff; + border-radius: 2px; + visibility: hidden; + animation: antCheckboxEffect .36s ease-in-out; + animation-fill-mode: backwards; + content: '' +} + +.ant-tree-checkbox-wrapper:hover .ant-tree-checkbox::after, +.ant-tree-checkbox:hover::after { + visibility: visible +} + +.ant-tree-checkbox-inner { + position: relative; + top: 0; + left: 0; + display: block; + width: 16px; + height: 16px; + direction: ltr; + background-color: #fff; + border: 1px solid #d9d9d9; + border-radius: 2px; + border-collapse: separate; + transition: all .3s +} + +.ant-tree-checkbox-inner::after { + position: absolute; + top: 50%; + left: 22%; + display: table; + width: 5.71px; + height: 9.14px; + border: 2px solid #fff; + border-top: 0; + border-left: 0; + transform: rotate(45deg) scale(0) translate(-50%, -50%); + opacity: 0; + transition: all .1s cubic-bezier(.71, -.46, .88, .6), opacity .1s; + content: ' ' +} + +.ant-tree-checkbox-input { + position: absolute; + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: 1; + width: 100%; + height: 100%; + cursor: pointer; + opacity: 0 +} + +.ant-tree-checkbox-disabled, +.ant-tree-checkbox-disabled .ant-tree-checkbox-input, +.ant-tree-checkbox-disabled+span { + cursor: not-allowed +} + +.ant-tree-checkbox-checked .ant-tree-checkbox-inner::after { + position: absolute; + display: table; + border: 2px solid #fff; + border-top: 0; + border-left: 0; + transform: rotate(45deg) scale(1) translate(-50%, -50%); + opacity: 1; + transition: all .2s cubic-bezier(.12, .4, .29, 1.46) .1s; + content: ' ' +} + +.ant-tree-checkbox-checked .ant-tree-checkbox-inner { + background-color: #1890ff; + border-color: #1890ff +} + +.ant-tree-checkbox-disabled.ant-tree-checkbox-checked .ant-tree-checkbox-inner::after { + border-color: rgba(0, 0, 0, .25); + animation-name: none +} + +/* .ant-tree-checkbox-disabled .ant-tree-checkbox-inner { + background-color: #f5f5f5; + border-color: #d9d9d9 !important +} */ + +.ant-tree-checkbox-disabled .ant-tree-checkbox-inner::after { + border-color: #f5f5f5; + border-collapse: separate; + animation-name: none +} + +.ant-tree-checkbox-disabled+span { + color: rgba(0, 0, 0, .25) +} + +.ant-tree-checkbox-disabled:hover::after, +.ant-tree-checkbox-wrapper:hover .ant-tree-checkbox-disabled::after { + visibility: hidden +} + +.ant-tree-checkbox-wrapper { + box-sizing: border-box; + color: rgba(0, 0, 0, .65); + font-variant: tabular-nums; + display: inline-block; + line-height: unset; + cursor: pointer +} + +.ant-tree-checkbox-wrapper.ant-tree-checkbox-wrapper-disabled { + cursor: not-allowed +} + +.ant-tree-checkbox-wrapper+.ant-tree-checkbox-wrapper { + margin-left: 8px +} + +.ant-tree-checkbox+span { + padding-right: 8px; + padding-left: 8px +} + +.ant-tree, +.ant-tree-checkbox-group { + box-sizing: border-box; + padding: 0; + color: rgba(0, 0, 0, .65); + font-variant: tabular-nums; + line-height: 1.5715; + list-style: none; + font-feature-settings: 'tnum' +} + +.ant-tree-checkbox-group { + margin: 0; + font-size: 14px; + display: inline-block +} + +.ant-tree-checkbox-group-item { + display: inline-block; + margin-right: 8px +} + +.ant-tree-checkbox-group-item:last-child { + margin-right: 0 +} + +.ant-tree-checkbox-group-item+.ant-tree-checkbox-group-item { + margin-left: 0 +} + +.ant-tree-checkbox-indeterminate .ant-tree-checkbox-inner { + background-color: #fff; + border-color: #d9d9d9 +} + +.ant-tree-checkbox-indeterminate .ant-tree-checkbox-inner::after { + top: 50%; + left: 50%; + width: 8px; + height: 8px; + background-color: #1890ff; + border: 0; + transform: translate(-50%, -50%) scale(1); + opacity: 1; + content: ' ' +} + +.ant-tree-checkbox-indeterminate.ant-tree-checkbox-disabled .ant-tree-checkbox-inner::after { + background-color: rgba(0, 0, 0, .25); + border-color: rgba(0, 0, 0, .25) +} + +.ant-tree { + margin: 0; + font-size: 14px; + background: #fff; + border-radius: 2px; + transition: background-color .3s +} + +.ant-tree-focused:not(:hover):not(.ant-tree-active-focused) { + background: #e6f7ff +} + +.ant-tree-list-holder-inner { + align-items: flex-start +} + +.ant-tree.ant-tree-block-node .ant-tree-list-holder-inner { + align-items: stretch +} + +.ant-tree.ant-tree-block-node .ant-tree-list-holder-inner .ant-tree-node-content-wrapper { + flex: auto +} + +.ant-tree .ant-tree-treenode { + display: flex; + align-items: flex-start; + padding: 0; + outline: 0 +} + +.ant-tree .ant-tree-treenode-disabled .ant-tree-node-content-wrapper { + color: rgba(0, 0, 0, .25); + cursor: not-allowed +} + +.ant-tree .ant-tree-treenode-disabled .ant-tree-node-content-wrapper:hover { + background: 0 0 +} + +.ant-tree .ant-tree-treenode-active .ant-tree-node-content-wrapper { + background: #f5f5f5 +} + +.ant-tree-indent { + align-self: stretch; + white-space: nowrap; + user-select: none +} + +.ant-tree-indent-unit { + display: inline-block; + width: 24px +} + +.ant-tree .ant-tree-switcher { + flex: none; + width: 24px; + height: 35px; + margin: 0; + line-height: 35px; + font-size: 18px; + text-align: center; + cursor: pointer +} + +.ant-tree .ant-tree-switcher .ant-select-tree-switcher-icon, +.ant-tree .ant-tree-switcher .ant-tree-switcher-icon { + font-size: 10px; + display: inline-block; + font-weight: 700 +} + +.ant-tree .ant-tree-switcher .ant-select-tree-switcher-icon svg, +.ant-tree .ant-tree-switcher .ant-tree-switcher-icon svg { + transition: transform .3s +} + +.ant-tree .ant-tree-switcher-noop { + cursor: default +} + +.ant-tree .ant-tree-switcher_close .ant-tree-switcher-icon svg { + transform: rotate(-90deg) +} + +.ant-tree .ant-tree-checkbox { + top: initial; + margin: 4px 8px 0 0 +} + +.ant-tree .ant-tree-node-content-wrapper { + min-height: 24px; + margin: 0; + padding: 0; + color: inherit; + line-height: 24px; + background: 0 0; + border-radius: 2px; + cursor: pointer; + transition: all .3s +} + +.ant-tree .ant-tree-node-content-wrapper:hover { + background-color: #f5f5f5 +} + +/* .ant-tree .ant-tree-node-content-wrapper.ant-tree-node-selected { + background-color: #bae7ff +} */ + +.ant-tree .ant-tree-node-content-wrapper .ant-tree-iconEle { + display: inline-block; + width: 24px; + height: 24px; + line-height: 24px; + text-align: center; + vertical-align: top +} + +.ant-tree .ant-tree-node-content-wrapper .ant-tree-iconEle:empty, +.ant-tree .ant-tree-treenode-loading .ant-tree-iconEle, +.ant-tree-show-line .ant-tree-indent-unit-end::before, +.ant-tree-show-line .ant-tree-treenode-motion:not(.ant-motion-collapse-leave):not(.ant-motion-collapse-appear-active) .ant-tree-indent-unit::before { + display: none +} + +.ant-tree-node-content-wrapper[draggable=true] { + overflow: hidden; + width: 100%; + line-height: 35px; + /* border-top: 2px transparent solid; + border-bottom: 2px transparent solid; */ + user-select: none +} + +.ant-tree .ant-tree-treenode.drag-over>[draggable] { + color: #fff; + background-color: #1890ff; + opacity: .8 +} + +.ant-tree .ant-tree-treenode.drag-over-gap-top>[draggable] { + border-top-color: #1890ff +} + +.ant-tree .ant-tree-treenode.drag-over-gap-bottom>[draggable] { + border-bottom-color: #1890ff +} + +.ant-tree-show-line .ant-tree-indent-unit { + position: relative; + height: 100% +} + +.ant-tree-show-line .ant-tree-indent-unit::before { + position: absolute; + top: calc(100% - 4px); + right: -12px; + bottom: -28px; + border-right: 1px solid #d9d9d9; + content: '' +} + +.ant-tree-show-line .ant-tree-switcher { + z-index: 1; + background: #fff +} + +.ant-tree .ant-tree-treenode-rtl, +.ant-tree-rtl { + direction: rtl +} + +.ant-tree-rtl.ant-tree .ant-tree-switcher_close .ant-tree-switcher-icon svg { + transform: rotate(90deg) +} + +.ant-tree-rtl.ant-tree-show-line .ant-tree-indent-unit::before { + right: auto; + left: -12px; + border-right: none; + border-left: 1px solid #d9d9d9 +} + +.font-highlight { + color: #ff4d4f +} + +.ant-tree-child-tree { + overflow: hidden +} + +nz-tree { + display: block +} \ No newline at end of file diff --git a/src/app/pages/home/home.component.html b/src/app/pages/home/home.component.html new file mode 100644 index 0000000..115f15b --- /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..6aff5b7 --- /dev/null +++ b/src/app/pages/home/home.component.ts @@ -0,0 +1,1131 @@ +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 = 1500 + dataNum:any + planNum:any + + //全队数据采集和预案编制数量统计 + chartQusj:any + chartQusjData: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: [], + // 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: [], + }, + ], + }; + 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, 25, 55, 56, 78, 15, 66, 69, 44, 78, 25, 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, 48, 45, 36, 78, 16, 24, 56, 22, 25, 24, 77 ], + }, + ], + }; + + + + //预案单位类型统计 + chartYadwlx:any + unitTypeStatistics:any //存储各类型建筑预案数量初始数据 + data02:any = []; + 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', + 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: [ + + ], + }], + }; + data03:any = [ + { + value: 56, + name: '高层建筑' + }, + { + value: 88, + name: '地下建筑' + }, + { + value: 38, + name: '大型城市综合体' + }, + { + value: 45, + name: '人员密集场所' + }, + { + value: 66, + name: '石油化工类' + }, + { + value: 56, + name: '地铁类' + }, + { + value: 88, + name: '仓库、堆垛、厂房' + }, + { + value: 64, + name: '隧道' + }, + { + value: 38, + name: '其他' + } + ]; + chartYadwlxOption2: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.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: 56, + name: '高层建筑' + }, + { + value: 38, + name: '大型城市综合体' + }, + { + value: 88, + name: '地下建筑' + }, + + { + value: 45, + name: '人员密集场所' + }, + { + value: 66, + name: '石油化工类' + }, + { + value: 56, + name: '地铁类' + }, + { + value: 88, + name: '仓库、堆垛、厂房' + }, + { + value: 64, + name: '隧道' + }, + { + value: 38, + name: '其他' + } + ], + }], + }; + + + + + + // 预案评优排行 + chartYapyph:any + chartYapyphOption:any = { + // 标题 + title: { + text: '预案评优排行', + left:0 + }, + grid: { + left: 80, + 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: 80, + 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: [], + 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; //地图 + newallorganizations:any //带有children的组织机构 + ngOnInit(): void { + //获取所有组织机构 + this.http.get('/api/Organizations').subscribe(data=>{ + this.newallorganizations = data + this.newallorganizations.forEach(item => { + item.children = [] + this.newallorganizations.forEach(element => { + if(element.parentId == item.id){ + item.children.push(element) + } + }); + }); + }) + setTimeout(() => { + this.getEcharts() + this.mapInit() //初始化地图 + this.chartsSetOption('','province') + }, 0); + } + + //初始化图表 + getEcharts(){ + this.chartQusj = echarts.init(this.element.nativeElement.querySelector('#chartQusj'),'skinUpp'); + this.chartYadwlx = echarts.init(this.element.nativeElement.querySelector('#chartYadwlx'),'skinUpp'); + this.chartYapyph = echarts.init(this.element.nativeElement.querySelector('#chartYapyph'),'skinUpp'); + this.chartYalxtj = echarts.init(this.element.nativeElement.querySelector('#chartYalxtj'),'skinUpp'); + } + + + + //初始化地图 + adcode:any = 450000 //行政编码 + mapInit () { + //创建地图 + this.map = new AMap.Map('chartMap', { + cursor: 'default', + zooms:[6,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; //行政编码 + 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]; + let strokeColor = colors[colors.length - 1 - i % colors.length]; + + return { + cursor: 'default', + bubble: true, + strokeColor: strokeColor, //线颜色 + strokeOpacity: 1, //线透明度 + strokeWeight: 1, //线宽 + fillColor: fillColor, //填充色 + fillOpacity: 0.7, //填充透明度 + }; + }); + + //绘制父区域 + 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 + // (123,feature) + let fillColor2 + if(props.level == 'city'){ + fillColor2 = null + let adcode = feature.properties.adcode + this.newallorganizations.forEach(item => { + if(item.division.indexOf(adcode) != -1){ + // console.log(item) + let orArr = [] + for(let i = 0; i < 6; i++){ + orArr.unshift(item.children[i].name) + } + this.chartYapyphOption2.yAxis.data = orArr + this.chartYapyphOption2.series[0].data = [12, 14, 18, 24, 26, 30] + this.chartsSetOption(item.id,"city") + + } + }); + }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.7, //填充透明度 + }; + }); + + //绘制父区域 + districtExplorer.renderParentFeature(areaNode, { + cursor: 'default', + bubble: true, + strokeColor: 'black', //线颜色 + strokeOpacity: 1, //线透明度 + strokeWeight: 1, //线宽 + fillColor: fillColor2, //填充色 + fillOpacity: 0.5, //填充透明度 + }); + + // 更新地图视野以适合区划面 + this.map.setFitView(districtExplorer.getAllFeaturePolygons()); + }); + }); + + districtExplorer.on('outsideClick', (e) => { + // console.log('区域外点击'); + this.chartsSetOption('','province') + adcode = 450000 + 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.7, //填充透明度 + }; + }); + + //绘制父区域 + 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); + // this.chartYapyph.setOption(this.chartYapyphOption); + // this.chartYalxtj.setOption(this.chartYalxtjOption); + // this.keyUnitNum = '13,036' + // this.dataNum = '7,999' + // this.planNum = '33,678' + }) + + }); + + + } + + //设置真实数据 + chartsSetOption(id,isCity){ + this.http.get("/api/StatisticsAnalysis",{params:{OrganizationId:id}}).subscribe((data:any)=>{ + // console.log(888,data) + this.dataNum = data.companyStatistics.totalCount //重点单位数量 + this.planNum = data.planStatistics.totalCount //预案数量 + + //预案单位类型统计 + this.unitTypeStatistics = data.planStatistics.buildingTypeStatistics.buildingTypes + this.unitTypeStatistics.forEach(item => { + item.name = item.buildingTypeName + item.value = item.count + }); + this.data02 = this.unitTypeStatistics + this.chartYadwlxOption.series[0].data = this.unitTypeStatistics + this.chartYadwlx.setOption(this.chartYadwlxOption,true); + + //全队数据采集和预案编制数量统计 + this.chartQusjData = data.planStatistics.buildingTypeStatistics.buildingTypes + let data1 = [] + data.companyStatistics.trendStatistics.added.forEach(item => { + data1.push(item.count) + }); + let data2 = [] + data.planStatistics.trendStatistics.added.forEach(item => { + data2.push(item.count) + }); + this.chartQusjOption.series[0].data = data2 + this.chartQusjOption.series[1].data = data1 + this.chartQusj.setOption(this.chartQusjOption,true); + }) + if(isCity == "city"){//如果是城市级别 + this.keyUnitNum = 100 + this.chartYapyph.setOption(this.chartYapyphOption2); + this.chartYalxtj.setOption(this.chartYalxtjOption2); + + }else{ + this.keyUnitNum = 1500 + this.chartYapyph.setOption(this.chartYapyphOption); + this.chartYalxtj.setOption(this.chartYalxtjOption); + } + } +} 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..1a38a1d --- /dev/null +++ b/src/app/pages/login/login.component.ts @@ -0,0 +1,90 @@ +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); + // 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..770bed2 --- /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..15f9db0 --- /dev/null +++ b/src/app/plan-management/entry-plan-look/entry-plan-look.component.ts @@ -0,0 +1,988 @@ +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 + }) + } + //跳转单位信息 + lookUnitData(){ + window.open(`/keyUnit/viewunitinfo?id=${this.route.snapshot.queryParams.unitId}`) + } + //分页事件 + 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..ab20216 --- /dev/null +++ b/src/app/plan-management/entry-plan/entry-plan.component.html @@ -0,0 +1,258 @@ +
    +
    +
    + +
    + + + + +
    + +
    + + + + + 包含下级 +
    +
    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..42c10c8 --- /dev/null +++ b/src/app/plan-management/entry-plan/entry-plan.component.scss @@ -0,0 +1,231 @@ +.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:red; + margin: 0 3px; + cursor: pointer; + } + span:hover{ + text-decoration:underline + } + .grey{ + color: grey; + pointer-events: none; + } +} + +//完整度 +.integrityDiv{ + width: 180px; + height: 30px; + background-color: #e2e7ee; + margin: 0 auto; + position: relative; + .integrityNum{ + position: absolute; + left: 50%; + top: 50%; + transform: translate(-50%, -50%); + color: black; + font-weight: 800; + font-size: 15px; + cursor: default; + } + .integrityColorDiv{ + height: 100%; + // background-color: #32cd32; + } + .integrityDetails{ + position: absolute; + display: none; + width: 350px; + height:280px; + border: 1px solid rgba(0, 0, 0, 0.22); + background-color: white; + .integrityDetailsTop{ + width: 100%; + height: 23px; + line-height:23px; + border-bottom: 1px solid rgba(0, 0, 0, 0.22); + margin-bottom: 1px; + font-size: 14px; + span{ + display: inline-block; + text-align: center; + font-weight: 800; + margin: 0; + color: black; + } + .span1{ + width: 25%; + } + .span2{ + width: 60%; + } + .span3{ + width: 15%; + } + } + .integrityDetailsBody{ + ul{ + li{ + width: 100%; + height: 23px; + line-height: 23px; + margin: 3px 0; + div{ + float: left; + font-size: 13px; + } + .name{ + width: 25%; + height: 100%; + } + .colorDiv{ + width: 60%; + height: 100%; + position: relative; + .colorDivBac{ + width: 90%; + height: 100%; + position: absolute; + left: 50%; + top: 50%; + transform: translate(-50%,-50%); + background-color: #dfe5ec; + border-radius: 5px; + .colorDivCon{ + border-radius: 5px; + height: 100%; + background-color: #2398f1; + } + } + span{ + position: absolute; + left: 50%; + top: 50%; + transform: translate(-50%,-50%); + color: black; + font-weight: 600; + } + } + .number{ + width: 15%; + height: 100%; + } + } + } + + } + } + .bottomposition{ + top: 2px; + left: 188px; + } + .topposition{ + top: -252px; + left: 188px; + } +} +.integrityDiv:hover{ + .integrityDetails{ + display: block; + } +} \ 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..4695575 --- /dev/null +++ b/src/app/plan-management/entry-plan/entry-plan.component.ts @@ -0,0 +1,256 @@ +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 + integrity(width){ + let style:any = {} + style.width = width*10 +'%'; + if(width < 4){ + style.background = "#FF4500"; + } + if(width >= 4 && width <7){ + style.background = "#FF8C00"; + } + if(width >= 7){ + style.background = "#32cd32"; + } + return style + } + integrityDetails(width,zong){ + let style:any = {} + style.width = (width/zong)*100 +'%'; + return style + } + 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..a97b388 --- /dev/null +++ b/src/app/tabbar/tabbar.component.html @@ -0,0 +1,98 @@ + + +

    {{title}} : {{planName}}

    + + +
    + {{grade}} 分 +
    + + +
    +
    + 分类名称 + 已得分 + 总分 +
    +
    +
      +
    • +
      {{item.name}}
      +
      +
      +
      +
      + {{item.score}}分 +
      +
      {{item.totalpoints}}分
      +
    • +
    +
    +
    + 仅供参考 +
    +
    +

    欢迎您, {{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..f2e4a54 --- /dev/null +++ b/src/app/tabbar/tabbar.component.scss @@ -0,0 +1,181 @@ + +//@import "/src/app/style.css"; +mat-toolbar{ + position: relative; + padding-left: 65px; + .grade{ + width: 120px; + height: 45px; + //border:1px solid #F00; + position: absolute; + text-align: center; + margin-left: 250px; + margin-top: 0px; + -webkit-transform: rotate(-10deg); + -moz-transform: rotate(-10deg); + transform:text; + a{ + box-sizing: border-box; + + display: inline-block; + color: #fff; + //padding: 12px 5px; + text-decoration: none; + cursor: pointer; + } + span{ + text-align: center; + font-size: 36px; + line-height: 45px; + font-family: "STXinwei"; + color:#FFA500; + cursor: default; + text-decoration:underline; + padding-bottom:5px; + + } + a.active>span ,a:hover>span { + //padding-bottom: 8px; + border-bottom: 3px solid #FFA500; + + } + } +} +.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; +} + +//鼠标移入详情页面显示 +.integrityDetails{ + position: absolute; + z-index: 999; + color: black; + display: none; + width: 350px; + height:290px; + left: 440px; + top: 30px; + border: 1px solid rgba(0, 0, 0, 0.22); + background-color: white; + .integrityDetailsTop{ + width: 100%; + height: 23px; + line-height:23px; + border-bottom: 1px solid rgba(0, 0, 0, 0.22); + margin-bottom: 1px; + font-size: 14px; + span{ + display: inline-block; + text-align: center; + font-weight: 800; + } + .span1{ + width: 25%; + } + .span2{ + width: 60%; + } + .span3{ + width: 15%; + } + } + .integrityDetailsBody{ + ul{ + li{ + width: 100%; + height: 23px; + line-height: 23px; + margin: 3px 15px; + div{ + float: left; + font-size: 13px; + } + .name{ + width: 25%; + height: 100%; + } + .colorDiv{ + width: 60%; + height: 100%; + position: relative; + .colorDivBac{ + width: 90%; + height: 100%; + position: absolute; + left: 50%; + top: 50%; + transform: translate(-50%,-50%); + background-color: #dfe5ec; + border-radius: 5px; + .colorDivCon{ + border-radius: 5px; + height: 100%; + background-color: #2398f1; + } + } + span{ + position: absolute; + left: 50%; + top: 50%; + transform: translate(-50%,-50%); + // color: white; + font-weight: 600; + } + } + .number{ + width: 15%; + height: 100%; + } + } + } + + } +} +.uploadFile{ + height: 64px; + line-height: 64px; + a{ + color: rgb(26, 15, 179); + font-size: 22px; + position: absolute; + right: 370px; + } + a:hover{ + text-decoration: underline; + color: red; + } +} \ 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..e5a6d3d --- /dev/null +++ b/src/app/tabbar/tabbar.component.ts @@ -0,0 +1,157 @@ +import { Component, OnInit,Output,EventEmitter } from '@angular/core'; +import { HttpClient } from '@angular/common/http' +import { Router,ActivatedRoute,NavigationEnd } 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'; +import { filter } from 'rxjs/operators'; + + +@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) { } + + grade = null //单位完整度得分 + title:any = "数字化预案编制管理平台" + planName:any = null + routerEventsListener //监测路由变化 + + + integrityData:any + ngOnInit() { + this.routerEventsListener = this.router.events.pipe( + filter(event => event instanceof NavigationEnd) + ).subscribe((e) => { + this.title = "数字化预案编制管理平台" + this.planName = null + this.grade = null + }); + 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") + let obj = JSON.parse(sessionStorage.getItem(this.route.snapshot.queryParams.id)) + this.grade = obj.zong + this.integrityData = obj.details + } + } + + ngOnDestroy(){ + this.routerEventsListener.unsubscribe() + } + + + integrityDetails(width,zong){ + let style:any = {} + style.width = (width/zong)*100 +'%'; + return style + } + + 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/collection-tools/addDisposalNode.html b/src/app/ui/collection-tools/addDisposalNode.html new file mode 100644 index 0000000..27654e8 --- /dev/null +++ b/src/app/ui/collection-tools/addDisposalNode.html @@ -0,0 +1,24 @@ +
    +
    + + +
    + +
    + +
    + + + +
    + +
    + + +
    + +
    + +
    \ No newline at end of file diff --git a/src/app/ui/collection-tools/addPlaneFigure.html b/src/app/ui/collection-tools/addPlaneFigure.html new file mode 100644 index 0000000..930bf81 --- /dev/null +++ b/src/app/ui/collection-tools/addPlaneFigure.html @@ -0,0 +1,38 @@ +
    +
    + + +
    + +
    + +
    + + + +
    + +
    + 是否为避难层 +
    + +
    + + + +
    + +
    + +
    + +
    + + +
    + +
    + +
    \ No newline at end of file diff --git a/src/app/ui/collection-tools/collection-tools.component.html b/src/app/ui/collection-tools/collection-tools.component.html new file mode 100644 index 0000000..50b2f12 --- /dev/null +++ b/src/app/ui/collection-tools/collection-tools.component.html @@ -0,0 +1,454 @@ +
    + +
    + + + 图标大小 + + + 正常 + 放大2倍 + 放大4倍 + + + + + + + + 基本信息名称 + visibility + + + 想定作业名称 + visibility + +
    + + 基本信息编辑 + + + 想定作业编辑 + +
    + + tv + create + description + +
    + + +
    + + + + +
    +
    + keyboard_arrow_right + keyboard_arrow_left + 天气 + + 气温 +
    + + +
    + 风力 + + 风向 + +
    +
    +
    + + +
    +
    + + + + +
    +
    + +
    +
    + keyboard_arrow_up + keyboard_arrow_down + + +
    +
    +
    + broken_image + + + + + + + + + + photo_size_select_actual + + + + + + +
    +

    + keyboard_arrow_up +

    +

    + edit + delete +

    +

    + cached + library_books +

    +

    + keyboard_arrow_down +

    +
    + +
    +
    +
    + + +
    +
    + keyboard_arrow_up + keyboard_arrow_down + +
    +
    + + + + + + +
    +
    + +

    {{items.name}}

    +
    +
    + +
    +
    +
    +
    + + +
    +
    + keyboard_arrow_up + keyboard_arrow_down + + +
    +
    + + + +
    + +
    + edit + add + library_books + delete_forever +
    +
    +
    + +
    +
    + + +
    + +
    + +
    + +
    +
    +
    + 属性 +
    +
    + +
    +

    面积(平方米)

    +
    {{canvasData.selectStorey.area}}
    +

    详情

    +
    + {{canvasData.selectStorey.details}} +
    +
    + +
    +

    {{assetName}}

    + +
    +

    宽度(像素)

    + +

    高度(像素)

    + +

    角度

    +
    + + +
    +
    + +
    +

    厚度

    +
    + + +
    +
    + +

    是否高亮

    +
    + + 选中高亮 +
    +
    +
    + 颜色 +
    + +
    +
    +
    +
      +
    • +
    +
    + 透明度 + + {{colorDivSliderValue}}% +
    +
    + +
    +

    {{item.PropertyName}}({{item.PhysicalUnit}})

    + +
    + +
    +

    {{item.PropertyName}}({{item.PhysicalUnit}})

    + +
    + +
    +

    {{item.PropertyName}}({{item.PhysicalUnit}})

    + +
    + +
    +
    +

    {{item.PropertyName}}

    + {{imagesArr.length ? imagesArr.length : 0}} / {{item.PropertyValue}} + +
    添加
    + + +
    +
    +
    +
    + +
    +
    + + delete + +
    +
    +
    + +
    +

    {{item.PropertyName}}

    + +
    + +
    +

    {{item.PropertyName}}

    + + +
    + +
    +

    {{item.PropertyName}}

    + +
    + +
    +

    {{item.PropertyName}}

    + +
    +
    +
    + +
    + +
    + +
    + +
    +
    + 消防要素 +
    +
    + +
    + + + + + + + {{node.name}} + + ({{node.children.length}}) + visibility + + + + + + + {{node.name}} + + ({{node.children.length}}) + visibility + + + +
    +
    +
    + +
    +
    +
    +
    + 节点详情 +
    +
    + 注意事项 +
    +
    +
    + + +
    +
    +
    +
    + +
    \ No newline at end of file diff --git a/src/app/ui/collection-tools/collection-tools.component.scss b/src/app/ui/collection-tools/collection-tools.component.scss new file mode 100644 index 0000000..8b34d62 --- /dev/null +++ b/src/app/ui/collection-tools/collection-tools.component.scss @@ -0,0 +1,445 @@ +@import './panel.scss'; +.icongray{ + color: #D9D0DC; +} +.content { + width: 100%; + height: 93%; + overflow: hidden; + box-sizing: border-box; + padding: 1px; + display: flex; + flex-direction: column; + + .buildingbtnchecked{ + background-color: #34A6FD; + color: white; + } +} + +//header头部 +.header { + position: relative; + flex: 5%; + display: flex; + align-items:center; + min-height: 40px; + background-color: #fff; + .nameShow{ + cursor: pointer; + user-select: none; + } + .copytobutn{ + width: 33px; + min-width: 33px; + display: flex; + justify-content: center; + } + font-size: 18px; + mat-icon{ + font-size: 26px; + vertical-align: text-top; + } + span{ + height: 24px; + line-height: 24px; + } + .patternSwitch{ + position: absolute; + right: 140px; + span{ + font-size: 18px; + cursor: pointer; + margin: 0 3px; + display: inline-block; + border: 1px solid gray; + border-radius: 3px; + padding: 0 5px; + } + .selectedPattern{ + background-color: #2196f3; + color: white; + } + } +} + +//头部操作栏 +.headerOperate { + img { + width: 24px; + height: 24px; + vertical-align: middle; + margin-left: 1px; + } + span{ + font-size: 18px; + } + flex: 5%; + display: flex; + align-items:center; + min-height: 40px; + box-sizing: border-box; + margin: 3px 0; + background-color: white; + button{ + border: 0.5px solid rgb(208, 211, 214); + margin: 0 2px; + } + .editdeletebtn{ + display: none; + } + .bigeditdeletebtn:hover{ + .editdeletebtn{ + display: inline-block; + } + } +} + +//功能区 +// icon统一样式 +.mat-icon { + cursor:pointer; + vertical-align: middle; +} +//左右两侧功能栏 统一样式 +.publicCss { + border-radius: 5px; + position: absolute; + height: 100%; + top: 0; +} +.functionalDomain { + flex: 90%; + overflow: hidden; + .functionalDomainContent { + position: relative; + width: 100%; + height: 100%; + } + .functionalDomainLeft { + background-color: #fff; + display: flex; + flex-direction: column; + margin-left: 0px; + transition: margin-left 0.5s; + min-width: 235px; + border: 1px solid #E6EAEE; + width: 235px; + left: 0; + z-index: 111; + .leftDragDiv{ + position: absolute; + right: 0; + height: 100%; + width: 3px; + z-index: 1000; + cursor: e-resize; + } + } + .functionalDomainRight { + z-index: 1001; + margin-right: 0px; + transition: margin-right 0.5s; + border: 1px solid #464646; + width: 235px; + right: 0; + + } + //右边导航栏显示隐藏 + .togglePanel2 { + margin-right: -2000px; + transition: margin-right 1s; + } + //左侧导航栏显示隐藏 + .togglePanel { + margin-left: -2000px; + transition: margin-left 1s; + } + +} + +//右边操作栏 +.title{ + width: 100%; + height: 35px; + background-color: #464646; + div{ + width: 50%; + height: 35px; + line-height: 35px; + background-color: #595959; + border-radius: 5px; + span{ + color: white; + font-size: 14px; + font-weight: 400; + padding-left: 5px; + } + } +} + + +//右侧属性 +.property{ + display: flex; + flex-flow: column; + .siteproperty{ + height: 100%; + overflow-y: auto; + p{ + color: #9c9fa5; + padding-left: 5px; + } + .siteproperty_size{ + background-color: #e3e3e3; + width: 93%; + margin: 0 auto; + border-radius: 3px; + min-height: 21px; + } + .rightAttribute{ + width: 12%; + height: 99.5%; + position: absolute; + top: 0; + right: 0; + bottom: 0; + border: 2px solid #464646; + } + } + .assetsproperty{ + overflow-y: auto; + height: 100%; + p{ + color: #9c9fa5; + margin:1px 0 3px 8px; + font-size: 14px; + } + span{ + font-size: 15px; + } + input{ + height: 18px; + } + .biginput{ + display: block; + width: 88%; + margin: 0 auto; + } + .smallinput{ + display: block; + width: 19%; + margin-left: 8px; + } + .textarea{ + display: block; + width: 88%; + height: 50px; + margin: 0 auto; + } + .swiper-button-next{ + right: 6px; + } + .swiper-button-prev{ + left: 6px; + } + .swiper-container{ + // --swiper-theme-color: #ff6600;/* 设置Swiper风格 */ + // --swiper-navigation-color: #00ff33;/* 单独设置按钮颜色 */ + --swiper-navigation-size:20px;/* 设置按钮大小 */ + } + .hoverred:hover{ + color: rgb(187, 28, 28); + } + .selectDiv{ + height: 21px; + position: relative; + margin-bottom: 5px; + select{ + width: 98px; + height: 22px; + vertical-align: middle; + position: absolute; + right: 10px; + top: 1px; + border: 1px solid rgb(208, 211, 214); + border-radius: 2px; + } + } + .colorBigDiv{ + width: 88%; + margin-left: 8px; + .colorBigTemplateDiv{ + span{ + color: #9c9fa5; + font-size: 14px; + height: 26px; + line-height: 26px; + } + .colorTemplateDiv{ + width: 65%; + height: 22px; + display: inline-block; + vertical-align: middle; + margin-left: 26px; + } + } + + .colorDiv{ + .colorLi{ + width: 24px; + height: 24px; + list-style: none; + float: left; + border: 2px solid white; + } + .coloractive{ + border: 2px solid black; + } + } + } + + } +} +//右侧消防要素 +.firecategories{ + position: relative; + display: flex; + flex-flow: column; + .firecategoriesTree{ + overflow-y: auto; + height: 100%; + mat-tree-node{ + position: relative; + } + .isLookCss{ + position: absolute; + right: 6px; + } + } +} + +// 解决轮播图蓝框问题 +div:focus { + outline: none; +} + +//没有图片时显示无图片背景图 +.noImgCss{ + background: url(../../../assets/images/noImg.png) no-repeat center center; + background-size: 88% 100%;/*按比例缩放*/ +} +.input{ + width: 18px; + height: 18px; + vertical-align: middle; + margin-left: 9px; + margin-right: 3px; +} + + +// tree +.mat-tree-node{ + min-height: 0; + height: 32px; + line-height: 32px; + font-size: 13px; + cursor: pointer; +} +.treeNode:hover{ + background-color: #ccebf8; +} +.isLookPattern{ + display: none; +} +.treeText{ + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; + display: inline-block; + width: 65px; +} + +.bigBox{ + width: 700px; + height: 40px; + position: absolute; + overflow: hidden; + right: 0; +} +.weatherBox{ + height: 40px; + width: 700px; + line-height: 40px; + position: absolute; + right: 0; + transition: right linear .5s; + .openbtn{ + font-size: 45px; + height: 45px; + width: 40px; + } + .name{ + font-size: 16px; + vertical-align: middle; + margin-left: 3px; + } + input{ + width: 140px; + height: 22px; + margin-left: 3px; + } + select{ + width: 96px; + height: 25px; + margin-left: 3px; + vertical-align: middle; + } +} +.open{ + right: 0px; +} +.close{ + right:-622px; +} +.bottomCss{ + position: absolute; + left: 232px; + right: 0px; + bottom: 0; + height: 158px; + width: auto; + z-index: 100; + background-color: white; + border: 1px solid #464646; + .dragDiv{ + width: 100%; + height: 3px; + position: absolute; + top: 0; + z-index: 1000; + cursor: n-resize; + } + .title{ + height: 35px; + background-color: #464646; + div{ + background-color: #464646; + float: left; + width: 80px; + color: white; + font-size: 13px; + padding-left: 5px; + cursor: pointer; + } + .detailsAndattentBtn{ + background-color: #595959; + } + } + .body{ + textarea{ + width: 100%; + border-radius: 0px; + } + } +} \ No newline at end of file diff --git a/src/app/ui/collection-tools/collection-tools.component.spec.ts b/src/app/ui/collection-tools/collection-tools.component.spec.ts new file mode 100644 index 0000000..acc7d5e --- /dev/null +++ b/src/app/ui/collection-tools/collection-tools.component.spec.ts @@ -0,0 +1,25 @@ +import { async, ComponentFixture, TestBed } from '@angular/core/testing'; + +import { CollectionToolsComponent } from './collection-tools.component'; + +describe('CollectionToolsComponent', () => { + let component: CollectionToolsComponent; + let fixture: ComponentFixture; + + beforeEach(async(() => { + TestBed.configureTestingModule({ + declarations: [ CollectionToolsComponent ] + }) + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(CollectionToolsComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/ui/collection-tools/collection-tools.component.ts b/src/app/ui/collection-tools/collection-tools.component.ts new file mode 100644 index 0000000..3cf8178 --- /dev/null +++ b/src/app/ui/collection-tools/collection-tools.component.ts @@ -0,0 +1,2271 @@ +import { Component, OnInit, Inject, ViewChild,ElementRef,Renderer2, ViewContainerRef } 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 {leftFunctionalDomainComponent,editPlaneFigureComponent,editDisposalNodeComponent,addDisposalNodeComponent} from './leftFunctionalDomain' +import {MatTreeFlatDataSource, MatTreeFlattener} from '@angular/material/tree'; +import {FlatTreeControl} from '@angular/cdk/tree'; +import {WorkingAreaComponent} from '../../working-area/working-area.component' +import {CanvasShareDataService, DisposalNodeData} from '../../canvas-share-data.service' //引入服务 +import Viewer from 'viewerjs'; +import Swiper from 'swiper'; +import { saveOneDialog } from './save'; +import { NzFormatBeforeDropEvent, NzFormatEmitEvent,NzTreeComponent } from 'ng-zorro-antd/tree'; +import { Observable, of } from 'rxjs'; +import { delay } from 'rxjs/operators'; +import { windows } from 'src/app/interface'; +import { GameMode } from 'src/app/working-area/model/gameMode'; + + + +@Component({ + selector: 'app-collection-tools', + templateUrl: './collection-tools.component.html', + styleUrls: ['./collection-tools.component.scss'] +}) +export class CollectionToolsComponent implements OnInit { + + @ViewChild('canvas',{static: true}) canvas:WorkingAreaComponent; //父组件中获得子组件的引用 + + constructor(private http:HttpClient,public dialog: MatDialog,public snackBar: MatSnackBar,private element: ElementRef,public canvasData: CanvasShareDataService) { } + @ViewChild('nzTreeComponent', { static: false }) nzTreeComponent!: NzTreeComponent; + // tree配置 + private _transformer = (node, level: number) => {//要给渲染节点传那些属性参数 + return { + expandable: !!node.children && node.children.length > 0, + name: node.name || node.Name, + level: level, + id: node.id || node.Id, + children:node.children, + isTemplate:node.isTemplate, + isNewElement:node.isNewElement, + isLook:node.isLook, + isLookPattern:node.isLookPattern || null + }; + } + 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; + + colors = ['#076eec','#4dd0e1','#00ee76','#ffff00','#eeb422', + '#FF6A6A','#ff0000','#ff6eb4','#00bfff','#54ff9f', + '#009688','#836fff','#ff8c00','#ee00ee','#ffa07a', + '#00C500','#00ffff','#6495ed','#ffdAb9','#AA00FF'] + selected = "1" //图标大小选择框 + + allBuildings //该单位所有建筑 + beforeOneCheckedBuilding:any = {name:"总平面图"}; //当前点击选择的建筑 + checkedBuildingIndex:number = -1 //当前点击选择的建筑index + isEditPat:boolean = true //当前是否是编辑模式 + + assetName:String//素材名称 + assetWidth:number//素材宽度 + assetHeight:number//素材高度 + sliderValue:number = 0//角度滑竿的值 + sliderValueThickness:number = 0//厚度滑竿的值 + isHighLight:boolean = false//是否高亮选择框 + PropertyInfos = [] //去除图片链接真正用于循环的内容 + imagesArrNum //素材属性图片数量上限 + imagesArr = [] //属性中的图片链接集合 + clickedIndex //点击图片时的索引值 + + //传入素材对象,设置右侧属性栏内容 + canvasAssetObj //传入的素材属性对象 + isImgNumCss = false //控制上传文件input显隐 + mySwiper:any //轮播图实例 + + gallery//viewerJs实例 + //设置属性框 + setAssetsProperty(obj){ + //初始化viewerJs实例 + setTimeout(() => { + obj.PropertyInfos.forEach(item => { + if(item.PropertyType == 4){ + this.gallery = new Viewer(document.getElementById('viewerjs'),{ + url: 'data-original' + }); + } + }) + }, 0); + + //从颜色中取出透明度 + let color = obj.Color + let strh = color.substring(color.length -2,color.length) + let opacity = Math.round(parseInt(strh,16)/255 * 100) + this.colorDivSliderValue = opacity + + this.isShowProperty = true + this.isShowAttribute = false + let _this = this + this.imagesArr = [] + this.imagesArrNum = "" + + this.canvasAssetObj = obj //将选中素材对象存到本地变量 + + this.assetName = obj.Name + this.assetWidth = obj.Width + this.assetHeight = obj.Height + this.sliderValue = obj.Angle + this.selectedcolor = obj.Color + this.PropertyInfos = obj.PropertyInfos + this.sliderValueThickness = obj.Thickness + this.PropertyInfos.forEach(item => { + if(item.PropertyType == 3){ //如果是图片链接类型 + this.imagesArr.push(item) + } + if(item.PropertyType == 4){//图片数值上线 + this.imagesArrNum = item.PropertyValue + } + }) + + //如果存在图片则加载轮播图 + if(this.imagesArr.length){ + setTimeout(() => { + this.mySwiper = new Swiper('.swiper-container',{ + loop: false, + // grabCursor: true, + // 如果需要前进后退按钮 + navigation: { + nextEl: '.swiper-button-next', + prevEl: '.swiper-button-prev', + }, + on:{ + click: function(){ + _this.clickedIndex = this.clickedIndex + }, + } + }); + }, 0); + } + //判断此时图片数量是否达到上限 + if(this.imagesArr.length < this.imagesArrNum){//如果不超出 + this.isImgNumCss = true + }else{ + this.isImgNumCss = false + } + } + pattern:boolean = true//默认为基本信息编辑 + + + yyy(){ + console.log(this.canvasData.selectPanelPoint) + } + //基本信息编辑模式 + baseInfo(){ + if (!this.pattern) { + this.pattern = true + this.canvasData.gameMode = GameMode.BasicInformation + this.canvasData.selectPanelPoint = new DisposalNodeData(); + this.mateDeleteCustomize() + this.getAllLibrary() + this.checkedBuildingIndex = -1 + this.getSitePlan() //总平面图一层 + } + } + + //想定作业编辑模式 + wantWork(){ + if (this.pattern) { + this.pattern = false + this.canvasData.gameMode = GameMode.Assignment + this.getAllLibrary('plan') + this.getDisposalNode() + } + } + + //ngzorro tree 拖拽 + nzEvent(event: NzFormatEmitEvent): void { + if(this.isDrag){ + let parentId + if(this.pos == 0){ + parentId = event.node.key + }else{ + if(event.node.level == 0){ + parentId = null + }else{ + parentId = event.node.origin.parentId + } + } + + + let orders = {} + let originalData = JSON.parse(JSON.stringify( this.canvasData.allDisposalNode || [] )) //tree原始数据 + let targetNodeData = []//拖动移入节点的数据,用于遍历求出放在该数组的第几位 + + //找到需要重新排序的数组 + if(this.pos == 0){ + originalData.forEach(item => { + if(item.parentId == event.node.key){ + targetNodeData.push(item) + } + }) + }else{ + if(event.node.origin.parentId){//如果拖动目标为非一级节点 + originalData.forEach(item => { + if(item.parentId == event.node.origin.parentId){ + targetNodeData.push(item) + } + }) + }else{//如果拖动目标为一级节点 + originalData.forEach(item => { + if(!item.parentId){ + targetNodeData.push(item) + } + }) + } + } + + + let idArr = [] + targetNodeData.forEach(i => { + idArr.push(i.id) + }) + console.log(6666666666666,event); + if(this.pos == 0 && event.node.origin.children.length == 1){ + console.log("移入,没有兄弟") + let key = event.dragNode.key + orders[key] = 0 + parentId = event.node.key + }else{ + console.log("移入,多个兄弟") + let array = [] + targetNodeData.forEach(item => { + if(item.id != event.dragNode.key){ //将拖动项先移除掉 + array.push(item) + } + }) + if(event.dragNode.isEnd[event.dragNode.isEnd.length - 1]){ //如果移入到最后一个 + console.log("最后") + array.push(event.dragNode.origin) + }else if(event.dragNode.isStart[event.dragNode.isStart.length - 1]){//如果移入到第一个 + console.log("第一") + array.unshift(event.dragNode.origin) + }else{//如果移入中间位置 + console.log("中间") + array.splice(event.node.origin.order, 0, event.dragNode.origin) + } + array.forEach((item,key) => { + orders[item.id] = key + }) + } + + let obj ={ + id : event.dragNode.origin.id, + parentId : parentId, + orders : orders + } + + this.http.put("/api/DisposalNodes/Sort",obj).subscribe(data => { + const config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.snackBar.open('排序成功','确定',config) + this.refurbishTreeData() + }) + } + } + + isDrag //是否可以拖动 + pos//放置位置 + beforeDrop = (arg: NzFormatBeforeDropEvent) => { + if(arg.dragNode.origin.isDataNode && arg.node.level === 0){//如果为数据节点则不允许拖到一级节点 + const config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.snackBar.open('数据节点不允许拖拽到一级节点','确定',config) + this.isDrag = false + return of(false); + }else if(!arg.dragNode.origin.isDataNode && arg.node.level === 2){ + const config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.snackBar.open('处置节点不允许拖拽到三级节点','确定',config) + this.isDrag = false + return of(false); + }else{ + this.isDrag = true + this.pos = arg.pos + return of(true) + } + } + //ngzorro tree 拖拽 + + //天气栏目 + weatherBtn = true + weatherBtnShow(){ + this.weatherBtn = !this.weatherBtn + } + weatherBtnHidden(){ + this.weatherBtn = !this.weatherBtn + } + + //底部切换按钮div + detailsAndattentBtn = true + //节点详情 + details(){ + this.detailsAndattentBtn = true + } + //注意事项 + attent(){ + this.detailsAndattentBtn = false + } + + //消防要素div边框高度调节 + firecategoriesDivMouseDown(e){ + document.onmousemove = (ev) => { + let bodyHeight = document.body.clientHeight //网页宽度 + let maxHeight = this.element.nativeElement.querySelector('#rightDiv').clientHeight - 35 //最大宽度 + if(bodyHeight - ev.clientY >= maxHeight){ + this.element.nativeElement.querySelector('#firecategories').style.height = maxHeight+ 'px' + this.element.nativeElement.querySelector('#property').style.height = 35+ 'px' + }else{ + this.element.nativeElement.querySelector('#firecategories').style.height = (bodyHeight - ev.clientY) + 'px' ; + this.element.nativeElement.querySelector('#property').style.height = (this.element.nativeElement.querySelector('#rightDiv').clientHeight - this.element.nativeElement.querySelector('#firecategories').clientHeight) + 'px' + } + } + document.onmouseup = () => { + document.onmousemove = null; + document.onmouseup = null; + } + } + + //左侧div边框宽度调节 + leftDivMouseDown(e){ + document.onmousemove = (ev) => { + let bodyWidth = document.body.clientWidth //网页宽度 + let maxWidth = bodyWidth - 260 - this.element.nativeElement.querySelector('#rightDiv').clientWidth //最大宽度 + if(ev.clientX - 240 >= maxWidth){ + this.element.nativeElement.querySelector('#leftDiv').style.width = maxWidth + 'px' + }else{ + this.element.nativeElement.querySelector('#leftDiv').style.width = ev.clientX - 260 + 'px'; + } + } + document.onmouseup = () => { + document.onmousemove = null; + document.onmouseup = null; + } + } + + //底部div高度调节 + bottomDivMouseDown(e){ + document.onmousemove = (ev) => { + let bodyHeight = document.body.clientHeight //网页高度 + let maxHeight = this.element.nativeElement.querySelector('#rightDiv').clientHeight //最大高度 + if(bodyHeight - ev.clientY >= maxHeight){ + this.element.nativeElement.querySelector('#bottomDiv').style.height = maxHeight + 'px' + }else{ + this.element.nativeElement.querySelector('#bottomDiv').style.height = (bodyHeight - ev.clientY) + 'px' ; + } + } + document.onmouseup = () => { + document.onmousemove = null; + document.onmouseup = null; + } + } + + //右侧div边框宽度调节 + rightDivMouseDown(e){ + document.onmousemove = (ev) => { + let bodyWidth = document.body.clientWidth //网页宽度 + let maxWidth = bodyWidth - 240 - this.element.nativeElement.querySelector('#leftDiv').clientWidth //最大宽度 + if(bodyWidth - ev.clientX >= maxWidth){ + this.element.nativeElement.querySelector('#rightDiv').style.width = maxWidth + 'px' + }else{ + this.element.nativeElement.querySelector('#rightDiv').style.width = bodyWidth - ev.clientX + 'px'; + } + } + document.onmouseup = () => { + document.onmousemove = null; + document.onmouseup = null; + } + } + + //放大图标 + iconScale(){ + let number = Number(this.selected) + this.canvas.setIconScale(number) + } + + //素材宽度输入框改变 + assetWidthIunput(){ + this.canvasAssetObj.Width = this.assetWidth + this.canvasData.isChange = true + this.canvas.refreshIcon(this.canvasAssetObj.Id) + } + + //素材高度输入框改变 + assetHeightIunput(){ + this.canvasAssetObj.Height = this.assetHeight + this.canvasData.isChange = true + this.canvas.refreshIcon(this.canvasAssetObj.Id) + } + + //素材角度输入框改变 + assetAngleIunput(){ + this.canvasAssetObj.Angle = this.sliderValue + this.canvasData.isChange = true + this.canvas.refreshIcon(this.canvasAssetObj.Id) + } + + //素材厚度输入框改变 + assetThicknessIunput(){ + this.canvasAssetObj.Thickness = this.sliderValueThickness + this.canvasData.isChange = true + this.canvas.refreshIcon(this.canvasAssetObj.Id) + } + + //素材是否高亮改变----->本地操作行为 + assetHighLightIunput(){ + + } + + //动态属性素材input框值改变 + assetInputChange(i,e){ + let index = this.canvasAssetObj.PropertyInfos.findIndex((item)=>{ + return i.PropertyName == item.PropertyName + }) + this.canvasAssetObj.PropertyInfos[index].PropertyValue = e.target.value + this.canvasData.isChange = true + this.canvas.refreshIcon(this.canvasAssetObj.Id) + } + + //动态属性素材布尔值框改变radio + assetRadioChange(i,boolean){ + let index = this.canvasAssetObj.PropertyInfos.findIndex((item)=>{ + return i.PropertyName == item.PropertyName + }) + this.canvasAssetObj.PropertyInfos[index].PropertyValue = boolean + this.canvasData.isChange = true + } + + colorIndex//默认素材颜色 + selectedcolor//点击选择的颜色 + //选择素材颜色 + selectcolor(item,key){ + //在当前透明度基础上改变颜色 + this.selectedcolor = item + this.selectedcolor.substring(this.selectedcolor.length-2) + this.canvasAssetObj.Color = this.selectedcolor + this.canvasData.isChange = true + this.canvas.refreshIcon(this.canvasAssetObj.Id) + } + //颜色选择滑竿的值 + colorDivSliderValue + colorDivSliderChange(){ + let colorOpacity = Math.round(255 * this.colorDivSliderValue * 0.01) + //根据滑竿值改变16进制颜色后两位 + function replacepos(text,start,stop,replacetext){ + let mystr = text.substring(0,stop-1)+replacetext+text.substring(stop+1); + return mystr; + } + this.selectedcolor = replacepos(this.selectedcolor,7,8,colorOpacity.toString(16)) + this.canvasAssetObj.Color = this.selectedcolor + this.canvasData.isChange = true + this.canvas.refreshIcon(this.canvasAssetObj.Id) + } + + //查看图片详情 + lookImg(){ + const dialogRef = this.dialog.open(ViewDetails, {//调用open方法打开对话框并且携带参数过去 + data: {imagesArr:this.imagesArr,index:this.clickedIndex} + }); + dialogRef.afterClosed().subscribe(data=>{ }); + } + + //上传素材图片 + selectFile(e){ + let imgFile = e.target.files[0] || null //上传的文件 + this.startUploading(imgFile) + } + objectName:any //上传对象名 + startUploading (imgFile) { + let _this = this + let file = imgFile || null //获取上传的文件 + let fileSize = file.size || null //上传文件的总大小 + let shardSize = 5 * 1024 * 1024 //5MB一个分片 + let companyId = sessionStorage.getItem("companyId") + if (file && fileSize <= shardSize) { //上传文件<=5MB时 + let formData = new FormData() + formData.append("file",file) + this.http.post(`api/Objects/WebPlan2D/${companyId}`,formData).subscribe((data:any)=>{ + this.objectName = data.objectName + const config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.snackBar.open('上传成功','确定',config) + + //在原始素材对象和需要循环图片的对象中分别push最新上传的图片 + let imgObj = { + "Tag": null, + "Order": 0, + "Enabled": false, + "Visible": false, + "Required": false, + "RuleName": null, + "RuleValue": null, + "PhysicalUnit": null, + "PropertyName": "图片", + "PropertyType": 3, + "PropertyValue": "/api/Objects/WebPlan2D/" + this.objectName + } + + this.imagesArr.push(imgObj) + this.canvasAssetObj.PropertyInfos.push(imgObj) + + setTimeout(() => { + this.mySwiper = new Swiper('.swiper-container',{ + loop: false, + // grabCursor: true, + // 如果需要前进后退按钮 + navigation: { + nextEl: '.swiper-button-next', + prevEl: '.swiper-button-prev', + }, + on:{ + click: function(){ + _this.clickedIndex = this.clickedIndex + }, + } + }); + + this.mySwiper.slideTo(this.imagesArr.length - 1) + this.gallery.update() + }, 0); + + //判断上传素材属性图片是否超出数量 超出数量则隐藏input框 + if(this.imagesArr.length < this.imagesArrNum){//不超出input才会显示 + this.isImgNumCss = true + }else{ + this.isImgNumCss = false + } + + this.canvasData.isChange = true + }) + } else if (file && fileSize>shardSize) { //上传文件>5MB时,分块上传 + let config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.snackBar.open('上传图片文件不允许大于5mb','确定',config); + } + + } + + //不能上传图片提示 + imgNumBeyond(){ + const config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.snackBar.open('图片数量已达上限','确定',config); + } + + //删除素材属性图片 + deleteImg(){ + if(this.imagesArr.length == 0){ + const config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.snackBar.open('没有可删除的图片,请先上传','确定',config) + }else{ + // 在素材原始对象中将删除的图片去掉 + this.canvasAssetObj.PropertyInfos = [...this.canvasAssetObj.PropertyInfos.filter((item)=>{ + return item.PropertyValue != this.imagesArr[this.mySwiper.activeIndex].PropertyValue + })] + //在图片循环数组中将图片去掉 + this.imagesArr.splice(this.mySwiper.activeIndex, 1); + //更新swiper视图 + setTimeout(() => { + this.mySwiper.update(); + this.gallery.update() + }, 0); + + this.canvasData.isChange = true + } + } + + //动态属性方向select选择框 + direction(i,e){ + let index = this.canvasAssetObj.PropertyInfos.findIndex((item)=>{ + return i.PropertyName == item.PropertyName + }) + this.canvasAssetObj.PropertyInfos[index].PropertyValue = e.target.value + this.canvasData.isChange = true + } + + //动态属性供给区域select选择框 + supplyArea(i,e){ + let index = this.canvasAssetObj.PropertyInfos.findIndex((item)=>{ + return i.PropertyName == item.PropertyName + }) + this.canvasAssetObj.PropertyInfos[index].PropertyValue = e.target.value + this.canvasData.isChange = true + } + + //动态属性供给类型select选择框 + supplyType(i,e){ + let index = this.canvasAssetObj.PropertyInfos.findIndex((item)=>{ + return i.PropertyName == item.PropertyName + }) + this.canvasAssetObj.PropertyInfos[index].PropertyValue = e.target.value + this.canvasData.isChange = true + } + + ngOnInit(): void { + + this.getAllLibrary() //获取素材库 + this.getAllBuildings() //获取所有建筑 + this.getAllFirePlan() //获取当前单位灾情 + + let that = this + window.setTimeout(()=>{ + document.getElementById("functionalDomainContent").oncontextmenu = function (event) { + that.canvas.cancelPaint() + that.selectImageIndex = -1 + event.preventDefault(); + }; + }) + + this.canvasData.getMessage().subscribe((message: any)=>{ + if(message == "send a message"){ + this.refurbishTreeData() + } + }) + } + + + + ngAfterViewInit(): void { + this.getSitePlan() + // 监听canvas组件选中素材事件 + this.canvas.on("select",obj=>{ + //选中素材属性注入函数 + this.setAssetsProperty(obj.assetData) + }) + // 监听canvas组件取消选中素材事件 + this.canvas.on("deselect",obj=>{ + this.isShowProperty = false + }) + // 监听canvas组件新增素材事件 + this.canvas.on("createIcon",obj=>{ + this.renovateTreeData(false) + }) + // 监听canvas组件删除素材事件 + this.canvas.on("deleteIcon",obj=>{ + this.renovateTreeData(false) + }) + } + + copyAssetData:any //存储用于复制的素材 + //复制素材 + copyAsset(){ + this.canvas.copy() + } + //粘贴素材 + pasteAsset(){ + let companyId = sessionStorage.getItem("companyId") + let buildingId = this.beforeOneCheckedBuilding.id + let floorId = this.selectingSitePlan.id + this.canvas.paste(companyId,buildingId,floorId) + } + + basicInfo:boolean = true //基本信息名称显隐 + wantToWork:boolean = true //想定作业名称显隐 + //点击基本信息名称 + basicInfoClick(){ + this.basicInfo = !this.basicInfo + this.canvas.setNameVisible(this.basicInfo,0) + } + + //点击想定作业名称 + wantToWorkClick(){ + this.wantToWork = !this.wantToWork + this.canvas.setNameVisible(this.wantToWork,1) + } + + isEditPattern:boolean = true //是否为编辑模式 + //进入编辑模式 + editpat(){ + let config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.snackBar.open('进入编辑模式','确定',config); + this.isEditPattern = true + } + + //进入查看模式 + lookpat(){ + let config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.snackBar.open('进入查看模式','确定',config); + this.isEditPattern = false + } + + //保存平面图 + saveNum :any = [] + saveSite(){ + console.log(this.beforeOneCheckedBuilding) + this.saveNum = [] + let SitePlanData = JSON.parse(JSON.stringify(this.canvasData.originaleveryStoreyData)); + SitePlanData.data = JSON.stringify(SitePlanData.data) + let CompanyData = JSON.parse(JSON.stringify(this.canvasData.originalcompanyBuildingData)); + CompanyData.data = JSON.stringify(CompanyData.data) + + let object = this.canvasData.originalcompanyBuildingData.data + let adjoinArr = [] //毗邻数组 + + if(this.pattern){//如果是基本信息编辑模式 + for (const key in object) { + if (object[key].Name == "毗邻") {//如果是相同楼层,则筛选出毗邻 + + object[key].PropertyInfos.forEach(element => { + if(element.PropertyName == "方向"){ + adjoinArr.push(element.PropertyValue) + } + }); + } + } + + if((new Set(adjoinArr)).size != adjoinArr.length){ + let config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.snackBar.open('保存失败,毗邻存在相同方向','确定',config); + return false + }else{ + //如果是单位 总平面图 + if(this.checkedBuildingIndex==-1){ + //保存平面图数据 + this.http.post("/api/SitePlanData",SitePlanData,{ + params:{ + companyId:this.params.companyId + } + }).subscribe(data => { + this.saveNum.push("1") + if(this.saveNum.length == 5){ + this.canvasData.isChange = false + let config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.snackBar.open('保存成功','确定',config); + } + },err=>{ + let config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.canvasData.isChange = true + this.snackBar.open('平面图数据保存失败','确定',config); + }) + + //保存建筑数据 + this.http.post("/api/CompanyData",CompanyData,{ + params:{ + companyId:this.params.companyId + } + }).subscribe(data => { + this.saveNum.push("1") + if(this.saveNum.length == 5){ + this.canvasData.isChange = false + let config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.snackBar.open('保存成功','确定',config); + } + },err=>{ + let config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.canvasData.isChange = true + this.snackBar.open('单位数据保存失败','确定',config); + }) + + //批量保存单位毗邻 + let CompanyAdjoins = this.canvasData.getCompanyAdjoinInfo() + this.http.post("/api/CompanyAdjoins/Batch",CompanyAdjoins,{ + params:{ + companyId:this.params.companyId + } + }).subscribe(data => { + this.saveNum.push("1") + if(this.saveNum.length == 5){ + this.canvasData.isChange = false + let config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.snackBar.open('保存成功','确定',config); + } + },err=>{ + let config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.canvasData.isChange = true + this.snackBar.open('单位毗邻保存失败','确定',config); + }) + + //批量保存单位重点部位 + let CompanyImportantLocations = this.canvasData.getCompanyImportantLocations() + this.http.post("/api/CompanyImportantLocations/Batch",CompanyImportantLocations,{ + params:{ + companyId:this.params.companyId + } + }).subscribe(data => { + this.saveNum.push("1") + if(this.saveNum.length == 5){ + this.canvasData.isChange = false + let config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.snackBar.open('保存成功','确定',config); + } + },err=>{ + let config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.canvasData.isChange = true + this.snackBar.open('单位重点部位保存失败','确定',config); + }) + + //批量保存单位消防设施素材 + let CompanyFacilityAssets = this.canvasData.getAllCompanyFacilityAssetInfo() + this.http.post("/api/CompanyFacilityAssets/Batch",CompanyFacilityAssets,{ + params:{ + companyId:this.params.companyId + } + }).subscribe(data => { + this.saveNum.push("1") + if(this.saveNum.length == 5){ + this.canvasData.isChange = false + let config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.snackBar.open('保存成功','确定',config); + } + },err=>{ + let config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.canvasData.isChange = true + this.snackBar.open('单位消防设施素材保存失败','确定',config); + }) + + }else{ //如果是建筑 + + //建筑平面图数据 + this.http.post("/api/BuildingAreaData",SitePlanData,{ + params:{ + companyId:this.params.companyId + } + }).subscribe(data => { + this.saveNum.push("1") + if(this.saveNum.length == 5){ + this.canvasData.isChange = false + let config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.snackBar.open('保存成功','确定',config); + } + },err=>{ + let config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.canvasData.isChange = true + this.snackBar.open('平面图数据保存失败','确定',config); + }) + + //建筑数据 + this.http.post("/api/BuildingData",CompanyData,{ + params:{ + companyId:this.params.companyId + } + }).subscribe(data => { + this.saveNum.push("1") + if(this.saveNum.length == 5){ + this.canvasData.isChange = false + let config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.snackBar.open('保存成功','确定',config); + } + },err=>{ + let config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.canvasData.isChange = true + this.snackBar.open('单位数据保存失败','确定',config); + }) + + //批量保存建筑毗邻 + let buildingAdjoins = this.canvasData.getBuildingAdjoinInfo() + this.http.post(`/api/BuildingAdjoins/Batch?companyId=${this.params.companyId}&buildingId=${this.canvasData.selectStorey.buildingId}`,buildingAdjoins).subscribe(data => { + this.saveNum.push("1") + if(this.saveNum.length == 5){ + this.canvasData.isChange = false + let config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.snackBar.open('保存成功','确定',config); + } + },err=>{ + let config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.canvasData.isChange = true + this.snackBar.open('建筑毗邻保存失败','确定',config); + }) + + //批量保存建筑重点部位 + let buildingImportantLocations = this.canvasData.getBuildingImportantLocations() + this.http.post(`/api/BuildingImportantLocations/Batch?companyId=${this.params.companyId}&buildingId=${this.canvasData.selectStorey.buildingId}`,buildingImportantLocations).subscribe(data => { + this.saveNum.push("1") + if(this.saveNum.length == 5){ + this.canvasData.isChange = false + let config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.snackBar.open('保存成功','确定',config); + } + },err=>{ + let config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.canvasData.isChange = true + this.snackBar.open('建筑重点部位保存失败','确定',config); + }) + + //批量保存建筑消防设施素材 + let buildingFacilityAssets = this.canvasData.getAllBuildingFacilityAssetInfo() + this.http.post(`/api/BuildingFacilityAssets/Batch?companyId=${this.params.companyId}&buildingId=${this.canvasData.selectStorey.buildingId}`,buildingFacilityAssets).subscribe(data => { + this.saveNum.push("1") + if(this.saveNum.length == 5){ + this.canvasData.isChange = false + let config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.snackBar.open('保存成功','确定',config); + } + },err=>{ + let config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.canvasData.isChange = true + this.snackBar.open('建筑消防设施素材保存失败','确定',config); + }) + + } + } + }else{//如果是想定作业编辑模式 + const dialogRef = this.dialog.open(saveOneDialog, { + data: {allDisposalNode: this.canvasData.allDisposalNode, + selectedBuildingData:this.beforeOneCheckedBuilding, + selectedSiteData:this.selectingSitePlan, + siteOrbuilding:this.checkedBuildingIndex, + disasterId: this.allFirePlan[0].id || '' + } + }); + + dialogRef.afterClosed().subscribe(result => { + console.log('The dialog was closed'); + }); + } + } + + //获得所有的建筑物 + getAllBuildings(){ + this.http.get("/api/Buildings",{ + params:{ + companyId : this.params.companyId + } + }).subscribe(data=>{ + this.allBuildings = data + }) + } + + //拖拽tree + drop(e){ + console.log(1111,e) + } + drop2(e){ + console.log(222,e) + } + + //创建建筑 + createBuilding(){ + let data = { + allBuildings:this.allBuildings, + companyId :this.params.companyId + } + let dialogRef = this.dialog.open(CreateBuilding,{data}); + dialogRef.afterClosed().subscribe(data=>{ + if (data == "创建成功") { + const config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.snackBar.open('创建成功','确定',config); + this.getAllBuildings() + }else if (data == "创建失败") { + const config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.snackBar.open('创建失败','确定',config); + } + }); + } + + //选择建筑 + checkedBuilding(item,index){ + if (this.checkedBuildingIndex!=index) { + this.beforeOneCheckedBuilding = item + this.checkedBuildingIndex = index + if (index==-1) { //总平面图数据 + this.getSitePlan() + } else { //建筑楼层/区域数据 + this.getBuildingSitePlan(item) + } + } + } + + //编辑建筑 + editBuilding(e,item){ + e.stopPropagation(); + let dialogRef = this.dialog.open(EditBuilding,{data: {item:item}}); + dialogRef.afterClosed().subscribe(data=>{ + if (data == "修改成功") { + const config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.snackBar.open('修改成功','确定',config); + this.getAllBuildings() + }else if (data == "修改失败") { + const config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.snackBar.open('修改失败','确定',config); + } + }); + } + + //删除建筑 + deleteBuilding(e,item){ + e.stopPropagation(); + if(confirm("是否删除该建筑") == true){ + let isHave = this.canvasData.allDisposalNode.find(items=>{ return items.buildingId === item.id }) + if (isHave == undefined) { + this.http.delete(`/api/Buildings/${item.id}`).subscribe(data=>{ + const config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.snackBar.open('删除成功','确定',config); + this.http.get("/api/Buildings",{ + params:{ + companyId :this.params.companyId + } + }).subscribe(data=>{ + this.allBuildings = data + this.beforeOneCheckedBuilding = {name:"总平面图"} + this.checkedBuildingIndex = -1 + this.getSitePlan() + }) + },err=>{ + const config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.snackBar.open('删除失败','确定',config); + this.getAllBuildings() + }) + } else { //建筑 含有数据节点时 + const config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.snackBar.open('含有数据节点的建筑不允许删除','确定',config); + } + } + } + + storeyData //将建筑素材和当前楼层素材合二为一 + + //处理 tree 数据结构 + handleTreeData (storeyData) { + + this.storeyData = storeyData + let data = this.allFireElements //所有消防要素模板 + let treeData = [] //tree型 处理完成后的数据 + data.forEach(element => { + element.isTemplate = true //添加模板标识 + element.isLook = true //添加是否可见标识 + element.name!='其他'? element.children = [] : null + + if(storeyData){ + for(let key in storeyData.data){ + storeyData.data[key].isLookPattern = true + if(element.id == storeyData.data[key].FireElementId){ + storeyData.data[key].isTemplate = false + storeyData.data[key].isLook = true + + element.isNewElement = true //该节点children是否存在新添加的真实素材 标识 + + //定义查看模式下能看到的元素 + element.isLookPattern = true + if(element.parentId){ + data.forEach(i => { + if(i.id == element.parentId){ + i.isLookPattern = true + } + }) + } + // + + element.children.push(storeyData.data[key]) + } + } + } + data.forEach(item => { if (item.parentId == element.id) {element.children.push(item)} }); + }); + data.forEach(element => { + if (!element.parentId) { treeData.push(element) } + }); + this.dataSource.data = treeData + this.treeControl.expandAll() + + } + + //点击树节点 + clickTreeNode(node){ + if(this.canvasData.originalcompanyBuildingData.data[node.id]){ + this.setAssetsProperty(this.canvasData.originalcompanyBuildingData.data[node.id]) + }else if(this.canvasData.originaleveryStoreyData.data[node.id]){ + this.setAssetsProperty(this.canvasData.originaleveryStoreyData.data[node.id]) + } + + //canvas上的素材高亮 + let iconHighLightArr:any = [] + if(node.isTemplate){//如果是模板,则开始向下找 + node.children.forEach(item => { + if(item.isTemplate){//如果子节点依旧是模板,则继续开始向下找 + item.children.forEach(i => { + iconHighLightArr.push(i.Id) + }) + }else{ + iconHighLightArr.push(item.Id) + } + }) + }else{ + iconHighLightArr.push(node.id) + } + this.canvas.setHighlight(iconHighLightArr) + } + + //点击数节点的显示隐藏icon + clickLookItem(node){ + + //修改真实素材islook属性 + for(let key in this.storeyData.data){ + if(key == node.id){ + this.storeyData.data[key].isLook = !this.storeyData.data[key].isLook + } + } + + //所有消防要素模板变化islook值 + if(node.isTemplate){ + this.allFireElements.forEach(item=>{ + if(item.id == node.id || item.name == "其他"){ + item.isLook = !item.isLook + } + }) + } + + + //子节点跟随父节点的islook变化 +   if(node.children && node.children.length != 0){ +      node.children.forEach(item=>{ +        item.isLook = !node.isLook  +        if(item.children && item.children.length != 0){ +          item.children.forEach(i=>{ +            i.isLook =  !node.isLook  +          }) +        } +      }) +     } + + + this.dataSource.data = [...this.dataSource.data] + this.treeControl.expandAll() + + //canvas上的素材显隐 + let iconVisibleArr:any = [] + if(node.isTemplate){//如果是模板,则开始向下找 + node.children.forEach(item => { + if(item.isTemplate){//如果子节点依旧是模板,则继续开始向下找 + item.children.forEach(i => { + iconVisibleArr.push(i.Id) + }) + }else{ + iconVisibleArr.push(item.Id) + } + }) + }else{ + iconVisibleArr.push(node.id) + } + this.canvas.setIconVisible(iconVisibleArr,!node.isLook) + } + + //计算 可视区域内宽度, 是否缩放背景图 + backGroundScale () { + // let that = this + // let dad = this.element.nativeElement.querySelector('.functionalDomainContent').clientWidth + // let dadHeight = this.element.nativeElement.querySelector('.functionalDomainContent').clientHeight + // let left = this.element.nativeElement.querySelector('.functionalDomainLeft').clientWidth + // let right = this.element.nativeElement.querySelector('.functionalDomainRight').clientWidth + // let imgWidth = dad - left - right//可视区域内 宽度 + // let img = new Image() + // img.src = this.selectingSitePlan.imageUrl; + // img.onload = function(){ + // if (img.height > dadHeight && img.width > imgWidth) { + // let width = imgWidth/img.width + // let height = dadHeight/img.height + // that.canvas.setBackgroundScale((width>height? height : width)-0.005) + // return + // } else if (img.height > dadHeight) { + // that.canvas.setBackgroundScale((dadHeight/img.height)-0.005) + // return + // } else if (img.width > imgWidth) { + // that.canvas.setBackgroundScale((imgWidth/img.width)-0.005) + // return + // } + // }; + } + + //封装 刷新 tree 数据 + async renovateTreeData (isRefresh:boolean = true) { + this.allFireElements[this.allFireElements.length-1].children = [] + isRefresh? await this.canvas.refresh() : null + this.canvas.setNameVisible(this.basicInfo,0) + this.canvas.setNameVisible(this.wantToWork,1) + isRefresh? this.canvasData.isChange = false : null //服务中 数据是否改动 改为false + isRefresh? this.isShowProperty = true : null + isRefresh? this.isShowAttribute = true : null + !this.pattern? this.mateFireForce() : null //刷新 建筑楼层 火源/力量图标 + + let beforeOneId = this.selectingSitePlan.id || '' //当前 选中 平面图 楼层/区域 id + let companyBuildingData = JSON.parse(JSON.stringify( this.canvasData.originalcompanyBuildingData || {} )) // 当前 单位/建筑 数据 + let storeyData = JSON.parse(JSON.stringify( this.canvasData.originaleveryStoreyData || {} )) //当前 楼层 数据 + + for(let key in companyBuildingData.data){ + if (companyBuildingData.data[key].FloorId === beforeOneId) { //处理 单位/建筑 数据是否归于当前楼层下 + storeyData.data[key] = companyBuildingData.data[key] + } + } + for(let key in storeyData.data){ //筛选数据 没有匹配全部放入到 其他 数组 + let noMatch = this.allFireElements.find( every=> every.id===storeyData.data[key].FireElementId ) + if (!noMatch) { + this.allFireElements[this.allFireElements.length-1].children.push(storeyData.data[key]) + } + } + this.handleTreeData(storeyData) //处理tree数据结构 + } + + + + //陈鹏飞↓↓↓ + //陈鹏飞↓↓↓ + //陈鹏飞↓↓↓ + params = {companyId: sessionStorage.getItem('companyId')} + allFireElements:any = []; //当前 单位/建筑 下的消防要素 + + isShowAttribute:boolean = true; //属性栏 是否显示 默认数据 + isShowProperty:boolean = false //属性栏 是否有东西 + + toggleExpandPanel:boolean = false; //左侧可展开面板展开或关闭 + toggleExpandPanelRight:boolean = false; //右侧可展开面板展开或关闭 + togglePlane:boolean = true; //可展开面板平面图 显隐 + toggleMaterialBank:boolean = false; //可展开面板素材库 显隐 + toggleHandlePlans:boolean = true; //可展开面板处置预案 显隐 + //可展开面板展开或关闭 + toggle () { + this.toggleExpandPanel = !this.toggleExpandPanel + } + //可展开面板展开或关闭 + toggle2 () { + this.toggleExpandPanelRight = !this.toggleExpandPanelRight + } + //可展开面板 平面图 展开或关闭 + togglePlanarGraph () { + this.togglePlane = !this.togglePlane + } + //可展开面板 素材库 展开或关闭 + toggleMaterial () { + this.toggleMaterialBank = !this.toggleMaterialBank + } + //可展开面板 处置预案 展开或关闭 + toggleHandlePlan () { + this.toggleHandlePlans = !this.toggleHandlePlans + } + + sitePlanData:any = []; //总平面图 楼层/区域 数据 + selectingSitePlan:any; //选中的 平面图 楼层/区域 + selectSitePlanIndex:number; //选中的 平面图 楼层/区域 index + + //获取总平面图 + getSitePlan () { + let fireData = this.getFireElements(sessionStorage.getItem('buildingTypeId')) //获取单位下 消防要素 + let planData = this.getSitePlanCompanyData() //获取 单位 数据 + this.http.get('/api/SitePlans',{params:this.params}).subscribe(data=>{ + this.sitePlanData = data + this.selectingSitePlan = this.sitePlanData[0] || {} + this.canvasData.selectStorey = this.sitePlanData[0] || {} //服务中 存一份数据 + this.selectSitePlanIndex = 0 + + Promise.all([fireData,planData]).then((res)=>{ + this.getSitePlanStorey(this.selectingSitePlan) //获取 平面图 楼层数据 + }) + + }) + } + + //获取建筑 楼层/区域 + getBuildingSitePlan (item) { + let params = { buildingId: item.id } + let fireData = this.getFireElements(item.buildingTypes[0].id || '') //获取建筑下 消防要素 + let planData = this.getBuildingData(params) //获取 建筑 数据 + this.http.get('/api/BuildingAreas',{params}).subscribe(data=>{ + this.sitePlanData = data + this.selectingSitePlan = this.sitePlanData[0] || {} + this.canvasData.selectStorey = this.sitePlanData[0] || {} //服务中 存一份数据 + this.selectSitePlanIndex = 0 + + Promise.all([fireData,planData]).then((res)=>{ + this.getBuildingStorey(this.selectingSitePlan) //获取 建筑 楼层数据 + }) + + }) + } + + //根据单位类型获得所有的消防要素 + getFireElements (e) { + let params = {ids:e} + return new Promise ((resolve,reject)=>{ + this.http.get('/api/Companies/FireElements',{params}).subscribe((data:any)=>{ + this.allFireElements = data //所有消防要素 + let other = { + children: [], + computed: true, + id: '', + name: '其他', + order: 999, + parentId: null, + tag: "INPUT", + isLookPattern : true + } + this.allFireElements.push(other) + resolve('success') + }) + }) + } + + //获取 单位 数据 + getSitePlanCompanyData () { + return new Promise ((resolve,reject)=>{ + this.http.get('/api/CompanyData',{params:this.params}).subscribe((data:any)=>{ + this.canvasData.originalcompanyBuildingData = data || {} // 单位原数据 + this.canvasData.originalcompanyBuildingData.data? this.canvasData.originalcompanyBuildingData.data = JSON.parse(this.canvasData.originalcompanyBuildingData.data) : this.canvasData.originalcompanyBuildingData.data = {} + this.canvasData.originalcompanyBuildingData.version? null : this.canvasData.originalcompanyBuildingData.version = "2.0" + this.canvasData.originalcompanyBuildingData.companyId? null : this.canvasData.originalcompanyBuildingData.companyId = sessionStorage.getItem('companyId') + resolve('success') + }) + }) + } + + //获取 平面图 楼层数据 + getSitePlanStorey (e) { + let params = {sitePlanId: e.id} + this.http.get(`/api/SitePlanData`,{params}).subscribe((data:any)=>{ + this.canvasData.originaleveryStoreyData = data || {} // 楼层原数据 + this.canvasData.originaleveryStoreyData.data? this.canvasData.originaleveryStoreyData.data = JSON.parse(this.canvasData.originaleveryStoreyData.data) : this.canvasData.originaleveryStoreyData.data = {} + this.canvasData.originaleveryStoreyData.version? null : this.canvasData.originaleveryStoreyData.version = "2.0" + this.canvasData.originaleveryStoreyData.sitePlanId? null : this.canvasData.originaleveryStoreyData.sitePlanId = e.id || null + this.renovateTreeData() + }) + } + + //获取 建筑 数据 + getBuildingData (e) { + return new Promise ((resolve,reject)=>{ + this.http.get(`/api/BuildingData`,{params:e}).subscribe((data:any)=>{ + this.canvasData.originalcompanyBuildingData = data || {} // 建筑原数据 + this.canvasData.originalcompanyBuildingData.data? this.canvasData.originalcompanyBuildingData.data = JSON.parse(this.canvasData.originalcompanyBuildingData.data) : this.canvasData.originalcompanyBuildingData.data = {} + this.canvasData.originalcompanyBuildingData.version? null : this.canvasData.originalcompanyBuildingData.version = "2.0" + this.canvasData.originalcompanyBuildingData.buildingId? null : this.canvasData.originalcompanyBuildingData.buildingId = e.buildingId + resolve('success') + }) + }) + } + + //获取 建筑 楼层数据 + getBuildingStorey (e) { + let params = {buildingAreaId: e.id} + this.http.get(`/api/BuildingAreaData`,{params}).subscribe((data:any)=>{ + this.canvasData.originaleveryStoreyData = data || {} // 楼层原数据 + this.canvasData.originaleveryStoreyData.data? this.canvasData.originaleveryStoreyData.data = JSON.parse(this.canvasData.originaleveryStoreyData.data) : this.canvasData.originaleveryStoreyData.data = {} + this.canvasData.originaleveryStoreyData.version? null : this.canvasData.originaleveryStoreyData.version = "2.0" + this.canvasData.originaleveryStoreyData.buildingAreaId? null : this.canvasData.originaleveryStoreyData.buildingAreaId = e.id || null + this.renovateTreeData() + }) + } + + //点击选中 平面图 楼层/区域 时 + selectSitePlan (item,index) { + + if (this.selectSitePlanIndex != index) { + this.canvasData.selectPanelPoint = new DisposalNodeData(); + if (this.canvasData.isChange) { //true 数据被改动 + let isTrue = confirm('是否保存当前编辑数据') + if (isTrue) { //先保存数据 在切换 + let isSuccess = this.saveSite()//true的时候 先保存数据 + if (isSuccess != false) { + this.selectingSitePlan = item + this.selectSitePlanIndex = index + this.canvasData.selectStorey = item //服务中 存一份数据 + if (this.checkedBuildingIndex==-1) { //总平面图时 + this.getSitePlanStorey(item) //获取 平面图 楼层数据 + } else { //楼层/区域时 + this.getBuildingStorey(item) //获取 建筑 楼层数据 + } + } + } else { //不保存数据 直接切换 + this.selectingSitePlan = item + this.selectSitePlanIndex = index + this.canvasData.selectStorey = item //服务中 存一份数据 + if (this.checkedBuildingIndex==-1) { //总平面图时 + this.getSitePlanStorey(item) //获取 平面图 楼层数据 + } else { //楼层/区域时 + this.getBuildingStorey(item) //获取 建筑 楼层数据 + } + } + + } else { //false 数据没被改动 + this.selectingSitePlan = item + this.selectSitePlanIndex = index + this.canvasData.selectStorey = item //服务中 存一份数据 + if (this.checkedBuildingIndex==-1) { //总平面图时 + this.getSitePlanStorey(item) //获取 平面图 楼层数据 + } else { //楼层/区域时 + this.getBuildingStorey(item) //获取 建筑 楼层数据 + } + } //if + + } + } + + //新增平面图 楼层/区域 + foundPanel (e) { + e.stopPropagation() + let data = { + isBuilding: this.checkedBuildingIndex==-1? false:true, + Panel: this.beforeOneCheckedBuilding, + order: this.sitePlanData.length? this.sitePlanData[this.sitePlanData.length-1].order+1:0, + } + let dialogRef = this.dialog.open(leftFunctionalDomainComponent,{data}); + dialogRef.afterClosed().subscribe(data=>{ + if (data =='总平面图') { + this.renovateSitePlan() + } else if (data =='建筑') { + this.renovateBuilding() + } + }) + } + + //编辑平面图 楼层/区域 + editPlaneData (e) { + let data = { + isBuilding: this.checkedBuildingIndex==-1? false:true, + Panel: this.beforeOneCheckedBuilding, + buildingData: e, + } + let dialogRef = this.dialog.open(editPlaneFigureComponent,{data}); + dialogRef.afterClosed().subscribe(data=>{ + if (data =='总平面图') { + this.renovateSitePlan() + } else if (data =='建筑') { + this.renovateBuilding() + } + }) + } + + //平面图 楼层/区域 上移 + moveUp (item,index) { + if (index != 0) { + let replaceIndex = this.sitePlanData[index].order + this.sitePlanData[index].order = this.sitePlanData[index-1].order + this.sitePlanData[index-1].order = replaceIndex + if (this.checkedBuildingIndex==-1) { //总平面图 + this.http.put(`/api/SitePlans/${this.sitePlanData[index-1].id}`,this.sitePlanData[index-1]).subscribe(data=>{ + this.http.put(`/api/SitePlans/${this.sitePlanData[index].id}`,this.sitePlanData[index]).subscribe(data=>{ + this.selectSitePlanIndex = this.selectSitePlanIndex-1 + this.renovateSitePlan() + }) + }) + } else { //楼层/区域 + this.http.put(`/api/BuildingAreas/${this.sitePlanData[index-1].id}`,this.sitePlanData[index-1],{params:this.params}).subscribe(data=>{ + this.http.put(`/api/BuildingAreas/${this.sitePlanData[index].id}`,this.sitePlanData[index],{params:this.params}).subscribe(data=>{ + this.selectSitePlanIndex = this.selectSitePlanIndex-1 + this.renovateBuilding() + }) + }) + } + + } //if index + } + + //平面图 楼层/区域 下移 + moveDown (item,index) { + if (index != this.sitePlanData.length-1) { + let replaceIndex = this.sitePlanData[index].order + this.sitePlanData[index].order = this.sitePlanData[index+1].order + this.sitePlanData[index+1].order = replaceIndex + if (this.checkedBuildingIndex==-1) { //总平面图 + this.http.put(`/api/SitePlans/${this.sitePlanData[index+1].id}`,this.sitePlanData[index+1]).subscribe(data=>{ + this.http.put(`/api/SitePlans/${this.sitePlanData[index].id}`,this.sitePlanData[index]).subscribe(data=>{ + this.selectSitePlanIndex = this.selectSitePlanIndex+1 + this.renovateSitePlan() + }) + }) + } else { //楼层/区域 + this.http.put(`/api/BuildingAreas/${this.sitePlanData[index+1].id}`,this.sitePlanData[index+1],{params:this.params}).subscribe(data=>{ + this.http.put(`/api/BuildingAreas/${this.sitePlanData[index].id}`,this.sitePlanData[index],{params:this.params}).subscribe(data=>{ + this.selectSitePlanIndex = this.selectSitePlanIndex+1 + this.renovateBuilding() + }) + }) + } + + } //if index + } + + //旋转底图 + revolveImg (item) { + item.imageAngle==270? item.imageAngle = 0 : item.imageAngle = item.imageAngle+90 + if (this.checkedBuildingIndex==-1) { //总平面图 + this.http.put(`/api/SitePlans/${item.id}`,item).subscribe(data=>{ + let isSuccess = this.renovateSitePlan() + isSuccess.then(res=>{ + this.canvas.refreshBackgroundImage() + }) + }) + } else { //楼层/区域 + this.http.put(`/api/BuildingAreas/${item.id}`,item,{params:this.params}).subscribe(data=>{ + let isSuccess = this.renovateBuilding() + isSuccess.then(res=>{ + this.canvas.refreshBackgroundImage() + }) + }) + } + + } + + //删除 平面图 楼层/区域 + deletePlaneData (item) { + const isDelete = confirm('您确定要删除吗'); + if (isDelete) { + if (this.checkedBuildingIndex==-1) { //总平面图 + let isHave = this.canvasData.allDisposalNode.find(items=>{ return items.sitePlanId === item.id }) + if (isHave == undefined) { + this.http.delete(`/api/SitePlans/${item.id}`).subscribe(data=>{ + this.deleteShareData(item,-1) + }) + } else { + const config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.snackBar.open('含有数据节点的楼层不允许删除','确定',config); + } + } else { //楼层/区域 + let isHave = this.canvasData.allDisposalNode.find(items=>{ return items.buildingAreaId === item.id }) + if (isHave == undefined) { + this.http.delete(`/api/BuildingAreas/${item.id}`).subscribe(data=>{ + this.deleteShareData(item,1) + }) + } else { + const config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.snackBar.open('含有数据节点的楼层不允许删除','确定',config); + } + } + } + } + + //删除当前 单位/建筑的 共享数据中 已删除data + deleteShareData (e,isCompany) { + this.sitePlanData.forEach((element,index) => { + if (element.id===e.id) { + this.sitePlanData.splice(index,1) + return + } + }); + let data = this.canvasData.originalcompanyBuildingData; + for(let key in data.data){ + if (data.data[key].FloorId === e.id) { //处理 单位/建筑 数据是否归于当前楼层下 + delete data.data[key] + } + } + let newData = JSON.parse(JSON.stringify(this.canvasData.originalcompanyBuildingData)); + newData.data = JSON.stringify(newData.data) // 转换JSON 数据格式 + this.selectingSitePlan = this.sitePlanData[0] || {} + this.canvasData.selectStorey = this.sitePlanData[0] || {} //服务中 存一份数据 + this.selectSitePlanIndex = 0 + if (isCompany===-1) { + this.http.post("/api/CompanyData",newData).subscribe(data => {}) + this.getSitePlanStorey(this.selectingSitePlan) //获取 平面图 楼层数据 + } else { + this.http.post("/api/BuildingData",newData,{params:this.params}).subscribe(data => {}) + this.getBuildingStorey(this.selectingSitePlan) //获取 建筑 楼层数据 + } + } + + //复制图层 平面图 楼层/区域 + duplicateLayer (item) { + if (this.checkedBuildingIndex==-1) { //总平面图 + item.id = "" + item.modifiedTime = new Date() + item.name = item.name + '(副本)' + item.order = this.sitePlanData[this.sitePlanData.length-1].order+1 + this.http.post('/api/SitePlans',item).subscribe((data:any)=>{ + let newData = { + version: this.canvasData.originaleveryStoreyData.version || "2.0", + id: "", + data: JSON.stringify( JSON.parse(JSON.stringify(this.canvasData.originaleveryStoreyData.data)) ) || null, + sitePlanId: data.id + } + this.http.post('/api/SitePlanData',newData,{params:this.params}).subscribe(data=>{ + this.renovateSitePlan() + }) + + }) + } else { //楼层/区域 + item.id = "" + item.modifiedTime = new Date() + item.name = item.name + '(副本)' + item.order = this.sitePlanData[this.sitePlanData.length-1].order+1 + this.http.post('/api/BuildingAreas',item,{params:this.params}).subscribe((data:any)=>{ + let newData = { + version: this.canvasData.originaleveryStoreyData.version || "2.0", + id: "", + data: JSON.stringify( JSON.parse(JSON.stringify(this.canvasData.originaleveryStoreyData.data)) ) || null, + buildingAreaId: data.id + } + this.http.post('/api/BuildingAreaData',newData,{params:this.params}).subscribe(data=>{ + this.renovateBuilding() + }) + + }) + } + } + + //平面图 楼层/区域 替换底图 + replaceBaseMap (e,item) { + e.stopPropagation(); + let file = e.target.files[0] || null //获取上传的文件 + let fileSize = file.size || null //上传文件的总大小 + let maxSize = 5 * 1024 * 1024 //5MB一个分片 + + if (file && fileSize<=maxSize) { //上传文件<=5MB时 + let formData = new FormData() + formData.append("file",file) + this.http.post(`/api/Objects/WebPlan2D/${sessionStorage.getItem('companyId')}`,formData).subscribe((data:any)=>{ + this.renovateBaseMap(data.objectName,item) + }) + } else { + const config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.snackBar.open('上传底图需小于5MB','确定',config); + } + } + + //封装 替换底图 function + renovateBaseMap (e,item) { + item.imageUrl = '/api/Objects/WebPlan2D/' + e + if (this.checkedBuildingIndex ==-1) { //总平面图 + this.http.put(`/api/SitePlans/${item.id}`,item).subscribe(data=>{ + let isSuccess = this.renovateSitePlan() + isSuccess.then(res=>{ + this.canvas.refreshBackgroundImage() + }) + const config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.snackBar.open('上传底图成功','确定',config); + }) + } else { //楼层/区域 + this.http.put(`/api/BuildingAreas/${item.id}`,item,{params:this.params}).subscribe(data=>{ + let isSuccess = this.renovateBuilding() + isSuccess.then(res=>{ + this.canvas.refreshBackgroundImage() + }) + const config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.snackBar.open('上传底图成功','确定',config); + }) + } + } + + //封装 刷新总平面图 数据 + renovateSitePlan () { + return new Promise ((resolve,reject)=>{ + this.http.get('/api/SitePlans',{params:this.params}).subscribe(data=>{ + this.sitePlanData = data + this.selectingSitePlan = this.sitePlanData[this.selectSitePlanIndex] + this.canvasData.selectStorey = this.sitePlanData[this.selectSitePlanIndex] //服务中 存一份数据 + this.canvasData.originaleveryStoreyData.sitePlanId? null : this.canvasData.originaleveryStoreyData.sitePlanId = this.selectingSitePlan.id || null + const config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.snackBar.open('数据更新成功','确定',config); + resolve('success') + }) + }) + } + + //封装 刷新 楼层/区域 数据 + renovateBuilding () { + let params = { + buildingId: this.beforeOneCheckedBuilding.id + } + return new Promise ((resolve,reject)=>{ + this.http.get('/api/BuildingAreas',{params}).subscribe(data=>{ + this.sitePlanData = data + this.selectingSitePlan = this.sitePlanData[this.selectSitePlanIndex] + this.canvasData.selectStorey = this.sitePlanData[this.selectSitePlanIndex] //服务中 存一份数据 + this.canvasData.originaleveryStoreyData.buildingAreaId? null : this.canvasData.originaleveryStoreyData.buildingAreaId = this.selectingSitePlan.id || null + const config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.snackBar.open('数据更新成功','确定',config); + resolve('success') + }) + }) + } + + allLibrary:any = []; //所有素材库 + 素材 + selectLibrary:any; //选中的素材库 + selectImage:any; //选中的素材库图片 + selectImageIndex:number; //选中的素材库图片index + + //获取素材库 + getAllLibrary (type:string='input') { + this.http.get(`/api/AssetLibraries?tag=${type}`).subscribe((data:any)=>{ + data.forEach(element => { + element.images = [] + }); + this.allLibrary = data + this.selectImageIndex = -1 + this.canvas.cancelPaint() + }) + } + + //素材库展开面板展开时 + opened (e) { + if (!e.images.length) { //当前素材库没加载素材时 + this.http.get(`/api/Assets?libraryId=${e.id}`).subscribe((data:any)=>{ + e.images = data + }) + } + } + + //点击选中素材库图片时 + selectImg (item,items,index) { + this.selectLibrary = item.name + this.selectImage = items + this.selectImageIndex = index + this.canvasData.selectTemplateData = items + this.canvas.beginPaint() + } + + + + //处置预案 + allFirePlan:any = []; //所有灾情 + selectDisposalNode:string = ''; //当前点击tree节点 css选中样式 + + //获取所有灾情 + getAllFirePlan () { + let params = {componentId: sessionStorage.getItem('planId')} + this.http.get('/api/Disasters',{params:params}).subscribe((data:any)=>{ + if (!data.length) { //该 单位没有灾情时 + let msg = { + name: '灾情', + modifiedTime: new Date(), + planComponentId: sessionStorage.getItem('planId') + } + this.http.post('/api/Disasters',msg).subscribe(data=>{ + this.allFirePlan.push(data) + let params = {disasterId: this.allFirePlan[0].id || ''} + this.http.get('/api/DisposalNodes',{params:params}).subscribe(data=>{ //所有处置节点 + this.canvasData.allDisposalNode = data + }) + }) + } else { //单位 有灾情时 + this.allFirePlan = data + let params = {disasterId: this.allFirePlan[0].id || ''} + this.http.get('/api/DisposalNodes',{params:params}).subscribe(data=>{ //所有处置节点 + this.canvasData.allDisposalNode = data + }) + } + }) + } + + //获取所有处置节点 + getDisposalNode () { + this.selectDisposalNode = '' + let params = {disasterId: this.allFirePlan[0].id || ''} + this.http.get('/api/DisasterData/Markers',{params:params}).subscribe(data=>{ //灾情标签信息 + this.canvasData.allNodeMarkers = data + this.mateFireForce() + }) + this.http.get('/api/DisposalNodes',{params:params}).subscribe(data=>{ //处置节点 + this.canvasData.allDisposalNode = data + this.handleHybridTree() + }) + } + + treeData:any = []; //渲染tree处理完成数据 + defaultExpandedKeys:any = []; //首次渲染 tree展开状态 + //处理 节点 Tree数据 + handleHybridTree () { + this.defaultExpandedKeys = [] + let treeData = [] + let data = JSON.parse(JSON.stringify( this.canvasData.allDisposalNode || [] )) + data.forEach(element => { + this.defaultExpandedKeys.push(element.id) + element.title = element.name //name + element.key = element.id //id + element.children = [] //children + if (element.sitePlanId || element.buildingAreaId) { //是数据节点 + element.isLeaf = true + element.isDataNode = true + } else { //不是数据节点 + element.isLeaf = false + element.isDataNode = false + } + data.forEach(item=>{ + item.parentId === element.id? element.children.push(item) : null + }) + }); + data.forEach(element=>{ + !element.parentId? treeData.push(element) : null + }) + this.treeData = [...treeData] + this.defaultExpandedKeys = [...this.defaultExpandedKeys] + } + + //刷新 treeData 保存已展开节点 + refurbishTreeData () { + this.defaultExpandedKeys = [] + let params = {disasterId: this.allFirePlan[0].id || ''} + this.http.get('/api/DisposalNodes',{params:params}).subscribe(nodeData=>{ //处置节点 + this.canvasData.allDisposalNode = nodeData + let oldTreeData = this.nzTreeComponent.getExpandedNodeList() + oldTreeData.forEach(item=>{ + this.defaultExpandedKeys.push(item.key) + }) + let treeData = [] + let data = JSON.parse(JSON.stringify( this.canvasData.allDisposalNode || [] )) + data.forEach(element => { + element.title = element.name //name + element.key = element.id //id + element.children = [] //children + if (element.sitePlanId || element.buildingAreaId) { //是数据节点 + element.isLeaf = true + element.isDataNode = true + } else { //不是数据节点 + element.isLeaf = false + element.isDataNode = false + } + data.forEach(item=>{ + item.parentId === element.id? element.children.push(item) : null + }) + }); + data.forEach(element=>{ + !element.parentId? treeData.push(element) : null + }) + this.treeData = [...treeData] + this.defaultExpandedKeys = [...this.defaultExpandedKeys] + }) + } + + sitePlanIcon = {fire:0,force:0} // 总平面图 火源/力量 图标 是否展示 + + //刷新 建筑楼层 匹配 火源/力量 图标 + mateFireForce () { + let data = this.canvasData.allNodeMarkers.markers || {} + for(let key in data){ //遍历 火/力量 图标 + this.sitePlanData.forEach(element => { //楼层 + if (element.id==key) { // 相匹配时 + data[key].fireCount != 0? element.fire=1 : element.fire=0 + data[key].forceCount != 0? element.force=1 : element.force=0 + } + }); + this.allBuildings.forEach(element => { //建筑 + if (element.id==key) { // 相匹配时 + data[key].fireCount != 0? element.fire=1 : element.fire=0 + data[key].forceCount != 0? element.force=1 : element.force=0 + } + }); + if (this.params.companyId==key) { //总平面图时 + data[key].fireCount != 0? this.sitePlanIcon.fire=1 : this.sitePlanIcon.fire=0 + data[key].forceCount != 0? this.sitePlanIcon.force=1 : this.sitePlanIcon.force=0 + } + } + + let buildingMSG = this.canvasData.allNodeMarkers.highlightMarkers || {} + for (let key in buildingMSG) { + if (key === this.canvasData.selectPanelPoint.DisposalNodeId) { + for (let keys in buildingMSG[key]) { + this.sitePlanData.forEach(element => { //楼层 + if (element.id === keys) { + buildingMSG[key][keys].fireCount != 0? element.fire=2 : null + buildingMSG[key][keys].forceCount != 0? element.force=2 : null + } + }); + this.allBuildings.forEach(element => { //建筑 + if (element.id === keys) { // 相匹配时 + buildingMSG[key][keys].fireCount != 0? element.fire=2 : null + buildingMSG[key][keys].forceCount != 0? element.force=2 : null + } + }); + if (this.params.companyId === keys) { //总平面图时 + buildingMSG[key][keys].fireCount != 0? this.sitePlanIcon.fire=2 : null + buildingMSG[key][keys].forceCount != 0? this.sitePlanIcon.force=2 : null + } + } + } + } + } + + // 切换 基本信息时 刷新 删除 建筑楼层 自定义属性 + mateDeleteCustomize () { + this.defaultExpandedKeys = [] + this.sitePlanIcon = {fire:0,force:0} + this.sitePlanData.forEach(element => { //楼层 + delete element.fire + delete element.force + }); + this.allBuildings.forEach(element => { //建筑 + delete element.fire + delete element.force + }); + } + + //计算差异 + countValue (e) { + e.stopPropagation() + let params = {disasterId: this.allFirePlan[0].id || ''} + this.http.get('/api/DisasterData/Diffs',{params:params}).subscribe(data=>{ + this.canvasData.allNodeMarkers = data + this.mateFireForce() + const config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.snackBar.open('计算差异完成','确定',config); + }) + } + + //新建 处置预案 节点 + addPanelPoint (e,item,treeData) { + e.stopPropagation() + let order + if (item) { + item.children.length? order = item.children[item.children.length-1].order+1 : order = 0 + } else { + treeData.length? order = treeData[treeData.length-1].order+1 : order = 0 + } + let data = { + name: '', + level: item? 1 : 0, + order: order, + description: '', + disasterId: this.allFirePlan[0].id || '', + parentId: item? item.id : null, + planComponentId: sessionStorage.getItem('planId') || '', + } + let dialogRef = this.dialog.open(addDisposalNodeComponent,{data}); + dialogRef.afterClosed().subscribe(data=>{ + if (data) { this.refurbishTreeData() } + }) + } + + //编辑 处置预案 节点 + editPanelPoint (e,item) { + e.stopPropagation() + let data = item.origin + let dialogRef = this.dialog.open(editDisposalNodeComponent,{data}); + dialogRef.afterClosed().subscribe(data=>{ + if (data) { + item.title = data + this.canvasData.allDisposalNode.forEach(element => { element.id === item.key? element.name=data : null }); + } + }) + } + + //复制 处置预案 节点 + copyPanelPoint (e,item,treeData) { + e.stopPropagation() + if (confirm(`确定要复制 ${item.title} ?`)) { + let params = {id: item.origin.id} + let order + if (item.level==0) { + treeData.length? order = treeData[treeData.length-1].order+1 : order = 0 + } else { + let parent = item.getParentNode() //获取父节点 + parent.origin.children.length? order = parent.origin.children[parent.origin.children.length-1].order+1 : order = 0 + } + let data = { + name: item.title + '(副本)', + level: item.level, + order: order, + description: '', + disasterId: item.origin.disasterId || '', + parentId: item.origin.parentId || null, + planComponentId: item.origin.planComponentId || '', + } + this.http.post('/api/DisposalNodes/Clone',data,{params:params}).subscribe(data=>{ + this.refurbishTreeData() + }) + } //isTrue + } + + //删除 处置预案 节点 + deletePanelPoint (e,item) { + e.stopPropagation() + if (confirm(`确定要删除 ${item.name} ?`)) { + this.http.delete(`/api/DisposalNodes/${item.id}`).subscribe(data=>{ + this.refurbishTreeData() + }) + } + } + + //点击 处置Tree节点 + selectanelPoint (e) { + if (!e.buildingAreaId && !e.sitePlanId) { //当前节点 不是 数据节点 时 + let msg = this.canvasData.findDisposalNode(e.id) + this.canvasData.selectPanelPointBaseData = msg + this.selectDisposalNode == msg.id? this.selectDisposalNode = '' : this.selectDisposalNode = msg.id //选中 节点 + + } else if (e.buildingAreaId || e.sitePlanId) { //当前节点 是 数据节点 时 + let msg = this.canvasData.findDisposalNode(e.parentId) + this.canvasData.selectPanelPointBaseData = msg + this.selectDisposalNode = e.parentId //选中 节点 + + if (this.canvasData.selectPanelPoint.DisposalNodeId != e.id) { //选择节点 不是当前节点时 + let params = {nodeId: e.id} + let parameter = { //查询 节点 对应 建筑/楼层 index,id + buildingIndex: e.sitePlanId? -1 : this.allBuildings.findIndex(item=>{ return item.id===e.buildingId }), //总平面图/建筑 index + storeyId: e.sitePlanId? e.sitePlanId : e.buildingAreaId, //楼层id + } + this.http.get('/api/DisposalNodeData',{params:params}).subscribe(data=>{ + this.canvasData.selectPanelPoint = this.canvasData.deserialize(JSON.stringify(data || new DisposalNodeData())) //选择 当前 节点 + this.canvasData.selectPanelPoint.Data = this.canvasData.deserialize(this.canvasData.selectPanelPoint.Data) + this.seekPanelPoint(parameter) + }) + } //if + + } //else if + } + + //查找 数据节点 对应 建筑/楼层 + seekPanelPoint (paramsData) { + this.checkedBuildingIndex = paramsData.buildingIndex + if (paramsData.buildingIndex ==-1) { //总平面图时 + this.beforeOneCheckedBuilding={name:"总平面图"} + let fireData = this.getFireElements(sessionStorage.getItem('buildingTypeId')) //获取单位下 消防要素 + let planData = this.getSitePlanCompanyData() //获取 单位 数据 + this.http.get('/api/SitePlans',{params:this.params}).subscribe(data=>{ + this.sitePlanData = data + let index = this.sitePlanData.findIndex(item=>{ return item.id===paramsData.storeyId }) + this.selectingSitePlan = this.sitePlanData[index] || {} + this.canvasData.selectStorey = this.sitePlanData[index] || {} //服务中 存一份数据 + this.selectSitePlanIndex = index + + Promise.all([fireData,planData]).then((res)=>{ + this.getSitePlanStorey(this.selectingSitePlan) //获取 平面图 楼层数据 + }) + }) //get + } else { //建筑时 + this.beforeOneCheckedBuilding=this.allBuildings[paramsData.buildingIndex] + let params = { buildingId: this.beforeOneCheckedBuilding.id } + let fireData = this.getFireElements(this.beforeOneCheckedBuilding.buildingTypes[0].id || '') //获取建筑下 消防要素 + let planData = this.getBuildingData(params) //获取 建筑 数据 + this.http.get('/api/BuildingAreas',{params}).subscribe(data=>{ + this.sitePlanData = data + let index = this.sitePlanData.findIndex(item=>{ return item.id===paramsData.storeyId }) + this.selectingSitePlan = this.sitePlanData[index] || {} + this.canvasData.selectStorey = this.sitePlanData[index] || {} //服务中 存一份数据 + this.selectSitePlanIndex = index + + Promise.all([fireData,planData]).then((res)=>{ + this.getBuildingStorey(this.selectingSitePlan) //获取 建筑 楼层数据 + }) + }) //get + } + } + + + +} + + + +//创建建筑 +@Component({ + selector: 'app-createBuilding', + templateUrl: './createBuilding.html', + styleUrls: ['./collection-tools.component.scss'] +}) +export class CreateBuilding { + + constructor(private http:HttpClient,public dialog: MatDialog,public dialogRef: MatDialogRef,@Inject(MAT_DIALOG_DATA) public data) { } + + allBuildingType:any//所有的建筑类型 + selected:any; //选中的建筑 + ngOnInit(): void { + this.getAllBuildingType() + } + + //获得所有单位类型 + getAllBuildingType(){ + this.http.get("/api/BuildingTypes/Simple").subscribe(data=>{ + this.allBuildingType = data + }) + } + + //创建建筑功能分区 + onSubmit (e) { + let companyId = sessionStorage.getItem("companyId") + let lastBuildingOrder = this.data.allBuildings.length != 0 ? this.data.allBuildings[this.data.allBuildings.length - 1].order + 1 : 0 + let data = + { + id: "", + name: e.propertyName, + order: lastBuildingOrder , + enabled: true, + companyId: companyId, + buildingTypes: [ + { + id: e.buildingId, + name: "" + } + ] + } + this.http.post("/api/Buildings",data,{ + params:{ + companyId : this.data.companyId + } + }).subscribe(data=>{ + this.dialogRef.close("创建成功"); + },err=>{ + this.dialogRef.close("创建失败"); + }) + } +} + +//编辑建筑 +@Component({ + selector: 'app-editBuilding', + templateUrl: './editBuilding.html', + styleUrls: ['./collection-tools.component.scss'] +}) +export class EditBuilding { + + constructor(private http:HttpClient,public dialog: MatDialog,public dialogRef: MatDialogRef,@Inject(MAT_DIALOG_DATA) public data) { } + + defaultName:String = this.data.item.name//默认建筑名称 + defaultBuildingType:String = this.data.item.buildingTypes[0].id//默认建筑类型 + allBuildingType:any//所有的建筑类型 + + ngOnInit(): void { + this.getAllBuildingType() + } + + getAllBuildingType(){ + this.http.get("/api/BuildingTypes/Simple").subscribe(data=>{ + this.allBuildingType = data + }) + } + + //编辑建筑信息 + onSubmit (e) { + let companyId = sessionStorage.getItem("companyId") + let data = + { + id: this.data.item.id, + name: e.propertyName, + order: this.data.item.order, + enabled: true, + companyId: companyId, + buildingTypes: [ + { + id: e.buildingId, + name: "" + } + ] + } + this.http.put(`/api/Buildings/${this.data.item.id}`,data,{ + params:{ + id:this.data.item.id, + companyId:companyId + } + }).subscribe(data=>{ + this.dialogRef.close("修改成功"); + },err=>{ + this.dialogRef.close("修改失败"); + }) + } +} + +//查看图片大图 +@Component({ + selector: 'viewdetails', + templateUrl: './viewdetails.html', + styleUrls: ['./collection-tools.component.scss'] +}) +export class ViewDetails { + // myControl = new FormControl(); + //注入MatDialogRef,可以用来关闭对话框 + //要访问对话框组件中的数据,必须使用MAT_DIALOG_DATA注入令牌 + constructor(private http: HttpClient,public dialogRef: MatDialogRef,@Inject(MAT_DIALOG_DATA) public data,private element: ElementRef) {} + imagesArr = this.data.imagesArr + onNoClick(): void { + this.dialogRef.close(); + } + ngOnInit(): void { + setTimeout(() => { + var mySwiper = new Swiper('.swiper-container',{ + loop: false, + initialSlide :this.data.index,//默认索引 + // 如果需要前进后退按钮 + navigation: { + nextEl: '.swiper-button-next', + prevEl: '.swiper-button-prev', + } + //其他设置 + }); + }, 0); + } + closeDialog(){ + this.dialogRef.close(); + } + count = 10 + zoomimg(e) { + if(this.count != 1 || e.wheelDelta >= 120){ + if(e.wheelDelta >= 120){ + this.count++ + }else{ + this.count-- + } + } + e.srcElement.style.zoom = this.count + '0%' + e.srcElement.style.maxWidth = null + e.srcElement.style.maxHeight = null + } + +} diff --git a/src/app/ui/collection-tools/createBuilding.html b/src/app/ui/collection-tools/createBuilding.html new file mode 100644 index 0000000..16fdd7b --- /dev/null +++ b/src/app/ui/collection-tools/createBuilding.html @@ -0,0 +1,28 @@ +
    新增建筑
    +
    +
    + +
    + + + +
    +
    + + + + {{item.name}} + + + +
    +
    + + +
    +
    +
    \ No newline at end of file diff --git a/src/app/ui/collection-tools/editBuilding.html b/src/app/ui/collection-tools/editBuilding.html new file mode 100644 index 0000000..433316d --- /dev/null +++ b/src/app/ui/collection-tools/editBuilding.html @@ -0,0 +1,23 @@ +
    编辑建筑
    +
    +
    +
    + + + +
    +
    + + + + {{item.name}} + + + +
    +
    + + +
    +
    +
    \ No newline at end of file diff --git a/src/app/ui/collection-tools/editDisposalNode.html b/src/app/ui/collection-tools/editDisposalNode.html new file mode 100644 index 0000000..40b2270 --- /dev/null +++ b/src/app/ui/collection-tools/editDisposalNode.html @@ -0,0 +1,23 @@ +
    +
    + +
    + +
    + +
    + + + +
    + +
    + + +
    + +
    + +
    \ No newline at end of file diff --git a/src/app/ui/collection-tools/editPlaneFigure.html b/src/app/ui/collection-tools/editPlaneFigure.html new file mode 100644 index 0000000..a0f8016 --- /dev/null +++ b/src/app/ui/collection-tools/editPlaneFigure.html @@ -0,0 +1,39 @@ +
    + +
    + + +
    + +
    + +
    + + + +
    + +
    + 是否为避难层 +
    + +
    + + + +
    + +
    + +
    + +
    + + +
    + +
    + +
    \ No newline at end of file diff --git a/src/app/ui/collection-tools/leftFunctionalDomain.ts b/src/app/ui/collection-tools/leftFunctionalDomain.ts new file mode 100644 index 0000000..519653d --- /dev/null +++ b/src/app/ui/collection-tools/leftFunctionalDomain.ts @@ -0,0 +1,180 @@ +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'; + +@Component({ + selector: 'app-leftFunctionalDomain', + templateUrl: './addPlaneFigure.html', + styleUrls: ['./panel.scss'] +}) +export class leftFunctionalDomainComponent implements OnInit { + + constructor( + private http:HttpClient, + public dialog: MatDialog, + public snackBar: MatSnackBar, + public dialogRef: MatDialogRef, + @Inject(MAT_DIALOG_DATA) public data) { } + + ngOnInit(): void { + + } + + params = {companyId: sessionStorage.getItem('companyId')} + checked:boolean = false;//是否为避难层 + + //提交表单创建平面图 + onSubmit (e) { + if (!this.data.isBuilding) { //总平面图 创建平面图 + let data = { + companyId: sessionStorage.getItem('companyId'), + name: e.name, + order: this.data.order, + area:e.area, + details:e.details, + enabled: true, + modifiedTime: new Date(), + } + this.http.post('/api/SitePlans',data).subscribe(data=>{ + this.dialogRef.close('总平面图'); + }) + } else { //建筑 创建楼层/区域 + let data = { + isRefugeStorey: e.isRefugeStorey, + buildingId: this.data.Panel.id, + name: e.name, + order: this.data.order, + area:e.area, + details:e.details, + enabled: true, + modifiedTime: new Date(), + } + this.http.post('/api/BuildingAreas',data,{params:this.params}).subscribe(data=>{ + this.dialogRef.close('建筑'); + }) + } + } + + + +} + +//编辑平面图 楼层/区域 +@Component({ + selector: 'app-editPlaneFigure', + templateUrl: './editPlaneFigure.html', + styleUrls: ['./panel.scss'] +}) +export class editPlaneFigureComponent implements OnInit { + + constructor(private http:HttpClient,public dialog: MatDialog,public snackBar: MatSnackBar,public dialogRef: MatDialogRef,@Inject(MAT_DIALOG_DATA) public data) { } + + ngOnInit(): void { + this.name = this.data.buildingData.name || '' + this.checked = this.data.buildingData.isRefugeStorey || false + this.area = this.data.buildingData.area || 0 + this.details = this.data.buildingData.details || '' + } + + params = {companyId: sessionStorage.getItem('companyId')} + name:any; //name + checked:boolean = false;//是否为避难层 + area:number; //面积 + details:string; //详情 + + //提交表单修改平面图 + onSubmit (e) { + if (!this.data.isBuilding) { //总平面图 修改平面图 + let data = { + companyId: sessionStorage.getItem('companyId'), + id: this.data.buildingData.id, + name: e.name, + cadUrl: this.data.buildingData.cadUrl, + imageUrl: this.data.buildingData.imageUrl, + imageAngle: this.data.buildingData.imageAngle, + order: this.data.buildingData.order, + area:e.area, + details:e.details, + enabled: this.data.buildingData.enabled, + modifiedTime: new Date(), + } + this.http.put(`/api/SitePlans/${this.data.buildingData.id}`,data).subscribe(data=>{ + this.dialogRef.close('总平面图'); + }) + } else { //建筑 修改楼层/区域 + let data = { + isRefugeStorey: e.isRefugeStorey, + buildingId: this.data.Panel.id, + id: this.data.buildingData.id, + name: e.name, + cadUrl: this.data.buildingData.cadUrl, + imageUrl: this.data.buildingData.imageUrl, + imageAngle: this.data.buildingData.imageAngle, + order: this.data.buildingData.order, + area:e.area, + details:e.details, + enabled: this.data.buildingData.enabled, + modifiedTime: new Date(), + } + this.http.put(`/api/BuildingAreas/${this.data.buildingData.id}`,data,{params:this.params}).subscribe(data=>{ + this.dialogRef.close('建筑'); + }) + } + } + + + +} + + + +//创建 处置预案 节点 +@Component({ + selector: 'app-addDisposalNode', + templateUrl: './addDisposalNode.html', + styleUrls: ['./panel.scss'] +}) +export class addDisposalNodeComponent implements OnInit { + + constructor(private http:HttpClient,public dialog: MatDialog,public snackBar: MatSnackBar,public dialogRef: MatDialogRef,@Inject(MAT_DIALOG_DATA) public data) { } + + ngOnInit(): void { + } + + //提交表单 + onSubmit (e) { + this.data.name = e.name + this.http.post('/api/DisposalNodes',this.data).subscribe(data=>{ + this.dialogRef.close('success'); + }) + } + +} + + + +//编辑 处置预案 节点 +@Component({ + selector: 'app-editDisposalNode', + templateUrl: './editDisposalNode.html', + styleUrls: ['./panel.scss'] +}) +export class editDisposalNodeComponent implements OnInit { + + constructor(private http:HttpClient,public dialog: MatDialog,public snackBar: MatSnackBar,public dialogRef: MatDialogRef,@Inject(MAT_DIALOG_DATA) public data) { } + + ngOnInit(): void { + this.nodeName = JSON.parse(JSON.stringify( this.data.name || '' )) + } + nodeName:string; + + //提交表单 + onSubmit (e) { + this.data.name = e.name + this.http.put(`/api/DisposalNodes/${this.data.id}`,this.data).subscribe(data=>{ + this.dialogRef.close(e.name); + }) + } + +} \ No newline at end of file diff --git a/src/app/ui/collection-tools/panel.scss b/src/app/ui/collection-tools/panel.scss new file mode 100644 index 0000000..f0ae073 --- /dev/null +++ b/src/app/ui/collection-tools/panel.scss @@ -0,0 +1,291 @@ +.matIcons { + color: #8E909F; +} + + + +//平面图 素材库 公共样式 头部 +.planarGraphHeader{ + height: 35px; + min-height: 35px; + cursor: pointer; + display: flex; + flex-direction: row; + align-items: center; + padding: 0 24px; + border-radius: 5px; + font-family: Roboto, "Helvetica Neue", sans-serif; + font-size: 15px; + font-weight: 400; + color: #000; + background: linear-gradient(to top,#cdced1,#FFF); +} +//平面图头部字体图标样式 +.hover { + width: 18px; + height: 18px; + margin-left: 90px; + border: 1px solid #999; + border-radius: 3px; + .mat-icon {font-size: 18px; color: #999;} +} +.hover:hover { + background-color: #4DA5FA; + .mat-icon {color: #fff;} +} + +//平面图 +.sitePlanContent { + position: relative; + width: 100%; + height: 35px; + line-height: 35px; + box-sizing: border-box; + padding: 0 10px 0 25px; + .mat-icon { + font-size: 20px; + } +} + +//火源/力量 图标 +.fireForce { + display: block; + float: right; + margin: 8px 5px 0 0; + width: 40px; + height: 20px; + line-height: 20px; + text-align: center; + position: relative; + overflow: hidden; + img{ + width: 20px; + height: 20px; + } +} +//替换底图 inputfile +.a-upload { + display: block; + float: right; + margin: 8px 18px 0 0; + width: 20px; + height: 20px; + line-height: 20px; + text-align: center; + position: relative; + overflow: hidden; + input { + position: absolute; + width: 20px; + height: 20px; + left: 0; + top: 0; + opacity: 0; + } +} +.a-upload:hover { + .mat-icon { + color: #fff; + } +} +//上传底图 inputfile +#a-uploadImg { + display: block; + width: 300px; + height: 170px; + position: fixed; + top: 40%; + left: 48%; + overflow: hidden; + border-radius: 5px; + border: 1px solid #999; + z-index: 999; + input { + position: absolute; + width: 300px; + height: 170px; + left: 0; + top: 0; + opacity: 0; + } + img { + width: 100%; + height: auto; + } +} +#a-uploadImg:hover { + border: 5px solid skyblue; +} + +//hover时显示右边操作栏 +.sitePlanContent:hover { + #rightOperate { + display: block; + } +} +//右边操作栏 +#rightOperate{ + width: 50px; + height: 100px; + position: absolute; + top: -32px; + right: -48px; + z-index: 99999; + border-radius: 0 100px 100px 0; + background-color: #F0F4F7; + // #F0F4F7 cdced1 + display: none; + .functionButton { + height: 25%; + line-height: 25px; + } + .bigFunctionIcon { + font-size: 24px; + } + .functionIcon { + color: #999; + } + .functionIcon:hover { + color: #4DA5FA; + } +} + +//处置预案 素材库 公用div +.publiclBankPlan { + flex: 1; + display: flex; + flex-direction: column; + overflow: hidden; + padding-bottom: 10px; + // border-top: 1px dashed #999; +} + + + +// 基本信息/想定作业 切换 +.scenarioAssignment { + overflow-y: auto; +} +.selectEditMode { + flex: 1; + display: flex; + flex-direction: column; + overflow: hidden; +} +.materialBankDIV{ + flex: 1; + overflow-x: hidden; + overflow-y: auto; +} +// 基本信息/想定作业 切换 +//处置预案 +#terrNodePublic { + height: 35px; + line-height: 35px; + display: flex; + .textNode {flex: 1;} +} +//字体图标 +.planIconDiv { + display: inline-block; + .mat-icon{ + font-size: 20px; + width: 20px; + height: 20px; + color: #666; + margin-right: 3px; + } +} + + + +.mat-expansion-panel-header { + height: 40px !important; +} +//素材库溢出隐藏 +#materialBank { + margin: 1px 0; +} +//素材库图片flex +#panelLibrary .text{ + box-sizing: border-box; + margin-left: 10px; +} +.panelLibraryFlex { + display: flex; + flex-direction: row; + flex-wrap: wrap; + justify-content: space-between; /* 水平居中 */ + .imgBox { + width: 70px; + height: 100px; + display: inline-block; + text-align: center; + border-radius: 3px; + margin: 5px 0; + img { + width: 70px; + height: auto; + max-height: 70px; + cursor:pointer; + } + p { + font-size: 12px; + cursor:pointer; + } + } +} + +//文本溢出 +.overflowText { + overflow: hidden; + text-overflow:ellipsis; + white-space: nowrap; +} +// 楼层/区域 是避难层时 +.isRefugeStorey { + color: #fff; + background-color: rgb(238, 186, 186); +} +//选中平面图时 +.selectSitePlan { + color: #fff; + background-color: #6BC2FF; +} +//选中素材库图片时 +.selectImg { + color: #fff; + background-color: #4DA5FA; +} +//选中 处置节点时 +.selectanelPoint { + background-color: #F4C235; +} + + + +//左侧功能区弹出框样式 +.keyMargin { + width: 100%; + margin: 5px 0; + .mat-form-field { + width: 100%; + } +} +.submitBottom { + display: flex; + flex-direction: row; + flex-wrap: wrap; + justify-content: space-between; /* 水平居中 */ +} +.functionalDomainContent { + width: 300px; + height: 100%; + textarea { + border-radius: 5px; + border: 1px solid #999; + width: 100%; + height: 120px; + resize:none; + } +} diff --git a/src/app/ui/collection-tools/save.ts b/src/app/ui/collection-tools/save.ts new file mode 100644 index 0000000..5dc3b6b --- /dev/null +++ b/src/app/ui/collection-tools/save.ts @@ -0,0 +1,301 @@ +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 {CanvasShareDataService,DisposalNodeData} from '../../canvas-share-data.service' //引入服务 +// 保存想定作业第一个弹窗 +@Component({ + selector: 'dialog-overview-example-dialog', + templateUrl: 'saveOne.html', + styleUrls: ['./collection-tools.component.scss'] +}) +export class saveOneDialog { + + constructor( + private http:HttpClient, + public dialog: MatDialog, + public snackBar: MatSnackBar, + public dialogRef: MatDialogRef, + @Inject(MAT_DIALOG_DATA) public data) {} + + onNoClick(): void { + this.dialogRef.close() + } + allDisposalNode = this.data.allDisposalNode + + saveType(type){ + this.dialogRef.close() + const dialogRef = this.dialog.open(saveTwoDialog, { + data: {type: type, + allDisposalNode: this.data.allDisposalNode, + selectedBuildingData:this.data.selectedBuildingData, + selectedSiteData:this.data.selectedSiteData, + siteOrbuilding:this.data.siteOrbuilding, + disasterId:this.data.disasterId} + }); + dialogRef.afterClosed().subscribe(result => { + }); + } + +} + + // 保存想定作业第二个弹窗 +@Component({ + selector: 'dialog-overview-example-dialog', + templateUrl: 'saveTwo.html', + styleUrls: ['./collection-tools.component.scss'] +}) + export class saveTwoDialog { + + constructor( + private http:HttpClient, + public dialogRef: MatDialogRef, + public canvasData: CanvasShareDataService, + public snackBar: MatSnackBar, + @Inject(MAT_DIALOG_DATA) public data) {} + + type = this.data.type + allDisposalNode = this.data.allDisposalNode + allPlanDisposalNode = [] + allRootDisposalNode = [{name:"根节点",id:null}] + allDisposalNodeChild = [] + ngOnInit(): void { + //所有非数据节点 + this.allDisposalNode.forEach(item => { + if(!item.sitePlanId && !item.buildingAreaId){ + this.allPlanDisposalNode.push(item) + } + }) + + //所有一级节点 + this.allDisposalNode.forEach(item => { + if(!item.parentId){ + this.allRootDisposalNode.push(item) + } + }) + this.allDisposalNodeChild = JSON.parse(JSON.stringify(this.allDisposalNode)) + this.allDisposalNodeChild.forEach(item => { + item.children = [] + this.allDisposalNodeChild.forEach(i => { + if(i.parentId == item.id){ + item.children.push(i) + } + }) + }) + // console.log(this.nodeItem.id) + } + onNoClick(): void { + this.dialogRef.close(); + } + nodeItem + itemChildNum = 0 //点击处置节点子数据节点的数量 + clickNode(item){ + console.log(item) + this.nodeItem = item + this.allDisposalNodeChild.forEach(item => { + if(item.id == this.nodeItem.id){ + this.itemChildNum = item.children.length + } + }) + } + + selectedBuildingData = this.data.selectedBuildingData + selectedSiteData = this.data.selectedSiteData + onSubmit(value,type){ + // console.log(type) + let name = this.selectedBuildingData.name + '-' + this.selectedSiteData.name + //如果保存到已有节点 + var postdata = { + id: "", + name: name, + level: 0, + order: this.itemChildNum, + description: "", + notes: "", + weather: null, + airTemperature: null, + windDirection: null, + windScale: null, + imageNames: null, + imageUrls: null, + parentId: this.nodeItem ? this.nodeItem.id : null, + disasterId: this.data.disasterId, + planComponentId: sessionStorage.getItem('planId') || '', + companyId: this.data.siteOrbuilding == -1 ? sessionStorage.getItem('companyId') : null, + sitePlanId: this.data.siteOrbuilding==-1 ? this.selectedSiteData.id : null, + buildingId: this.selectedBuildingData.id || null, + buildingAreaId: this.data.siteOrbuilding!=-1 ? this.selectedSiteData.id : null + } + if(type == 'old'){ + let istrue = this.canvasData.findDisposalNode(this.nodeItem.id,name) + let putdata = this.nodeItem + putdata.weather = this.canvasData.selectPanelPointBaseData.weather + putdata.airTemperature = Number(this.canvasData.selectPanelPointBaseData.airTemperature) + putdata.windScale = Number(this.canvasData.selectPanelPointBaseData.windScale) + putdata.windDirection = Number(this.canvasData.selectPanelPointBaseData.windDirection) + putdata.description = this.canvasData.selectPanelPointBaseData.description + putdata.notes = this.canvasData.selectPanelPointBaseData.notes + + + if(istrue){//如果该处置节点下已有同名数据节点 则只修改 2个接口 + new Promise((resolve,reject)=>{ + this.http.put(`/api/DisposalNodes/${value.nodeId}`,putdata).subscribe(data => { + resolve("更新处置节点成功,将天气 节点详情等信息保存到点击的节点") + }) + }).then((values)=>{ + this.canvasData.sendMessage('send a message');//发布一条消息 + // 保存平面图数据到当前节点 + let postdata =JSON.parse(JSON.stringify(this.canvasData.selectPanelPoint)) + postdata.Data = JSON.stringify(postdata.Data) + this.http.post(`/api/DisposalNodeData`,postdata).subscribe(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) + }) + this.dialogRef.close(); + this.canvasData.sendMessage('send a message');//发布一条消息 + }) + + }else{//需要3个接口 + new Promise((resolve,reject)=>{ + this.http.put(`/api/DisposalNodes/${value.nodeId}`,putdata).subscribe(data => { + resolve("更新处置节点成功,将天气 节点详情等信息保存到点击的节点") + }) + }).then((values)=>{ + console.log(values) + postdata.level = putdata.level + 1 + new Promise((resolve,reject) => { + this.http.post(`/api/DisposalNodes`,postdata).subscribe(data => { + resolve(data) + }) + }).then((data:any)=>{ + console.log(7788,data) + let objData = { + id: "", + data: JSON.stringify(this.canvasData.selectPanelPoint.Data) || null, + version: this.canvasData.selectPanelPoint.Version || "2.0", + disposalNodeId: data.id, + planComponentId: sessionStorage.getItem("planId"), + } + this.http.post(`/api/DisposalNodeData`,objData).subscribe(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) + }) + this.dialogRef.close(); + this.canvasData.sendMessage('send a message');//发布一条消息 + }) + }) + } + + }else{//如果保存到新建节点 + let dispositionNodeData //处置节点data + let order + let oneLevelNum = [] + //将order赋值为所有一级节点最后一个+1 + this.allDisposalNode.forEach(item => { + if(!item.parentId){ + oneLevelNum.push(item) + } + }) + if(oneLevelNum.length == 0){ + order = 0 + }else{ + order = oneLevelNum[oneLevelNum.length - 1].order + 1 + } + + if(this.nodeItem){//如果点击了下拉选择框 + if(this.nodeItem.id != null){ + this.allDisposalNodeChild.forEach(item => { + if(item.id == this.nodeItem.id){ + order = item.children.length + } + }) + } + } + dispositionNodeData = { + id: "", + name: value.name, + level: this.nodeItem && this.nodeItem.id != null ? this.nodeItem.level + 1 : 0, + order: order, + description: "", + notes: "", + weather: null, + airTemperature: 0, + windDirection: 0, + windScale: 0, + imageNames: null, + imageUrls: null, + parentId: this.nodeItem ? this.nodeItem.id : null, + disasterId: this.data.disasterId, + planComponentId: sessionStorage.getItem('planId') || '', + companyId: null, + sitePlanId: null, + buildingId: null, + buildingAreaId: null + } + + dispositionNodeData.weather = this.canvasData.selectPanelPointBaseData.weather + dispositionNodeData.airTemperature = Number(this.canvasData.selectPanelPointBaseData.airTemperature) + dispositionNodeData.windScale = Number(this.canvasData.selectPanelPointBaseData.windScale) + dispositionNodeData.windDirection = Number(this.canvasData.selectPanelPointBaseData.windDirection) + dispositionNodeData.description = this.canvasData.selectPanelPointBaseData.description + dispositionNodeData.notes = this.canvasData.selectPanelPointBaseData.notes + //1.先创建一个处置节点 然后 .then 2.创建数据节点到刚创建的处置节点 3.然后拿着创建好的数据节点的id 将平面图data保存 + new Promise((resolve,reject) => { + this.http.post("/api/DisposalNodes",dispositionNodeData).subscribe((data:any) => { + resolve(data.id) + }) + }).then((id) => { + let dataNodeData + console.log("qnm",id) + new Promise((resolve,reject) => { + postdata.parentId = id + postdata.level = dispositionNodeData.level + 1 + this.http.post("/api/DisposalNodes",postdata).subscribe((data:any) => { + resolve(data) + }) + }).then((data:any) => { + // 保存平面图数据到当前节点 + // console.log(6666,data) + // let postdata =JSON.parse(JSON.stringify(this.canvasData.selectPanelPoint)) + // postdata.Data = JSON.stringify(postdata.Data) + let objData = { + id: "", + data: JSON.stringify(this.canvasData.selectPanelPoint.Data) || null, + version: this.canvasData.selectPanelPoint.Version || "2.0", + disposalNodeId: data.id, + planComponentId: sessionStorage.getItem("planId"), + } + + this.http.post(`/api/DisposalNodeData`,objData).subscribe(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) + }) + this.dialogRef.close(); + this.canvasData.sendMessage("send a message") + }) + }) + } + } +} \ No newline at end of file diff --git a/src/app/ui/collection-tools/saveOne.html b/src/app/ui/collection-tools/saveOne.html new file mode 100644 index 0000000..a6b0b32 --- /dev/null +++ b/src/app/ui/collection-tools/saveOne.html @@ -0,0 +1,5 @@ +
    处置节点保存
    +
    + + +
    \ No newline at end of file diff --git a/src/app/ui/collection-tools/saveTwo.html b/src/app/ui/collection-tools/saveTwo.html new file mode 100644 index 0000000..fec97ff --- /dev/null +++ b/src/app/ui/collection-tools/saveTwo.html @@ -0,0 +1,53 @@ +
    +
    新增节点
    +
    +
    + +
    + + + +
    +
    + + + + {{item.name}} + + + +
    +
    + + +
    +
    +
    +
    +
    +
    保存到已有节点
    +
    +
    +
    + + + + {{item.name}} + + + +
    +
    + + +
    +
    +
    +
    \ No newline at end of file diff --git a/src/app/ui/collection-tools/viewdetails.html b/src/app/ui/collection-tools/viewdetails.html new file mode 100644 index 0000000..76638c2 --- /dev/null +++ b/src/app/ui/collection-tools/viewdetails.html @@ -0,0 +1,24 @@ +
    +
    + clear +
    + +
    +
    + +
    +
    + +
    +
    +
    \ 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..fa592ec --- /dev/null +++ b/src/app/ui/organization/organization.component.ts @@ -0,0 +1,558 @@ +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)=>{ + 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..d3e39c5 --- /dev/null +++ b/src/app/ui/ui-routing.module.ts @@ -0,0 +1,65 @@ +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' +import { CollectionToolsComponent } from './collection-tools/collection-tools.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 }, + { path: 'collectionTools', component:CollectionToolsComponent }, +]; + +@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..fee20f2 --- /dev/null +++ b/src/app/ui/ui.module.ts @@ -0,0 +1,159 @@ +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 { NzTreeModule } from 'ng-zorro-antd/tree'; +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'; + +import { CollectionToolsComponent, CreateBuilding, EditBuilding, ViewDetails } from './collection-tools/collection-tools.component'; +import { WorkingAreaComponent } from '../working-area/working-area.component'; +import {leftFunctionalDomainComponent,editPlaneFigureComponent,addDisposalNodeComponent,editDisposalNodeComponent} from './collection-tools/leftFunctionalDomain' +import { saveOneDialog, saveTwoDialog } from './collection-tools/save'; +@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, CollectionToolsComponent,WorkingAreaComponent,CreateBuilding,EditBuilding,leftFunctionalDomainComponent,editPlaneFigureComponent,ViewDetails,saveOneDialog,saveTwoDialog,addDisposalNodeComponent,editDisposalNodeComponent], + + 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, + NzTreeModule, + ReactiveFormsModule, + FormsModule, + PaginatorModule, + FileUploadModule + ], + + + exports:[ + FooterComponent, + CollectionToolsComponent + ] +}) +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/app/working-area/charm.js b/src/app/working-area/charm.js new file mode 100644 index 0000000..a87804d --- /dev/null +++ b/src/app/working-area/charm.js @@ -0,0 +1,836 @@ +export class Charm { + constructor(renderingEngine = PIXI) { + + if (renderingEngine === undefined) throw new Error("Please assign a rendering engine in the constructor before using charm.js"); + + //Find out which rendering engine is being used (the default is Pixi) + this.renderer = ""; + + //If the `renderingEngine` is Pixi, set up Pixi object aliases + if (renderingEngine.ParticleContainer && renderingEngine.Sprite) { + this.renderer = "pixi"; + } + + + //An array to store the global tweens + this.globalTweens = []; + + //An object that stores all the easing formulas + this.easingFormulas = { + + //Linear + linear(x) { + return x; + }, + + //Smoothstep + smoothstep(x) { + return x * x * (3 - 2 * x); + }, + smoothstepSquared(x) { + return Math.pow((x * x * (3 - 2 * x)), 2); + }, + smoothstepCubed(x) { + return Math.pow((x * x * (3 - 2 * x)), 3); + }, + + //Acceleration + acceleration(x) { + return x * x; + }, + accelerationCubed(x) { + return Math.pow(x * x, 3); + }, + + //Deceleration + deceleration(x) { + return 1 - Math.pow(1 - x, 2); + }, + decelerationCubed(x) { + return 1 - Math.pow(1 - x, 3); + }, + + //Sine + sine(x) { + return Math.sin(x * Math.PI / 2); + }, + sineSquared(x) { + return Math.pow(Math.sin(x * Math.PI / 2), 2); + }, + sineCubed(x) { + return Math.pow(Math.sin(x * Math.PI / 2), 2); + }, + inverseSine(x) { + return 1 - Math.sin((1 - x) * Math.PI / 2); + }, + inverseSineSquared(x) { + return 1 - Math.pow(Math.sin((1 - x) * Math.PI / 2), 2); + }, + inverseSineCubed(x) { + return 1 - Math.pow(Math.sin((1 - x) * Math.PI / 2), 3); + }, + + //Spline + spline(t, p0, p1, p2, p3) { + return 0.5 * ( + (2 * p1) + + (-p0 + p2) * t + + (2 * p0 - 5 * p1 + 4 * p2 - p3) * t * t + + (-p0 + 3 * p1 - 3 * p2 + p3) * t * t * t + ); + }, + + //Bezier curve + cubicBezier(t, a, b, c, d) { + let t2 = t * t; + let t3 = t2 * t; + return a + (-a * 3 + t * (3 * a - a * t)) * t + (3 * b + t * (-6 * b + b * 3 * t)) * t + (c * 3 - c * 3 * t) * t2 + d * t3; + } + }; + + //Add `scaleX` and `scaleY` properties to Pixi sprites + this._addScaleProperties = (sprite) => { + if (this.renderer === "pixi") { + if (!("scaleX" in sprite) && ("scale" in sprite) && ("x" in sprite.scale)) { + Object.defineProperty( + sprite, + "scaleX", { + get() { + return sprite.scale.x + }, + set(value) { + sprite.scale.x = value + } + } + ); + } + if (!("scaleY" in sprite) && ("scale" in sprite) && ("y" in sprite.scale)) { + Object.defineProperty( + sprite, + "scaleY", { + get() { + return sprite.scale.y + }, + set(value) { + sprite.scale.y = value + } + } + ); + } + } + }; + } + + //The low level `tweenProperty` function is used as the foundation + //for the the higher level tween methods. + tweenProperty( + sprite, //Sprite object + property, //String property + startValue, //Tween start value + endValue, //Tween end value + totalFrames, //Duration in frames + type = "smoothstep", //The easing type + yoyo = false, //Yoyo? + delayBeforeRepeat = 0 //Delay in frames before repeating + ) { + + //Create the tween object + let o = {}; + + //If the tween is a bounce type (a spline), set the + //start and end magnitude values + let typeArray = type.split(" "); + if (typeArray[0] === "bounce") { + o.startMagnitude = parseInt(typeArray[1]); + o.endMagnitude = parseInt(typeArray[2]); + } + + //Use `o.start` to make a new tween using the current + //end point values + o.start = (startValue, endValue) => { + + //Clone the start and end values so that any possible references to sprite + //properties are converted to ordinary numbers + o.startValue = JSON.parse(JSON.stringify(startValue)); + o.endValue = JSON.parse(JSON.stringify(endValue)); + o.playing = true; + o.totalFrames = totalFrames; + o.frameCounter = 0; + + //Add the tween to the global `tweens` array. The `tweens` array is + //updated on each frame + this.globalTweens.push(o); + }; + + //Call `o.start` to start the tween + o.start(startValue, endValue); + + //The `update` method will be called on each frame by the game loop. + //This is what makes the tween move + o.update = () => { + + let time, curvedTime; + + if (o.playing) { + + //If the elapsed frames are less than the total frames, + //use the tweening formulas to move the sprite + if (o.frameCounter < o.totalFrames) { + + //Find the normalized value + let normalizedTime = o.frameCounter / o.totalFrames; + + //Select the correct easing function from the + //`ease` object’s library of easing functions + + + //If it's not a spline, use one of the ordinary easing functions + if (typeArray[0] !== "bounce") { + curvedTime = this.easingFormulas[type](normalizedTime); + } + + //If it's a spline, use the `spline` function and apply the + //2 additional `type` array values as the spline's start and + //end points + else { + curvedTime = this.easingFormulas.spline(normalizedTime, o.startMagnitude, 0, 1, o.endMagnitude); + } + + //Interpolate the sprite's property based on the curve + sprite[property] = (o.endValue * curvedTime) + (o.startValue * (1 - curvedTime)); + + o.frameCounter += 1; + } + + //When the tween has finished playing, run the end tasks + else { + sprite[property] = o.endValue; + o.end(); + } + } + }; + + //The `end` method will be called when the tween is finished + o.end = () => { + + //Set `playing` to `false` + o.playing = false; + + //Call the tween's `onComplete` method, if it's been assigned + if (o.onComplete) o.onComplete(); + + //Remove the tween from the `tweens` array + this.globalTweens.splice(this.globalTweens.indexOf(o), 1); + + //If the tween's `yoyo` property is `true`, create a new tween + //using the same values, but use the current tween's `startValue` + //as the next tween's `endValue` + if (yoyo) { + this.wait(delayBeforeRepeat).then(() => { + o.start(o.endValue, o.startValue); + }); + } + }; + + //Pause and play methods + o.play = () => o.playing = true; + o.pause = () => o.playing = false; + + //Return the tween object + return o; + } + + //`makeTween` is a general low-level method for making complex tweens + //out of multiple `tweenProperty` functions. Its one argument, + //`tweensToAdd` is an array containing multiple `tweenProperty` calls + + makeTween(tweensToAdd) { + + //Create an object to manage the tweens + let o = {}; + + //Create a `tweens` array to store the new tweens + o.tweens = []; + + //Make a new tween for each array + tweensToAdd.forEach(tweenPropertyArguments => { + + //Use the tween property arguments to make a new tween + let newTween = this.tweenProperty(...tweenPropertyArguments); + + //Push the new tween into this object's internal `tweens` array + o.tweens.push(newTween); + }); + + //Add a counter to keep track of the + //number of tweens that have completed their actions + let completionCounter = 0; + + //`o.completed` will be called each time one of the tweens + //finishes + o.completed = () => { + + //Add 1 to the `completionCounter` + completionCounter += 1; + + //If all tweens have finished, call the user-defined `onComplete` + //method, if it's been assigned. Reset the `completionCounter` + if (completionCounter === o.tweens.length) { + if (o.onComplete) o.onComplete(); + completionCounter = 0; + } + }; + + //Add `onComplete` methods to all tweens + o.tweens.forEach(tween => { + tween.onComplete = () => o.completed(); + }); + + //Add pause and play methods to control all the tweens + o.pause = () => { + o.tweens.forEach(tween => { + tween.playing = false; + }); + }; + o.play = () => { + o.tweens.forEach(tween => { + tween.playing = true; + }); + }; + + //Return the tween object + return o; + } + + /* High level tween methods */ + + //1. Simple tweens + + //`fadeOut` + fadeOut(sprite, frames = 60) { + return this.tweenProperty( + sprite, "alpha", sprite.alpha, 0, frames, "sine" + ); + } + + //`fadeIn` + fadeIn(sprite, frames = 60) { + return this.tweenProperty( + sprite, "alpha", sprite.alpha, 1, frames, "sine" + ); + } + + //`pulse` + //Fades the sprite in and out at a steady rate. + //Set the `minAlpha` to something greater than 0 if you + //don't want the sprite to fade away completely + pulse(sprite, frames = 60, minAlpha = 0) { + return this.tweenProperty( + sprite, "alpha", sprite.alpha, minAlpha, frames, "smoothstep", true + ); + } + + //2. Complex tweens + + slide( + sprite, endX, endY, + frames = 60, type = "smoothstep", yoyo = false, delayBeforeRepeat = 0 + ) { + return this.makeTween([ + + //Create the x axis tween + [sprite, "x", sprite.x, endX, frames, type, yoyo, delayBeforeRepeat], + + //Create the y axis tween + [sprite, "y", sprite.y, endY, frames, type, yoyo, delayBeforeRepeat] + + ]); + } + + breathe( + sprite, endScaleX = 0.8, endScaleY = 0.8, + frames = 60, yoyo = true, delayBeforeRepeat = 0 + ) { + + //Add `scaleX` and `scaleY` properties to Pixi sprites + this._addScaleProperties(sprite); + + return this.makeTween([ + + //Create the scaleX tween + [ + sprite, "scaleX", sprite.scaleX, endScaleX, + frames, "smoothstepSquared", yoyo, delayBeforeRepeat + ], + + //Create the scaleY tween + [ + sprite, "scaleY", sprite.scaleY, endScaleY, + frames, "smoothstepSquared", yoyo, delayBeforeRepeat + ] + ]); + } + + scale(sprite, endScaleX = 0.5, endScaleY = 0.5, frames = 60) { + + //Add `scaleX` and `scaleY` properties to Pixi sprites + this._addScaleProperties(sprite); + + return this.makeTween([ + + //Create the scaleX tween + [ + sprite, "scaleX", sprite.scaleX, endScaleX, + frames, "smoothstep", false + ], + + //Create the scaleY tween + [ + sprite, "scaleY", sprite.scaleY, endScaleY, + frames, "smoothstep", false + ] + ]); + } + + strobe( + sprite, scaleFactor = 1.3, startMagnitude = 10, endMagnitude = 20, + frames = 10, yoyo = true, delayBeforeRepeat = 0 + ) { + + let bounce = "bounce " + startMagnitude + " " + endMagnitude; + + //Add `scaleX` and `scaleY` properties to Pixi sprites + this._addScaleProperties(sprite); + + return this.makeTween([ + + //Create the scaleX tween + [ + sprite, "scaleX", sprite.scaleX, scaleFactor, frames, + bounce, yoyo, delayBeforeRepeat + ], + + //Create the scaleY tween + [ + sprite, "scaleY", sprite.scaleY, scaleFactor, frames, + bounce, yoyo, delayBeforeRepeat + ] + ]); + } + + wobble( + sprite, + scaleFactorX = 1.2, + scaleFactorY = 1.2, + frames = 10, + xStartMagnitude = 10, + xEndMagnitude = 10, + yStartMagnitude = -10, + yEndMagnitude = -10, + friction = 0.98, + yoyo = true, + delayBeforeRepeat = 0 + ) { + + let bounceX = "bounce " + xStartMagnitude + " " + xEndMagnitude; + let bounceY = "bounce " + yStartMagnitude + " " + yEndMagnitude; + + //Add `scaleX` and `scaleY` properties to Pixi sprites + this._addScaleProperties(sprite); + + let o = this.makeTween([ + + //Create the scaleX tween + [ + sprite, "scaleX", sprite.scaleX, scaleFactorX, frames, + bounceX, yoyo, delayBeforeRepeat + ], + + //Create the scaleY tween + [ + sprite, "scaleY", sprite.scaleY, scaleFactorY, frames, + bounceY, yoyo, delayBeforeRepeat + ] + ]); + + //Add some friction to the `endValue` at the end of each tween + o.tweens.forEach(tween => { + tween.onComplete = () => { + + //Add friction if the `endValue` is greater than 1 + if (tween.endValue > 1) { + tween.endValue *= friction; + + //Set the `endValue` to 1 when the effect is finished and + //remove the tween from the global `tweens` array + if (tween.endValue <= 1) { + tween.endValue = 1; + this.removeTween(tween); + } + } + }; + }); + + return o; + } + + //3. Motion path tweens + + followCurve( + sprite, + pointsArray, + totalFrames, + type = "smoothstep", + yoyo = false, + delayBeforeRepeat = 0 + ) { + + //Create the tween object + let o = {}; + + //If the tween is a bounce type (a spline), set the + //start and end magnitude values + let typeArray = type.split(" "); + if (typeArray[0] === "bounce") { + o.startMagnitude = parseInt(typeArray[1]); + o.endMagnitude = parseInt(typeArray[2]); + } + + //Use `tween.start` to make a new tween using the current + //end point values + o.start = (pointsArray) => { + o.playing = true; + o.totalFrames = totalFrames; + o.frameCounter = 0; + + //Clone the points array + o.pointsArray = JSON.parse(JSON.stringify(pointsArray)); + + //Add the tween to the `globalTweens` array. The `globalTweens` array is + //updated on each frame + this.globalTweens.push(o); + }; + + //Call `tween.start` to start the first tween + o.start(pointsArray); + + //The `update` method will be called on each frame by the game loop. + //This is what makes the tween move + o.update = () => { + + let normalizedTime, curvedTime, + p = o.pointsArray; + + if (o.playing) { + + //If the elapsed frames are less than the total frames, + //use the tweening formulas to move the sprite + if (o.frameCounter < o.totalFrames) { + + //Find the normalized value + normalizedTime = o.frameCounter / o.totalFrames; + + //Select the correct easing function + + //If it's not a spline, use one of the ordinary tween + //functions + if (typeArray[0] !== "bounce") { + curvedTime = this.easingFormulas[type](normalizedTime); + } + + //If it's a spline, use the `spline` function and apply the + //2 additional `type` array values as the spline's start and + //end points + else { + //curve = tweenFunction.spline(n, type[1], 0, 1, type[2]); + curvedTime = this.easingFormulas.spline(normalizedTime, o.startMagnitude, 0, 1, o.endMagnitude); + } + + //Apply the Bezier curve to the sprite's position + sprite.x = this.easingFormulas.cubicBezier(curvedTime, p[0][0], p[1][0], p[2][0], p[3][0]); + sprite.y = this.easingFormulas.cubicBezier(curvedTime, p[0][1], p[1][1], p[2][1], p[3][1]); + + //Add one to the `elapsedFrames` + o.frameCounter += 1; + } + + //When the tween has finished playing, run the end tasks + else { + //sprite[property] = o.endValue; + o.end(); + } + } + }; + + //The `end` method will be called when the tween is finished + o.end = () => { + + //Set `playing` to `false` + o.playing = false; + + //Call the tween's `onComplete` method, if it's been + //assigned + if (o.onComplete) o.onComplete(); + + //Remove the tween from the global `tweens` array + this.globalTweens.splice(this.globalTweens.indexOf(o), 1); + + //If the tween's `yoyo` property is `true`, reverse the array and + //use it to create a new tween + if (yoyo) { + this.wait(delayBeforeRepeat).then(() => { + o.pointsArray = o.pointsArray.reverse(); + o.start(o.pointsArray); + }); + } + }; + + //Pause and play methods + o.pause = () => { + o.playing = false; + }; + o.play = () => { + o.playing = true; + }; + + //Return the tween object + return o; + } + + walkPath( + sprite, //The sprite + originalPathArray, //A 2D array of waypoints + totalFrames = 300, //The duration, in frames + type = "smoothstep", //The easing type + loop = false, //Should the animation loop? + yoyo = false, //Shoud the direction reverse? + delayBetweenSections = 0 //Delay, in milliseconds, between sections + ) { + + //Clone the path array so that any possible references to sprite + //properties are converted into ordinary numbers + let pathArray = JSON.parse(JSON.stringify(originalPathArray)); + + //Figure out the duration, in frames, of each path section by + //dividing the `totalFrames` by the length of the `pathArray` + let frames = totalFrames / pathArray.length; + + //Set the current point to 0, which will be the first waypoint + let currentPoint = 0; + + //The `makePath` function creates a single tween between two points and + //then schedules the next path to be made after it + let makePath = (currentPoint) => { + + //Use the `makeTween` function to tween the sprite's + //x and y position + let tween = this.makeTween([ + + //Create the x axis tween between the first x value in the + //current point and the x value in the following point + [ + sprite, + "x", + pathArray[currentPoint][0], + pathArray[currentPoint + 1][0], + frames, + type + ], + + //Create the y axis tween in the same way + [ + sprite, + "y", + pathArray[currentPoint][1], + pathArray[currentPoint + 1][1], + frames, + type + ] + ]); + + //When the tween is complete, advance the `currentPoint` by one. + //Add an optional delay between path segments, and then make the + //next connecting path + tween.onComplete = () => { + + //Advance to the next point + currentPoint += 1; + + //If the sprite hasn't reached the end of the + //path, tween the sprite to the next point + if (currentPoint < pathArray.length - 1) { + this.wait(delayBetweenSections).then(() => { + tween = makePath(currentPoint); + }); + } + + //If we've reached the end of the path, optionally + //loop and yoyo it + else { + + //Reverse the path if `loop` is `true` + if (loop) { + + //Reverse the array if `yoyo` is `true` + if (yoyo) pathArray.reverse(); + + //Optionally wait before restarting + this.wait(delayBetweenSections).then(() => { + + //Reset the `currentPoint` to 0 so that we can + //restart at the first point + currentPoint = 0; + + //Set the sprite to the first point + sprite.x = pathArray[0][0]; + sprite.y = pathArray[0][1]; + + //Make the first new path + tween = makePath(currentPoint); + + //... and so it continues! + }); + } + } + }; + + //Return the path tween to the main function + return tween; + }; + + //Make the first path using the internal `makePath` function (below) + let tween = makePath(currentPoint); + + //Pass the tween back to the main program + return tween; + } + + walkCurve( + sprite, //The sprite + pathArray, //2D array of Bezier curves + totalFrames = 300, //The duration, in frames + type = "smoothstep", //The easing type + loop = false, //Should the animation loop? + yoyo = false, //Should the direction reverse? + delayBeforeContinue = 0 //Delay, in milliseconds, between sections + ) { + + //Divide the `totalFrames` into sections for each part of the path + let frames = totalFrames / pathArray.length; + + //Set the current curve to 0, which will be the first one + let currentCurve = 0; + + //The `makePath` function + let makePath = (currentCurve) => { + + //Use the custom `followCurve` function to make + //a sprite follow a curve + let tween = this.followCurve( + sprite, + pathArray[currentCurve], + frames, + type + ); + + //When the tween is complete, advance the `currentCurve` by one. + //Add an optional delay between path segments, and then make the + //next path + tween.onComplete = () => { + currentCurve += 1; + if (currentCurve < pathArray.length) { + this.wait(delayBeforeContinue).then(() => { + tween = makePath(currentCurve); + }); + } + + //If we've reached the end of the path, optionally + //loop and reverse it + else { + if (loop) { + if (yoyo) { + + //Reverse order of the curves in the `pathArray` + pathArray.reverse(); + + //Reverse the order of the points in each curve + pathArray.forEach(curveArray => curveArray.reverse()); + } + + //After an optional delay, reset the sprite to the + //beginning of the path and make the next new path + this.wait(delayBeforeContinue).then(() => { + currentCurve = 0; + sprite.x = pathArray[0][0]; + sprite.y = pathArray[0][1]; + tween = makePath(currentCurve); + }); + } + } + }; + + //Return the path tween to the main function + return tween; + }; + + //Make the first path + let tween = makePath(currentCurve); + + //Pass the tween back to the main program + return tween; + } + + //4. Utilities + + /* + The `wait` method lets you set up a timed sequence of events + + wait(1000) + .then(() => console.log("One")) + .then(() => wait(1000)) + .then(() => console.log("Two")) + .then(() => wait(1000)) + .then(() => console.log("Three")) + + */ + + wait(duration = 0) { + return new Promise((resolve, reject) => { + setTimeout(resolve, duration); + }); + } + + //A utility to remove tweens from the game + removeTween(tweenObject) { + + //Remove the tween if `tweenObject` doesn't have any nested + //tween objects + if (!tweenObject.tweens) { + tweenObject.pause(); + + //array.splice(-1,1) will always remove last elemnt of array, so this + //extra check prevents that (Thank you, MCumic10! https://github.com/kittykatattack/charm/issues/5) + if (this.globalTweens.indexOf(tweenObject) != -1) { + this.globalTweens.splice(this.globalTweens.indexOf(tweenObject), 1); + } + + //Otherwise, remove the nested tween objects + } else { + tweenObject.pause(); + tweenObject.tweens.forEach(element => { + this.globalTweens.splice(this.globalTweens.indexOf(element), 1); + }); + } + } + + update() { + + //Update all the tween objects in the `globalTweens` array + if (this.globalTweens.length > 0) { + for (let i = this.globalTweens.length - 1; i >= 0; i--) { + let tween = this.globalTweens[i]; + if (tween) tween.update(); + } + } + } +} \ No newline at end of file diff --git a/src/app/working-area/model/arrows.ts b/src/app/working-area/model/arrows.ts new file mode 100644 index 0000000..a553771 --- /dev/null +++ b/src/app/working-area/model/arrows.ts @@ -0,0 +1,41 @@ +import { WorkingAreaComponent } from '../working-area.component'; +import * as PIXI from 'pixi.js'; + +/** + * 箭头 + * 创建一个只有2个点组成的箭头 + */ +export class Arrows extends PIXI.Container { + public line: PIXI.Graphics = new PIXI.Graphics(); + public ready = false; + constructor(public assetData: any, private workingArea: WorkingAreaComponent) { + super(); + this.workingArea.backgroundImage.addChild(this); + this.name = this.assetData.Id; + this.addChild(this.line); + this.refresh(); + this.interactive = true; + this.on('mousedown', event => { + if (!this.ready) { return; } + event.stopPropagation(); + this.workingArea.selection.selectOne(this); + }); + } + /** + * 刷新 + */ + public refresh() { + this.line.clear(); + this.line.lineStyle(5, 0xff0000, 1); + this.line.moveTo(this.assetData.pointA.x, this.assetData.pointA.y); + this.line.lineTo(this.assetData.pointB.x, this.assetData.pointB.y); + + const angle = Math.atan2((this.assetData.pointB.y - this.assetData.pointA.y), (this.assetData.pointB.x - this.assetData.pointA.x)) + * (180 / Math.PI) + 90; + + this.line.beginFill(0xff0000); + console.log(Math.PI / 180 / 1.6); + this.line.drawStar(this.assetData.pointB.x, this.assetData.pointB.y, 3, 10, 0, (Math.PI / 180 * angle)); + this.line.endFill(); + } +} diff --git a/src/app/working-area/model/gameMode.ts b/src/app/working-area/model/gameMode.ts new file mode 100644 index 0000000..feabdbb --- /dev/null +++ b/src/app/working-area/model/gameMode.ts @@ -0,0 +1,7 @@ +/** + * 游戏状态 + */ +export enum GameMode { + BasicInformation, + Assignment +} \ No newline at end of file diff --git a/src/app/working-area/model/multipointIcon.ts b/src/app/working-area/model/multipointIcon.ts new file mode 100644 index 0000000..50b1c34 --- /dev/null +++ b/src/app/working-area/model/multipointIcon.ts @@ -0,0 +1,243 @@ +import { WorkingAreaComponent } from '../working-area.component'; +import { GameMode } from './gameMode'; +import * as PIXI from 'pixi.js'; + +/** + * 多点连线 + */ +export class MultipointIcon extends PIXI.Container { + public pointsData: PIXI.Point[]; + public pointsGraphics: PIXI.Graphics[] = []; + public iconsTilingSprite: PIXI.TilingSprite[] = []; + style = new PIXI.TextStyle({ + fontFamily: 'Arial', + fontSize: 18, + fontStyle: 'normal', + fontWeight: 'bold', + fill: ['#000000'], + stroke: '#ffffff', + strokeThickness: 3, + dropShadow: true, + dropShadowColor: '#000000', + dropShadowBlur: 3, + dropShadowAngle: Math.PI / 6, + dropShadowDistance: 1, + wordWrap: false, + wordWrapWidth: 100, + }); + + public text = new PIXI.Text(this.assetData.Name + + '\r\n' + + this.assetData.PropertyInfos?.find(item => item.PropertyName === '名称/编号')?.PropertyValue, this.style); + /** + * + * @param texture 图片素材 + * @param points 点集合 + */ + constructor(public assetData: any, private workingArea: WorkingAreaComponent) { + super(); + this.name = this.assetData.Id; + this.pointsData = this.assetData.MultiPoint; + this.x = this.assetData.Point.x; + this.y = this.assetData.Point.y; + this.workingArea.backgroundImage.addChild(this); + // 画线图标 + for (let i = 0, count = this.pointsData.length - 1; i < count; i++) { + const pointA = this.pointsData[i]; + const pointB = this.pointsData[i + 1]; + + const angle = Math.atan2((pointB.y - pointA.y), (pointB.x - pointA.x)) * (180 / Math.PI); + const a = pointB.x - pointA.x; + const b = pointB.y - pointA.y; + const distance = Math.sqrt(a * a + b * b); + + const icon = new PIXI.TilingSprite(PIXI.Texture.from(this.assetData.ImageUrl), distance, 64); + icon.anchor.set(0, 0.5); + icon.x = pointA.x; + icon.y = pointA.y; + icon.angle = angle; + this.iconsTilingSprite.push(icon); + this.addChild(icon); + if (i === 0) { + this.text.anchor.set(0.5); + this.text.position = icon.position; + this.text.y -= this.assetData.Height; + this.addChild(this.text); + } + } + // 画点 + this.pointsData.forEach((item, index, array) => { + const iconPoint = new PIXI.Graphics(); + iconPoint.lineStyle(1, 0xFFBD01, 1); + iconPoint.beginFill(0xFFFFFF, 1); + iconPoint.drawCircle(0, 0, 15); + iconPoint.x = item.x; + iconPoint.y = item.y; + iconPoint.endFill(); + iconPoint.visible = false; + this.pointsGraphics.push(iconPoint); + this.addChild(iconPoint); + }); + // 添加圆点事件 + this.pointsGraphics.forEach((item, index, array) => { + item.interactive = true; + item.on('mousedown', event => { + event.stopPropagation(); + if (this.workingArea.allowEdit && this.assetData.GameMode === this.workingArea.canvasData.gameMode) { + event.currentTarget.data = event.data; + event.currentTarget.alpha = 0.5; + event.currentTarget.dragging = true; + } + }) + .on('mouseup', event => { + if (event.currentTarget.dragging) { + event.currentTarget.alpha = 1; + event.currentTarget.dragging = false; + event.currentTarget.data = null; + } + }) + .on('mouseupoutside', event => { + if (event.currentTarget.dragging) { + event.currentTarget.alpha = 1; + event.currentTarget.dragging = false; + event.currentTarget.data = null; + } + }) + .on('mousemove', event => { + if (event.currentTarget.dragging) { + const newPosition = event.currentTarget.data.getLocalPosition(event.currentTarget.parent); + event.currentTarget.x = newPosition.x; + event.currentTarget.y = newPosition.y; + + this.assetData.MultiPoint[index].x = newPosition.x; + this.assetData.MultiPoint[index].y = newPosition.y; + this.workingArea.canvasData.isChange = true; + + if (index === 0) {// 第一个点 + this.iconsTilingSprite[index].x = newPosition.x; + this.iconsTilingSprite[index].y = newPosition.y; + + const pointA = array[index]; + const pointB = array[index + 1]; + + const angle = Math.atan2((pointB.y - pointA.y), (pointB.x - pointA.x)) * (180 / Math.PI); + const a = pointB.x - pointA.x; + const b = pointB.y - pointA.y; + const distance = Math.sqrt(a * a + b * b); + this.iconsTilingSprite[index].angle = angle; + this.iconsTilingSprite[index].width = distance; + + this.text.position = this.iconsTilingSprite[index].position; + this.text.y -= this.assetData.Height; + } else if (index < array.length - 1) {// 不是第一个点,也不是最后一个点 + this.iconsTilingSprite[index].x = newPosition.x; + this.iconsTilingSprite[index].y = newPosition.y; + + const pointA = array[index]; // 当前点 + const pointB = array[index + 1]; // 后一个点 + const pointC = array[index - 1]; // 前一个点 + + const angle = Math.atan2((pointB.y - pointA.y), (pointB.x - pointA.x)) * (180 / Math.PI); + const a = pointB.x - pointA.x; + const b = pointB.y - pointA.y; + const distance = Math.sqrt(a * a + b * b); + this.iconsTilingSprite[index].angle = angle; + this.iconsTilingSprite[index].width = distance; + + const angleC = Math.atan2((pointA.y - pointC.y), (pointA.x - pointC.x)) * (180 / Math.PI); + const aC = pointA.x - pointC.x; + const bC = pointA.y - pointC.y; + const distanceC = Math.sqrt(aC * aC + bC * bC); + this.iconsTilingSprite[index - 1].angle = angleC; + this.iconsTilingSprite[index - 1].width = distanceC; + } else if (index === array.length - 1) { // 最后一个点 + const pointA = array[index]; // 当前点 + const pointC = array[index - 1]; // 前一个点 + + const angleC = Math.atan2((pointA.y - pointC.y), (pointA.x - pointC.x)) * (180 / Math.PI); + const aC = pointA.x - pointC.x; + const bC = pointA.y - pointC.y; + const distanceC = Math.sqrt(aC * aC + bC * bC); + this.iconsTilingSprite[index - 1].angle = angleC; + this.iconsTilingSprite[index - 1].width = distanceC; + } + } + }) + .on('rightclick', event => { + }) + .on('mouseover', event => { + + }); + }); + // // 缩放 + // this.workingArea.on('backgroundScale', data => { + // const scale = 1 / data; + // this.text.scale.set(scale); + // }); + // 添加选中事件 + this.iconsTilingSprite.forEach((item, index, array) => { + item.interactive = true; + item.on('mousedown', event => { + event.stopPropagation(); + this.workingArea.selection.selectOne(this); + if (this.workingArea.allowEdit && this.assetData.GameMode === this.workingArea.canvasData.gameMode) { + event.currentTarget.parent.data = event.data; + event.currentTarget.parent.alpha = 0.5; + event.currentTarget.parent.dragging = true; + + event.currentTarget.parent.dragPoint = event.data.getLocalPosition(event.currentTarget.parent.parent); + event.currentTarget.parent.dragPoint.x -= event.currentTarget.parent.x; + event.currentTarget.parent.dragPoint.y -= event.currentTarget.parent.y; + } + }) + .on('mouseup', event => { + if (event.currentTarget.parent.dragging) { + event.currentTarget.parent.alpha = 1; + event.currentTarget.parent.dragging = false; + event.currentTarget.parent.data = null; + } + }) + .on('mouseupoutside', event => { + if (event.currentTarget.parent.dragging) { + event.currentTarget.parent.alpha = 1; + event.currentTarget.parent.dragging = false; + event.currentTarget.parent.data = null; + } + }) + .on('mousemove', event => { + if (event.currentTarget.parent.dragging) { + const newPosition = event.currentTarget.parent.data.getLocalPosition(event.currentTarget.parent.parent); + event.currentTarget.parent.x = newPosition.x - event.currentTarget.parent.dragPoint.x; + event.currentTarget.parent.y = newPosition.y - event.currentTarget.parent.dragPoint.y; + + this.assetData.Point = new PIXI.Point(this.x, this.y); + this.workingArea.canvasData.isChange = true; + } + }) + .on('rightclick', event => { + + }); + }); + } + /** + * 设置点显示状态 + * @param value 显示状态 + */ + public setPointVisiable(value: boolean) { + this.pointsGraphics.forEach((item) => { + item.visible = value; + }); + } + // 设置名称 + public setNameVisible(value: boolean, mode: GameMode) { + if (this.assetData.GameMode === mode) { + this.text.visible = value; + } + } + // + public refresh() { + this.text.text = this.assetData.Name + + '\r\n' + + this.assetData.PropertyInfos.find(item => item.PropertyName === '名称/编号')?.PropertyValue; + } +} \ No newline at end of file diff --git a/src/app/working-area/model/paintModel.ts b/src/app/working-area/model/paintModel.ts new file mode 100644 index 0000000..034dd7b --- /dev/null +++ b/src/app/working-area/model/paintModel.ts @@ -0,0 +1,12 @@ +/** + * 绘制模式 + */ +export enum PaintMode { + singlePointIcon, + lineIcon, + polygonIcon, + endPaint, + Pipeline, + Arrows, + Car +} diff --git a/src/app/working-area/model/pipeline.ts b/src/app/working-area/model/pipeline.ts new file mode 100644 index 0000000..b85f6ac --- /dev/null +++ b/src/app/working-area/model/pipeline.ts @@ -0,0 +1,57 @@ +import { WorkingAreaComponent } from '../working-area.component'; +import * as PIXI from 'pixi.js'; + +/** + * 管线 + */ +export class Pipeline extends PIXI.Container { + public line: PIXI.Graphics = new PIXI.Graphics(); + constructor(public assetData: any, private workingArea: WorkingAreaComponent) { + super(); + this.name = this.assetData.Id; + this.x = this.assetData.Point.x; + this.y = this.assetData.Point.y; + this.workingArea.backgroundImage.addChild(this); + this.addChild(this.line); + // 画线图标 + this.refresh(); + this.interactive = true; + this.on('mousedown', event => { + console.log(this.assetData); + event.stopPropagation(); + this.workingArea.selection.selectOne(this); + }); + } + /** + * 刷新 + */ + public refresh() { + this.line.clear(); + this.line.lineStyle(5, 0x0000ff, 1); + for (let i = 0, count = this.assetData.MultiPoint.length; i < count; i++) { + const pointA = this.assetData.MultiPoint[i]; + if (i === 0) { + this.line.moveTo(pointA.x, pointA.y); + } else { + this.line.lineTo(pointA.x, pointA.y); + if (i === count - 1) { + const pointB = this.assetData.MultiPoint[i - 1]; + const angle = Math.atan2((pointA.y - pointB.y), (pointA.x - pointB.x)) * (180 / Math.PI) + 90; + this.line.beginFill(0x0000ff); + this.line.drawStar(pointA.x, pointA.y, 3, 5, 0, (Math.PI / 180 * angle)); + } else { + this.line.drawCircle(pointA.x, pointA.y, 5); + } + } + } + this.line.endFill(); + // if (this.assetData.MultiPoint.length >= 2) { + // const pointA = this.assetData.MultiPoint[this.assetData.MultiPoint.length - 2]; + // const pointB = this.assetData.MultiPoint[this.assetData.MultiPoint.length - 1]; + // const angle = Math.atan2((pointB.y - pointA.y), (pointB.x - pointA.x)) * (180 / Math.PI) + 90; + // this.beginFill(0x0000ff); + // this.drawStar(pointB.x, pointB.y, 3, 5, 0, (Math.PI / 180 * angle)); + // this.endFill(); + // } + } +} \ No newline at end of file diff --git a/src/app/working-area/model/polygonIcon.ts b/src/app/working-area/model/polygonIcon.ts new file mode 100644 index 0000000..3c604df --- /dev/null +++ b/src/app/working-area/model/polygonIcon.ts @@ -0,0 +1,244 @@ +import { WorkingAreaComponent } from '../working-area.component'; +import { GameMode } from './gameMode'; +import * as PIXI from 'pixi.js'; + +/** + * 多边形 + */ +export class PolygonIcon extends PIXI.Container { + public pointsData: PIXI.Point[]; + public pointsGraphics: PIXI.Graphics[] = []; + public polygonGraphics: PIXI.Graphics = new PIXI.Graphics(); + public polygonLineGraphics: PIXI.Graphics = new PIXI.Graphics(); + style = new PIXI.TextStyle({ + fontFamily: 'Arial', + fontSize: 18, + fontStyle: 'normal', + fontWeight: 'bold', + fill: ['#000000'], + stroke: '#ffffff', + strokeThickness: 3, + dropShadow: true, + dropShadowColor: '#000000', + dropShadowBlur: 3, + dropShadowAngle: Math.PI / 6, + dropShadowDistance: 1, + wordWrap: false, + wordWrapWidth: 100, + }); + + public text = new PIXI.Text(this.assetData.Name + + '\r\n' + + this.assetData.PropertyInfos.find(item => item.PropertyName === '名称/编号')?.PropertyValue, this.style); + /** + * + * @param points 点集合 + */ + constructor(public assetData: any, private workingArea: WorkingAreaComponent) { + super(); + this.name = this.assetData.Id; + this.x = this.assetData.Point.x; + this.y = this.assetData.Point.y; + this.pointsData = this.assetData.MultiPoint; + this.workingArea.backgroundImage.addChild(this); + this.sortableChildren = true; + // 画点 + this.pointsData.forEach((item, index, array) => { + const iconPoint = new PIXI.Graphics(); + iconPoint.lineStyle(1, 0xFFBD01, 1); + iconPoint.beginFill(0xFFFFFF, 1); + iconPoint.drawCircle(0, 0, 15); + iconPoint.x = item.x; + iconPoint.y = item.y; + iconPoint.endFill(); + iconPoint.visible = false; + this.pointsGraphics.push(iconPoint); + this.addChild(iconPoint); + }); + // 填充多边形 + + const color: number = this.assetData.Color.substring(0, 7).replace('#', '0x'); + const angle: number = parseInt(this.assetData.Color.substring(7), 16) / 255; + this.polygonGraphics.beginFill(color, angle); + this.polygonGraphics.drawPolygon(this.getPoints()); + this.polygonGraphics.endFill(); + this.addChild(this.polygonGraphics); + // 画多边形 + this.polygonLineGraphics.lineStyle(5, 0xFFBD01, 1); + this.polygonLineGraphics.drawPolygon(this.getPoints()); + this.polygonLineGraphics.closePath(); + this.addChild(this.polygonLineGraphics); + + this.text.anchor.set(0.5); + this.text.position = this.calculatePolygonGravityCenter(this.pointsData); + // console.log(this.calculatePolygonGravityCenter(this.pointsData)); + this.polygonGraphics.addChild(this.text); + // 添加圆点事件 + this.pointsGraphics.forEach((item, index, array) => { + item.interactive = true; + item.zIndex = 1; + item.on('mousedown', event => { + event.stopPropagation(); + if (this.workingArea.allowEdit && this.assetData.GameMode === this.workingArea.canvasData.gameMode) { + event.currentTarget.data = event.data; + event.currentTarget.alpha = 0.5; + event.currentTarget.dragging = true; + } + }) + .on('mouseup', event => { + if (event.currentTarget.dragging) { + event.currentTarget.alpha = 1; + event.currentTarget.dragging = false; + event.currentTarget.data = null; + } + }) + .on('mouseupoutside', event => { + if (event.currentTarget.dragging) { + event.currentTarget.alpha = 1; + event.currentTarget.dragging = false; + event.currentTarget.data = null; + } + }) + .on('mousemove', event => { + if (event.currentTarget.dragging) { + const newPosition = event.currentTarget.data.getLocalPosition(event.currentTarget.parent); + event.currentTarget.x = newPosition.x; + event.currentTarget.y = newPosition.y; + + this.assetData.MultiPoint[index].x = newPosition.x; + this.assetData.MultiPoint[index].y = newPosition.y; + this.workingArea.canvasData.isChange = true; + // 填充多边形 + this.polygonGraphics.clear(); + this.polygonGraphics.beginFill(color, angle); + this.polygonGraphics.drawPolygon(this.getPoints()); + this.polygonGraphics.endFill(); + // 画多边形 + this.polygonLineGraphics.clear(); + this.polygonLineGraphics.lineStyle(5, 0xFFBD01, 1); + this.polygonLineGraphics.drawPolygon(this.getPoints()); + this.polygonLineGraphics.closePath(); + + this.text.position = this.calculatePolygonGravityCenter(this.pointsData); + } + }) + .on('rightclick', event => { + }); + }); + // 添加选中事件 + this.polygonGraphics.interactive = true; + this.polygonGraphics + .on('mousedown', event => { + event.stopPropagation(); + this.workingArea.selection.selectOne(this); + if (this.workingArea.allowEdit && this.assetData.GameMode === this.workingArea.canvasData.gameMode) { + event.currentTarget.parent.data = event.data; + event.currentTarget.parent.alpha = 0.5; + event.currentTarget.parent.dragging = true; + + event.currentTarget.parent.dragPoint = event.data.getLocalPosition(event.currentTarget.parent.parent); + event.currentTarget.parent.dragPoint.x -= event.currentTarget.parent.x; + event.currentTarget.parent.dragPoint.y -= event.currentTarget.parent.y; + } + }) + .on('mouseup', event => { + if (event.currentTarget.parent.dragging) { + event.currentTarget.parent.alpha = 1; + event.currentTarget.parent.dragging = false; + event.currentTarget.parent.data = null; + } + }) + .on('mouseupoutside', event => { + if (event.currentTarget.parent.dragging) { + event.currentTarget.parent.alpha = 1; + event.currentTarget.parent.dragging = false; + event.currentTarget.parent.data = null; + } + }) + .on('mousemove', event => { + if (event.currentTarget.parent.dragging) { + const newPosition = event.currentTarget.parent.data.getLocalPosition(event.currentTarget.parent.parent); + event.currentTarget.parent.x = newPosition.x - event.currentTarget.parent.dragPoint.x; + event.currentTarget.parent.y = newPosition.y - event.currentTarget.parent.dragPoint.y; + + this.assetData.Point = new PIXI.Point(this.x, this.y); + this.workingArea.canvasData.isChange = true; + } + }) + .on('rightclick', event => { + // this.workingArea.selection.deselectAll(); + }); + // // 缩放 + // this.workingArea.on('backgroundScale', data => { + // const scale = 1 / data; + // this.text.scale.set(scale); + // }); + } + /** + * 设置点显示状态 + * @param value 显示状态 + */ + public setPointVisiable(value: boolean) { + this.pointsGraphics.forEach((item) => { + item.visible = value; + }); + } + + public calculatePolygonGravityCenter(points: PIXI.Point[]) { + let area = 0.0; // 多边形面积 + let gravityLat = 0.0; // 重心点 latitude + let gravityLng = 0.0; // 重心点 longitude + points.forEach((item, index) => { + // 1 + const lat = item.x; + const lng = item.y; + const nextLat = points[(index + 1) % points.length].x; + const nextLng = points[(index + 1) % points.length].y; + // 2 + const tempArea = (nextLat * lng - nextLng * lat) / 2.0; + // 3 + area += tempArea; + // 4 + gravityLat += tempArea * (lat + nextLat) / 3; + gravityLng += tempArea * (lng + nextLng) / 3; + }); + // 5 + gravityLat = gravityLat / area; + gravityLng = gravityLng / area; + + return new PIXI.Point(gravityLat, gravityLng); + } + /** + * 获取点集合 + */ + public getPoints(): PIXI.Point[] { + const points: PIXI.Point[] = []; + this.pointsGraphics.forEach(item => { + points.push(item.position); + }); + return points; + } + /** + * 设置名称显示 + * @param value true/false 显示/隐藏 + * @param mode BasicInformation = 0 基本信息 + * Assignment想定作业 = 1 想定作业 + */ + public setNameVisible(value: boolean, mode: GameMode) { + if (this.assetData.GameMode === mode) { + this.text.visible = value; + } + } + public refresh() { + this.text.text = this.assetData.Name + + '\r\n' + + this.assetData.PropertyInfos.find(item => item.PropertyName === '名称/编号')?.PropertyValue; + // 填充多边形 + const color: number = this.assetData.Color.substring(0, 7).replace('#', '0x'); + const angle: number = parseInt(this.assetData.Color.substring(7), 16) / 255; + this.polygonGraphics.clear(); + this.polygonGraphics.beginFill(color, angle); + this.polygonGraphics.drawPolygon(this.getPoints()); + this.polygonGraphics.endFill(); + } +} \ No newline at end of file diff --git a/src/app/working-area/model/putCarArea.ts b/src/app/working-area/model/putCarArea.ts new file mode 100644 index 0000000..7544d04 --- /dev/null +++ b/src/app/working-area/model/putCarArea.ts @@ -0,0 +1,59 @@ +import { OldFilmFilter } from 'pixi-filters'; +import { WorkingAreaComponent } from '../working-area.component'; +import { PaintMode } from './paintModel'; +import { SinglePointIcon } from './singlePointIcon'; +import * as PIXI from 'pixi.js'; + +/** + * 汽车放置区域 + */ +export class PutCarArea extends PIXI.Container { + public polygonGraphics: PIXI.Graphics = new PIXI.Graphics(); + constructor(public assetData: any, private workingArea: WorkingAreaComponent) { + super(); + this.name = this.assetData.Id; + this.x = this.assetData.Point.x; + this.y = this.assetData.Point.y; + this.workingArea.backgroundImage.addChild(this); + this.sortableChildren = true; + + // 填充多边形 + + const color: number = this.assetData.Color.substring(0, 7).replace('#', '0x'); + const angle: number = parseInt(this.assetData.Color.substring(7), 16) / 255; + this.polygonGraphics.beginFill(color, angle); + this.polygonGraphics.drawPolygon(this.assetData.MultiPoint); + this.polygonGraphics.endFill(); + this.addChild(this.polygonGraphics); + // 添加选中事件 + this.polygonGraphics.interactive = true; + this.polygonGraphics + .on('pointerdown', (event) => { + if (this.workingArea.getPaintMode() === PaintMode.Car) { + this.workingArea.selectCar.Point = + new PIXI.Point(this.workingArea.previewSinglePointIcon.x, this.workingArea.previewSinglePointIcon.y); + this.workingArea.selectCar.Angle = this.assetData.Direction; + const car = new SinglePointIcon(this.workingArea.selectCar, this.workingArea); + this.workingArea.setPaintMode(PaintMode.endPaint); + } + }) + .on('pointerup', (event) => { + + }) + .on('pointerupoutside', (event) => { + + }) + .on('pointerover', (event) => { + this.workingArea.previewSinglePointIcon.filters = null; + this.workingArea.previewSinglePointIcon.zIndex = this.zIndex + 1; + // 设置车辆方向 + this.workingArea.previewSinglePointIcon.angle = this.assetData.Direction; + console.log(this.assetData.Name); + }) + .on('pointerout', (event) => { + this.workingArea.previewSinglePointIcon.filters = [ + new OldFilmFilter() + ]; + }); + } +} \ No newline at end of file diff --git a/src/app/working-area/model/singlePointIcon.ts b/src/app/working-area/model/singlePointIcon.ts new file mode 100644 index 0000000..f180e0d --- /dev/null +++ b/src/app/working-area/model/singlePointIcon.ts @@ -0,0 +1,250 @@ +import { WorkingAreaComponent } from '../working-area.component'; +import * as ObjectID from 'bson-objectid'; +import { GameMode } from './gameMode'; +import { Pipeline } from './pipeline'; +import { PaintMode } from './paintModel'; +import * as PIXI from 'pixi.js'; +import { throwMatDialogContentAlreadyAttachedError } from '@angular/material/dialog'; + +/** + * 单点图标 + */ +export class SinglePointIcon extends PIXI.Container { + style = new PIXI.TextStyle({ + fontFamily: 'Arial', + fontSize: 18, + fontStyle: 'normal', + fontWeight: 'bold', + fill: ['#000000'], + stroke: '#ffffff', + strokeThickness: 3, + dropShadow: true, + dropShadowColor: '#000000', + dropShadowBlur: 3, + dropShadowAngle: Math.PI / 6, + dropShadowDistance: 1, + wordWrap: false, + wordWrapWidth: 100, + }); + + public text = new PIXI.Text(this.assetData.Name + + '\r\n' + + this.assetData.PropertyInfos?.find(item => item.PropertyName === '名称/编号')?.PropertyValue, this.style); + + /** + * 选中圆点 + */ + public selectedPointTexture = PIXI.Texture.from('assets/images/handle-main.png'); + private image = PIXI.Sprite.from(this.assetData.ImageUrl); + public graphics = new PIXI.Graphics(); + public connectionPoint = new PIXI.Graphics(); + + // 显示连接点 + public showConnectionPoint = false; + + constructor(public assetData: any, private workingArea: WorkingAreaComponent) { + super(); + this.workingArea.backgroundImage.addChild(this); + this.x = this.assetData.Point.x; + this.y = this.assetData.Point.y; + this.name = this.assetData.Id; + + this.image.angle = this.assetData.Angle; + + this.image.x = 0; + this.image.y = 0; + this.image.width = this.assetData.Width; + this.image.height = this.assetData.Height; + + this.image.alpha = 1; + this.image.anchor.set(0.5); + this.image.interactive = true; + this.image + .on('mousedown', event => { + console.log(this.workingArea.canvasData.selectPanelPoint); + event.stopPropagation(); + this.workingArea.selection.selectOne(this); + if (this.assetData.CanConnection && this.parent === this.workingArea.backgroundImage) { + if (this.workingArea.getPaintMode() === PaintMode.Pipeline) { + if (this.workingArea.paintingPipeline === null) { + this.workingArea.previewLineSegment.visible = true; + this.workingArea.currentClickPoint.position = + new PIXI.Point(this.workingArea.circleShadow.x, this.workingArea.circleShadow.y); + this.workingArea.paintPoints.push(new PIXI.Point(this.position.x, this.position.y)); + const tempData = { + Id: ObjectID.default.generate(), + MultiPoint: JSON.parse(JSON.stringify(this.workingArea.paintPoints)), + Point: new PIXI.Point(0, 0), + Name: '管线', + LinkedObjects: [], + }; + this.workingArea.paintingPipeline = new Pipeline(tempData, this.workingArea); + this.workingArea.paintingPipeline.assetData.LinkedObjects.push(this); + this.assetData.Pipelines.push(this.workingArea.paintingPipeline); + } else { + this.workingArea.previewLineSegment.visible = false; + this.workingArea.currentClickPoint.position = + new PIXI.Point(this.workingArea.circleShadow.x, this.workingArea.circleShadow.y); + this.workingArea.paintPoints.push(new PIXI.Point(this.position.x, this.position.y)); + this.workingArea.paintingPipeline.assetData.MultiPoint = + JSON.parse(JSON.stringify(this.workingArea.paintPoints)); + this.workingArea.paintingPipeline.assetData.LinkedObjects.push(this); + this.assetData.Pipelines.push(this.workingArea.paintingPipeline); + this.workingArea.paintingPipeline.refresh(); + this.workingArea.paintingPipelineFinish(); + } + } + } + // 如果链接对象不为空,禁止移动 + if (this.workingArea.allowEdit && this.assetData.GameMode === this.workingArea.canvasData.gameMode) { + event.currentTarget.parent.data = event.data; + event.currentTarget.parent.alpha = 0.5; + event.currentTarget.parent.dragging = true; + } + }) + .on('mouseup', event => { + if (event.currentTarget.parent.dragging) { + event.currentTarget.parent.alpha = 1; + event.currentTarget.parent.dragging = false; + event.currentTarget.parent.data = null; + } + }) + .on('mouseupoutside', event => { + if (event.currentTarget.parent.dragging) { + event.currentTarget.parent.alpha = 1; + event.currentTarget.parent.dragging = false; + event.currentTarget.parent.data = null; + } + }) + .on('mousemove', event => { + if (event.currentTarget.parent.dragging) { + // 如果拖动过程中发现父对象不是背景图 + if (this.parent !== this.workingArea.backgroundImage) { + this.setParent(this.workingArea.backgroundImage); + if (this.assetData.FixedSize) { + const scale = 1 / this.workingArea.backgroundImage.scale.x; + this.scale.set(scale); + } + } + const newPosition = event.currentTarget.parent.data.getLocalPosition(event.currentTarget.parent.parent); + event.currentTarget.parent.x = newPosition.x; + event.currentTarget.parent.y = newPosition.y; + this.assetData.Point = new PIXI.Point(this.x, this.y); + this.workingArea.canvasData.isChange = true; + } + }) + .on('rightclick', event => { + + }) + .on('mouseover', event => { + // this.connectionPoint.visible = true; + this.setSelectionBox(true); + }) + .on('mouseout', event => { + // this.connectionPoint.visible = false; + this.setSelectionBox(false); + }); + this.text.x = this.image.x; + this.text.y = this.image.y - this.image.height / 2; + this.text.anchor.set(0.5, 1); + + if (this.assetData.GameMode === 2) { + this.text.visible = false; + } + + this.connectionPoint.beginFill(); + this.connectionPoint.drawCircle(0, 0, 5); + this.connectionPoint.endFill(); + this.connectionPoint.visible = true; + this.connectionPoint.interactive = true; + this.connectionPoint + .on('mouseover', event => { + console.log('b'); + this.graphics.lineStyle(2, 0x00EB00, 1); + this.graphics.drawRect(- this.connectionPoint.width / 2, - this.connectionPoint.width / 2, + this.connectionPoint.width, this.connectionPoint.width); + }) + .on('mouseout', event => { + this.graphics.clear(); + }); + this.addChild(this.text); + this.addChild(this.image); + this.addChild(this.graphics); + // this.addChild(this.connectionPoint); + + // // up + // const up = new PIXI.Sprite(this.selectedPointTexture); + // up.anchor.set(0.5); + // up.x = this.image.x; + // up.y = this.image.y - (this.image.height / 2); + // this.addChild(up); + // // up-left + // const upLeft = new PIXI.Sprite(this.selectedPointTexture); + // upLeft.anchor.set(0.5); + // upLeft.x = this.image.x - (this.image.width / 2); + // upLeft.y = this.image.y - (this.image.height / 2); + // this.addChild(upLeft); + // // up-right + // const upRight = new PIXI.Sprite(this.selectedPointTexture); + // upRight.anchor.set(0.5); + // upRight.x = this.image.x + (this.image.width / 2); + // upRight.y = this.image.y - (this.image.height / 2); + // this.addChild(upRight); + // // down + // const down = new PIXI.Sprite(this.selectedPointTexture); + // down.anchor.set(0.5); + // down.x = this.image.x; + // down.y = this.image.y + (this.image.height / 2); + // this.addChild(down); + // // down-left + // const downLeft = new PIXI.Sprite(this.selectedPointTexture); + // downLeft.anchor.set(0.5); + // downLeft.x = this.image.x - (this.image.width / 2); + // downLeft.y = this.image.y + (this.image.height / 2); + // this.addChild(downLeft); + // // down-right + // const downRight = new PIXI.Sprite(this.selectedPointTexture); + // downRight.anchor.set(0.5); + // downRight.x = this.image.x + (this.image.width / 2); + // downRight.y = this.image.y + (this.image.height / 2); + // this.addChild(downRight); + // // left + // const left = new PIXI.Sprite(this.selectedPointTexture); + // left.anchor.set(0.5); + // left.x = this.image.x - (this.image.width / 2); + // left.y = this.image.y; + // this.addChild(left); + // // right + // const right = new PIXI.Sprite(this.selectedPointTexture); + // right.anchor.set(0.5); + // right.x = this.image.x + (this.image.width / 2); + // right.y = this.image.y; + // this.addChild(right); + } + // 设置选择框 + public setSelectionBox(b: boolean) { + if (b) { + this.graphics.lineStyle(2, 0x00EB00, 1); + this.graphics.drawRect(- this.image.width / 2, - this.image.height / 2, this.image.width, this.image.height); + } else { + this.graphics.clear(); + } + } + // 设置名称 + public setNameVisible(value: boolean, mode: GameMode) { + if (this.assetData.GameMode === mode) { + this.text.visible = value; + } + } + // 刷新 + public refresh() { + this.image.width = this.assetData.Width; + this.image.height = this.assetData.Height; + this.image.angle = this.assetData.Angle; + this.text.text = this.assetData.Name + + '\r\n' + + this.assetData.PropertyInfos?.find(item => item.PropertyName === '名称/编号')?.PropertyValue; + this.text.x = this.image.x; + this.text.y = this.image.y - this.image.height / 2; + } +} diff --git a/src/app/working-area/working-area.component.html b/src/app/working-area/working-area.component.html new file mode 100644 index 0000000..ee66290 --- /dev/null +++ b/src/app/working-area/working-area.component.html @@ -0,0 +1,2 @@ +
    \ No newline at end of file diff --git a/src/app/working-area/working-area.component.scss b/src/app/working-area/working-area.component.scss new file mode 100644 index 0000000..e69de29 diff --git a/src/app/working-area/working-area.component.spec.ts b/src/app/working-area/working-area.component.spec.ts new file mode 100644 index 0000000..bd23376 --- /dev/null +++ b/src/app/working-area/working-area.component.spec.ts @@ -0,0 +1,25 @@ +import { async, ComponentFixture, TestBed } from '@angular/core/testing'; + +import { WorkingAreaComponent } from './working-area.component'; + +describe('WorkingAreaComponent', () => { + let component: WorkingAreaComponent; + let fixture: ComponentFixture; + + beforeEach(async(() => { + TestBed.configureTestingModule({ + declarations: [ WorkingAreaComponent ] + }) + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(WorkingAreaComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/working-area/working-area.component.ts b/src/app/working-area/working-area.component.ts new file mode 100644 index 0000000..a6b89cd --- /dev/null +++ b/src/app/working-area/working-area.component.ts @@ -0,0 +1,1253 @@ +import { Component, OnInit, ElementRef, ViewChild, AfterViewInit, Input } from '@angular/core'; +import * as PIXI from 'pixi.js'; +import { EventEmitter } from 'events'; +import { EventManager } from '@angular/platform-browser'; +import { OutlineFilter, OldFilmFilter } from 'pixi-filters'; +import { CanvasShareDataService, DisposalNodeData, FloorNodeData } from '../canvas-share-data.service'; +import * as ObjectID from 'bson-objectid'; +import { Charm } from './charm'; +import { SinglePointIcon } from './model/singlePointIcon'; +import { GameMode } from './model/gameMode'; +import { MultipointIcon } from './model/multipointIcon'; +import { PolygonIcon } from './model/polygonIcon'; +import { PutCarArea } from './model/putCarArea'; +import { Arrows } from './model/arrows'; +import { Pipeline } from './model/pipeline'; +import { PaintMode } from './model/paintModel'; + + +@Component({ + selector: 'app-working-area', + templateUrl: './working-area.component.html', + styleUrls: ['./working-area.component.scss'] +}) +/** + * 工作区 + */ +export class WorkingAreaComponent extends EventEmitter implements OnInit, AfterViewInit { + + constructor(private eventManager: EventManager, public canvasData: CanvasShareDataService) { + super(); + } + + @ViewChild('content') + content: ElementRef; + /** + * 父组件 + */ + @Input() init: any; + /** + * pixijs 程序 + */ + public app: PIXI.Application; + /** + * 资源加载器 + */ + public loader = PIXI.Loader.shared; + /** + * 背景图 + */ + public backgroundImage: PIXI.Sprite; + /** + * 预览单点图标 + */ + public previewSinglePointIcon = new PIXI.Sprite(); + /** + * 预览线段 + */ + public previewLineSegment = new PIXI.Graphics(); + /** + * 预览原点 + */ + public circleShadow = new PIXI.Graphics(); + /** + * 鼠标位置 + */ + public mousePosition: PIXI.Point = new PIXI.Point(0, 0); + /** + * 绘画模式 + */ + private paintMode: PaintMode; + /** + * 选择器 + */ + public selection: Selection = new Selection(this); + /** + * 当前鼠标的点 + */ + public currentClickPoint: PIXI.Graphics = new PIXI.Graphics(); + /** + * 绘制点集合 + */ + public paintPoints: PIXI.Point[] = []; + /** + * 绘制中的管线 + */ + public paintingPipeline: Pipeline = null; + /** + * 绘制中的箭头 + */ + public paintingArrows: Arrows = null; + /** + * 绘制中的多点图标 + */ + public paintingIcon: MultipointIcon; + /** + * 绘制中的连线 + */ + public paintingLine: PIXI.Graphics = new PIXI.Graphics(); + /** + * 绿色描边 + */ + public outlineFilterGreen = new OutlineFilter(2, 0x00ff00); + /** + * 拷贝素材数据 + */ + public copyData: any[] = []; + /** + * 确认绘制按钮 + */ + private enterPaintEndButton = PIXI.Sprite.from('assets/images/enterPaintButton.png'); + /** + * 框选工具图形 + */ + private rectToolGraphics = new PIXI.Graphics(); + /** + * 初始鼠标位置 + */ + private initialScreenMousePos: PIXI.Point = new PIXI.Point(); + /** + * 最终鼠标位置 + */ + private finalScreenMousePos: PIXI.Point = new PIXI.Point(); + /** + * 允许编辑 + */ + public allowEdit = true; + /** + * 动画控制器 + */ + public animator; + public animation; + public animationIcon; + public animationTime; + // 车辆作业面 + public carAreas: PolygonIcon[]; + // 车辆数据 + public carData: Map = new Map(); + // 当前选择的车辆id + public selectCar: any = null; + /** + * 数据初始化 + */ + ngOnInit(): void { + this.eventManager.addGlobalEventListener('window', 'keydown', (event: any) => { + if (event.keyCode === 17) { + this.selection.isMultiselection = true; + } + }); + this.eventManager.addGlobalEventListener('window', 'keyup', (event: any) => { + if (event.keyCode === 17) { + this.selection.isMultiselection = false; + this.rectToolGraphics.visible = false; + this.rectToolGraphics.clear(); + } + if (event.keyCode === 46) { + this.selection.objects.forEach(item => { + // 删除 选中的数据 + if (item.assetData?.IsFromBuilding) { + delete this.canvasData.originalcompanyBuildingData?.data[item.assetData.Id]; + } else { + delete this.canvasData.originaleveryStoreyData?.data[item.assetData.Id]; + } + // 删除选中的图标 + this.backgroundImage.removeChild(this.backgroundImage.getChildByName(item.assetData.Id)); + // 标记 + this.canvasData.isChange = true; + }); + this.emit('deleteIcon'); + } + }); + } + /** + * 页面初始化 + */ + ngAfterViewInit(): void { + this.createCanvas(); + window.onresize = () => { + this.resizeCanvas(); + }; + } + /** + * + * @param event 鼠标滑动事件 + */ + public mouseWheelHandel(event) { + const delX = this.mousePosition.x - this.backgroundImage.position.x; + const delY = this.mousePosition.y - this.backgroundImage.position.y; + const pivot = this.backgroundImage.toLocal(this.mousePosition); + const delta = Math.max(-1, Math.min(1, (event.wheelDelta || -event.detail))); + if (delta > 0) { + if (this.backgroundImage.scale.x >= 32) { + this.backgroundImage.scale.x = 32; + this.backgroundImage.scale.y = 32; + this.emit('backgroundScale', this.backgroundImage.scale.x); + return; + } + this.backgroundImage.pivot.set(pivot.x, pivot.y); + + this.backgroundImage.scale.x += this.backgroundImage.scale.x * 0.1; + this.backgroundImage.scale.y += this.backgroundImage.scale.y * 0.1; + + this.backgroundImage.position.x += delX; + this.backgroundImage.position.y += delY; + } else if (delta < 0) { + if (this.backgroundImage.scale.x <= 0.1) { + this.backgroundImage.scale.x = 0.1; + this.backgroundImage.scale.y = 0.1; + this.emit('backgroundScale', this.backgroundImage.scale.x); + return; + } + this.backgroundImage.pivot.set(pivot.x, pivot.y); + + this.backgroundImage.scale.x -= this.backgroundImage.scale.x * 0.1; + this.backgroundImage.scale.y -= this.backgroundImage.scale.y * 0.1; + + this.backgroundImage.position.x += delX; + this.backgroundImage.position.y += delY; + } + this.emit('backgroundScale', this.backgroundImage.scale.x); + } + /** + * + * @param icon 移动到选中车辆到屏幕中心点 + */ + public moveIconToScreenCenter(icon) { + if (icon.parent === this.backgroundImage && ( + icon.assetData.Type === 1 || + icon.assetData.Type === 2 || + icon.assetData.Type === 3 || + icon.assetData.Type === 4 + )) { + console.log(this.backgroundImage.position); + this.backgroundImage.pivot.set(icon.x, icon.y); + this.backgroundImage.position.set(771, 404); + clearTimeout(this.animationTime); + this.animation?.pause(); + this.animationIcon?.scale.set(1); + this.animation = this.animator.breathe(icon, 10, 10, 30, true, 0); + this.animationIcon = icon; + this.animationTime = setTimeout(() => { + this.animation?.pause(); + this.animationIcon?.scale.set(1); + }, 5000); + } + } + /** + * 创建画布 + */ + private createCanvas(): void { + this.app = new PIXI.Application({ + width: this.content.nativeElement.clientWidth, + height: this.content.nativeElement.clientHeight, + antialias: true, + transparent: false, + resolution: 1, + backgroundColor: 0xE9FAFF + }); + this.content.nativeElement.appendChild(this.app.view); + this.animator = new Charm(PIXI); + + this.app.ticker.add((delta) => { + this.animator.update(); + this.mousePosition = this.app.renderer.plugins.interaction.mouse.global; + if (this.backgroundImage !== undefined) { + this.previewSinglePointIcon.position = this.backgroundImage.toLocal(this.mousePosition); + this.circleShadow.position = this.backgroundImage.toLocal(this.mousePosition); + this.refreshPreviewLineSegment(this.currentClickPoint.position, this.circleShadow.position); + } + if (this.rectToolGraphics.visible === true) { + + const init = this.initialScreenMousePos; + const final = this.finalScreenMousePos; + + this.rectToolGraphics.clear(); + this.rectToolGraphics.lineStyle(2, 0x00ff00, 1); + this.rectToolGraphics.beginFill(0xccccf2, 0.25); + this.rectToolGraphics.drawRect(init.x, init.y, final.x - init.x, final.y - init.y); + this.rectToolGraphics.endFill(); + this.rectToolGraphics.closePath(); + } + if (this.paintingArrows !== null) { + this.paintingArrows.assetData.pointB = new PIXI.Point(this.circleShadow.position.x, this.circleShadow.position.y); + this.paintingArrows.refresh(); + } + }); + + this.on('select', obj => { + this.moveIconToScreenCenter(obj); + if (this.allowEdit) { + if (obj instanceof MultipointIcon) { + obj.setPointVisiable(true); + } else if (obj instanceof PolygonIcon) { + obj.setPointVisiable(true); + } else { + obj.filters = [this.outlineFilterGreen]; + } + } else { + obj.filters = [this.outlineFilterGreen]; + } + }); + this.on('deselect', obj => { + if (this.allowEdit) { + if (obj instanceof MultipointIcon) { + obj.setPointVisiable(false); + } else if (obj instanceof PolygonIcon) { + obj.setPointVisiable(false); + } else { + obj.filters = []; + } + } else { + obj.filters = []; + } + }); + this.on('backgroundScale', scale => { + this.previewSinglePointIcon.scale.set(1 / this.backgroundImage.scale.x); + this.backgroundImage.children.forEach(item => { + if (item instanceof SinglePointIcon) { + if (item.assetData.FixedSize) { + const data = 1 / scale; + item.scale.set(data); + } else { + const data = 1 / scale; + item.text.scale.set(data); + } + } else if (item instanceof MultipointIcon) { + const data = 1 / scale; + item.text.scale.set(data); + } else if (item instanceof PolygonIcon) { + const data = 1 / scale; + item.text.scale.set(data); + } + }); + }); + this.on('createIcon', obj => { + if (obj.assetData.GameMode === GameMode.BasicInformation) { + if (obj.assetData.IsFromBuilding) { + this.canvasData.originalcompanyBuildingData.data[obj.assetData.Id] = obj.assetData; + } else { + this.canvasData.originaleveryStoreyData.data[obj.assetData.Id] = obj.assetData; + } + } else { + console.log(); + if (this.canvasData.selectPanelPoint.Data === undefined + || this.canvasData.selectPanelPoint.Data === null) { + this.canvasData.selectPanelPoint.Data = new FloorNodeData(); + } + this.canvasData.selectPanelPoint.Data.Stock[obj.assetData.Id] = obj.assetData; + } + this.canvasData.isChange = true; + }); + } + /** + * 重置画布 + */ + public resizeCanvas() { + this.app.renderer.resize(this.content.nativeElement.clientWidth, this.content.nativeElement.clientHeight); + } + /** + * 设置名称显示 + * @param value true 显示 false 隐藏 + * @param mode BasicInformation = 0 基本信息 Assignment想定作业 = 1 想定作业 + */ + public setNameVisible(value: boolean, mode: GameMode): void { + this.backgroundImage?.children.forEach(item => { + if (item instanceof SinglePointIcon) { + item.setNameVisible(value, mode); + } else if (item instanceof MultipointIcon) { + item.setNameVisible(value, mode); + } else if (item instanceof PolygonIcon) { + item.setNameVisible(value, mode); + } + }); + } + /** + * 根据id刷新图标 + * @param id 图标数据id + */ + public refreshIcon(id: string): void { + const icon = this.backgroundImage.children.find(item => item.name === id); + if (icon instanceof SinglePointIcon) { + icon.refresh(); + } else if (icon instanceof MultipointIcon) { + icon.refresh(); + } else if (icon instanceof PolygonIcon) { + icon.refresh(); + } + } + /** + * + * @param value 缩放倍数 + */ + public setIconScale(value: number): void { + this.backgroundImage.children.forEach(item => { + if (item instanceof SinglePointIcon) { + item.scale.set(value); + } else if (item instanceof MultipointIcon) { + + } else if (item instanceof PolygonIcon) { + + } + }); + } + /** + * 设置高亮 + */ + public setHighlight(ids: string[]): void { + this.selection.deselectAll(); + ids.forEach(item => { + let obj = this.backgroundImage.getChildByName(item); + if (obj === null) { + obj = this.app.stage.getChildByName(item); + } + this.selection.select(obj); + }); + } + /** + * 刷新 + */ + public async refresh() { + this.resizeCanvas(); + this.destroyBackgroundImage(); + await this.createBackgroundImage(this.canvasData.selectStorey.imageUrl); + + // this.refreshBackgroundImage(); + this.versionChecking(); + + + const floorData = this.canvasData.originaleveryStoreyData.data; + // const buildingData = this.canvasData.originalcompanyBuildingData.data; + // const floor = this.canvasData.selectStorey; + + // // key=>属性名 data[key]=>属性值 + Object.keys(floorData).forEach((key) => { + switch (floorData[key].InteractiveMode) { + case 0: + const singleIcon = new SinglePointIcon(floorData[key], this); + break; + case 1: + const icon = new MultipointIcon(floorData[key], this); + break; + case 2: + const polygonIcon = new PolygonIcon(floorData[key], this); + break; + } + }); + // Object.keys(buildingData).forEach((key) => { + // if (buildingData[key].FloorId === floor.id) { + // switch (buildingData[key].InteractiveMode) { + // case 0: + // const singleIcon = new SinglePointIcon(buildingData[key], this); + // break; + // case 1: + // const icon = new MultipointIcon(buildingData[key], this); + // break; + // case 2: + // const polygonIcon = new PolygonIcon(buildingData[key], this); + // break; + // } + // } + // }); + + // 加载处置节点数据 + const nodeData = this.canvasData.selectPanelPoint.Data; + if (nodeData !== undefined && nodeData !== null) { + Object.keys(nodeData).forEach((key) => { + Object.keys(nodeData[key]).forEach((tempKey) => { + switch (nodeData[key][tempKey].InteractiveMode) { + case 0: + const singleIcon = new SinglePointIcon(nodeData[key][tempKey], this); + break; + case 1: + const icon = new MultipointIcon(nodeData[key][tempKey], this); + break; + case 2: + const polygonIcon = new PolygonIcon(nodeData[key][tempKey], this); + break; + } + }); + }); + } + this.emit('backgroundScale', this.backgroundImage.scale.x); + } + /** + * + * @param id 图标ID + * @param b 显示/隐藏 + */ + public setIconVisible(ids: string[], b: boolean) { + ids.forEach(item => { + this.backgroundImage.getChildByName(item).visible = b; + }); + } + /** + * 版本检查 + */ + public versionChecking(): void { + const floorData = this.canvasData.originaleveryStoreyData; + const buildingData = this.canvasData.originalcompanyBuildingData; + const nodeData = this.canvasData.selectPanelPoint; + if (floorData.version && floorData.version === '1.0') { + floorData.version = '2.0'; + Object.keys(floorData.data).forEach(item => { + floorData.data[item].Point.y *= -1; + floorData.data[item].MultiPoint?.forEach(element => { + element.y *= -1; + }); + }); + } + if (buildingData.version && buildingData.version === '1.0') { + buildingData.version = '2.0'; + Object.keys(buildingData.data).forEach(item => { + buildingData.data[item].Point.y *= -1; + buildingData.data[item].MultiPoint?.forEach(element => { + element.y *= -1; + }); + }); + } + console.log(nodeData.Version); + if (nodeData.Version && nodeData.Version === '1.0') { + nodeData.Version = '2.0'; + console.log(this.canvasData.selectPanelPoint.Version); + Object.keys(nodeData.Data).forEach((key) => { + Object.keys(nodeData.Data[key]).forEach((tempKey) => { + nodeData.Data[key][tempKey].Point.y *= -1; + nodeData.Data[key][tempKey].MultiPoint?.forEach(element => { + element.y *= -1; + }); + }); + }); + } + } + /** + * 创建确认绘制结束按钮 + */ + private createEnterPaintEndButton() { + this.enterPaintEndButton.width = 60; + this.enterPaintEndButton.height = 60; + this.enterPaintEndButton.anchor.set(0.5); + this.enterPaintEndButton.position = new PIXI.Point(0, 0); + this.enterPaintEndButton.interactive = true; + this.enterPaintEndButton.buttonMode = true; + this.enterPaintEndButton + .on('mousedown', event => { + event.stopPropagation(); + this.enterPaint(); + }); + this.backgroundImage.addChild(this.enterPaintEndButton); + this.enterPaintEndButton.zIndex = this.backgroundImage.children.length; + this.enterPaintEndButton.visible = false; + } + /** + * 创建背景图 + */ + private async createBackgroundImage(imageUrl: string): Promise { + const image = await PIXI.Texture.fromURL(imageUrl); + this.backgroundImage = new PIXI.Sprite(image); + this.backgroundImage.anchor.set(0.5); + this.backgroundImage.x = this.app.view.width / 2; + this.backgroundImage.y = this.app.view.height / 2; + this.backgroundImage.interactive = true; + this.backgroundImage.name = 'background'; + + // const left = this.init.element.nativeElement.querySelector('.functionalDomainLeft').clientWidth; + // const right = this.init.element.nativeElement.querySelector('.functionalDomainRight').clientWidth; + const imageWidth = this.backgroundImage.texture.width; + const imageHeight = this.backgroundImage.texture.height; + const appWidth = this.app.view.width - 470; + const appHeight = this.app.view.height; + + const wScale = appWidth / imageWidth; + const hScale = appHeight / imageHeight; + + const scale = wScale < hScale + ? wScale + : hScale; + this.backgroundImage.scale.set(scale); + this.backgroundImage.sortableChildren = true; + this.backgroundImage + .on('mousedown', event => { + if (!event.currentTarget.dragging && this.selection.isMultiselection === false) { + event.currentTarget.data = event.data; + event.currentTarget.dragging = true; + event.currentTarget.dragPoint = event.data.getLocalPosition(event.currentTarget.parent); + event.currentTarget.dragPoint.x -= event.currentTarget.x; + event.currentTarget.dragPoint.y -= event.currentTarget.y; + switch (this.paintMode) { + case PaintMode.endPaint: + console.log(this.backgroundImage.toLocal(this.mousePosition)); + break; + case PaintMode.singlePointIcon: + const json = JSON.parse(JSON.stringify(this.canvasData.selectTemplateData.propertyInfos)); + const list = []; + json.forEach(element => { + const property = new PropertyInfo(element); + list.push(property); + }); + const assetData = { + TemplateId: this.canvasData.selectTemplateData.id, + FloorId: this.canvasData.selectStorey.id, + Angle: this.canvasData.selectTemplateData.angle, + Color: this.canvasData.selectTemplateData.color, + Enabled: this.canvasData.selectTemplateData.enabled, + FillMode: this.canvasData.selectTemplateData.fillMode, + FireElementId: this.canvasData.selectTemplateData.fireElementId, + FixedSize: this.canvasData.selectTemplateData.fixedSize, + Height : 32, + Width : 32, + Id: ObjectID.default.generate(), + ImageUrl: this.canvasData.selectTemplateData.imageUrl, + InteractiveMode: this.canvasData.selectTemplateData.interactiveMode, + MultiPoint : null, + Point: new PIXI.Point(this.previewSinglePointIcon.x, this.previewSinglePointIcon.y), + Name : this.canvasData.selectTemplateData.name, + PropertyInfos: list, + Border : this.canvasData.selectTemplateData.border, + DrawMode : this.canvasData.selectTemplateData.drawMode, + Thickness : this.canvasData.selectTemplateData.thickness, + IsFromBuilding : this.canvasData.selectTemplateData.isFromBuilding, + GameMode : this.canvasData.gameMode + }; + const singleIcon = new SinglePointIcon(assetData, this); + this.emit('createIcon', singleIcon); + this.emit('backgroundScale', this.backgroundImage.scale.x); + break; + case PaintMode.lineIcon: + this.previewLineSegment.visible = true; + this.currentClickPoint.position = new PIXI.Point(this.circleShadow.x, this.circleShadow.y); + this.paintPoints.push(new PIXI.Point(this.circleShadow.x, this.circleShadow.y)); + + if (this.paintPoints.length >= 2) { + this.enterPaintEndButton.position = this.circleShadow.position; + this.enterPaintEndButton.visible = true; + } + + if (this.paintingIcon !== null) { + this.backgroundImage.removeChild(this.paintingIcon); + } + const jsonObject = JSON.parse(JSON.stringify(this.canvasData.selectTemplateData.propertyInfos)); + const propertyList = []; + jsonObject.forEach(element => { + const property = new PropertyInfo(element); + propertyList.push(property); + }); + const assetData1 = { + TemplateId: this.canvasData.selectTemplateData.id, + FloorId: this.canvasData.selectStorey.id, + Angle: this.canvasData.selectTemplateData.angle, + Color: this.canvasData.selectTemplateData.color, + Enabled: this.canvasData.selectTemplateData.enabled, + FillMode: this.canvasData.selectTemplateData.fillMode, + FireElementId: this.canvasData.selectTemplateData.fireElementId, + FixedSize: this.canvasData.selectTemplateData.fixedSize, + Height: 32, + Width: 32, + Id: ObjectID.default.generate(), + ImageUrl: this.canvasData.selectTemplateData.imageUrl, + InteractiveMode: this.canvasData.selectTemplateData.interactiveMode, + MultiPoint: JSON.parse(JSON.stringify(this.paintPoints)), + Point: new PIXI.Point(0, 0), + Name: this.canvasData.selectTemplateData.name, + PropertyInfos: propertyList, + Border: this.canvasData.selectTemplateData.border, + DrawMode: this.canvasData.selectTemplateData.drawMode, + Thickness: this.canvasData.selectTemplateData.thickness, + IsFromBuilding: this.canvasData.selectTemplateData.isFromBuilding, + GameMode: this.canvasData.gameMode + }; + // const assetData1 = { + // ImageUrl: this.canvasData.selectTemplateData.imageUrl, + // Point: new PIXI.Point(0, 0), + // Width: 32, + // Height: 32, + // MultiPoint: this.paintPoints, + // Name: this.canvasData.selectTemplateData.name + // }; + this.paintingIcon = new MultipointIcon(assetData1, this); + // this.paintingIcon = new MultipointIcon(this.previewSinglePointIcon.texture, new PIXI.Point(0, 0), this.paintPoints, this, + // this.canvasData.selectTemplateData.name); + this.emit('backgroundScale', this.backgroundImage.scale.x); + break; + case PaintMode.polygonIcon: + this.previewLineSegment.visible = true; + this.currentClickPoint.position = new PIXI.Point(this.circleShadow.x, this.circleShadow.y); + this.paintPoints.push(new PIXI.Point(this.circleShadow.x, this.circleShadow.y)); + if (this.paintPoints.length === 1) { + this.enterPaintEndButton.position = this.circleShadow.position; + } else if (this.paintPoints.length >= 3) { + this.enterPaintEndButton.visible = true; + } + this.paintPoints.forEach((value, index, array) => { + if (index === 0) { + this.paintingLine.clear(); + this.paintingLine.lineStyle(1, 0xffd900, 1); + this.paintingLine.moveTo(value.x, value.y); + } else { + this.paintingLine.lineTo(value.x, value.y); + } + }); + + // if (this.paintingIcon !== null) { + // this.backgroundImage.removeChild(this.paintingIcon); + // } + // this.paintingIcon = new PolygonIcon(this.paintPoints, this); + break; + case PaintMode.Pipeline: + if (this.paintingPipeline !== null) { + this.currentClickPoint.position = new PIXI.Point(this.circleShadow.x, this.circleShadow.y); + this.paintPoints.push(new PIXI.Point(this.circleShadow.x, this.circleShadow.y)); + this.paintingPipeline.assetData.MultiPoint = JSON.parse(JSON.stringify(this.paintPoints)); + this.paintingPipeline.refresh(); + } + // this.emit('backgroundScale', this.backgroundImage.scale.x); + break; + case PaintMode.Arrows: + if (this.paintingArrows === null) { + const data = { + Id: ObjectID.default.generate(), + name: 'string', + point: new PIXI.Point(this.circleShadow.x, this.circleShadow.y), + pointA: new PIXI.Point(this.circleShadow.x, this.circleShadow.y), + pointB: new PIXI.Point(this.circleShadow.x, this.circleShadow.y), + source: 'assets/images/进攻方向.png', + }; + this.paintingArrows = new Arrows(data, this); + } else { + this.paintingArrows.ready = true; + this.paintingArrows = null; + this.paintMode = PaintMode.endPaint; + } + break; + case PaintMode.Car: + // console.log('创建车辆'); + break; + } + } else if (!event.currentTarget.dragging && this.selection.isMultiselection === true) { + this.rectToolGraphics.visible = true; + event.currentTarget.dragging = true; + this.initialScreenMousePos = this.backgroundImage.toLocal(this.mousePosition); + this.finalScreenMousePos = this.backgroundImage.toLocal(this.mousePosition); + } + }) + .on('mouseup', event => { + if (event.currentTarget.dragging) { + event.currentTarget.dragging = false; + event.currentTarget.data = null; + } + if (this.rectToolGraphics.visible === true) { + this.backgroundImage.children.forEach(item => { + if (item instanceof SinglePointIcon + || item instanceof MultipointIcon + || item instanceof PolygonIcon) { + if (this.rectToolGraphics.getLocalBounds().contains(item.x, item.y)) { + this.selection.select(item); + } + } + }); + this.rectToolGraphics.clear(); + this.rectToolGraphics.visible = false; + } + }) + .on('mouseupoutside', event => { + if (event.currentTarget.dragging) { + event.currentTarget.dragging = false; + event.currentTarget.data = null; + } + }) + .on('mousemove', event => { + if (event.currentTarget.dragging && this.selection.isMultiselection === false) { + const newPosition = event.currentTarget.data.getLocalPosition(event.currentTarget.parent); + event.currentTarget.x = newPosition.x - event.currentTarget.dragPoint.x; + event.currentTarget.y = newPosition.y - event.currentTarget.dragPoint.y; + } else if (event.currentTarget.dragging && this.selection.isMultiselection === true) { + if (this.rectToolGraphics.visible === true) { + this.finalScreenMousePos = this.backgroundImage.toLocal(this.mousePosition); + } + } + }).on('rightclick', event => { + event.stopPropagation(); + this.cancelPaint(); + this.selection.deselectAll(); + }) + .on('pointerover', (event) => { + this.previewSinglePointIcon.filters = [new OldFilmFilter()]; + }) + .on('pointerout', (event) => { + this.previewSinglePointIcon.filters = null; + }); + this.app.stage.addChild(this.backgroundImage); + this.createPreviewSinglePointIcon(); + this.createPreviewLineSegment(); + this.createCircleShadow(); + this.createEnterPaintEndButton(); + this.backgroundImage.addChild(this.paintingLine); + + } + + /** + * 刷新背景图 + */ + public refreshBackgroundImage(): void { + if (!this.canvasData.selectStorey.imageUrl) { + this.backgroundImage.visible = false; + } else { + this.backgroundImage.texture = PIXI.Texture.from(this.canvasData.selectStorey.imageUrl); + this.backgroundImage.angle = this.canvasData.selectStorey.imageAngle; + this.backgroundImage.visible = true; + } + } + /** + * 清空画布 + */ + public destroyBackgroundImage(): void { + this.app.stage.removeChild(this.backgroundImage); + } + /** + * 设置背景图缩放 + * @param scale 缩放系数 + */ + public setBackgroundScale(scale: number): void { + this.backgroundImage.scale.set(scale); + this.emit('backgroundScale', this.backgroundImage.scale.x); + } + /** + * 设置背景图角度 + * @param imageAngle 角度值 + */ + public setBackgroundAngle(imageAngle: number) { + this.backgroundImage.angle = imageAngle; + } + /** + * 创建预览单点图标 + */ + private createPreviewSinglePointIcon(): void { + this.previewSinglePointIcon = PIXI.Sprite.from('assets/images/noImg.png'); + this.previewSinglePointIcon.width = 32; + this.previewSinglePointIcon.height = 32; + this.previewSinglePointIcon.alpha = 1; + this.previewSinglePointIcon.anchor.set(0.5); + this.previewSinglePointIcon.visible = false; + this.backgroundImage.addChild(this.previewSinglePointIcon); + } + /** + * 改变预览单点图标 + * @param uri 图片地址 + */ + private changePreviewSinglePointIcon(uri: string): void { + this.previewSinglePointIcon.texture = PIXI.Texture.from(uri); + this.previewSinglePointIcon.visible = true; + } + /** + * 创建预览线段 + */ + private createPreviewLineSegment() { + this.previewLineSegment.visible = false; + this.backgroundImage.addChild(this.currentClickPoint); + this.backgroundImage.addChild(this.previewLineSegment); + + this.backgroundImage.addChild(this.rectToolGraphics); + this.rectToolGraphics.visible = false; + } + /** + * 刷新预览线段 + * @param pointA 点A + * @param pointB 点B + */ + private refreshPreviewLineSegment(pointA: PIXI.Point, pointB: PIXI.Point) { + this.previewLineSegment.clear(); + this.previewLineSegment.lineStyle(1, 0xffd900, 1); + this.previewLineSegment.moveTo(pointA.x, pointA.y); + this.previewLineSegment.lineTo(pointB.x, pointB.y ); + } + /** + * 创建半径图标影子 + * @param x 半径 + */ + private createCircleShadow(): void { + this.circleShadow.beginFill(0xFFCC5A); + this.circleShadow.drawCircle(0, 0, 10); + this.circleShadow.endFill(); + this.circleShadow.visible = false; + this.backgroundImage.addChild(this.circleShadow); + } + /** + * 开始绘制 + */ + public beginPaint() { + switch (this.canvasData.selectTemplateData.interactiveMode) { + case 0: + this.beginPaintSinglePointIcon(); + break; + case 1: + this.beginPaintLineIcon(); + break; + case 2: + this.beginPaintPolygonIcon(); + break; + } + } + /** + * 开始绘画单点图标 + */ + private beginPaintSinglePointIcon(): void { + this.cancelPaint(); + this.paintMode = PaintMode.singlePointIcon; + this.changePreviewSinglePointIcon(this.canvasData.selectTemplateData.imageUrl); + } + /** + * 开始绘画多边形 + */ + private beginPaintPolygonIcon(): void { + this.cancelPaint(); + this.paintMode = PaintMode.polygonIcon; + this.circleShadow.visible = true; + } + /** + * 开始绘制多点图标 + */ + private beginPaintLineIcon(): void { + this.cancelPaint(); + this.paintMode = PaintMode.lineIcon; + this.previewSinglePointIcon.texture = PIXI.Texture.from(this.canvasData.selectTemplateData.imageUrl); + this.circleShadow.visible = true; + } + /** + * 开始绘制管线 + */ + public beginPaintPipeline(): void { + this.paintMode = PaintMode.Pipeline; + } + public paintingPipelineFinish(): void { + if (this.paintMode === PaintMode.Pipeline) { + this.paintMode = PaintMode.endPaint; + this.paintPoints.splice(0, this.paintPoints.length); + this.paintingPipeline = null; + } + } + public beginPaintingArrows(): void { + this.paintMode = PaintMode.Arrows; + } + + + /** + * 取消绘画 + */ + public cancelPaint(): void { + switch (this.paintMode) { + case PaintMode.singlePointIcon: + this.previewSinglePointIcon.visible = false; + this.paintMode = PaintMode.endPaint; + break; + case PaintMode.lineIcon: + this.circleShadow.visible = false; + this.previewLineSegment.visible = false; + this.paintPoints.splice(0, this.paintPoints.length); + if (this.paintingIcon !== null) { + this.backgroundImage.removeChild(this.paintingIcon); + } + this.paintMode = PaintMode.endPaint; + break; + case PaintMode.polygonIcon: + this.circleShadow.visible = false; + this.previewLineSegment.visible = false; + this.paintingIcon = null; + this.paintPoints.splice(0, this.paintPoints.length); + this.paintingLine.clear(); + this.paintMode = PaintMode.endPaint; + break; + } + } + /** + * 设置绘制状态 + * @param mode 状态 + */ + public setPaintMode(mode: PaintMode) { + this.reset(); + this.paintMode = mode; + switch (mode) { + case PaintMode.endPaint: + this.selectCar = null; + this.backgroundImage.children.forEach(item => { + if (item instanceof PutCarArea) { + if (item.assetData.Type.indexOf(this.selectCar?.Type) !== -1) { + item.visible = true; + } else { + item.visible = false; + } + } + }); + break; + } + } + /** + * 获取绘制状态 + */ + public getPaintMode(): PaintMode { + return this.paintMode; + } + /** + * 重置 + */ + public reset() { + this.previewSinglePointIcon.filters = null; + this.previewSinglePointIcon.visible = false; + this.previewSinglePointIcon.angle = 0; + } + /** + * 确认绘制 + */ + private enterPaint(): void { + this.previewLineSegment.visible = false; + this.enterPaintEndButton.visible = false; + switch (this.paintMode) { + case PaintMode.lineIcon: + if (this.paintPoints.length >= 2) { + this.emit('createIcon', this.paintingIcon); + this.paintingIcon = null; + } + break; + case PaintMode.polygonIcon: + this.paintingLine.clear(); + if (this.paintPoints.length >= 3) { + const jsonList = JSON.parse(JSON.stringify(this.canvasData.selectTemplateData.propertyInfos)); + const propertyList = []; + jsonList.forEach(element => { + const property = new PropertyInfo(element); + propertyList.push(property); + }); + const assetData = { + TemplateId: this.canvasData.selectTemplateData.id, + FloorId: this.canvasData.selectStorey.id, + Angle: this.canvasData.selectTemplateData.angle, + Color: this.canvasData.selectTemplateData.color, + Enabled: this.canvasData.selectTemplateData.enabled, + FillMode: this.canvasData.selectTemplateData.fillMode, + FireElementId: this.canvasData.selectTemplateData.fireElementId, + FixedSize: this.canvasData.selectTemplateData.fixedSize, + Height: 32, + Width: 32, + Id: ObjectID.default.generate(), + ImageUrl: this.canvasData.selectTemplateData.imageUrl, + InteractiveMode: this.canvasData.selectTemplateData.interactiveMode, + MultiPoint: JSON.parse(JSON.stringify(this.paintPoints)), + Point: new PIXI.Point(0, 0), + Name: this.canvasData.selectTemplateData.name, + PropertyInfos: propertyList, + Border: this.canvasData.selectTemplateData.border, + DrawMode: this.canvasData.selectTemplateData.drawMode, + Thickness: this.canvasData.selectTemplateData.thickness, + IsFromBuilding: this.canvasData.selectTemplateData.isFromBuilding, + GameMode: this.canvasData.gameMode + }; + const polygonIcon = new PolygonIcon(assetData, this); + this.emit('createIcon', polygonIcon); + } + break; + } + this.paintPoints.splice(0, this.paintPoints.length); + this.emit('backgroundScale', this.backgroundImage.scale.x); + } + /** + * 复制 + */ + public copy(): void { + this.copyData = []; + this.selection.objects.forEach(item => { + const newData = JSON.parse(JSON.stringify(item.assetData)); + this.copyData.push(newData); + }); + } + /** + * 粘贴 + */ + public paste(companyId: string, buildingId: string, floorId: string): void { + this.copyData.forEach(item => { + item.Point = new PIXI.Point(item.Point.x + 5, item.Point.y + 5); + const newData = JSON.parse(JSON.stringify(item)); + newData.Id = ObjectID.default.generate(), + newData.CompanyId = companyId; + newData.BuildingId = buildingId; + newData.FloorId = floorId; + newData.Point = new PIXI.Point(item.Point.x + 5, item.Point.y + 5); + if (newData.IsFromBuilding) { + this.canvasData.originalcompanyBuildingData.data[newData.Id] = newData; + } else { + this.canvasData.originaleveryStoreyData.data[newData.Id] = newData; + } + switch (item.InteractiveMode) { + case PaintMode.singlePointIcon: + const singleIcon = new SinglePointIcon(newData, this); + break; + case PaintMode.lineIcon: + const lineIcon = new MultipointIcon(newData, this); + break; + case PaintMode.polygonIcon: + const polygonIcon = new PolygonIcon(newData, this); + break; + } + this.selection.select(this.backgroundImage.getChildByName(newData.Id)); + }); + } + +} + +/** + * 选择器 + */ +export class Selection { + constructor(private workingArea: WorkingAreaComponent) {} + public objects: any[] = []; + public isMultiselection = false; + /** + * 返回选择器中是否包含对象 + * @param obj 对象 + */ + public contains(obj: any): boolean { + return this.objects.includes(obj); + } + /** + * 选定对象 + * @param obj 对象 + */ + public select(obj: any) { + if (!this.contains(obj)) { + this.workingArea.emit('select', obj); + this.objects.push(obj); + } + } + /** + * 取消选定对象 + * @param obj 对象 + */ + public deselect(obj: any) { + if (this.contains(obj)) { + this.workingArea.emit('deselect', obj); + const idx = this.objects.findIndex(x => x === obj); + this.objects.splice(idx, 1); + } + } + /** + * 选定或取消选定对象 + * @param obj 对象 + */ + public selectOrDeselect(obj: any) { + if (this.contains(obj)) { + this.deselect(obj); + } else { + this.select(obj); + } + } + /** + * 取消选定所有已选定对象 + */ + public deselectAll() { + this.objects.forEach(item => { + this.workingArea.emit('deselect', item); + }); + this.objects.splice(0, this.objects.length); + } + /** + * 取消选定所有对象后选定一个对象 + * @param obj 对象 + */ + public selectOne(obj: any) { + if (this.isMultiselection) { + this.selectOrDeselect(obj); + } else { + this.deselectAll(); + this.select(obj); + } + } + /** + * 选定对象集合中所有对象 + * @param objects 对象集合 + */ + public selectAll(objects: any[]) { + this.objects.forEach(item => { + this.select(item); + }); + } +} + +/** + * 属性 + */ +export class PropertyInfo { + constructor(instanceData: any) { + this.Tag = instanceData.tag; + this.Order = instanceData.order; + this.Enabled = instanceData.enabled; + this.Visible = instanceData.visible; + this.Required = instanceData.required; + this.RuleName = instanceData.ruleName; + this.RuleValue = instanceData.ruleValue; + this.PhysicalUnit = instanceData.physicalUnit; + this.PropertyName = instanceData.propertyName; + this.PropertyType = instanceData.propertyType; + this.PropertyValue = instanceData.propertyValue; + } + /** + * 标记位,用于扩展 + */ + public Tag: string; + /** + * 属性排序 + */ + public Order: number; + /** + * 是否启用 + */ + public Enabled: boolean; + /** + * 是否可见 + */ + public Visible: boolean; + /** + * 必填 + */ + public Required: boolean; + /** + * 验证规则名称 + */ + public RuleName: string; + /** + * 验证规则值 + */ + public RuleValue: string; + /** + * 物理单位 + */ + public PhysicalUnit: string; + /** + * 属性名称 + */ + public PropertyName: string; + /** + * 属性类型 + */ + public PropertyType: number; + /** + * 属性值 + */ + public PropertyValue: string; +} +/** + * 车辆类型 + */ +export enum Type { + 水源 = 0, + 举高喷射消防车 = 1, + 泡沫消防车 = 2, + 水罐消防车 = 3, + 压缩空气泡沫消防车 = 4 +} diff --git a/src/assets/.gitkeep b/src/assets/.gitkeep new file mode 100644 index 0000000..e69de29 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/icon/MaterialIcons-Regular.eot b/src/assets/icon/MaterialIcons-Regular.eot new file mode 100644 index 0000000..70508eb Binary files /dev/null and b/src/assets/icon/MaterialIcons-Regular.eot differ diff --git a/src/assets/icon/MaterialIcons-Regular.ijmap b/src/assets/icon/MaterialIcons-Regular.ijmap new file mode 100644 index 0000000..d9f1d25 --- /dev/null +++ b/src/assets/icon/MaterialIcons-Regular.ijmap @@ -0,0 +1 @@ +{"icons":{"e84d":{"name":"3d Rotation"},"eb3b":{"name":"Ac Unit"},"e190":{"name":"Access Alarm"},"e191":{"name":"Access Alarms"},"e192":{"name":"Access Time"},"e84e":{"name":"Accessibility"},"e914":{"name":"Accessible"},"e84f":{"name":"Account Balance"},"e850":{"name":"Account Balance Wallet"},"e851":{"name":"Account Box"},"e853":{"name":"Account Circle"},"e60e":{"name":"Adb"},"e145":{"name":"Add"},"e439":{"name":"Add A Photo"},"e193":{"name":"Add Alarm"},"e003":{"name":"Add Alert"},"e146":{"name":"Add Box"},"e147":{"name":"Add Circle"},"e148":{"name":"Add Circle Outline"},"e567":{"name":"Add Location"},"e854":{"name":"Add Shopping Cart"},"e39d":{"name":"Add To Photos"},"e05c":{"name":"Add To Queue"},"e39e":{"name":"Adjust"},"e630":{"name":"Airline Seat Flat"},"e631":{"name":"Airline Seat Flat Angled"},"e632":{"name":"Airline Seat Individual Suite"},"e633":{"name":"Airline Seat Legroom Extra"},"e634":{"name":"Airline Seat Legroom Normal"},"e635":{"name":"Airline Seat Legroom Reduced"},"e636":{"name":"Airline Seat Recline Extra"},"e637":{"name":"Airline Seat Recline Normal"},"e195":{"name":"Airplanemode Active"},"e194":{"name":"Airplanemode Inactive"},"e055":{"name":"Airplay"},"eb3c":{"name":"Airport Shuttle"},"e855":{"name":"Alarm"},"e856":{"name":"Alarm Add"},"e857":{"name":"Alarm Off"},"e858":{"name":"Alarm On"},"e019":{"name":"Album"},"eb3d":{"name":"All Inclusive"},"e90b":{"name":"All Out"},"e859":{"name":"Android"},"e85a":{"name":"Announcement"},"e5c3":{"name":"Apps"},"e149":{"name":"Archive"},"e5c4":{"name":"Arrow Back"},"e5db":{"name":"Arrow Downward"},"e5c5":{"name":"Arrow Drop Down"},"e5c6":{"name":"Arrow Drop Down Circle"},"e5c7":{"name":"Arrow Drop Up"},"e5c8":{"name":"Arrow Forward"},"e5d8":{"name":"Arrow Upward"},"e060":{"name":"Art Track"},"e85b":{"name":"Aspect Ratio"},"e85c":{"name":"Assessment"},"e85d":{"name":"Assignment"},"e85e":{"name":"Assignment Ind"},"e85f":{"name":"Assignment Late"},"e860":{"name":"Assignment Return"},"e861":{"name":"Assignment Returned"},"e862":{"name":"Assignment Turned In"},"e39f":{"name":"Assistant"},"e3a0":{"name":"Assistant Photo"},"e226":{"name":"Attach File"},"e227":{"name":"Attach Money"},"e2bc":{"name":"Attachment"},"e3a1":{"name":"Audiotrack"},"e863":{"name":"Autorenew"},"e01b":{"name":"Av Timer"},"e14a":{"name":"Backspace"},"e864":{"name":"Backup"},"e19c":{"name":"Battery Alert"},"e1a3":{"name":"Battery Charging Full"},"e1a4":{"name":"Battery Full"},"e1a5":{"name":"Battery Std"},"e1a6":{"name":"Battery Unknown"},"eb3e":{"name":"Beach Access"},"e52d":{"name":"Beenhere"},"e14b":{"name":"Block"},"e1a7":{"name":"Bluetooth"},"e60f":{"name":"Bluetooth Audio"},"e1a8":{"name":"Bluetooth Connected"},"e1a9":{"name":"Bluetooth Disabled"},"e1aa":{"name":"Bluetooth Searching"},"e3a2":{"name":"Blur Circular"},"e3a3":{"name":"Blur Linear"},"e3a4":{"name":"Blur Off"},"e3a5":{"name":"Blur On"},"e865":{"name":"Book"},"e866":{"name":"Bookmark"},"e867":{"name":"Bookmark Border"},"e228":{"name":"Border All"},"e229":{"name":"Border Bottom"},"e22a":{"name":"Border Clear"},"e22b":{"name":"Border Color"},"e22c":{"name":"Border Horizontal"},"e22d":{"name":"Border Inner"},"e22e":{"name":"Border Left"},"e22f":{"name":"Border Outer"},"e230":{"name":"Border Right"},"e231":{"name":"Border Style"},"e232":{"name":"Border Top"},"e233":{"name":"Border Vertical"},"e06b":{"name":"Branding Watermark"},"e3a6":{"name":"Brightness 1"},"e3a7":{"name":"Brightness 2"},"e3a8":{"name":"Brightness 3"},"e3a9":{"name":"Brightness 4"},"e3aa":{"name":"Brightness 5"},"e3ab":{"name":"Brightness 6"},"e3ac":{"name":"Brightness 7"},"e1ab":{"name":"Brightness Auto"},"e1ac":{"name":"Brightness High"},"e1ad":{"name":"Brightness Low"},"e1ae":{"name":"Brightness Medium"},"e3ad":{"name":"Broken Image"},"e3ae":{"name":"Brush"},"e6dd":{"name":"Bubble Chart"},"e868":{"name":"Bug Report"},"e869":{"name":"Build"},"e43c":{"name":"Burst Mode"},"e0af":{"name":"Business"},"eb3f":{"name":"Business Center"},"e86a":{"name":"Cached"},"e7e9":{"name":"Cake"},"e0b0":{"name":"Call"},"e0b1":{"name":"Call End"},"e0b2":{"name":"Call Made"},"e0b3":{"name":"Call Merge"},"e0b4":{"name":"Call Missed"},"e0e4":{"name":"Call Missed Outgoing"},"e0b5":{"name":"Call Received"},"e0b6":{"name":"Call Split"},"e06c":{"name":"Call To Action"},"e3af":{"name":"Camera"},"e3b0":{"name":"Camera Alt"},"e8fc":{"name":"Camera Enhance"},"e3b1":{"name":"Camera Front"},"e3b2":{"name":"Camera Rear"},"e3b3":{"name":"Camera Roll"},"e5c9":{"name":"Cancel"},"e8f6":{"name":"Card Giftcard"},"e8f7":{"name":"Card Membership"},"e8f8":{"name":"Card Travel"},"eb40":{"name":"Casino"},"e307":{"name":"Cast"},"e308":{"name":"Cast Connected"},"e3b4":{"name":"Center Focus Strong"},"e3b5":{"name":"Center Focus Weak"},"e86b":{"name":"Change History"},"e0b7":{"name":"Chat"},"e0ca":{"name":"Chat Bubble"},"e0cb":{"name":"Chat Bubble Outline"},"e5ca":{"name":"Check"},"e834":{"name":"Check Box"},"e835":{"name":"Check Box Outline Blank"},"e86c":{"name":"Check Circle"},"e5cb":{"name":"Chevron Left"},"e5cc":{"name":"Chevron Right"},"eb41":{"name":"Child Care"},"eb42":{"name":"Child Friendly"},"e86d":{"name":"Chrome Reader Mode"},"e86e":{"name":"Class"},"e14c":{"name":"Clear"},"e0b8":{"name":"Clear All"},"e5cd":{"name":"Close"},"e01c":{"name":"Closed Caption"},"e2bd":{"name":"Cloud"},"e2be":{"name":"Cloud Circle"},"e2bf":{"name":"Cloud Done"},"e2c0":{"name":"Cloud Download"},"e2c1":{"name":"Cloud Off"},"e2c2":{"name":"Cloud Queue"},"e2c3":{"name":"Cloud Upload"},"e86f":{"name":"Code"},"e3b6":{"name":"Collections"},"e431":{"name":"Collections Bookmark"},"e3b7":{"name":"Color Lens"},"e3b8":{"name":"Colorize"},"e0b9":{"name":"Comment"},"e3b9":{"name":"Compare"},"e915":{"name":"Compare Arrows"},"e30a":{"name":"Computer"},"e638":{"name":"Confirmation Number"},"e0d0":{"name":"Contact Mail"},"e0cf":{"name":"Contact Phone"},"e0ba":{"name":"Contacts"},"e14d":{"name":"Content Copy"},"e14e":{"name":"Content Cut"},"e14f":{"name":"Content Paste"},"e3ba":{"name":"Control Point"},"e3bb":{"name":"Control Point Duplicate"},"e90c":{"name":"Copyright"},"e150":{"name":"Create"},"e2cc":{"name":"Create New Folder"},"e870":{"name":"Credit Card"},"e3be":{"name":"Crop"},"e3bc":{"name":"Crop 16 9"},"e3bd":{"name":"Crop 3 2"},"e3bf":{"name":"Crop 5 4"},"e3c0":{"name":"Crop 7 5"},"e3c1":{"name":"Crop Din"},"e3c2":{"name":"Crop Free"},"e3c3":{"name":"Crop Landscape"},"e3c4":{"name":"Crop Original"},"e3c5":{"name":"Crop Portrait"},"e437":{"name":"Crop Rotate"},"e3c6":{"name":"Crop Square"},"e871":{"name":"Dashboard"},"e1af":{"name":"Data Usage"},"e916":{"name":"Date Range"},"e3c7":{"name":"Dehaze"},"e872":{"name":"Delete"},"e92b":{"name":"Delete Forever"},"e16c":{"name":"Delete Sweep"},"e873":{"name":"Description"},"e30b":{"name":"Desktop Mac"},"e30c":{"name":"Desktop Windows"},"e3c8":{"name":"Details"},"e30d":{"name":"Developer Board"},"e1b0":{"name":"Developer Mode"},"e335":{"name":"Device Hub"},"e1b1":{"name":"Devices"},"e337":{"name":"Devices Other"},"e0bb":{"name":"Dialer Sip"},"e0bc":{"name":"Dialpad"},"e52e":{"name":"Directions"},"e52f":{"name":"Directions Bike"},"e532":{"name":"Directions Boat"},"e530":{"name":"Directions Bus"},"e531":{"name":"Directions Car"},"e534":{"name":"Directions Railway"},"e566":{"name":"Directions Run"},"e533":{"name":"Directions Subway"},"e535":{"name":"Directions Transit"},"e536":{"name":"Directions Walk"},"e610":{"name":"Disc Full"},"e875":{"name":"Dns"},"e612":{"name":"Do Not Disturb"},"e611":{"name":"Do Not Disturb Alt"},"e643":{"name":"Do Not Disturb Off"},"e644":{"name":"Do Not Disturb On"},"e30e":{"name":"Dock"},"e7ee":{"name":"Domain"},"e876":{"name":"Done"},"e877":{"name":"Done All"},"e917":{"name":"Donut Large"},"e918":{"name":"Donut Small"},"e151":{"name":"Drafts"},"e25d":{"name":"Drag Handle"},"e613":{"name":"Drive Eta"},"e1b2":{"name":"Dvr"},"e3c9":{"name":"Edit"},"e568":{"name":"Edit Location"},"e8fb":{"name":"Eject"},"e0be":{"name":"Email"},"e63f":{"name":"Enhanced Encryption"},"e01d":{"name":"Equalizer"},"e000":{"name":"Error"},"e001":{"name":"Error Outline"},"e926":{"name":"Euro Symbol"},"e56d":{"name":"Ev Station"},"e878":{"name":"Event"},"e614":{"name":"Event Available"},"e615":{"name":"Event Busy"},"e616":{"name":"Event Note"},"e903":{"name":"Event Seat"},"e879":{"name":"Exit To App"},"e5ce":{"name":"Expand Less"},"e5cf":{"name":"Expand More"},"e01e":{"name":"Explicit"},"e87a":{"name":"Explore"},"e3ca":{"name":"Exposure"},"e3cb":{"name":"Exposure Neg 1"},"e3cc":{"name":"Exposure Neg 2"},"e3cd":{"name":"Exposure Plus 1"},"e3ce":{"name":"Exposure Plus 2"},"e3cf":{"name":"Exposure Zero"},"e87b":{"name":"Extension"},"e87c":{"name":"Face"},"e01f":{"name":"Fast Forward"},"e020":{"name":"Fast Rewind"},"e87d":{"name":"Favorite"},"e87e":{"name":"Favorite Border"},"e06d":{"name":"Featured Play List"},"e06e":{"name":"Featured Video"},"e87f":{"name":"Feedback"},"e05d":{"name":"Fiber Dvr"},"e061":{"name":"Fiber Manual Record"},"e05e":{"name":"Fiber New"},"e06a":{"name":"Fiber Pin"},"e062":{"name":"Fiber Smart Record"},"e2c4":{"name":"File Download"},"e2c6":{"name":"File Upload"},"e3d3":{"name":"Filter"},"e3d0":{"name":"Filter 1"},"e3d1":{"name":"Filter 2"},"e3d2":{"name":"Filter 3"},"e3d4":{"name":"Filter 4"},"e3d5":{"name":"Filter 5"},"e3d6":{"name":"Filter 6"},"e3d7":{"name":"Filter 7"},"e3d8":{"name":"Filter 8"},"e3d9":{"name":"Filter 9"},"e3da":{"name":"Filter 9 Plus"},"e3db":{"name":"Filter B And W"},"e3dc":{"name":"Filter Center Focus"},"e3dd":{"name":"Filter Drama"},"e3de":{"name":"Filter Frames"},"e3df":{"name":"Filter Hdr"},"e152":{"name":"Filter List"},"e3e0":{"name":"Filter None"},"e3e2":{"name":"Filter Tilt Shift"},"e3e3":{"name":"Filter Vintage"},"e880":{"name":"Find In Page"},"e881":{"name":"Find Replace"},"e90d":{"name":"Fingerprint"},"e5dc":{"name":"First Page"},"eb43":{"name":"Fitness Center"},"e153":{"name":"Flag"},"e3e4":{"name":"Flare"},"e3e5":{"name":"Flash Auto"},"e3e6":{"name":"Flash Off"},"e3e7":{"name":"Flash On"},"e539":{"name":"Flight"},"e904":{"name":"Flight Land"},"e905":{"name":"Flight Takeoff"},"e3e8":{"name":"Flip"},"e882":{"name":"Flip To Back"},"e883":{"name":"Flip To Front"},"e2c7":{"name":"Folder"},"e2c8":{"name":"Folder Open"},"e2c9":{"name":"Folder Shared"},"e617":{"name":"Folder Special"},"e167":{"name":"Font Download"},"e234":{"name":"Format Align Center"},"e235":{"name":"Format Align Justify"},"e236":{"name":"Format Align Left"},"e237":{"name":"Format Align Right"},"e238":{"name":"Format Bold"},"e239":{"name":"Format Clear"},"e23a":{"name":"Format Color Fill"},"e23b":{"name":"Format Color Reset"},"e23c":{"name":"Format Color Text"},"e23d":{"name":"Format Indent Decrease"},"e23e":{"name":"Format Indent Increase"},"e23f":{"name":"Format Italic"},"e240":{"name":"Format Line Spacing"},"e241":{"name":"Format List Bulleted"},"e242":{"name":"Format List Numbered"},"e243":{"name":"Format Paint"},"e244":{"name":"Format Quote"},"e25e":{"name":"Format Shapes"},"e245":{"name":"Format Size"},"e246":{"name":"Format Strikethrough"},"e247":{"name":"Format Textdirection L To R"},"e248":{"name":"Format Textdirection R To L"},"e249":{"name":"Format Underlined"},"e0bf":{"name":"Forum"},"e154":{"name":"Forward"},"e056":{"name":"Forward 10"},"e057":{"name":"Forward 30"},"e058":{"name":"Forward 5"},"eb44":{"name":"Free Breakfast"},"e5d0":{"name":"Fullscreen"},"e5d1":{"name":"Fullscreen Exit"},"e24a":{"name":"Functions"},"e927":{"name":"G Translate"},"e30f":{"name":"Gamepad"},"e021":{"name":"Games"},"e90e":{"name":"Gavel"},"e155":{"name":"Gesture"},"e884":{"name":"Get App"},"e908":{"name":"Gif"},"eb45":{"name":"Golf Course"},"e1b3":{"name":"Gps Fixed"},"e1b4":{"name":"Gps Not Fixed"},"e1b5":{"name":"Gps Off"},"e885":{"name":"Grade"},"e3e9":{"name":"Gradient"},"e3ea":{"name":"Grain"},"e1b8":{"name":"Graphic Eq"},"e3eb":{"name":"Grid Off"},"e3ec":{"name":"Grid On"},"e7ef":{"name":"Group"},"e7f0":{"name":"Group Add"},"e886":{"name":"Group Work"},"e052":{"name":"Hd"},"e3ed":{"name":"Hdr Off"},"e3ee":{"name":"Hdr On"},"e3f1":{"name":"Hdr Strong"},"e3f2":{"name":"Hdr Weak"},"e310":{"name":"Headset"},"e311":{"name":"Headset Mic"},"e3f3":{"name":"Healing"},"e023":{"name":"Hearing"},"e887":{"name":"Help"},"e8fd":{"name":"Help Outline"},"e024":{"name":"High Quality"},"e25f":{"name":"Highlight"},"e888":{"name":"Highlight Off"},"e889":{"name":"History"},"e88a":{"name":"Home"},"eb46":{"name":"Hot Tub"},"e53a":{"name":"Hotel"},"e88b":{"name":"Hourglass Empty"},"e88c":{"name":"Hourglass Full"},"e902":{"name":"Http"},"e88d":{"name":"Https"},"e3f4":{"name":"Image"},"e3f5":{"name":"Image Aspect Ratio"},"e0e0":{"name":"Import Contacts"},"e0c3":{"name":"Import Export"},"e912":{"name":"Important Devices"},"e156":{"name":"Inbox"},"e909":{"name":"Indeterminate Check Box"},"e88e":{"name":"Info"},"e88f":{"name":"Info Outline"},"e890":{"name":"Input"},"e24b":{"name":"Insert Chart"},"e24c":{"name":"Insert Comment"},"e24d":{"name":"Insert Drive File"},"e24e":{"name":"Insert Emoticon"},"e24f":{"name":"Insert Invitation"},"e250":{"name":"Insert Link"},"e251":{"name":"Insert Photo"},"e891":{"name":"Invert Colors"},"e0c4":{"name":"Invert Colors Off"},"e3f6":{"name":"Iso"},"e312":{"name":"Keyboard"},"e313":{"name":"Keyboard Arrow Down"},"e314":{"name":"Keyboard Arrow Left"},"e315":{"name":"Keyboard Arrow Right"},"e316":{"name":"Keyboard Arrow Up"},"e317":{"name":"Keyboard Backspace"},"e318":{"name":"Keyboard Capslock"},"e31a":{"name":"Keyboard Hide"},"e31b":{"name":"Keyboard Return"},"e31c":{"name":"Keyboard Tab"},"e31d":{"name":"Keyboard Voice"},"eb47":{"name":"Kitchen"},"e892":{"name":"Label"},"e893":{"name":"Label Outline"},"e3f7":{"name":"Landscape"},"e894":{"name":"Language"},"e31e":{"name":"Laptop"},"e31f":{"name":"Laptop Chromebook"},"e320":{"name":"Laptop Mac"},"e321":{"name":"Laptop Windows"},"e5dd":{"name":"Last Page"},"e895":{"name":"Launch"},"e53b":{"name":"Layers"},"e53c":{"name":"Layers Clear"},"e3f8":{"name":"Leak Add"},"e3f9":{"name":"Leak Remove"},"e3fa":{"name":"Lens"},"e02e":{"name":"Library Add"},"e02f":{"name":"Library Books"},"e030":{"name":"Library Music"},"e90f":{"name":"Lightbulb Outline"},"e919":{"name":"Line Style"},"e91a":{"name":"Line Weight"},"e260":{"name":"Linear Scale"},"e157":{"name":"Link"},"e438":{"name":"Linked Camera"},"e896":{"name":"List"},"e0c6":{"name":"Live Help"},"e639":{"name":"Live Tv"},"e53f":{"name":"Local Activity"},"e53d":{"name":"Local Airport"},"e53e":{"name":"Local Atm"},"e540":{"name":"Local Bar"},"e541":{"name":"Local Cafe"},"e542":{"name":"Local Car Wash"},"e543":{"name":"Local Convenience Store"},"e556":{"name":"Local Dining"},"e544":{"name":"Local Drink"},"e545":{"name":"Local Florist"},"e546":{"name":"Local Gas Station"},"e547":{"name":"Local Grocery Store"},"e548":{"name":"Local Hospital"},"e549":{"name":"Local Hotel"},"e54a":{"name":"Local Laundry Service"},"e54b":{"name":"Local Library"},"e54c":{"name":"Local Mall"},"e54d":{"name":"Local Movies"},"e54e":{"name":"Local Offer"},"e54f":{"name":"Local Parking"},"e550":{"name":"Local Pharmacy"},"e551":{"name":"Local Phone"},"e552":{"name":"Local Pizza"},"e553":{"name":"Local Play"},"e554":{"name":"Local Post Office"},"e555":{"name":"Local Printshop"},"e557":{"name":"Local See"},"e558":{"name":"Local Shipping"},"e559":{"name":"Local Taxi"},"e7f1":{"name":"Location City"},"e1b6":{"name":"Location Disabled"},"e0c7":{"name":"Location Off"},"e0c8":{"name":"Location On"},"e1b7":{"name":"Location Searching"},"e897":{"name":"Lock"},"e898":{"name":"Lock Open"},"e899":{"name":"Lock Outline"},"e3fc":{"name":"Looks"},"e3fb":{"name":"Looks 3"},"e3fd":{"name":"Looks 4"},"e3fe":{"name":"Looks 5"},"e3ff":{"name":"Looks 6"},"e400":{"name":"Looks One"},"e401":{"name":"Looks Two"},"e028":{"name":"Loop"},"e402":{"name":"Loupe"},"e16d":{"name":"Low Priority"},"e89a":{"name":"Loyalty"},"e158":{"name":"Mail"},"e0e1":{"name":"Mail Outline"},"e55b":{"name":"Map"},"e159":{"name":"Markunread"},"e89b":{"name":"Markunread Mailbox"},"e322":{"name":"Memory"},"e5d2":{"name":"Menu"},"e252":{"name":"Merge Type"},"e0c9":{"name":"Message"},"e029":{"name":"Mic"},"e02a":{"name":"Mic None"},"e02b":{"name":"Mic Off"},"e618":{"name":"Mms"},"e253":{"name":"Mode Comment"},"e254":{"name":"Mode Edit"},"e263":{"name":"Monetization On"},"e25c":{"name":"Money Off"},"e403":{"name":"Monochrome Photos"},"e7f2":{"name":"Mood"},"e7f3":{"name":"Mood Bad"},"e619":{"name":"More"},"e5d3":{"name":"More Horiz"},"e5d4":{"name":"More Vert"},"e91b":{"name":"Motorcycle"},"e323":{"name":"Mouse"},"e168":{"name":"Move To Inbox"},"e02c":{"name":"Movie"},"e404":{"name":"Movie Creation"},"e43a":{"name":"Movie Filter"},"e6df":{"name":"Multiline Chart"},"e405":{"name":"Music Note"},"e063":{"name":"Music Video"},"e55c":{"name":"My Location"},"e406":{"name":"Nature"},"e407":{"name":"Nature People"},"e408":{"name":"Navigate Before"},"e409":{"name":"Navigate Next"},"e55d":{"name":"Navigation"},"e569":{"name":"Near Me"},"e1b9":{"name":"Network Cell"},"e640":{"name":"Network Check"},"e61a":{"name":"Network Locked"},"e1ba":{"name":"Network Wifi"},"e031":{"name":"New Releases"},"e16a":{"name":"Next Week"},"e1bb":{"name":"Nfc"},"e641":{"name":"No Encryption"},"e0cc":{"name":"No Sim"},"e033":{"name":"Not Interested"},"e06f":{"name":"Note"},"e89c":{"name":"Note Add"},"e7f4":{"name":"Notifications"},"e7f7":{"name":"Notifications Active"},"e7f5":{"name":"Notifications None"},"e7f6":{"name":"Notifications Off"},"e7f8":{"name":"Notifications Paused"},"e90a":{"name":"Offline Pin"},"e63a":{"name":"Ondemand Video"},"e91c":{"name":"Opacity"},"e89d":{"name":"Open In Browser"},"e89e":{"name":"Open In New"},"e89f":{"name":"Open With"},"e7f9":{"name":"Pages"},"e8a0":{"name":"Pageview"},"e40a":{"name":"Palette"},"e925":{"name":"Pan Tool"},"e40b":{"name":"Panorama"},"e40c":{"name":"Panorama Fish Eye"},"e40d":{"name":"Panorama Horizontal"},"e40e":{"name":"Panorama Vertical"},"e40f":{"name":"Panorama Wide Angle"},"e7fa":{"name":"Party Mode"},"e034":{"name":"Pause"},"e035":{"name":"Pause Circle Filled"},"e036":{"name":"Pause Circle Outline"},"e8a1":{"name":"Payment"},"e7fb":{"name":"People"},"e7fc":{"name":"People Outline"},"e8a2":{"name":"Perm Camera Mic"},"e8a3":{"name":"Perm Contact Calendar"},"e8a4":{"name":"Perm Data Setting"},"e8a5":{"name":"Perm Device Information"},"e8a6":{"name":"Perm Identity"},"e8a7":{"name":"Perm Media"},"e8a8":{"name":"Perm Phone Msg"},"e8a9":{"name":"Perm Scan Wifi"},"e7fd":{"name":"Person"},"e7fe":{"name":"Person Add"},"e7ff":{"name":"Person Outline"},"e55a":{"name":"Person Pin"},"e56a":{"name":"Person Pin Circle"},"e63b":{"name":"Personal Video"},"e91d":{"name":"Pets"},"e0cd":{"name":"Phone"},"e324":{"name":"Phone Android"},"e61b":{"name":"Phone Bluetooth Speaker"},"e61c":{"name":"Phone Forwarded"},"e61d":{"name":"Phone In Talk"},"e325":{"name":"Phone Iphone"},"e61e":{"name":"Phone Locked"},"e61f":{"name":"Phone Missed"},"e620":{"name":"Phone Paused"},"e326":{"name":"Phonelink"},"e0db":{"name":"Phonelink Erase"},"e0dc":{"name":"Phonelink Lock"},"e327":{"name":"Phonelink Off"},"e0dd":{"name":"Phonelink Ring"},"e0de":{"name":"Phonelink Setup"},"e410":{"name":"Photo"},"e411":{"name":"Photo Album"},"e412":{"name":"Photo Camera"},"e43b":{"name":"Photo Filter"},"e413":{"name":"Photo Library"},"e432":{"name":"Photo Size Select Actual"},"e433":{"name":"Photo Size Select Large"},"e434":{"name":"Photo Size Select Small"},"e415":{"name":"Picture As Pdf"},"e8aa":{"name":"Picture In Picture"},"e911":{"name":"Picture In Picture Alt"},"e6c4":{"name":"Pie Chart"},"e6c5":{"name":"Pie Chart Outlined"},"e55e":{"name":"Pin Drop"},"e55f":{"name":"Place"},"e037":{"name":"Play Arrow"},"e038":{"name":"Play Circle Filled"},"e039":{"name":"Play Circle Outline"},"e906":{"name":"Play For Work"},"e03b":{"name":"Playlist Add"},"e065":{"name":"Playlist Add Check"},"e05f":{"name":"Playlist Play"},"e800":{"name":"Plus One"},"e801":{"name":"Poll"},"e8ab":{"name":"Polymer"},"eb48":{"name":"Pool"},"e0ce":{"name":"Portable Wifi Off"},"e416":{"name":"Portrait"},"e63c":{"name":"Power"},"e336":{"name":"Power Input"},"e8ac":{"name":"Power Settings New"},"e91e":{"name":"Pregnant Woman"},"e0df":{"name":"Present To All"},"e8ad":{"name":"Print"},"e645":{"name":"Priority High"},"e80b":{"name":"Public"},"e255":{"name":"Publish"},"e8ae":{"name":"Query Builder"},"e8af":{"name":"Question Answer"},"e03c":{"name":"Queue"},"e03d":{"name":"Queue Music"},"e066":{"name":"Queue Play Next"},"e03e":{"name":"Radio"},"e837":{"name":"Radio Button Checked"},"e836":{"name":"Radio Button Unchecked"},"e560":{"name":"Rate Review"},"e8b0":{"name":"Receipt"},"e03f":{"name":"Recent Actors"},"e91f":{"name":"Record Voice Over"},"e8b1":{"name":"Redeem"},"e15a":{"name":"Redo"},"e5d5":{"name":"Refresh"},"e15b":{"name":"Remove"},"e15c":{"name":"Remove Circle"},"e15d":{"name":"Remove Circle Outline"},"e067":{"name":"Remove From Queue"},"e417":{"name":"Remove Red Eye"},"e928":{"name":"Remove Shopping Cart"},"e8fe":{"name":"Reorder"},"e040":{"name":"Repeat"},"e041":{"name":"Repeat One"},"e042":{"name":"Replay"},"e059":{"name":"Replay 10"},"e05a":{"name":"Replay 30"},"e05b":{"name":"Replay 5"},"e15e":{"name":"Reply"},"e15f":{"name":"Reply All"},"e160":{"name":"Report"},"e8b2":{"name":"Report Problem"},"e56c":{"name":"Restaurant"},"e561":{"name":"Restaurant Menu"},"e8b3":{"name":"Restore"},"e929":{"name":"Restore Page"},"e0d1":{"name":"Ring Volume"},"e8b4":{"name":"Room"},"eb49":{"name":"Room Service"},"e418":{"name":"Rotate 90 Degrees Ccw"},"e419":{"name":"Rotate Left"},"e41a":{"name":"Rotate Right"},"e920":{"name":"Rounded Corner"},"e328":{"name":"Router"},"e921":{"name":"Rowing"},"e0e5":{"name":"Rss Feed"},"e642":{"name":"Rv Hookup"},"e562":{"name":"Satellite"},"e161":{"name":"Save"},"e329":{"name":"Scanner"},"e8b5":{"name":"Schedule"},"e80c":{"name":"School"},"e1be":{"name":"Screen Lock Landscape"},"e1bf":{"name":"Screen Lock Portrait"},"e1c0":{"name":"Screen Lock Rotation"},"e1c1":{"name":"Screen Rotation"},"e0e2":{"name":"Screen Share"},"e623":{"name":"Sd Card"},"e1c2":{"name":"Sd Storage"},"e8b6":{"name":"Search"},"e32a":{"name":"Security"},"e162":{"name":"Select All"},"e163":{"name":"Send"},"e811":{"name":"Sentiment Dissatisfied"},"e812":{"name":"Sentiment Neutral"},"e813":{"name":"Sentiment Satisfied"},"e814":{"name":"Sentiment Very Dissatisfied"},"e815":{"name":"Sentiment Very Satisfied"},"e8b8":{"name":"Settings"},"e8b9":{"name":"Settings Applications"},"e8ba":{"name":"Settings Backup Restore"},"e8bb":{"name":"Settings Bluetooth"},"e8bd":{"name":"Settings Brightness"},"e8bc":{"name":"Settings Cell"},"e8be":{"name":"Settings Ethernet"},"e8bf":{"name":"Settings Input Antenna"},"e8c0":{"name":"Settings Input Component"},"e8c1":{"name":"Settings Input Composite"},"e8c2":{"name":"Settings Input Hdmi"},"e8c3":{"name":"Settings Input Svideo"},"e8c4":{"name":"Settings Overscan"},"e8c5":{"name":"Settings Phone"},"e8c6":{"name":"Settings Power"},"e8c7":{"name":"Settings Remote"},"e1c3":{"name":"Settings System Daydream"},"e8c8":{"name":"Settings Voice"},"e80d":{"name":"Share"},"e8c9":{"name":"Shop"},"e8ca":{"name":"Shop Two"},"e8cb":{"name":"Shopping Basket"},"e8cc":{"name":"Shopping Cart"},"e261":{"name":"Short Text"},"e6e1":{"name":"Show Chart"},"e043":{"name":"Shuffle"},"e1c8":{"name":"Signal Cellular 4 Bar"},"e1cd":{"name":"Signal Cellular Connected No Internet 4 Bar"},"e1ce":{"name":"Signal Cellular No Sim"},"e1cf":{"name":"Signal Cellular Null"},"e1d0":{"name":"Signal Cellular Off"},"e1d8":{"name":"Signal Wifi 4 Bar"},"e1d9":{"name":"Signal Wifi 4 Bar Lock"},"e1da":{"name":"Signal Wifi Off"},"e32b":{"name":"Sim Card"},"e624":{"name":"Sim Card Alert"},"e044":{"name":"Skip Next"},"e045":{"name":"Skip Previous"},"e41b":{"name":"Slideshow"},"e068":{"name":"Slow Motion Video"},"e32c":{"name":"Smartphone"},"eb4a":{"name":"Smoke Free"},"eb4b":{"name":"Smoking Rooms"},"e625":{"name":"Sms"},"e626":{"name":"Sms Failed"},"e046":{"name":"Snooze"},"e164":{"name":"Sort"},"e053":{"name":"Sort By Alpha"},"eb4c":{"name":"Spa"},"e256":{"name":"Space Bar"},"e32d":{"name":"Speaker"},"e32e":{"name":"Speaker Group"},"e8cd":{"name":"Speaker Notes"},"e92a":{"name":"Speaker Notes Off"},"e0d2":{"name":"Speaker Phone"},"e8ce":{"name":"Spellcheck"},"e838":{"name":"Star"},"e83a":{"name":"Star Border"},"e839":{"name":"Star Half"},"e8d0":{"name":"Stars"},"e0d3":{"name":"Stay Current Landscape"},"e0d4":{"name":"Stay Current Portrait"},"e0d5":{"name":"Stay Primary Landscape"},"e0d6":{"name":"Stay Primary Portrait"},"e047":{"name":"Stop"},"e0e3":{"name":"Stop Screen Share"},"e1db":{"name":"Storage"},"e8d1":{"name":"Store"},"e563":{"name":"Store Mall Directory"},"e41c":{"name":"Straighten"},"e56e":{"name":"Streetview"},"e257":{"name":"Strikethrough S"},"e41d":{"name":"Style"},"e5d9":{"name":"Subdirectory Arrow Left"},"e5da":{"name":"Subdirectory Arrow Right"},"e8d2":{"name":"Subject"},"e064":{"name":"Subscriptions"},"e048":{"name":"Subtitles"},"e56f":{"name":"Subway"},"e8d3":{"name":"Supervisor Account"},"e049":{"name":"Surround Sound"},"e0d7":{"name":"Swap Calls"},"e8d4":{"name":"Swap Horiz"},"e8d5":{"name":"Swap Vert"},"e8d6":{"name":"Swap Vertical Circle"},"e41e":{"name":"Switch Camera"},"e41f":{"name":"Switch Video"},"e627":{"name":"Sync"},"e628":{"name":"Sync Disabled"},"e629":{"name":"Sync Problem"},"e62a":{"name":"System Update"},"e8d7":{"name":"System Update Alt"},"e8d8":{"name":"Tab"},"e8d9":{"name":"Tab Unselected"},"e32f":{"name":"Tablet"},"e330":{"name":"Tablet Android"},"e331":{"name":"Tablet Mac"},"e420":{"name":"Tag Faces"},"e62b":{"name":"Tap And Play"},"e564":{"name":"Terrain"},"e262":{"name":"Text Fields"},"e165":{"name":"Text Format"},"e0d8":{"name":"Textsms"},"e421":{"name":"Texture"},"e8da":{"name":"Theaters"},"e8db":{"name":"Thumb Down"},"e8dc":{"name":"Thumb Up"},"e8dd":{"name":"Thumbs Up Down"},"e62c":{"name":"Time To Leave"},"e422":{"name":"Timelapse"},"e922":{"name":"Timeline"},"e425":{"name":"Timer"},"e423":{"name":"Timer 10"},"e424":{"name":"Timer 3"},"e426":{"name":"Timer Off"},"e264":{"name":"Title"},"e8de":{"name":"Toc"},"e8df":{"name":"Today"},"e8e0":{"name":"Toll"},"e427":{"name":"Tonality"},"e913":{"name":"Touch App"},"e332":{"name":"Toys"},"e8e1":{"name":"Track Changes"},"e565":{"name":"Traffic"},"e570":{"name":"Train"},"e571":{"name":"Tram"},"e572":{"name":"Transfer Within A Station"},"e428":{"name":"Transform"},"e8e2":{"name":"Translate"},"e8e3":{"name":"Trending Down"},"e8e4":{"name":"Trending Flat"},"e8e5":{"name":"Trending Up"},"e429":{"name":"Tune"},"e8e6":{"name":"Turned In"},"e8e7":{"name":"Turned In Not"},"e333":{"name":"Tv"},"e169":{"name":"Unarchive"},"e166":{"name":"Undo"},"e5d6":{"name":"Unfold Less"},"e5d7":{"name":"Unfold More"},"e923":{"name":"Update"},"e1e0":{"name":"Usb"},"e8e8":{"name":"Verified User"},"e258":{"name":"Vertical Align Bottom"},"e259":{"name":"Vertical Align Center"},"e25a":{"name":"Vertical Align Top"},"e62d":{"name":"Vibration"},"e070":{"name":"Video Call"},"e071":{"name":"Video Label"},"e04a":{"name":"Video Library"},"e04b":{"name":"Videocam"},"e04c":{"name":"Videocam Off"},"e338":{"name":"Videogame Asset"},"e8e9":{"name":"View Agenda"},"e8ea":{"name":"View Array"},"e8eb":{"name":"View Carousel"},"e8ec":{"name":"View Column"},"e42a":{"name":"View Comfy"},"e42b":{"name":"View Compact"},"e8ed":{"name":"View Day"},"e8ee":{"name":"View Headline"},"e8ef":{"name":"View List"},"e8f0":{"name":"View Module"},"e8f1":{"name":"View Quilt"},"e8f2":{"name":"View Stream"},"e8f3":{"name":"View Week"},"e435":{"name":"Vignette"},"e8f4":{"name":"Visibility"},"e8f5":{"name":"Visibility Off"},"e62e":{"name":"Voice Chat"},"e0d9":{"name":"Voicemail"},"e04d":{"name":"Volume Down"},"e04e":{"name":"Volume Mute"},"e04f":{"name":"Volume Off"},"e050":{"name":"Volume Up"},"e0da":{"name":"Vpn Key"},"e62f":{"name":"Vpn Lock"},"e1bc":{"name":"Wallpaper"},"e002":{"name":"Warning"},"e334":{"name":"Watch"},"e924":{"name":"Watch Later"},"e42c":{"name":"Wb Auto"},"e42d":{"name":"Wb Cloudy"},"e42e":{"name":"Wb Incandescent"},"e436":{"name":"Wb Iridescent"},"e430":{"name":"Wb Sunny"},"e63d":{"name":"Wc"},"e051":{"name":"Web"},"e069":{"name":"Web Asset"},"e16b":{"name":"Weekend"},"e80e":{"name":"Whatshot"},"e1bd":{"name":"Widgets"},"e63e":{"name":"Wifi"},"e1e1":{"name":"Wifi Lock"},"e1e2":{"name":"Wifi Tethering"},"e8f9":{"name":"Work"},"e25b":{"name":"Wrap Text"},"e8fa":{"name":"Youtube Searched For"},"e8ff":{"name":"Zoom In"},"e900":{"name":"Zoom Out"},"e56b":{"name":"Zoom Out Map"}}} \ No newline at end of file diff --git a/src/assets/icon/MaterialIcons-Regular.svg b/src/assets/icon/MaterialIcons-Regular.svg new file mode 100644 index 0000000..a449327 --- /dev/null +++ b/src/assets/icon/MaterialIcons-Regular.svg @@ -0,0 +1,2373 @@ + + + + + +Created by FontForge 20151118 at Mon Feb 8 11:58:02 2016 + By shyndman +Copyright 2015 Google, Inc. All Rights Reserved. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/icon/MaterialIcons-Regular.ttf b/src/assets/icon/MaterialIcons-Regular.ttf new file mode 100644 index 0000000..7015564 Binary files /dev/null and b/src/assets/icon/MaterialIcons-Regular.ttf differ diff --git a/src/assets/icon/MaterialIcons-Regular.woff b/src/assets/icon/MaterialIcons-Regular.woff new file mode 100644 index 0000000..b648a3e Binary files /dev/null and b/src/assets/icon/MaterialIcons-Regular.woff differ diff --git a/src/assets/icon/MaterialIcons-Regular.woff2 b/src/assets/icon/MaterialIcons-Regular.woff2 new file mode 100644 index 0000000..9fa2112 Binary files /dev/null and b/src/assets/icon/MaterialIcons-Regular.woff2 differ diff --git a/src/assets/icon/material-icons.css b/src/assets/icon/material-icons.css new file mode 100644 index 0000000..f028ea2 --- /dev/null +++ b/src/assets/icon/material-icons.css @@ -0,0 +1,36 @@ +@font-face { + font-family: 'Material Icons'; + font-style: normal; + font-weight: 400; + src: url(./MaterialIcons-Regular.eot); /* For IE6-8 */ + src: local('Material Icons'), + local('MaterialIcons-Regular'), + url(./MaterialIcons-Regular.woff2) format('woff2'), + url(./MaterialIcons-Regular.woff) format('woff'), + url(./MaterialIcons-Regular.ttf) format('truetype'); +} + +.material-icons { + font-family: 'Material Icons'; + font-weight: normal; + font-style: normal; + font-size: 24px; /* Preferred icon size */ + display: inline-block; + line-height: 1; + text-transform: none; + letter-spacing: normal; + word-wrap: normal; + white-space: nowrap; + direction: ltr; + + /* Support for all WebKit browsers. */ + -webkit-font-smoothing: antialiased; + /* Support for Safari and Chrome. */ + text-rendering: optimizeLegibility; + + /* Support for Firefox. */ + -moz-osx-font-smoothing: grayscale; + + /* Support for IE. */ + font-feature-settings: 'liga'; +} 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/enterPaintButton.png b/src/assets/images/enterPaintButton.png new file mode 100644 index 0000000..e6b99b7 Binary files /dev/null and b/src/assets/images/enterPaintButton.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/fire.png b/src/assets/images/fire.png new file mode 100644 index 0000000..5f53024 Binary files /dev/null and b/src/assets/images/fire.png differ diff --git a/src/assets/images/force.png b/src/assets/images/force.png new file mode 100644 index 0000000..638295d Binary files /dev/null and b/src/assets/images/force.png differ diff --git a/src/assets/images/handle-fixed.png b/src/assets/images/handle-fixed.png new file mode 100644 index 0000000..b4b600b Binary files /dev/null and b/src/assets/images/handle-fixed.png differ diff --git a/src/assets/images/handle-main.png b/src/assets/images/handle-main.png new file mode 100644 index 0000000..ee067ff Binary files /dev/null and b/src/assets/images/handle-main.png differ diff --git a/src/assets/images/handle-secondary.png b/src/assets/images/handle-secondary.png new file mode 100644 index 0000000..b4a3090 Binary files /dev/null and b/src/assets/images/handle-secondary.png differ diff --git a/src/assets/images/handle-terminal.png b/src/assets/images/handle-terminal.png new file mode 100644 index 0000000..ec03b31 Binary files /dev/null and b/src/assets/images/handle-terminal.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/noFire.png b/src/assets/images/noFire.png new file mode 100644 index 0000000..f31e362 Binary files /dev/null and b/src/assets/images/noFire.png differ diff --git a/src/assets/images/noForce.png b/src/assets/images/noForce.png new file mode 100644 index 0000000..5ad54cf Binary files /dev/null and b/src/assets/images/noForce.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..b93b2a9 --- /dev/null +++ b/src/index.html @@ -0,0 +1,18 @@ + + + + + 数字化预案编制管理平台 + + + + + + + + + + + + + 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..e402cd7 --- /dev/null +++ b/src/styles.scss @@ -0,0 +1,87 @@ + +@import './app/theme.scss'; +@import "./app/ngZorroTree.css"; /* 引入组件样式 */ +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; +} + +//滚动条样式 +::-webkit-scrollbar{ + width: 5px; + background-color: white; +} +::-webkit-scrollbar-thumb{ + background-color: #999; +} + +//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=